gitlab.com/CoiaPrant/sqlite3@v1.19.1/internal/testfixture/testfixture_linux_arm64.go (about) 1 // Code generated by 'ccgo -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_SERIES_CONSTRAINT_VERIFY=1 -DSQLITE_SERVER=1 -DTCLSH_INIT_PROC=sqlite3TestInit -D_HAVE_SQLITE_CONFIG_H -I/usr/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_arm64.go -Itestdata/sqlite-src-3390300/ext/async -Itestdata/sqlite-src-3390300/ext/fts3 -Itestdata/sqlite-src-3390300/ext/icu -Itestdata/sqlite-src-3390300/ext/rtree -Itestdata/sqlite-src-3390300/ext/session -Itestdata/sqlite-src-3390300/ext/userauth -Itestdata/sqlite-src-3390300/src -Itestdata/sqlite-amalgamation-3390300 -Itestdata/sqlite-src-3390300 -full-path-comments testdata/sqlite-src-3390300/ext/expert/sqlite3expert.c testdata/sqlite-src-3390300/ext/expert/test_expert.c testdata/sqlite-src-3390300/ext/fts3/fts3_term.c testdata/sqlite-src-3390300/ext/fts3/fts3_test.c testdata/sqlite-src-3390300/ext/fts5/fts5_tcl.c testdata/sqlite-src-3390300/ext/fts5/fts5_test_mi.c testdata/sqlite-src-3390300/ext/fts5/fts5_test_tok.c testdata/sqlite-src-3390300/ext/misc/appendvfs.c testdata/sqlite-src-3390300/ext/misc/amatch.c testdata/sqlite-src-3390300/ext/misc/carray.c testdata/sqlite-src-3390300/ext/misc/cksumvfs.c testdata/sqlite-src-3390300/ext/misc/closure.c testdata/sqlite-src-3390300/ext/misc/csv.c testdata/sqlite-src-3390300/ext/misc/decimal.c testdata/sqlite-src-3390300/ext/misc/eval.c testdata/sqlite-src-3390300/ext/misc/explain.c testdata/sqlite-src-3390300/ext/misc/fileio.c testdata/sqlite-src-3390300/ext/misc/fuzzer.c testdata/sqlite-src-3390300/ext/misc/ieee754.c testdata/sqlite-src-3390300/ext/misc/mmapwarm.c testdata/sqlite-src-3390300/ext/misc/nextchar.c testdata/sqlite-src-3390300/ext/misc/normalize.c testdata/sqlite-src-3390300/ext/misc/percentile.c testdata/sqlite-src-3390300/ext/misc/prefixes.c testdata/sqlite-src-3390300/ext/misc/qpvtab.c testdata/sqlite-src-3390300/ext/misc/regexp.c testdata/sqlite-src-3390300/ext/misc/remember.c testdata/sqlite-src-3390300/ext/misc/series.c testdata/sqlite-src-3390300/ext/misc/spellfix.c testdata/sqlite-src-3390300/ext/misc/totype.c testdata/sqlite-src-3390300/ext/misc/unionvtab.c testdata/sqlite-src-3390300/ext/misc/wholenumber.c testdata/sqlite-src-3390300/ext/rbu/test_rbu.c testdata/sqlite-src-3390300/ext/rtree/test_rtreedoc.c testdata/sqlite-src-3390300/ext/session/test_session.c testdata/sqlite-src-3390300/ext/userauth/userauth.c testdata/sqlite-src-3390300/src/tclsqlite.c testdata/sqlite-src-3390300/src/test1.c testdata/sqlite-src-3390300/src/test2.c testdata/sqlite-src-3390300/src/test3.c testdata/sqlite-src-3390300/src/test4.c testdata/sqlite-src-3390300/src/test5.c testdata/sqlite-src-3390300/src/test6.c testdata/sqlite-src-3390300/src/test7.c testdata/sqlite-src-3390300/src/test8.c testdata/sqlite-src-3390300/src/test9.c testdata/sqlite-src-3390300/src/test_async.c testdata/sqlite-src-3390300/src/test_autoext.c testdata/sqlite-src-3390300/src/test_backup.c testdata/sqlite-src-3390300/src/test_bestindex.c testdata/sqlite-src-3390300/src/test_blob.c testdata/sqlite-src-3390300/src/test_btree.c testdata/sqlite-src-3390300/src/test_config.c testdata/sqlite-src-3390300/src/test_delete.c testdata/sqlite-src-3390300/src/test_demovfs.c testdata/sqlite-src-3390300/src/test_devsym.c testdata/sqlite-src-3390300/src/test_fs.c testdata/sqlite-src-3390300/src/test_func.c testdata/sqlite-src-3390300/src/test_hexio.c testdata/sqlite-src-3390300/src/test_init.c testdata/sqlite-src-3390300/src/test_intarray.c testdata/sqlite-src-3390300/src/test_journal.c testdata/sqlite-src-3390300/src/test_malloc.c testdata/sqlite-src-3390300/src/test_md5.c testdata/sqlite-src-3390300/src/test_multiplex.c testdata/sqlite-src-3390300/src/test_mutex.c testdata/sqlite-src-3390300/src/test_onefile.c testdata/sqlite-src-3390300/src/test_osinst.c testdata/sqlite-src-3390300/src/test_pcache.c testdata/sqlite-src-3390300/src/test_quota.c testdata/sqlite-src-3390300/src/test_rtree.c testdata/sqlite-src-3390300/src/test_schema.c testdata/sqlite-src-3390300/src/test_server.c testdata/sqlite-src-3390300/src/test_superlock.c testdata/sqlite-src-3390300/src/test_syscall.c testdata/sqlite-src-3390300/src/test_tclsh.c testdata/sqlite-src-3390300/src/test_tclvar.c testdata/sqlite-src-3390300/src/test_thread.c testdata/sqlite-src-3390300/src/test_vdbecov.c testdata/sqlite-src-3390300/src/test_vfs.c testdata/sqlite-src-3390300/src/test_windirent.c testdata/sqlite-src-3390300/src/test_window.c testdata/sqlite-src-3390300/src/test_wsd.c -DNDEBUG -DHAVE_USLEEP -DLONGDOUBLE_TYPE=double -DSQLITE_CKSUMVFS_STATIC -DSQLITE_CORE -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_PAGE_SIZE=1024 -DSQLITE_ENABLE_BYTECODE_VTAB -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_DESERIALIZE -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_ENABLE_MEMORY_MANAGEMENT -DSQLITE_ENABLE_OFFSET_SQL_FUNC -DSQLITE_ENABLE_PREUPDATE_HOOK -DSQLITE_ENABLE_RBU -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_SNAPSHOT -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_MUTEX_APPDEF=1 -DSQLITE_MUTEX_NOOP -DSQLITE_SOUNDEX -DSQLITE_TEMP_STORE=1 -DSQLITE_TEST -DSQLITE_THREADSAFE=1', DO NOT EDIT. 2 3 package main 4 5 import ( 6 "math" 7 "reflect" 8 "sync/atomic" 9 "unsafe" 10 11 "modernc.org/libc" 12 "modernc.org/libc/sys/types" 13 "gitlab.com/CoiaPrant/sqlite3/libtest" 14 "modernc.org/tcl/lib" 15 ) 16 17 var _ = math.Pi 18 var _ reflect.Kind 19 var _ atomic.Value 20 var _ unsafe.Pointer 21 var _ *libc.TLS 22 var _ types.Size_t 23 24 func main() { libc.Start(main1) } 25 26 const ( 27 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_IOFBF = 0 579 X_IOLBF = 1 580 X_IONBF = 2 581 X_IO_EOF_SEEN = 0x0010 582 X_IO_ERR_SEEN = 0x0020 583 X_IO_USER_LOCK = 0x8000 584 X_LP64 = 1 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 Linux = 1 608 Unix = 1 609 CRTIMPORT = 0 610 DLLIMPORT = 0 611 INLINE = 0 612 MP_DIGIT_DECLARED = 0 613 MP_INT_DECLARED = 0 614 NUM_STATIC_TOKENS = 20 615 SQLITE_TCLAPI = 0 616 TCL_ALLOW_INLINE_COMPILATION = 0x20000 617 TCL_ALL_EVENTS = -3 618 TCL_ALPHA_RELEASE = 0 619 TCL_APPEND_VALUE = 4 620 TCL_ARGV_CONSTANT = 15 621 TCL_ARGV_END = 23 622 TCL_ARGV_FLOAT = 19 623 TCL_ARGV_FUNC = 20 624 TCL_ARGV_GENFUNC = 21 625 TCL_ARGV_HELP = 22 626 TCL_ARGV_INT = 16 627 TCL_ARGV_REST = 18 628 TCL_ARGV_STRING = 17 629 TCL_BETA_RELEASE = 1 630 TCL_BREAK = 3 631 TCL_CANCEL_UNWIND = 0x100000 632 TCL_CHANNEL_THREAD_INSERT = 0 633 TCL_CHANNEL_THREAD_REMOVE = 1 634 TCL_CLOSE_READ = 2 635 TCL_CLOSE_WRITE = 4 636 TCL_CONTINUE = 4 637 TCL_CONVERT_MULTIBYTE = -1 638 TCL_CONVERT_NOSPACE = -4 639 TCL_CONVERT_SYNTAX = -2 640 TCL_CONVERT_UNKNOWN = -3 641 TCL_CREATE_HARD_LINK = 0x02 642 TCL_CREATE_SYMBOLIC_LINK = 0x01 643 TCL_CUSTOM_PTR_KEYS = -1 644 TCL_CUSTOM_TYPE_KEYS = -2 645 TCL_DONT_QUOTE_HASH = 8 646 TCL_DONT_USE_BRACES = 1 647 TCL_DONT_WAIT = 2 648 TCL_DOUBLE_SPACE = 27 649 TCL_DSTRING_STATIC_SIZE = 200 650 TCL_ENCODING_CHAR_LIMIT = 0x10 651 TCL_ENCODING_END = 0x02 652 TCL_ENCODING_NO_TERMINATE = 0x08 653 TCL_ENCODING_START = 0x01 654 TCL_ENCODING_STOPONERROR = 0x04 655 TCL_ENFORCE_MODE = 16 656 TCL_ENSEMBLE_PREFIX = 0x02 657 TCL_ERROR = 1 658 TCL_EVAL_DIRECT = 0x040000 659 TCL_EVAL_GLOBAL = 0x020000 660 TCL_EVAL_INVOKE = 0x080000 661 TCL_EVAL_NOERR = 0x200000 662 TCL_EXACT = 1 663 TCL_EXCEPTION = 8 664 TCL_FILE_EVENTS = 8 665 TCL_FINAL_RELEASE = 2 666 TCL_GLOBAL_ONLY = 1 667 TCL_GLOB_PERM_HIDDEN = 2 668 TCL_GLOB_PERM_R = 4 669 TCL_GLOB_PERM_RONLY = 1 670 TCL_GLOB_PERM_W = 8 671 TCL_GLOB_PERM_X = 16 672 TCL_GLOB_TYPE_BLOCK = 1 673 TCL_GLOB_TYPE_CHAR = 2 674 TCL_GLOB_TYPE_DIR = 4 675 TCL_GLOB_TYPE_FILE = 16 676 TCL_GLOB_TYPE_LINK = 32 677 TCL_GLOB_TYPE_MOUNT = 128 678 TCL_GLOB_TYPE_PIPE = 8 679 TCL_GLOB_TYPE_SOCK = 64 680 TCL_HASH_KEY_RANDOMIZE_HASH = 0x1 681 TCL_HASH_KEY_STORE_HASH = 1 682 TCL_HASH_KEY_SYSTEM_HASH = 0x2 683 TCL_HASH_KEY_TYPE_VERSION = 1 684 TCL_IDLE_EVENTS = 32 685 TCL_INTEGER_SPACE = 24 686 TCL_INTERP_DESTROYED = 0x100 687 TCL_LEAVE_ERR_MSG = 0x200 688 TCL_LIMIT_COMMANDS = 0x01 689 TCL_LIMIT_TIME = 0x02 690 TCL_LINK_BOOLEAN = 3 691 TCL_LINK_CHAR = 6 692 TCL_LINK_DOUBLE = 2 693 TCL_LINK_FLOAT = 13 694 TCL_LINK_INT = 1 695 TCL_LINK_LONG = 11 696 TCL_LINK_READ_ONLY = 0x80 697 TCL_LINK_SHORT = 8 698 TCL_LINK_STRING = 4 699 TCL_LINK_UCHAR = 7 700 TCL_LINK_UINT = 10 701 TCL_LINK_ULONG = 12 702 TCL_LINK_USHORT = 9 703 TCL_LINK_WIDE_INT = 5 704 TCL_LINK_WIDE_UINT = 14 705 TCL_LIST_ELEMENT = 8 706 TCL_LL_MODIFIER = "ll" 707 TCL_LOAD_GLOBAL = 1 708 TCL_LOAD_LAZY = 2 709 TCL_MAJOR_VERSION = 8 710 TCL_MATCH_NOCASE = 1 711 TCL_MAX_PREC = 17 712 TCL_MINOR_VERSION = 6 713 TCL_MODE_BLOCKING = 0 714 TCL_MODE_NONBLOCKING = 1 715 TCL_NAMESPACE_ONLY = 2 716 TCL_NORETURN1 = 0 717 TCL_NO_EVAL = 0x010000 718 TCL_OK = 0 719 TCL_ONE_WORD_KEYS = 1 720 TCL_PARSE_BAD_NUMBER = 9 721 TCL_PARSE_BRACE_EXTRA = 2 722 TCL_PARSE_MISSING_BRACE = 3 723 TCL_PARSE_MISSING_BRACKET = 4 724 TCL_PARSE_MISSING_PAREN = 5 725 TCL_PARSE_MISSING_QUOTE = 6 726 TCL_PARSE_MISSING_VAR_BRACE = 7 727 TCL_PARSE_PART1 = 0x400 728 TCL_PARSE_QUOTE_EXTRA = 1 729 TCL_PARSE_SUCCESS = 0 730 TCL_PARSE_SYNTAX = 8 731 TCL_PATCH_LEVEL = "8.6.11" 732 TCL_READABLE = 2 733 TCL_REG_ADVANCED = 000003 734 TCL_REG_ADVF = 000002 735 TCL_REG_BASIC = 000000 736 TCL_REG_CANMATCH = 001000 737 TCL_REG_EXPANDED = 000040 738 TCL_REG_EXTENDED = 000001 739 TCL_REG_NEWLINE = 000300 740 TCL_REG_NLANCH = 000200 741 TCL_REG_NLSTOP = 000100 742 TCL_REG_NOCASE = 000010 743 TCL_REG_NOSUB = 000020 744 TCL_REG_NOTBOL = 0001 745 TCL_REG_NOTEOL = 0002 746 TCL_REG_QUOTE = 000004 747 TCL_RELEASE_LEVEL = 2 748 TCL_RELEASE_SERIAL = 11 749 TCL_RESULT_SIZE = 200 750 TCL_RETURN = 2 751 TCL_SERVICE_ALL = 1 752 TCL_SERVICE_NONE = 0 753 TCL_SMALL_HASH_TABLE = 4 754 TCL_STDERR = 8 755 TCL_STDIN = 2 756 TCL_STDOUT = 4 757 TCL_STORAGE_CLASS = 0 758 TCL_STRING_KEYS = 0 759 TCL_SUBST_ALL = 007 760 TCL_SUBST_BACKSLASHES = 004 761 TCL_SUBST_COMMANDS = 001 762 TCL_SUBST_VARIABLES = 002 763 TCL_THREAD_CREATE_RETURN = 0 764 TCL_THREAD_JOINABLE = 1 765 TCL_THREAD_NOFLAGS = 0 766 TCL_THREAD_STACK_DEFAULT = 0 767 TCL_TIMER_EVENTS = 16 768 TCL_TOKEN_BS = 8 769 TCL_TOKEN_COMMAND = 16 770 TCL_TOKEN_EXPAND_WORD = 256 771 TCL_TOKEN_OPERATOR = 128 772 TCL_TOKEN_SIMPLE_WORD = 2 773 TCL_TOKEN_SUB_EXPR = 64 774 TCL_TOKEN_TEXT = 4 775 TCL_TOKEN_VARIABLE = 32 776 TCL_TOKEN_WORD = 1 777 TCL_TRACE_ARRAY = 0x800 778 TCL_TRACE_DELETE = 0x4000 779 TCL_TRACE_DESTROYED = 0x80 780 TCL_TRACE_OLD_STYLE = 0x1000 781 TCL_TRACE_READS = 0x10 782 TCL_TRACE_RENAME = 0x2000 783 TCL_TRACE_RESULT_DYNAMIC = 0x8000 784 TCL_TRACE_RESULT_OBJECT = 0x10000 785 TCL_TRACE_UNSETS = 0x40 786 TCL_TRACE_WRITES = 0x20 787 TCL_UNLOAD_DETACH_FROM_INTERPRETER = 1 788 TCL_UNLOAD_DETACH_FROM_PROCESS = 2 789 TCL_UTF_MAX = 3 790 TCL_VERSION = "8.6" 791 TCL_WINDOW_EVENTS = 4 792 TCL_WRITABLE = 4 793 TCL_ZLIB_COMPRESS_BEST = 9 794 TCL_ZLIB_COMPRESS_DEFAULT = -1 795 TCL_ZLIB_COMPRESS_FAST = 1 796 TCL_ZLIB_COMPRESS_NONE = 0 797 TCL_ZLIB_FINALIZE = 4 798 TCL_ZLIB_FLUSH = 2 799 TCL_ZLIB_FORMAT_AUTO = 8 800 TCL_ZLIB_FORMAT_GZIP = 4 801 TCL_ZLIB_FORMAT_RAW = 1 802 TCL_ZLIB_FORMAT_ZLIB = 2 803 TCL_ZLIB_FULLFLUSH = 3 804 TCL_ZLIB_NO_FLUSH = 0 805 TCL_ZLIB_STREAM_DEFLATE = 16 806 TCL_ZLIB_STREAM_INFLATE = 32 807 X_CLIENTDATA = 0 808 X_TCL = 0 809 X_TCLDECLS = 0 810 X_TCLPLATDECLS = 0 811 X_FTSINT_H = 0 812 FTS3_TOK_SCHEMA = "CREATE TABLE x(input HIDDEN, token, start, end, position)" 813 APND_MARK_FOS_SZ = 8 814 APND_MARK_PREFIX = "Start-Of-SQLite3-" 815 APND_MARK_PREFIX_SZ = 17 816 APND_MARK_SIZE = 25 817 APND_MAX_SIZE = 1073741824 818 APND_ROUNDUP = 4096 819 SQLITE3EXT_H = 0 820 SQLITE_EXTENSION_INIT1 = 0 821 SQLITE_EXTENSION_INIT3 = 0 822 AMATCH_COL_COMMAND = 3 823 AMATCH_COL_DISTANCE = 1 824 AMATCH_COL_LANGUAGE = 2 825 AMATCH_COL_NWORD = 4 826 AMATCH_COL_WORD = 0 827 AMATCH_MX_COST = 1000 828 AMATCH_MX_LANGID = 2147483647 829 AMATCH_MX_LENGTH = 50 830 BIG_ENDIAN = 4321 831 BYTE_ORDER = 1234 832 EXIT_FAILURE = 1 833 EXIT_SUCCESS = 0 834 FD_SETSIZE = 1024 835 LITTLE_ENDIAN = 1234 836 PDP_ENDIAN = 3412 837 RAND_MAX = 2147483647 838 WCONTINUED = 8 839 WEXITED = 4 840 WNOHANG = 1 841 WNOWAIT = 0x01000000 842 WSTOPPED = 2 843 WUNTRACED = 2 844 X_ALLOCA_H = 1 845 X_BITS_BYTESWAP_H = 1 846 X_BITS_ENDIANNESS_H = 1 847 X_BITS_ENDIAN_H = 1 848 X_BITS_FLOATN_COMMON_H = 0 849 X_BITS_FLOATN_H = 0 850 X_BITS_PTHREADTYPES_ARCH_H = 1 851 X_BITS_PTHREADTYPES_COMMON_H = 1 852 X_BITS_STDINT_INTN_H = 1 853 X_BITS_UINTN_IDENTITY_H = 1 854 X_CTYPE_H = 1 855 X_ENDIAN_H = 1 856 X_GCC_WCHAR_T = 0 857 X_RWLOCK_INTERNAL_H = 0 858 X_STDLIB_H = 1 859 X_STRUCT_TIMESPEC = 1 860 X_SYS_SELECT_H = 1 861 X_SYS_TYPES_H = 1 862 X_THREAD_MUTEX_INTERNAL_H = 1 863 X_THREAD_SHARED_TYPES_H = 1 864 X_T_WCHAR = 0 865 X_T_WCHAR_ = 0 866 X_WCHAR_T = 0 867 X_WCHAR_T_ = 0 868 X_WCHAR_T_DECLARED = 0 869 X_WCHAR_T_DEFINED = 0 870 X_WCHAR_T_DEFINED_ = 0 871 X_WCHAR_T_H = 0 872 CARRAY_COLUMN_COUNT = 2 873 CARRAY_COLUMN_CTYPE = 3 874 CARRAY_COLUMN_POINTER = 1 875 CARRAY_COLUMN_VALUE = 0 876 CARRAY_DOUBLE = 2 877 CARRAY_INT32 = 0 878 CARRAY_INT64 = 1 879 CARRAY_TEXT = 3 880 CLOSURE_COL_DEPTH = 1 881 CLOSURE_COL_ID = 0 882 CLOSURE_COL_IDCOLUMN = 4 883 CLOSURE_COL_PARENTCOLUMN = 5 884 CLOSURE_COL_ROOT = 2 885 CLOSURE_COL_TABLENAME = 3 886 CSVTEST_FIDX = 0x0001 887 CSV_INBUFSZ = 1024 888 CSV_MXERR = 200 889 EXPLN_COLUMN_ADDR = 0 890 EXPLN_COLUMN_COMMENT = 7 891 EXPLN_COLUMN_OPCODE = 1 892 EXPLN_COLUMN_P1 = 2 893 EXPLN_COLUMN_P2 = 3 894 EXPLN_COLUMN_P3 = 4 895 EXPLN_COLUMN_P4 = 5 896 EXPLN_COLUMN_P5 = 6 897 EXPLN_COLUMN_SQL = 8 898 ACCESSPERMS = 511 899 AIO_PRIO_DELTA_MAX = 20 900 ALLPERMS = 4095 901 AT_EACCESS = 0x200 902 AT_FDCWD = -100 903 AT_REMOVEDIR = 0x200 904 AT_SYMLINK_FOLLOW = 0x400 905 AT_SYMLINK_NOFOLLOW = 0x100 906 CLOCK_BOOTTIME = 7 907 CLOCK_BOOTTIME_ALARM = 9 908 CLOCK_MONOTONIC = 1 909 CLOCK_MONOTONIC_COARSE = 6 910 CLOCK_MONOTONIC_RAW = 4 911 CLOCK_PROCESS_CPUTIME_ID = 2 912 CLOCK_REALTIME = 0 913 CLOCK_REALTIME_ALARM = 8 914 CLOCK_REALTIME_COARSE = 5 915 CLOCK_TAI = 11 916 CLOCK_THREAD_CPUTIME_ID = 3 917 DEFFILEMODE = 438 918 DELAYTIMER_MAX = 2147483647 919 E2BIG = 7 920 EACCES = 13 921 EADDRINUSE = 98 922 EADDRNOTAVAIL = 99 923 EADV = 68 924 EAFNOSUPPORT = 97 925 EAGAIN = 11 926 EALREADY = 114 927 EBADE = 52 928 EBADF = 9 929 EBADFD = 77 930 EBADMSG = 74 931 EBADR = 53 932 EBADRQC = 56 933 EBADSLT = 57 934 EBFONT = 59 935 EBUSY = 16 936 ECANCELED = 125 937 ECHILD = 10 938 ECHRNG = 44 939 ECOMM = 70 940 ECONNABORTED = 103 941 ECONNREFUSED = 111 942 ECONNRESET = 104 943 EDEADLK = 35 944 EDEADLOCK = 35 945 EDESTADDRREQ = 89 946 EDOM = 33 947 EDOTDOT = 73 948 EDQUOT = 122 949 EEXIST = 17 950 EFAULT = 14 951 EFBIG = 27 952 EHOSTDOWN = 112 953 EHOSTUNREACH = 113 954 EHWPOISON = 133 955 EIDRM = 43 956 EILSEQ = 84 957 EINPROGRESS = 115 958 EINTR = 4 959 EINVAL = 22 960 EIO = 5 961 EISCONN = 106 962 EISDIR = 21 963 EISNAM = 120 964 EKEYEXPIRED = 127 965 EKEYREJECTED = 129 966 EKEYREVOKED = 128 967 EL2HLT = 51 968 EL2NSYNC = 45 969 EL3HLT = 46 970 EL3RST = 47 971 ELIBACC = 79 972 ELIBBAD = 80 973 ELIBEXEC = 83 974 ELIBMAX = 82 975 ELIBSCN = 81 976 ELNRNG = 48 977 ELOOP = 40 978 EMEDIUMTYPE = 124 979 EMFILE = 24 980 EMLINK = 31 981 EMSGSIZE = 90 982 EMULTIHOP = 72 983 ENAMETOOLONG = 36 984 ENAVAIL = 119 985 ENETDOWN = 100 986 ENETRESET = 102 987 ENETUNREACH = 101 988 ENFILE = 23 989 ENOANO = 55 990 ENOBUFS = 105 991 ENOCSI = 50 992 ENODATA = 61 993 ENODEV = 19 994 ENOENT = 2 995 ENOEXEC = 8 996 ENOKEY = 126 997 ENOLCK = 37 998 ENOLINK = 67 999 ENOMEDIUM = 123 1000 ENOMEM = 12 1001 ENOMSG = 42 1002 ENONET = 64 1003 ENOPKG = 65 1004 ENOPROTOOPT = 92 1005 ENOSPC = 28 1006 ENOSR = 63 1007 ENOSTR = 60 1008 ENOSYS = 38 1009 ENOTBLK = 15 1010 ENOTCONN = 107 1011 ENOTDIR = 20 1012 ENOTEMPTY = 39 1013 ENOTNAM = 118 1014 ENOTRECOVERABLE = 131 1015 ENOTSOCK = 88 1016 ENOTSUP = 95 1017 ENOTTY = 25 1018 ENOTUNIQ = 76 1019 ENXIO = 6 1020 EOPNOTSUPP = 95 1021 EOVERFLOW = 75 1022 EOWNERDEAD = 130 1023 EPERM = 1 1024 EPFNOSUPPORT = 96 1025 EPIPE = 32 1026 EPROTO = 71 1027 EPROTONOSUPPORT = 93 1028 EPROTOTYPE = 91 1029 ERANGE = 34 1030 EREMCHG = 78 1031 EREMOTE = 66 1032 EREMOTEIO = 121 1033 ERESTART = 85 1034 ERFKILL = 132 1035 EROFS = 30 1036 ESHUTDOWN = 108 1037 ESOCKTNOSUPPORT = 94 1038 ESPIPE = 29 1039 ESRCH = 3 1040 ESRMNT = 69 1041 ESTALE = 116 1042 ESTRPIPE = 86 1043 ETIME = 62 1044 ETIMEDOUT = 110 1045 ETOOMANYREFS = 109 1046 ETXTBSY = 26 1047 EUCLEAN = 117 1048 EUNATCH = 49 1049 EUSERS = 87 1050 EWOULDBLOCK = 11 1051 EXDEV = 18 1052 EXFULL = 54 1053 FAPPEND = 1024 1054 FASYNC = 8192 1055 FD_CLOEXEC = 1 1056 FFSYNC = 1052672 1057 FNDELAY = 2048 1058 FNONBLOCK = 2048 1059 FSDIR_COLUMN_DATA = 3 1060 FSDIR_COLUMN_DIR = 5 1061 FSDIR_COLUMN_MODE = 1 1062 FSDIR_COLUMN_MTIME = 2 1063 FSDIR_COLUMN_NAME = 0 1064 FSDIR_COLUMN_PATH = 4 1065 FSDIR_SCHEMA = "(name,mode,mtime,data,path HIDDEN,dir HIDDEN)" 1066 F_DUPFD = 0 1067 F_DUPFD_CLOEXEC = 1030 1068 F_EXLCK = 4 1069 F_GETFD = 1 1070 F_GETFL = 3 1071 F_GETLK = 5 1072 F_GETLK64 = 5 1073 F_GETOWN = 9 1074 F_LOCK = 1 1075 F_OK = 0 1076 F_RDLCK = 0 1077 F_SETFD = 2 1078 F_SETFL = 4 1079 F_SETLK = 6 1080 F_SETLK64 = 6 1081 F_SETLKW = 7 1082 F_SETLKW64 = 7 1083 F_SETOWN = 8 1084 F_SHLCK = 8 1085 F_TEST = 3 1086 F_TLOCK = 2 1087 F_ULOCK = 0 1088 F_UNLCK = 2 1089 F_WRLCK = 1 1090 HOST_NAME_MAX = 64 1091 LOCK_EX = 2 1092 LOCK_NB = 4 1093 LOCK_SH = 1 1094 LOCK_UN = 8 1095 LOGIN_NAME_MAX = 256 1096 L_INCR = 1 1097 L_SET = 0 1098 L_XTND = 2 1099 MAXNAMLEN = 255 1100 MAX_CANON = 255 1101 MAX_INPUT = 255 1102 MQ_PRIO_MAX = 32768 1103 NAME_MAX = 255 1104 NGROUPS_MAX = 65536 1105 O_ACCMODE = 0003 1106 O_APPEND = 02000 1107 O_ASYNC = 020000 1108 O_CLOEXEC = 524288 1109 O_CREAT = 0100 1110 O_DIRECTORY = 16384 1111 O_DSYNC = 4096 1112 O_EXCL = 0200 1113 O_FSYNC = 1052672 1114 O_NDELAY = 2048 1115 O_NOCTTY = 0400 1116 O_NOFOLLOW = 32768 1117 O_NONBLOCK = 04000 1118 O_RDONLY = 00 1119 O_RDWR = 02 1120 O_RSYNC = 1052672 1121 O_SYNC = 04010000 1122 O_TRUNC = 01000 1123 O_WRONLY = 01 1124 PATH_MAX = 4096 1125 PIPE_BUF = 4096 1126 POSIX_FADV_DONTNEED = 4 1127 POSIX_FADV_NOREUSE = 5 1128 POSIX_FADV_NORMAL = 0 1129 POSIX_FADV_RANDOM = 1 1130 POSIX_FADV_SEQUENTIAL = 2 1131 POSIX_FADV_WILLNEED = 3 1132 PTHREAD_DESTRUCTOR_ITERATIONS = 4 1133 PTHREAD_KEYS_MAX = 1024 1134 PTHREAD_STACK_MIN = 131072 1135 RTSIG_MAX = 32 1136 R_OK = 4 1137 SEM_VALUE_MAX = 2147483647 1138 STDERR_FILENO = 2 1139 STDIN_FILENO = 0 1140 STDOUT_FILENO = 1 1141 S_BLKSIZE = 512 1142 S_IEXEC = 64 1143 S_IFBLK = 24576 1144 S_IFCHR = 8192 1145 S_IFDIR = 16384 1146 S_IFIFO = 4096 1147 S_IFLNK = 40960 1148 S_IFMT = 61440 1149 S_IFREG = 32768 1150 S_IFSOCK = 49152 1151 S_IREAD = 256 1152 S_IRGRP = 32 1153 S_IROTH = 4 1154 S_IRUSR = 256 1155 S_IRWXG = 56 1156 S_IRWXO = 7 1157 S_IRWXU = 448 1158 S_ISGID = 1024 1159 S_ISUID = 2048 1160 S_ISVTX = 512 1161 S_IWGRP = 16 1162 S_IWOTH = 2 1163 S_IWRITE = 128 1164 S_IWUSR = 128 1165 S_IXGRP = 8 1166 S_IXOTH = 1 1167 S_IXUSR = 64 1168 TIMER_ABSTIME = 1 1169 TIME_UTC = 1 1170 TTY_NAME_MAX = 32 1171 UTIME_NOW = 1073741823 1172 UTIME_OMIT = 1073741822 1173 W_OK = 2 1174 XATTR_LIST_MAX = 65536 1175 XATTR_NAME_MAX = 255 1176 XATTR_SIZE_MAX = 65536 1177 X_OK = 1 1178 X_ASM_GENERIC_ERRNO_BASE_H = 0 1179 X_ASM_GENERIC_ERRNO_H = 0 1180 X_BITS_ERRNO_H = 1 1181 X_BITS_POSIX1_LIM_H = 1 1182 X_BITS_POSIX_OPT_H = 1 1183 X_BITS_STAT_H = 1 1184 X_BITS_TIME_H = 1 1185 X_DIRENT_H = 1 1186 X_DIRENT_HAVE_D_OFF = 0 1187 X_DIRENT_HAVE_D_RECLEN = 0 1188 X_DIRENT_HAVE_D_TYPE = 0 1189 X_DIRENT_MATCHES_DIRENT64 = 1 1190 X_ERRNO_H = 1 1191 X_FCNTL_H = 1 1192 X_GETOPT_CORE_H = 1 1193 X_GETOPT_POSIX_H = 1 1194 X_LFS64_ASYNCHRONOUS_IO = 1 1195 X_LFS64_LARGEFILE = 1 1196 X_LFS64_STDIO = 1 1197 X_LFS_ASYNCHRONOUS_IO = 1 1198 X_LFS_LARGEFILE = 1 1199 X_LINUX_LIMITS_H = 0 1200 X_MKNOD_VER = 0 1201 X_MKNOD_VER_LINUX = 0 1202 X_POSIX2_CHAR_TERM = 200809 1203 X_POSIX2_C_BIND = 200809 1204 X_POSIX2_C_DEV = 200809 1205 X_POSIX2_C_VERSION = 200809 1206 X_POSIX2_LOCALEDEF = 200809 1207 X_POSIX2_SW_DEV = 200809 1208 X_POSIX2_VERSION = 200809 1209 X_POSIX_ADVISORY_INFO = 200809 1210 X_POSIX_AIO_LISTIO_MAX = 2 1211 X_POSIX_AIO_MAX = 1 1212 X_POSIX_ARG_MAX = 4096 1213 X_POSIX_ASYNCHRONOUS_IO = 200809 1214 X_POSIX_ASYNC_IO = 1 1215 X_POSIX_BARRIERS = 200809 1216 X_POSIX_CHILD_MAX = 25 1217 X_POSIX_CHOWN_RESTRICTED = 0 1218 X_POSIX_CLOCKRES_MIN = 20000000 1219 X_POSIX_CLOCK_SELECTION = 200809 1220 X_POSIX_CPUTIME = 0 1221 X_POSIX_DELAYTIMER_MAX = 32 1222 X_POSIX_FSYNC = 200809 1223 X_POSIX_HOST_NAME_MAX = 255 1224 X_POSIX_IPV6 = 200809 1225 X_POSIX_JOB_CONTROL = 1 1226 X_POSIX_LINK_MAX = 8 1227 X_POSIX_LOGIN_NAME_MAX = 9 1228 X_POSIX_MAPPED_FILES = 200809 1229 X_POSIX_MAX_CANON = 255 1230 X_POSIX_MAX_INPUT = 255 1231 X_POSIX_MEMLOCK = 200809 1232 X_POSIX_MEMLOCK_RANGE = 200809 1233 X_POSIX_MEMORY_PROTECTION = 200809 1234 X_POSIX_MESSAGE_PASSING = 200809 1235 X_POSIX_MONOTONIC_CLOCK = 0 1236 X_POSIX_MQ_OPEN_MAX = 8 1237 X_POSIX_MQ_PRIO_MAX = 32 1238 X_POSIX_NAME_MAX = 14 1239 X_POSIX_NGROUPS_MAX = 8 1240 X_POSIX_NO_TRUNC = 1 1241 X_POSIX_OPEN_MAX = 20 1242 X_POSIX_PATH_MAX = 256 1243 X_POSIX_PIPE_BUF = 512 1244 X_POSIX_PRIORITIZED_IO = 200809 1245 X_POSIX_PRIORITY_SCHEDULING = 200809 1246 X_POSIX_RAW_SOCKETS = 200809 1247 X_POSIX_READER_WRITER_LOCKS = 200809 1248 X_POSIX_REALTIME_SIGNALS = 200809 1249 X_POSIX_REENTRANT_FUNCTIONS = 1 1250 X_POSIX_REGEXP = 1 1251 X_POSIX_RE_DUP_MAX = 255 1252 X_POSIX_RTSIG_MAX = 8 1253 X_POSIX_SAVED_IDS = 1 1254 X_POSIX_SEMAPHORES = 200809 1255 X_POSIX_SEM_NSEMS_MAX = 256 1256 X_POSIX_SEM_VALUE_MAX = 32767 1257 X_POSIX_SHARED_MEMORY_OBJECTS = 200809 1258 X_POSIX_SHELL = 1 1259 X_POSIX_SIGQUEUE_MAX = 32 1260 X_POSIX_SPAWN = 200809 1261 X_POSIX_SPIN_LOCKS = 200809 1262 X_POSIX_SPORADIC_SERVER = -1 1263 X_POSIX_SSIZE_MAX = 32767 1264 X_POSIX_STREAM_MAX = 8 1265 X_POSIX_SYMLINK_MAX = 255 1266 X_POSIX_SYMLOOP_MAX = 8 1267 X_POSIX_SYNCHRONIZED_IO = 200809 1268 X_POSIX_THREADS = 200809 1269 X_POSIX_THREAD_ATTR_STACKADDR = 200809 1270 X_POSIX_THREAD_ATTR_STACKSIZE = 200809 1271 X_POSIX_THREAD_CPUTIME = 0 1272 X_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 1273 X_POSIX_THREAD_KEYS_MAX = 128 1274 X_POSIX_THREAD_PRIORITY_SCHEDULING = 200809 1275 X_POSIX_THREAD_PRIO_INHERIT = 200809 1276 X_POSIX_THREAD_PRIO_PROTECT = 200809 1277 X_POSIX_THREAD_PROCESS_SHARED = 200809 1278 X_POSIX_THREAD_ROBUST_PRIO_INHERIT = 200809 1279 X_POSIX_THREAD_ROBUST_PRIO_PROTECT = -1 1280 X_POSIX_THREAD_SAFE_FUNCTIONS = 200809 1281 X_POSIX_THREAD_SPORADIC_SERVER = -1 1282 X_POSIX_THREAD_THREADS_MAX = 64 1283 X_POSIX_TIMEOUTS = 200809 1284 X_POSIX_TIMERS = 200809 1285 X_POSIX_TIMER_MAX = 32 1286 X_POSIX_TRACE = -1 1287 X_POSIX_TRACE_EVENT_FILTER = -1 1288 X_POSIX_TRACE_INHERIT = -1 1289 X_POSIX_TRACE_LOG = -1 1290 X_POSIX_TTY_NAME_MAX = 9 1291 X_POSIX_TYPED_MEMORY_OBJECTS = -1 1292 X_POSIX_TZNAME_MAX = 6 1293 X_POSIX_V6_ILP32_OFF32 = -1 1294 X_POSIX_V6_ILP32_OFFBIG = -1 1295 X_POSIX_V6_LP64_OFF64 = 1 1296 X_POSIX_V6_LPBIG_OFFBIG = -1 1297 X_POSIX_V7_ILP32_OFF32 = -1 1298 X_POSIX_V7_ILP32_OFFBIG = -1 1299 X_POSIX_V7_LP64_OFF64 = 1 1300 X_POSIX_V7_LPBIG_OFFBIG = -1 1301 X_POSIX_VDISABLE = 0 1302 X_POSIX_VERSION = 200809 1303 X_STATBUF_ST_BLKSIZE = 0 1304 X_STATBUF_ST_NSEC = 0 1305 X_STATBUF_ST_RDEV = 0 1306 X_STAT_VER = 0 1307 X_STAT_VER_KERNEL = 0 1308 X_STAT_VER_LINUX = 0 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_XBS5_LP64_OFF64 = 1 1317 X_XBS5_LPBIG_OFFBIG = -1 1318 X_XOPEN_ENH_I18N = 1 1319 X_XOPEN_LEGACY = 1 1320 X_XOPEN_REALTIME = 1 1321 X_XOPEN_REALTIME_THREADS = 1 1322 X_XOPEN_SHM = 1 1323 X_XOPEN_UNIX = 1 1324 X_XOPEN_VERSION = 700 1325 X_XOPEN_XCU_VERSION = 4 1326 X_XOPEN_XPG2 = 1 1327 X_XOPEN_XPG3 = 1 1328 X_XOPEN_XPG4 = 1 1329 FUZZER_HASH = 4001 1330 FUZZER_MX_COST = 1000 1331 FUZZER_MX_LENGTH = 50 1332 FUZZER_MX_OUTPUT_LENGTH = 100 1333 FUZZER_MX_RULEID = 2147483647 1334 FUZZER_NQUEUE = 20 1335 CC_AND = 24 1336 CC_BANG = 15 1337 CC_COMMA = 23 1338 CC_DIGIT = 3 1339 CC_DOLLAR = 4 1340 CC_DOT = 26 1341 CC_EQ = 14 1342 CC_GT = 13 1343 CC_ID = 2 1344 CC_ILLEGAL = 27 1345 CC_KYWD = 1 1346 CC_LP = 17 1347 CC_LT = 12 1348 CC_MINUS = 11 1349 CC_PERCENT = 22 1350 CC_PIPE = 10 1351 CC_PLUS = 20 1352 CC_QUOTE = 8 1353 CC_QUOTE2 = 9 1354 CC_RP = 18 1355 CC_SEMI = 19 1356 CC_SLASH = 16 1357 CC_SPACE = 7 1358 CC_STAR = 21 1359 CC_TILDA = 25 1360 CC_VARALPHA = 5 1361 CC_VARNUM = 6 1362 CC_X = 0 1363 TK_BITAND = 3 1364 TK_BITNOT = 3 1365 TK_BITOR = 3 1366 TK_BLOB = 2 1367 TK_COMMA = 3 1368 TK_CONCAT = 3 1369 TK_DOT = 3 1370 TK_EQ = 3 1371 TK_ERROR = 4 1372 TK_FLOAT = 2 1373 TK_GE = 3 1374 TK_GT = 3 1375 TK_ID = 1 1376 TK_ILLEGAL = 4 1377 TK_INTEGER = 2 1378 TK_LE = 3 1379 TK_LITERAL = 2 1380 TK_LP = 3 1381 TK_LSHIFT = 3 1382 TK_LT = 3 1383 TK_MINUS = 3 1384 TK_NAME = 1 1385 TK_NE = 3 1386 TK_PLUS = 3 1387 TK_PUNCT = 3 1388 TK_REM = 3 1389 TK_RP = 3 1390 TK_RSHIFT = 3 1391 TK_SEMI = 3 1392 TK_SLASH = 3 1393 TK_SPACE = 0 1394 TK_STAR = 3 1395 TK_STRING = 2 1396 TK_VARIABLE = 2 1397 Deliberate_fall_through = 0 1398 QPVTAB_A = 6 1399 QPVTAB_B = 7 1400 QPVTAB_C = 8 1401 QPVTAB_CN = 2 1402 QPVTAB_D = 9 1403 QPVTAB_E = 10 1404 QPVTAB_FLAGS = 11 1405 QPVTAB_IX = 1 1406 QPVTAB_NONE = 12 1407 QPVTAB_OP = 3 1408 QPVTAB_RHS = 5 1409 QPVTAB_UX = 4 1410 QPVTAB_VN = 0 1411 RE_EOF = 0 1412 RE_OP_ACCEPT = 6 1413 RE_OP_ANY = 2 1414 RE_OP_ANYSTAR = 3 1415 RE_OP_BOUNDARY = 17 1416 RE_OP_CC_EXC = 8 1417 RE_OP_CC_INC = 7 1418 RE_OP_CC_RANGE = 10 1419 RE_OP_CC_VALUE = 9 1420 RE_OP_DIGIT = 13 1421 RE_OP_FORK = 4 1422 RE_OP_GOTO = 5 1423 RE_OP_MATCH = 1 1424 RE_OP_NOTDIGIT = 14 1425 RE_OP_NOTSPACE = 16 1426 RE_OP_NOTWORD = 12 1427 RE_OP_SPACE = 15 1428 RE_OP_WORD = 11 1429 SERIES_COLUMN_START = 1 1430 SERIES_COLUMN_STEP = 3 1431 SERIES_COLUMN_STOP = 2 1432 SERIES_COLUMN_VALUE = 0 1433 CCLASS_B = 2 1434 CCLASS_C = 3 1435 CCLASS_D = 4 1436 CCLASS_DIGIT = 10 1437 CCLASS_H = 5 1438 CCLASS_L = 6 1439 CCLASS_M = 8 1440 CCLASS_OTHER = 12 1441 CCLASS_R = 7 1442 CCLASS_SILENT = 0 1443 CCLASS_SPACE = 11 1444 CCLASS_VOWEL = 1 1445 CCLASS_Y = 9 1446 FINAL_INS_COST_DIV = 4 1447 SCRIPT_ARABIC = 0x0010 1448 SCRIPT_CYRILLIC = 0x0002 1449 SCRIPT_GREEK = 0x0004 1450 SCRIPT_HEBREW = 0x0008 1451 SCRIPT_LATIN = 0x0001 1452 SPELLFIX_COL_COMMAND = 11 1453 SPELLFIX_COL_DISTANCE = 2 1454 SPELLFIX_COL_LANGID = 3 1455 SPELLFIX_COL_MATCHLEN = 5 1456 SPELLFIX_COL_PHONEHASH = 6 1457 SPELLFIX_COL_RANK = 1 1458 SPELLFIX_COL_SCOPE = 8 1459 SPELLFIX_COL_SCORE = 4 1460 SPELLFIX_COL_SOUNDSLIKE = 10 1461 SPELLFIX_COL_SRCHCNT = 9 1462 SPELLFIX_COL_TOP = 7 1463 SPELLFIX_COL_WORD = 0 1464 SPELLFIX_IDXNUM_DIST = 48 1465 SPELLFIX_IDXNUM_DISTLE = 0x20 1466 SPELLFIX_IDXNUM_DISTLT = 0x10 1467 SPELLFIX_IDXNUM_LANGID = 0x02 1468 SPELLFIX_IDXNUM_MATCH = 0x01 1469 SPELLFIX_IDXNUM_ROWID = 0x40 1470 SPELLFIX_IDXNUM_SCOPE = 0x08 1471 SPELLFIX_IDXNUM_TOP = 0x04 1472 SPELLFIX_MX_HASH = 32 1473 SPELLFIX_MX_RUN = 1 1474 SQLITE_SPELLFIX_STACKALLOC_SZ = 1024 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 = 9223372036854775807 1647 INTPTR_MIN = -9223372036854775808 1648 INT_FAST16_MAX = 9223372036854775807 1649 INT_FAST16_MIN = -9223372036854775808 1650 INT_FAST32_MAX = 9223372036854775807 1651 INT_FAST32_MIN = -9223372036854775808 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 = 9223372036854775807 2053 PTRDIFF_MIN = -9223372036854775808 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 = 18446744073709551615 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 = 8 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 = 18446744073709551615 2515 UINT_FAST16_MAX = 18446744073709551615 2516 UINT_FAST32_MAX = 18446744073709551615 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 = 4294967295 2524 WCHAR_MIN = 0 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 ELF_PRARGSZ = 80 2574 ESR_MAGIC = 0x45535201 2575 EXTRA_MAGIC = 0x45585401 2576 FPSIMD_MAGIC = 0x46508001 2577 MAX_PREPARED_STMTS = 100 2578 MINSIGSTKSZ = 5120 2579 NSIG = 65 2580 NUM_PREPARED_STMTS = 10 2581 SA_INTERRUPT = 0x20000000 2582 SA_NOCLDSTOP = 1 2583 SA_NOCLDWAIT = 2 2584 SA_NODEFER = 0x40000000 2585 SA_NOMASK = 1073741824 2586 SA_ONESHOT = 2147483648 2587 SA_ONSTACK = 0x08000000 2588 SA_RESETHAND = 0x80000000 2589 SA_RESTART = 0x10000000 2590 SA_SIGINFO = 4 2591 SA_STACK = 134217728 2592 SIGABRT = 6 2593 SIGALRM = 14 2594 SIGBUS = 7 2595 SIGCHLD = 17 2596 SIGCLD = 17 2597 SIGCONT = 18 2598 SIGFPE = 8 2599 SIGHUP = 1 2600 SIGILL = 4 2601 SIGINT = 2 2602 SIGIO = 29 2603 SIGIOT = 6 2604 SIGKILL = 9 2605 SIGPIPE = 13 2606 SIGPOLL = 29 2607 SIGPROF = 27 2608 SIGPWR = 30 2609 SIGQUIT = 3 2610 SIGSEGV = 11 2611 SIGSTKFLT = 16 2612 SIGSTKSZ = 16384 2613 SIGSTOP = 19 2614 SIGSYS = 31 2615 SIGTERM = 15 2616 SIGTRAP = 5 2617 SIGTSTP = 20 2618 SIGTTIN = 21 2619 SIGTTOU = 22 2620 SIGURG = 23 2621 SIGUSR1 = 10 2622 SIGUSR2 = 12 2623 SIGVTALRM = 26 2624 SIGWINCH = 28 2625 SIGXCPU = 24 2626 SIGXFSZ = 25 2627 SIG_BLOCK = 0 2628 SIG_SETMASK = 2 2629 SIG_UNBLOCK = 1 2630 SQLITE_EVAL_WITHOUTNULLS = 0x00001 2631 SQLITE_TCL_NRE = 1 2632 SVE_MAGIC = 0x53564501 2633 SVE_NUM_PREGS = 16 2634 SVE_NUM_ZREGS = 32 2635 SVE_VL_MAX = 8192 2636 SVE_VL_MIN = 16 2637 SVE_VQ_BYTES = 16 2638 SVE_VQ_MAX = 512 2639 SVE_VQ_MIN = 1 2640 TCLSH = 1 2641 X_ASM_GENERIC_INT_LL64_H = 0 2642 X_ASM_GENERIC_TYPES_H = 0 2643 X_BITS_SIGACTION_H = 1 2644 X_BITS_SIGCONTEXT_H = 1 2645 X_BITS_SIGEVENT_CONSTS_H = 1 2646 X_BITS_SIGINFO_ARCH_H = 1 2647 X_BITS_SIGINFO_CONSTS_H = 1 2648 X_BITS_SIGNUM_GENERIC_H = 1 2649 X_BITS_SIGNUM_H = 1 2650 X_BITS_SIGSTACK_H = 1 2651 X_BITS_SIGTHREAD_H = 1 2652 X_BITS_SS_FLAGS_H = 1 2653 X_LINUX_POSIX_TYPES_H = 0 2654 X_LINUX_TYPES_H = 0 2655 X_NSIG = 65 2656 X_SIGNAL_H = 0 2657 X_SYS_PROCFS_H = 1 2658 X_SYS_UCONTEXT_H = 1 2659 X_SYS_USER_H = 1 2660 ADJ_ESTERROR = 0x0008 2661 ADJ_FREQUENCY = 0x0002 2662 ADJ_MAXERROR = 0x0004 2663 ADJ_MICRO = 0x1000 2664 ADJ_NANO = 0x2000 2665 ADJ_OFFSET = 0x0001 2666 ADJ_OFFSET_SINGLESHOT = 0x8001 2667 ADJ_OFFSET_SS_READ = 0xa001 2668 ADJ_SETOFFSET = 0x0100 2669 ADJ_STATUS = 0x0010 2670 ADJ_TAI = 0x0080 2671 ADJ_TICK = 0x4000 2672 ADJ_TIMECONST = 0x0020 2673 CACHE_STALE = 0 2674 CURTYPE_BTREE = 0 2675 CURTYPE_PSEUDO = 3 2676 CURTYPE_SORTER = 1 2677 CURTYPE_VTAB = 2 2678 INT16_WIDTH = 16 2679 INT32_WIDTH = 32 2680 INT64_WIDTH = 64 2681 INT8_WIDTH = 8 2682 INTMAX_WIDTH = 64 2683 INTPTR_WIDTH = 64 2684 INT_FAST16_WIDTH = 64 2685 INT_FAST32_WIDTH = 64 2686 INT_FAST64_WIDTH = 64 2687 INT_FAST8_WIDTH = 8 2688 INT_LEAST16_WIDTH = 16 2689 INT_LEAST32_WIDTH = 32 2690 INT_LEAST64_WIDTH = 64 2691 INT_LEAST8_WIDTH = 8 2692 L_cuserid = 9 2693 MEM_AffMask = 0x003f 2694 MEM_Agg = 0x8000 2695 MEM_Blob = 0x0010 2696 MEM_Cleared = 0x0100 2697 MEM_Dyn = 0x1000 2698 MEM_Ephem = 0x4000 2699 MEM_FromBind = 0x0040 2700 MEM_Int = 0x0004 2701 MEM_IntReal = 0x0020 2702 MEM_Null = 0x0001 2703 MEM_Real = 0x0008 2704 MEM_Static = 0x2000 2705 MEM_Str = 0x0002 2706 MEM_Subtype = 0x0800 2707 MEM_Term = 0x0200 2708 MEM_TypeMask = 0x0dbf 2709 MEM_Undefined = 0x0000 2710 MEM_Zero = 0x0400 2711 MOD_CLKA = 32769 2712 MOD_CLKB = 16384 2713 MOD_ESTERROR = 8 2714 MOD_FREQUENCY = 2 2715 MOD_MAXERROR = 4 2716 MOD_MICRO = 4096 2717 MOD_NANO = 8192 2718 MOD_OFFSET = 1 2719 MOD_STATUS = 16 2720 MOD_TAI = 128 2721 MOD_TIMECONST = 32 2722 PRIO_MAX = 20 2723 PRIO_MIN = -20 2724 PTRDIFF_WIDTH = 64 2725 RENAME_EXCHANGE = 2 2726 RENAME_NOREPLACE = 1 2727 RENAME_WHITEOUT = 4 2728 RLIM64_INFINITY = 0xffffffffffffffff 2729 RLIM_INFINITY = 0xffffffffffffffff 2730 RLIM_SAVED_CUR = 18446744073709551615 2731 RLIM_SAVED_MAX = 18446744073709551615 2732 SEEK_DATA = 3 2733 SEEK_HOLE = 4 2734 SIG_ATOMIC_WIDTH = 32 2735 SIZE_WIDTH = 64 2736 SQLITE_ENABLE_LOCKING_STYLE = 0 2737 SQLITE_FRAME_MAGIC = 0x879fb71e 2738 SQLITE_MAX_SCHEMA_RETRY = 50 2739 SQLITE_VDBEINT_H = 0 2740 STA_CLK = 0x8000 2741 STA_CLOCKERR = 0x1000 2742 STA_DEL = 0x0020 2743 STA_FLL = 0x0008 2744 STA_FREQHOLD = 0x0080 2745 STA_INS = 0x0010 2746 STA_MODE = 0x4000 2747 STA_NANO = 0x2000 2748 STA_PLL = 0x0001 2749 STA_PPSERROR = 0x0800 2750 STA_PPSFREQ = 0x0002 2751 STA_PPSJITTER = 0x0200 2752 STA_PPSSIGNAL = 0x0100 2753 STA_PPSTIME = 0x0004 2754 STA_PPSWANDER = 0x0400 2755 STA_RONLY = 65280 2756 STA_UNSYNC = 0x0040 2757 UINT16_WIDTH = 16 2758 UINT32_WIDTH = 32 2759 UINT64_WIDTH = 64 2760 UINT8_WIDTH = 8 2761 UINTMAX_WIDTH = 64 2762 UINTPTR_WIDTH = 64 2763 UINT_FAST16_WIDTH = 64 2764 UINT_FAST32_WIDTH = 64 2765 UINT_FAST64_WIDTH = 64 2766 UINT_FAST8_WIDTH = 8 2767 UINT_LEAST16_WIDTH = 16 2768 UINT_LEAST32_WIDTH = 32 2769 UINT_LEAST64_WIDTH = 64 2770 UINT_LEAST8_WIDTH = 8 2771 VDBE_DISPLAY_P4 = 1 2772 VDBE_HALT_STATE = 3 2773 VDBE_INIT_STATE = 0 2774 VDBE_READY_STATE = 1 2775 VDBE_RUN_STATE = 2 2776 WCHAR_WIDTH = 32 2777 WINT_WIDTH = 32 2778 X_BITS_TIMEX_H = 1 2779 X_ISOC11_SOURCE = 1 2780 X_ISOC2X_SOURCE = 1 2781 X_ISOC95_SOURCE = 1 2782 X_ISOC99_SOURCE = 1 2783 X_LARGEFILE64_SOURCE = 1 2784 X_SYS_RESOURCE_H = 1 2785 X_XOPEN_SOURCE_EXTENDED = 1 2786 BTCF_AtLast = 0x08 2787 BTCF_Incrblob = 0x10 2788 BTCF_Multiple = 0x20 2789 BTCF_Pinned = 0x40 2790 BTCF_ValidNKey = 0x02 2791 BTCF_ValidOvfl = 0x04 2792 BTCF_WriteFlag = 0x01 2793 BTCURSOR_MAX_DEPTH = 20 2794 BTS_EXCLUSIVE = 0x0040 2795 BTS_FAST_SECURE = 0x000c 2796 BTS_INITIALLY_EMPTY = 0x0010 2797 BTS_NO_WAL = 0x0020 2798 BTS_OVERWRITE = 0x0008 2799 BTS_PAGESIZE_FIXED = 0x0002 2800 BTS_PENDING = 0x0080 2801 BTS_READ_ONLY = 0x0001 2802 BTS_SECURE_DELETE = 0x0004 2803 CURSOR_FAULT = 4 2804 CURSOR_INVALID = 1 2805 CURSOR_REQUIRESEEK = 3 2806 CURSOR_SKIPNEXT = 2 2807 CURSOR_VALID = 0 2808 PTF_INTKEY = 0x01 2809 PTF_LEAF = 0x08 2810 PTF_LEAFDATA = 0x04 2811 PTF_ZERODATA = 0x02 2812 PTRMAP_BTREE = 5 2813 PTRMAP_FREEPAGE = 2 2814 PTRMAP_OVERFLOW1 = 3 2815 PTRMAP_OVERFLOW2 = 4 2816 PTRMAP_ROOTPAGE = 1 2817 READ_LOCK = 1 2818 SQLITE_FILE_HEADER = "SQLite format 3" 2819 TRANS_NONE = 0 2820 TRANS_READ = 1 2821 TRANS_WRITE = 2 2822 WRITE_LOCK = 2 2823 CLONE_CHILD_CLEARTID = 0x00200000 2824 CLONE_CHILD_SETTID = 0x01000000 2825 CLONE_DETACHED = 0x00400000 2826 CLONE_FILES = 0x00000400 2827 CLONE_FS = 0x00000200 2828 CLONE_IO = 0x80000000 2829 CLONE_NEWCGROUP = 0x02000000 2830 CLONE_NEWIPC = 0x08000000 2831 CLONE_NEWNET = 0x40000000 2832 CLONE_NEWNS = 0x00020000 2833 CLONE_NEWPID = 0x20000000 2834 CLONE_NEWUSER = 0x10000000 2835 CLONE_NEWUTS = 0x04000000 2836 CLONE_PARENT = 0x00008000 2837 CLONE_PARENT_SETTID = 0x00100000 2838 CLONE_PIDFD = 0x00001000 2839 CLONE_PTRACE = 0x00002000 2840 CLONE_SETTLS = 0x00080000 2841 CLONE_SIGHAND = 0x00000800 2842 CLONE_SYSVSEM = 0x00040000 2843 CLONE_THREAD = 0x00010000 2844 CLONE_UNTRACED = 0x00800000 2845 CLONE_VFORK = 0x00004000 2846 CLONE_VM = 0x00000100 2847 CPU_SETSIZE = 1024 2848 CSIGNAL = 0x000000ff 2849 N_THREAD = 26 2850 PTHREAD_BARRIER_SERIAL_THREAD = -1 2851 PTHREAD_ONCE_INIT = 0 2852 SCHED_BATCH = 3 2853 SCHED_DEADLINE = 6 2854 SCHED_FIFO = 1 2855 SCHED_IDLE = 5 2856 SCHED_ISO = 4 2857 SCHED_OTHER = 0 2858 SCHED_RESET_ON_FORK = 0x40000000 2859 SCHED_RR = 2 2860 X_BITS_CPU_SET_H = 1 2861 X_BITS_SCHED_H = 1 2862 X_BITS_SETJMP_H = 1 2863 X_BITS_TYPES_STRUCT_SCHED_PARAM = 1 2864 X_PTHREAD_H = 1 2865 X_SCHED_H = 1 2866 TCL_THREADS = 0 2867 MX_CHUNK_NUMBER = 299 2868 SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET = 400 2869 SQLITE_MULTIPLEX_WAL_8_3_OFFSET = 700 2870 DEVSYM_MAX_PATHNAME = 512 2871 DEVSYM_VFS_NAME = "devsym" 2872 WRITECRASH_NAME = "writecrash" 2873 AT_EMPTY_PATH = 0x1000 2874 AT_NO_AUTOMOUNT = 0x800 2875 AT_RECURSIVE = 0x8000 2876 AT_STATX_DONT_SYNC = 0x4000 2877 AT_STATX_FORCE_SYNC = 0x2000 2878 AT_STATX_SYNC_AS_STAT = 0x0000 2879 AT_STATX_SYNC_TYPE = 0x6000 2880 DN_ACCESS = 0x00000001 2881 DN_ATTRIB = 0x00000020 2882 DN_CREATE = 0x00000004 2883 DN_DELETE = 0x00000008 2884 DN_MODIFY = 0x00000002 2885 DN_MULTISHOT = 0x80000000 2886 DN_RENAME = 0x00000010 2887 FALLOC_FL_COLLAPSE_RANGE = 0x08 2888 FALLOC_FL_INSERT_RANGE = 0x20 2889 FALLOC_FL_KEEP_SIZE = 0x01 2890 FALLOC_FL_NO_HIDE_STALE = 0x04 2891 FALLOC_FL_PUNCH_HOLE = 0x02 2892 FALLOC_FL_UNSHARE_RANGE = 0x40 2893 FALLOC_FL_ZERO_RANGE = 0x10 2894 F_ADD_SEALS = 1033 2895 F_GETLEASE = 1025 2896 F_GETOWN_EX = 16 2897 F_GETPIPE_SZ = 1032 2898 F_GETSIG = 11 2899 F_GET_FILE_RW_HINT = 1037 2900 F_GET_RW_HINT = 1035 2901 F_GET_SEALS = 1034 2902 F_NOTIFY = 1026 2903 F_OFD_GETLK = 36 2904 F_OFD_SETLK = 37 2905 F_OFD_SETLKW = 38 2906 F_SEAL_FUTURE_WRITE = 0x0010 2907 F_SEAL_GROW = 0x0004 2908 F_SEAL_SEAL = 0x0001 2909 F_SEAL_SHRINK = 0x0002 2910 F_SEAL_WRITE = 0x0008 2911 F_SETLEASE = 1024 2912 F_SETOWN_EX = 15 2913 F_SETPIPE_SZ = 1031 2914 F_SETSIG = 10 2915 F_SET_FILE_RW_HINT = 1038 2916 F_SET_RW_HINT = 1036 2917 LOCK_MAND = 32 2918 LOCK_READ = 64 2919 LOCK_RW = 192 2920 LOCK_WRITE = 128 2921 MAX_HANDLE_SZ = 128 2922 O_DIRECT = 65536 2923 O_LARGEFILE = 0 2924 O_NOATIME = 262144 2925 O_PATH = 2097152 2926 O_TMPFILE = 4210688 2927 RWF_WRITE_LIFE_NOT_SET = 0 2928 RWH_WRITE_LIFE_EXTREME = 5 2929 RWH_WRITE_LIFE_LONG = 4 2930 RWH_WRITE_LIFE_MEDIUM = 3 2931 RWH_WRITE_LIFE_NONE = 1 2932 RWH_WRITE_LIFE_SHORT = 2 2933 SPLICE_F_GIFT = 8 2934 SPLICE_F_MORE = 4 2935 SPLICE_F_MOVE = 1 2936 SPLICE_F_NONBLOCK = 2 2937 STATX_ALL = 0x00000fff 2938 STATX_ATIME = 0x00000020 2939 STATX_ATTR_APPEND = 0x00000020 2940 STATX_ATTR_AUTOMOUNT = 0x00001000 2941 STATX_ATTR_COMPRESSED = 0x00000004 2942 STATX_ATTR_DAX = 0x00200000 2943 STATX_ATTR_ENCRYPTED = 0x00000800 2944 STATX_ATTR_IMMUTABLE = 0x00000010 2945 STATX_ATTR_MOUNT_ROOT = 0x00002000 2946 STATX_ATTR_NODUMP = 0x00000040 2947 STATX_ATTR_VERITY = 0x00100000 2948 STATX_BASIC_STATS = 0x000007ff 2949 STATX_BLOCKS = 0x00000400 2950 STATX_BTIME = 0x00000800 2951 STATX_CTIME = 0x00000080 2952 STATX_GID = 0x00000010 2953 STATX_INO = 0x00000100 2954 STATX_MNT_ID = 0x00001000 2955 STATX_MODE = 0x00000002 2956 STATX_MTIME = 0x00000040 2957 STATX_NLINK = 0x00000004 2958 STATX_SIZE = 0x00000200 2959 STATX_TYPE = 0x00000001 2960 STATX_UID = 0x00000008 2961 STATX__RESERVED = 0x80000000 2962 SYNC_FILE_RANGE_WAIT_AFTER = 4 2963 SYNC_FILE_RANGE_WAIT_BEFORE = 1 2964 SYNC_FILE_RANGE_WRITE = 2 2965 SYNC_FILE_RANGE_WRITE_AND_WAIT = 7 2966 X_FALLOC_H_ = 0 2967 X_LINUX_STAT_H = 0 2968 X_POSIX_FD_SETSIZE = 20 2969 X_POSIX_HIWAT = 512 2970 X_POSIX_QLIMIT = 1 2971 X_POSIX_UIO_MAXIOV = 16 2972 SQLITE_INTARRAY_H = 0 2973 JT_MAX_PATHNAME = 512 2974 JT_VFS_NAME = "jt" 2975 MALLOC_LOG_FRAMES = 10 2976 DEFAULT_SECTOR_SIZE = 0x1000 2977 MAX_PAGE_SIZE = 0x10000 2978 MULTIPLEX_CTRL_ENABLE = 214014 2979 MULTIPLEX_CTRL_SET_CHUNK_SIZE = 214015 2980 MULTIPLEX_CTRL_SET_MAX_CHUNKS = 214016 2981 SQLITE_MULTIPLEX_CHUNK_SIZE = 2147418112 2982 SQLITE_MULTIPLEX_MAX_CHUNKS = 12 2983 SQLITE_MULTIPLEX_VFS_NAME = "multiplex" 2984 SQLITE_TEST_MULTIPLEX_H = 0 2985 MAX_MUTEXES = 14 2986 STATIC_MUTEXES = 12 2987 BLOBSIZE = 10485760 2988 BLOCKSIZE = 512 2989 DATABASE_FILE = 1 2990 FS_VFS_NAME = "fs" 2991 JOURNAL_FILE = 2 2992 INST_MAX_PATHNAME = 512 2993 OS_ACCESS = 1 2994 OS_ANNOTATE = 28 2995 OS_CHECKRESERVEDLOCK = 2 2996 OS_CLOSE = 3 2997 OS_CURRENTTIME = 4 2998 OS_DELETE = 5 2999 OS_DEVCHAR = 6 3000 OS_FILECONTROL = 7 3001 OS_FILESIZE = 8 3002 OS_FULLPATHNAME = 9 3003 OS_LOCK = 11 3004 OS_NUMEVENTS = 29 3005 OS_OPEN = 12 3006 OS_RANDOMNESS = 13 3007 OS_READ = 14 3008 OS_SECTORSIZE = 15 3009 OS_SHMBARRIER = 26 3010 OS_SHMLOCK = 25 3011 OS_SHMMAP = 23 3012 OS_SHMUNMAP = 22 3013 OS_SLEEP = 16 3014 OS_SYNC = 17 3015 OS_TRUNCATE = 18 3016 OS_UNLOCK = 19 3017 OS_WRITE = 20 3018 VFSLOG_BUFFERSIZE = 8192 3019 TESTPCACHE_CLEAR = 0xd42670d4 3020 TESTPCACHE_NPAGE = 217 3021 TESTPCACHE_RESERVE = 17 3022 TESTPCACHE_VALID = 0x364585fd 3023 MSG_Close = 6 3024 MSG_Done = 7 3025 MSG_Finalize = 5 3026 MSG_Open = 1 3027 MSG_Prepare = 2 3028 MSG_Reset = 4 3029 MSG_Step = 3 3030 MADV_COLD = 20 3031 MADV_DODUMP = 17 3032 MADV_DOFORK = 11 3033 MADV_DONTDUMP = 16 3034 MADV_DONTFORK = 10 3035 MADV_DONTNEED = 4 3036 MADV_FREE = 8 3037 MADV_HUGEPAGE = 14 3038 MADV_HWPOISON = 100 3039 MADV_KEEPONFORK = 19 3040 MADV_MERGEABLE = 12 3041 MADV_NOHUGEPAGE = 15 3042 MADV_NORMAL = 0 3043 MADV_PAGEOUT = 21 3044 MADV_RANDOM = 1 3045 MADV_REMOVE = 9 3046 MADV_SEQUENTIAL = 2 3047 MADV_UNMERGEABLE = 13 3048 MADV_WILLNEED = 3 3049 MADV_WIPEONFORK = 18 3050 MAP_ANON = 32 3051 MAP_ANONYMOUS = 0x20 3052 MAP_DENYWRITE = 0x00800 3053 MAP_EXECUTABLE = 0x01000 3054 MAP_FILE = 0 3055 MAP_FIXED = 0x10 3056 MAP_FIXED_NOREPLACE = 0x100000 3057 MAP_GROWSDOWN = 0x00100 3058 MAP_HUGETLB = 0x40000 3059 MAP_HUGE_MASK = 0x3f 3060 MAP_HUGE_SHIFT = 26 3061 MAP_LOCKED = 0x02000 3062 MAP_NONBLOCK = 0x10000 3063 MAP_NORESERVE = 0x04000 3064 MAP_POPULATE = 0x08000 3065 MAP_PRIVATE = 0x02 3066 MAP_SHARED = 0x01 3067 MAP_SHARED_VALIDATE = 0x03 3068 MAP_STACK = 0x20000 3069 MAP_SYNC = 0x80000 3070 MAP_TYPE = 0x0f 3071 MCL_CURRENT = 1 3072 MCL_FUTURE = 2 3073 MCL_ONFAULT = 4 3074 MFD_ALLOW_SEALING = 2 3075 MFD_CLOEXEC = 1 3076 MFD_HUGETLB = 4 3077 MLOCK_ONFAULT = 1 3078 MREMAP_FIXED = 2 3079 MREMAP_MAYMOVE = 1 3080 MS_ASYNC = 1 3081 MS_INVALIDATE = 2 3082 MS_SYNC = 4 3083 PKEY_DISABLE_ACCESS = 0x1 3084 PKEY_DISABLE_WRITE = 0x2 3085 POSIX_MADV_DONTNEED = 4 3086 POSIX_MADV_NORMAL = 0 3087 POSIX_MADV_RANDOM = 1 3088 POSIX_MADV_SEQUENTIAL = 2 3089 POSIX_MADV_WILLNEED = 3 3090 PROT_EXEC = 0x4 3091 PROT_GROWSDOWN = 0x01000000 3092 PROT_GROWSUP = 0x02000000 3093 PROT_NONE = 0x0 3094 PROT_READ = 0x1 3095 PROT_WRITE = 0x2 3096 X_SYS_MMAN_H = 1 3097 TCLVAR_NAME_EQ = 101 3098 TCLVAR_NAME_MATCH = 109 3099 TCLVAR_VALUE_GLOB = 103 3100 TCLVAR_VALUE_LIKE = 108 3101 TCLVAR_VALUE_REGEXP = 114 3102 FAULT_INJECT_NONE = 0 3103 FAULT_INJECT_PERSISTENT = 2 3104 FAULT_INJECT_TRANSIENT = 1 3105 TESTVFS_ACCESS_MASK = 0x00004000 3106 TESTVFS_ALL_MASK = 0x001FFFFF 3107 TESTVFS_CKLOCK_MASK = 0x00080000 3108 TESTVFS_CLOSE_MASK = 0x00000800 3109 TESTVFS_DELETE_MASK = 0x00000400 3110 TESTVFS_FCNTL_MASK = 0x00100000 3111 TESTVFS_FULLPATHNAME_MASK = 0x00008000 3112 TESTVFS_LOCK_MASK = 0x00040000 3113 TESTVFS_MAX_ARGS = 12 3114 TESTVFS_MAX_PAGES = 1024 3115 TESTVFS_OPEN_MASK = 0x00000100 3116 TESTVFS_READ_MASK = 0x00010000 3117 TESTVFS_SHMBARRIER_MASK = 0x00000040 3118 TESTVFS_SHMCLOSE_MASK = 0x00000080 3119 TESTVFS_SHMLOCK_MASK = 0x00000010 3120 TESTVFS_SHMMAP_MASK = 0x00000020 3121 TESTVFS_SHMOPEN_MASK = 0x00000001 3122 TESTVFS_SYNC_MASK = 0x00000200 3123 TESTVFS_TRUNCATE_MASK = 0x00002000 3124 TESTVFS_UNLOCK_MASK = 0x00020000 3125 TESTVFS_WRITE_MASK = 0x00001000 3126 ) 3127 3128 const ( 3129 _PC_LINK_MAX = 0 3130 _PC_MAX_CANON = 1 3131 _PC_MAX_INPUT = 2 3132 _PC_NAME_MAX = 3 3133 _PC_PATH_MAX = 4 3134 _PC_PIPE_BUF = 5 3135 _PC_CHOWN_RESTRICTED = 6 3136 _PC_NO_TRUNC = 7 3137 _PC_VDISABLE = 8 3138 _PC_SYNC_IO = 9 3139 _PC_ASYNC_IO = 10 3140 _PC_PRIO_IO = 11 3141 _PC_SOCK_MAXBUF = 12 3142 _PC_FILESIZEBITS = 13 3143 _PC_REC_INCR_XFER_SIZE = 14 3144 _PC_REC_MAX_XFER_SIZE = 15 3145 _PC_REC_MIN_XFER_SIZE = 16 3146 _PC_REC_XFER_ALIGN = 17 3147 _PC_ALLOC_SIZE_MIN = 18 3148 _PC_SYMLINK_MAX = 19 3149 _PC_2_SYMLINKS = 20 3150 ) 3151 3152 const ( 3153 _CS_PATH = 0 3154 3155 _CS_V6_WIDTH_RESTRICTED_ENVS = 1 3156 3157 _CS_GNU_LIBC_VERSION = 2 3158 _CS_GNU_LIBPTHREAD_VERSION = 3 3159 3160 _CS_V5_WIDTH_RESTRICTED_ENVS = 4 3161 3162 _CS_V7_WIDTH_RESTRICTED_ENVS = 5 3163 3164 _CS_LFS_CFLAGS = 1000 3165 _CS_LFS_LDFLAGS = 1001 3166 _CS_LFS_LIBS = 1002 3167 _CS_LFS_LINTFLAGS = 1003 3168 _CS_LFS64_CFLAGS = 1004 3169 _CS_LFS64_LDFLAGS = 1005 3170 _CS_LFS64_LIBS = 1006 3171 _CS_LFS64_LINTFLAGS = 1007 3172 3173 _CS_XBS5_ILP32_OFF32_CFLAGS = 1100 3174 _CS_XBS5_ILP32_OFF32_LDFLAGS = 1101 3175 _CS_XBS5_ILP32_OFF32_LIBS = 1102 3176 _CS_XBS5_ILP32_OFF32_LINTFLAGS = 1103 3177 _CS_XBS5_ILP32_OFFBIG_CFLAGS = 1104 3178 _CS_XBS5_ILP32_OFFBIG_LDFLAGS = 1105 3179 _CS_XBS5_ILP32_OFFBIG_LIBS = 1106 3180 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS = 1107 3181 _CS_XBS5_LP64_OFF64_CFLAGS = 1108 3182 _CS_XBS5_LP64_OFF64_LDFLAGS = 1109 3183 _CS_XBS5_LP64_OFF64_LIBS = 1110 3184 _CS_XBS5_LP64_OFF64_LINTFLAGS = 1111 3185 _CS_XBS5_LPBIG_OFFBIG_CFLAGS = 1112 3186 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS = 1113 3187 _CS_XBS5_LPBIG_OFFBIG_LIBS = 1114 3188 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS = 1115 3189 3190 _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116 3191 _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117 3192 _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118 3193 _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119 3194 _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120 3195 _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121 3196 _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122 3197 _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123 3198 _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124 3199 _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125 3200 _CS_POSIX_V6_LP64_OFF64_LIBS = 1126 3201 _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127 3202 _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128 3203 _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129 3204 _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130 3205 _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131 3206 3207 _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132 3208 _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133 3209 _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134 3210 _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135 3211 _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136 3212 _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137 3213 _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138 3214 _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139 3215 _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140 3216 _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141 3217 _CS_POSIX_V7_LP64_OFF64_LIBS = 1142 3218 _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143 3219 _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144 3220 _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145 3221 _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146 3222 _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147 3223 3224 _CS_V6_ENV = 1148 3225 _CS_V7_ENV = 1149 3226 ) 3227 3228 const ( 3229 _SC_ARG_MAX = 0 3230 _SC_CHILD_MAX = 1 3231 _SC_CLK_TCK = 2 3232 _SC_NGROUPS_MAX = 3 3233 _SC_OPEN_MAX = 4 3234 _SC_STREAM_MAX = 5 3235 _SC_TZNAME_MAX = 6 3236 _SC_JOB_CONTROL = 7 3237 _SC_SAVED_IDS = 8 3238 _SC_REALTIME_SIGNALS = 9 3239 _SC_PRIORITY_SCHEDULING = 10 3240 _SC_TIMERS = 11 3241 _SC_ASYNCHRONOUS_IO = 12 3242 _SC_PRIORITIZED_IO = 13 3243 _SC_SYNCHRONIZED_IO = 14 3244 _SC_FSYNC = 15 3245 _SC_MAPPED_FILES = 16 3246 _SC_MEMLOCK = 17 3247 _SC_MEMLOCK_RANGE = 18 3248 _SC_MEMORY_PROTECTION = 19 3249 _SC_MESSAGE_PASSING = 20 3250 _SC_SEMAPHORES = 21 3251 _SC_SHARED_MEMORY_OBJECTS = 22 3252 _SC_AIO_LISTIO_MAX = 23 3253 _SC_AIO_MAX = 24 3254 _SC_AIO_PRIO_DELTA_MAX = 25 3255 _SC_DELAYTIMER_MAX = 26 3256 _SC_MQ_OPEN_MAX = 27 3257 _SC_MQ_PRIO_MAX = 28 3258 _SC_VERSION = 29 3259 _SC_PAGESIZE = 30 3260 _SC_RTSIG_MAX = 31 3261 _SC_SEM_NSEMS_MAX = 32 3262 _SC_SEM_VALUE_MAX = 33 3263 _SC_SIGQUEUE_MAX = 34 3264 _SC_TIMER_MAX = 35 3265 3266 _SC_BC_BASE_MAX = 36 3267 _SC_BC_DIM_MAX = 37 3268 _SC_BC_SCALE_MAX = 38 3269 _SC_BC_STRING_MAX = 39 3270 _SC_COLL_WEIGHTS_MAX = 40 3271 _SC_EQUIV_CLASS_MAX = 41 3272 _SC_EXPR_NEST_MAX = 42 3273 _SC_LINE_MAX = 43 3274 _SC_RE_DUP_MAX = 44 3275 _SC_CHARCLASS_NAME_MAX = 45 3276 3277 _SC_2_VERSION = 46 3278 _SC_2_C_BIND = 47 3279 _SC_2_C_DEV = 48 3280 _SC_2_FORT_DEV = 49 3281 _SC_2_FORT_RUN = 50 3282 _SC_2_SW_DEV = 51 3283 _SC_2_LOCALEDEF = 52 3284 3285 _SC_PII = 53 3286 _SC_PII_XTI = 54 3287 _SC_PII_SOCKET = 55 3288 _SC_PII_INTERNET = 56 3289 _SC_PII_OSI = 57 3290 _SC_POLL = 58 3291 _SC_SELECT = 59 3292 _SC_UIO_MAXIOV = 60 3293 _SC_IOV_MAX = 60 3294 _SC_PII_INTERNET_STREAM = 61 3295 _SC_PII_INTERNET_DGRAM = 62 3296 _SC_PII_OSI_COTS = 63 3297 _SC_PII_OSI_CLTS = 64 3298 _SC_PII_OSI_M = 65 3299 _SC_T_IOV_MAX = 66 3300 3301 _SC_THREADS = 67 3302 _SC_THREAD_SAFE_FUNCTIONS = 68 3303 _SC_GETGR_R_SIZE_MAX = 69 3304 _SC_GETPW_R_SIZE_MAX = 70 3305 _SC_LOGIN_NAME_MAX = 71 3306 _SC_TTY_NAME_MAX = 72 3307 _SC_THREAD_DESTRUCTOR_ITERATIONS = 73 3308 _SC_THREAD_KEYS_MAX = 74 3309 _SC_THREAD_STACK_MIN = 75 3310 _SC_THREAD_THREADS_MAX = 76 3311 _SC_THREAD_ATTR_STACKADDR = 77 3312 _SC_THREAD_ATTR_STACKSIZE = 78 3313 _SC_THREAD_PRIORITY_SCHEDULING = 79 3314 _SC_THREAD_PRIO_INHERIT = 80 3315 _SC_THREAD_PRIO_PROTECT = 81 3316 _SC_THREAD_PROCESS_SHARED = 82 3317 3318 _SC_NPROCESSORS_CONF = 83 3319 _SC_NPROCESSORS_ONLN = 84 3320 _SC_PHYS_PAGES = 85 3321 _SC_AVPHYS_PAGES = 86 3322 _SC_ATEXIT_MAX = 87 3323 _SC_PASS_MAX = 88 3324 3325 _SC_XOPEN_VERSION = 89 3326 _SC_XOPEN_XCU_VERSION = 90 3327 _SC_XOPEN_UNIX = 91 3328 _SC_XOPEN_CRYPT = 92 3329 _SC_XOPEN_ENH_I18N = 93 3330 _SC_XOPEN_SHM = 94 3331 3332 _SC_2_CHAR_TERM = 95 3333 _SC_2_C_VERSION = 96 3334 _SC_2_UPE = 97 3335 3336 _SC_XOPEN_XPG2 = 98 3337 _SC_XOPEN_XPG3 = 99 3338 _SC_XOPEN_XPG4 = 100 3339 3340 _SC_CHAR_BIT = 101 3341 _SC_CHAR_MAX = 102 3342 _SC_CHAR_MIN = 103 3343 _SC_INT_MAX = 104 3344 _SC_INT_MIN = 105 3345 _SC_LONG_BIT = 106 3346 _SC_WORD_BIT = 107 3347 _SC_MB_LEN_MAX = 108 3348 _SC_NZERO = 109 3349 _SC_SSIZE_MAX = 110 3350 _SC_SCHAR_MAX = 111 3351 _SC_SCHAR_MIN = 112 3352 _SC_SHRT_MAX = 113 3353 _SC_SHRT_MIN = 114 3354 _SC_UCHAR_MAX = 115 3355 _SC_UINT_MAX = 116 3356 _SC_ULONG_MAX = 117 3357 _SC_USHRT_MAX = 118 3358 3359 _SC_NL_ARGMAX = 119 3360 _SC_NL_LANGMAX = 120 3361 _SC_NL_MSGMAX = 121 3362 _SC_NL_NMAX = 122 3363 _SC_NL_SETMAX = 123 3364 _SC_NL_TEXTMAX = 124 3365 3366 _SC_XBS5_ILP32_OFF32 = 125 3367 _SC_XBS5_ILP32_OFFBIG = 126 3368 _SC_XBS5_LP64_OFF64 = 127 3369 _SC_XBS5_LPBIG_OFFBIG = 128 3370 3371 _SC_XOPEN_LEGACY = 129 3372 _SC_XOPEN_REALTIME = 130 3373 _SC_XOPEN_REALTIME_THREADS = 131 3374 3375 _SC_ADVISORY_INFO = 132 3376 _SC_BARRIERS = 133 3377 _SC_BASE = 134 3378 _SC_C_LANG_SUPPORT = 135 3379 _SC_C_LANG_SUPPORT_R = 136 3380 _SC_CLOCK_SELECTION = 137 3381 _SC_CPUTIME = 138 3382 _SC_THREAD_CPUTIME = 139 3383 _SC_DEVICE_IO = 140 3384 _SC_DEVICE_SPECIFIC = 141 3385 _SC_DEVICE_SPECIFIC_R = 142 3386 _SC_FD_MGMT = 143 3387 _SC_FIFO = 144 3388 _SC_PIPE = 145 3389 _SC_FILE_ATTRIBUTES = 146 3390 _SC_FILE_LOCKING = 147 3391 _SC_FILE_SYSTEM = 148 3392 _SC_MONOTONIC_CLOCK = 149 3393 _SC_MULTI_PROCESS = 150 3394 _SC_SINGLE_PROCESS = 151 3395 _SC_NETWORKING = 152 3396 _SC_READER_WRITER_LOCKS = 153 3397 _SC_SPIN_LOCKS = 154 3398 _SC_REGEXP = 155 3399 _SC_REGEX_VERSION = 156 3400 _SC_SHELL = 157 3401 _SC_SIGNALS = 158 3402 _SC_SPAWN = 159 3403 _SC_SPORADIC_SERVER = 160 3404 _SC_THREAD_SPORADIC_SERVER = 161 3405 _SC_SYSTEM_DATABASE = 162 3406 _SC_SYSTEM_DATABASE_R = 163 3407 _SC_TIMEOUTS = 164 3408 _SC_TYPED_MEMORY_OBJECTS = 165 3409 _SC_USER_GROUPS = 166 3410 _SC_USER_GROUPS_R = 167 3411 _SC_2_PBS = 168 3412 _SC_2_PBS_ACCOUNTING = 169 3413 _SC_2_PBS_LOCATE = 170 3414 _SC_2_PBS_MESSAGE = 171 3415 _SC_2_PBS_TRACK = 172 3416 _SC_SYMLOOP_MAX = 173 3417 _SC_STREAMS = 174 3418 _SC_2_PBS_CHECKPOINT = 175 3419 3420 _SC_V6_ILP32_OFF32 = 176 3421 _SC_V6_ILP32_OFFBIG = 177 3422 _SC_V6_LP64_OFF64 = 178 3423 _SC_V6_LPBIG_OFFBIG = 179 3424 3425 _SC_HOST_NAME_MAX = 180 3426 _SC_TRACE = 181 3427 _SC_TRACE_EVENT_FILTER = 182 3428 _SC_TRACE_INHERIT = 183 3429 _SC_TRACE_LOG = 184 3430 3431 _SC_LEVEL1_ICACHE_SIZE = 185 3432 _SC_LEVEL1_ICACHE_ASSOC = 186 3433 _SC_LEVEL1_ICACHE_LINESIZE = 187 3434 _SC_LEVEL1_DCACHE_SIZE = 188 3435 _SC_LEVEL1_DCACHE_ASSOC = 189 3436 _SC_LEVEL1_DCACHE_LINESIZE = 190 3437 _SC_LEVEL2_CACHE_SIZE = 191 3438 _SC_LEVEL2_CACHE_ASSOC = 192 3439 _SC_LEVEL2_CACHE_LINESIZE = 193 3440 _SC_LEVEL3_CACHE_SIZE = 194 3441 _SC_LEVEL3_CACHE_ASSOC = 195 3442 _SC_LEVEL3_CACHE_LINESIZE = 196 3443 _SC_LEVEL4_CACHE_SIZE = 197 3444 _SC_LEVEL4_CACHE_ASSOC = 198 3445 _SC_LEVEL4_CACHE_LINESIZE = 199 3446 3447 _SC_IPV6 = 235 3448 _SC_RAW_SOCKETS = 236 3449 3450 _SC_V7_ILP32_OFF32 = 237 3451 _SC_V7_ILP32_OFFBIG = 238 3452 _SC_V7_LP64_OFF64 = 239 3453 _SC_V7_LPBIG_OFFBIG = 240 3454 3455 _SC_SS_REPL_MAX = 241 3456 3457 _SC_TRACE_EVENT_NAME_MAX = 242 3458 _SC_TRACE_NAME_MAX = 243 3459 _SC_TRACE_SYS_MAX = 244 3460 _SC_TRACE_USER_EVENT_MAX = 245 3461 3462 _SC_XOPEN_STREAMS = 246 3463 3464 _SC_THREAD_ROBUST_PRIO_INHERIT = 247 3465 _SC_THREAD_ROBUST_PRIO_PROTECT = 248 3466 ) 3467 3468 const ( 3469 F_OWNER_TID = 0 3470 F_OWNER_PID = 1 3471 F_OWNER_PGRP = 2 3472 F_OWNER_GID = 2 3473 ) 3474 3475 const ( 3476 RUSAGE_SELF = 0 3477 3478 RUSAGE_CHILDREN = -1 3479 ) 3480 3481 const ( 3482 RUSAGE_THREAD = 1 3483 ) 3484 3485 const ( 3486 PRIO_PROCESS = 0 3487 PRIO_PGRP = 1 3488 PRIO_USER = 2 3489 ) 3490 3491 const ( 3492 RLIMIT_CPU = 0 3493 3494 RLIMIT_FSIZE = 1 3495 3496 RLIMIT_DATA = 2 3497 3498 RLIMIT_STACK = 3 3499 3500 RLIMIT_CORE = 4 3501 3502 __RLIMIT_RSS = 5 3503 3504 RLIMIT_NOFILE = 7 3505 __RLIMIT_OFILE = 7 3506 3507 RLIMIT_AS = 9 3508 3509 __RLIMIT_NPROC = 6 3510 3511 __RLIMIT_MEMLOCK = 8 3512 3513 __RLIMIT_LOCKS = 10 3514 3515 __RLIMIT_SIGPENDING = 11 3516 3517 __RLIMIT_MSGQUEUE = 12 3518 3519 __RLIMIT_NICE = 13 3520 3521 __RLIMIT_RTPRIO = 14 3522 3523 __RLIMIT_RTTIME = 15 3524 3525 __RLIMIT_NLIMITS = 16 3526 __RLIM_NLIMITS = 16 3527 ) 3528 3529 const ( 3530 SIGEV_SIGNAL = 0 3531 SIGEV_NONE = 1 3532 SIGEV_THREAD = 2 3533 3534 SIGEV_THREAD_ID = 4 3535 ) 3536 3537 const ( 3538 SEGV_MAPERR = 1 3539 SEGV_ACCERR = 2 3540 SEGV_BNDERR = 3 3541 SEGV_PKUERR = 4 3542 SEGV_ACCADI = 5 3543 SEGV_ADIDERR = 6 3544 SEGV_ADIPERR = 7 3545 ) 3546 3547 const ( 3548 BUS_ADRALN = 1 3549 BUS_ADRERR = 2 3550 BUS_OBJERR = 3 3551 BUS_MCEERR_AR = 4 3552 BUS_MCEERR_AO = 5 3553 ) 3554 3555 const ( 3556 CLD_EXITED = 1 3557 CLD_KILLED = 2 3558 CLD_DUMPED = 3 3559 CLD_TRAPPED = 4 3560 CLD_STOPPED = 5 3561 CLD_CONTINUED = 6 3562 ) 3563 3564 const ( 3565 POLL_IN = 1 3566 POLL_OUT = 2 3567 POLL_MSG = 3 3568 POLL_ERR = 4 3569 POLL_PRI = 5 3570 POLL_HUP = 6 3571 ) 3572 3573 const ( 3574 SI_ASYNCNL = -60 3575 SI_DETHREAD = -7 3576 3577 SI_TKILL = -6 3578 SI_SIGIO = -5 3579 SI_ASYNCIO = -4 3580 SI_MESGQ = -3 3581 SI_TIMER = -2 3582 SI_QUEUE = -1 3583 SI_USER = 0 3584 SI_KERNEL = 128 3585 ) 3586 3587 const ( 3588 ILL_ILLOPC = 1 3589 ILL_ILLOPN = 2 3590 ILL_ILLADR = 3 3591 ILL_ILLTRP = 4 3592 ILL_PRVOPC = 5 3593 ILL_PRVREG = 6 3594 ILL_COPROC = 7 3595 ILL_BADSTK = 8 3596 ILL_BADIADDR = 9 3597 ) 3598 3599 const ( 3600 FPE_INTDIV = 1 3601 FPE_INTOVF = 2 3602 FPE_FLTDIV = 3 3603 FPE_FLTOVF = 4 3604 FPE_FLTUND = 5 3605 FPE_FLTRES = 6 3606 FPE_FLTINV = 7 3607 FPE_FLTSUB = 8 3608 FPE_FLTUNK = 14 3609 FPE_CONDTRAP = 15 3610 ) 3611 3612 const ( 3613 SS_ONSTACK = 1 3614 SS_DISABLE = 2 3615 ) 3616 3617 const ( 3618 P_ALL = 0 3619 P_PID = 1 3620 P_PGID = 2 3621 ) 3622 3623 const ( 3624 _ISupper = 256 3625 _ISlower = 512 3626 _ISalpha = 1024 3627 _ISdigit = 2048 3628 _ISxdigit = 4096 3629 _ISspace = 8192 3630 _ISprint = 16384 3631 _ISgraph = 32768 3632 _ISblank = 1 3633 _IScntrl = 2 3634 _ISpunct = 4 3635 _ISalnum = 8 3636 ) 3637 3638 const ( 3639 DT_UNKNOWN = 0 3640 DT_FIFO = 1 3641 DT_CHR = 2 3642 DT_DIR = 4 3643 DT_BLK = 6 3644 DT_REG = 8 3645 DT_LNK = 10 3646 DT_SOCK = 12 3647 DT_WHT = 14 3648 ) 3649 3650 const ( 3651 PTHREAD_RWLOCK_PREFER_READER_NP = 0 3652 PTHREAD_RWLOCK_PREFER_WRITER_NP = 1 3653 PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP = 2 3654 PTHREAD_RWLOCK_DEFAULT_NP = 0 3655 ) 3656 3657 const ( 3658 PTHREAD_INHERIT_SCHED = 0 3659 PTHREAD_EXPLICIT_SCHED = 1 3660 ) 3661 3662 const ( 3663 PTHREAD_SCOPE_SYSTEM = 0 3664 PTHREAD_SCOPE_PROCESS = 1 3665 ) 3666 3667 const ( 3668 PTHREAD_PROCESS_PRIVATE = 0 3669 PTHREAD_PROCESS_SHARED = 1 3670 ) 3671 3672 const ( 3673 PTHREAD_CANCEL_ENABLE = 0 3674 PTHREAD_CANCEL_DISABLE = 1 3675 ) 3676 const ( 3677 PTHREAD_CANCEL_DEFERRED = 0 3678 PTHREAD_CANCEL_ASYNCHRONOUS = 1 3679 ) 3680 3681 const ( 3682 PTHREAD_CREATE_JOINABLE = 0 3683 PTHREAD_CREATE_DETACHED = 1 3684 ) 3685 3686 const ( 3687 PTHREAD_MUTEX_TIMED_NP = 0 3688 PTHREAD_MUTEX_RECURSIVE_NP = 1 3689 PTHREAD_MUTEX_ERRORCHECK_NP = 2 3690 PTHREAD_MUTEX_ADAPTIVE_NP = 3 3691 PTHREAD_MUTEX_NORMAL = 0 3692 PTHREAD_MUTEX_RECURSIVE = 1 3693 PTHREAD_MUTEX_ERRORCHECK = 2 3694 PTHREAD_MUTEX_DEFAULT = 0 3695 PTHREAD_MUTEX_FAST_NP = 0 3696 ) 3697 3698 const ( 3699 PTHREAD_MUTEX_STALLED = 0 3700 PTHREAD_MUTEX_STALLED_NP = 0 3701 PTHREAD_MUTEX_ROBUST = 1 3702 PTHREAD_MUTEX_ROBUST_NP = 1 3703 ) 3704 3705 const ( 3706 PTHREAD_PRIO_NONE = 0 3707 PTHREAD_PRIO_INHERIT = 1 3708 PTHREAD_PRIO_PROTECT = 2 3709 ) 3710 3711 const ( 3712 ITIMER_REAL = 0 3713 3714 ITIMER_VIRTUAL = 1 3715 3716 ITIMER_PROF = 2 3717 ) 3718 3719 const ( 3720 TCL_QUEUE_TAIL = 0 3721 TCL_QUEUE_HEAD = 1 3722 TCL_QUEUE_MARK = 2 3723 ) 3724 3725 const ( 3726 TCL_PATH_ABSOLUTE = 0 3727 TCL_PATH_RELATIVE = 1 3728 TCL_PATH_VOLUME_RELATIVE = 2 3729 ) 3730 3731 const ( 3732 TCL_INT = 0 3733 TCL_DOUBLE = 1 3734 TCL_EITHER = 2 3735 TCL_WIDE_INT = 3 3736 ) 3737 3738 type ptrdiff_t = int64 3739 3740 type size_t = uint64 3741 3742 type wchar_t = uint32 3743 3744 type va_list = uintptr 3745 3746 type sqlite32 = struct { 3747 FpVfs uintptr 3748 FpVdbe uintptr 3749 FpDfltColl uintptr 3750 Fmutex uintptr 3751 FaDb uintptr 3752 FnDb int32 3753 FmDbFlags u32 3754 Fflags u64 3755 FlastRowid i64 3756 FszMmap i64 3757 FnSchemaLock u32 3758 FopenFlags uint32 3759 FerrCode int32 3760 FerrByteOffset int32 3761 FerrMask int32 3762 FiSysErrno int32 3763 FdbOptFlags u32 3764 Fenc u8 3765 FautoCommit u8 3766 Ftemp_store u8 3767 FmallocFailed u8 3768 FbBenignMalloc u8 3769 FdfltLockMode u8 3770 FnextAutovac int8 3771 FsuppressErr u8 3772 FvtabOnConflict u8 3773 FisTransactionSavepoint u8 3774 FmTrace u8 3775 FnoSharedCache u8 3776 FnSqlExec u8 3777 FeOpenState u8 3778 F__ccgo_pad1 [2]byte 3779 FnextPagesize int32 3780 FnChange i64 3781 FnTotalChange i64 3782 FaLimit [12]int32 3783 FnMaxSorterMmap int32 3784 F__ccgo_pad2 [4]byte 3785 Finit struct { 3786 FnewTnum Pgno 3787 FiDb u8 3788 Fbusy u8 3789 F__ccgo_pad1 [2]byte 3790 ForphanTrigger uint8 3791 F__ccgo_pad2 [7]byte 3792 FazInit uintptr 3793 } 3794 FnVdbeActive int32 3795 FnVdbeRead int32 3796 FnVdbeWrite int32 3797 FnVdbeExec int32 3798 FnVDestroy int32 3799 FnExtension int32 3800 FaExtension uintptr 3801 Ftrace struct{ FxLegacy uintptr } 3802 FpTraceArg uintptr 3803 FxProfile uintptr 3804 FpProfileArg uintptr 3805 FpCommitArg uintptr 3806 FxCommitCallback uintptr 3807 FpRollbackArg uintptr 3808 FxRollbackCallback uintptr 3809 FpUpdateArg uintptr 3810 FxUpdateCallback uintptr 3811 FpAutovacPagesArg uintptr 3812 FxAutovacDestr uintptr 3813 FxAutovacPages uintptr 3814 FpParse uintptr 3815 FpPreUpdateArg uintptr 3816 FxPreUpdateCallback uintptr 3817 FpPreUpdate uintptr 3818 FxWalCallback uintptr 3819 FpWalArg uintptr 3820 FxCollNeeded uintptr 3821 FxCollNeeded16 uintptr 3822 FpCollNeededArg uintptr 3823 FpErr uintptr 3824 Fu1 struct { 3825 F__ccgo_pad1 [0]uint64 3826 FisInterrupted int32 3827 F__ccgo_pad2 [4]byte 3828 } 3829 Flookaside Lookaside 3830 FxAuth sqlite3_xauth 3831 FpAuthArg uintptr 3832 FxProgress uintptr 3833 FpProgressArg uintptr 3834 FnProgressOps uint32 3835 FnVTrans int32 3836 FaModule Hash 3837 FpVtabCtx uintptr 3838 FaVTrans uintptr 3839 FpDisconnect uintptr 3840 FaFunc Hash 3841 FaCollSeq Hash 3842 FbusyHandler BusyHandler 3843 FaDbStatic [2]Db 3844 FpSavepoint uintptr 3845 FnAnalysisLimit int32 3846 FbusyTimeout int32 3847 FnSavepoint int32 3848 FnStatement int32 3849 FnDeferredCons i64 3850 FnDeferredImmCons i64 3851 FpnBytesFreed uintptr 3852 FpBlockingConnection uintptr 3853 FpUnlockConnection uintptr 3854 FpUnlockArg uintptr 3855 FxUnlockNotify uintptr 3856 FpNextBlocked uintptr 3857 } 3858 3859 type sqlite_int64 = int64 3860 type sqlite_uint64 = uint64 3861 type sqlite3_int64 = sqlite_int64 3862 type sqlite3_uint64 = sqlite_uint64 3863 3864 type sqlite3_callback = uintptr 3865 3866 type sqlite3_file1 = struct{ FpMethods uintptr } 3867 3868 type sqlite3_file = sqlite3_file1 3869 type sqlite3_io_methods1 = struct { 3870 FiVersion int32 3871 F__ccgo_pad1 [4]byte 3872 FxClose uintptr 3873 FxRead uintptr 3874 FxWrite uintptr 3875 FxTruncate uintptr 3876 FxSync uintptr 3877 FxFileSize uintptr 3878 FxLock uintptr 3879 FxUnlock uintptr 3880 FxCheckReservedLock uintptr 3881 FxFileControl uintptr 3882 FxSectorSize uintptr 3883 FxDeviceCharacteristics uintptr 3884 FxShmMap uintptr 3885 FxShmLock uintptr 3886 FxShmBarrier uintptr 3887 FxShmUnmap uintptr 3888 FxFetch uintptr 3889 FxUnfetch uintptr 3890 } 3891 3892 type sqlite3_io_methods = sqlite3_io_methods1 3893 3894 type sqlite3_mutex1 = struct { 3895 FpReal uintptr 3896 FeType int32 3897 F__ccgo_pad1 [4]byte 3898 } 3899 3900 type sqlite3_api_routines1 = struct { 3901 Faggregate_context uintptr 3902 Faggregate_count uintptr 3903 Fbind_blob uintptr 3904 Fbind_double uintptr 3905 Fbind_int uintptr 3906 Fbind_int64 uintptr 3907 Fbind_null uintptr 3908 Fbind_parameter_count uintptr 3909 Fbind_parameter_index uintptr 3910 Fbind_parameter_name uintptr 3911 Fbind_text uintptr 3912 Fbind_text16 uintptr 3913 Fbind_value uintptr 3914 Fbusy_handler uintptr 3915 Fbusy_timeout uintptr 3916 Fchanges uintptr 3917 Fclose uintptr 3918 Fcollation_needed uintptr 3919 Fcollation_needed16 uintptr 3920 Fcolumn_blob uintptr 3921 Fcolumn_bytes uintptr 3922 Fcolumn_bytes16 uintptr 3923 Fcolumn_count uintptr 3924 Fcolumn_database_name uintptr 3925 Fcolumn_database_name16 uintptr 3926 Fcolumn_decltype uintptr 3927 Fcolumn_decltype16 uintptr 3928 Fcolumn_double uintptr 3929 Fcolumn_int uintptr 3930 Fcolumn_int64 uintptr 3931 Fcolumn_name uintptr 3932 Fcolumn_name16 uintptr 3933 Fcolumn_origin_name uintptr 3934 Fcolumn_origin_name16 uintptr 3935 Fcolumn_table_name uintptr 3936 Fcolumn_table_name16 uintptr 3937 Fcolumn_text uintptr 3938 Fcolumn_text16 uintptr 3939 Fcolumn_type uintptr 3940 Fcolumn_value uintptr 3941 Fcommit_hook uintptr 3942 Fcomplete uintptr 3943 Fcomplete16 uintptr 3944 Fcreate_collation uintptr 3945 Fcreate_collation16 uintptr 3946 Fcreate_function uintptr 3947 Fcreate_function16 uintptr 3948 Fcreate_module uintptr 3949 Fdata_count uintptr 3950 Fdb_handle uintptr 3951 Fdeclare_vtab uintptr 3952 Fenable_shared_cache uintptr 3953 Ferrcode uintptr 3954 Ferrmsg uintptr 3955 Ferrmsg16 uintptr 3956 Fexec uintptr 3957 Fexpired uintptr 3958 Ffinalize uintptr 3959 Ffree uintptr 3960 Ffree_table uintptr 3961 Fget_autocommit uintptr 3962 Fget_auxdata uintptr 3963 Fget_table uintptr 3964 Fglobal_recover uintptr 3965 Finterruptx uintptr 3966 Flast_insert_rowid uintptr 3967 Flibversion uintptr 3968 Flibversion_number uintptr 3969 Fmalloc uintptr 3970 Fmprintf uintptr 3971 Fopen uintptr 3972 Fopen16 uintptr 3973 Fprepare uintptr 3974 Fprepare16 uintptr 3975 Fprofile uintptr 3976 Fprogress_handler uintptr 3977 Frealloc uintptr 3978 Freset uintptr 3979 Fresult_blob uintptr 3980 Fresult_double uintptr 3981 Fresult_error uintptr 3982 Fresult_error16 uintptr 3983 Fresult_int uintptr 3984 Fresult_int64 uintptr 3985 Fresult_null uintptr 3986 Fresult_text uintptr 3987 Fresult_text16 uintptr 3988 Fresult_text16be uintptr 3989 Fresult_text16le uintptr 3990 Fresult_value uintptr 3991 Frollback_hook uintptr 3992 Fset_authorizer uintptr 3993 Fset_auxdata uintptr 3994 Fxsnprintf uintptr 3995 Fstep uintptr 3996 Ftable_column_metadata uintptr 3997 Fthread_cleanup uintptr 3998 Ftotal_changes uintptr 3999 Ftrace uintptr 4000 Ftransfer_bindings uintptr 4001 Fupdate_hook uintptr 4002 Fuser_data uintptr 4003 Fvalue_blob uintptr 4004 Fvalue_bytes uintptr 4005 Fvalue_bytes16 uintptr 4006 Fvalue_double uintptr 4007 Fvalue_int uintptr 4008 Fvalue_int64 uintptr 4009 Fvalue_numeric_type uintptr 4010 Fvalue_text uintptr 4011 Fvalue_text16 uintptr 4012 Fvalue_text16be uintptr 4013 Fvalue_text16le uintptr 4014 Fvalue_type uintptr 4015 Fvmprintf uintptr 4016 Foverload_function uintptr 4017 Fprepare_v2 uintptr 4018 Fprepare16_v2 uintptr 4019 Fclear_bindings uintptr 4020 Fcreate_module_v2 uintptr 4021 Fbind_zeroblob uintptr 4022 Fblob_bytes uintptr 4023 Fblob_close uintptr 4024 Fblob_open uintptr 4025 Fblob_read uintptr 4026 Fblob_write uintptr 4027 Fcreate_collation_v2 uintptr 4028 Ffile_control uintptr 4029 Fmemory_highwater uintptr 4030 Fmemory_used uintptr 4031 Fmutex_alloc uintptr 4032 Fmutex_enter uintptr 4033 Fmutex_free uintptr 4034 Fmutex_leave uintptr 4035 Fmutex_try uintptr 4036 Fopen_v2 uintptr 4037 Frelease_memory uintptr 4038 Fresult_error_nomem uintptr 4039 Fresult_error_toobig uintptr 4040 Fsleep uintptr 4041 Fsoft_heap_limit uintptr 4042 Fvfs_find uintptr 4043 Fvfs_register uintptr 4044 Fvfs_unregister uintptr 4045 Fxthreadsafe uintptr 4046 Fresult_zeroblob uintptr 4047 Fresult_error_code uintptr 4048 Ftest_control uintptr 4049 Frandomness uintptr 4050 Fcontext_db_handle uintptr 4051 Fextended_result_codes uintptr 4052 Flimit uintptr 4053 Fnext_stmt uintptr 4054 Fsql uintptr 4055 Fstatus uintptr 4056 Fbackup_finish uintptr 4057 Fbackup_init uintptr 4058 Fbackup_pagecount uintptr 4059 Fbackup_remaining uintptr 4060 Fbackup_step uintptr 4061 Fcompileoption_get uintptr 4062 Fcompileoption_used uintptr 4063 Fcreate_function_v2 uintptr 4064 Fdb_config uintptr 4065 Fdb_mutex uintptr 4066 Fdb_status uintptr 4067 Fextended_errcode uintptr 4068 Flog uintptr 4069 Fsoft_heap_limit64 uintptr 4070 Fsourceid uintptr 4071 Fstmt_status uintptr 4072 Fstrnicmp uintptr 4073 Funlock_notify uintptr 4074 Fwal_autocheckpoint uintptr 4075 Fwal_checkpoint uintptr 4076 Fwal_hook uintptr 4077 Fblob_reopen uintptr 4078 Fvtab_config uintptr 4079 Fvtab_on_conflict uintptr 4080 Fclose_v2 uintptr 4081 Fdb_filename uintptr 4082 Fdb_readonly uintptr 4083 Fdb_release_memory uintptr 4084 Ferrstr uintptr 4085 Fstmt_busy uintptr 4086 Fstmt_readonly uintptr 4087 Fstricmp uintptr 4088 Furi_boolean uintptr 4089 Furi_int64 uintptr 4090 Furi_parameter uintptr 4091 Fxvsnprintf uintptr 4092 Fwal_checkpoint_v2 uintptr 4093 Fauto_extension uintptr 4094 Fbind_blob64 uintptr 4095 Fbind_text64 uintptr 4096 Fcancel_auto_extension uintptr 4097 Fload_extension uintptr 4098 Fmalloc64 uintptr 4099 Fmsize uintptr 4100 Frealloc64 uintptr 4101 Freset_auto_extension uintptr 4102 Fresult_blob64 uintptr 4103 Fresult_text64 uintptr 4104 Fstrglob uintptr 4105 Fvalue_dup uintptr 4106 Fvalue_free uintptr 4107 Fresult_zeroblob64 uintptr 4108 Fbind_zeroblob64 uintptr 4109 Fvalue_subtype uintptr 4110 Fresult_subtype uintptr 4111 Fstatus64 uintptr 4112 Fstrlike uintptr 4113 Fdb_cacheflush uintptr 4114 Fsystem_errno uintptr 4115 Ftrace_v2 uintptr 4116 Fexpanded_sql uintptr 4117 Fset_last_insert_rowid uintptr 4118 Fprepare_v3 uintptr 4119 Fprepare16_v3 uintptr 4120 Fbind_pointer uintptr 4121 Fresult_pointer uintptr 4122 Fvalue_pointer uintptr 4123 Fvtab_nochange uintptr 4124 Fvalue_nochange uintptr 4125 Fvtab_collation uintptr 4126 Fkeyword_count uintptr 4127 Fkeyword_name uintptr 4128 Fkeyword_check uintptr 4129 Fstr_new uintptr 4130 Fstr_finish uintptr 4131 Fstr_appendf uintptr 4132 Fstr_vappendf uintptr 4133 Fstr_append uintptr 4134 Fstr_appendall uintptr 4135 Fstr_appendchar uintptr 4136 Fstr_reset uintptr 4137 Fstr_errcode uintptr 4138 Fstr_length uintptr 4139 Fstr_value uintptr 4140 Fcreate_window_function uintptr 4141 Fnormalized_sql uintptr 4142 Fstmt_isexplain uintptr 4143 Fvalue_frombind uintptr 4144 Fdrop_modules uintptr 4145 Fhard_heap_limit64 uintptr 4146 Furi_key uintptr 4147 Ffilename_database uintptr 4148 Ffilename_journal uintptr 4149 Ffilename_wal uintptr 4150 Fcreate_filename uintptr 4151 Ffree_filename uintptr 4152 Fdatabase_file_object uintptr 4153 Ftxn_state uintptr 4154 Fchanges64 uintptr 4155 Ftotal_changes64 uintptr 4156 Fautovacuum_pages uintptr 4157 Ferror_offset uintptr 4158 Fvtab_rhs_value uintptr 4159 Fvtab_distinct uintptr 4160 Fvtab_in uintptr 4161 Fvtab_in_first uintptr 4162 Fvtab_in_next uintptr 4163 Fdeserialize uintptr 4164 Fserialize uintptr 4165 Fdb_name uintptr 4166 } 4167 4168 type sqlite3_vfs1 = struct { 4169 FiVersion int32 4170 FszOsFile int32 4171 FmxPathname int32 4172 F__ccgo_pad1 [4]byte 4173 FpNext uintptr 4174 FzName uintptr 4175 FpAppData uintptr 4176 FxOpen uintptr 4177 FxDelete uintptr 4178 FxAccess uintptr 4179 FxFullPathname uintptr 4180 FxDlOpen uintptr 4181 FxDlError uintptr 4182 FxDlSym uintptr 4183 FxDlClose uintptr 4184 FxRandomness uintptr 4185 FxSleep uintptr 4186 FxCurrentTime uintptr 4187 FxGetLastError uintptr 4188 FxCurrentTimeInt64 uintptr 4189 FxSetSystemCall uintptr 4190 FxGetSystemCall uintptr 4191 FxNextSystemCall uintptr 4192 } 4193 4194 type sqlite3_vfs = sqlite3_vfs1 4195 type sqlite3_syscall_ptr = uintptr 4196 4197 type sqlite3_mem_methods1 = struct { 4198 FxMalloc uintptr 4199 FxFree uintptr 4200 FxRealloc uintptr 4201 FxSize uintptr 4202 FxRoundup uintptr 4203 FxInit uintptr 4204 FxShutdown uintptr 4205 FpAppData uintptr 4206 } 4207 4208 type sqlite3_mem_methods = sqlite3_mem_methods1 4209 4210 type sqlite3_value1 = struct { 4211 Fu struct{ Fr float64 } 4212 Fz uintptr 4213 Fn int32 4214 Fflags u16 4215 Fenc u8 4216 FeSubtype u8 4217 Fdb uintptr 4218 FszMalloc int32 4219 FuTemp u32 4220 FzMalloc uintptr 4221 FxDel uintptr 4222 } 4223 4224 type sqlite3_context1 = struct { 4225 FpOut uintptr 4226 FpFunc uintptr 4227 FpMem uintptr 4228 FpVdbe uintptr 4229 FiOp int32 4230 FisError int32 4231 Fenc u8 4232 FskipFlag u8 4233 Fargc u8 4234 F__ccgo_pad1 [5]byte 4235 Fargv [1]uintptr 4236 } 4237 4238 type sqlite3_destructor_type = uintptr 4239 4240 type sqlite3_vtab1 = struct { 4241 FpModule uintptr 4242 FnRef int32 4243 F__ccgo_pad1 [4]byte 4244 FzErrMsg uintptr 4245 } 4246 4247 type sqlite3_vtab = sqlite3_vtab1 4248 type sqlite3_index_info1 = struct { 4249 FnConstraint int32 4250 F__ccgo_pad1 [4]byte 4251 FaConstraint uintptr 4252 FnOrderBy int32 4253 F__ccgo_pad2 [4]byte 4254 FaOrderBy uintptr 4255 FaConstraintUsage uintptr 4256 FidxNum int32 4257 F__ccgo_pad3 [4]byte 4258 FidxStr uintptr 4259 FneedToFreeIdxStr int32 4260 ForderByConsumed int32 4261 FestimatedCost float64 4262 FestimatedRows sqlite3_int64 4263 FidxFlags int32 4264 F__ccgo_pad4 [4]byte 4265 FcolUsed sqlite3_uint64 4266 } 4267 4268 type sqlite3_index_info = sqlite3_index_info1 4269 type sqlite3_vtab_cursor1 = struct{ FpVtab uintptr } 4270 4271 type sqlite3_vtab_cursor = sqlite3_vtab_cursor1 4272 type sqlite3_module1 = struct { 4273 FiVersion int32 4274 F__ccgo_pad1 [4]byte 4275 FxCreate uintptr 4276 FxConnect uintptr 4277 FxBestIndex uintptr 4278 FxDisconnect uintptr 4279 FxDestroy uintptr 4280 FxOpen uintptr 4281 FxClose uintptr 4282 FxFilter uintptr 4283 FxNext uintptr 4284 FxEof uintptr 4285 FxColumn uintptr 4286 FxRowid uintptr 4287 FxUpdate uintptr 4288 FxBegin uintptr 4289 FxSync uintptr 4290 FxCommit uintptr 4291 FxRollback uintptr 4292 FxFindFunction uintptr 4293 FxRename uintptr 4294 FxSavepoint uintptr 4295 FxRelease uintptr 4296 FxRollbackTo uintptr 4297 FxShadowName uintptr 4298 } 4299 4300 type sqlite3_module = sqlite3_module1 4301 4302 type sqlite3_index_constraint = struct { 4303 FiColumn int32 4304 Fop uint8 4305 Fusable uint8 4306 F__ccgo_pad1 [2]byte 4307 FiTermOffset int32 4308 } 4309 4310 type sqlite3_index_orderby = struct { 4311 FiColumn int32 4312 Fdesc uint8 4313 F__ccgo_pad1 [3]byte 4314 } 4315 4316 type sqlite3_index_constraint_usage = struct { 4317 FargvIndex int32 4318 Fomit uint8 4319 F__ccgo_pad1 [3]byte 4320 } 4321 4322 type sqlite3_mutex_methods1 = struct { 4323 FxMutexInit uintptr 4324 FxMutexEnd uintptr 4325 FxMutexAlloc uintptr 4326 FxMutexFree uintptr 4327 FxMutexEnter uintptr 4328 FxMutexTry uintptr 4329 FxMutexLeave uintptr 4330 FxMutexHeld uintptr 4331 FxMutexNotheld uintptr 4332 } 4333 4334 type sqlite3_mutex_methods = sqlite3_mutex_methods1 4335 4336 type sqlite3_str1 = struct { 4337 Fdb uintptr 4338 FzText uintptr 4339 FnAlloc u32 4340 FmxAlloc u32 4341 FnChar u32 4342 FaccError u8 4343 FprintfFlags u8 4344 F__ccgo_pad1 [2]byte 4345 } 4346 4347 type sqlite3_pcache_page1 = struct { 4348 FpBuf uintptr 4349 FpExtra uintptr 4350 } 4351 4352 type sqlite3_pcache_page = sqlite3_pcache_page1 4353 4354 type sqlite3_pcache_methods21 = struct { 4355 FiVersion int32 4356 F__ccgo_pad1 [4]byte 4357 FpArg uintptr 4358 FxInit uintptr 4359 FxShutdown uintptr 4360 FxCreate uintptr 4361 FxCachesize uintptr 4362 FxPagecount uintptr 4363 FxFetch uintptr 4364 FxUnpin uintptr 4365 FxRekey uintptr 4366 FxTruncate uintptr 4367 FxDestroy uintptr 4368 FxShrink uintptr 4369 } 4370 4371 type sqlite3_pcache_methods2 = sqlite3_pcache_methods21 4372 4373 type sqlite3_pcache_methods1 = struct { 4374 FpArg uintptr 4375 FxInit uintptr 4376 FxShutdown uintptr 4377 FxCreate uintptr 4378 FxCachesize uintptr 4379 FxPagecount uintptr 4380 FxFetch uintptr 4381 FxUnpin uintptr 4382 FxRekey uintptr 4383 FxTruncate uintptr 4384 FxDestroy uintptr 4385 } 4386 4387 type sqlite3_pcache_methods = sqlite3_pcache_methods1 4388 4389 type sqlite3_snapshot1 = struct{ Fhidden [48]uint8 } 4390 4391 type sqlite3_snapshot = sqlite3_snapshot1 4392 4393 type sqlite3_rtree_geometry1 = struct { 4394 FpContext uintptr 4395 FnParam int32 4396 F__ccgo_pad1 [4]byte 4397 FaParam uintptr 4398 FpUser uintptr 4399 FxDelUser uintptr 4400 } 4401 4402 type sqlite3_rtree_geometry = sqlite3_rtree_geometry1 4403 type sqlite3_rtree_query_info1 = struct { 4404 FpContext uintptr 4405 FnParam int32 4406 F__ccgo_pad1 [4]byte 4407 FaParam uintptr 4408 FpUser uintptr 4409 FxDelUser uintptr 4410 FaCoord uintptr 4411 FanQueue uintptr 4412 FnCoord int32 4413 FiLevel int32 4414 FmxLevel int32 4415 F__ccgo_pad2 [4]byte 4416 FiRowid sqlite3_int64 4417 FrParentScore sqlite3_rtree_dbl 4418 FeParentWithin int32 4419 FeWithin int32 4420 FrScore sqlite3_rtree_dbl 4421 FapSqlParam uintptr 4422 } 4423 4424 type sqlite3_rtree_query_info = sqlite3_rtree_query_info1 4425 4426 type sqlite3_rtree_dbl = float64 4427 4428 type Fts5ExtensionApi1 = struct { 4429 FiVersion int32 4430 F__ccgo_pad1 [4]byte 4431 FxUserData uintptr 4432 FxColumnCount uintptr 4433 FxRowCount uintptr 4434 FxColumnTotalSize uintptr 4435 FxTokenize uintptr 4436 FxPhraseCount uintptr 4437 FxPhraseSize uintptr 4438 FxInstCount uintptr 4439 FxInst uintptr 4440 FxRowid uintptr 4441 FxColumnText uintptr 4442 FxColumnSize uintptr 4443 FxQueryPhrase uintptr 4444 FxSetAuxdata uintptr 4445 FxGetAuxdata uintptr 4446 FxPhraseFirst uintptr 4447 FxPhraseNext uintptr 4448 FxPhraseFirstColumn uintptr 4449 FxPhraseNextColumn uintptr 4450 } 4451 4452 type Fts5ExtensionApi = Fts5ExtensionApi1 4453 type Fts5PhraseIter1 = struct { 4454 Fa uintptr 4455 Fb uintptr 4456 } 4457 4458 type Fts5PhraseIter = Fts5PhraseIter1 4459 4460 type fts5_extension_function = uintptr 4461 type fts5_tokenizer1 = struct { 4462 FxCreate uintptr 4463 FxDelete uintptr 4464 FxTokenize uintptr 4465 } 4466 4467 type fts5_tokenizer = fts5_tokenizer1 4468 4469 type fts5_api1 = struct { 4470 FiVersion int32 4471 F__ccgo_pad1 [4]byte 4472 FxCreateTokenizer uintptr 4473 FxFindTokenizer uintptr 4474 FxCreateFunction uintptr 4475 } 4476 4477 type fts5_api = fts5_api1 4478 4479 type sqlite3expert1 = struct { 4480 FiSample int32 4481 F__ccgo_pad1 [4]byte 4482 Fdb uintptr 4483 Fdbm uintptr 4484 Fdbv uintptr 4485 FpTable uintptr 4486 FpScan uintptr 4487 FpWrite uintptr 4488 FpStatement uintptr 4489 FbRun int32 4490 F__ccgo_pad2 [4]byte 4491 FpzErrmsg uintptr 4492 Frc int32 4493 F__ccgo_pad3 [4]byte 4494 FhIdx IdxHash 4495 FzCandidates uintptr 4496 } 4497 4498 type sqlite3expert = sqlite3expert1 4499 4500 type __locale_struct = struct { 4501 F__locales [13]uintptr 4502 F__ctype_b uintptr 4503 F__ctype_tolower uintptr 4504 F__ctype_toupper uintptr 4505 F__names [13]uintptr 4506 } 4507 4508 type locale_t = uintptr 4509 4510 type _G_fpos_t = struct { 4511 F__pos int64 4512 F__state struct { 4513 F__count int32 4514 F__value struct{ F__wch uint32 } 4515 } 4516 } 4517 4518 type _G_fpos64_t = struct { 4519 F__pos int64 4520 F__state struct { 4521 F__count int32 4522 F__value struct{ F__wch uint32 } 4523 } 4524 } 4525 4526 type _IO_FILE = struct { 4527 F_flags int32 4528 F__ccgo_pad1 [4]byte 4529 F_IO_read_ptr uintptr 4530 F_IO_read_end uintptr 4531 F_IO_read_base uintptr 4532 F_IO_write_base uintptr 4533 F_IO_write_ptr uintptr 4534 F_IO_write_end uintptr 4535 F_IO_buf_base uintptr 4536 F_IO_buf_end uintptr 4537 F_IO_save_base uintptr 4538 F_IO_backup_base uintptr 4539 F_IO_save_end uintptr 4540 F_markers uintptr 4541 F_chain uintptr 4542 F_fileno int32 4543 F_flags2 int32 4544 F_old_offset int64 4545 F_cur_column uint16 4546 F_vtable_offset int8 4547 F_shortbuf [1]uint8 4548 F__ccgo_pad2 [4]byte 4549 F_lock uintptr 4550 F_offset int64 4551 F_codecvt uintptr 4552 F_wide_data uintptr 4553 F_freeres_list uintptr 4554 F_freeres_buf uintptr 4555 F__pad5 size_t 4556 F_mode int32 4557 F_unused2 [20]uint8 4558 } 4559 4560 type FILE = _IO_FILE 4561 4562 type off_t = int64 4563 4564 type ssize_t = int64 4565 4566 type fpos_t = _G_fpos64_t 4567 4568 type i64 = sqlite3_int64 4569 type u64 = sqlite3_uint64 4570 4571 type IdxColumn1 = struct { 4572 FzName uintptr 4573 FzColl uintptr 4574 FiPk int32 4575 F__ccgo_pad1 [4]byte 4576 } 4577 4578 type IdxColumn = IdxColumn1 4579 type IdxConstraint1 = struct { 4580 FzColl uintptr 4581 FbRange int32 4582 FiCol int32 4583 FbFlag int32 4584 FbDesc int32 4585 FpNext uintptr 4586 FpLink uintptr 4587 } 4588 4589 type IdxConstraint = IdxConstraint1 4590 type IdxScan1 = struct { 4591 FpTab uintptr 4592 FiDb int32 4593 F__ccgo_pad1 [4]byte 4594 Fcovering i64 4595 FpOrder uintptr 4596 FpEq uintptr 4597 FpRange uintptr 4598 FpNextScan uintptr 4599 } 4600 4601 type IdxScan = IdxScan1 4602 type IdxStatement1 = struct { 4603 FiId int32 4604 F__ccgo_pad1 [4]byte 4605 FzSql uintptr 4606 FzIdx uintptr 4607 FzEQP uintptr 4608 FpNext uintptr 4609 } 4610 4611 type IdxStatement = IdxStatement1 4612 type IdxTable1 = struct { 4613 FnCol int32 4614 F__ccgo_pad1 [4]byte 4615 FzName uintptr 4616 FaCol uintptr 4617 FpNext uintptr 4618 } 4619 4620 type IdxTable = IdxTable1 4621 type IdxWrite1 = struct { 4622 FpTab uintptr 4623 FeOp int32 4624 F__ccgo_pad1 [4]byte 4625 FpNext uintptr 4626 } 4627 4628 type IdxWrite = IdxWrite1 4629 4630 type IdxHashEntry1 = struct { 4631 FzKey uintptr 4632 FzVal uintptr 4633 FzVal2 uintptr 4634 FpHashNext uintptr 4635 FpNext uintptr 4636 } 4637 4638 type IdxHashEntry = IdxHashEntry1 4639 type IdxHash1 = struct { 4640 FpFirst uintptr 4641 FaHash [1023]uintptr 4642 } 4643 4644 type IdxHash = IdxHash1 4645 4646 func idxMalloc(tls *libc.TLS, pRc uintptr, nByte int32) uintptr { 4647 var pRet uintptr 4648 4649 pRet = sqlite3.Xsqlite3_malloc(tls, nByte) 4650 if pRet != 0 { 4651 libc.Xmemset(tls, pRet, 0, uint64(nByte)) 4652 } else { 4653 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4654 } 4655 return pRet 4656 } 4657 4658 func idxHashInit(tls *libc.TLS, pHash uintptr) { 4659 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 4660 } 4661 4662 func idxHashClear(tls *libc.TLS, pHash uintptr) { 4663 var i int32 4664 for i = 0; i < IDX_HASH_SIZE; i++ { 4665 var pEntry uintptr 4666 var pNext uintptr 4667 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(i)*8)); pEntry != 0; pEntry = pNext { 4668 pNext = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext 4669 sqlite3.Xsqlite3_free(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2) 4670 sqlite3.Xsqlite3_free(tls, pEntry) 4671 } 4672 } 4673 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 4674 } 4675 4676 func idxHashString(tls *libc.TLS, z uintptr, n int32) int32 { 4677 var ret uint32 = uint32(0) 4678 var i int32 4679 for i = 0; i < n; i++ { 4680 ret = ret + (ret<<3 + uint32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) 4681 } 4682 return int32(ret % uint32(IDX_HASH_SIZE)) 4683 } 4684 4685 func idxHashAdd(tls *libc.TLS, pRc uintptr, pHash uintptr, zKey uintptr, zVal uintptr) int32 { 4686 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 4687 var iHash int32 = idxHashString(tls, zKey, nKey) 4688 var nVal int32 = func() int32 { 4689 if zVal != 0 { 4690 return int32(libc.Xstrlen(tls, zVal)) 4691 } 4692 return 0 4693 }() 4694 var pEntry uintptr 4695 4696 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4697 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 4698 return 1 4699 } 4700 } 4701 pEntry = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxHashEntry{}))+uint64(nKey)+uint64(1)+uint64(nVal)+uint64(1))) 4702 if pEntry != 0 { 4703 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey = pEntry + 1*40 4704 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) 4705 if zVal != 0 { 4706 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey + uintptr(nKey+1) 4707 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, zVal, uint64(nVal)) 4708 } 4709 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) 4710 *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) = pEntry 4711 4712 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext = (*IdxHash)(unsafe.Pointer(pHash)).FpFirst 4713 (*IdxHash)(unsafe.Pointer(pHash)).FpFirst = pEntry 4714 } 4715 return 0 4716 } 4717 4718 func idxHashFind(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4719 var iHash int32 4720 var pEntry uintptr 4721 if nKey < 0 { 4722 nKey = int32(libc.Xstrlen(tls, zKey)) 4723 } 4724 iHash = idxHashString(tls, zKey, nKey) 4725 4726 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 4727 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 4728 return pEntry 4729 } 4730 } 4731 return uintptr(0) 4732 } 4733 4734 func idxHashSearch(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 4735 var pEntry uintptr = idxHashFind(tls, pHash, zKey, nKey) 4736 if pEntry != 0 { 4737 return (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal 4738 } 4739 return uintptr(0) 4740 } 4741 4742 func idxNewConstraint(tls *libc.TLS, pRc uintptr, zColl uintptr) uintptr { 4743 var pNew uintptr 4744 var nColl int32 = int32(libc.Xstrlen(tls, zColl)) 4745 4746 pNew = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxConstraint{}))*uint64(nColl)+uint64(1))) 4747 if pNew != 0 { 4748 (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl = pNew + 1*40 4749 libc.Xmemcpy(tls, (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl, zColl, uint64(nColl+1)) 4750 } 4751 return pNew 4752 } 4753 4754 func idxDatabaseError(tls *libc.TLS, db uintptr, pzErrmsg uintptr) { 4755 bp := tls.Alloc(8) 4756 defer tls.Free(8) 4757 4758 *(*uintptr)(unsafe.Pointer(pzErrmsg)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 4759 } 4760 4761 func idxPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zSql uintptr) int32 { 4762 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, ppStmt, uintptr(0)) 4763 if rc != SQLITE_OK { 4764 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 4765 idxDatabaseError(tls, db, pzErrmsg) 4766 } 4767 return rc 4768 } 4769 4770 func idxPrintfPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zFmt uintptr, va uintptr) int32 { 4771 var ap va_list 4772 _ = ap 4773 var rc int32 4774 var zSql uintptr 4775 ap = va 4776 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 4777 if zSql == uintptr(0) { 4778 rc = SQLITE_NOMEM 4779 } else { 4780 rc = idxPrepareStmt(tls, db, ppStmt, pzErrmsg, zSql) 4781 sqlite3.Xsqlite3_free(tls, zSql) 4782 } 4783 _ = ap 4784 return rc 4785 } 4786 4787 type ExpertVtab1 = struct { 4788 Fbase sqlite3_vtab 4789 FpTab uintptr 4790 FpExpert uintptr 4791 } 4792 4793 type ExpertVtab = ExpertVtab1 4794 4795 type ExpertCsr1 = struct { 4796 Fbase sqlite3_vtab_cursor 4797 FpData uintptr 4798 } 4799 4800 type ExpertCsr = ExpertCsr1 4801 4802 func expertDequote(tls *libc.TLS, zIn uintptr) uintptr { 4803 var n int32 = int32(libc.Xstrlen(tls, zIn)) 4804 var zRet uintptr = sqlite3.Xsqlite3_malloc(tls, n) 4805 4806 if zRet != 0 { 4807 var iOut int32 = 0 4808 var iIn int32 = 0 4809 for iIn = 1; iIn < n-1; iIn++ { 4810 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iIn)))) == '\'' { 4811 iIn++ 4812 } 4813 *(*uint8)(unsafe.Pointer(zRet + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(zIn + uintptr(iIn))) 4814 } 4815 *(*uint8)(unsafe.Pointer(zRet + uintptr(iOut))) = uint8(0) 4816 } 4817 4818 return zRet 4819 } 4820 4821 func expertConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 4822 bp := tls.Alloc(4) 4823 defer tls.Free(4) 4824 4825 var pExpert uintptr = pAux 4826 var p uintptr = uintptr(0) 4827 4828 if argc != 4 { 4829 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3, 0) 4830 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 4831 } else { 4832 var zCreateTable uintptr = expertDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 4833 if zCreateTable != 0 { 4834 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 4835 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4836 p = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertVtab{}))) 4837 } 4838 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 4839 (*ExpertVtab)(unsafe.Pointer(p)).FpExpert = pExpert 4840 (*ExpertVtab)(unsafe.Pointer(p)).FpTab = (*sqlite3expert)(unsafe.Pointer(pExpert)).FpTable 4841 4842 } 4843 sqlite3.Xsqlite3_free(tls, zCreateTable) 4844 } else { 4845 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 4846 } 4847 } 4848 4849 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 4850 return *(*int32)(unsafe.Pointer(bp)) 4851 } 4852 4853 func expertDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 4854 var p uintptr = pVtab 4855 sqlite3.Xsqlite3_free(tls, p) 4856 return SQLITE_OK 4857 } 4858 4859 func expertBestIndex(tls *libc.TLS, pVtab uintptr, pIdxInfo uintptr) int32 { 4860 bp := tls.Alloc(4) 4861 defer tls.Free(4) 4862 4863 var p uintptr = pVtab 4864 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4865 var n int32 = 0 4866 var pScan uintptr 4867 var opmask int32 = SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | SQLITE_INDEX_CONSTRAINT_LE 4868 4869 pScan = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxScan{}))) 4870 if pScan != 0 { 4871 var i int32 4872 4873 (*IdxScan)(unsafe.Pointer(pScan)).FpTab = (*ExpertVtab)(unsafe.Pointer(p)).FpTab 4874 (*IdxScan)(unsafe.Pointer(pScan)).FpNextScan = (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan 4875 (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan = pScan 4876 4877 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 4878 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 4879 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 4880 (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn >= 0 && 4881 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)*24)).FiPk == 0 && 4882 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop)&opmask != 0 { 4883 var pNew uintptr 4884 var zColl uintptr = sqlite3.Xsqlite3_vtab_collation(tls, pIdxInfo, i) 4885 pNew = idxNewConstraint(tls, bp, zColl) 4886 if pNew != 0 { 4887 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn 4888 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 4889 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpEq 4890 (*IdxScan)(unsafe.Pointer(pScan)).FpEq = pNew 4891 } else { 4892 (*IdxConstraint)(unsafe.Pointer(pNew)).FbRange = 1 4893 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpRange 4894 (*IdxScan)(unsafe.Pointer(pScan)).FpRange = pNew 4895 } 4896 } 4897 n++ 4898 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = n 4899 } 4900 } 4901 4902 for i = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy - 1; i >= 0; i-- { 4903 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 4904 if iCol >= 0 { 4905 var pNew uintptr = idxNewConstraint(tls, bp, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr(iCol)*24)).FzColl) 4906 if pNew != 0 { 4907 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = iCol 4908 (*IdxConstraint)(unsafe.Pointer(pNew)).FbDesc = int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).Fdesc) 4909 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4910 (*IdxConstraint)(unsafe.Pointer(pNew)).FpLink = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 4911 (*IdxScan)(unsafe.Pointer(pScan)).FpOrder = pNew 4912 n++ 4913 } 4914 } 4915 } 4916 } 4917 4918 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000.0 / float64(n+1) 4919 return *(*int32)(unsafe.Pointer(bp)) 4920 } 4921 4922 func expertUpdate(tls *libc.TLS, pVtab uintptr, nData int32, azData uintptr, pRowid uintptr) int32 { 4923 _ = pVtab 4924 _ = nData 4925 _ = azData 4926 _ = pRowid 4927 return SQLITE_OK 4928 } 4929 4930 func expertOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 4931 bp := tls.Alloc(4) 4932 defer tls.Free(4) 4933 4934 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 4935 var pCsr uintptr 4936 _ = pVTab 4937 pCsr = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertCsr{}))) 4938 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 4939 return *(*int32)(unsafe.Pointer(bp)) 4940 } 4941 4942 func expertClose(tls *libc.TLS, cur uintptr) int32 { 4943 var pCsr uintptr = cur 4944 sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4945 sqlite3.Xsqlite3_free(tls, pCsr) 4946 return SQLITE_OK 4947 } 4948 4949 func expertEof(tls *libc.TLS, cur uintptr) int32 { 4950 var pCsr uintptr = cur 4951 return libc.Bool32((*ExpertCsr)(unsafe.Pointer(pCsr)).FpData == uintptr(0)) 4952 } 4953 4954 func expertNext(tls *libc.TLS, cur uintptr) int32 { 4955 var pCsr uintptr = cur 4956 var rc int32 = SQLITE_OK 4957 4958 rc = sqlite3.Xsqlite3_step(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4959 if rc != SQLITE_ROW { 4960 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4961 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 4962 } else { 4963 rc = SQLITE_OK 4964 } 4965 4966 return rc 4967 } 4968 4969 func expertRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 4970 _ = cur 4971 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 4972 return SQLITE_OK 4973 } 4974 4975 func expertColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 4976 var pCsr uintptr = cur 4977 var pVal uintptr 4978 pVal = sqlite3.Xsqlite3_column_value(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData, i) 4979 if pVal != 0 { 4980 sqlite3.Xsqlite3_result_value(tls, ctx, pVal) 4981 } 4982 return SQLITE_OK 4983 } 4984 4985 func expertFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 4986 bp := tls.Alloc(8) 4987 defer tls.Free(8) 4988 4989 var pCsr uintptr = cur 4990 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 4991 var pExpert uintptr = (*ExpertVtab)(unsafe.Pointer(pVtab)).FpExpert 4992 var rc int32 4993 4994 _ = idxNum 4995 _ = idxStr 4996 _ = argc 4997 _ = argv 4998 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 4999 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 5000 if rc == SQLITE_OK { 5001 rc = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pExpert)).Fdb, pCsr+8, pVtab+16, 5002 ts+19, libc.VaList(bp, (*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(pVtab)).FpTab)).FzName)) 5003 } 5004 5005 if rc == SQLITE_OK { 5006 rc = expertNext(tls, cur) 5007 } 5008 return rc 5009 } 5010 5011 func idxRegisterVtab(tls *libc.TLS, p uintptr) int32 { 5012 return sqlite3.Xsqlite3_create_module(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+56, uintptr(unsafe.Pointer(&expertModule)), p) 5013 } 5014 5015 var expertModule = sqlite3_module{ 5016 FiVersion: 2, 5017 FxCreate: 0, 5018 FxConnect: 0, 5019 FxBestIndex: 0, 5020 FxDisconnect: 0, 5021 FxDestroy: 0, 5022 FxOpen: 0, 5023 FxClose: 0, 5024 FxFilter: 0, 5025 FxNext: 0, 5026 FxEof: 0, 5027 FxColumn: 0, 5028 FxRowid: 0, 5029 FxUpdate: 0, 5030 } 5031 5032 func idxFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr) { 5033 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 5034 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 5035 *(*int32)(unsafe.Pointer(pRc)) = rc 5036 } 5037 } 5038 5039 func idxGetTableInfo(tls *libc.TLS, db uintptr, zTab uintptr, ppOut uintptr, pzErrmsg uintptr) int32 { 5040 bp := tls.Alloc(40) 5041 defer tls.Free(40) 5042 5043 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 5044 var nCol int32 = 0 5045 var nTab int32 5046 var nByte int32 5047 var pNew uintptr = uintptr(0) 5048 5049 var rc2 int32 5050 var pCsr uintptr = uintptr(0) 5051 var nPk int32 = 0 5052 5053 *(*uintptr)(unsafe.Pointer(ppOut)) = uintptr(0) 5054 if zTab == uintptr(0) { 5055 return SQLITE_ERROR 5056 } 5057 nTab = int32(libc.Xstrlen(tls, zTab)) 5058 nByte = int32(uint64(unsafe.Sizeof(IdxTable{})) + uint64(nTab) + uint64(1)) 5059 *(*int32)(unsafe.Pointer(bp + 24)) = idxPrintfPrepareStmt(tls, db, bp+8, pzErrmsg, ts+63, libc.VaList(bp, zTab)) 5060 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 5061 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 5062 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 5063 if zCol == uintptr(0) { 5064 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ERROR 5065 break 5066 } 5067 nByte = nByte + (1 + int32(libc.Xstrlen(tls, zCol))) 5068 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 5069 db, ts+85, zTab, zCol, uintptr(0), bp+16, uintptr(0), uintptr(0), uintptr(0)) 5070 if *(*uintptr)(unsafe.Pointer(bp + 16)) == uintptr(0) { 5071 *(*uintptr)(unsafe.Pointer(bp + 16)) = ts + 90 5072 } 5073 nByte = nByte + (1 + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 16))))) 5074 nCol++ 5075 nPk = nPk + libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) > 0) 5076 } 5077 rc2 = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 5078 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5079 *(*int32)(unsafe.Pointer(bp + 24)) = rc2 5080 } 5081 5082 nByte = int32(uint64(nByte) + uint64(unsafe.Sizeof(IdxColumn{}))*uint64(nCol)) 5083 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5084 pNew = idxMalloc(tls, bp+24, nByte) 5085 } 5086 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5087 (*IdxTable)(unsafe.Pointer(pNew)).FaCol = pNew + 1*32 5088 (*IdxTable)(unsafe.Pointer(pNew)).FnCol = nCol 5089 pCsr = (*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24 5090 } 5091 5092 nCol = 0 5093 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 5094 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 5095 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 5096 var nCopy int32 5097 if zCol == uintptr(0) { 5098 continue 5099 } 5100 nCopy = int32(libc.Xstrlen(tls, zCol)) + 1 5101 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzName = pCsr 5102 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FiPk = libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) == 1 && nPk == 1) 5103 libc.Xmemcpy(tls, pCsr, zCol, uint64(nCopy)) 5104 pCsr += uintptr(nCopy) 5105 5106 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 5107 db, ts+85, zTab, zCol, uintptr(0), bp+32, uintptr(0), uintptr(0), uintptr(0)) 5108 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5109 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 5110 *(*uintptr)(unsafe.Pointer(bp + 32)) = ts + 90 5111 } 5112 nCopy = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 32)))) + 1 5113 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzColl = pCsr 5114 libc.Xmemcpy(tls, pCsr, *(*uintptr)(unsafe.Pointer(bp + 32)), uint64(nCopy)) 5115 pCsr += uintptr(nCopy) 5116 } 5117 5118 nCol++ 5119 } 5120 idxFinalize(tls, bp+24, *(*uintptr)(unsafe.Pointer(bp + 8))) 5121 5122 if *(*int32)(unsafe.Pointer(bp + 24)) != SQLITE_OK { 5123 sqlite3.Xsqlite3_free(tls, pNew) 5124 pNew = uintptr(0) 5125 } else if pNew != uintptr(0) { 5126 (*IdxTable)(unsafe.Pointer(pNew)).FzName = pCsr 5127 if (*IdxTable)(unsafe.Pointer(pNew)).FzName != uintptr(0) { 5128 libc.Xmemcpy(tls, (*IdxTable)(unsafe.Pointer(pNew)).FzName, zTab, uint64(nTab+1)) 5129 } 5130 } 5131 5132 *(*uintptr)(unsafe.Pointer(ppOut)) = pNew 5133 return *(*int32)(unsafe.Pointer(bp + 24)) 5134 } 5135 5136 func idxAppendText(tls *libc.TLS, pRc uintptr, zIn uintptr, zFmt uintptr, va uintptr) uintptr { 5137 var ap va_list 5138 _ = ap 5139 var zAppend uintptr = uintptr(0) 5140 var zRet uintptr = uintptr(0) 5141 var nIn int32 5142 if zIn != 0 { 5143 nIn = int32(libc.Xstrlen(tls, zIn)) 5144 } else { 5145 nIn = 0 5146 } 5147 var nAppend int32 = 0 5148 ap = va 5149 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 5150 zAppend = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 5151 if zAppend != 0 { 5152 nAppend = int32(libc.Xstrlen(tls, zAppend)) 5153 zRet = sqlite3.Xsqlite3_malloc(tls, nIn+nAppend+1) 5154 } 5155 if zAppend != 0 && zRet != 0 { 5156 if nIn != 0 { 5157 libc.Xmemcpy(tls, zRet, zIn, uint64(nIn)) 5158 } 5159 libc.Xmemcpy(tls, zRet+uintptr(nIn), zAppend, uint64(nAppend+1)) 5160 } else { 5161 sqlite3.Xsqlite3_free(tls, zRet) 5162 zRet = uintptr(0) 5163 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 5164 } 5165 sqlite3.Xsqlite3_free(tls, zAppend) 5166 sqlite3.Xsqlite3_free(tls, zIn) 5167 } 5168 _ = ap 5169 return zRet 5170 } 5171 5172 func idxIdentifierRequiresQuotes(tls *libc.TLS, zId uintptr) int32 { 5173 var i int32 5174 for i = 0; *(*uint8)(unsafe.Pointer(zId + uintptr(i))) != 0; i++ { 5175 if !(int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) == '_') && 5176 !(int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) <= '9') && 5177 !(int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) >= 'a' && int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) <= 'z') && 5178 !(int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) >= 'A' && int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) <= 'Z') { 5179 return 1 5180 } 5181 } 5182 return 0 5183 } 5184 5185 func idxAppendColDefn(tls *libc.TLS, pRc uintptr, zIn uintptr, pTab uintptr, pCons uintptr) uintptr { 5186 bp := tls.Alloc(32) 5187 defer tls.Free(32) 5188 5189 var zRet uintptr = zIn 5190 var p uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FaCol + uintptr((*IdxConstraint)(unsafe.Pointer(pCons)).FiCol)*24 5191 if zRet != 0 { 5192 zRet = idxAppendText(tls, pRc, zRet, ts+97, 0) 5193 } 5194 5195 if idxIdentifierRequiresQuotes(tls, (*IdxColumn)(unsafe.Pointer(p)).FzName) != 0 { 5196 zRet = idxAppendText(tls, pRc, zRet, ts+100, libc.VaList(bp, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 5197 } else { 5198 zRet = idxAppendText(tls, pRc, zRet, ts, libc.VaList(bp+8, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 5199 } 5200 5201 if sqlite3.Xsqlite3_stricmp(tls, (*IdxColumn)(unsafe.Pointer(p)).FzColl, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 5202 if idxIdentifierRequiresQuotes(tls, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 5203 zRet = idxAppendText(tls, pRc, zRet, ts+103, libc.VaList(bp+16, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 5204 } else { 5205 zRet = idxAppendText(tls, pRc, zRet, ts+115, libc.VaList(bp+24, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 5206 } 5207 } 5208 5209 if (*IdxConstraint)(unsafe.Pointer(pCons)).FbDesc != 0 { 5210 zRet = idxAppendText(tls, pRc, zRet, ts+127, 0) 5211 } 5212 return zRet 5213 } 5214 5215 func idxFindCompatible(tls *libc.TLS, pRc uintptr, dbm uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 5216 bp := tls.Alloc(36) 5217 defer tls.Free(36) 5218 5219 var zTbl uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 5220 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 5221 var pIter uintptr 5222 var nEq int32 = 0 5223 5224 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5225 nEq++ 5226 } 5227 5228 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+16, uintptr(0), ts+133, libc.VaList(bp, zTbl)) 5229 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW { 5230 var bMatch int32 = 1 5231 var pT uintptr = pTail 5232 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 5233 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 5234 if zIdx == uintptr(0) { 5235 continue 5236 } 5237 5238 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5239 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 0 5240 } 5241 5242 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+24, uintptr(0), ts+154, libc.VaList(bp+8, zIdx)) 5243 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW { 5244 var iIdx int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 5245 var iCol int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 5246 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 4) 5247 5248 if iIdx < nEq { 5249 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5250 if (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag != 0 { 5251 continue 5252 } 5253 if (*IdxConstraint)(unsafe.Pointer(pIter)).FiCol != iCol { 5254 continue 5255 } 5256 if sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pIter)).FzColl, zColl) != 0 { 5257 continue 5258 } 5259 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 1 5260 break 5261 } 5262 if pIter == uintptr(0) { 5263 bMatch = 0 5264 break 5265 } 5266 } else { 5267 if pT != 0 { 5268 if (*IdxConstraint)(unsafe.Pointer(pT)).FiCol != iCol || sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pT)).FzColl, zColl) != 0 { 5269 bMatch = 0 5270 break 5271 } 5272 pT = (*IdxConstraint)(unsafe.Pointer(pT)).FpLink 5273 } 5274 } 5275 } 5276 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 24))) 5277 5278 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && bMatch != 0 { 5279 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 5280 return 1 5281 } 5282 } 5283 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 16))) 5284 5285 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 32)) 5286 return 0 5287 } 5288 5289 func countNonzeros(tls *libc.TLS, pCount uintptr, nc int32, azResults uintptr, azColumns uintptr) int32 { 5290 _ = azColumns 5291 if nc > 0 && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults))))) != '0' || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults)) + 1))) != 0) { 5292 *(*int32)(unsafe.Pointer(pCount)) += 1 5293 } 5294 return 0 5295 } 5296 5297 func idxCreateFromCons(tls *libc.TLS, p uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 5298 bp := tls.Alloc(56) 5299 defer tls.Free(56) 5300 5301 var dbm uintptr = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5302 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_OK 5303 if (pEq != 0 || pTail != 0) && 0 == idxFindCompatible(tls, bp+48, dbm, pScan, pEq, pTail) { 5304 var pTab uintptr = (*IdxScan)(unsafe.Pointer(pScan)).FpTab 5305 var zCols uintptr = uintptr(0) 5306 var zIdx uintptr = uintptr(0) 5307 var pCons uintptr 5308 var h uint32 = uint32(0) 5309 var zFmt uintptr 5310 5311 for pCons = pEq; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 5312 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 5313 } 5314 for pCons = pTail; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 5315 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 5316 } 5317 5318 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 5319 var zTable uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 5320 var quoteTable int32 = idxIdentifierRequiresQuotes(tls, zTable) 5321 var zName uintptr = uintptr(0) 5322 var collisions int32 = 0 5323 for __ccgo := true; __ccgo; __ccgo = collisions < 50 && zName != uintptr(0) { 5324 var zFind uintptr 5325 for *(*int32)(unsafe.Pointer(bp + 52)) = 0; *(*uint8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))) != 0; *(*int32)(unsafe.Pointer(bp + 52))++ { 5326 h = h + (h<<3 + uint32(*(*uint8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))))) 5327 } 5328 sqlite3.Xsqlite3_free(tls, zName) 5329 zName = sqlite3.Xsqlite3_mprintf(tls, ts+176, libc.VaList(bp, zTable, h)) 5330 if zName == uintptr(0) { 5331 break 5332 } 5333 5334 zFmt = ts + 188 5335 zFind = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+16, zName)) 5336 *(*int32)(unsafe.Pointer(bp + 52)) = 0 5337 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zFind, *(*uintptr)(unsafe.Pointer(&struct { 5338 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 5339 }{countNonzeros})), bp+52, uintptr(0)) 5340 5341 sqlite3.Xsqlite3_free(tls, zFind) 5342 if *(*int32)(unsafe.Pointer(bp + 52)) == 0 { 5343 collisions = 0 5344 break 5345 } 5346 collisions++ 5347 } 5348 if collisions != 0 { 5349 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 5350 } else if zName == uintptr(0) { 5351 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 5352 } else { 5353 if quoteTable != 0 { 5354 zFmt = ts + 274 5355 } else { 5356 zFmt = ts + 304 5357 } 5358 zIdx = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+24, zName, zTable, zCols)) 5359 if !(zIdx != 0) { 5360 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 5361 } else { 5362 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zIdx, uintptr(0), uintptr(0), (*sqlite3expert)(unsafe.Pointer(p)).FpzErrmsg) 5363 if *(*int32)(unsafe.Pointer(bp + 48)) != SQLITE_OK { 5364 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 5365 } else { 5366 idxHashAdd(tls, bp+48, p+88, zName, zIdx) 5367 } 5368 } 5369 sqlite3.Xsqlite3_free(tls, zName) 5370 sqlite3.Xsqlite3_free(tls, zIdx) 5371 } 5372 } 5373 5374 sqlite3.Xsqlite3_free(tls, zCols) 5375 } 5376 return *(*int32)(unsafe.Pointer(bp + 48)) 5377 } 5378 5379 func idxFindConstraint(tls *libc.TLS, pList uintptr, p uintptr) int32 { 5380 var pCmp uintptr 5381 for pCmp = pList; pCmp != 0; pCmp = (*IdxConstraint)(unsafe.Pointer(pCmp)).FpLink { 5382 if (*IdxConstraint)(unsafe.Pointer(p)).FiCol == (*IdxConstraint)(unsafe.Pointer(pCmp)).FiCol { 5383 return 1 5384 } 5385 } 5386 return 0 5387 } 5388 5389 func idxCreateFromWhere(tls *libc.TLS, p uintptr, pScan uintptr, pTail uintptr) int32 { 5390 var p1 uintptr = uintptr(0) 5391 var pCon uintptr 5392 var rc int32 5393 5394 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpEq; pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 5395 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 5396 (*IdxConstraint)(unsafe.Pointer(pCon)).FpLink = p1 5397 p1 = pCon 5398 } 5399 } 5400 5401 rc = idxCreateFromCons(tls, p, pScan, p1, pTail) 5402 5403 if pTail == uintptr(0) { 5404 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpRange; rc == SQLITE_OK && pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 5405 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 5406 rc = idxCreateFromCons(tls, p, pScan, p1, pCon) 5407 } 5408 } 5409 } 5410 5411 return rc 5412 } 5413 5414 func idxCreateCandidates(tls *libc.TLS, p uintptr) int32 { 5415 var rc int32 = SQLITE_OK 5416 var pIter uintptr 5417 5418 for pIter = (*sqlite3expert)(unsafe.Pointer(p)).FpScan; pIter != 0 && rc == SQLITE_OK; pIter = (*IdxScan)(unsafe.Pointer(pIter)).FpNextScan { 5419 rc = idxCreateFromWhere(tls, p, pIter, uintptr(0)) 5420 if rc == SQLITE_OK && (*IdxScan)(unsafe.Pointer(pIter)).FpOrder != 0 { 5421 rc = idxCreateFromWhere(tls, p, pIter, (*IdxScan)(unsafe.Pointer(pIter)).FpOrder) 5422 } 5423 } 5424 5425 return rc 5426 } 5427 5428 func idxConstraintFree(tls *libc.TLS, pConstraint uintptr) { 5429 var pNext uintptr 5430 var p uintptr 5431 5432 for p = pConstraint; p != 0; p = pNext { 5433 pNext = (*IdxConstraint)(unsafe.Pointer(p)).FpNext 5434 sqlite3.Xsqlite3_free(tls, p) 5435 } 5436 } 5437 5438 func idxScanFree(tls *libc.TLS, pScan uintptr, pLast uintptr) { 5439 var p uintptr 5440 var pNext uintptr 5441 for p = pScan; p != pLast; p = pNext { 5442 pNext = (*IdxScan)(unsafe.Pointer(p)).FpNextScan 5443 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpOrder) 5444 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpEq) 5445 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpRange) 5446 sqlite3.Xsqlite3_free(tls, p) 5447 } 5448 } 5449 5450 func idxStatementFree(tls *libc.TLS, pStatement uintptr, pLast uintptr) { 5451 var p uintptr 5452 var pNext uintptr 5453 for p = pStatement; p != pLast; p = pNext { 5454 pNext = (*IdxStatement)(unsafe.Pointer(p)).FpNext 5455 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzEQP) 5456 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzIdx) 5457 sqlite3.Xsqlite3_free(tls, p) 5458 } 5459 } 5460 5461 func idxTableFree(tls *libc.TLS, pTab uintptr) { 5462 var pIter uintptr 5463 var pNext uintptr 5464 for pIter = pTab; pIter != 0; pIter = pNext { 5465 pNext = (*IdxTable)(unsafe.Pointer(pIter)).FpNext 5466 sqlite3.Xsqlite3_free(tls, pIter) 5467 } 5468 } 5469 5470 func idxWriteFree(tls *libc.TLS, pTab uintptr) { 5471 var pIter uintptr 5472 var pNext uintptr 5473 for pIter = pTab; pIter != 0; pIter = pNext { 5474 pNext = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext 5475 sqlite3.Xsqlite3_free(tls, pIter) 5476 } 5477 } 5478 5479 func idxFindIndexes(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5480 bp := tls.Alloc(8228) 5481 defer tls.Free(8228) 5482 5483 var pStmt uintptr 5484 var dbm uintptr 5485 5486 var zSql uintptr 5487 var nIdx int32 5488 var zIdx uintptr 5489 5490 var zDetail uintptr 5491 var nDetail int32 5492 var i int32 5493 var pEntry uintptr 5494 5495 dbm = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5496 *(*int32)(unsafe.Pointer(bp + 8224)) = SQLITE_OK 5497 idxHashInit(tls, bp+24) 5498 5499 pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5500 __1: 5501 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && pStmt != 0) { 5502 goto __3 5503 } 5504 *(*uintptr)(unsafe.Pointer(bp + 8216)) = uintptr(0) 5505 idxHashClear(tls, bp+24) 5506 *(*int32)(unsafe.Pointer(bp + 8224)) = idxPrintfPrepareStmt(tls, dbm, bp+8216, pzErr, 5507 ts+330, libc.VaList(bp, (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql)) 5508 __4: 5509 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8216))) == SQLITE_ROW) { 5510 goto __5 5511 } 5512 5513 zDetail = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8216)), 3) 5514 5515 if !!(zDetail != 0) { 5516 goto __6 5517 } 5518 goto __4 5519 __6: 5520 ; 5521 nDetail = int32(libc.Xstrlen(tls, zDetail)) 5522 5523 i = 0 5524 __7: 5525 if !(i < nDetail) { 5526 goto __9 5527 } 5528 zIdx = uintptr(0) 5529 if !(i+13 < nDetail && libc.Xmemcmp(tls, zDetail+uintptr(i), ts+352, uint64(13)) == 0) { 5530 goto __10 5531 } 5532 zIdx = zDetail + uintptr(i+13) 5533 goto __11 5534 __10: 5535 if !(i+22 < nDetail && 5536 libc.Xmemcmp(tls, zDetail+uintptr(i), ts+366, uint64(22)) == 0) { 5537 goto __12 5538 } 5539 zIdx = zDetail + uintptr(i+22) 5540 __12: 5541 ; 5542 __11: 5543 ; 5544 if !(zIdx != 0) { 5545 goto __13 5546 } 5547 nIdx = 0 5548 __14: 5549 if !(int32(*(*uint8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != 0 && (int32(*(*uint8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != ' ' || int32(*(*uint8)(unsafe.Pointer(zIdx + uintptr(nIdx+1)))) != '(')) { 5550 goto __15 5551 } 5552 nIdx++ 5553 goto __14 5554 __15: 5555 ; 5556 zSql = idxHashSearch(tls, p+88, zIdx, nIdx) 5557 if !(zSql != 0) { 5558 goto __16 5559 } 5560 idxHashAdd(tls, bp+8224, bp+24, zSql, uintptr(0)) 5561 if !(*(*int32)(unsafe.Pointer(bp + 8224)) != 0) { 5562 goto __17 5563 } 5564 goto find_indexes_out 5565 __17: 5566 ; 5567 __16: 5568 ; 5569 goto __9 5570 __13: 5571 ; 5572 goto __8 5573 __8: 5574 i++ 5575 goto __7 5576 goto __9 5577 __9: 5578 ; 5579 if !(int32(*(*uint8)(unsafe.Pointer(zDetail))) != '-') { 5580 goto __18 5581 } 5582 (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP = idxAppendText(tls, bp+8224, (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP, ts+389, libc.VaList(bp+8, zDetail)) 5583 __18: 5584 ; 5585 goto __4 5586 __5: 5587 ; 5588 pEntry = (*IdxHash)(unsafe.Pointer(bp + 24)).FpFirst 5589 __19: 5590 if !(pEntry != 0) { 5591 goto __21 5592 } 5593 (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx = idxAppendText(tls, bp+8224, (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx, ts+393, libc.VaList(bp+16, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) 5594 goto __20 5595 __20: 5596 pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext 5597 goto __19 5598 goto __21 5599 __21: 5600 ; 5601 idxFinalize(tls, bp+8224, *(*uintptr)(unsafe.Pointer(bp + 8216))) 5602 goto __2 5603 __2: 5604 pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext 5605 goto __1 5606 goto __3 5607 __3: 5608 ; 5609 find_indexes_out: 5610 idxHashClear(tls, bp+24) 5611 return *(*int32)(unsafe.Pointer(bp + 8224)) 5612 } 5613 5614 func idxAuthCallback(tls *libc.TLS, pCtx uintptr, eOp int32, z3 uintptr, z4 uintptr, zDb uintptr, zTrigger uintptr) int32 { 5615 bp := tls.Alloc(4) 5616 defer tls.Free(4) 5617 5618 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5619 _ = z4 5620 _ = zTrigger 5621 if eOp == SQLITE_INSERT || eOp == SQLITE_UPDATE || eOp == SQLITE_DELETE { 5622 if sqlite3.Xsqlite3_stricmp(tls, zDb, ts+85) == 0 { 5623 var p uintptr = pCtx 5624 var pTab uintptr 5625 for pTab = (*sqlite3expert)(unsafe.Pointer(p)).FpTable; pTab != 0; pTab = (*IdxTable)(unsafe.Pointer(pTab)).FpNext { 5626 if 0 == sqlite3.Xsqlite3_stricmp(tls, z3, (*IdxTable)(unsafe.Pointer(pTab)).FzName) { 5627 break 5628 } 5629 } 5630 if pTab != 0 { 5631 var pWrite uintptr 5632 for pWrite = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite; pWrite != 0; pWrite = (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext { 5633 if (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab == pTab && (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp == eOp { 5634 break 5635 } 5636 } 5637 if pWrite == uintptr(0) { 5638 pWrite = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxWrite{}))) 5639 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5640 (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab = pTab 5641 (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp = eOp 5642 (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5643 (*sqlite3expert)(unsafe.Pointer(p)).FpWrite = pWrite 5644 } 5645 } 5646 } 5647 } 5648 } 5649 return *(*int32)(unsafe.Pointer(bp)) 5650 } 5651 5652 func idxProcessOneTrigger(tls *libc.TLS, p uintptr, pWrite uintptr, pzErr uintptr) int32 { 5653 bp := tls.Alloc(104) 5654 defer tls.Free(104) 5655 5656 var pTab uintptr = (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab 5657 var zTab uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FzName 5658 var zSql uintptr = ts + 398 5659 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 5660 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_OK 5661 var zWrite uintptr = uintptr(0) 5662 5663 *(*int32)(unsafe.Pointer(bp + 88)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+80, pzErr, zSql, libc.VaList(bp, zTab, zTab)) 5664 for *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) { 5665 var zCreate uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 5666 if zCreate == uintptr(0) { 5667 continue 5668 } 5669 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zCreate, uintptr(0), uintptr(0), pzErr) 5670 } 5671 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 80))) 5672 5673 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5674 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+524, libc.VaList(bp+16, zTab, zInt)) 5675 if z == uintptr(0) { 5676 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 5677 } else { 5678 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, z, uintptr(0), uintptr(0), pzErr) 5679 sqlite3.Xsqlite3_free(tls, z) 5680 } 5681 } 5682 5683 switch (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp { 5684 case SQLITE_INSERT: 5685 { 5686 var i int32 5687 zWrite = idxAppendText(tls, bp+88, zWrite, ts+557, libc.VaList(bp+32, zInt)) 5688 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5689 zWrite = idxAppendText(tls, bp+88, zWrite, ts+580, libc.VaList(bp+40, func() uintptr { 5690 if i == 0 { 5691 return ts + 584 5692 } 5693 return ts + 97 5694 }())) 5695 } 5696 zWrite = idxAppendText(tls, bp+88, zWrite, ts+585, 0) 5697 break 5698 5699 } 5700 case SQLITE_UPDATE: 5701 { 5702 var i int32 5703 zWrite = idxAppendText(tls, bp+88, zWrite, ts+587, libc.VaList(bp+48, zInt)) 5704 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 5705 zWrite = idxAppendText(tls, bp+88, zWrite, ts+602, libc.VaList(bp+56, func() uintptr { 5706 if i == 0 { 5707 return ts + 584 5708 } 5709 return ts + 97 5710 }(), 5711 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pTab)).FaCol+uintptr(i)*24)).FzName)) 5712 } 5713 break 5714 5715 } 5716 default: 5717 { 5718 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5719 zWrite = sqlite3.Xsqlite3_mprintf(tls, ts+609, libc.VaList(bp+72, zInt)) 5720 if zWrite == uintptr(0) { 5721 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 5722 } 5723 } 5724 5725 } 5726 } 5727 5728 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5729 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 5730 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zWrite, -1, bp+96, uintptr(0)) 5731 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 96))) 5732 if *(*int32)(unsafe.Pointer(bp + 88)) != SQLITE_OK { 5733 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 5734 } 5735 } 5736 sqlite3.Xsqlite3_free(tls, zWrite) 5737 5738 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5739 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zDrop, uintptr(0), uintptr(0), pzErr) 5740 } 5741 5742 return *(*int32)(unsafe.Pointer(bp + 88)) 5743 } 5744 5745 var zInt uintptr = ts + 624 5746 var zDrop uintptr = ts + 662 5747 5748 func idxProcessTriggers(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5749 var rc int32 = SQLITE_OK 5750 var pEnd uintptr = uintptr(0) 5751 var pFirst uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5752 5753 for rc == SQLITE_OK && pFirst != pEnd { 5754 var pIter uintptr 5755 for pIter = pFirst; rc == SQLITE_OK && pIter != pEnd; pIter = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext { 5756 rc = idxProcessOneTrigger(tls, p, pIter, pzErr) 5757 } 5758 pEnd = pFirst 5759 pFirst = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5760 } 5761 5762 return rc 5763 } 5764 5765 func idxCreateVtabSchema(tls *libc.TLS, p uintptr, pzErrmsg uintptr) int32 { 5766 bp := tls.Alloc(60) 5767 defer tls.Free(60) 5768 5769 *(*int32)(unsafe.Pointer(bp + 56)) = idxRegisterVtab(tls, p) 5770 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 5771 5772 *(*int32)(unsafe.Pointer(bp + 56)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+40, pzErrmsg, 5773 ts+711) 5774 for *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 5775 var zType uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 5776 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 5777 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 5778 5779 if zType == uintptr(0) || zName == uintptr(0) { 5780 continue 5781 } 5782 if int32(*(*uint8)(unsafe.Pointer(zType))) == 'v' || int32(*(*uint8)(unsafe.Pointer(zType + 1))) == 'r' { 5783 if zSql != 0 { 5784 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), pzErrmsg) 5785 } 5786 } else { 5787 *(*int32)(unsafe.Pointer(bp + 56)) = idxGetTableInfo(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, zName, bp+48, pzErrmsg) 5788 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 5789 var i int32 5790 var zInner uintptr = uintptr(0) 5791 var zOuter uintptr = uintptr(0) 5792 (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpTable 5793 (*sqlite3expert)(unsafe.Pointer(p)).FpTable = *(*uintptr)(unsafe.Pointer(bp + 48)) 5794 5795 zInner = idxAppendText(tls, bp+56, uintptr(0), ts+979, 0) 5796 for i = 0; i < (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FnCol; i++ { 5797 zInner = idxAppendText(tls, bp+56, zInner, ts+995, 5798 libc.VaList(bp, func() uintptr { 5799 if i == 0 { 5800 return ts + 584 5801 } 5802 return ts + 97 5803 }(), (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FaCol+uintptr(i)*24)).FzName, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FaCol+uintptr(i)*24)).FzColl)) 5804 } 5805 zInner = idxAppendText(tls, bp+56, zInner, ts+585, 0) 5806 5807 zOuter = idxAppendText(tls, bp+56, uintptr(0), 5808 ts+1011, libc.VaList(bp+24, zName, zInner)) 5809 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 5810 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zOuter, uintptr(0), uintptr(0), pzErrmsg) 5811 } 5812 sqlite3.Xsqlite3_free(tls, zInner) 5813 sqlite3.Xsqlite3_free(tls, zOuter) 5814 } 5815 } 5816 } 5817 idxFinalize(tls, bp+56, *(*uintptr)(unsafe.Pointer(bp + 40))) 5818 return *(*int32)(unsafe.Pointer(bp + 56)) 5819 } 5820 5821 type IdxSampleCtx = struct { 5822 FiTarget int32 5823 F__ccgo_pad1 [4]byte 5824 Ftarget float64 5825 FnRow float64 5826 FnRet float64 5827 } 5828 5829 func idxSampleFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5830 bp := tls.Alloc(2) 5831 defer tls.Free(2) 5832 5833 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5834 var bRet int32 5835 5836 _ = argv 5837 5838 if (*IdxSampleCtx)(unsafe.Pointer(p)).FnRow == 0.0 { 5839 bRet = 1 5840 } else { 5841 bRet = libc.Bool32((*IdxSampleCtx)(unsafe.Pointer(p)).FnRet/(*IdxSampleCtx)(unsafe.Pointer(p)).FnRow <= (*IdxSampleCtx)(unsafe.Pointer(p)).Ftarget) 5842 if bRet == 0 { 5843 sqlite3.Xsqlite3_randomness(tls, 2, bp) 5844 bRet = libc.Bool32(int32(*(*uint16)(unsafe.Pointer(bp)))%100 <= (*IdxSampleCtx)(unsafe.Pointer(p)).FiTarget) 5845 } 5846 } 5847 5848 sqlite3.Xsqlite3_result_int(tls, pCtx, bRet) 5849 *(*float64)(unsafe.Pointer(p + 16)) += 1.0 5850 *(*float64)(unsafe.Pointer(p + 24)) += float64(bRet) 5851 } 5852 5853 type IdxRemCtx = struct { 5854 FnSlot int32 5855 F__ccgo_pad1 [4]byte 5856 FaSlot [1]struct { 5857 FeType int32 5858 F__ccgo_pad1 [4]byte 5859 FiVal i64 5860 FrVal float64 5861 FnByte int32 5862 Fn int32 5863 Fz uintptr 5864 } 5865 } 5866 5867 type IdxRemSlot = struct { 5868 FeType int32 5869 F__ccgo_pad1 [4]byte 5870 FiVal i64 5871 FrVal float64 5872 FnByte int32 5873 Fn int32 5874 Fz uintptr 5875 } 5876 5877 func idxRemFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 5878 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 5879 var pSlot uintptr 5880 var iSlot int32 5881 5882 iSlot = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 5883 5884 pSlot = p + 8 + uintptr(iSlot)*40 5885 5886 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5887 case SQLITE_NULL: 5888 break 5889 5890 case SQLITE_INTEGER: 5891 sqlite3.Xsqlite3_result_int64(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal) 5892 break 5893 5894 case SQLITE_FLOAT: 5895 sqlite3.Xsqlite3_result_double(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal) 5896 break 5897 5898 case SQLITE_BLOB: 5899 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5900 break 5901 5902 case SQLITE_TEXT: 5903 sqlite3.Xsqlite3_result_text(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 5904 break 5905 } 5906 5907 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5908 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 5909 case SQLITE_NULL: 5910 break 5911 5912 case SQLITE_INTEGER: 5913 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5914 break 5915 5916 case SQLITE_FLOAT: 5917 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5918 break 5919 5920 case SQLITE_BLOB: 5921 fallthrough 5922 case SQLITE_TEXT: 5923 { 5924 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5925 var pData uintptr = uintptr(0) 5926 if nByte > (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte { 5927 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, nByte*2) 5928 if zNew == uintptr(0) { 5929 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 5930 return 5931 } 5932 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte = nByte * 2 5933 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz = zNew 5934 } 5935 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn = nByte 5936 if (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType == SQLITE_BLOB { 5937 pData = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5938 if pData != 0 { 5939 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 5940 } 5941 } else { 5942 pData = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 5943 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 5944 } 5945 break 5946 5947 } 5948 } 5949 } 5950 5951 func idxLargestIndex(tls *libc.TLS, db uintptr, pnMax uintptr, pzErr uintptr) int32 { 5952 bp := tls.Alloc(12) 5953 defer tls.Free(12) 5954 5955 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OK 5956 var zMax uintptr = ts + 1052 5957 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 5958 5959 *(*int32)(unsafe.Pointer(pnMax)) = 0 5960 *(*int32)(unsafe.Pointer(bp + 8)) = idxPrepareStmt(tls, db, bp, pzErr, zMax) 5961 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 5962 *(*int32)(unsafe.Pointer(pnMax)) = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) + 1 5963 } 5964 idxFinalize(tls, bp+8, *(*uintptr)(unsafe.Pointer(bp))) 5965 5966 return *(*int32)(unsafe.Pointer(bp + 8)) 5967 } 5968 5969 func idxPopulateOneStat1(tls *libc.TLS, p uintptr, pIndexXInfo uintptr, pWriteStat uintptr, zTab uintptr, zIdx uintptr, pzErr uintptr) int32 { 5970 bp := tls.Alloc(128) 5971 defer tls.Free(128) 5972 5973 var zCols uintptr = uintptr(0) 5974 var zOrder uintptr = uintptr(0) 5975 var zQuery uintptr = uintptr(0) 5976 var nCol int32 = 0 5977 var i int32 5978 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 5979 var aStat uintptr = uintptr(0) 5980 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_OK 5981 5982 sqlite3.Xsqlite3_bind_text(tls, pIndexXInfo, 1, zIdx, -1, uintptr(0)) 5983 for SQLITE_OK == *(*int32)(unsafe.Pointer(bp + 112)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pIndexXInfo) { 5984 var zComma uintptr 5985 if zCols == uintptr(0) { 5986 zComma = ts + 584 5987 } else { 5988 zComma = ts + 97 5989 } 5990 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 0) 5991 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 1) 5992 zCols = idxAppendText(tls, bp+112, zCols, 5993 ts+1189, libc.VaList(bp, zComma, zName, nCol, zName, zColl)) 5994 zOrder = idxAppendText(tls, bp+112, zOrder, ts+1224, libc.VaList(bp+40, zComma, libc.PreIncInt32(&nCol, 1))) 5995 } 5996 sqlite3.Xsqlite3_reset(tls, pIndexXInfo) 5997 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 5998 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 5999 zQuery = sqlite3.Xsqlite3_mprintf(tls, 6000 ts+1229, libc.VaList(bp+56, zCols, zTab, zOrder)) 6001 } else { 6002 zQuery = sqlite3.Xsqlite3_mprintf(tls, 6003 ts+1261, libc.VaList(bp+80, zCols, zOrder)) 6004 } 6005 } 6006 sqlite3.Xsqlite3_free(tls, zCols) 6007 sqlite3.Xsqlite3_free(tls, zOrder) 6008 6009 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6010 var dbrem uintptr = func() uintptr { 6011 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6012 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 6013 } 6014 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 6015 }() 6016 *(*int32)(unsafe.Pointer(bp + 112)) = idxPrepareStmt(tls, dbrem, bp+120, pzErr, zQuery) 6017 } 6018 sqlite3.Xsqlite3_free(tls, zQuery) 6019 6020 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6021 aStat = idxMalloc(tls, bp+112, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nCol+1))) 6022 } 6023 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 6024 var pEntry uintptr 6025 var zStat uintptr = uintptr(0) 6026 for i = 0; i <= nCol; i++ { 6027 *(*int32)(unsafe.Pointer(aStat + uintptr(i)*4)) = 1 6028 } 6029 for *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 6030 *(*int32)(unsafe.Pointer(aStat))++ 6031 for i = 0; i < nCol; i++ { 6032 if sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 120)), i) == 0 { 6033 break 6034 } 6035 } 6036 for ; i < nCol; i++ { 6037 *(*int32)(unsafe.Pointer(aStat + uintptr(i+1)*4))++ 6038 } 6039 } 6040 6041 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6042 var s0 int32 = *(*int32)(unsafe.Pointer(aStat)) 6043 zStat = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+96, s0)) 6044 if zStat == uintptr(0) { 6045 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_NOMEM 6046 } 6047 for i = 1; *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && i <= nCol; i++ { 6048 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)))) 6049 } 6050 } 6051 6052 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6053 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 1, zTab, -1, uintptr(0)) 6054 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 2, zIdx, -1, uintptr(0)) 6055 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 3, zStat, -1, uintptr(0)) 6056 sqlite3.Xsqlite3_step(tls, pWriteStat) 6057 *(*int32)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_reset(tls, pWriteStat) 6058 } 6059 6060 pEntry = idxHashFind(tls, p+88, zIdx, int32(libc.Xstrlen(tls, zIdx))) 6061 if pEntry != 0 { 6062 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 = zStat 6063 } else { 6064 sqlite3.Xsqlite3_free(tls, zStat) 6065 } 6066 } 6067 sqlite3.Xsqlite3_free(tls, aStat) 6068 idxFinalize(tls, bp+112, *(*uintptr)(unsafe.Pointer(bp + 120))) 6069 6070 return *(*int32)(unsafe.Pointer(bp + 112)) 6071 } 6072 6073 func idxBuildSampleTable(tls *libc.TLS, p uintptr, zTab uintptr) int32 { 6074 bp := tls.Alloc(8) 6075 defer tls.Free(8) 6076 6077 var rc int32 6078 var zSql uintptr 6079 6080 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6081 if rc != SQLITE_OK { 6082 return rc 6083 } 6084 6085 zSql = sqlite3.Xsqlite3_mprintf(tls, 6086 ts+1404, libc.VaList(bp, zTab)) 6087 if zSql == uintptr(0) { 6088 return SQLITE_NOMEM 6089 } 6090 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), uintptr(0)) 6091 sqlite3.Xsqlite3_free(tls, zSql) 6092 6093 return rc 6094 } 6095 6096 func idxPopulateStat1(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6097 bp := tls.Alloc(64) 6098 defer tls.Free(64) 6099 6100 *(*int32)(unsafe.Pointer(bp + 4)) = SQLITE_OK 6101 *(*int32)(unsafe.Pointer(bp)) = 0 6102 var pCtx uintptr = uintptr(0) 6103 6104 var i int32 6105 var iPrev i64 = int64(-100000) 6106 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 6107 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 6108 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 6109 6110 var zAllIndex uintptr = ts + 1480 6111 var zIndexXInfo uintptr = ts + 1594 6112 var zWrite uintptr = ts + 1649 6113 6114 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 0 { 6115 return SQLITE_OK 6116 } 6117 6118 *(*int32)(unsafe.Pointer(bp + 4)) = idxLargestIndex(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp, pzErr) 6119 if *(*int32)(unsafe.Pointer(bp)) <= 0 || *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 6120 return *(*int32)(unsafe.Pointer(bp + 4)) 6121 } 6122 6123 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1690, uintptr(0), uintptr(0), uintptr(0)) 6124 6125 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6126 var nByte int32 = int32(uint64(unsafe.Sizeof(IdxRemCtx{})) + uint64(unsafe.Sizeof(IdxRemSlot{}))*uint64(*(*int32)(unsafe.Pointer(bp)))) 6127 pCtx = idxMalloc(tls, bp+4, nByte) 6128 } 6129 6130 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6131 var dbrem uintptr = func() uintptr { 6132 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6133 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 6134 } 6135 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 6136 }() 6137 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 6138 dbrem, ts+1724, 2, SQLITE_UTF8, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 6139 f func(*libc.TLS, uintptr, int32, uintptr) 6140 }{idxRemFunc})), uintptr(0), uintptr(0)) 6141 } 6142 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6143 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 6144 (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1728, 0, SQLITE_UTF8, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 6145 f func(*libc.TLS, uintptr, int32, uintptr) 6146 }{idxSampleFunc})), uintptr(0), uintptr(0)) 6147 } 6148 6149 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6150 (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot = *(*int32)(unsafe.Pointer(bp)) + 1 6151 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+40, pzErr, zAllIndex) 6152 } 6153 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6154 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+48, pzErr, zIndexXInfo) 6155 } 6156 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6157 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+56, pzErr, zWrite) 6158 } 6159 6160 for *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 6161 var iRowid i64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 6162 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 6163 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 6164 if zTab == uintptr(0) || zIdx == uintptr(0) { 6165 continue 6166 } 6167 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 && iPrev != iRowid { 6168 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).Ftarget = float64((*sqlite3expert)(unsafe.Pointer(p)).FiSample) / 100.0 6169 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FiTarget = (*sqlite3expert)(unsafe.Pointer(p)).FiSample 6170 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRow = 0.0 6171 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRet = 0.0 6172 *(*int32)(unsafe.Pointer(bp + 4)) = idxBuildSampleTable(tls, p, zTab) 6173 if *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 6174 break 6175 } 6176 } 6177 *(*int32)(unsafe.Pointer(bp + 4)) = idxPopulateOneStat1(tls, p, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56)), zTab, zIdx, pzErr) 6178 iPrev = iRowid 6179 } 6180 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 { 6181 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, 6182 ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6183 } 6184 6185 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 40))) 6186 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 48))) 6187 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 56))) 6188 6189 if pCtx != 0 { 6190 for i = 0; i < (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot; i++ { 6191 sqlite3.Xsqlite3_free(tls, (*IdxRemSlot)(unsafe.Pointer(pCtx+8+uintptr(i)*40)).Fz) 6192 } 6193 sqlite3.Xsqlite3_free(tls, pCtx) 6194 } 6195 6196 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6197 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1735, uintptr(0), uintptr(0), uintptr(0)) 6198 } 6199 6200 sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6201 return *(*int32)(unsafe.Pointer(bp + 4)) 6202 } 6203 6204 func sqlite3_expert_new(tls *libc.TLS, db uintptr, pzErrmsg uintptr) uintptr { 6205 bp := tls.Alloc(32) 6206 defer tls.Free(32) 6207 6208 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 6209 var pNew uintptr 6210 6211 pNew = idxMalloc(tls, bp+16, int32(unsafe.Sizeof(sqlite3expert{}))) 6212 6213 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6214 (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb = db 6215 (*sqlite3expert)(unsafe.Pointer(pNew)).FiSample = 100 6216 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+24) 6217 } 6218 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6219 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+16) 6220 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6221 sqlite3.Xsqlite3_db_config(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, SQLITE_DBCONFIG_TRIGGER_EQP, libc.VaList(bp, 1, uintptr(0))) 6222 } 6223 } 6224 6225 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6226 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 6227 *(*int32)(unsafe.Pointer(bp + 16)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb, bp+24, pzErrmsg, 6228 ts+1766, 0) 6229 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) { 6230 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 6231 if zSql != 0 { 6232 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, zSql, uintptr(0), uintptr(0), pzErrmsg) 6233 } 6234 } 6235 idxFinalize(tls, bp+16, *(*uintptr)(unsafe.Pointer(bp + 24))) 6236 } 6237 6238 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6239 *(*int32)(unsafe.Pointer(bp + 16)) = idxCreateVtabSchema(tls, pNew, pzErrmsg) 6240 } 6241 6242 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6243 sqlite3.Xsqlite3_set_authorizer(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbv, *(*uintptr)(unsafe.Pointer(&struct { 6244 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 6245 }{idxAuthCallback})), pNew) 6246 } 6247 6248 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 6249 sqlite3_expert_destroy(tls, pNew) 6250 pNew = uintptr(0) 6251 } 6252 return pNew 6253 } 6254 6255 func sqlite3_expert_config(tls *libc.TLS, p uintptr, op int32, va uintptr) int32 { 6256 var rc int32 = SQLITE_OK 6257 var ap va_list 6258 _ = ap 6259 ap = va 6260 switch op { 6261 case EXPERT_CONFIG_SAMPLE: 6262 { 6263 var iVal int32 = libc.VaInt32(&ap) 6264 if iVal < 0 { 6265 iVal = 0 6266 } 6267 if iVal > 100 { 6268 iVal = 100 6269 } 6270 (*sqlite3expert)(unsafe.Pointer(p)).FiSample = iVal 6271 break 6272 6273 } 6274 default: 6275 rc = SQLITE_NOTFOUND 6276 break 6277 } 6278 6279 _ = ap 6280 return rc 6281 } 6282 6283 func sqlite3_expert_sql(tls *libc.TLS, p uintptr, zSql uintptr, pzErr uintptr) int32 { 6284 bp := tls.Alloc(20) 6285 defer tls.Free(20) 6286 6287 var pScanOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpScan 6288 var pStmtOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 6289 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 6290 *(*uintptr)(unsafe.Pointer(bp + 8)) = zSql 6291 6292 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun != 0 { 6293 return SQLITE_MISUSE 6294 } 6295 6296 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 { 6297 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 6298 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, *(*uintptr)(unsafe.Pointer(bp + 8)), -1, bp, bp+8) 6299 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6300 if *(*uintptr)(unsafe.Pointer(bp)) != 0 { 6301 var pNew uintptr 6302 var z uintptr = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 6303 var n int32 = int32(libc.Xstrlen(tls, z)) 6304 pNew = idxMalloc(tls, bp+16, int32(uint64(unsafe.Sizeof(IdxStatement{}))+uint64(n)+uint64(1))) 6305 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6306 (*IdxStatement)(unsafe.Pointer(pNew)).FzSql = pNew + 1*40 6307 libc.Xmemcpy(tls, (*IdxStatement)(unsafe.Pointer(pNew)).FzSql, z, uint64(n+1)) 6308 (*IdxStatement)(unsafe.Pointer(pNew)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 6309 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 6310 (*IdxStatement)(unsafe.Pointer(pNew)).FiId = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 6311 } 6312 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pNew 6313 } 6314 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 6315 } 6316 } else { 6317 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 6318 } 6319 } 6320 6321 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 6322 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, pScanOrig) 6323 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, pStmtOrig) 6324 (*sqlite3expert)(unsafe.Pointer(p)).FpScan = pScanOrig 6325 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pStmtOrig 6326 } 6327 6328 return *(*int32)(unsafe.Pointer(bp + 16)) 6329 } 6330 6331 func sqlite3_expert_analyze(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6332 bp := tls.Alloc(28) 6333 defer tls.Free(28) 6334 6335 var pEntry uintptr 6336 6337 *(*int32)(unsafe.Pointer(bp + 24)) = idxProcessTriggers(tls, p, pzErr) 6338 6339 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6340 *(*int32)(unsafe.Pointer(bp + 24)) = idxCreateCandidates(tls, p) 6341 } else if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_BUSY|int32(3)<<8 { 6342 if pzErr != 0 { 6343 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+1865, 0) 6344 } 6345 return *(*int32)(unsafe.Pointer(bp + 24)) 6346 } 6347 6348 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6349 *(*int32)(unsafe.Pointer(bp + 24)) = idxPopulateStat1(tls, p, pzErr) 6350 } 6351 6352 for pEntry = (*sqlite3expert)(unsafe.Pointer(p)).FhIdx.FpFirst; pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext { 6353 (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates = idxAppendText(tls, bp+24, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates, 6354 ts+1909, libc.VaList(bp, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, 6355 func() uintptr { 6356 if (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 != 0 { 6357 return ts + 1918 6358 } 6359 return ts + 584 6360 }(), (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2)) 6361 } 6362 6363 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6364 *(*int32)(unsafe.Pointer(bp + 24)) = idxFindIndexes(tls, p, pzErr) 6365 } 6366 6367 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6368 (*sqlite3expert)(unsafe.Pointer(p)).FbRun = 1 6369 } 6370 return *(*int32)(unsafe.Pointer(bp + 24)) 6371 } 6372 6373 func sqlite3_expert_count(tls *libc.TLS, p uintptr) int32 { 6374 var nRet int32 = 0 6375 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 6376 nRet = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 6377 } 6378 return nRet 6379 } 6380 6381 func sqlite3_expert_report(tls *libc.TLS, p uintptr, iStmt int32, eReport int32) uintptr { 6382 var zRet uintptr = uintptr(0) 6383 var pStmt uintptr 6384 6385 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun == 0 { 6386 return uintptr(0) 6387 } 6388 for pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement; pStmt != 0 && (*IdxStatement)(unsafe.Pointer(pStmt)).FiId != iStmt; pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext { 6389 } 6390 switch eReport { 6391 case EXPERT_REPORT_SQL: 6392 if pStmt != 0 { 6393 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql 6394 } 6395 break 6396 case EXPERT_REPORT_INDEXES: 6397 if pStmt != 0 { 6398 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx 6399 } 6400 break 6401 case EXPERT_REPORT_PLAN: 6402 if pStmt != 0 { 6403 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP 6404 } 6405 break 6406 case EXPERT_REPORT_CANDIDATES: 6407 zRet = (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates 6408 break 6409 } 6410 return zRet 6411 } 6412 6413 func sqlite3_expert_destroy(tls *libc.TLS, p uintptr) { 6414 if p != 0 { 6415 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm) 6416 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv) 6417 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, uintptr(0)) 6418 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, uintptr(0)) 6419 idxTableFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpTable) 6420 idxWriteFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpWrite) 6421 idxHashClear(tls, p+88) 6422 sqlite3.Xsqlite3_free(tls, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates) 6423 sqlite3.Xsqlite3_free(tls, p) 6424 } 6425 } 6426 6427 type ClientData = uintptr 6428 6429 type Tcl_WideInt = int64 6430 type Tcl_WideUInt = uint64 6431 6432 type stat = struct { 6433 Fst_dev uint64 6434 Fst_ino uint64 6435 Fst_mode uint32 6436 Fst_nlink uint32 6437 Fst_uid uint32 6438 Fst_gid uint32 6439 Fst_rdev uint64 6440 F__pad1 uint64 6441 Fst_size int64 6442 Fst_blksize int32 6443 F__pad2 int32 6444 Fst_blocks int64 6445 Fst_atim struct { 6446 Ftv_sec int64 6447 Ftv_nsec int64 6448 } 6449 Fst_mtim struct { 6450 Ftv_sec int64 6451 Ftv_nsec int64 6452 } 6453 Fst_ctim struct { 6454 Ftv_sec int64 6455 Ftv_nsec int64 6456 } 6457 F__glibc_reserved [2]int32 6458 } 6459 6460 type Tcl_Interp1 = struct { 6461 FresultDontUse uintptr 6462 FfreeProcDontUse uintptr 6463 FerrorLineDontUse int32 6464 F__ccgo_pad1 [4]byte 6465 } 6466 6467 type Tcl_Interp = Tcl_Interp1 6468 6469 type Tcl_AsyncHandler = uintptr 6470 type Tcl_Channel = uintptr 6471 type Tcl_ChannelTypeVersion = uintptr 6472 type Tcl_Command = uintptr 6473 type Tcl_Condition = uintptr 6474 type Tcl_Dict = uintptr 6475 type Tcl_EncodingState = uintptr 6476 type Tcl_Encoding = uintptr 6477 type Tcl_Event1 = struct { 6478 Fproc uintptr 6479 FnextPtr uintptr 6480 } 6481 6482 type Tcl_Event = Tcl_Event1 6483 type Tcl_InterpState = uintptr 6484 type Tcl_LoadHandle = uintptr 6485 type Tcl_Mutex = uintptr 6486 type Tcl_Pid = uintptr 6487 type Tcl_RegExp = uintptr 6488 type Tcl_ThreadDataKey = uintptr 6489 type Tcl_ThreadId = uintptr 6490 type Tcl_TimerToken = uintptr 6491 type Tcl_Trace = uintptr 6492 type Tcl_Var = uintptr 6493 type Tcl_ZlibStream = uintptr 6494 6495 type Tcl_RegExpIndices1 = struct { 6496 Fstart int64 6497 Fend int64 6498 } 6499 6500 type Tcl_RegExpIndices = Tcl_RegExpIndices1 6501 6502 type Tcl_RegExpInfo1 = struct { 6503 Fnsubs int32 6504 F__ccgo_pad1 [4]byte 6505 Fmatches uintptr 6506 FextendStart int64 6507 Freserved int64 6508 } 6509 6510 type Tcl_RegExpInfo = Tcl_RegExpInfo1 6511 6512 type Tcl_Stat_ = uintptr 6513 type Tcl_OldStat_ = uintptr 6514 6515 type Tcl_ValueType = uint32 6516 6517 type Tcl_Value1 = struct { 6518 Ftype Tcl_ValueType 6519 F__ccgo_pad1 [4]byte 6520 FintValue int64 6521 FdoubleValue float64 6522 FwideValue Tcl_WideInt 6523 } 6524 6525 type Tcl_Value = Tcl_Value1 6526 6527 type Tcl_Obj1 = struct { 6528 FrefCount int32 6529 F__ccgo_pad1 [4]byte 6530 Fbytes uintptr 6531 Flength int32 6532 F__ccgo_pad2 [4]byte 6533 FtypePtr uintptr 6534 FinternalRep struct { 6535 FlongValue int64 6536 F__ccgo_pad1 [8]byte 6537 } 6538 } 6539 6540 type Tcl_ObjType1 = struct { 6541 Fname uintptr 6542 FfreeIntRepProc uintptr 6543 FdupIntRepProc uintptr 6544 FupdateStringProc uintptr 6545 FsetFromAnyProc uintptr 6546 } 6547 6548 type Tcl_ObjType = Tcl_ObjType1 6549 6550 type Tcl_Obj = Tcl_Obj1 6551 6552 type Tcl_SavedResult1 = struct { 6553 Fresult uintptr 6554 FfreeProc uintptr 6555 FobjResultPtr uintptr 6556 FappendResult uintptr 6557 FappendAvl int32 6558 FappendUsed int32 6559 FresultSpace [201]uint8 6560 F__ccgo_pad1 [7]byte 6561 } 6562 6563 type Tcl_SavedResult = Tcl_SavedResult1 6564 6565 type Tcl_Namespace1 = struct { 6566 Fname uintptr 6567 FfullName uintptr 6568 FclientData ClientData 6569 FdeleteProc uintptr 6570 FparentPtr uintptr 6571 } 6572 6573 type Tcl_Namespace = Tcl_Namespace1 6574 6575 type Tcl_CallFrame1 = struct { 6576 FnsPtr uintptr 6577 Fdummy1 int32 6578 Fdummy2 int32 6579 Fdummy3 uintptr 6580 Fdummy4 uintptr 6581 Fdummy5 uintptr 6582 Fdummy6 int32 6583 F__ccgo_pad1 [4]byte 6584 Fdummy7 uintptr 6585 Fdummy8 uintptr 6586 Fdummy9 int32 6587 F__ccgo_pad2 [4]byte 6588 Fdummy10 uintptr 6589 Fdummy11 uintptr 6590 Fdummy12 uintptr 6591 Fdummy13 uintptr 6592 } 6593 6594 type Tcl_CallFrame = Tcl_CallFrame1 6595 6596 type Tcl_CmdInfo1 = struct { 6597 FisNativeObjectProc int32 6598 F__ccgo_pad1 [4]byte 6599 FobjProc uintptr 6600 FobjClientData ClientData 6601 Fproc uintptr 6602 FclientData ClientData 6603 FdeleteProc uintptr 6604 FdeleteData ClientData 6605 FnamespacePtr uintptr 6606 } 6607 6608 type Tcl_CmdInfo = Tcl_CmdInfo1 6609 6610 type Tcl_DString1 = struct { 6611 Fstring uintptr 6612 Flength int32 6613 FspaceAvl int32 6614 FstaticSpace [200]uint8 6615 } 6616 6617 type Tcl_DString = Tcl_DString1 6618 6619 type Tcl_HashKeyType1 = struct { 6620 Fversion int32 6621 Fflags int32 6622 FhashKeyProc uintptr 6623 FcompareKeysProc uintptr 6624 FallocEntryProc uintptr 6625 FfreeEntryProc uintptr 6626 } 6627 6628 type Tcl_HashKeyType = Tcl_HashKeyType1 6629 type Tcl_HashTable1 = struct { 6630 Fbuckets uintptr 6631 FstaticBuckets [4]uintptr 6632 FnumBuckets int32 6633 FnumEntries int32 6634 FrebuildSize int32 6635 FdownShift int32 6636 Fmask int32 6637 FkeyType int32 6638 FfindProc uintptr 6639 FcreateProc uintptr 6640 FtypePtr uintptr 6641 } 6642 6643 type Tcl_HashTable = Tcl_HashTable1 6644 type Tcl_HashEntry1 = struct { 6645 FnextPtr uintptr 6646 FtablePtr uintptr 6647 Fhash uintptr 6648 FclientData ClientData 6649 Fkey struct{ FoneWordValue uintptr } 6650 } 6651 6652 type Tcl_HashEntry = Tcl_HashEntry1 6653 6654 type Tcl_HashSearch1 = struct { 6655 FtablePtr uintptr 6656 FnextIndex int32 6657 F__ccgo_pad1 [4]byte 6658 FnextEntryPtr uintptr 6659 } 6660 6661 type Tcl_HashSearch = Tcl_HashSearch1 6662 6663 type Tcl_DictSearch = struct { 6664 Fnext uintptr 6665 Fepoch int32 6666 F__ccgo_pad1 [4]byte 6667 FdictionaryPtr Tcl_Dict 6668 } 6669 6670 type Tcl_QueuePosition = uint32 6671 6672 type Tcl_Time1 = struct { 6673 Fsec int64 6674 Fusec int64 6675 } 6676 6677 type Tcl_Time = Tcl_Time1 6678 6679 type Tcl_ChannelType1 = struct { 6680 FtypeName uintptr 6681 Fversion Tcl_ChannelTypeVersion 6682 FcloseProc uintptr 6683 FinputProc uintptr 6684 FoutputProc uintptr 6685 FseekProc uintptr 6686 FsetOptionProc uintptr 6687 FgetOptionProc uintptr 6688 FwatchProc uintptr 6689 FgetHandleProc uintptr 6690 Fclose2Proc uintptr 6691 FblockModeProc uintptr 6692 FflushProc uintptr 6693 FhandlerProc uintptr 6694 FwideSeekProc uintptr 6695 FthreadActionProc uintptr 6696 FtruncateProc uintptr 6697 } 6698 6699 type Tcl_ChannelType = Tcl_ChannelType1 6700 6701 type Tcl_PathType = uint32 6702 6703 type Tcl_GlobTypeData1 = struct { 6704 Ftype int32 6705 Fperm int32 6706 FmacType uintptr 6707 FmacCreator uintptr 6708 } 6709 6710 type Tcl_GlobTypeData = Tcl_GlobTypeData1 6711 6712 type utimbuf = struct { 6713 Factime int64 6714 Fmodtime int64 6715 } 6716 6717 type Tcl_FSVersion = uintptr 6718 6719 type Tcl_Filesystem1 = struct { 6720 FtypeName uintptr 6721 FstructureLength int32 6722 F__ccgo_pad1 [4]byte 6723 Fversion Tcl_FSVersion 6724 FpathInFilesystemProc uintptr 6725 FdupInternalRepProc uintptr 6726 FfreeInternalRepProc uintptr 6727 FinternalToNormalizedProc uintptr 6728 FcreateInternalRepProc uintptr 6729 FnormalizePathProc uintptr 6730 FfilesystemPathTypeProc uintptr 6731 FfilesystemSeparatorProc uintptr 6732 FstatProc uintptr 6733 FaccessProc uintptr 6734 FopenFileChannelProc uintptr 6735 FmatchInDirectoryProc uintptr 6736 FutimeProc uintptr 6737 FlinkProc uintptr 6738 FlistVolumesProc uintptr 6739 FfileAttrStringsProc uintptr 6740 FfileAttrsGetProc uintptr 6741 FfileAttrsSetProc uintptr 6742 FcreateDirectoryProc uintptr 6743 FremoveDirectoryProc uintptr 6744 FdeleteFileProc uintptr 6745 FcopyFileProc uintptr 6746 FrenameFileProc uintptr 6747 FcopyDirectoryProc uintptr 6748 FlstatProc uintptr 6749 FloadFileProc uintptr 6750 FgetCwdProc uintptr 6751 FchdirProc uintptr 6752 } 6753 6754 type Tcl_Filesystem = Tcl_Filesystem1 6755 6756 type Tcl_NotifierProcs1 = struct { 6757 FsetTimerProc uintptr 6758 FwaitForEventProc uintptr 6759 FcreateFileHandlerProc uintptr 6760 FdeleteFileHandlerProc uintptr 6761 FinitNotifierProc uintptr 6762 FfinalizeNotifierProc uintptr 6763 FalertNotifierProc uintptr 6764 FserviceModeHookProc uintptr 6765 } 6766 6767 type Tcl_NotifierProcs = Tcl_NotifierProcs1 6768 6769 type Tcl_Token1 = struct { 6770 Ftype int32 6771 F__ccgo_pad1 [4]byte 6772 Fstart uintptr 6773 Fsize int32 6774 FnumComponents int32 6775 } 6776 6777 type Tcl_Token = Tcl_Token1 6778 6779 type Tcl_Parse1 = struct { 6780 FcommentStart uintptr 6781 FcommentSize int32 6782 F__ccgo_pad1 [4]byte 6783 FcommandStart uintptr 6784 FcommandSize int32 6785 FnumWords int32 6786 FtokenPtr uintptr 6787 FnumTokens int32 6788 FtokensAvailable int32 6789 FerrorType int32 6790 F__ccgo_pad2 [4]byte 6791 Fstring uintptr 6792 Fend uintptr 6793 Finterp uintptr 6794 Fterm uintptr 6795 Fincomplete int32 6796 F__ccgo_pad3 [4]byte 6797 FstaticTokens [20]Tcl_Token 6798 } 6799 6800 type Tcl_Parse = Tcl_Parse1 6801 6802 type Tcl_EncodingType1 = struct { 6803 FencodingName uintptr 6804 FtoUtfProc uintptr 6805 FfromUtfProc uintptr 6806 FfreeProc uintptr 6807 FclientData ClientData 6808 FnullSize int32 6809 F__ccgo_pad1 [4]byte 6810 } 6811 6812 type Tcl_EncodingType = Tcl_EncodingType1 6813 6814 type Tcl_UniChar = uint16 6815 6816 type Tcl_Config1 = struct { 6817 Fkey uintptr 6818 Fvalue uintptr 6819 } 6820 6821 type Tcl_Config = Tcl_Config1 6822 type mp_digit = uint32 6823 6824 type Tcl_ArgvInfo = struct { 6825 Ftype int32 6826 F__ccgo_pad1 [4]byte 6827 FkeyStr uintptr 6828 FsrcPtr uintptr 6829 FdstPtr uintptr 6830 FhelpStr uintptr 6831 FclientData ClientData 6832 } 6833 6834 type TclPlatStubs1 = struct { 6835 Fmagic int32 6836 F__ccgo_pad1 [4]byte 6837 Fhooks uintptr 6838 } 6839 6840 type TclStubHooks = struct { 6841 FtclPlatStubs uintptr 6842 FtclIntStubs uintptr 6843 FtclIntPlatStubs uintptr 6844 } 6845 6846 type TclStubs1 = struct { 6847 Fmagic int32 6848 F__ccgo_pad1 [4]byte 6849 Fhooks uintptr 6850 Ftcl_PkgProvideEx uintptr 6851 Ftcl_PkgRequireEx uintptr 6852 Ftcl_Panic uintptr 6853 Ftcl_Alloc uintptr 6854 Ftcl_Free uintptr 6855 Ftcl_Realloc uintptr 6856 Ftcl_DbCkalloc uintptr 6857 Ftcl_DbCkfree uintptr 6858 Ftcl_DbCkrealloc uintptr 6859 Ftcl_CreateFileHandler uintptr 6860 Ftcl_DeleteFileHandler uintptr 6861 Ftcl_SetTimer uintptr 6862 Ftcl_Sleep uintptr 6863 Ftcl_WaitForEvent uintptr 6864 Ftcl_AppendAllObjTypes uintptr 6865 Ftcl_AppendStringsToObj uintptr 6866 Ftcl_AppendToObj uintptr 6867 Ftcl_ConcatObj uintptr 6868 Ftcl_ConvertToType uintptr 6869 Ftcl_DbDecrRefCount uintptr 6870 Ftcl_DbIncrRefCount uintptr 6871 Ftcl_DbIsShared uintptr 6872 Ftcl_DbNewBooleanObj uintptr 6873 Ftcl_DbNewByteArrayObj uintptr 6874 Ftcl_DbNewDoubleObj uintptr 6875 Ftcl_DbNewListObj uintptr 6876 Ftcl_DbNewLongObj uintptr 6877 Ftcl_DbNewObj uintptr 6878 Ftcl_DbNewStringObj uintptr 6879 Ftcl_DuplicateObj uintptr 6880 FtclFreeObj uintptr 6881 Ftcl_GetBoolean uintptr 6882 Ftcl_GetBooleanFromObj uintptr 6883 Ftcl_GetByteArrayFromObj uintptr 6884 Ftcl_GetDouble uintptr 6885 Ftcl_GetDoubleFromObj uintptr 6886 Ftcl_GetIndexFromObj uintptr 6887 Ftcl_GetInt uintptr 6888 Ftcl_GetIntFromObj uintptr 6889 Ftcl_GetLongFromObj uintptr 6890 Ftcl_GetObjType uintptr 6891 Ftcl_GetStringFromObj uintptr 6892 Ftcl_InvalidateStringRep uintptr 6893 Ftcl_ListObjAppendList uintptr 6894 Ftcl_ListObjAppendElement uintptr 6895 Ftcl_ListObjGetElements uintptr 6896 Ftcl_ListObjIndex uintptr 6897 Ftcl_ListObjLength uintptr 6898 Ftcl_ListObjReplace uintptr 6899 Ftcl_NewBooleanObj uintptr 6900 Ftcl_NewByteArrayObj uintptr 6901 Ftcl_NewDoubleObj uintptr 6902 Ftcl_NewIntObj uintptr 6903 Ftcl_NewListObj uintptr 6904 Ftcl_NewLongObj uintptr 6905 Ftcl_NewObj uintptr 6906 Ftcl_NewStringObj uintptr 6907 Ftcl_SetBooleanObj uintptr 6908 Ftcl_SetByteArrayLength uintptr 6909 Ftcl_SetByteArrayObj uintptr 6910 Ftcl_SetDoubleObj uintptr 6911 Ftcl_SetIntObj uintptr 6912 Ftcl_SetListObj uintptr 6913 Ftcl_SetLongObj uintptr 6914 Ftcl_SetObjLength uintptr 6915 Ftcl_SetStringObj uintptr 6916 Ftcl_AddErrorInfo uintptr 6917 Ftcl_AddObjErrorInfo uintptr 6918 Ftcl_AllowExceptions uintptr 6919 Ftcl_AppendElement uintptr 6920 Ftcl_AppendResult uintptr 6921 Ftcl_AsyncCreate uintptr 6922 Ftcl_AsyncDelete uintptr 6923 Ftcl_AsyncInvoke uintptr 6924 Ftcl_AsyncMark uintptr 6925 Ftcl_AsyncReady uintptr 6926 Ftcl_BackgroundError uintptr 6927 Ftcl_Backslash uintptr 6928 Ftcl_BadChannelOption uintptr 6929 Ftcl_CallWhenDeleted uintptr 6930 Ftcl_CancelIdleCall uintptr 6931 Ftcl_Close uintptr 6932 Ftcl_CommandComplete uintptr 6933 Ftcl_Concat uintptr 6934 Ftcl_ConvertElement uintptr 6935 Ftcl_ConvertCountedElement uintptr 6936 Ftcl_CreateAlias uintptr 6937 Ftcl_CreateAliasObj uintptr 6938 Ftcl_CreateChannel uintptr 6939 Ftcl_CreateChannelHandler uintptr 6940 Ftcl_CreateCloseHandler uintptr 6941 Ftcl_CreateCommand uintptr 6942 Ftcl_CreateEventSource uintptr 6943 Ftcl_CreateExitHandler uintptr 6944 Ftcl_CreateInterp uintptr 6945 Ftcl_CreateMathFunc uintptr 6946 Ftcl_CreateObjCommand uintptr 6947 Ftcl_CreateSlave uintptr 6948 Ftcl_CreateTimerHandler uintptr 6949 Ftcl_CreateTrace uintptr 6950 Ftcl_DeleteAssocData uintptr 6951 Ftcl_DeleteChannelHandler uintptr 6952 Ftcl_DeleteCloseHandler uintptr 6953 Ftcl_DeleteCommand uintptr 6954 Ftcl_DeleteCommandFromToken uintptr 6955 Ftcl_DeleteEvents uintptr 6956 Ftcl_DeleteEventSource uintptr 6957 Ftcl_DeleteExitHandler uintptr 6958 Ftcl_DeleteHashEntry uintptr 6959 Ftcl_DeleteHashTable uintptr 6960 Ftcl_DeleteInterp uintptr 6961 Ftcl_DetachPids uintptr 6962 Ftcl_DeleteTimerHandler uintptr 6963 Ftcl_DeleteTrace uintptr 6964 Ftcl_DontCallWhenDeleted uintptr 6965 Ftcl_DoOneEvent uintptr 6966 Ftcl_DoWhenIdle uintptr 6967 Ftcl_DStringAppend uintptr 6968 Ftcl_DStringAppendElement uintptr 6969 Ftcl_DStringEndSublist uintptr 6970 Ftcl_DStringFree uintptr 6971 Ftcl_DStringGetResult uintptr 6972 Ftcl_DStringInit uintptr 6973 Ftcl_DStringResult uintptr 6974 Ftcl_DStringSetLength uintptr 6975 Ftcl_DStringStartSublist uintptr 6976 Ftcl_Eof uintptr 6977 Ftcl_ErrnoId uintptr 6978 Ftcl_ErrnoMsg uintptr 6979 Ftcl_Eval uintptr 6980 Ftcl_EvalFile uintptr 6981 Ftcl_EvalObj uintptr 6982 Ftcl_EventuallyFree uintptr 6983 Ftcl_Exit uintptr 6984 Ftcl_ExposeCommand uintptr 6985 Ftcl_ExprBoolean uintptr 6986 Ftcl_ExprBooleanObj uintptr 6987 Ftcl_ExprDouble uintptr 6988 Ftcl_ExprDoubleObj uintptr 6989 Ftcl_ExprLong uintptr 6990 Ftcl_ExprLongObj uintptr 6991 Ftcl_ExprObj uintptr 6992 Ftcl_ExprString uintptr 6993 Ftcl_Finalize uintptr 6994 Ftcl_FindExecutable uintptr 6995 Ftcl_FirstHashEntry uintptr 6996 Ftcl_Flush uintptr 6997 Ftcl_FreeResult uintptr 6998 Ftcl_GetAlias uintptr 6999 Ftcl_GetAliasObj uintptr 7000 Ftcl_GetAssocData uintptr 7001 Ftcl_GetChannel uintptr 7002 Ftcl_GetChannelBufferSize uintptr 7003 Ftcl_GetChannelHandle uintptr 7004 Ftcl_GetChannelInstanceData uintptr 7005 Ftcl_GetChannelMode uintptr 7006 Ftcl_GetChannelName uintptr 7007 Ftcl_GetChannelOption uintptr 7008 Ftcl_GetChannelType uintptr 7009 Ftcl_GetCommandInfo uintptr 7010 Ftcl_GetCommandName uintptr 7011 Ftcl_GetErrno uintptr 7012 Ftcl_GetHostName uintptr 7013 Ftcl_GetInterpPath uintptr 7014 Ftcl_GetMaster uintptr 7015 Ftcl_GetNameOfExecutable uintptr 7016 Ftcl_GetObjResult uintptr 7017 Ftcl_GetOpenFile uintptr 7018 Ftcl_GetPathType uintptr 7019 Ftcl_Gets uintptr 7020 Ftcl_GetsObj uintptr 7021 Ftcl_GetServiceMode uintptr 7022 Ftcl_GetSlave uintptr 7023 Ftcl_GetStdChannel uintptr 7024 Ftcl_GetStringResult uintptr 7025 Ftcl_GetVar uintptr 7026 Ftcl_GetVar2 uintptr 7027 Ftcl_GlobalEval uintptr 7028 Ftcl_GlobalEvalObj uintptr 7029 Ftcl_HideCommand uintptr 7030 Ftcl_Init uintptr 7031 Ftcl_InitHashTable uintptr 7032 Ftcl_InputBlocked uintptr 7033 Ftcl_InputBuffered uintptr 7034 Ftcl_InterpDeleted uintptr 7035 Ftcl_IsSafe uintptr 7036 Ftcl_JoinPath uintptr 7037 Ftcl_LinkVar uintptr 7038 Freserved188 uintptr 7039 Ftcl_MakeFileChannel uintptr 7040 Ftcl_MakeSafe uintptr 7041 Ftcl_MakeTcpClientChannel uintptr 7042 Ftcl_Merge uintptr 7043 Ftcl_NextHashEntry uintptr 7044 Ftcl_NotifyChannel uintptr 7045 Ftcl_ObjGetVar2 uintptr 7046 Ftcl_ObjSetVar2 uintptr 7047 Ftcl_OpenCommandChannel uintptr 7048 Ftcl_OpenFileChannel uintptr 7049 Ftcl_OpenTcpClient uintptr 7050 Ftcl_OpenTcpServer uintptr 7051 Ftcl_Preserve uintptr 7052 Ftcl_PrintDouble uintptr 7053 Ftcl_PutEnv uintptr 7054 Ftcl_PosixError uintptr 7055 Ftcl_QueueEvent uintptr 7056 Ftcl_Read uintptr 7057 Ftcl_ReapDetachedProcs uintptr 7058 Ftcl_RecordAndEval uintptr 7059 Ftcl_RecordAndEvalObj uintptr 7060 Ftcl_RegisterChannel uintptr 7061 Ftcl_RegisterObjType uintptr 7062 Ftcl_RegExpCompile uintptr 7063 Ftcl_RegExpExec uintptr 7064 Ftcl_RegExpMatch uintptr 7065 Ftcl_RegExpRange uintptr 7066 Ftcl_Release uintptr 7067 Ftcl_ResetResult uintptr 7068 Ftcl_ScanElement uintptr 7069 Ftcl_ScanCountedElement uintptr 7070 Ftcl_SeekOld uintptr 7071 Ftcl_ServiceAll uintptr 7072 Ftcl_ServiceEvent uintptr 7073 Ftcl_SetAssocData uintptr 7074 Ftcl_SetChannelBufferSize uintptr 7075 Ftcl_SetChannelOption uintptr 7076 Ftcl_SetCommandInfo uintptr 7077 Ftcl_SetErrno uintptr 7078 Ftcl_SetErrorCode uintptr 7079 Ftcl_SetMaxBlockTime uintptr 7080 Ftcl_SetPanicProc uintptr 7081 Ftcl_SetRecursionLimit uintptr 7082 Ftcl_SetResult uintptr 7083 Ftcl_SetServiceMode uintptr 7084 Ftcl_SetObjErrorCode uintptr 7085 Ftcl_SetObjResult uintptr 7086 Ftcl_SetStdChannel uintptr 7087 Ftcl_SetVar uintptr 7088 Ftcl_SetVar2 uintptr 7089 Ftcl_SignalId uintptr 7090 Ftcl_SignalMsg uintptr 7091 Ftcl_SourceRCFile uintptr 7092 Ftcl_SplitList uintptr 7093 Ftcl_SplitPath uintptr 7094 Ftcl_StaticPackage uintptr 7095 Ftcl_StringMatch uintptr 7096 Ftcl_TellOld uintptr 7097 Ftcl_TraceVar uintptr 7098 Ftcl_TraceVar2 uintptr 7099 Ftcl_TranslateFileName uintptr 7100 Ftcl_Ungets uintptr 7101 Ftcl_UnlinkVar uintptr 7102 Ftcl_UnregisterChannel uintptr 7103 Ftcl_UnsetVar uintptr 7104 Ftcl_UnsetVar2 uintptr 7105 Ftcl_UntraceVar uintptr 7106 Ftcl_UntraceVar2 uintptr 7107 Ftcl_UpdateLinkedVar uintptr 7108 Ftcl_UpVar uintptr 7109 Ftcl_UpVar2 uintptr 7110 Ftcl_VarEval uintptr 7111 Ftcl_VarTraceInfo uintptr 7112 Ftcl_VarTraceInfo2 uintptr 7113 Ftcl_Write uintptr 7114 Ftcl_WrongNumArgs uintptr 7115 Ftcl_DumpActiveMemory uintptr 7116 Ftcl_ValidateAllMemory uintptr 7117 Ftcl_AppendResultVA uintptr 7118 Ftcl_AppendStringsToObjVA uintptr 7119 Ftcl_HashStats uintptr 7120 Ftcl_ParseVar uintptr 7121 Ftcl_PkgPresent uintptr 7122 Ftcl_PkgPresentEx uintptr 7123 Ftcl_PkgProvide uintptr 7124 Ftcl_PkgRequire uintptr 7125 Ftcl_SetErrorCodeVA uintptr 7126 Ftcl_VarEvalVA uintptr 7127 Ftcl_WaitPid uintptr 7128 Ftcl_PanicVA uintptr 7129 Ftcl_GetVersion uintptr 7130 Ftcl_InitMemory uintptr 7131 Ftcl_StackChannel uintptr 7132 Ftcl_UnstackChannel uintptr 7133 Ftcl_GetStackedChannel uintptr 7134 Ftcl_SetMainLoop uintptr 7135 Freserved285 uintptr 7136 Ftcl_AppendObjToObj uintptr 7137 Ftcl_CreateEncoding uintptr 7138 Ftcl_CreateThreadExitHandler uintptr 7139 Ftcl_DeleteThreadExitHandler uintptr 7140 Ftcl_DiscardResult uintptr 7141 Ftcl_EvalEx uintptr 7142 Ftcl_EvalObjv uintptr 7143 Ftcl_EvalObjEx uintptr 7144 Ftcl_ExitThread uintptr 7145 Ftcl_ExternalToUtf uintptr 7146 Ftcl_ExternalToUtfDString uintptr 7147 Ftcl_FinalizeThread uintptr 7148 Ftcl_FinalizeNotifier uintptr 7149 Ftcl_FreeEncoding uintptr 7150 Ftcl_GetCurrentThread uintptr 7151 Ftcl_GetEncoding uintptr 7152 Ftcl_GetEncodingName uintptr 7153 Ftcl_GetEncodingNames uintptr 7154 Ftcl_GetIndexFromObjStruct uintptr 7155 Ftcl_GetThreadData uintptr 7156 Ftcl_GetVar2Ex uintptr 7157 Ftcl_InitNotifier uintptr 7158 Ftcl_MutexLock uintptr 7159 Ftcl_MutexUnlock uintptr 7160 Ftcl_ConditionNotify uintptr 7161 Ftcl_ConditionWait uintptr 7162 Ftcl_NumUtfChars uintptr 7163 Ftcl_ReadChars uintptr 7164 Ftcl_RestoreResult uintptr 7165 Ftcl_SaveResult uintptr 7166 Ftcl_SetSystemEncoding uintptr 7167 Ftcl_SetVar2Ex uintptr 7168 Ftcl_ThreadAlert uintptr 7169 Ftcl_ThreadQueueEvent uintptr 7170 Ftcl_UniCharAtIndex uintptr 7171 Ftcl_UniCharToLower uintptr 7172 Ftcl_UniCharToTitle uintptr 7173 Ftcl_UniCharToUpper uintptr 7174 Ftcl_UniCharToUtf uintptr 7175 Ftcl_UtfAtIndex uintptr 7176 Ftcl_UtfCharComplete uintptr 7177 Ftcl_UtfBackslash uintptr 7178 Ftcl_UtfFindFirst uintptr 7179 Ftcl_UtfFindLast uintptr 7180 Ftcl_UtfNext uintptr 7181 Ftcl_UtfPrev uintptr 7182 Ftcl_UtfToExternal uintptr 7183 Ftcl_UtfToExternalDString uintptr 7184 Ftcl_UtfToLower uintptr 7185 Ftcl_UtfToTitle uintptr 7186 Ftcl_UtfToUniChar uintptr 7187 Ftcl_UtfToUpper uintptr 7188 Ftcl_WriteChars uintptr 7189 Ftcl_WriteObj uintptr 7190 Ftcl_GetString uintptr 7191 Ftcl_GetDefaultEncodingDir uintptr 7192 Ftcl_SetDefaultEncodingDir uintptr 7193 Ftcl_AlertNotifier uintptr 7194 Ftcl_ServiceModeHook uintptr 7195 Ftcl_UniCharIsAlnum uintptr 7196 Ftcl_UniCharIsAlpha uintptr 7197 Ftcl_UniCharIsDigit uintptr 7198 Ftcl_UniCharIsLower uintptr 7199 Ftcl_UniCharIsSpace uintptr 7200 Ftcl_UniCharIsUpper uintptr 7201 Ftcl_UniCharIsWordChar uintptr 7202 Ftcl_UniCharLen uintptr 7203 Ftcl_UniCharNcmp uintptr 7204 Ftcl_UniCharToUtfDString uintptr 7205 Ftcl_UtfToUniCharDString uintptr 7206 Ftcl_GetRegExpFromObj uintptr 7207 Ftcl_EvalTokens uintptr 7208 Ftcl_FreeParse uintptr 7209 Ftcl_LogCommandInfo uintptr 7210 Ftcl_ParseBraces uintptr 7211 Ftcl_ParseCommand uintptr 7212 Ftcl_ParseExpr uintptr 7213 Ftcl_ParseQuotedString uintptr 7214 Ftcl_ParseVarName uintptr 7215 Ftcl_GetCwd uintptr 7216 Ftcl_Chdir uintptr 7217 Ftcl_Access uintptr 7218 Ftcl_Stat uintptr 7219 Ftcl_UtfNcmp uintptr 7220 Ftcl_UtfNcasecmp uintptr 7221 Ftcl_StringCaseMatch uintptr 7222 Ftcl_UniCharIsControl uintptr 7223 Ftcl_UniCharIsGraph uintptr 7224 Ftcl_UniCharIsPrint uintptr 7225 Ftcl_UniCharIsPunct uintptr 7226 Ftcl_RegExpExecObj uintptr 7227 Ftcl_RegExpGetInfo uintptr 7228 Ftcl_NewUnicodeObj uintptr 7229 Ftcl_SetUnicodeObj uintptr 7230 Ftcl_GetCharLength uintptr 7231 Ftcl_GetUniChar uintptr 7232 Ftcl_GetUnicode uintptr 7233 Ftcl_GetRange uintptr 7234 Ftcl_AppendUnicodeToObj uintptr 7235 Ftcl_RegExpMatchObj uintptr 7236 Ftcl_SetNotifier uintptr 7237 Ftcl_GetAllocMutex uintptr 7238 Ftcl_GetChannelNames uintptr 7239 Ftcl_GetChannelNamesEx uintptr 7240 Ftcl_ProcObjCmd uintptr 7241 Ftcl_ConditionFinalize uintptr 7242 Ftcl_MutexFinalize uintptr 7243 Ftcl_CreateThread uintptr 7244 Ftcl_ReadRaw uintptr 7245 Ftcl_WriteRaw uintptr 7246 Ftcl_GetTopChannel uintptr 7247 Ftcl_ChannelBuffered uintptr 7248 Ftcl_ChannelName uintptr 7249 Ftcl_ChannelVersion uintptr 7250 Ftcl_ChannelBlockModeProc uintptr 7251 Ftcl_ChannelCloseProc uintptr 7252 Ftcl_ChannelClose2Proc uintptr 7253 Ftcl_ChannelInputProc uintptr 7254 Ftcl_ChannelOutputProc uintptr 7255 Ftcl_ChannelSeekProc uintptr 7256 Ftcl_ChannelSetOptionProc uintptr 7257 Ftcl_ChannelGetOptionProc uintptr 7258 Ftcl_ChannelWatchProc uintptr 7259 Ftcl_ChannelGetHandleProc uintptr 7260 Ftcl_ChannelFlushProc uintptr 7261 Ftcl_ChannelHandlerProc uintptr 7262 Ftcl_JoinThread uintptr 7263 Ftcl_IsChannelShared uintptr 7264 Ftcl_IsChannelRegistered uintptr 7265 Ftcl_CutChannel uintptr 7266 Ftcl_SpliceChannel uintptr 7267 Ftcl_ClearChannelHandlers uintptr 7268 Ftcl_IsChannelExisting uintptr 7269 Ftcl_UniCharNcasecmp uintptr 7270 Ftcl_UniCharCaseMatch uintptr 7271 Ftcl_FindHashEntry uintptr 7272 Ftcl_CreateHashEntry uintptr 7273 Ftcl_InitCustomHashTable uintptr 7274 Ftcl_InitObjHashTable uintptr 7275 Ftcl_CommandTraceInfo uintptr 7276 Ftcl_TraceCommand uintptr 7277 Ftcl_UntraceCommand uintptr 7278 Ftcl_AttemptAlloc uintptr 7279 Ftcl_AttemptDbCkalloc uintptr 7280 Ftcl_AttemptRealloc uintptr 7281 Ftcl_AttemptDbCkrealloc uintptr 7282 Ftcl_AttemptSetObjLength uintptr 7283 Ftcl_GetChannelThread uintptr 7284 Ftcl_GetUnicodeFromObj uintptr 7285 Ftcl_GetMathFuncInfo uintptr 7286 Ftcl_ListMathFuncs uintptr 7287 Ftcl_SubstObj uintptr 7288 Ftcl_DetachChannel uintptr 7289 Ftcl_IsStandardChannel uintptr 7290 Ftcl_FSCopyFile uintptr 7291 Ftcl_FSCopyDirectory uintptr 7292 Ftcl_FSCreateDirectory uintptr 7293 Ftcl_FSDeleteFile uintptr 7294 Ftcl_FSLoadFile uintptr 7295 Ftcl_FSMatchInDirectory uintptr 7296 Ftcl_FSLink uintptr 7297 Ftcl_FSRemoveDirectory uintptr 7298 Ftcl_FSRenameFile uintptr 7299 Ftcl_FSLstat uintptr 7300 Ftcl_FSUtime uintptr 7301 Ftcl_FSFileAttrsGet uintptr 7302 Ftcl_FSFileAttrsSet uintptr 7303 Ftcl_FSFileAttrStrings uintptr 7304 Ftcl_FSStat uintptr 7305 Ftcl_FSAccess uintptr 7306 Ftcl_FSOpenFileChannel uintptr 7307 Ftcl_FSGetCwd uintptr 7308 Ftcl_FSChdir uintptr 7309 Ftcl_FSConvertToPathType uintptr 7310 Ftcl_FSJoinPath uintptr 7311 Ftcl_FSSplitPath uintptr 7312 Ftcl_FSEqualPaths uintptr 7313 Ftcl_FSGetNormalizedPath uintptr 7314 Ftcl_FSJoinToPath uintptr 7315 Ftcl_FSGetInternalRep uintptr 7316 Ftcl_FSGetTranslatedPath uintptr 7317 Ftcl_FSEvalFile uintptr 7318 Ftcl_FSNewNativePath uintptr 7319 Ftcl_FSGetNativePath uintptr 7320 Ftcl_FSFileSystemInfo uintptr 7321 Ftcl_FSPathSeparator uintptr 7322 Ftcl_FSListVolumes uintptr 7323 Ftcl_FSRegister uintptr 7324 Ftcl_FSUnregister uintptr 7325 Ftcl_FSData uintptr 7326 Ftcl_FSGetTranslatedStringPath uintptr 7327 Ftcl_FSGetFileSystemForPath uintptr 7328 Ftcl_FSGetPathType uintptr 7329 Ftcl_OutputBuffered uintptr 7330 Ftcl_FSMountsChanged uintptr 7331 Ftcl_EvalTokensStandard uintptr 7332 Ftcl_GetTime uintptr 7333 Ftcl_CreateObjTrace uintptr 7334 Ftcl_GetCommandInfoFromToken uintptr 7335 Ftcl_SetCommandInfoFromToken uintptr 7336 Ftcl_DbNewWideIntObj uintptr 7337 Ftcl_GetWideIntFromObj uintptr 7338 Ftcl_NewWideIntObj uintptr 7339 Ftcl_SetWideIntObj uintptr 7340 Ftcl_AllocStatBuf uintptr 7341 Ftcl_Seek uintptr 7342 Ftcl_Tell uintptr 7343 Ftcl_ChannelWideSeekProc uintptr 7344 Ftcl_DictObjPut uintptr 7345 Ftcl_DictObjGet uintptr 7346 Ftcl_DictObjRemove uintptr 7347 Ftcl_DictObjSize uintptr 7348 Ftcl_DictObjFirst uintptr 7349 Ftcl_DictObjNext uintptr 7350 Ftcl_DictObjDone uintptr 7351 Ftcl_DictObjPutKeyList uintptr 7352 Ftcl_DictObjRemoveKeyList uintptr 7353 Ftcl_NewDictObj uintptr 7354 Ftcl_DbNewDictObj uintptr 7355 Ftcl_RegisterConfig uintptr 7356 Ftcl_CreateNamespace uintptr 7357 Ftcl_DeleteNamespace uintptr 7358 Ftcl_AppendExportList uintptr 7359 Ftcl_Export uintptr 7360 Ftcl_Import uintptr 7361 Ftcl_ForgetImport uintptr 7362 Ftcl_GetCurrentNamespace uintptr 7363 Ftcl_GetGlobalNamespace uintptr 7364 Ftcl_FindNamespace uintptr 7365 Ftcl_FindCommand uintptr 7366 Ftcl_GetCommandFromObj uintptr 7367 Ftcl_GetCommandFullName uintptr 7368 Ftcl_FSEvalFileEx uintptr 7369 Ftcl_SetExitProc uintptr 7370 Ftcl_LimitAddHandler uintptr 7371 Ftcl_LimitRemoveHandler uintptr 7372 Ftcl_LimitReady uintptr 7373 Ftcl_LimitCheck uintptr 7374 Ftcl_LimitExceeded uintptr 7375 Ftcl_LimitSetCommands uintptr 7376 Ftcl_LimitSetTime uintptr 7377 Ftcl_LimitSetGranularity uintptr 7378 Ftcl_LimitTypeEnabled uintptr 7379 Ftcl_LimitTypeExceeded uintptr 7380 Ftcl_LimitTypeSet uintptr 7381 Ftcl_LimitTypeReset uintptr 7382 Ftcl_LimitGetCommands uintptr 7383 Ftcl_LimitGetTime uintptr 7384 Ftcl_LimitGetGranularity uintptr 7385 Ftcl_SaveInterpState uintptr 7386 Ftcl_RestoreInterpState uintptr 7387 Ftcl_DiscardInterpState uintptr 7388 Ftcl_SetReturnOptions uintptr 7389 Ftcl_GetReturnOptions uintptr 7390 Ftcl_IsEnsemble uintptr 7391 Ftcl_CreateEnsemble uintptr 7392 Ftcl_FindEnsemble uintptr 7393 Ftcl_SetEnsembleSubcommandList uintptr 7394 Ftcl_SetEnsembleMappingDict uintptr 7395 Ftcl_SetEnsembleUnknownHandler uintptr 7396 Ftcl_SetEnsembleFlags uintptr 7397 Ftcl_GetEnsembleSubcommandList uintptr 7398 Ftcl_GetEnsembleMappingDict uintptr 7399 Ftcl_GetEnsembleUnknownHandler uintptr 7400 Ftcl_GetEnsembleFlags uintptr 7401 Ftcl_GetEnsembleNamespace uintptr 7402 Ftcl_SetTimeProc uintptr 7403 Ftcl_QueryTimeProc uintptr 7404 Ftcl_ChannelThreadActionProc uintptr 7405 Ftcl_NewBignumObj uintptr 7406 Ftcl_DbNewBignumObj uintptr 7407 Ftcl_SetBignumObj uintptr 7408 Ftcl_GetBignumFromObj uintptr 7409 Ftcl_TakeBignumFromObj uintptr 7410 Ftcl_TruncateChannel uintptr 7411 Ftcl_ChannelTruncateProc uintptr 7412 Ftcl_SetChannelErrorInterp uintptr 7413 Ftcl_GetChannelErrorInterp uintptr 7414 Ftcl_SetChannelError uintptr 7415 Ftcl_GetChannelError uintptr 7416 Ftcl_InitBignumFromDouble uintptr 7417 Ftcl_GetNamespaceUnknownHandler uintptr 7418 Ftcl_SetNamespaceUnknownHandler uintptr 7419 Ftcl_GetEncodingFromObj uintptr 7420 Ftcl_GetEncodingSearchPath uintptr 7421 Ftcl_SetEncodingSearchPath uintptr 7422 Ftcl_GetEncodingNameFromEnvironment uintptr 7423 Ftcl_PkgRequireProc uintptr 7424 Ftcl_AppendObjToErrorInfo uintptr 7425 Ftcl_AppendLimitedToObj uintptr 7426 Ftcl_Format uintptr 7427 Ftcl_AppendFormatToObj uintptr 7428 Ftcl_ObjPrintf uintptr 7429 Ftcl_AppendPrintfToObj uintptr 7430 Ftcl_CancelEval uintptr 7431 Ftcl_Canceled uintptr 7432 Ftcl_CreatePipe uintptr 7433 Ftcl_NRCreateCommand uintptr 7434 Ftcl_NREvalObj uintptr 7435 Ftcl_NREvalObjv uintptr 7436 Ftcl_NRCmdSwap uintptr 7437 Ftcl_NRAddCallback uintptr 7438 Ftcl_NRCallObjProc uintptr 7439 Ftcl_GetFSDeviceFromStat uintptr 7440 Ftcl_GetFSInodeFromStat uintptr 7441 Ftcl_GetModeFromStat uintptr 7442 Ftcl_GetLinkCountFromStat uintptr 7443 Ftcl_GetUserIdFromStat uintptr 7444 Ftcl_GetGroupIdFromStat uintptr 7445 Ftcl_GetDeviceTypeFromStat uintptr 7446 Ftcl_GetAccessTimeFromStat uintptr 7447 Ftcl_GetModificationTimeFromStat uintptr 7448 Ftcl_GetChangeTimeFromStat uintptr 7449 Ftcl_GetSizeFromStat uintptr 7450 Ftcl_GetBlocksFromStat uintptr 7451 Ftcl_GetBlockSizeFromStat uintptr 7452 Ftcl_SetEnsembleParameterList uintptr 7453 Ftcl_GetEnsembleParameterList uintptr 7454 Ftcl_ParseArgsObjv uintptr 7455 Ftcl_GetErrorLine uintptr 7456 Ftcl_SetErrorLine uintptr 7457 Ftcl_TransferResult uintptr 7458 Ftcl_InterpActive uintptr 7459 Ftcl_BackgroundException uintptr 7460 Ftcl_ZlibDeflate uintptr 7461 Ftcl_ZlibInflate uintptr 7462 Ftcl_ZlibCRC32 uintptr 7463 Ftcl_ZlibAdler32 uintptr 7464 Ftcl_ZlibStreamInit uintptr 7465 Ftcl_ZlibStreamGetCommandName uintptr 7466 Ftcl_ZlibStreamEof uintptr 7467 Ftcl_ZlibStreamChecksum uintptr 7468 Ftcl_ZlibStreamPut uintptr 7469 Ftcl_ZlibStreamGet uintptr 7470 Ftcl_ZlibStreamClose uintptr 7471 Ftcl_ZlibStreamReset uintptr 7472 Ftcl_SetStartupScript uintptr 7473 Ftcl_GetStartupScript uintptr 7474 Ftcl_CloseEx uintptr 7475 Ftcl_NRExprObj uintptr 7476 Ftcl_NRSubstObj uintptr 7477 Ftcl_LoadFile uintptr 7478 Ftcl_FindSymbol uintptr 7479 Ftcl_FSUnloadFile uintptr 7480 Ftcl_ZlibStreamSetCompressionDictionary uintptr 7481 Freserved631 uintptr 7482 Freserved632 uintptr 7483 Freserved633 uintptr 7484 Freserved634 uintptr 7485 Freserved635 uintptr 7486 Freserved636 uintptr 7487 Freserved637 uintptr 7488 Freserved638 uintptr 7489 Freserved639 uintptr 7490 Freserved640 uintptr 7491 Freserved641 uintptr 7492 Freserved642 uintptr 7493 Freserved643 uintptr 7494 Freserved644 uintptr 7495 Freserved645 uintptr 7496 Freserved646 uintptr 7497 Freserved647 uintptr 7498 Freserved648 uintptr 7499 FtclUnusedStubEntry uintptr 7500 } 7501 7502 type TclStubs = TclStubs1 7503 7504 type TclPlatStubs = TclPlatStubs1 7505 7506 func dbHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 7507 bp := tls.Alloc(88) 7508 defer tls.Free(88) 7509 7510 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 7511 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 7512 return TCL_ERROR 7513 } 7514 7515 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 7516 return TCL_OK 7517 } 7518 7519 func testExpertCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7520 bp := tls.Alloc(212) 7521 defer tls.Free(212) 7522 7523 var pExpert uintptr = clientData 7524 *(*[6]Subcmd)(unsafe.Pointer(bp)) = [6]Subcmd{ 7525 {FzSub: ts + 1947, FnArg: 1, FzMsg: ts + 1951}, 7526 {FzSub: ts + 1957, FzMsg: ts + 584}, 7527 {FzSub: ts + 1965, FzMsg: ts + 584}, 7528 {FzSub: ts + 1971, FnArg: 2, FzMsg: ts + 1978}, 7529 {FzSub: ts + 1991, FzMsg: ts + 584}, 7530 {}, 7531 } 7532 7533 var rc int32 = TCL_OK 7534 *(*uintptr)(unsafe.Pointer(bp + 152)) = uintptr(0) 7535 7536 if objc < 2 { 7537 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 7538 return TCL_ERROR 7539 } 7540 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 7541 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(Subcmd{})), ts+2014, 0, bp+144) 7542 if rc != TCL_OK { 7543 return rc 7544 } 7545 if objc != 2+(*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FnArg { 7546 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FzMsg) 7547 return TCL_ERROR 7548 } 7549 7550 switch *(*int32)(unsafe.Pointer(bp + 144)) { 7551 case 0: 7552 { 7553 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7554 rc = sqlite3_expert_sql(tls, pExpert, zArg, bp+152) 7555 break 7556 7557 } 7558 7559 case 1: 7560 { 7561 rc = sqlite3_expert_analyze(tls, pExpert, bp+152) 7562 break 7563 7564 } 7565 7566 case 2: 7567 { 7568 var n int32 = sqlite3_expert_count(tls, pExpert) 7569 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, n)) 7570 break 7571 7572 } 7573 7574 case 3: 7575 { 7576 *(*[5]uintptr)(unsafe.Pointer(bp + 168)) = [5]uintptr{ 7577 ts + 1947, ts + 2026, ts + 2034, ts + 2039, uintptr(0), 7578 } 7579 7580 var zReport uintptr 7581 7582 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+160) != 0 || 7583 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168, int32(unsafe.Sizeof(uintptr(0))), ts+1971, 0, bp+208) != 0 { 7584 return TCL_ERROR 7585 } 7586 7587 zReport = sqlite3_expert_report(tls, pExpert, *(*int32)(unsafe.Pointer(bp + 160)), 1+*(*int32)(unsafe.Pointer(bp + 208))) 7588 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zReport, -1)) 7589 break 7590 7591 } 7592 7593 default: 7594 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 7595 break 7596 } 7597 7598 if rc != TCL_OK { 7599 if *(*uintptr)(unsafe.Pointer(bp + 152)) != 0 { 7600 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 152)), -1)) 7601 } else { 7602 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 7603 } 7604 } 7605 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 152))) 7606 return rc 7607 } 7608 7609 type Subcmd = struct { 7610 FzSub uintptr 7611 FnArg int32 7612 F__ccgo_pad1 [4]byte 7613 FzMsg uintptr 7614 } 7615 7616 func testExpertDel(tls *libc.TLS, clientData uintptr) { 7617 var pExpert uintptr = clientData 7618 sqlite3_expert_destroy(tls, pExpert) 7619 } 7620 7621 func test_sqlite3_expert_new(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7622 bp := tls.Alloc(56) 7623 defer tls.Free(56) 7624 7625 var zCmd uintptr = uintptr(0) 7626 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7627 var pExpert uintptr 7628 var rc int32 = TCL_OK 7629 7630 if objc != 2 { 7631 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 7632 return TCL_ERROR 7633 } 7634 if dbHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) != 0 { 7635 return TCL_ERROR 7636 } 7637 7638 zCmd = sqlite3.Xsqlite3_mprintf(tls, ts+2053, libc.VaList(bp, libc.PreIncInt32(&iCmd, 1))) 7639 if zCmd == uintptr(0) { 7640 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, ts+2069, uintptr(0))) 7641 return TCL_ERROR 7642 } 7643 7644 pExpert = sqlite3_expert_new(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48) 7645 if pExpert == uintptr(0) { 7646 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 48)), uintptr(0))) 7647 rc = TCL_ERROR 7648 } else { 7649 var p uintptr = pExpert 7650 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 7651 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7652 }{testExpertCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testExpertDel}))) 7653 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zCmd, -1)) 7654 } 7655 7656 sqlite3.Xsqlite3_free(tls, zCmd) 7657 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 7658 return rc 7659 } 7660 7661 var iCmd int32 = 0 7662 7663 func TestExpert_Init(tls *libc.TLS, interp uintptr) int32 { 7664 bp := tls.Alloc(16) 7665 defer tls.Free(16) 7666 7667 *(*[1]struct { 7668 FzCmd uintptr 7669 FxProc uintptr 7670 })(unsafe.Pointer(bp)) = [1]struct { 7671 FzCmd uintptr 7672 FxProc uintptr 7673 }{ 7674 {FzCmd: ts + 2083, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 7675 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7676 }{test_sqlite3_expert_new}))}, 7677 } 7678 var i int32 7679 7680 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]struct { 7681 FzCmd uintptr 7682 FxProc uintptr 7683 }{}))/uint64(unsafe.Sizeof(struct { 7684 FzCmd uintptr 7685 FxProc uintptr 7686 }{})); i++ { 7687 var p uintptr = bp + uintptr(i)*16 7688 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 7689 FzCmd uintptr 7690 FxProc uintptr 7691 })(unsafe.Pointer(p)).FzCmd, (*struct { 7692 FzCmd uintptr 7693 FxProc uintptr 7694 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 7695 } 7696 return TCL_OK 7697 } 7698 7699 func f5tDbPointer(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr) int32 { 7700 bp := tls.Alloc(64) 7701 defer tls.Free(64) 7702 7703 var p uintptr 7704 7705 var z uintptr = tcl.XTcl_GetString(tls, pObj) 7706 if tcl.XTcl_GetCommandInfo(tls, interp, z, bp) != 0 { 7707 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 7708 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 7709 return TCL_OK 7710 } 7711 return TCL_ERROR 7712 } 7713 7714 func f5tResultToErrorCode(tls *libc.TLS, zRes uintptr) int32 { 7715 bp := tls.Alloc(64) 7716 defer tls.Free(64) 7717 7718 *(*[4]ErrorCode)(unsafe.Pointer(bp)) = [4]ErrorCode{ 7719 {Frc: SQLITE_DONE, FzError: ts + 2102}, 7720 {Frc: SQLITE_ERROR, FzError: ts + 2114}, 7721 {FzError: ts + 2127}, 7722 {FzError: ts + 584}, 7723 } 7724 var i int32 7725 7726 for i = 0; uint64(i) < uint64(unsafe.Sizeof([4]ErrorCode{}))/uint64(unsafe.Sizeof(ErrorCode{})); i++ { 7727 if 0 == sqlite3.Xsqlite3_stricmp(tls, zRes, (*ErrorCode)(unsafe.Pointer(bp+uintptr(i)*16)).FzError) { 7728 return (*ErrorCode)(unsafe.Pointer(bp + uintptr(i)*16)).Frc 7729 } 7730 } 7731 7732 return SQLITE_ERROR 7733 } 7734 7735 type ErrorCode = struct { 7736 Frc int32 7737 F__ccgo_pad1 [4]byte 7738 FzError uintptr 7739 } 7740 7741 func f5tDbAndApi(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr, ppApi uintptr) int32 { 7742 bp := tls.Alloc(72) 7743 defer tls.Free(72) 7744 7745 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7746 var rc int32 = f5tDbPointer(tls, interp, pObj, bp+48) 7747 if rc != TCL_OK { 7748 return TCL_ERROR 7749 } else { 7750 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 7751 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 7752 7753 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+2137, -1, bp+56, uintptr(0)) 7754 if rc != SQLITE_OK { 7755 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7756 return TCL_ERROR 7757 } 7758 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), 1, bp+64, ts+2161, uintptr(0)) 7759 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 7760 7761 if sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != SQLITE_OK { 7762 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 7763 return TCL_ERROR 7764 } 7765 7766 *(*uintptr)(unsafe.Pointer(ppDb)) = *(*uintptr)(unsafe.Pointer(bp + 48)) 7767 *(*uintptr)(unsafe.Pointer(ppApi)) = *(*uintptr)(unsafe.Pointer(bp + 64)) 7768 } 7769 7770 return TCL_OK 7771 } 7772 7773 type F5tFunction1 = struct { 7774 Finterp uintptr 7775 FpScript uintptr 7776 } 7777 7778 type F5tFunction = F5tFunction1 7779 7780 type F5tApi1 = struct { 7781 FpApi uintptr 7782 FpFts uintptr 7783 } 7784 7785 type F5tApi = F5tApi1 7786 7787 type F5tAuxData1 = struct{ FpObj uintptr } 7788 7789 type F5tAuxData = F5tAuxData1 7790 7791 func xTokenizeCb(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 7792 var p uintptr = pCtx 7793 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7794 var rc int32 7795 7796 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7797 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 7798 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iStart)) 7799 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iEnd)) 7800 7801 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7802 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7803 var _objPtr uintptr = pEval 7804 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7805 tcl.XTclFreeObj(tls, _objPtr) 7806 } 7807 } 7808 if rc == TCL_OK { 7809 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7810 } 7811 7812 return rc 7813 } 7814 7815 func xQueryPhraseCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr) int32 { 7816 bp := tls.Alloc(88) 7817 defer tls.Free(88) 7818 7819 var p uintptr = pCtx 7820 var pEval uintptr 7821 var rc int32 7822 7823 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 7824 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 7825 libc.Xsprintf(tls, bp+8, ts+2174, libc.VaList(bp, libc.PostIncInt64(&iCmd1, 1))) 7826 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 7827 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7828 }{xF5tApi})), bp+72, uintptr(0)) 7829 7830 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 7831 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 7832 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 7833 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 7834 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7835 var _objPtr uintptr = pEval 7836 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7837 tcl.XTclFreeObj(tls, _objPtr) 7838 } 7839 } 7840 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 7841 7842 if rc == TCL_OK { 7843 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 7844 } 7845 7846 return rc 7847 } 7848 7849 var iCmd1 sqlite3_int64 = int64(0) 7850 7851 func xSetAuxdataDestructor(tls *libc.TLS, p uintptr) { 7852 var pData uintptr = p 7853 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 7854 var _objPtr uintptr = (*F5tAuxData)(unsafe.Pointer(pData)).FpObj 7855 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 7856 tcl.XTclFreeObj(tls, _objPtr) 7857 } 7858 } 7859 sqlite3.Xsqlite3_free(tls, pData) 7860 } 7861 7862 func xF5tApi(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7863 bp := tls.Alloc(684) 7864 defer tls.Free(684) 7865 7866 *(*[19]Sub)(unsafe.Pointer(bp + 32)) = [19]Sub{ 7867 {FzName: ts + 2185, FzMsg: ts + 584}, 7868 {FzName: ts + 2198, FzMsg: ts + 584}, 7869 {FzName: ts + 2208, FnArg: 1, FzMsg: ts + 2225}, 7870 {FzName: ts + 2229, FnArg: 2, FzMsg: ts + 2239}, 7871 {FzName: ts + 2251, FzMsg: ts + 584}, 7872 {FzName: ts + 2264, FnArg: 1, FzMsg: ts + 2276}, 7873 {FzName: ts + 2283, FzMsg: ts + 584}, 7874 {FzName: ts + 2294, FnArg: 1, FzMsg: ts + 2300}, 7875 {FzName: ts + 2304, FzMsg: ts + 584}, 7876 {FzName: ts + 2311, FnArg: 1, FzMsg: ts + 2225}, 7877 {FzName: ts + 2323, FnArg: 1, FzMsg: ts + 2225}, 7878 {FzName: ts + 2335, FnArg: 2, FzMsg: ts + 2348}, 7879 {FzName: ts + 2362, FnArg: 1, FzMsg: ts + 2374}, 7880 {FzName: ts + 2380, FnArg: 1, FzMsg: ts + 2392}, 7881 {FzName: ts + 2398, FnArg: 1, FzMsg: ts + 2413}, 7882 {FzName: ts + 2421, FnArg: 1, FzMsg: ts + 2392}, 7883 {FzName: ts + 2436, FnArg: 4, FzMsg: ts + 2451}, 7884 {FzName: ts + 2480, FnArg: 3, FzMsg: ts + 2501}, 7885 {}, 7886 } 7887 var rc int32 7888 *(*int32)(unsafe.Pointer(bp + 488)) = 0 7889 var p uintptr = clientData 7890 7891 if objc < 2 { 7892 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 7893 return TCL_ERROR 7894 } 7895 7896 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 7897 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32, int32(unsafe.Sizeof(Sub{})), ts+2523, 0, bp+488) 7898 if rc != TCL_OK { 7899 return rc 7900 } 7901 if (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FnArg != objc-2 { 7902 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FzMsg) 7903 return TCL_ERROR 7904 } 7905 7906 switch *(*int32)(unsafe.Pointer(bp + 488)) { 7907 case 0: 7908 { 7909 var nCol int32 7910 nCol = (*struct { 7911 f func(*libc.TLS, uintptr) int32 7912 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7913 if rc == SQLITE_OK { 7914 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol)) 7915 } 7916 break 7917 7918 } 7919 case 1: 7920 { 7921 rc = (*struct { 7922 f func(*libc.TLS, uintptr, uintptr) int32 7923 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+496) 7924 if rc == SQLITE_OK { 7925 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 496)))) 7926 } 7927 break 7928 7929 } 7930 case 2: 7931 { 7932 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+504) != 0 { 7933 return TCL_ERROR 7934 } 7935 rc = (*struct { 7936 f func(*libc.TLS, uintptr, int32, uintptr) int32 7937 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnTotalSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 504)), bp+512) 7938 if rc == SQLITE_OK { 7939 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 512)))) 7940 } 7941 break 7942 7943 } 7944 case 3: 7945 { 7946 var zText uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+520) 7947 7948 (*F5tFunction)(unsafe.Pointer(bp + 528)).Finterp = interp 7949 (*F5tFunction)(unsafe.Pointer(bp + 528)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 7950 rc = (*struct { 7951 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr) int32 7952 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxTokenize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, zText, *(*int32)(unsafe.Pointer(bp + 520)), bp+528, *(*uintptr)(unsafe.Pointer(&struct { 7953 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 7954 }{xTokenizeCb}))) 7955 if rc == SQLITE_OK { 7956 tcl.XTcl_ResetResult(tls, interp) 7957 } 7958 return rc 7959 7960 } 7961 case 4: 7962 { 7963 var nPhrase int32 7964 nPhrase = (*struct { 7965 f func(*libc.TLS, uintptr) int32 7966 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 7967 if rc == SQLITE_OK { 7968 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPhrase)) 7969 } 7970 break 7971 7972 } 7973 case 5: 7974 { 7975 var sz int32 7976 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+544) != 0 { 7977 return TCL_ERROR 7978 } 7979 sz = (*struct { 7980 f func(*libc.TLS, uintptr, int32) int32 7981 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 544))) 7982 if rc == SQLITE_OK { 7983 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sz)) 7984 } 7985 break 7986 7987 } 7988 case 6: 7989 { 7990 rc = (*struct { 7991 f func(*libc.TLS, uintptr, uintptr) int32 7992 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInstCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+548) 7993 if rc == SQLITE_OK { 7994 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 548)))) 7995 } 7996 break 7997 7998 } 7999 case 7: 8000 { 8001 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+552) != 0 { 8002 return TCL_ERROR 8003 } 8004 rc = (*struct { 8005 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8006 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInst})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 552)), bp+556, bp+560, bp+564) 8007 if rc == SQLITE_OK { 8008 var pList uintptr = tcl.XTcl_NewObj(tls) 8009 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 556)))) 8010 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 560)))) 8011 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 564)))) 8012 tcl.XTcl_SetObjResult(tls, interp, pList) 8013 } 8014 break 8015 8016 } 8017 case 8: 8018 { 8019 var iRowid sqlite3_int64 = (*struct { 8020 f func(*libc.TLS, uintptr) sqlite3_int64 8021 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowid})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 8022 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iRowid)) 8023 break 8024 8025 } 8026 case 9: 8027 { 8028 *(*uintptr)(unsafe.Pointer(bp + 576)) = uintptr(0) 8029 *(*int32)(unsafe.Pointer(bp + 584)) = 0 8030 8031 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+568) != 0 { 8032 return TCL_ERROR 8033 } 8034 rc = (*struct { 8035 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8036 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnText})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 568)), bp+576, bp+584) 8037 if rc == SQLITE_OK { 8038 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 576)), *(*int32)(unsafe.Pointer(bp + 584)))) 8039 } 8040 break 8041 8042 } 8043 case 10: 8044 { 8045 *(*int32)(unsafe.Pointer(bp + 592)) = 0 8046 8047 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+588) != 0 { 8048 return TCL_ERROR 8049 } 8050 rc = (*struct { 8051 f func(*libc.TLS, uintptr, int32, uintptr) int32 8052 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 588)), bp+592) 8053 if rc == SQLITE_OK { 8054 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 592)))) 8055 } 8056 break 8057 8058 } 8059 case 11: 8060 { 8061 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+596) != 0 { 8062 return TCL_ERROR 8063 } 8064 (*F5tFunction)(unsafe.Pointer(bp + 600)).Finterp = interp 8065 (*F5tFunction)(unsafe.Pointer(bp + 600)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8066 rc = (*struct { 8067 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8068 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxQueryPhrase})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 596)), bp+600, *(*uintptr)(unsafe.Pointer(&struct { 8069 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8070 }{xQueryPhraseCb}))) 8071 if rc == SQLITE_OK { 8072 tcl.XTcl_ResetResult(tls, interp) 8073 } 8074 break 8075 8076 } 8077 case 12: 8078 { 8079 var pData uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(F5tAuxData{}))) 8080 if pData == uintptr(0) { 8081 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, 0)) 8082 return TCL_ERROR 8083 } 8084 (*F5tAuxData)(unsafe.Pointer(pData)).FpObj = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 8085 (*Tcl_Obj)(unsafe.Pointer((*F5tAuxData)(unsafe.Pointer(pData)).FpObj)).FrefCount++ 8086 rc = (*struct { 8087 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8088 })(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}))) 8089 break 8090 8091 } 8092 case 13: 8093 { 8094 var pData uintptr 8095 8096 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+616) != 0 { 8097 return TCL_ERROR 8098 } 8099 pData = (*struct { 8100 f func(*libc.TLS, uintptr, int32) uintptr 8101 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxGetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 616))) 8102 if pData == uintptr(0) { 8103 tcl.XTcl_ResetResult(tls, interp) 8104 } else { 8105 tcl.XTcl_SetObjResult(tls, interp, (*F5tAuxData)(unsafe.Pointer(pData)).FpObj) 8106 if *(*int32)(unsafe.Pointer(bp + 616)) != 0 { 8107 xSetAuxdataDestructor(tls, pData) 8108 } 8109 } 8110 break 8111 8112 } 8113 8114 case 14: 8115 { 8116 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+620) != 0 { 8117 return TCL_ERROR 8118 } 8119 rc = (*struct { 8120 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8121 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxSetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, uintptr(0)+uintptr(*(*int32)(unsafe.Pointer(bp + 620))), uintptr(0)) 8122 break 8123 8124 } 8125 case 15: 8126 { 8127 var iVal int32 8128 8129 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+624) != 0 { 8130 return TCL_ERROR 8131 } 8132 iVal = int32((int64((*struct { 8133 f func(*libc.TLS, uintptr, int32) uintptr 8134 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxGetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 624)))) - int64(uintptr(0))) / 1) 8135 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iVal)) 8136 break 8137 8138 } 8139 8140 case 16: 8141 { 8142 var zColvar uintptr 8143 var zOffvar uintptr 8144 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 5*8)) 8145 8146 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+628) != 0 { 8147 return TCL_ERROR 8148 } 8149 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 8150 zOffvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 8151 8152 rc = (*struct { 8153 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8154 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseFirst})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 628)), bp+632, bp+648, bp+652) 8155 if rc != SQLITE_OK { 8156 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 8157 return TCL_ERROR 8158 } 8159 for ; *(*int32)(unsafe.Pointer(bp + 648)) >= 0; (*struct { 8160 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8161 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNext})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+632, bp+648, bp+652) { 8162 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 648))), 0) 8163 tcl.XTcl_SetVar2Ex(tls, interp, zOffvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 652))), 0) 8164 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 8165 if rc == TCL_CONTINUE { 8166 rc = TCL_OK 8167 } 8168 if rc != TCL_OK { 8169 if rc == TCL_BREAK { 8170 rc = TCL_OK 8171 } 8172 break 8173 } 8174 } 8175 8176 break 8177 8178 } 8179 8180 case 17: 8181 { 8182 var zColvar uintptr 8183 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 8184 8185 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+656) != 0 { 8186 return TCL_ERROR 8187 } 8188 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 8189 8190 rc = (*struct { 8191 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8192 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseFirstColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 656)), bp+664, bp+680) 8193 if rc != SQLITE_OK { 8194 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8195 return TCL_ERROR 8196 } 8197 for ; *(*int32)(unsafe.Pointer(bp + 680)) >= 0; (*struct { 8198 f func(*libc.TLS, uintptr, uintptr, uintptr) 8199 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNextColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+664, bp+680) { 8200 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 680))), 0) 8201 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 8202 if rc == TCL_CONTINUE { 8203 rc = TCL_OK 8204 } 8205 if rc != TCL_OK { 8206 if rc == TCL_BREAK { 8207 rc = TCL_OK 8208 } 8209 break 8210 } 8211 } 8212 8213 break 8214 8215 } 8216 8217 default: 8218 break 8219 } 8220 8221 if rc != SQLITE_OK { 8222 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8223 return TCL_ERROR 8224 } 8225 8226 return TCL_OK 8227 } 8228 8229 type Sub = struct { 8230 FzName uintptr 8231 FnArg int32 8232 F__ccgo_pad1 [4]byte 8233 FzMsg uintptr 8234 } 8235 8236 func xF5tFunction(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 8237 bp := tls.Alloc(112) 8238 defer tls.Free(112) 8239 8240 var p uintptr = (*struct { 8241 f func(*libc.TLS, uintptr) uintptr 8242 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxUserData})).f(tls, pFts) 8243 var pEval uintptr 8244 var i int32 8245 var rc int32 8246 8247 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 8248 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 8249 8250 libc.Xsprintf(tls, bp+8, ts+2535, libc.VaList(bp, libc.PostIncInt64(&iCmd2, 1))) 8251 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 8252 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8253 }{xF5tApi})), bp+72, uintptr(0)) 8254 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8255 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8256 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 8257 8258 for i = 0; i < nVal; i++ { 8259 var pObj uintptr = uintptr(0) 8260 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))) { 8261 case SQLITE_TEXT: 8262 pObj = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), -1) 8263 break 8264 case SQLITE_BLOB: 8265 pObj = tcl.XTcl_NewByteArrayObj(tls, 8266 sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8267 break 8268 case SQLITE_INTEGER: 8269 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8270 break 8271 case SQLITE_FLOAT: 8272 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8273 break 8274 default: 8275 pObj = tcl.XTcl_NewObj(tls) 8276 break 8277 } 8278 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, pObj) 8279 } 8280 8281 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, TCL_GLOBAL_ONLY) 8282 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8283 var _objPtr uintptr = pEval 8284 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8285 tcl.XTclFreeObj(tls, _objPtr) 8286 } 8287 } 8288 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 8289 8290 if rc != TCL_OK { 8291 sqlite3.Xsqlite3_result_error(tls, pCtx, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp), -1) 8292 } else { 8293 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp) 8294 8295 var zType uintptr = func() uintptr { 8296 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 8297 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 8298 } 8299 return ts + 584 8300 }() 8301 var c uint8 = *(*uint8)(unsafe.Pointer(zType)) 8302 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 8303 var data uintptr = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+88) 8304 sqlite3.Xsqlite3_result_blob(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 8305 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 8306 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pVar, bp+88) 8307 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(bp + 88))) 8308 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 8309 tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+96) 8310 sqlite3.Xsqlite3_result_double(tls, pCtx, *(*float64)(unsafe.Pointer(bp + 96))) 8311 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 8312 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+104) 8313 sqlite3.Xsqlite3_result_int64(tls, pCtx, *(*Tcl_WideInt)(unsafe.Pointer(bp + 104))) 8314 } else { 8315 var data uintptr = tcl.XTcl_GetStringFromObj(tls, pVar, bp+88) 8316 sqlite3.Xsqlite3_result_text(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 8317 } 8318 } 8319 } 8320 8321 var iCmd2 sqlite3_int64 = int64(0) 8322 8323 func xF5tDestroy(tls *libc.TLS, pCtx uintptr) { 8324 var p uintptr = pCtx 8325 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8326 var _objPtr uintptr = (*F5tFunction)(unsafe.Pointer(p)).FpScript 8327 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8328 tcl.XTclFreeObj(tls, _objPtr) 8329 } 8330 } 8331 tcl.XTcl_Free(tls, p) 8332 } 8333 8334 func f5tCreateFunction(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8335 bp := tls.Alloc(40) 8336 defer tls.Free(40) 8337 8338 var zName uintptr 8339 var pScript uintptr 8340 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 8341 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 8342 var pCtx uintptr = uintptr(0) 8343 var rc int32 8344 8345 if objc != 4 { 8346 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8347 return TCL_ERROR 8348 } 8349 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, bp+32) != 0 { 8350 return TCL_ERROR 8351 } 8352 8353 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 8354 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8355 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tFunction{}))) 8356 (*F5tFunction)(unsafe.Pointer(pCtx)).Finterp = interp 8357 (*F5tFunction)(unsafe.Pointer(pCtx)).FpScript = pScript 8358 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8359 8360 rc = (*struct { 8361 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 8362 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FxCreateFunction})).f(tls, 8363 *(*uintptr)(unsafe.Pointer(bp + 32)), zName, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 8364 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 8365 }{xF5tFunction})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{xF5tDestroy}))) 8366 if rc != SQLITE_OK { 8367 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 24))), 0)) 8368 return TCL_ERROR 8369 } 8370 8371 return TCL_OK 8372 } 8373 8374 type F5tTokenizeCtx1 = struct { 8375 FpRet uintptr 8376 FbSubst int32 8377 F__ccgo_pad1 [4]byte 8378 FzInput uintptr 8379 } 8380 8381 type F5tTokenizeCtx = F5tTokenizeCtx1 8382 8383 func xTokenizeCb2(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 8384 var p uintptr = pCtx 8385 if (*F5tTokenizeCtx)(unsafe.Pointer(p)).FbSubst != 0 { 8386 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8387 tcl.XTcl_ListObjAppendElement(tls, 8388 uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, (*F5tTokenizeCtx)(unsafe.Pointer(p)).FzInput+uintptr(iStart), iEnd-iStart)) 8389 } else { 8390 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8391 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iStart)) 8392 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iEnd)) 8393 } 8394 return SQLITE_OK 8395 } 8396 8397 func f5tTokenize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8398 bp := tls.Alloc(200) 8399 defer tls.Free(200) 8400 8401 var zText uintptr 8402 8403 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 8404 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 8405 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 8406 8407 var pRet uintptr = uintptr(0) 8408 8409 var rc int32 8410 8411 if objc != 4 && objc != 5 { 8412 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2596) 8413 return TCL_ERROR 8414 } 8415 if objc == 5 { 8416 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 8417 if libc.Xstrcmp(tls, ts+2618, zOpt) != 0 { 8418 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2625, zOpt, 0)) 8419 return TCL_ERROR 8420 } 8421 } 8422 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+96, bp+104) != 0 { 8423 return TCL_ERROR 8424 } 8425 if tcl.XTcl_SplitList(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))), bp+112, bp+120) != 0 { 8426 return TCL_ERROR 8427 } 8428 if *(*int32)(unsafe.Pointer(bp + 112)) == 0 { 8429 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2647, 0)) 8430 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8431 return TCL_ERROR 8432 } 8433 zText = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+128) 8434 8435 rc = (*struct { 8436 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 8437 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104)))).FxFindTokenizer})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 104)), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 120)))), bp+136, bp+144) 8438 if rc != SQLITE_OK { 8439 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2647, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 120)))), 0)) 8440 return TCL_ERROR 8441 } 8442 8443 rc = (*struct { 8444 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8445 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 136)), *(*uintptr)(unsafe.Pointer(bp + 120))+1*8, *(*int32)(unsafe.Pointer(bp + 112))-1, bp+168) 8446 if rc != SQLITE_OK { 8447 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+2667, 0)) 8448 return TCL_ERROR 8449 } 8450 8451 pRet = tcl.XTcl_NewObj(tls) 8452 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 8453 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FbSubst = libc.Bool32(objc == 5) 8454 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FpRet = pRet 8455 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FzInput = zText 8456 rc = (*struct { 8457 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8458 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxTokenize})).f(tls, 8459 *(*uintptr)(unsafe.Pointer(bp + 168)), bp+176, FTS5_TOKENIZE_DOCUMENT, zText, *(*int32)(unsafe.Pointer(bp + 128)), *(*uintptr)(unsafe.Pointer(&struct { 8460 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8461 }{xTokenizeCb2}))) 8462 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxDelete})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 8463 if rc != SQLITE_OK { 8464 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+80, ts+2696, 0)) 8465 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8466 var _objPtr uintptr = pRet 8467 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8468 tcl.XTclFreeObj(tls, _objPtr) 8469 } 8470 } 8471 return TCL_ERROR 8472 } 8473 8474 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8475 tcl.XTcl_SetObjResult(tls, interp, pRet) 8476 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 8477 var _objPtr uintptr = pRet 8478 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8479 tcl.XTclFreeObj(tls, _objPtr) 8480 } 8481 } 8482 return TCL_OK 8483 } 8484 8485 type F5tTokenizerContext1 = struct { 8486 FpCtx uintptr 8487 FxToken uintptr 8488 } 8489 8490 type F5tTokenizerContext = F5tTokenizerContext1 8491 type F5tTokenizerModule1 = struct { 8492 Finterp uintptr 8493 FpScript uintptr 8494 FpContext uintptr 8495 } 8496 8497 type F5tTokenizerModule = F5tTokenizerModule1 8498 type F5tTokenizerInstance1 = struct { 8499 Finterp uintptr 8500 FpScript uintptr 8501 FpContext uintptr 8502 } 8503 8504 type F5tTokenizerInstance = F5tTokenizerInstance1 8505 8506 func f5tTokenizerCreate(tls *libc.TLS, pCtx uintptr, azArg uintptr, nArg int32, ppOut uintptr) int32 { 8507 var pMod uintptr = pCtx 8508 var pEval uintptr 8509 var rc int32 = TCL_OK 8510 var i int32 8511 8512 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript) 8513 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8514 for i = 0; rc == TCL_OK && i < nArg; i++ { 8515 var pObj uintptr = tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)), -1) 8516 rc = tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, pObj) 8517 } 8518 8519 if rc == TCL_OK { 8520 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, TCL_GLOBAL_ONLY) 8521 } 8522 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8523 var _objPtr uintptr = pEval 8524 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8525 tcl.XTclFreeObj(tls, _objPtr) 8526 } 8527 } 8528 8529 if rc == TCL_OK { 8530 var pInst uintptr 8531 pInst = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerInstance{}))) 8532 libc.Xmemset(tls, pInst, 0, uint64(unsafe.Sizeof(F5tTokenizerInstance{}))) 8533 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp 8534 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript = tcl.XTcl_GetObjResult(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp) 8535 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext 8536 (*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript)).FrefCount++ 8537 *(*uintptr)(unsafe.Pointer(ppOut)) = pInst 8538 } 8539 8540 return rc 8541 } 8542 8543 func f5tTokenizerDelete(tls *libc.TLS, p uintptr) { 8544 var pInst uintptr = p 8545 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8546 var _objPtr uintptr = (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript 8547 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8548 tcl.XTclFreeObj(tls, _objPtr) 8549 } 8550 } 8551 tcl.XTcl_Free(tls, pInst) 8552 } 8553 8554 func f5tTokenizerTokenize(tls *libc.TLS, p uintptr, pCtx uintptr, flags int32, pText uintptr, nText int32, xToken uintptr) int32 { 8555 var pInst uintptr = p 8556 var pOldCtx uintptr 8557 var xOldToken uintptr 8558 var pEval uintptr 8559 var rc int32 8560 var zFlags uintptr 8561 8562 pOldCtx = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx 8563 xOldToken = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken 8564 8565 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pCtx 8566 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xToken 8567 8568 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript) 8569 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8570 switch flags { 8571 case FTS5_TOKENIZE_DOCUMENT: 8572 zFlags = ts + 2727 8573 break 8574 case FTS5_TOKENIZE_AUX: 8575 zFlags = ts + 2736 8576 break 8577 case FTS5_TOKENIZE_QUERY: 8578 zFlags = ts + 2740 8579 break 8580 case FTS5_TOKENIZE_PREFIX | FTS5_TOKENIZE_QUERY: 8581 zFlags = ts + 2746 8582 break 8583 default: 8584 zFlags = ts + 2758 8585 break 8586 } 8587 8588 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zFlags, -1)) 8589 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, pText, nText)) 8590 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, TCL_GLOBAL_ONLY) 8591 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8592 var _objPtr uintptr = pEval 8593 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8594 tcl.XTclFreeObj(tls, _objPtr) 8595 } 8596 } 8597 8598 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pOldCtx 8599 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xOldToken 8600 return rc 8601 } 8602 8603 func f5tTokenizerReturn(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8604 bp := tls.Alloc(32) 8605 defer tls.Free(32) 8606 8607 var p uintptr 8608 8609 var tflags int32 8610 var zToken uintptr 8611 var rc int32 8612 8613 var zArg uintptr 8614 p = clientData 8615 tflags = 0 8616 8617 if !(objc == 5) { 8618 goto __1 8619 } 8620 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 8621 if !(*(*int32)(unsafe.Pointer(bp + 16)) <= 10 && *(*int32)(unsafe.Pointer(bp + 16)) >= 2 && libc.Xmemcmp(tls, ts+2766, zArg, uint64(*(*int32)(unsafe.Pointer(bp + 16)))) == 0) { 8622 goto __3 8623 } 8624 tflags = tflags | FTS5_TOKEN_COLOCATED 8625 goto __4 8626 __3: 8627 goto usage 8628 __4: 8629 ; 8630 goto __2 8631 __1: 8632 if !(objc != 4) { 8633 goto __5 8634 } 8635 goto usage 8636 __5: 8637 ; 8638 __2: 8639 ; 8640 zToken = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+20) 8641 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+24) != 0 || 8642 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+28) != 0) { 8643 goto __6 8644 } 8645 return TCL_ERROR 8646 __6: 8647 ; 8648 if !((*F5tTokenizerContext)(unsafe.Pointer(p)).FxToken == uintptr(0)) { 8649 goto __7 8650 } 8651 tcl.XTcl_AppendResult(tls, interp, 8652 libc.VaList(bp, ts+2777, 0)) 8653 return TCL_ERROR 8654 __7: 8655 ; 8656 rc = (*struct { 8657 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8658 })(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))) 8659 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8660 if rc == SQLITE_OK { 8661 return TCL_OK 8662 } 8663 return TCL_ERROR 8664 8665 usage: 8666 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2835) 8667 return TCL_ERROR 8668 } 8669 8670 func f5tDelTokenizer(tls *libc.TLS, pCtx uintptr) { 8671 var pMod uintptr = pCtx 8672 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8673 var _objPtr uintptr = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript 8674 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8675 tcl.XTclFreeObj(tls, _objPtr) 8676 } 8677 } 8678 tcl.XTcl_Free(tls, pMod) 8679 } 8680 8681 func f5tCreateTokenizer(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 8682 bp := tls.Alloc(56) 8683 defer tls.Free(56) 8684 8685 var pContext uintptr = clientData 8686 8687 var zName uintptr 8688 var pScript uintptr 8689 8690 var pMod uintptr 8691 var rc int32 8692 8693 if objc != 4 { 8694 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8695 return TCL_ERROR 8696 } 8697 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, bp+24) != 0 { 8698 return TCL_ERROR 8699 } 8700 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 8701 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8702 8703 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxCreate = *(*uintptr)(unsafe.Pointer(&struct { 8704 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8705 }{f5tTokenizerCreate})) 8706 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxTokenize = *(*uintptr)(unsafe.Pointer(&struct { 8707 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8708 }{f5tTokenizerTokenize})) 8709 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxDelete = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tTokenizerDelete})) 8710 8711 pMod = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerModule{}))) 8712 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp = interp 8713 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript = pScript 8714 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext = pContext 8715 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8716 rc = (*struct { 8717 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr, uintptr) int32 8718 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)))).FxCreateTokenizer})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), zName, pMod, bp+32, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tDelTokenizer}))) 8719 if rc != SQLITE_OK { 8720 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2863, 0)) 8721 return TCL_ERROR 8722 } 8723 8724 return TCL_OK 8725 } 8726 8727 func xF5tFree(tls *libc.TLS, clientData ClientData) { 8728 tcl.XTcl_Free(tls, clientData) 8729 } 8730 8731 func f5tMayBeCorrupt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8732 return TCL_OK 8733 } 8734 8735 func f5t_fts5HashKey(tls *libc.TLS, nSlot int32, p uintptr, n int32) uint32 { 8736 var i int32 8737 var h uint32 = uint32(13) 8738 for i = n - 1; i >= 0; i-- { 8739 h = h<<3 ^ h ^ uint32(*(*uint8)(unsafe.Pointer(p + uintptr(i)))) 8740 } 8741 return h % uint32(nSlot) 8742 } 8743 8744 func f5tTokenHash(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8745 bp := tls.Alloc(8) 8746 defer tls.Free(8) 8747 8748 var z uintptr 8749 8750 var iVal uint32 8751 8752 if objc != 3 { 8753 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2900) 8754 return TCL_ERROR 8755 } 8756 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 8757 return TCL_ERROR 8758 } 8759 z = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 8760 8761 iVal = f5t_fts5HashKey(tls, *(*int32)(unsafe.Pointer(bp)), z, *(*int32)(unsafe.Pointer(bp + 4))) 8762 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(iVal))) 8763 return TCL_OK 8764 } 8765 8766 func f5tRegisterMatchinfo(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8767 bp := tls.Alloc(8) 8768 defer tls.Free(8) 8769 8770 var rc int32 8771 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8772 8773 if objc != 2 { 8774 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8775 return TCL_ERROR 8776 } 8777 if f5tDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 8778 return TCL_ERROR 8779 } 8780 8781 rc = sqlite3Fts5TestRegisterMatchinfo(tls, *(*uintptr)(unsafe.Pointer(bp))) 8782 if rc != SQLITE_OK { 8783 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8784 return TCL_ERROR 8785 } 8786 return TCL_OK 8787 } 8788 8789 func f5tRegisterTok(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8790 bp := tls.Alloc(16) 8791 defer tls.Free(16) 8792 8793 var rc int32 8794 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8795 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 8796 8797 if objc != 2 { 8798 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 8799 return TCL_ERROR 8800 } 8801 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 8802 return TCL_ERROR 8803 } 8804 8805 rc = sqlite3Fts5TestRegisterTok(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 8806 if rc != SQLITE_OK { 8807 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8808 return TCL_ERROR 8809 } 8810 return TCL_OK 8811 } 8812 8813 func Fts5tcl_Init(tls *libc.TLS, interp uintptr) int32 { 8814 var i int32 8815 var pContext uintptr 8816 8817 pContext = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerContext{}))) 8818 libc.Xmemset(tls, pContext, 0, uint64(unsafe.Sizeof(F5tTokenizerContext{}))) 8819 8820 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd))/uint64(unsafe.Sizeof(struct { 8821 FzName uintptr 8822 FxProc uintptr 8823 FbTokenizeCtx int32 8824 F__ccgo_pad1 [4]byte 8825 }{})); i++ { 8826 var p uintptr = uintptr(unsafe.Pointer(&aCmd)) + uintptr(i)*24 8827 var pCtx uintptr = uintptr(0) 8828 if (*struct { 8829 FzName uintptr 8830 FxProc uintptr 8831 FbTokenizeCtx int32 8832 F__ccgo_pad1 [4]byte 8833 })(unsafe.Pointer(p)).FbTokenizeCtx != 0 { 8834 pCtx = pContext 8835 } 8836 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 8837 FzName uintptr 8838 FxProc uintptr 8839 FbTokenizeCtx int32 8840 F__ccgo_pad1 [4]byte 8841 })(unsafe.Pointer(p)).FzName, (*struct { 8842 FzName uintptr 8843 FxProc uintptr 8844 FbTokenizeCtx int32 8845 F__ccgo_pad1 [4]byte 8846 })(unsafe.Pointer(p)).FxProc, pCtx, func() uintptr { 8847 if i != 0 { 8848 return uintptr(0) 8849 } 8850 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{xF5tFree})) 8851 }()) 8852 } 8853 8854 return TCL_OK 8855 } 8856 8857 var aCmd = [8]struct { 8858 FzName uintptr 8859 FxProc uintptr 8860 FbTokenizeCtx int32 8861 F__ccgo_pad1 [4]byte 8862 }{ 8863 {FzName: ts + 2912, FxProc: 0, FbTokenizeCtx: 1}, 8864 {FzName: ts + 2942, FxProc: 0, FbTokenizeCtx: 1}, 8865 {FzName: ts + 2961, FxProc: 0}, 8866 {FzName: ts + 2983, FxProc: 0}, 8867 {FzName: ts + 3012, FxProc: 0}, 8868 {FzName: ts + 3040, FxProc: 0}, 8869 {FzName: ts + 3064, FxProc: 0}, 8870 {FzName: ts + 3096, FxProc: 0}, 8871 } 8872 8873 type Fts5MatchinfoCtx1 = struct { 8874 FnCol int32 8875 FnPhrase int32 8876 FzArg uintptr 8877 FnRet int32 8878 F__ccgo_pad1 [4]byte 8879 FaRet uintptr 8880 } 8881 8882 type Fts5MatchinfoCtx = Fts5MatchinfoCtx1 8883 8884 type u32 = uint32 8885 8886 func fts5_api_from_db(tls *libc.TLS, db uintptr, ppApi uintptr) int32 { 8887 bp := tls.Alloc(8) 8888 defer tls.Free(8) 8889 8890 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 8891 var rc int32 8892 8893 *(*uintptr)(unsafe.Pointer(ppApi)) = uintptr(0) 8894 rc = sqlite3.Xsqlite3_prepare(tls, db, ts+2137, -1, bp, uintptr(0)) 8895 if rc == SQLITE_OK { 8896 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, ppApi, ts+2161, uintptr(0)) 8897 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) 8898 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 8899 } 8900 8901 return rc 8902 } 8903 8904 func fts5MatchinfoFlagsize(tls *libc.TLS, nCol int32, nPhrase int32, f uint8) int32 { 8905 var ret int32 = -1 8906 switch int32(f) { 8907 case 'p': 8908 ret = 1 8909 break 8910 case 'c': 8911 ret = 1 8912 break 8913 case 'x': 8914 ret = 3 * nCol * nPhrase 8915 break 8916 case 'y': 8917 ret = nCol * nPhrase 8918 break 8919 case 'b': 8920 ret = (nCol + 31) / 32 * nPhrase 8921 break 8922 case 'n': 8923 ret = 1 8924 break 8925 case 'a': 8926 ret = nCol 8927 break 8928 case 'l': 8929 ret = nCol 8930 break 8931 case 's': 8932 ret = nCol 8933 break 8934 } 8935 return ret 8936 } 8937 8938 func fts5MatchinfoIter(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, x uintptr) int32 { 8939 var i int32 8940 var n int32 = 0 8941 var rc int32 = SQLITE_OK 8942 var f uint8 8943 for i = 0; libc.AssignUint8(&f, *(*uint8)(unsafe.Pointer((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg + uintptr(i)))) != 0; i++ { 8944 rc = (*struct { 8945 f func(*libc.TLS, uintptr, uintptr, uintptr, uint8, uintptr) int32 8946 })(unsafe.Pointer(&struct{ uintptr }{x})).f(tls, pApi, pFts, p, f, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet+uintptr(n)*4) 8947 if rc != SQLITE_OK { 8948 break 8949 } 8950 n = n + fts5MatchinfoFlagsize(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase, f) 8951 } 8952 return rc 8953 } 8954 8955 func fts5MatchinfoXCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pUserData uintptr) int32 { 8956 bp := tls.Alloc(24) 8957 defer tls.Free(24) 8958 8959 var aOut uintptr = pUserData 8960 var iPrev int32 = -1 8961 8962 for (*struct { 8963 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8964 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirst})).f(tls, pFts, 0, bp, bp+16, bp+20); *(*int32)(unsafe.Pointer(bp + 16)) >= 0; (*struct { 8965 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8966 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp, bp+16, bp+20) { 8967 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+1)*4))++ 8968 if *(*int32)(unsafe.Pointer(bp + 16)) != iPrev { 8969 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+2)*4))++ 8970 } 8971 iPrev = *(*int32)(unsafe.Pointer(bp + 16)) 8972 } 8973 8974 return SQLITE_OK 8975 } 8976 8977 func fts5MatchinfoGlobalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f uint8, aOut uintptr) int32 { 8978 bp := tls.Alloc(24) 8979 defer tls.Free(24) 8980 8981 var rc int32 = SQLITE_OK 8982 switch int32(f) { 8983 case 'p': 8984 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase) 8985 break 8986 8987 case 'c': 8988 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol) 8989 break 8990 8991 case 'x': 8992 { 8993 var i int32 8994 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase && rc == SQLITE_OK; i++ { 8995 var pPtr uintptr = aOut + uintptr(i*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*3)*4 8996 rc = (*struct { 8997 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8998 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxQueryPhrase})).f(tls, pFts, i, pPtr, *(*uintptr)(unsafe.Pointer(&struct { 8999 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 9000 }{fts5MatchinfoXCb}))) 9001 } 9002 break 9003 9004 } 9005 9006 case 'n': 9007 { 9008 rc = (*struct { 9009 f func(*libc.TLS, uintptr, uintptr) int32 9010 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp) 9011 *(*u32)(unsafe.Pointer(aOut)) = u32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 9012 break 9013 9014 } 9015 9016 case 'a': 9017 { 9018 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = int64(0) 9019 rc = (*struct { 9020 f func(*libc.TLS, uintptr, uintptr) int32 9021 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp+8) 9022 if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 9023 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 9024 } else { 9025 var i int32 9026 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 9027 rc = (*struct { 9028 f func(*libc.TLS, uintptr, int32, uintptr) int32 9029 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnTotalSize})).f(tls, pFts, i, bp+16) 9030 if rc == SQLITE_OK { 9031 *(*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)))) 9032 } 9033 } 9034 } 9035 break 9036 9037 } 9038 9039 } 9040 return rc 9041 } 9042 9043 func fts5MatchinfoLocalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f uint8, aOut uintptr) int32 { 9044 bp := tls.Alloc(80) 9045 defer tls.Free(80) 9046 9047 var i int32 9048 var rc int32 = SQLITE_OK 9049 9050 switch int32(f) { 9051 case 'b': 9052 { 9053 var iPhrase int32 9054 var nInt int32 = ((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol + 31) / 32 * (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase 9055 for i = 0; i < nInt; i++ { 9056 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(0) 9057 } 9058 9059 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 9060 for (*struct { 9061 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 9062 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirstColumn})).f(tls, pFts, iPhrase, bp, bp+16); *(*int32)(unsafe.Pointer(bp + 16)) >= 0; (*struct { 9063 f func(*libc.TLS, uintptr, uintptr, uintptr) 9064 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNextColumn})).f(tls, pFts, bp, bp+16) { 9065 *(*u32)(unsafe.Pointer(aOut + uintptr(iPhrase*(((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol+31)/32)+*(*int32)(unsafe.Pointer(bp + 16))/32)*4)) |= u32(1) << (*(*int32)(unsafe.Pointer(bp + 16)) % 32) 9066 } 9067 } 9068 9069 break 9070 9071 } 9072 9073 case 'x': 9074 fallthrough 9075 case 'y': 9076 { 9077 var nMul int32 = func() int32 { 9078 if int32(f) == 'x' { 9079 return 3 9080 } 9081 return 1 9082 }() 9083 var iPhrase int32 9084 9085 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; i++ { 9086 *(*u32)(unsafe.Pointer(aOut + uintptr(i*nMul)*4)) = u32(0) 9087 } 9088 9089 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 9090 for (*struct { 9091 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9092 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirst})).f(tls, pFts, iPhrase, bp+24, bp+40, bp+44); *(*int32)(unsafe.Pointer(bp + 44)) >= 0; (*struct { 9093 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 9094 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp+24, bp+40, bp+44) { 9095 *(*u32)(unsafe.Pointer(aOut + uintptr(nMul*(*(*int32)(unsafe.Pointer(bp + 40))+iPhrase*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol))*4))++ 9096 } 9097 } 9098 9099 break 9100 9101 } 9102 9103 case 'l': 9104 { 9105 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 9106 rc = (*struct { 9107 f func(*libc.TLS, uintptr, int32, uintptr) int32 9108 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnSize})).f(tls, pFts, i, bp+48) 9109 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 48))) 9110 } 9111 break 9112 9113 } 9114 9115 case 's': 9116 { 9117 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 9118 9119 rc = (*struct { 9120 f func(*libc.TLS, uintptr, uintptr) int32 9121 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInstCount})).f(tls, pFts, bp+52) 9122 for i = 0; rc == SQLITE_OK && i < *(*int32)(unsafe.Pointer(bp + 52)); i++ { 9123 *(*int32)(unsafe.Pointer(bp + 60)) = 0 9124 var iNextPhrase int32 9125 var iNextOff int32 9126 var nSeq u32 = u32(1) 9127 var j int32 9128 9129 rc = (*struct { 9130 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9131 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, i, bp+56, bp+60, bp+64) 9132 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 56)) + 1 9133 iNextOff = *(*int32)(unsafe.Pointer(bp + 64)) + (*struct { 9134 f func(*libc.TLS, uintptr, int32) int32 9135 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, 0) 9136 for j = i + 1; rc == SQLITE_OK && j < *(*int32)(unsafe.Pointer(bp + 52)); j++ { 9137 rc = (*struct { 9138 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9139 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, j, bp+68, bp+72, bp+76) 9140 if *(*int32)(unsafe.Pointer(bp + 72)) != *(*int32)(unsafe.Pointer(bp + 60)) || *(*int32)(unsafe.Pointer(bp + 76)) > iNextOff { 9141 break 9142 } 9143 if *(*int32)(unsafe.Pointer(bp + 68)) == iNextPhrase && *(*int32)(unsafe.Pointer(bp + 76)) == iNextOff { 9144 nSeq++ 9145 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 68)) + 1 9146 iNextOff = *(*int32)(unsafe.Pointer(bp + 76)) + (*struct { 9147 f func(*libc.TLS, uintptr, int32) int32 9148 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, *(*int32)(unsafe.Pointer(bp + 68))) 9149 } 9150 } 9151 9152 if nSeq > *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) { 9153 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) = nSeq 9154 } 9155 } 9156 9157 break 9158 9159 } 9160 } 9161 return rc 9162 } 9163 9164 func fts5MatchinfoNew(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, zArg uintptr) uintptr { 9165 bp := tls.Alloc(8) 9166 defer tls.Free(8) 9167 9168 var p uintptr 9169 var nCol int32 9170 var nPhrase int32 9171 var i int32 9172 var nInt int32 9173 var nByte sqlite3_int64 9174 var rc int32 9175 9176 nCol = (*struct { 9177 f func(*libc.TLS, uintptr) int32 9178 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnCount})).f(tls, pFts) 9179 nPhrase = (*struct { 9180 f func(*libc.TLS, uintptr) int32 9181 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseCount})).f(tls, pFts) 9182 9183 nInt = 0 9184 for i = 0; *(*uint8)(unsafe.Pointer(zArg + uintptr(i))) != 0; i++ { 9185 var n int32 = fts5MatchinfoFlagsize(tls, nCol, nPhrase, *(*uint8)(unsafe.Pointer(zArg + uintptr(i)))) 9186 if n < 0 { 9187 var zErr uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+3131, libc.VaList(bp, int32(*(*uint8)(unsafe.Pointer(zArg + uintptr(i)))))) 9188 sqlite3.Xsqlite3_result_error(tls, pCtx, zErr, -1) 9189 sqlite3.Xsqlite3_free(tls, zErr) 9190 return uintptr(0) 9191 } 9192 nInt = nInt + n 9193 } 9194 9195 nByte = sqlite3_int64(uint64(unsafe.Sizeof(Fts5MatchinfoCtx{})) + 9196 uint64(unsafe.Sizeof(u32(0)))*uint64(nInt) + 9197 uint64(i+1)) 9198 p = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 9199 if p == uintptr(0) { 9200 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 9201 return uintptr(0) 9202 } 9203 libc.Xmemset(tls, p, 0, uint64(nByte)) 9204 9205 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol = nCol 9206 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase = nPhrase 9207 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet = p + 1*32 9208 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet = nInt 9209 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg = (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet + uintptr(nInt)*4 9210 libc.Xmemcpy(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg, zArg, uint64(i)) 9211 9212 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 9213 f func(*libc.TLS, uintptr, uintptr, uintptr, uint8, uintptr) int32 9214 }{fts5MatchinfoGlobalCb}))) 9215 if rc != SQLITE_OK { 9216 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 9217 sqlite3.Xsqlite3_free(tls, p) 9218 p = uintptr(0) 9219 } 9220 9221 return p 9222 } 9223 9224 func fts5MatchinfoFunc(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 9225 var zArg uintptr 9226 var p uintptr 9227 var rc int32 = SQLITE_OK 9228 9229 if nVal > 0 { 9230 zArg = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9231 } else { 9232 zArg = ts + 3163 9233 } 9234 9235 p = (*struct { 9236 f func(*libc.TLS, uintptr, int32) uintptr 9237 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxGetAuxdata})).f(tls, pFts, 0) 9238 if p == uintptr(0) || sqlite3.Xsqlite3_stricmp(tls, zArg, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg) != 0 { 9239 p = fts5MatchinfoNew(tls, pApi, pFts, pCtx, zArg) 9240 if p == uintptr(0) { 9241 rc = SQLITE_NOMEM 9242 } else { 9243 rc = (*struct { 9244 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 9245 })(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}))) 9246 } 9247 } 9248 9249 if rc == SQLITE_OK { 9250 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 9251 f func(*libc.TLS, uintptr, uintptr, uintptr, uint8, uintptr) int32 9252 }{fts5MatchinfoLocalCb}))) 9253 } 9254 if rc != SQLITE_OK { 9255 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 9256 } else { 9257 var nByte int32 = int32(uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet) * uint64(unsafe.Sizeof(u32(0)))) 9258 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet, nByte, libc.UintptrFromInt32(-1)) 9259 } 9260 } 9261 9262 func sqlite3Fts5TestRegisterMatchinfo(tls *libc.TLS, db uintptr) int32 { 9263 bp := tls.Alloc(8) 9264 defer tls.Free(8) 9265 9266 var rc int32 9267 9268 rc = fts5_api_from_db(tls, db, bp) 9269 if rc != SQLITE_OK { 9270 return rc 9271 } 9272 9273 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) || (*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FiVersion < 2 { 9274 return SQLITE_ERROR 9275 } 9276 9277 rc = (*struct { 9278 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 9279 })(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 { 9280 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 9281 }{fts5MatchinfoFunc})), uintptr(0)) 9282 9283 return rc 9284 } 9285 9286 type Fts5tokTable1 = struct { 9287 Fbase sqlite3_vtab 9288 Ftok fts5_tokenizer 9289 FpTok uintptr 9290 } 9291 9292 type Fts5tokTable = Fts5tokTable1 9293 type Fts5tokCursor1 = struct { 9294 Fbase sqlite3_vtab_cursor 9295 FiRowid int32 9296 F__ccgo_pad1 [4]byte 9297 FzInput uintptr 9298 FnRow int32 9299 F__ccgo_pad2 [4]byte 9300 FaRow uintptr 9301 } 9302 9303 type Fts5tokCursor = Fts5tokCursor1 9304 type Fts5tokRow1 = struct { 9305 FzToken uintptr 9306 FiStart int32 9307 FiEnd int32 9308 FiPos int32 9309 F__ccgo_pad1 [4]byte 9310 } 9311 9312 type Fts5tokRow = Fts5tokRow1 9313 9314 func fts5tokDequote(tls *libc.TLS, z uintptr) { 9315 var q uint8 = *(*uint8)(unsafe.Pointer(z)) 9316 9317 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 9318 var iIn int32 = 1 9319 var iOut int32 = 0 9320 if int32(q) == '[' { 9321 q = uint8(']') 9322 } 9323 9324 for *(*uint8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 9325 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 9326 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 9327 iIn++ 9328 break 9329 } else { 9330 iIn = iIn + 2 9331 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 9332 } 9333 } else { 9334 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 9335 } 9336 } 9337 9338 *(*uint8)(unsafe.Pointer(z + uintptr(iOut))) = uint8(0) 9339 } 9340 } 9341 9342 func fts5tokDequoteArray(tls *libc.TLS, argc int32, argv uintptr, pazDequote uintptr) int32 { 9343 var rc int32 = SQLITE_OK 9344 if argc == 0 { 9345 *(*uintptr)(unsafe.Pointer(pazDequote)) = uintptr(0) 9346 } else { 9347 var i int32 9348 var nByte int32 = 0 9349 var azDequote uintptr 9350 9351 for i = 0; i < argc; i++ { 9352 nByte = nByte + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))+uint64(1)) 9353 } 9354 9355 *(*uintptr)(unsafe.Pointer(pazDequote)) = libc.AssignUintptr(&azDequote, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(argc)+uint64(nByte))) 9356 if azDequote == uintptr(0) { 9357 rc = SQLITE_NOMEM 9358 } else { 9359 var pSpace uintptr = azDequote + uintptr(argc)*8 9360 for i = 0; i < argc; i++ { 9361 var n int32 = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 9362 *(*uintptr)(unsafe.Pointer(azDequote + uintptr(i)*8)) = pSpace 9363 libc.Xmemcpy(tls, pSpace, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), uint64(n+1)) 9364 fts5tokDequote(tls, pSpace) 9365 pSpace += uintptr(n + 1) 9366 } 9367 } 9368 } 9369 9370 return rc 9371 } 9372 9373 func fts5tokConnectMethod(tls *libc.TLS, db uintptr, pCtx uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 9374 bp := tls.Alloc(16) 9375 defer tls.Free(16) 9376 9377 var pApi uintptr = pCtx 9378 var pTab uintptr = uintptr(0) 9379 var rc int32 9380 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9381 var nDequote int32 = 0 9382 9383 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 9384 ts+3177) 9385 9386 if rc == SQLITE_OK { 9387 nDequote = argc - 3 9388 rc = fts5tokDequoteArray(tls, nDequote, argv+3*8, bp) 9389 } 9390 9391 if rc == SQLITE_OK { 9392 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokTable{}))) 9393 if pTab == uintptr(0) { 9394 rc = SQLITE_NOMEM 9395 } else { 9396 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(Fts5tokTable{}))) 9397 } 9398 } 9399 9400 if rc == SQLITE_OK { 9401 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 9402 var zModule uintptr = uintptr(0) 9403 if nDequote > 0 { 9404 zModule = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) 9405 } 9406 9407 rc = (*struct { 9408 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 9409 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(pApi)).FxFindTokenizer})).f(tls, pApi, zModule, bp+8, pTab+24) 9410 if rc == SQLITE_OK { 9411 var azArg uintptr = func() uintptr { 9412 if nDequote > 1 { 9413 return *(*uintptr)(unsafe.Pointer(bp)) + 1*8 9414 } 9415 return uintptr(0) 9416 }() 9417 var nArg int32 9418 if nDequote > 0 { 9419 nArg = nDequote - 1 9420 } else { 9421 nArg = 0 9422 } 9423 rc = (*struct { 9424 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9425 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), azArg, nArg, pTab+48) 9426 } 9427 } 9428 9429 if rc != SQLITE_OK { 9430 sqlite3.Xsqlite3_free(tls, pTab) 9431 pTab = uintptr(0) 9432 } 9433 9434 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 9435 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 9436 return rc 9437 } 9438 9439 func fts5tokDisconnectMethod(tls *libc.TLS, pVtab uintptr) int32 { 9440 var pTab uintptr = pVtab 9441 if (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok != 0 { 9442 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxDelete})).f(tls, (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok) 9443 } 9444 sqlite3.Xsqlite3_free(tls, pTab) 9445 return SQLITE_OK 9446 } 9447 9448 func fts5tokBestIndexMethod(tls *libc.TLS, pVTab uintptr, pInfo uintptr) int32 { 9449 var i int32 9450 9451 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FnConstraint; i++ { 9452 if (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 && 9453 (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).FiColumn == 0 && 9454 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 9455 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 1 9456 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 9457 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 9458 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FestimatedCost = float64(1) 9459 return SQLITE_OK 9460 } 9461 } 9462 9463 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 0 9464 9465 return SQLITE_OK 9466 } 9467 9468 func fts5tokOpenMethod(tls *libc.TLS, pVTab uintptr, ppCsr uintptr) int32 { 9469 var pCsr uintptr 9470 9471 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokCursor{}))) 9472 if pCsr == uintptr(0) { 9473 return SQLITE_NOMEM 9474 } 9475 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(Fts5tokCursor{}))) 9476 9477 *(*uintptr)(unsafe.Pointer(ppCsr)) = pCsr 9478 return SQLITE_OK 9479 } 9480 9481 func fts5tokResetCursor(tls *libc.TLS, pCsr uintptr) { 9482 var i int32 9483 for i = 0; i < (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow; i++ { 9484 sqlite3.Xsqlite3_free(tls, (*Fts5tokRow)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow+uintptr(i)*24)).FzToken) 9485 } 9486 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput) 9487 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow) 9488 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = uintptr(0) 9489 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = uintptr(0) 9490 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow = 0 9491 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid = 0 9492 } 9493 9494 func fts5tokCloseMethod(tls *libc.TLS, pCursor uintptr) int32 { 9495 var pCsr uintptr = pCursor 9496 fts5tokResetCursor(tls, pCsr) 9497 sqlite3.Xsqlite3_free(tls, pCsr) 9498 return SQLITE_OK 9499 } 9500 9501 func fts5tokNextMethod(tls *libc.TLS, pCursor uintptr) int32 { 9502 var pCsr uintptr = pCursor 9503 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid++ 9504 return SQLITE_OK 9505 } 9506 9507 func fts5tokCb(tls *libc.TLS, pCtx uintptr, tflags int32, pToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 9508 var pCsr uintptr = pCtx 9509 var pRow uintptr 9510 9511 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow&((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow-1) == 0 { 9512 var nNew int32 9513 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9514 nNew = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow * 2 9515 } else { 9516 nNew = 32 9517 } 9518 var aNew uintptr 9519 aNew = sqlite3.Xsqlite3_realloc64(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow, uint64(nNew)*uint64(unsafe.Sizeof(Fts5tokRow{}))) 9520 if aNew == uintptr(0) { 9521 return SQLITE_NOMEM 9522 } 9523 libc.Xmemset(tls, aNew+uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24, 0, uint64(unsafe.Sizeof(Fts5tokRow{}))*uint64(nNew-(*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)) 9524 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = aNew 9525 } 9526 9527 pRow = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24 9528 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart = iStart 9529 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd = iEnd 9530 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9531 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos = (*Fts5tokRow)(unsafe.Pointer(pRow+libc.UintptrFromInt32(-1)*24)).FiPos + func() int32 { 9532 if tflags&FTS5_TOKEN_COLOCATED != 0 { 9533 return 0 9534 } 9535 return 1 9536 }() 9537 } 9538 (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken = sqlite3.Xsqlite3_malloc(tls, nToken+1) 9539 if (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken == uintptr(0) { 9540 return SQLITE_NOMEM 9541 } 9542 libc.Xmemcpy(tls, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, pToken, uint64(nToken)) 9543 *(*uint8)(unsafe.Pointer((*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken + uintptr(nToken))) = uint8(0) 9544 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow++ 9545 9546 return SQLITE_OK 9547 } 9548 9549 func fts5tokFilterMethod(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, nVal int32, apVal uintptr) int32 { 9550 var rc int32 = SQLITE_ERROR 9551 var pCsr uintptr = pCursor 9552 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 9553 9554 fts5tokResetCursor(tls, pCsr) 9555 if idxNum == 1 { 9556 var zByte uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9557 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9558 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = sqlite3.Xsqlite3_malloc(tls, nByte+1) 9559 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput == uintptr(0) { 9560 rc = SQLITE_NOMEM 9561 } else { 9562 if nByte > 0 { 9563 libc.Xmemcpy(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, zByte, uint64(nByte)) 9564 } 9565 *(*uint8)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput + uintptr(nByte))) = uint8(0) 9566 rc = (*struct { 9567 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 9568 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxTokenize})).f(tls, 9569 (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok, pCsr, 0, zByte, nByte, *(*uintptr)(unsafe.Pointer(&struct { 9570 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 9571 }{fts5tokCb}))) 9572 } 9573 } 9574 9575 if rc != SQLITE_OK { 9576 return rc 9577 } 9578 return fts5tokNextMethod(tls, pCursor) 9579 } 9580 9581 func fts5tokEofMethod(tls *libc.TLS, pCursor uintptr) int32 { 9582 var pCsr uintptr = pCursor 9583 return libc.Bool32((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid > (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow) 9584 } 9585 9586 func fts5tokColumnMethod(tls *libc.TLS, pCursor uintptr, pCtx uintptr, iCol int32) int32 { 9587 var pCsr uintptr = pCursor 9588 var pRow uintptr = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid-1)*24 9589 9590 switch iCol { 9591 case 0: 9592 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, -1, libc.UintptrFromInt32(-1)) 9593 break 9594 case 1: 9595 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, -1, libc.UintptrFromInt32(-1)) 9596 break 9597 case 2: 9598 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart) 9599 break 9600 case 3: 9601 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd) 9602 break 9603 default: 9604 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos) 9605 break 9606 } 9607 return SQLITE_OK 9608 } 9609 9610 func fts5tokRowidMethod(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 9611 var pCsr uintptr = pCursor 9612 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3_int64((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid) 9613 return SQLITE_OK 9614 } 9615 9616 func sqlite3Fts5TestRegisterTok(tls *libc.TLS, db uintptr, pApi uintptr) int32 { 9617 var rc int32 9618 9619 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3235, uintptr(unsafe.Pointer(&fts5tok_module)), pApi) 9620 return rc 9621 } 9622 9623 var fts5tok_module = sqlite3_module{ 9624 FxCreate: 0, 9625 FxConnect: 0, 9626 FxBestIndex: 0, 9627 FxDisconnect: 0, 9628 FxDestroy: 0, 9629 FxOpen: 0, 9630 FxClose: 0, 9631 FxFilter: 0, 9632 FxNext: 0, 9633 FxEof: 0, 9634 FxColumn: 0, 9635 FxRowid: 0, 9636 } 9637 9638 type sqlite3_api_routines = sqlite3_api_routines1 9639 9640 type sqlite3_loadext_entry = uintptr 9641 9642 type ApndVfs = sqlite3_vfs1 9643 type ApndFile1 = struct { 9644 Fbase sqlite3_file 9645 FiPgOne sqlite3_int64 9646 FiMark sqlite3_int64 9647 } 9648 9649 type ApndFile = ApndFile1 9650 9651 var apnd_vfs = sqlite3_vfs{ 9652 FiVersion: 3, 9653 FmxPathname: 1024, 9654 FzName: ts + 3248, 9655 FxOpen: 0, 9656 FxDelete: 0, 9657 FxAccess: 0, 9658 FxFullPathname: 0, 9659 FxDlOpen: 0, 9660 FxDlError: 0, 9661 FxDlSym: 0, 9662 FxDlClose: 0, 9663 FxRandomness: 0, 9664 FxSleep: 0, 9665 FxCurrentTime: 0, 9666 FxGetLastError: 0, 9667 FxCurrentTimeInt64: 0, 9668 FxSetSystemCall: 0, 9669 FxGetSystemCall: 0, 9670 FxNextSystemCall: 0, 9671 } 9672 9673 var apnd_io_methods = sqlite3_io_methods{ 9674 FiVersion: 3, 9675 FxClose: 0, 9676 FxRead: 0, 9677 FxWrite: 0, 9678 FxTruncate: 0, 9679 FxSync: 0, 9680 FxFileSize: 0, 9681 FxLock: 0, 9682 FxUnlock: 0, 9683 FxCheckReservedLock: 0, 9684 FxFileControl: 0, 9685 FxSectorSize: 0, 9686 FxDeviceCharacteristics: 0, 9687 FxShmMap: 0, 9688 FxShmLock: 0, 9689 FxShmBarrier: 0, 9690 FxShmUnmap: 0, 9691 FxFetch: 0, 9692 FxUnfetch: 0, 9693 } 9694 9695 func apndClose(tls *libc.TLS, pFile uintptr) int32 { 9696 pFile = pFile + uintptr(1)*24 9697 return (*struct { 9698 f func(*libc.TLS, uintptr) int32 9699 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 9700 } 9701 9702 func apndRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9703 var paf uintptr = pFile 9704 pFile = pFile + uintptr(1)*24 9705 return (*struct { 9706 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9707 })(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) 9708 } 9709 9710 func apndWriteMark(tls *libc.TLS, paf uintptr, pFile uintptr, iWriteEnd sqlite_int64) int32 { 9711 bp := tls.Alloc(25) 9712 defer tls.Free(25) 9713 9714 var iPgOne sqlite_int64 = (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9715 9716 var i int32 = APND_MARK_FOS_SZ 9717 var rc int32 9718 9719 libc.Xmemcpy(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) 9720 for libc.PreDecInt32(&i, 1) >= 0 { 9721 *(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))) = uint8(iPgOne & int64(0xff)) 9722 iPgOne >>= 8 9723 } 9724 iWriteEnd = iWriteEnd + (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9725 if SQLITE_OK == libc.AssignInt32(&rc, (*struct { 9726 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9727 })(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)) { 9728 (*ApndFile)(unsafe.Pointer(paf)).FiMark = iWriteEnd 9729 } 9730 return rc 9731 } 9732 9733 func apndWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9734 var paf uintptr = pFile 9735 var iWriteEnd sqlite_int64 = iOfst + sqlite_int64(iAmt) 9736 if iWriteEnd >= int64(0x40000000) { 9737 return SQLITE_FULL 9738 } 9739 pFile = pFile + uintptr(1)*24 9740 9741 if (*ApndFile)(unsafe.Pointer(paf)).FiMark < int64(0) || (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iWriteEnd > (*ApndFile)(unsafe.Pointer(paf)).FiMark { 9742 var rc int32 = apndWriteMark(tls, paf, pFile, iWriteEnd) 9743 if SQLITE_OK != rc { 9744 return rc 9745 } 9746 } 9747 return (*struct { 9748 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9749 })(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) 9750 } 9751 9752 func apndTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 9753 var paf uintptr = pFile 9754 pFile = pFile + uintptr(1)*24 9755 9756 if SQLITE_OK != apndWriteMark(tls, paf, pFile, size) { 9757 return SQLITE_IOERR 9758 } 9759 9760 return (*struct { 9761 f func(*libc.TLS, uintptr, sqlite3_int64) int32 9762 })(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)) 9763 } 9764 9765 func apndSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 9766 pFile = pFile + uintptr(1)*24 9767 return (*struct { 9768 f func(*libc.TLS, uintptr, int32) int32 9769 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 9770 } 9771 9772 func apndFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 9773 var paf uintptr = pFile 9774 *(*sqlite_int64)(unsafe.Pointer(pSize)) = func() int64 { 9775 if (*ApndFile)(unsafe.Pointer(paf)).FiMark >= int64(0) { 9776 return (*ApndFile)(unsafe.Pointer(paf)).FiMark - (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9777 } 9778 return int64(0) 9779 }() 9780 return SQLITE_OK 9781 } 9782 9783 func apndLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9784 pFile = pFile + uintptr(1)*24 9785 return (*struct { 9786 f func(*libc.TLS, uintptr, int32) int32 9787 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 9788 } 9789 9790 func apndUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 9791 pFile = pFile + uintptr(1)*24 9792 return (*struct { 9793 f func(*libc.TLS, uintptr, int32) int32 9794 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 9795 } 9796 9797 func apndCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 9798 pFile = pFile + uintptr(1)*24 9799 return (*struct { 9800 f func(*libc.TLS, uintptr, uintptr) int32 9801 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 9802 } 9803 9804 func apndFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 9805 bp := tls.Alloc(16) 9806 defer tls.Free(16) 9807 9808 var paf uintptr = pFile 9809 var rc int32 9810 pFile = pFile + uintptr(1)*24 9811 if op == SQLITE_FCNTL_SIZE_HINT { 9812 *(*sqlite3_int64)(unsafe.Pointer(pArg)) += (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9813 } 9814 rc = (*struct { 9815 f func(*libc.TLS, uintptr, int32, uintptr) int32 9816 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 9817 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 9818 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+3274, libc.VaList(bp, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne, *(*uintptr)(unsafe.Pointer(pArg)))) 9819 } 9820 return rc 9821 } 9822 9823 func apndSectorSize(tls *libc.TLS, pFile uintptr) int32 { 9824 pFile = pFile + uintptr(1)*24 9825 return (*struct { 9826 f func(*libc.TLS, uintptr) int32 9827 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 9828 } 9829 9830 func apndDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 9831 pFile = pFile + uintptr(1)*24 9832 return (*struct { 9833 f func(*libc.TLS, uintptr) int32 9834 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 9835 } 9836 9837 func apndShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 9838 pFile = pFile + uintptr(1)*24 9839 return (*struct { 9840 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 9841 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 9842 } 9843 9844 func apndShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 9845 pFile = pFile + uintptr(1)*24 9846 return (*struct { 9847 f func(*libc.TLS, uintptr, int32, int32, int32) int32 9848 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 9849 } 9850 9851 func apndShmBarrier(tls *libc.TLS, pFile uintptr) { 9852 pFile = pFile + uintptr(1)*24 9853 (*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) 9854 } 9855 9856 func apndShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 9857 pFile = pFile + uintptr(1)*24 9858 return (*struct { 9859 f func(*libc.TLS, uintptr, int32) int32 9860 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 9861 } 9862 9863 func apndFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 9864 var p uintptr = pFile 9865 if (*ApndFile)(unsafe.Pointer(p)).FiMark < int64(0) || iOfst+sqlite3_int64(iAmt) > (*ApndFile)(unsafe.Pointer(p)).FiMark { 9866 return SQLITE_IOERR 9867 } 9868 pFile = pFile + uintptr(1)*24 9869 return (*struct { 9870 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 9871 })(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) 9872 } 9873 9874 func apndUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 9875 var p uintptr = pFile 9876 pFile = pFile + uintptr(1)*24 9877 return (*struct { 9878 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 9879 })(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) 9880 } 9881 9882 func apndReadMark(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) sqlite3_int64 { 9883 bp := tls.Alloc(25) 9884 defer tls.Free(25) 9885 9886 var rc int32 9887 var i int32 9888 var iMark sqlite3_int64 9889 var msbs int32 = 8 * (APND_MARK_FOS_SZ - 1) 9890 9891 if int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) != sz&int64(0x1ff) { 9892 return int64(-1) 9893 } 9894 rc = (*struct { 9895 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9896 })(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)) 9897 if rc != 0 { 9898 return int64(-1) 9899 } 9900 if libc.Xmemcmp(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) != 0 { 9901 return int64(-1) 9902 } 9903 iMark = sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(bp + 17)))&0x7f) << msbs 9904 for i = 1; i < 8; i++ { 9905 msbs = msbs - 8 9906 iMark = iMark | sqlite3_int64(*(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))))<<msbs 9907 } 9908 if iMark > sz-int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)-int64(512) { 9909 return int64(-1) 9910 } 9911 if iMark&int64(0x1ff) != 0 { 9912 return int64(-1) 9913 } 9914 return iMark 9915 } 9916 9917 var apvfsSqliteHdr = *(*[16]uint8)(unsafe.Pointer(ts + 3288)) 9918 9919 func apndIsAppendvfsDatabase(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9920 bp := tls.Alloc(16) 9921 defer tls.Free(16) 9922 9923 var rc int32 9924 9925 var iMark sqlite3_int64 = apndReadMark(tls, sz, pFile) 9926 if iMark >= int64(0) { 9927 rc = (*struct { 9928 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9929 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, bp, int32(unsafe.Sizeof([16]uint8{})), iMark) 9930 if SQLITE_OK == rc && 9931 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]uint8{}))) == 0 && 9932 sz&int64(0x1ff) == int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) && 9933 sz >= int64(512+(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) { 9934 return 1 9935 } 9936 } 9937 return 0 9938 } 9939 9940 func apndIsOrdinaryDatabaseFile(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 9941 bp := tls.Alloc(16) 9942 defer tls.Free(16) 9943 9944 if apndIsAppendvfsDatabase(tls, sz, pFile) != 0 || 9945 sz&int64(0x1ff) != int64(0) || 9946 SQLITE_OK != (*struct { 9947 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9948 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, bp, int32(unsafe.Sizeof([16]uint8{})), int64(0)) || 9949 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]uint8{}))) != 0 { 9950 return 0 9951 } else { 9952 return 1 9953 } 9954 return int32(0) 9955 } 9956 9957 func apndOpen(tls *libc.TLS, pApndVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 9958 bp := tls.Alloc(8) 9959 defer tls.Free(8) 9960 9961 var pApndFile uintptr = pFile 9962 var pBaseFile uintptr = pFile + uintptr(1)*24 9963 var pBaseVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pApndVfs)).FpAppData 9964 var rc int32 9965 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 9966 if flags&SQLITE_OPEN_MAIN_DB == 0 { 9967 return (*struct { 9968 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9969 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pFile, flags, pOutFlags) 9970 } 9971 libc.Xmemset(tls, pApndFile, 0, uint64(unsafe.Sizeof(ApndFile{}))) 9972 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&apnd_io_methods)) 9973 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = int64(-1) 9974 9975 rc = (*struct { 9976 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 9977 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pBaseFile, flags, pOutFlags) 9978 if rc == SQLITE_OK { 9979 rc = (*struct { 9980 f func(*libc.TLS, uintptr, uintptr) int32 9981 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxFileSize})).f(tls, pBaseFile, bp) 9982 if rc != 0 { 9983 (*struct { 9984 f func(*libc.TLS, uintptr) int32 9985 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 9986 } 9987 } 9988 if rc != 0 { 9989 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 9990 return rc 9991 } 9992 if apndIsOrdinaryDatabaseFile(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pBaseFile) != 0 { 9993 libc.Xmemmove(tls, pApndFile, pBaseFile, uint64((*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FszOsFile)) 9994 return SQLITE_OK 9995 } 9996 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = apndReadMark(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pFile) 9997 if (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne >= int64(0) { 9998 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = *(*sqlite3_int64)(unsafe.Pointer(bp)) - int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) 9999 return SQLITE_OK 10000 } 10001 if flags&SQLITE_OPEN_CREATE == 0 { 10002 (*struct { 10003 f func(*libc.TLS, uintptr) int32 10004 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 10005 rc = SQLITE_CANTOPEN 10006 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 10007 } else { 10008 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = (*(*sqlite3_int64)(unsafe.Pointer(bp)) + int64(APND_ROUNDUP-1)) & libc.CplInt64(int64(APND_ROUNDUP-1)) 10009 } 10010 return rc 10011 } 10012 10013 func apndDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 10014 return (*struct { 10015 f func(*libc.TLS, uintptr, uintptr, int32) int32 10016 })(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) 10017 } 10018 10019 func apndAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 10020 return (*struct { 10021 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 10022 })(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) 10023 } 10024 10025 func apndFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 10026 return (*struct { 10027 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 10028 })(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) 10029 } 10030 10031 func apndDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 10032 return (*struct { 10033 f func(*libc.TLS, uintptr, uintptr) uintptr 10034 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 10035 } 10036 10037 func apndDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 10038 (*struct { 10039 f func(*libc.TLS, uintptr, int32, uintptr) 10040 })(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) 10041 } 10042 10043 func apndDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 10044 return (*struct { 10045 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 10046 })(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) 10047 } 10048 10049 func apndDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 10050 (*struct { 10051 f func(*libc.TLS, uintptr, uintptr) 10052 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 10053 } 10054 10055 func apndRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 10056 return (*struct { 10057 f func(*libc.TLS, uintptr, int32, uintptr) int32 10058 })(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) 10059 } 10060 10061 func apndSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 10062 return (*struct { 10063 f func(*libc.TLS, uintptr, int32) int32 10064 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 10065 } 10066 10067 func apndCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 10068 return (*struct { 10069 f func(*libc.TLS, uintptr, uintptr) int32 10070 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 10071 } 10072 10073 func apndGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 10074 return (*struct { 10075 f func(*libc.TLS, uintptr, int32, uintptr) int32 10076 })(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) 10077 } 10078 10079 func apndCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 10080 return (*struct { 10081 f func(*libc.TLS, uintptr, uintptr) int32 10082 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTimeInt64})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p) 10083 } 10084 10085 func apndSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 10086 return (*struct { 10087 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 10088 })(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) 10089 } 10090 10091 func apndGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 10092 return (*struct { 10093 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 10094 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 10095 } 10096 10097 func apndNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 10098 return (*struct { 10099 f func(*libc.TLS, uintptr, uintptr) uintptr 10100 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 10101 } 10102 10103 func sqlite3_appendvfs_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 10104 var rc int32 = SQLITE_OK 10105 var pOrig uintptr 10106 _ = pApi 10107 10108 _ = pzErrMsg 10109 _ = db 10110 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 10111 if pOrig == uintptr(0) { 10112 return SQLITE_ERROR 10113 } 10114 apnd_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 10115 apnd_vfs.FpAppData = pOrig 10116 apnd_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(ApndFile{}))) 10117 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&apnd_vfs)), 0) 10118 if rc == SQLITE_OK { 10119 rc = SQLITE_OK | int32(1)<<8 10120 } 10121 return rc 10122 } 10123 10124 type idtype_t = uint32 10125 10126 type div_t = struct { 10127 Fquot int32 10128 Frem int32 10129 } 10130 10131 type ldiv_t = struct { 10132 Fquot int64 10133 Frem int64 10134 } 10135 10136 type lldiv_t = struct { 10137 Fquot int64 10138 Frem int64 10139 } 10140 10141 type u_char = uint8 10142 type u_short = uint16 10143 type u_int = uint32 10144 type u_long = uint64 10145 type quad_t = int64 10146 type u_quad_t = uint64 10147 type fsid_t = struct{ F__val [2]int32 } 10148 type loff_t = int64 10149 10150 type ino_t = uint64 10151 10152 type dev_t = uint64 10153 10154 type gid_t = uint32 10155 10156 type mode_t = uint32 10157 10158 type nlink_t = uint32 10159 10160 type uid_t = uint32 10161 10162 type pid_t = int32 10163 10164 type id_t = uint32 10165 10166 type daddr_t = int32 10167 type caddr_t = uintptr 10168 10169 type key_t = int32 10170 10171 type clock_t = int64 10172 10173 type clockid_t = int32 10174 10175 type time_t = int64 10176 10177 type timer_t = uintptr 10178 10179 type ulong = uint64 10180 type ushort = uint16 10181 type uint = uint32 10182 10183 type int8_t = int8 10184 type int16_t = int16 10185 type int32_t = int32 10186 type int64_t = int64 10187 10188 type u_int8_t = uint8 10189 type u_int16_t = uint16 10190 type u_int32_t = uint32 10191 type u_int64_t = uint64 10192 10193 type register_t = int32 10194 10195 type sigset_t = struct{ F__val [16]uint64 } 10196 10197 type timeval = struct { 10198 Ftv_sec int64 10199 Ftv_usec int64 10200 } 10201 10202 type timespec = struct { 10203 Ftv_sec int64 10204 Ftv_nsec int64 10205 } 10206 10207 type suseconds_t = int64 10208 10209 type fd_set = struct{ F__fds_bits [16]int64 } 10210 10211 type fd_mask = int64 10212 10213 type blksize_t = int32 10214 10215 type blkcnt_t = int64 10216 type fsblkcnt_t = uint64 10217 type fsfilcnt_t = uint64 10218 10219 type __pthread_internal_list = struct { 10220 F__prev uintptr 10221 F__next uintptr 10222 } 10223 10224 type __pthread_internal_slist = struct{ F__next uintptr } 10225 10226 type __pthread_mutex_s = struct { 10227 F__lock int32 10228 F__count uint32 10229 F__owner int32 10230 F__nusers uint32 10231 F__kind int32 10232 F__spins int32 10233 F__list struct { 10234 F__prev uintptr 10235 F__next uintptr 10236 } 10237 } 10238 10239 type __pthread_rwlock_arch_t = struct { 10240 F__readers uint32 10241 F__writers uint32 10242 F__wrphase_futex uint32 10243 F__writers_futex uint32 10244 F__pad3 uint32 10245 F__pad4 uint32 10246 F__cur_writer int32 10247 F__shared int32 10248 F__pad1 uint64 10249 F__pad2 uint64 10250 F__flags uint32 10251 F__ccgo_pad1 [4]byte 10252 } 10253 10254 type __pthread_cond_s = struct { 10255 F__0 struct{ F__wseq uint64 } 10256 F__8 struct{ F__g1_start uint64 } 10257 F__g_refs [2]uint32 10258 F__g_size [2]uint32 10259 F__g1_orig_size uint32 10260 F__wrefs uint32 10261 F__g_signals [2]uint32 10262 } 10263 10264 type pthread_t = uint64 10265 10266 type pthread_mutexattr_t = struct { 10267 F__ccgo_pad1 [0]uint32 10268 F__size [8]uint8 10269 } 10270 10271 type pthread_condattr_t = struct { 10272 F__ccgo_pad1 [0]uint32 10273 F__size [8]uint8 10274 } 10275 10276 type pthread_key_t = uint32 10277 10278 type pthread_once_t = int32 10279 10280 type pthread_attr_t1 = struct { 10281 F__ccgo_pad1 [0]uint64 10282 F__size [64]uint8 10283 } 10284 10285 type pthread_attr_t = pthread_attr_t1 10286 10287 type pthread_mutex_t = struct { 10288 F__data __pthread_mutex_s 10289 F__ccgo_pad1 [8]byte 10290 } 10291 10292 type pthread_cond_t = struct{ F__data __pthread_cond_s } 10293 10294 type pthread_rwlock_t = struct{ F__data __pthread_rwlock_arch_t } 10295 10296 type pthread_rwlockattr_t = struct { 10297 F__ccgo_pad1 [0]uint64 10298 F__size [8]uint8 10299 } 10300 10301 type pthread_spinlock_t = int32 10302 10303 type pthread_barrier_t = struct { 10304 F__ccgo_pad1 [0]uint64 10305 F__size [32]uint8 10306 } 10307 10308 type pthread_barrierattr_t = struct { 10309 F__ccgo_pad1 [0]uint32 10310 F__size [8]uint8 10311 } 10312 10313 type random_data = struct { 10314 Ffptr uintptr 10315 Frptr uintptr 10316 Fstate uintptr 10317 Frand_type int32 10318 Frand_deg int32 10319 Frand_sep int32 10320 F__ccgo_pad1 [4]byte 10321 Fend_ptr uintptr 10322 } 10323 10324 type drand48_data = struct { 10325 F__x [3]uint16 10326 F__old_x [3]uint16 10327 F__c uint16 10328 F__init uint16 10329 F__a uint64 10330 } 10331 10332 type amatch_vtab1 = struct { 10333 Fbase sqlite3_vtab 10334 FzClassName uintptr 10335 FzDb uintptr 10336 FzSelf uintptr 10337 FzCostTab uintptr 10338 FzVocabTab uintptr 10339 FzVocabWord uintptr 10340 FzVocabLang uintptr 10341 FpRule uintptr 10342 FrIns amatch_cost 10343 FrDel amatch_cost 10344 FrSub amatch_cost 10345 F__ccgo_pad1 [4]byte 10346 Fdb uintptr 10347 FpVCheck uintptr 10348 FnCursor int32 10349 F__ccgo_pad2 [4]byte 10350 } 10351 10352 type amatch_vtab = amatch_vtab1 10353 type amatch_cursor1 = struct { 10354 Fbase sqlite3_vtab_cursor 10355 FiRowid sqlite3_int64 10356 FiLang amatch_langid 10357 FrLimit amatch_cost 10358 FnBuf int32 10359 FoomErr int32 10360 FnWord int32 10361 F__ccgo_pad1 [4]byte 10362 FzBuf uintptr 10363 FzInput uintptr 10364 FpVtab uintptr 10365 FpAllWords uintptr 10366 FpCurrent uintptr 10367 FpCost uintptr 10368 FpWord uintptr 10369 } 10370 10371 type amatch_cursor = amatch_cursor1 10372 type amatch_rule1 = struct { 10373 FpNext uintptr 10374 FzFrom uintptr 10375 FrCost amatch_cost 10376 FiLang amatch_langid 10377 FnFrom amatch_len 10378 FnTo amatch_len 10379 FzTo [4]uint8 10380 F__ccgo_pad1 [2]byte 10381 } 10382 10383 type amatch_rule = amatch_rule1 10384 type amatch_word1 = struct { 10385 FpNext uintptr 10386 FsCost amatch_avl 10387 FsWord amatch_avl 10388 FrCost amatch_cost 10389 FiSeq int32 10390 FzCost [10]uint8 10391 FnMatch int16 10392 FzWord [4]uint8 10393 } 10394 10395 type amatch_word = amatch_word1 10396 type amatch_avl1 = struct { 10397 FpWord uintptr 10398 FzKey uintptr 10399 FpBefore uintptr 10400 FpAfter uintptr 10401 FpUp uintptr 10402 Fheight int16 10403 Fimbalance int16 10404 F__ccgo_pad1 [4]byte 10405 } 10406 10407 type amatch_avl = amatch_avl1 10408 10409 func amatchAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 10410 var hBefore int16 10411 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10412 hBefore = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 10413 } else { 10414 hBefore = int16(0) 10415 } 10416 var hAfter int16 10417 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 10418 hAfter = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 10419 } else { 10420 hAfter = int16(0) 10421 } 10422 (*amatch_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 10423 (*amatch_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 10424 if int32(hBefore) > int32(hAfter) { 10425 return int32(hBefore) 10426 } 10427 return int32(hAfter) 10428 }() + 1) 10429 } 10430 10431 func amatchAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 10432 var pB uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpBefore 10433 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pB)).FpAfter 10434 (*amatch_avl)(unsafe.Pointer(pB)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 10435 (*amatch_avl)(unsafe.Pointer(pB)).FpAfter = pP 10436 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pB 10437 (*amatch_avl)(unsafe.Pointer(pP)).FpBefore = pY 10438 if pY != 0 { 10439 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 10440 } 10441 amatchAvlRecomputeHeight(tls, pP) 10442 amatchAvlRecomputeHeight(tls, pB) 10443 return pB 10444 } 10445 10446 func amatchAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 10447 var pA uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpAfter 10448 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pA)).FpBefore 10449 (*amatch_avl)(unsafe.Pointer(pA)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 10450 (*amatch_avl)(unsafe.Pointer(pA)).FpBefore = pP 10451 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pA 10452 (*amatch_avl)(unsafe.Pointer(pP)).FpAfter = pY 10453 if pY != 0 { 10454 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 10455 } 10456 amatchAvlRecomputeHeight(tls, pP) 10457 amatchAvlRecomputeHeight(tls, pA) 10458 return pA 10459 } 10460 10461 func amatchAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 10462 var pUp uintptr = (*amatch_avl)(unsafe.Pointer(p)).FpUp 10463 if pUp == uintptr(0) { 10464 return pp 10465 } 10466 if (*amatch_avl)(unsafe.Pointer(pUp)).FpAfter == p { 10467 return pUp + 24 10468 } 10469 return pUp + 16 10470 } 10471 10472 func amatchAvlBalance(tls *libc.TLS, p uintptr) uintptr { 10473 bp := tls.Alloc(8) 10474 defer tls.Free(8) 10475 *(*uintptr)(unsafe.Pointer(bp)) = p 10476 10477 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 10478 var pp uintptr 10479 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 10480 amatchAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 10481 if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 10482 var pB uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 10483 if int32((*amatch_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 10484 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = amatchAvlRotateAfter(tls, pB) 10485 } 10486 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 10487 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 10488 } else if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 10489 var pA uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 10490 if int32((*amatch_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 10491 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = amatchAvlRotateBefore(tls, pA) 10492 } 10493 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 10494 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 10495 } 10496 pTop = *(*uintptr)(unsafe.Pointer(bp)) 10497 *(*uintptr)(unsafe.Pointer(bp)) = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 10498 } 10499 return pTop 10500 } 10501 10502 func amatchAvlSearch(tls *libc.TLS, p uintptr, zKey uintptr) uintptr { 10503 var c int32 10504 for p != 0 && libc.AssignInt32(&c, libc.Xstrcmp(tls, zKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey)) != 0 { 10505 if c < 0 { 10506 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10507 } else { 10508 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 10509 } 10510 } 10511 return p 10512 } 10513 10514 func amatchAvlFirst(tls *libc.TLS, p uintptr) uintptr { 10515 if p != 0 { 10516 for (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10517 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10518 } 10519 } 10520 return p 10521 } 10522 10523 func amatchAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 10524 var c int32 10525 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 10526 if p == uintptr(0) { 10527 p = pNew 10528 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 10529 } else { 10530 for p != 0 { 10531 c = libc.Xstrcmp(tls, (*amatch_avl)(unsafe.Pointer(pNew)).FzKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey) 10532 if c < 0 { 10533 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10534 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10535 } else { 10536 (*amatch_avl)(unsafe.Pointer(p)).FpBefore = pNew 10537 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 10538 break 10539 } 10540 } else if c > 0 { 10541 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 10542 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 10543 } else { 10544 (*amatch_avl)(unsafe.Pointer(p)).FpAfter = pNew 10545 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 10546 break 10547 } 10548 } else { 10549 return p 10550 } 10551 } 10552 } 10553 (*amatch_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 10554 (*amatch_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 10555 (*amatch_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 10556 (*amatch_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 10557 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, p) 10558 10559 return uintptr(0) 10560 } 10561 10562 func amatchAvlRemove(tls *libc.TLS, ppHead uintptr, pOld uintptr) { 10563 var ppParent uintptr 10564 var pBalance uintptr = uintptr(0) 10565 10566 ppParent = amatchAvlFromPtr(tls, pOld, ppHead) 10567 if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 10568 *(*uintptr)(unsafe.Pointer(ppParent)) = uintptr(0) 10569 pBalance = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10570 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore != 0 && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter != 0 { 10571 var pX uintptr 10572 var pY uintptr 10573 pX = amatchAvlFirst(tls, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 10574 *(*uintptr)(unsafe.Pointer(amatchAvlFromPtr(tls, pX, uintptr(0)))) = (*amatch_avl)(unsafe.Pointer(pX)).FpAfter 10575 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 10576 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 10577 } 10578 pBalance = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 10579 (*amatch_avl)(unsafe.Pointer(pX)).FpAfter = (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter 10580 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 10581 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = pX 10582 } else { 10583 pBalance = pX 10584 } 10585 (*amatch_avl)(unsafe.Pointer(pX)).FpBefore = libc.AssignUintptr(&pY, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 10586 if pY != 0 { 10587 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pX 10588 } 10589 (*amatch_avl)(unsafe.Pointer(pX)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10590 *(*uintptr)(unsafe.Pointer(ppParent)) = pX 10591 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) { 10592 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 10593 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10594 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 10595 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 10596 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10597 } 10598 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, pBalance) 10599 (*amatch_avl)(unsafe.Pointer(pOld)).FpUp = uintptr(0) 10600 (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore = uintptr(0) 10601 (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter = uintptr(0) 10602 10603 } 10604 10605 type amatch_cost = int32 10606 type amatch_len = int8 10607 type amatch_langid = int32 10608 10609 func amatchMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 10610 bp := tls.Alloc(32) 10611 defer tls.Free(32) 10612 10613 var pTail uintptr 10614 10615 pTail = bp 10616 for pA != 0 && pB != 0 { 10617 if (*amatch_rule)(unsafe.Pointer(pA)).FrCost <= (*amatch_rule)(unsafe.Pointer(pB)).FrCost { 10618 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 10619 pTail = pA 10620 pA = (*amatch_rule)(unsafe.Pointer(pA)).FpNext 10621 } else { 10622 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 10623 pTail = pB 10624 pB = (*amatch_rule)(unsafe.Pointer(pB)).FpNext 10625 } 10626 } 10627 if pA == uintptr(0) { 10628 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 10629 } else { 10630 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 10631 } 10632 return (*amatch_rule)(unsafe.Pointer(bp)).FpNext 10633 } 10634 10635 func amatchLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 10636 bp := tls.Alloc(48) 10637 defer tls.Free(48) 10638 10639 var iLang sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 10640 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 10641 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 10642 var rCost amatch_cost = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 10643 10644 var rc int32 = SQLITE_OK 10645 var nFrom int32 10646 var nTo int32 10647 var pRule uintptr = uintptr(0) 10648 10649 if zFrom == uintptr(0) { 10650 zFrom = ts + 584 10651 } 10652 if zTo == uintptr(0) { 10653 zTo = ts + 584 10654 } 10655 nFrom = int32(libc.Xstrlen(tls, zFrom)) 10656 nTo = int32(libc.Xstrlen(tls, zTo)) 10657 10658 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 10659 if int32(*(*uint8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*uint8)(unsafe.Pointer(zFrom + 1))) == 0 { 10660 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrSub > rCost { 10661 (*amatch_vtab)(unsafe.Pointer(p)).FrSub = rCost 10662 } 10663 } 10664 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 10665 return SQLITE_OK 10666 } 10667 10668 if rCost <= 0 || rCost > AMATCH_MX_COST { 10669 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 10670 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_COST)) 10671 rc = SQLITE_ERROR 10672 } else if nFrom > AMATCH_MX_LENGTH || nTo > AMATCH_MX_LENGTH { 10673 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 10674 libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LENGTH)) 10675 rc = SQLITE_ERROR 10676 } else if iLang < int64(0) || iLang > int64(AMATCH_MX_LANGID) { 10677 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3370, 10678 libc.VaList(bp+32, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LANGID)) 10679 rc = SQLITE_ERROR 10680 } else if libc.Xstrcmp(tls, zFrom, ts+584) == 0 && libc.Xstrcmp(tls, zTo, ts+3405) == 0 { 10681 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrIns > rCost { 10682 (*amatch_vtab)(unsafe.Pointer(p)).FrIns = rCost 10683 } 10684 } else if libc.Xstrcmp(tls, zFrom, ts+3405) == 0 && libc.Xstrcmp(tls, zTo, ts+584) == 0 { 10685 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrDel > rCost { 10686 (*amatch_vtab)(unsafe.Pointer(p)).FrDel = rCost 10687 } 10688 } else { 10689 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_rule{}))+uint64(nFrom)+uint64(nTo)) 10690 if pRule == uintptr(0) { 10691 rc = SQLITE_NOMEM 10692 } else { 10693 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(amatch_rule{}))) 10694 (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 26 + uintptr(nTo+1) 10695 (*amatch_rule)(unsafe.Pointer(pRule)).FnFrom = amatch_len(nFrom) 10696 libc.Xmemcpy(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 10697 libc.Xmemcpy(tls, pRule+26, zTo, uint64(nTo+1)) 10698 (*amatch_rule)(unsafe.Pointer(pRule)).FnTo = amatch_len(nTo) 10699 (*amatch_rule)(unsafe.Pointer(pRule)).FrCost = rCost 10700 (*amatch_rule)(unsafe.Pointer(pRule)).FiLang = int32(iLang) 10701 } 10702 } 10703 10704 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 10705 return rc 10706 } 10707 10708 func amatchFreeRules(tls *libc.TLS, p uintptr) { 10709 for (*amatch_vtab)(unsafe.Pointer(p)).FpRule != 0 { 10710 var pRule uintptr = (*amatch_vtab)(unsafe.Pointer(p)).FpRule 10711 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext 10712 sqlite3.Xsqlite3_free(tls, pRule) 10713 } 10714 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = uintptr(0) 10715 } 10716 10717 func amatchLoadRules(tls *libc.TLS, db uintptr, p uintptr, pzErr uintptr) int32 { 10718 bp := tls.Alloc(192) 10719 defer tls.Free(192) 10720 10721 var rc int32 = SQLITE_OK 10722 var zSql uintptr 10723 var pHead uintptr = uintptr(0) 10724 10725 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzDb, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab)) 10726 if zSql == uintptr(0) { 10727 rc = SQLITE_NOMEM 10728 } else { 10729 var rc2 int32 10730 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 10731 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 10732 if rc != SQLITE_OK { 10733 *(*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))) 10734 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 10735 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 10736 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))))) 10737 rc = SQLITE_ERROR 10738 } else { 10739 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 10740 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 10741 rc = amatchLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 10742 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 10743 (*amatch_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 10744 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 10745 } 10746 } 10747 } 10748 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 10749 if rc == SQLITE_OK { 10750 rc = rc2 10751 } 10752 } 10753 sqlite3.Xsqlite3_free(tls, zSql) 10754 10755 if rc == SQLITE_OK { 10756 var i uint32 10757 var pX uintptr 10758 10759 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 10760 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 10761 } 10762 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 10763 pHead = (*amatch_rule)(unsafe.Pointer(pX)).FpNext 10764 (*amatch_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 10765 for i = uint32(0); *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) != 0 && uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))-uint64(1); i++ { 10766 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10767 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 10768 } 10769 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10770 } 10771 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 10772 i = uint32(1) 10773 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 10774 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 10775 } 10776 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = amatchMergeRules(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpRule, pX) 10777 } else { 10778 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = pHead 10779 } 10780 10781 return rc 10782 } 10783 10784 func amatchDequote(tls *libc.TLS, zIn uintptr) uintptr { 10785 var nIn sqlite3_int64 10786 var zOut uintptr 10787 10788 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 10789 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 10790 if zOut != 0 { 10791 var q uint8 = *(*uint8)(unsafe.Pointer(zIn)) 10792 10793 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 10794 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 10795 } else { 10796 var iOut int32 = 0 10797 var iIn int32 10798 10799 if int32(q) == '[' { 10800 q = uint8(']') 10801 } 10802 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 10803 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 10804 iIn++ 10805 } 10806 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(zIn + uintptr(iIn))) 10807 } 10808 } 10809 10810 } 10811 return zOut 10812 } 10813 10814 func amatchVCheckClear(tls *libc.TLS, p uintptr) { 10815 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck != 0 { 10816 sqlite3.Xsqlite3_finalize(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 10817 (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck = uintptr(0) 10818 } 10819 } 10820 10821 func amatchFree(tls *libc.TLS, p uintptr) { 10822 if p != 0 { 10823 amatchFreeRules(tls, p) 10824 amatchVCheckClear(tls, p) 10825 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName) 10826 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzDb) 10827 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab) 10828 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab) 10829 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord) 10830 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang) 10831 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf) 10832 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 10833 sqlite3.Xsqlite3_free(tls, p) 10834 } 10835 } 10836 10837 func amatchDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 10838 var p uintptr = pVtab 10839 10840 amatchFree(tls, p) 10841 return SQLITE_OK 10842 } 10843 10844 func amatchValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 10845 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 10846 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 10847 var i int32 10848 if nStr < nKey+1 { 10849 return uintptr(0) 10850 } 10851 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 10852 return uintptr(0) 10853 } 10854 for i = nKey; int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))))*2)))&int32(_ISspace) != 0; i++ { 10855 } 10856 if int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 10857 return uintptr(0) 10858 } 10859 i++ 10860 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))))*2)))&int32(_ISspace) != 0 { 10861 i++ 10862 } 10863 return zStr + uintptr(i) 10864 } 10865 10866 func amatchConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 10867 bp := tls.Alloc(32) 10868 defer tls.Free(32) 10869 10870 var rc int32 10871 var pNew uintptr 10872 var zModule uintptr 10873 var zDb uintptr 10874 var zVal uintptr 10875 var i int32 10876 rc = SQLITE_OK 10877 pNew = uintptr(0) 10878 zModule = *(*uintptr)(unsafe.Pointer(argv)) 10879 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 10880 10881 _ = pAux 10882 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10883 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_vtab{}))) 10884 if !(pNew == uintptr(0)) { 10885 goto __1 10886 } 10887 return SQLITE_NOMEM 10888 __1: 10889 ; 10890 rc = SQLITE_NOMEM 10891 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 10892 (*amatch_vtab)(unsafe.Pointer(pNew)).Fdb = db 10893 (*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zModule)) 10894 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName == uintptr(0)) { 10895 goto __2 10896 } 10897 goto amatchConnectError 10898 __2: 10899 ; 10900 (*amatch_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zDb)) 10901 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 10902 goto __3 10903 } 10904 goto amatchConnectError 10905 __3: 10906 ; 10907 (*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 10908 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 10909 goto __4 10910 } 10911 goto amatchConnectError 10912 __4: 10913 ; 10914 i = 3 10915 __5: 10916 if !(i < argc) { 10917 goto __7 10918 } 10919 zVal = amatchValueOfKey(tls, ts+3468, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10920 if !(zVal != 0) { 10921 goto __8 10922 } 10923 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab) 10924 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab = amatchDequote(tls, zVal) 10925 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab == uintptr(0)) { 10926 goto __9 10927 } 10928 goto amatchConnectError 10929 __9: 10930 ; 10931 goto __6 10932 __8: 10933 ; 10934 zVal = amatchValueOfKey(tls, ts+3485, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10935 if !(zVal != 0) { 10936 goto __10 10937 } 10938 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord) 10939 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord = amatchDequote(tls, zVal) 10940 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord == uintptr(0)) { 10941 goto __11 10942 } 10943 goto amatchConnectError 10944 __11: 10945 ; 10946 goto __6 10947 __10: 10948 ; 10949 zVal = amatchValueOfKey(tls, ts+3501, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10950 if !(zVal != 0) { 10951 goto __12 10952 } 10953 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang) 10954 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang = amatchDequote(tls, zVal) 10955 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang == uintptr(0)) { 10956 goto __13 10957 } 10958 goto amatchConnectError 10959 __13: 10960 ; 10961 goto __6 10962 __12: 10963 ; 10964 zVal = amatchValueOfKey(tls, ts+3521, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 10965 if !(zVal != 0) { 10966 goto __14 10967 } 10968 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab) 10969 (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab = amatchDequote(tls, zVal) 10970 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10971 goto __15 10972 } 10973 goto amatchConnectError 10974 __15: 10975 ; 10976 goto __6 10977 __14: 10978 ; 10979 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 10980 amatchFree(tls, pNew) 10981 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 10982 return SQLITE_ERROR 10983 goto __6 10984 __6: 10985 i++ 10986 goto __5 10987 goto __7 10988 __7: 10989 ; 10990 rc = SQLITE_OK 10991 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 10992 goto __16 10993 } 10994 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3565, 0) 10995 rc = SQLITE_ERROR 10996 goto __17 10997 __16: 10998 rc = amatchLoadRules(tls, db, pNew, pzErr) 10999 __17: 11000 ; 11001 if !(rc == SQLITE_OK) { 11002 goto __18 11003 } 11004 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 11005 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 11006 ts+3599) 11007 __18: 11008 ; 11009 if !(rc != SQLITE_OK) { 11010 goto __19 11011 } 11012 amatchFree(tls, pNew) 11013 __19: 11014 ; 11015 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 11016 return rc 11017 11018 amatchConnectError: 11019 amatchFree(tls, pNew) 11020 return rc 11021 } 11022 11023 func amatchOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 11024 var p uintptr = pVTab 11025 var pCur uintptr 11026 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_cursor{}))) 11027 if pCur == uintptr(0) { 11028 return SQLITE_NOMEM 11029 } 11030 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(amatch_cursor{}))) 11031 (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab = p 11032 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 11033 (*amatch_vtab)(unsafe.Pointer(p)).FnCursor++ 11034 return SQLITE_OK 11035 } 11036 11037 func amatchClearCursor(tls *libc.TLS, pCur uintptr) { 11038 var pWord uintptr 11039 var pNextWord uintptr 11040 for pWord = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords; pWord != 0; pWord = pNextWord { 11041 pNextWord = (*amatch_word)(unsafe.Pointer(pWord)).FpNext 11042 sqlite3.Xsqlite3_free(tls, pWord) 11043 } 11044 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = uintptr(0) 11045 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput) 11046 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = uintptr(0) 11047 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 11048 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = uintptr(0) 11049 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 11050 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost = uintptr(0) 11051 (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord = uintptr(0) 11052 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 11053 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = 1000000 11054 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = 0 11055 (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord = 0 11056 } 11057 11058 func amatchClose(tls *libc.TLS, cur uintptr) int32 { 11059 var pCur uintptr = cur 11060 amatchClearCursor(tls, pCur) 11061 (*amatch_vtab)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 11062 sqlite3.Xsqlite3_free(tls, pCur) 11063 return SQLITE_OK 11064 } 11065 11066 func amatchEncodeInt(tls *libc.TLS, x int32, z uintptr) { 11067 *(*uint8)(unsafe.Pointer(z)) = a[x>>18&0x3f] 11068 *(*uint8)(unsafe.Pointer(z + 1)) = a[x>>12&0x3f] 11069 *(*uint8)(unsafe.Pointer(z + 2)) = a[x>>6&0x3f] 11070 *(*uint8)(unsafe.Pointer(z + 3)) = a[x&0x3f] 11071 } 11072 11073 var a = *(*[65]uint8)(unsafe.Pointer(ts + 3666)) 11074 11075 func amatchWriteCost(tls *libc.TLS, pWord uintptr) { 11076 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, pWord+112) 11077 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FiSeq, pWord+112+uintptr(4)) 11078 *(*uint8)(unsafe.Pointer(pWord + 112 + 8)) = uint8(0) 11079 } 11080 11081 func amatchStrcpy(tls *libc.TLS, dest uintptr, src uintptr) { 11082 for int32(libc.AssignPtrUint8(libc.PostIncUintptr(&dest, 1), *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&src, 1))))) != 0 { 11083 } 11084 } 11085 11086 func amatchStrcat(tls *libc.TLS, dest uintptr, src uintptr) { 11087 for *(*uint8)(unsafe.Pointer(dest)) != 0 { 11088 dest++ 11089 } 11090 amatchStrcpy(tls, dest, src) 11091 } 11092 11093 func amatchAddWord(tls *libc.TLS, pCur uintptr, rCost amatch_cost, nMatch int32, zWordBase uintptr, zWordTail uintptr) { 11094 bp := tls.Alloc(4) 11095 defer tls.Free(4) 11096 11097 var pWord uintptr 11098 var pNode uintptr 11099 var pOther uintptr 11100 _ = pOther 11101 var nBase int32 11102 var nTail int32 11103 11104 if rCost > (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit { 11105 return 11106 } 11107 nBase = int32(libc.Xstrlen(tls, zWordBase)) 11108 nTail = int32(libc.Xstrlen(tls, zWordTail)) 11109 if nBase+nTail+3 > (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf { 11110 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = nBase + nTail + 100 11111 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = sqlite3.Xsqlite3_realloc(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf) 11112 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf == uintptr(0) { 11113 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 11114 return 11115 } 11116 } 11117 amatchEncodeInt(tls, nMatch, bp) 11118 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, bp+uintptr(2), uint64(2)) 11119 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2), zWordBase, uint64(nBase)) 11120 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2)+uintptr(nBase), zWordTail, uint64(nTail+1)) 11121 pNode = amatchAvlSearch(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 11122 if pNode != 0 { 11123 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 11124 if (*amatch_word)(unsafe.Pointer(pWord)).FrCost > rCost { 11125 amatchAvlRemove(tls, pCur+80, pWord+8) 11126 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 11127 amatchWriteCost(tls, pWord) 11128 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 11129 _ = pOther 11130 } 11131 return 11132 } 11133 pWord = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_word{}))+uint64(nBase)+uint64(nTail)-uint64(1)) 11134 if pWord == uintptr(0) { 11135 return 11136 } 11137 libc.Xmemset(tls, pWord, 0, uint64(unsafe.Sizeof(amatch_word{}))) 11138 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 11139 (*amatch_word)(unsafe.Pointer(pWord)).FiSeq = libc.PostIncInt32(&(*amatch_cursor)(unsafe.Pointer(pCur)).FnWord, 1) 11140 amatchWriteCost(tls, pWord) 11141 (*amatch_word)(unsafe.Pointer(pWord)).FnMatch = int16(nMatch) 11142 (*amatch_word)(unsafe.Pointer(pWord)).FpNext = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords 11143 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = pWord 11144 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FzKey = pWord + 112 11145 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FpWord = pWord 11146 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 11147 _ = pOther 11148 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FzKey = pWord + 124 11149 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FpWord = pWord 11150 amatchStrcpy(tls, pWord+124, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 11151 pOther = amatchAvlInsert(tls, pCur+88, pWord+56) 11152 _ = pOther 11153 } 11154 11155 func amatchNext(tls *libc.TLS, cur uintptr) int32 { 11156 bp := tls.Alloc(80) 11157 defer tls.Free(80) 11158 11159 var pCur uintptr = cur 11160 var pWord uintptr = uintptr(0) 11161 var pNode uintptr 11162 var isMatch int32 = 0 11163 var p uintptr = (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab 11164 var nWord int32 11165 var rc int32 11166 var i int32 11167 var zW uintptr 11168 var pRule uintptr 11169 var zBuf uintptr = uintptr(0) 11170 var nBuf uint8 = uint8(0) 11171 11172 var nNextIn int32 11173 11174 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck == uintptr(0) { 11175 var zSql uintptr 11176 if (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang != 0 && *(*uint8)(unsafe.Pointer((*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) != 0 { 11177 zSql = sqlite3.Xsqlite3_mprintf(tls, 11178 ts+3731, 11179 libc.VaList(bp, ts+3753, 11180 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 11181 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) 11182 } else { 11183 zSql = sqlite3.Xsqlite3_mprintf(tls, 11184 ts+3792, 11185 libc.VaList(bp+40, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 11186 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord)) 11187 } 11188 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*amatch_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, p+112, uintptr(0)) 11189 sqlite3.Xsqlite3_free(tls, zSql) 11190 if rc != 0 { 11191 return rc 11192 } 11193 } 11194 sqlite3.Xsqlite3_bind_int(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 2, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 11195 11196 for __ccgo := true; __ccgo; __ccgo = !(isMatch != 0) { 11197 pNode = amatchAvlFirst(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost) 11198 if pNode == uintptr(0) { 11199 pWord = uintptr(0) 11200 break 11201 } 11202 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 11203 amatchAvlRemove(tls, pCur+80, pWord+8) 11204 11205 nWord = int32(libc.Xstrlen(tls, pWord+124+uintptr(2))) 11206 if nWord+20 > int32(nBuf) { 11207 nBuf = uint8(nWord + 100) 11208 zBuf = sqlite3.Xsqlite3_realloc(tls, zBuf, int32(nBuf)) 11209 if zBuf == uintptr(0) { 11210 return SQLITE_NOMEM 11211 } 11212 } 11213 amatchStrcpy(tls, zBuf, pWord+124+uintptr(2)) 11214 *(*uint8)(unsafe.Pointer(bp + 64)) = uint8(0) 11215 *(*uint8)(unsafe.Pointer(bp + 72)) = *(*uint8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch))) 11216 if *(*uint8)(unsafe.Pointer(bp + 72)) != 0 { 11217 for i = 1; i <= 4 && int32(*(*uint8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr(int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+i))))&0xc0 == 0x80; i++ { 11218 *(*uint8)(unsafe.Pointer(bp + 72 + uintptr(i))) = *(*uint8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr(int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+i))) 11219 } 11220 *(*uint8)(unsafe.Pointer(bp + 72 + uintptr(i))) = uint8(0) 11221 nNextIn = i 11222 } else { 11223 nNextIn = 0 11224 } 11225 11226 if *(*uint8)(unsafe.Pointer(bp + 72)) != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 72))) != '*' { 11227 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11228 amatchStrcat(tls, zBuf, bp+72) 11229 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, nWord+nNextIn, uintptr(0)) 11230 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11231 if rc == SQLITE_ROW { 11232 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 11233 if libc.Xstrncmp(tls, zBuf, zW, uint64(nWord+nNextIn)) == 0 { 11234 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, zBuf, ts+584) 11235 } 11236 } 11237 *(*uint8)(unsafe.Pointer(zBuf + uintptr(nWord))) = uint8(0) 11238 } 11239 11240 for 1 != 0 { 11241 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 11242 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11243 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, -1, libc.UintptrFromInt32(-1)) 11244 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11245 if rc != SQLITE_ROW { 11246 break 11247 } 11248 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 11249 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 11250 if libc.Xstrncmp(tls, zW, zBuf, uint64(nWord)) != 0 { 11251 break 11252 } 11253 if int32(*(*uint8)(unsafe.Pointer(bp + 72))) == '*' && int32(*(*uint8)(unsafe.Pointer(bp + 72 + 1))) == 0 || 11254 int32(*(*uint8)(unsafe.Pointer(bp + 72))) == 0 && int32(*(*uint8)(unsafe.Pointer(zW + uintptr(nWord)))) == 0 { 11255 isMatch = 1 11256 *(*uint8)(unsafe.Pointer(bp + 72)) = uint8(0) 11257 nNextIn = 0 11258 break 11259 } 11260 *(*uint8)(unsafe.Pointer(bp + 64)) = *(*uint8)(unsafe.Pointer(zW + uintptr(nWord))) 11261 for i = 1; i <= 4 && int32(*(*uint8)(unsafe.Pointer(zW + uintptr(nWord+i))))&0xc0 == 0x80; i++ { 11262 *(*uint8)(unsafe.Pointer(bp + 64 + uintptr(i))) = *(*uint8)(unsafe.Pointer(zW + uintptr(nWord+i))) 11263 } 11264 *(*uint8)(unsafe.Pointer(bp + 64 + uintptr(i))) = uint8(0) 11265 *(*uint8)(unsafe.Pointer(zBuf + uintptr(nWord))) = uint8(0) 11266 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns > 0 { 11267 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrIns, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), 11268 zBuf, bp+64) 11269 } 11270 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub > 0 { 11271 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrSub, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 11272 zBuf, bp+64) 11273 } 11274 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns < 0 && (*amatch_vtab)(unsafe.Pointer(p)).FrSub < 0 { 11275 break 11276 } 11277 *(*uint8)(unsafe.Pointer(bp + 64 + uintptr(i-1)))++ 11278 } 11279 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11280 11281 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel > 0 { 11282 *(*uint8)(unsafe.Pointer(zBuf + uintptr(nWord))) = uint8(0) 11283 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrDel, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 11284 zBuf, ts+584) 11285 } 11286 11287 for pRule = (*amatch_vtab)(unsafe.Pointer(p)).FpRule; pRule != 0; pRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext { 11288 if (*amatch_rule)(unsafe.Pointer(pRule)).FiLang != (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang { 11289 continue 11290 } 11291 if libc.Xstrncmp(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput+uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), uint64((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom)) == 0 { 11292 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_rule)(unsafe.Pointer(pRule)).FrCost, 11293 int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+int32((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom), pWord+124+uintptr(2), pRule+26) 11294 } 11295 } 11296 } 11297 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = pWord 11298 sqlite3.Xsqlite3_free(tls, zBuf) 11299 return SQLITE_OK 11300 } 11301 11302 func amatchFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 11303 bp := tls.Alloc(8) 11304 defer tls.Free(8) 11305 11306 var pCur uintptr = pVtabCursor 11307 var zWord uintptr = ts + 3840 11308 var idx int32 11309 11310 amatchClearCursor(tls, pCur) 11311 idx = 0 11312 if idxNum&1 != 0 { 11313 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 11314 idx++ 11315 } 11316 if idxNum&2 != 0 { 11317 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 11318 idx++ 11319 } 11320 if idxNum&4 != 0 { 11321 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 11322 idx++ 11323 } 11324 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zWord)) 11325 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput == uintptr(0) { 11326 return SQLITE_NOMEM 11327 } 11328 amatchAddWord(tls, pCur, 0, 0, ts+584, ts+584) 11329 amatchNext(tls, pVtabCursor) 11330 11331 return SQLITE_OK 11332 } 11333 11334 func amatchColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 11335 var pCur uintptr = cur 11336 switch i { 11337 case AMATCH_COL_WORD: 11338 { 11339 sqlite3.Xsqlite3_result_text(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent+124+uintptr(2), -1, uintptr(0)) 11340 break 11341 11342 } 11343 case AMATCH_COL_DISTANCE: 11344 { 11345 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_word)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FrCost) 11346 break 11347 11348 } 11349 case AMATCH_COL_LANGUAGE: 11350 { 11351 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 11352 break 11353 11354 } 11355 case AMATCH_COL_NWORD: 11356 { 11357 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord) 11358 break 11359 11360 } 11361 default: 11362 { 11363 sqlite3.Xsqlite3_result_null(tls, ctx) 11364 break 11365 11366 } 11367 } 11368 return SQLITE_OK 11369 } 11370 11371 func amatchRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 11372 var pCur uintptr = cur 11373 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*amatch_cursor)(unsafe.Pointer(pCur)).FiRowid 11374 return SQLITE_OK 11375 } 11376 11377 func amatchEof(tls *libc.TLS, cur uintptr) int32 { 11378 var pCur uintptr = cur 11379 return libc.Bool32((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 11380 } 11381 11382 func amatchBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 11383 var iPlan int32 = 0 11384 var iDistTerm int32 = -1 11385 var iLangTerm int32 = -1 11386 var i int32 11387 var pConstraint uintptr 11388 11389 _ = tab 11390 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 11391 i = 0 11392 __1: 11393 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 11394 goto __3 11395 } 11396 { 11397 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 11398 goto __2 11399 } 11400 if iPlan&1 == 0 && 11401 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 11402 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 11403 iPlan = iPlan | 1 11404 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 11405 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 11406 } 11407 if iPlan&2 == 0 && 11408 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 11409 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 11410 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 11411 iPlan = iPlan | 2 11412 iDistTerm = i 11413 } 11414 if iPlan&4 == 0 && 11415 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 11416 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 11417 iPlan = iPlan | 4 11418 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 11419 iLangTerm = i 11420 } 11421 11422 } 11423 goto __2 11424 __2: 11425 i++ 11426 pConstraint += 12 11427 goto __1 11428 goto __3 11429 __3: 11430 ; 11431 if iPlan&2 != 0 { 11432 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 11433 } 11434 if iPlan&4 != 0 { 11435 var idx int32 = 1 11436 if iPlan&1 != 0 { 11437 idx++ 11438 } 11439 if iPlan&2 != 0 { 11440 idx++ 11441 } 11442 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = idx 11443 } 11444 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 11445 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 11446 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 11447 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 11448 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 11449 } 11450 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10000) 11451 11452 return SQLITE_OK 11453 } 11454 11455 func amatchUpdate(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 11456 bp := tls.Alloc(24) 11457 defer tls.Free(24) 11458 11459 var p uintptr = pVTab 11460 var zCmd uintptr 11461 _ = pRowid 11462 if argc == 1 { 11463 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3842, 11464 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11465 return SQLITE_ERROR 11466 } 11467 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_NULL { 11468 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3872, 11469 libc.VaList(bp+8, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11470 return SQLITE_ERROR 11471 } 11472 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) != SQLITE_NULL || 11473 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) != SQLITE_NULL || 11474 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) != SQLITE_NULL { 11475 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11476 ts+3900, libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11477 return SQLITE_ERROR 11478 } 11479 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 11480 if zCmd == uintptr(0) { 11481 return SQLITE_OK 11482 } 11483 11484 return SQLITE_OK 11485 } 11486 11487 var amatchModule = sqlite3_module{ 11488 FxCreate: 0, 11489 FxConnect: 0, 11490 FxBestIndex: 0, 11491 FxDisconnect: 0, 11492 FxDestroy: 0, 11493 FxOpen: 0, 11494 FxClose: 0, 11495 FxFilter: 0, 11496 FxNext: 0, 11497 FxEof: 0, 11498 FxColumn: 0, 11499 FxRowid: 0, 11500 FxUpdate: 0, 11501 } 11502 11503 func sqlite3_amatch_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11504 var rc int32 = SQLITE_OK 11505 _ = pApi 11506 11507 _ = pzErrMsg 11508 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3949, uintptr(unsafe.Pointer(&amatchModule)), uintptr(0)) 11509 return rc 11510 } 11511 11512 var azType = [4]uintptr{ts + 3967, ts + 3973, ts + 2562, ts + 3979} 11513 11514 type carray_bind1 = struct { 11515 FaData uintptr 11516 FnData int32 11517 FmFlags int32 11518 FxDel uintptr 11519 } 11520 11521 type carray_bind = carray_bind1 11522 11523 type carray_cursor1 = struct { 11524 Fbase sqlite3_vtab_cursor 11525 FiRowid sqlite3_int64 11526 FpPtr uintptr 11527 FiCnt sqlite3_int64 11528 FeType uint8 11529 F__ccgo_pad1 [7]byte 11530 } 11531 11532 type carray_cursor = carray_cursor1 11533 11534 func carrayConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 11535 var pNew uintptr 11536 var rc int32 11537 11538 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 11539 ts+3985) 11540 if rc == SQLITE_OK { 11541 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 11542 if pNew == uintptr(0) { 11543 return SQLITE_NOMEM 11544 } 11545 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 11546 } 11547 return rc 11548 } 11549 11550 func carrayDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 11551 sqlite3.Xsqlite3_free(tls, pVtab) 11552 return SQLITE_OK 11553 } 11554 11555 func carrayOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 11556 var pCur uintptr 11557 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(carray_cursor{}))) 11558 if pCur == uintptr(0) { 11559 return SQLITE_NOMEM 11560 } 11561 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(carray_cursor{}))) 11562 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 11563 return SQLITE_OK 11564 } 11565 11566 func carrayClose(tls *libc.TLS, cur uintptr) int32 { 11567 sqlite3.Xsqlite3_free(tls, cur) 11568 return SQLITE_OK 11569 } 11570 11571 func carrayNext(tls *libc.TLS, cur uintptr) int32 { 11572 var pCur uintptr = cur 11573 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid++ 11574 return SQLITE_OK 11575 } 11576 11577 func carrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 11578 var pCur uintptr = cur 11579 var x sqlite3_int64 = int64(0) 11580 switch i { 11581 case CARRAY_COLUMN_POINTER: 11582 return SQLITE_OK 11583 case CARRAY_COLUMN_COUNT: 11584 x = (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt 11585 break 11586 case CARRAY_COLUMN_CTYPE: 11587 { 11588 sqlite3.Xsqlite3_result_text(tls, ctx, azType[(*carray_cursor)(unsafe.Pointer(pCur)).FeType], -1, uintptr(0)) 11589 return SQLITE_OK 11590 11591 } 11592 default: 11593 { 11594 switch int32((*carray_cursor)(unsafe.Pointer(pCur)).FeType) { 11595 case CARRAY_INT32: 11596 { 11597 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11598 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*4))) 11599 return SQLITE_OK 11600 11601 } 11602 case CARRAY_INT64: 11603 { 11604 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11605 sqlite3.Xsqlite3_result_int64(tls, ctx, *(*sqlite3_int64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 11606 return SQLITE_OK 11607 11608 } 11609 case CARRAY_DOUBLE: 11610 { 11611 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11612 sqlite3.Xsqlite3_result_double(tls, ctx, *(*float64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 11613 return SQLITE_OK 11614 11615 } 11616 case CARRAY_TEXT: 11617 { 11618 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11619 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8)), -1, libc.UintptrFromInt32(-1)) 11620 return SQLITE_OK 11621 11622 } 11623 } 11624 11625 } 11626 } 11627 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 11628 return SQLITE_OK 11629 } 11630 11631 func carrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 11632 var pCur uintptr = cur 11633 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid 11634 return SQLITE_OK 11635 } 11636 11637 func carrayEof(tls *libc.TLS, cur uintptr) int32 { 11638 var pCur uintptr = cur 11639 return libc.Bool32((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid > (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt) 11640 } 11641 11642 func carrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 11643 bp := tls.Alloc(8) 11644 defer tls.Free(8) 11645 11646 var pCur uintptr = pVtabCursor 11647 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = uintptr(0) 11648 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = int64(0) 11649 switch idxNum { 11650 case 1: 11651 { 11652 var pBind uintptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4048) 11653 if pBind == uintptr(0) { 11654 break 11655 } 11656 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = (*carray_bind)(unsafe.Pointer(pBind)).FaData 11657 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = sqlite3_int64((*carray_bind)(unsafe.Pointer(pBind)).FnData) 11658 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8((*carray_bind)(unsafe.Pointer(pBind)).FmFlags & 0x03) 11659 break 11660 11661 } 11662 case 2: 11663 fallthrough 11664 case 3: 11665 { 11666 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4060) 11667 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = func() int64 { 11668 if (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr != 0 { 11669 return sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 11670 } 11671 return int64(0) 11672 }() 11673 if idxNum < 3 { 11674 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8(CARRAY_INT32) 11675 } else { 11676 var i uint8 11677 var zType uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 11678 for i = uint8(0); uint64(i) < uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 11679 if sqlite3.Xsqlite3_stricmp(tls, zType, azType[i]) == 0 { 11680 break 11681 } 11682 } 11683 if uint64(i) >= uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))) { 11684 (*sqlite3_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11685 ts+4067, libc.VaList(bp, zType)) 11686 return SQLITE_ERROR 11687 } else { 11688 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = i 11689 } 11690 } 11691 break 11692 11693 } 11694 } 11695 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 11696 return SQLITE_OK 11697 } 11698 11699 func carrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 11700 var i int32 11701 var ptrIdx int32 = -1 11702 var cntIdx int32 = -1 11703 var ctypeIdx int32 = -1 11704 11705 var pConstraint uintptr 11706 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 11707 i = 0 11708 __1: 11709 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 11710 goto __3 11711 } 11712 { 11713 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 11714 goto __2 11715 } 11716 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 11717 goto __2 11718 } 11719 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 11720 case CARRAY_COLUMN_POINTER: 11721 ptrIdx = i 11722 break 11723 case CARRAY_COLUMN_COUNT: 11724 cntIdx = i 11725 break 11726 case CARRAY_COLUMN_CTYPE: 11727 ctypeIdx = i 11728 break 11729 } 11730 11731 } 11732 goto __2 11733 __2: 11734 i++ 11735 pConstraint += 12 11736 goto __1 11737 goto __3 11738 __3: 11739 ; 11740 if ptrIdx >= 0 { 11741 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).FargvIndex = 1 11742 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).Fomit = uint8(1) 11743 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 11744 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(100) 11745 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 11746 if cntIdx >= 0 { 11747 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).FargvIndex = 2 11748 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).Fomit = uint8(1) 11749 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 11750 if ctypeIdx >= 0 { 11751 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).FargvIndex = 3 11752 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).Fomit = uint8(1) 11753 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 3 11754 } 11755 } 11756 } else { 11757 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2147483647) 11758 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 11759 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 11760 } 11761 return SQLITE_OK 11762 } 11763 11764 var carrayModule = sqlite3_module{ 11765 FxConnect: 0, 11766 FxBestIndex: 0, 11767 FxDisconnect: 0, 11768 FxOpen: 0, 11769 FxClose: 0, 11770 FxFilter: 0, 11771 FxNext: 0, 11772 FxEof: 0, 11773 FxColumn: 0, 11774 FxRowid: 0, 11775 } 11776 11777 func carrayBindDel(tls *libc.TLS, pPtr uintptr) { 11778 var p uintptr = pPtr 11779 if (*carray_bind)(unsafe.Pointer(p)).FxDel != uintptr(0) { 11780 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*carray_bind)(unsafe.Pointer(p)).FxDel})).f(tls, (*carray_bind)(unsafe.Pointer(p)).FaData) 11781 } 11782 sqlite3.Xsqlite3_free(tls, p) 11783 } 11784 11785 func sqlite3_carray_bind(tls *libc.TLS, pStmt uintptr, idx int32, aData uintptr, nData int32, mFlags int32, xDestroy uintptr) int32 { 11786 var pNew uintptr 11787 var i int32 11788 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(carray_bind{}))) 11789 if pNew == uintptr(0) { 11790 if xDestroy != uintptr(0) && xDestroy != libc.UintptrFromInt32(-1) { 11791 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, aData) 11792 } 11793 return SQLITE_NOMEM 11794 } 11795 (*carray_bind)(unsafe.Pointer(pNew)).FnData = nData 11796 (*carray_bind)(unsafe.Pointer(pNew)).FmFlags = mFlags 11797 if xDestroy == libc.UintptrFromInt32(-1) { 11798 var sz sqlite3_int64 = sqlite3_int64(nData) 11799 switch mFlags & 0x03 { 11800 case CARRAY_INT32: 11801 sz = sz * int64(4) 11802 break 11803 fallthrough 11804 case CARRAY_INT64: 11805 sz = sz * int64(8) 11806 break 11807 fallthrough 11808 case CARRAY_DOUBLE: 11809 sz = sz * int64(8) 11810 break 11811 fallthrough 11812 case CARRAY_TEXT: 11813 sz = int64(uint64(sz) * uint64(unsafe.Sizeof(uintptr(0)))) 11814 break 11815 } 11816 if mFlags&0x03 == CARRAY_TEXT { 11817 for i = 0; i < nData; i++ { 11818 var z uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 11819 if z != 0 { 11820 sz = sqlite3_int64(uint64(sz) + (libc.Xstrlen(tls, z) + uint64(1))) 11821 } 11822 } 11823 } 11824 (*carray_bind)(unsafe.Pointer(pNew)).FaData = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 11825 if (*carray_bind)(unsafe.Pointer(pNew)).FaData == uintptr(0) { 11826 sqlite3.Xsqlite3_free(tls, pNew) 11827 return SQLITE_NOMEM 11828 } 11829 if mFlags&0x03 == CARRAY_TEXT { 11830 var az uintptr = (*carray_bind)(unsafe.Pointer(pNew)).FaData 11831 var z uintptr = az + uintptr(nData)*8 11832 for i = 0; i < nData; i++ { 11833 var zData uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 11834 var n sqlite3_int64 11835 if zData == uintptr(0) { 11836 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = uintptr(0) 11837 continue 11838 } 11839 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = z 11840 n = sqlite3_int64(libc.Xstrlen(tls, zData)) 11841 libc.Xmemcpy(tls, z, zData, uint64(n+int64(1))) 11842 z += uintptr(n + int64(1)) 11843 } 11844 } else { 11845 libc.Xmemcpy(tls, (*carray_bind)(unsafe.Pointer(pNew)).FaData, aData, uint64(sz)) 11846 } 11847 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 11848 } else { 11849 (*carray_bind)(unsafe.Pointer(pNew)).FaData = aData 11850 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = xDestroy 11851 } 11852 return sqlite3.Xsqlite3_bind_pointer(tls, pStmt, idx, pNew, ts+4048, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{carrayBindDel}))) 11853 } 11854 11855 func inttoptrFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11856 bp := tls.Alloc(20) 11857 defer tls.Free(20) 11858 11859 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 11860 if uint64(unsafe.Sizeof(sqlite3_int64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 11861 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 11862 } else { 11863 *(*int32)(unsafe.Pointer(bp + 16)) = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)) & int64(0xffffffff)) 11864 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 11865 } 11866 sqlite3.Xsqlite3_result_pointer(tls, context, *(*uintptr)(unsafe.Pointer(bp)), ts+4060, uintptr(0)) 11867 } 11868 11869 func sqlite3_carray_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11870 var rc int32 = SQLITE_OK 11871 _ = pApi 11872 11873 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4060, uintptr(unsafe.Pointer(&carrayModule)), uintptr(0)) 11874 if rc == SQLITE_OK { 11875 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4088, 1, SQLITE_UTF8, uintptr(0), 11876 *(*uintptr)(unsafe.Pointer(&struct { 11877 f func(*libc.TLS, uintptr, int32, uintptr) 11878 }{inttoptrFunc})), uintptr(0), uintptr(0)) 11879 } 11880 return rc 11881 } 11882 11883 type CksmVfs = sqlite3_vfs1 11884 type CksmFile1 = struct { 11885 Fbase sqlite3_file 11886 FzFName uintptr 11887 FcomputeCksm uint8 11888 FverifyCksm uint8 11889 FisWal uint8 11890 FinCkpt uint8 11891 F__ccgo_pad1 [4]byte 11892 FpPartner uintptr 11893 } 11894 11895 type CksmFile = CksmFile1 11896 11897 type u8 = uint8 11898 11899 var cksm_vfs = sqlite3_vfs{ 11900 FiVersion: 3, 11901 FmxPathname: 1024, 11902 FzName: ts + 4097, 11903 FxOpen: 0, 11904 FxDelete: 0, 11905 FxAccess: 0, 11906 FxFullPathname: 0, 11907 FxDlOpen: 0, 11908 FxDlError: 0, 11909 FxDlSym: 0, 11910 FxDlClose: 0, 11911 FxRandomness: 0, 11912 FxSleep: 0, 11913 FxCurrentTime: 0, 11914 FxGetLastError: 0, 11915 FxCurrentTimeInt64: 0, 11916 FxSetSystemCall: 0, 11917 FxGetSystemCall: 0, 11918 FxNextSystemCall: 0, 11919 } 11920 11921 var cksm_io_methods = sqlite3_io_methods{ 11922 FiVersion: 3, 11923 FxClose: 0, 11924 FxRead: 0, 11925 FxWrite: 0, 11926 FxTruncate: 0, 11927 FxSync: 0, 11928 FxFileSize: 0, 11929 FxLock: 0, 11930 FxUnlock: 0, 11931 FxCheckReservedLock: 0, 11932 FxFileControl: 0, 11933 FxSectorSize: 0, 11934 FxDeviceCharacteristics: 0, 11935 FxShmMap: 0, 11936 FxShmLock: 0, 11937 FxShmBarrier: 0, 11938 FxShmUnmap: 0, 11939 FxFetch: 0, 11940 FxUnfetch: 0, 11941 } 11942 11943 func cksmCompute(tls *libc.TLS, a uintptr, nByte int32, aOut uintptr) { 11944 bp := tls.Alloc(12) 11945 defer tls.Free(12) 11946 11947 *(*u32)(unsafe.Pointer(bp + 4)) = u32(0) 11948 *(*u32)(unsafe.Pointer(bp + 8)) = u32(0) 11949 var aData uintptr = a 11950 var aEnd uintptr = a + uintptr(nByte) 11951 *(*u32)(unsafe.Pointer(bp)) = u32(1) 11952 11953 if 1 == int32(*(*u8)(unsafe.Pointer(bp))) { 11954 for __ccgo := true; __ccgo; __ccgo = aData < aEnd { 11955 *(*u32)(unsafe.Pointer(bp + 4)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 8)) 11956 *(*u32)(unsafe.Pointer(bp + 8)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 4)) 11957 } 11958 } else { 11959 for __ccgo1 := true; __ccgo1; __ccgo1 = aData < aEnd { 11960 *(*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)) 11961 *(*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)) 11962 aData += 4 * uintptr(2) 11963 } 11964 *(*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 11965 *(*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 11966 } 11967 libc.Xmemcpy(tls, aOut, bp+4, uint64(4)) 11968 libc.Xmemcpy(tls, aOut+uintptr(4), bp+8, uint64(4)) 11969 } 11970 11971 func cksmVerifyFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 11972 bp := tls.Alloc(8) 11973 defer tls.Free(8) 11974 11975 var nByte int32 11976 var data uintptr 11977 11978 data = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 11979 if data == uintptr(0) { 11980 return 11981 } 11982 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_BLOB { 11983 return 11984 } 11985 nByte = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 11986 if nByte < 512 || nByte > 65536 || nByte&(nByte-1) != 0 { 11987 return 11988 } 11989 cksmCompute(tls, data, nByte-8, bp) 11990 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(libc.Xmemcmp(tls, data+uintptr(nByte)-uintptr(8), bp, uint64(8)) == 0)) 11991 } 11992 11993 func cksmClose(tls *libc.TLS, pFile uintptr) int32 { 11994 var p uintptr = pFile 11995 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 11996 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = uintptr(0) 11997 (*CksmFile)(unsafe.Pointer(p)).FpPartner = uintptr(0) 11998 } 11999 pFile = pFile + uintptr(1)*32 12000 return (*struct { 12001 f func(*libc.TLS, uintptr) int32 12002 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 12003 } 12004 12005 func cksmSetFlags(tls *libc.TLS, p uintptr, hasCorrectReserveSize int32) { 12006 if hasCorrectReserveSize != int32((*CksmFile)(unsafe.Pointer(p)).FcomputeCksm) { 12007 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = libc.AssignPtrUint8(p+17, uint8(hasCorrectReserveSize)) 12008 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12009 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = uint8(hasCorrectReserveSize) 12010 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm = uint8(hasCorrectReserveSize) 12011 } 12012 } 12013 } 12014 12015 func cksmRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 12016 bp := tls.Alloc(24) 12017 defer tls.Free(24) 12018 12019 var rc int32 12020 var p uintptr = pFile 12021 pFile = pFile + uintptr(1)*32 12022 rc = (*struct { 12023 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 12024 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, zBuf, iAmt, iOfst) 12025 if rc == SQLITE_OK { 12026 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 12027 var d uintptr = zBuf 12028 var hasCorrectReserveSize uint8 = uint8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 12029 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 12030 } 12031 12032 if iAmt >= 512 && 12033 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm != 0 && 12034 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 12035 cksmCompute(tls, zBuf, iAmt-8, bp+16) 12036 if libc.Xmemcmp(tls, zBuf+uintptr(iAmt)-uintptr(8), bp+16, uint64(8)) != 0 { 12037 sqlite3.Xsqlite3_log(tls, SQLITE_IOERR|int32(32)<<8, 12038 ts+4109, 12039 libc.VaList(bp, iOfst, (*CksmFile)(unsafe.Pointer(p)).FzFName)) 12040 rc = SQLITE_IOERR | int32(32)<<8 12041 } 12042 } 12043 } 12044 return rc 12045 } 12046 12047 func cksmWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 12048 var p uintptr = pFile 12049 pFile = pFile + uintptr(1)*32 12050 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 12051 var d uintptr = zBuf 12052 var hasCorrectReserveSize uint8 = uint8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 12053 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 12054 } 12055 12056 if iAmt >= 512 && 12057 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && 12058 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 12059 cksmCompute(tls, zBuf, iAmt-8, zBuf+uintptr(iAmt)-uintptr(8)) 12060 } 12061 return (*struct { 12062 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 12063 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, zBuf, iAmt, iOfst) 12064 } 12065 12066 func cksmTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 12067 pFile = pFile + uintptr(1)*32 12068 return (*struct { 12069 f func(*libc.TLS, uintptr, sqlite3_int64) int32 12070 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxTruncate})).f(tls, pFile, size) 12071 } 12072 12073 func cksmSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 12074 pFile = pFile + uintptr(1)*32 12075 return (*struct { 12076 f func(*libc.TLS, uintptr, int32) int32 12077 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 12078 } 12079 12080 func cksmFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 12081 var p uintptr = pFile 12082 pFile = p + uintptr(1)*32 12083 return (*struct { 12084 f func(*libc.TLS, uintptr, uintptr) int32 12085 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileSize})).f(tls, pFile, pSize) 12086 } 12087 12088 func cksmLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 12089 pFile = pFile + uintptr(1)*32 12090 return (*struct { 12091 f func(*libc.TLS, uintptr, int32) int32 12092 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 12093 } 12094 12095 func cksmUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 12096 pFile = pFile + uintptr(1)*32 12097 return (*struct { 12098 f func(*libc.TLS, uintptr, int32) int32 12099 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 12100 } 12101 12102 func cksmCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 12103 pFile = pFile + uintptr(1)*32 12104 return (*struct { 12105 f func(*libc.TLS, uintptr, uintptr) int32 12106 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 12107 } 12108 12109 func cksmFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 12110 bp := tls.Alloc(16) 12111 defer tls.Free(16) 12112 12113 var rc int32 12114 var p uintptr = pFile 12115 pFile = pFile + uintptr(1)*32 12116 if op == SQLITE_FCNTL_PRAGMA { 12117 var azArg uintptr = pArg 12118 12119 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4144) == 0 { 12120 var zArg uintptr = *(*uintptr)(unsafe.Pointer(azArg + 2*8)) 12121 if zArg != uintptr(0) { 12122 if int32(*(*uint8)(unsafe.Pointer(zArg))) >= '1' && int32(*(*uint8)(unsafe.Pointer(zArg))) <= '9' || 12123 sqlite3.Xsqlite3_strlike(tls, ts+4166, zArg, uint32(0)) == 0 || 12124 sqlite3.Xsqlite3_stricmp(tls, ts+4174, zArg) == 0 || 12125 sqlite3.Xsqlite3_stricmp(tls, ts+4178, zArg) == 0 { 12126 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm 12127 } else { 12128 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = uint8(0) 12129 } 12130 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12131 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FverifyCksm 12132 } 12133 } 12134 *(*uintptr)(unsafe.Pointer(azArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, int32((*CksmFile)(unsafe.Pointer(p)).FverifyCksm))) 12135 return SQLITE_OK 12136 } else if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && *(*uintptr)(unsafe.Pointer(azArg + 2*8)) != uintptr(0) && 12137 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4181) == 0 { 12138 return SQLITE_OK 12139 } 12140 } else if op == SQLITE_FCNTL_CKPT_START || op == SQLITE_FCNTL_CKPT_DONE { 12141 (*CksmFile)(unsafe.Pointer(p)).FinCkpt = uint8(libc.Bool32(op == SQLITE_FCNTL_CKPT_START)) 12142 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12143 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FinCkpt = (*CksmFile)(unsafe.Pointer(p)).FinCkpt 12144 } 12145 } else if op == SQLITE_FCNTL_CKSM_FILE { 12146 var ppFile uintptr = pArg 12147 *(*uintptr)(unsafe.Pointer(ppFile)) = p 12148 return SQLITE_OK 12149 } 12150 rc = (*struct { 12151 f func(*libc.TLS, uintptr, int32, uintptr) int32 12152 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 12153 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 12154 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+4191, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(pArg)))) 12155 } 12156 return rc 12157 } 12158 12159 func cksmSectorSize(tls *libc.TLS, pFile uintptr) int32 { 12160 pFile = pFile + uintptr(1)*32 12161 return (*struct { 12162 f func(*libc.TLS, uintptr) int32 12163 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 12164 } 12165 12166 func cksmDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 12167 pFile = pFile + uintptr(1)*32 12168 return (*struct { 12169 f func(*libc.TLS, uintptr) int32 12170 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 12171 } 12172 12173 func cksmShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 12174 pFile = pFile + uintptr(1)*32 12175 return (*struct { 12176 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 12177 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 12178 } 12179 12180 func cksmShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 12181 pFile = pFile + uintptr(1)*32 12182 return (*struct { 12183 f func(*libc.TLS, uintptr, int32, int32, int32) int32 12184 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 12185 } 12186 12187 func cksmShmBarrier(tls *libc.TLS, pFile uintptr) { 12188 pFile = pFile + uintptr(1)*32 12189 (*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) 12190 } 12191 12192 func cksmShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 12193 pFile = pFile + uintptr(1)*32 12194 return (*struct { 12195 f func(*libc.TLS, uintptr, int32) int32 12196 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 12197 } 12198 12199 func cksmFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 12200 var p uintptr = pFile 12201 if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 { 12202 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 12203 return SQLITE_OK 12204 } 12205 pFile = pFile + uintptr(1)*32 12206 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 { 12207 return (*struct { 12208 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 12209 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch})).f(tls, pFile, iOfst, iAmt, pp) 12210 } 12211 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 12212 return SQLITE_OK 12213 } 12214 12215 func cksmUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 12216 pFile = pFile + uintptr(1)*32 12217 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 { 12218 return (*struct { 12219 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 12220 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch})).f(tls, pFile, iOfst, pPage) 12221 } 12222 return SQLITE_OK 12223 } 12224 12225 func cksmOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 12226 bp := tls.Alloc(8) 12227 defer tls.Free(8) 12228 12229 var p uintptr 12230 var pSubFile uintptr 12231 var pSubVfs uintptr 12232 var rc int32 12233 12234 pSubVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 12235 if !(flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0) { 12236 goto __1 12237 } 12238 return (*struct { 12239 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 12240 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pFile, flags, pOutFlags) 12241 __1: 12242 ; 12243 p = pFile 12244 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CksmFile{}))) 12245 pSubFile = pFile + uintptr(1)*32 12246 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&cksm_io_methods)) 12247 rc = (*struct { 12248 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 12249 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pSubFile, flags, pOutFlags) 12250 if !(rc != 0) { 12251 goto __2 12252 } 12253 goto cksm_open_done 12254 __2: 12255 ; 12256 if !(flags&SQLITE_OPEN_WAL != 0) { 12257 goto __3 12258 } 12259 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_database_file_object(tls, zName) 12260 rc = (*struct { 12261 f func(*libc.TLS, uintptr, int32, uintptr) int32 12262 })(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) 12263 12264 (*CksmFile)(unsafe.Pointer(p)).FpPartner = *(*uintptr)(unsafe.Pointer(bp)) 12265 12266 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = p 12267 (*CksmFile)(unsafe.Pointer(p)).FisWal = uint8(1) 12268 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm 12269 goto __4 12270 __3: 12271 (*CksmFile)(unsafe.Pointer(p)).FisWal = uint8(0) 12272 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = uint8(0) 12273 __4: 12274 ; 12275 (*CksmFile)(unsafe.Pointer(p)).FzFName = zName 12276 cksm_open_done: 12277 if !(rc != 0) { 12278 goto __5 12279 } 12280 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 12281 __5: 12282 ; 12283 return rc 12284 } 12285 12286 func cksmDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 12287 return (*struct { 12288 f func(*libc.TLS, uintptr, uintptr, int32) int32 12289 })(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) 12290 } 12291 12292 func cksmAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 12293 return (*struct { 12294 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 12295 })(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) 12296 } 12297 12298 func cksmFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 12299 return (*struct { 12300 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 12301 })(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) 12302 } 12303 12304 func cksmDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 12305 return (*struct { 12306 f func(*libc.TLS, uintptr, uintptr) uintptr 12307 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 12308 } 12309 12310 func cksmDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 12311 (*struct { 12312 f func(*libc.TLS, uintptr, int32, uintptr) 12313 })(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) 12314 } 12315 12316 func cksmDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 12317 return (*struct { 12318 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 12319 })(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) 12320 } 12321 12322 func cksmDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 12323 (*struct { 12324 f func(*libc.TLS, uintptr, uintptr) 12325 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 12326 } 12327 12328 func cksmRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 12329 return (*struct { 12330 f func(*libc.TLS, uintptr, int32, uintptr) int32 12331 })(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) 12332 } 12333 12334 func cksmSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 12335 return (*struct { 12336 f func(*libc.TLS, uintptr, int32) int32 12337 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 12338 } 12339 12340 func cksmCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 12341 return (*struct { 12342 f func(*libc.TLS, uintptr, uintptr) int32 12343 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 12344 } 12345 12346 func cksmGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 12347 return (*struct { 12348 f func(*libc.TLS, uintptr, int32, uintptr) int32 12349 })(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) 12350 } 12351 12352 func cksmCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 12353 bp := tls.Alloc(8) 12354 defer tls.Free(8) 12355 12356 var pOrig uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 12357 var rc int32 12358 12359 if (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64 != 0 { 12360 rc = (*struct { 12361 f func(*libc.TLS, uintptr, uintptr) int32 12362 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64})).f(tls, pOrig, p) 12363 } else { 12364 rc = (*struct { 12365 f func(*libc.TLS, uintptr, uintptr) int32 12366 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTime})).f(tls, pOrig, bp) 12367 *(*sqlite3_int64)(unsafe.Pointer(p)) = libc.Int64FromFloat64(*(*float64)(unsafe.Pointer(bp)) * 86400000.0) 12368 } 12369 return rc 12370 } 12371 12372 func cksmSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 12373 return (*struct { 12374 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 12375 })(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) 12376 } 12377 12378 func cksmGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 12379 return (*struct { 12380 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 12381 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 12382 } 12383 12384 func cksmNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 12385 return (*struct { 12386 f func(*libc.TLS, uintptr, uintptr) uintptr 12387 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 12388 } 12389 12390 func cksmRegisterFunc(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 12391 var rc int32 12392 if db == uintptr(0) { 12393 return SQLITE_OK 12394 } 12395 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4199, 1, 12396 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 12397 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 12398 f func(*libc.TLS, uintptr, int32, uintptr) 12399 }{cksmVerifyFunc})), uintptr(0), uintptr(0)) 12400 return rc 12401 } 12402 12403 func cksmRegisterVfs(tls *libc.TLS) int32 { 12404 var rc int32 = SQLITE_OK 12405 var pOrig uintptr 12406 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != uintptr(0) { 12407 return SQLITE_OK 12408 } 12409 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 12410 if pOrig == uintptr(0) { 12411 return SQLITE_ERROR 12412 } 12413 cksm_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 12414 cksm_vfs.FpAppData = pOrig 12415 cksm_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(CksmFile{}))) 12416 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&cksm_vfs)), 1) 12417 if rc == SQLITE_OK { 12418 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 12419 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 12420 }{cksmRegisterFunc}))) 12421 } 12422 return rc 12423 } 12424 12425 func sqlite3_register_cksumvfs(tls *libc.TLS, NotUsed uintptr) int32 { 12426 _ = NotUsed 12427 return cksmRegisterVfs(tls) 12428 } 12429 12430 func sqlite3_unregister_cksumvfs(tls *libc.TLS) int32 { 12431 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != 0 { 12432 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&cksm_vfs))) 12433 sqlite3.Xsqlite3_cancel_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 12434 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 12435 }{cksmRegisterFunc}))) 12436 } 12437 return SQLITE_OK 12438 } 12439 12440 type closure_vtab1 = struct { 12441 Fbase sqlite3_vtab 12442 FzDb uintptr 12443 FzSelf uintptr 12444 FzTableName uintptr 12445 FzIdColumn uintptr 12446 FzParentColumn uintptr 12447 Fdb uintptr 12448 FnCursor int32 12449 F__ccgo_pad1 [4]byte 12450 } 12451 12452 type closure_vtab = closure_vtab1 12453 type closure_cursor1 = struct { 12454 Fbase sqlite3_vtab_cursor 12455 FpVtab uintptr 12456 FzTableName uintptr 12457 FzIdColumn uintptr 12458 FzParentColumn uintptr 12459 FpCurrent uintptr 12460 FpClosure uintptr 12461 } 12462 12463 type closure_cursor = closure_cursor1 12464 type closure_queue1 = struct { 12465 FpFirst uintptr 12466 FpLast uintptr 12467 } 12468 12469 type closure_queue = closure_queue1 12470 type closure_avl1 = struct { 12471 Fid sqlite3_int64 12472 FiGeneration int32 12473 F__ccgo_pad1 [4]byte 12474 FpList uintptr 12475 FpBefore uintptr 12476 FpAfter uintptr 12477 FpUp uintptr 12478 Fheight int16 12479 Fimbalance int16 12480 F__ccgo_pad2 [4]byte 12481 } 12482 12483 type closure_avl = closure_avl1 12484 12485 func closureAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 12486 var hBefore int16 12487 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12488 hBefore = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 12489 } else { 12490 hBefore = int16(0) 12491 } 12492 var hAfter int16 12493 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12494 hAfter = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 12495 } else { 12496 hAfter = int16(0) 12497 } 12498 (*closure_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 12499 (*closure_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 12500 if int32(hBefore) > int32(hAfter) { 12501 return int32(hBefore) 12502 } 12503 return int32(hAfter) 12504 }() + 1) 12505 } 12506 12507 func closureAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 12508 var pB uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpBefore 12509 var pY uintptr = (*closure_avl)(unsafe.Pointer(pB)).FpAfter 12510 (*closure_avl)(unsafe.Pointer(pB)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 12511 (*closure_avl)(unsafe.Pointer(pB)).FpAfter = pP 12512 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pB 12513 (*closure_avl)(unsafe.Pointer(pP)).FpBefore = pY 12514 if pY != 0 { 12515 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 12516 } 12517 closureAvlRecomputeHeight(tls, pP) 12518 closureAvlRecomputeHeight(tls, pB) 12519 return pB 12520 } 12521 12522 func closureAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 12523 var pA uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpAfter 12524 var pY uintptr = (*closure_avl)(unsafe.Pointer(pA)).FpBefore 12525 (*closure_avl)(unsafe.Pointer(pA)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 12526 (*closure_avl)(unsafe.Pointer(pA)).FpBefore = pP 12527 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pA 12528 (*closure_avl)(unsafe.Pointer(pP)).FpAfter = pY 12529 if pY != 0 { 12530 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 12531 } 12532 closureAvlRecomputeHeight(tls, pP) 12533 closureAvlRecomputeHeight(tls, pA) 12534 return pA 12535 } 12536 12537 func closureAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 12538 var pUp uintptr = (*closure_avl)(unsafe.Pointer(p)).FpUp 12539 if pUp == uintptr(0) { 12540 return pp 12541 } 12542 if (*closure_avl)(unsafe.Pointer(pUp)).FpAfter == p { 12543 return pUp + 32 12544 } 12545 return pUp + 24 12546 } 12547 12548 func closureAvlBalance(tls *libc.TLS, p uintptr) uintptr { 12549 bp := tls.Alloc(8) 12550 defer tls.Free(8) 12551 *(*uintptr)(unsafe.Pointer(bp)) = p 12552 12553 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 12554 var pp uintptr 12555 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 12556 closureAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 12557 if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 12558 var pB uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 12559 if int32((*closure_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 12560 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = closureAvlRotateAfter(tls, pB) 12561 } 12562 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12563 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12564 } else if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 12565 var pA uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 12566 if int32((*closure_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 12567 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = closureAvlRotateBefore(tls, pA) 12568 } 12569 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12570 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12571 } 12572 pTop = *(*uintptr)(unsafe.Pointer(bp)) 12573 *(*uintptr)(unsafe.Pointer(bp)) = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 12574 } 12575 return pTop 12576 } 12577 12578 func closureAvlSearch(tls *libc.TLS, p uintptr, id sqlite3_int64) uintptr { 12579 for p != 0 && id != (*closure_avl)(unsafe.Pointer(p)).Fid { 12580 if id < (*closure_avl)(unsafe.Pointer(p)).Fid { 12581 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12582 } else { 12583 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 12584 } 12585 } 12586 return p 12587 } 12588 12589 func closureAvlFirst(tls *libc.TLS, p uintptr) uintptr { 12590 if p != 0 { 12591 for (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12592 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12593 } 12594 } 12595 return p 12596 } 12597 12598 func closureAvlNext(tls *libc.TLS, p uintptr) uintptr { 12599 var pPrev uintptr = uintptr(0) 12600 for p != 0 && (*closure_avl)(unsafe.Pointer(p)).FpAfter == pPrev { 12601 pPrev = p 12602 p = (*closure_avl)(unsafe.Pointer(p)).FpUp 12603 } 12604 if p != 0 && pPrev == uintptr(0) { 12605 p = closureAvlFirst(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter) 12606 } 12607 return p 12608 } 12609 12610 func closureAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 12611 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 12612 if p == uintptr(0) { 12613 p = pNew 12614 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 12615 } else { 12616 for p != 0 { 12617 if (*closure_avl)(unsafe.Pointer(pNew)).Fid < (*closure_avl)(unsafe.Pointer(p)).Fid { 12618 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12619 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12620 } else { 12621 (*closure_avl)(unsafe.Pointer(p)).FpBefore = pNew 12622 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 12623 break 12624 } 12625 } else if (*closure_avl)(unsafe.Pointer(pNew)).Fid > (*closure_avl)(unsafe.Pointer(p)).Fid { 12626 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12627 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 12628 } else { 12629 (*closure_avl)(unsafe.Pointer(p)).FpAfter = pNew 12630 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 12631 break 12632 } 12633 } else { 12634 return p 12635 } 12636 } 12637 } 12638 (*closure_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 12639 (*closure_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 12640 (*closure_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 12641 (*closure_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 12642 *(*uintptr)(unsafe.Pointer(ppHead)) = closureAvlBalance(tls, p) 12643 return uintptr(0) 12644 } 12645 12646 func closureAvlDestroy(tls *libc.TLS, p uintptr, xDestroy uintptr) { 12647 if p != 0 { 12648 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpBefore, xDestroy) 12649 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter, xDestroy) 12650 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, p) 12651 } 12652 } 12653 12654 func queuePush(tls *libc.TLS, pQueue uintptr, pNode uintptr) { 12655 (*closure_avl)(unsafe.Pointer(pNode)).FpList = uintptr(0) 12656 if (*closure_queue)(unsafe.Pointer(pQueue)).FpLast != 0 { 12657 (*closure_avl)(unsafe.Pointer((*closure_queue)(unsafe.Pointer(pQueue)).FpLast)).FpList = pNode 12658 } else { 12659 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = pNode 12660 } 12661 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = pNode 12662 } 12663 12664 func queuePull(tls *libc.TLS, pQueue uintptr) uintptr { 12665 var p uintptr = (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst 12666 if p != 0 { 12667 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = (*closure_avl)(unsafe.Pointer(p)).FpList 12668 if (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst == uintptr(0) { 12669 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = uintptr(0) 12670 } 12671 } 12672 return p 12673 } 12674 12675 func closureDequote(tls *libc.TLS, zIn uintptr) uintptr { 12676 var nIn sqlite3_int64 12677 var zOut uintptr 12678 12679 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 12680 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 12681 if zOut != 0 { 12682 var q uint8 = *(*uint8)(unsafe.Pointer(zIn)) 12683 12684 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 12685 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 12686 } else { 12687 var iOut int32 = 0 12688 var iIn int32 12689 12690 if int32(q) == '[' { 12691 q = uint8(']') 12692 } 12693 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 12694 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 12695 iIn++ 12696 } 12697 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(zIn + uintptr(iIn))) 12698 } 12699 } 12700 12701 } 12702 return zOut 12703 } 12704 12705 func closureFree(tls *libc.TLS, p uintptr) { 12706 if p != 0 { 12707 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzDb) 12708 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzSelf) 12709 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzTableName) 12710 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzIdColumn) 12711 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzParentColumn) 12712 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 12713 sqlite3.Xsqlite3_free(tls, p) 12714 } 12715 } 12716 12717 func closureDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 12718 var p uintptr = pVtab 12719 12720 closureFree(tls, p) 12721 return SQLITE_OK 12722 } 12723 12724 func closureValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 12725 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 12726 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 12727 var i int32 12728 if nStr < nKey+1 { 12729 return uintptr(0) 12730 } 12731 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 12732 return uintptr(0) 12733 } 12734 for i = nKey; int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))))*2)))&int32(_ISspace) != 0; i++ { 12735 } 12736 if int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 12737 return uintptr(0) 12738 } 12739 i++ 12740 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))))*2)))&int32(_ISspace) != 0 { 12741 i++ 12742 } 12743 return zStr + uintptr(i) 12744 } 12745 12746 func closureConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 12747 bp := tls.Alloc(24) 12748 defer tls.Free(24) 12749 12750 var rc int32 12751 var pNew uintptr 12752 var zDb uintptr 12753 var zVal uintptr 12754 var i int32 12755 rc = SQLITE_OK 12756 pNew = uintptr(0) 12757 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 12758 12759 _ = pAux 12760 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12761 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_vtab{}))) 12762 if !(pNew == uintptr(0)) { 12763 goto __1 12764 } 12765 return SQLITE_NOMEM 12766 __1: 12767 ; 12768 rc = SQLITE_NOMEM 12769 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 12770 (*closure_vtab)(unsafe.Pointer(pNew)).Fdb = db 12771 (*closure_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zDb)) 12772 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 12773 goto __2 12774 } 12775 goto closureConnectError 12776 __2: 12777 ; 12778 (*closure_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 12779 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 12780 goto __3 12781 } 12782 goto closureConnectError 12783 __3: 12784 ; 12785 i = 3 12786 __4: 12787 if !(i < argc) { 12788 goto __6 12789 } 12790 zVal = closureValueOfKey(tls, ts+4215, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12791 if !(zVal != 0) { 12792 goto __7 12793 } 12794 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName) 12795 (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName = closureDequote(tls, zVal) 12796 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0)) { 12797 goto __8 12798 } 12799 goto closureConnectError 12800 __8: 12801 ; 12802 goto __5 12803 __7: 12804 ; 12805 zVal = closureValueOfKey(tls, ts+4225, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12806 if !(zVal != 0) { 12807 goto __9 12808 } 12809 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn) 12810 (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn = closureDequote(tls, zVal) 12811 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn == uintptr(0)) { 12812 goto __10 12813 } 12814 goto closureConnectError 12815 __10: 12816 ; 12817 goto __5 12818 __9: 12819 ; 12820 zVal = closureValueOfKey(tls, ts+4234, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 12821 if !(zVal != 0) { 12822 goto __11 12823 } 12824 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn) 12825 (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn = closureDequote(tls, zVal) 12826 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn == uintptr(0)) { 12827 goto __12 12828 } 12829 goto closureConnectError 12830 __12: 12831 ; 12832 goto __5 12833 __11: 12834 ; 12835 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 12836 closureFree(tls, pNew) 12837 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 12838 return SQLITE_ERROR 12839 goto __5 12840 __5: 12841 i++ 12842 goto __4 12843 goto __6 12844 __6: 12845 ; 12846 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 12847 ts+4247) 12848 if !(rc != SQLITE_OK) { 12849 goto __13 12850 } 12851 closureFree(tls, pNew) 12852 __13: 12853 ; 12854 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 12855 return rc 12856 12857 closureConnectError: 12858 closureFree(tls, pNew) 12859 return rc 12860 } 12861 12862 func closureOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 12863 var p uintptr = pVTab 12864 var pCur uintptr 12865 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_cursor{}))) 12866 if pCur == uintptr(0) { 12867 return SQLITE_NOMEM 12868 } 12869 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(closure_cursor{}))) 12870 (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab = p 12871 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 12872 (*closure_vtab)(unsafe.Pointer(p)).FnCursor++ 12873 return SQLITE_OK 12874 } 12875 12876 func closureClearCursor(tls *libc.TLS, pCur uintptr) { 12877 closureAvlDestroy(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 12878 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName) 12879 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn) 12880 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn) 12881 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = uintptr(0) 12882 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = uintptr(0) 12883 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = uintptr(0) 12884 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 12885 (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure = uintptr(0) 12886 } 12887 12888 func closureClose(tls *libc.TLS, cur uintptr) int32 { 12889 var pCur uintptr = cur 12890 closureClearCursor(tls, pCur) 12891 (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 12892 sqlite3.Xsqlite3_free(tls, pCur) 12893 return SQLITE_OK 12894 } 12895 12896 func closureNext(tls *libc.TLS, cur uintptr) int32 { 12897 var pCur uintptr = cur 12898 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlNext(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent) 12899 return SQLITE_OK 12900 } 12901 12902 func closureInsertNode(tls *libc.TLS, pQueue uintptr, pCur uintptr, id sqlite3_int64, iGeneration int32) int32 { 12903 var pNew uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_avl{}))) 12904 if pNew == uintptr(0) { 12905 return SQLITE_NOMEM 12906 } 12907 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_avl{}))) 12908 (*closure_avl)(unsafe.Pointer(pNew)).Fid = id 12909 (*closure_avl)(unsafe.Pointer(pNew)).FiGeneration = iGeneration 12910 closureAvlInsert(tls, pCur+48, pNew) 12911 queuePush(tls, pQueue, pNew) 12912 return SQLITE_OK 12913 } 12914 12915 func closureFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 12916 bp := tls.Alloc(96) 12917 defer tls.Free(96) 12918 12919 var pCur uintptr = pVtabCursor 12920 var pVtab uintptr = (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab 12921 var iRoot sqlite3_int64 12922 var mxGen int32 = 999999999 12923 var zSql uintptr 12924 12925 var pAvl uintptr 12926 var rc int32 = SQLITE_OK 12927 var zTableName uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName 12928 var zIdColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn 12929 var zParentColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn 12930 12931 _ = idxStr 12932 _ = argc 12933 closureClearCursor(tls, pCur) 12934 libc.Xmemset(tls, bp+72, 0, uint64(unsafe.Sizeof(closure_queue{}))) 12935 if idxNum&1 == 0 { 12936 return SQLITE_OK 12937 } 12938 iRoot = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 12939 if idxNum&0x000f0 != 0 { 12940 mxGen = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>4&0x0f)*8))) 12941 if idxNum&0x00002 != 0 { 12942 mxGen-- 12943 } 12944 } 12945 if idxNum&0x00f00 != 0 { 12946 zTableName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>8&0x0f)*8))) 12947 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 12948 } 12949 if idxNum&0x0f000 != 0 { 12950 zIdColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>12&0x0f)*8))) 12951 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zIdColumn)) 12952 } 12953 if idxNum&0x0f0000 != 0 { 12954 zParentColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>16&0x0f)*8))) 12955 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zParentColumn)) 12956 } 12957 12958 zSql = sqlite3.Xsqlite3_mprintf(tls, 12959 ts+4337, 12960 libc.VaList(bp+24, zTableName, zIdColumn, zTableName, zTableName, zParentColumn)) 12961 if zSql == uintptr(0) { 12962 return SQLITE_NOMEM 12963 } else { 12964 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, bp+88, uintptr(0)) 12965 sqlite3.Xsqlite3_free(tls, zSql) 12966 if rc != 0 { 12967 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fbase.FzErrMsg) 12968 (*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))) 12969 return rc 12970 } 12971 } 12972 if rc == SQLITE_OK { 12973 rc = closureInsertNode(tls, bp+72, pCur, iRoot, 0) 12974 } 12975 for libc.AssignUintptr(&pAvl, queuePull(tls, bp+72)) != uintptr(0) { 12976 if (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration >= mxGen { 12977 continue 12978 } 12979 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 1, (*closure_avl)(unsafe.Pointer(pAvl)).Fid) 12980 for rc == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) == SQLITE_ROW { 12981 if sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) == SQLITE_INTEGER { 12982 var iNew sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) 12983 if closureAvlSearch(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, iNew) == uintptr(0) { 12984 rc = closureInsertNode(tls, bp+72, pCur, iNew, (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration+1) 12985 } 12986 } 12987 } 12988 sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 12989 } 12990 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 12991 if rc == SQLITE_OK { 12992 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlFirst(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure) 12993 } 12994 12995 return rc 12996 } 12997 12998 func closureColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 12999 var pCur uintptr = cur 13000 switch i { 13001 case CLOSURE_COL_ID: 13002 { 13003 sqlite3.Xsqlite3_result_int64(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid) 13004 break 13005 13006 } 13007 case CLOSURE_COL_DEPTH: 13008 { 13009 sqlite3.Xsqlite3_result_int(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FiGeneration) 13010 break 13011 13012 } 13013 case CLOSURE_COL_ROOT: 13014 { 13015 sqlite3.Xsqlite3_result_null(tls, ctx) 13016 break 13017 13018 } 13019 case CLOSURE_COL_TABLENAME: 13020 { 13021 sqlite3.Xsqlite3_result_text(tls, ctx, 13022 func() uintptr { 13023 if (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName != 0 { 13024 return (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName 13025 } 13026 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzTableName 13027 }(), 13028 -1, libc.UintptrFromInt32(-1)) 13029 break 13030 13031 } 13032 case CLOSURE_COL_IDCOLUMN: 13033 { 13034 sqlite3.Xsqlite3_result_text(tls, ctx, 13035 func() uintptr { 13036 if (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn != 0 { 13037 return (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn 13038 } 13039 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzIdColumn 13040 }(), 13041 -1, libc.UintptrFromInt32(-1)) 13042 break 13043 13044 } 13045 case CLOSURE_COL_PARENTCOLUMN: 13046 { 13047 sqlite3.Xsqlite3_result_text(tls, ctx, 13048 func() uintptr { 13049 if (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn != 0 { 13050 return (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn 13051 } 13052 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzParentColumn 13053 }(), 13054 -1, libc.UintptrFromInt32(-1)) 13055 break 13056 13057 } 13058 } 13059 return SQLITE_OK 13060 } 13061 13062 func closureRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13063 var pCur uintptr = cur 13064 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid 13065 return SQLITE_OK 13066 } 13067 13068 func closureEof(tls *libc.TLS, cur uintptr) int32 { 13069 var pCur uintptr = cur 13070 return libc.Bool32((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 13071 } 13072 13073 func closureBestIndex(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) int32 { 13074 var iPlan int32 = 0 13075 var i int32 13076 var idx int32 = 1 13077 var pConstraint uintptr 13078 var pVtab uintptr = pTab 13079 var rCost float64 = 10000000.0 13080 13081 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 13082 i = 0 13083 __1: 13084 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 13085 goto __3 13086 } 13087 { 13088 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 13089 goto __2 13090 } 13091 if iPlan&1 == 0 && 13092 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_ROOT && 13093 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13094 iPlan = iPlan | 1 13095 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 13096 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13097 rCost = rCost / 100.0 13098 } 13099 if iPlan&0x0000f0 == 0 && 13100 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_DEPTH && 13101 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 13102 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE || 13103 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 13104 iPlan = iPlan | idx<<4 13105 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13106 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 13107 iPlan = iPlan | 0x000002 13108 } 13109 rCost = rCost / 5.0 13110 } 13111 if iPlan&0x000f00 == 0 && 13112 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_TABLENAME && 13113 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13114 iPlan = iPlan | idx<<8 13115 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13116 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13117 rCost = rCost / 5.0 13118 } 13119 if iPlan&0x00f000 == 0 && 13120 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_IDCOLUMN && 13121 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13122 iPlan = iPlan | idx<<12 13123 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13124 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13125 } 13126 if iPlan&0x0f0000 == 0 && 13127 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_PARENTCOLUMN && 13128 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13129 iPlan = iPlan | idx<<16 13130 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13131 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13132 } 13133 13134 } 13135 goto __2 13136 __2: 13137 i++ 13138 pConstraint += 12 13139 goto __1 13140 goto __3 13141 __3: 13142 ; 13143 if (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName == uintptr(0) && iPlan&0x000f00 == 0 || 13144 (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn == uintptr(0) && iPlan&0x00f000 == 0 || 13145 (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn == uintptr(0) && iPlan&0x0f0000 == 0 { 13146 iPlan = 0 13147 } 13148 if iPlan&1 == 0 { 13149 rCost = rCost * 1e30 13150 i = 0 13151 __4: 13152 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 13153 goto __6 13154 } 13155 { 13156 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 0 13157 13158 } 13159 goto __5 13160 __5: 13161 i++ 13162 pConstraint += 12 13163 goto __4 13164 goto __6 13165 __6: 13166 ; 13167 iPlan = 0 13168 } 13169 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 13170 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 13171 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == CLOSURE_COL_ID && 13172 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 13173 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 13174 } 13175 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 13176 13177 return SQLITE_OK 13178 } 13179 13180 var closureModule = sqlite3_module{ 13181 FxCreate: 0, 13182 FxConnect: 0, 13183 FxBestIndex: 0, 13184 FxDisconnect: 0, 13185 FxDestroy: 0, 13186 FxOpen: 0, 13187 FxClose: 0, 13188 FxFilter: 0, 13189 FxNext: 0, 13190 FxEof: 0, 13191 FxColumn: 0, 13192 FxRowid: 0, 13193 } 13194 13195 func sqlite3_closure_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 13196 var rc int32 = SQLITE_OK 13197 _ = pApi 13198 13199 _ = pzErrMsg 13200 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4383, uintptr(unsafe.Pointer(&closureModule)), uintptr(0)) 13201 return rc 13202 } 13203 13204 type CsvReader1 = struct { 13205 Fin uintptr 13206 Fz uintptr 13207 Fn int32 13208 FnAlloc int32 13209 FnLine int32 13210 FbNotFirst int32 13211 FcTerm int32 13212 F__ccgo_pad1 [4]byte 13213 FiIn size_t 13214 FnIn size_t 13215 FzIn uintptr 13216 FzErr [200]uint8 13217 } 13218 13219 type CsvReader = CsvReader1 13220 13221 func csv_reader_init(tls *libc.TLS, p uintptr) { 13222 (*CsvReader)(unsafe.Pointer(p)).Fin = uintptr(0) 13223 (*CsvReader)(unsafe.Pointer(p)).Fz = uintptr(0) 13224 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13225 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = 0 13226 (*CsvReader)(unsafe.Pointer(p)).FnLine = 0 13227 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 0 13228 (*CsvReader)(unsafe.Pointer(p)).FnIn = uint64(0) 13229 (*CsvReader)(unsafe.Pointer(p)).FzIn = uintptr(0) 13230 *(*uint8)(unsafe.Pointer(p + 64)) = uint8(0) 13231 } 13232 13233 func csv_reader_reset(tls *libc.TLS, p uintptr) { 13234 if (*CsvReader)(unsafe.Pointer(p)).Fin != 0 { 13235 libc.Xfclose(tls, (*CsvReader)(unsafe.Pointer(p)).Fin) 13236 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 13237 } 13238 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).Fz) 13239 csv_reader_init(tls, p) 13240 } 13241 13242 func csv_errmsg(tls *libc.TLS, p uintptr, zFormat uintptr, va uintptr) { 13243 var ap va_list 13244 _ = ap 13245 ap = va 13246 sqlite3.Xsqlite3_vsnprintf(tls, CSV_MXERR, p+64, zFormat, ap) 13247 _ = ap 13248 } 13249 13250 func csv_reader_open(tls *libc.TLS, p uintptr, zFilename uintptr, zData uintptr) int32 { 13251 bp := tls.Alloc(8) 13252 defer tls.Free(8) 13253 13254 if zFilename != 0 { 13255 (*CsvReader)(unsafe.Pointer(p)).FzIn = sqlite3.Xsqlite3_malloc(tls, CSV_INBUFSZ) 13256 if (*CsvReader)(unsafe.Pointer(p)).FzIn == uintptr(0) { 13257 csv_errmsg(tls, p, ts+2069, 0) 13258 return 1 13259 } 13260 (*CsvReader)(unsafe.Pointer(p)).Fin = libc.Xfopen(tls, zFilename, ts+4402) 13261 if (*CsvReader)(unsafe.Pointer(p)).Fin == uintptr(0) { 13262 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 13263 csv_reader_reset(tls, p) 13264 csv_errmsg(tls, p, ts+4405, libc.VaList(bp, zFilename)) 13265 return 1 13266 } 13267 } else { 13268 (*CsvReader)(unsafe.Pointer(p)).FzIn = zData 13269 (*CsvReader)(unsafe.Pointer(p)).FnIn = libc.Xstrlen(tls, zData) 13270 } 13271 return 0 13272 } 13273 13274 func csv_getc_refill(tls *libc.TLS, p uintptr) int32 { 13275 var got size_t 13276 13277 got = libc.Xfread(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn, uint64(1), uint64(CSV_INBUFSZ), (*CsvReader)(unsafe.Pointer(p)).Fin) 13278 if got == uint64(0) { 13279 return -1 13280 } 13281 (*CsvReader)(unsafe.Pointer(p)).FnIn = got 13282 (*CsvReader)(unsafe.Pointer(p)).FiIn = uint64(1) 13283 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn))) 13284 } 13285 13286 func csv_getc(tls *libc.TLS, p uintptr) int32 { 13287 if (*CsvReader)(unsafe.Pointer(p)).FiIn >= (*CsvReader)(unsafe.Pointer(p)).FnIn { 13288 if (*CsvReader)(unsafe.Pointer(p)).Fin != uintptr(0) { 13289 return csv_getc_refill(tls, p) 13290 } 13291 return -1 13292 } 13293 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn + uintptr(libc.PostIncUint64(&(*CsvReader)(unsafe.Pointer(p)).FiIn, 1))))) 13294 } 13295 13296 func csv_resize_and_append(tls *libc.TLS, p uintptr, c uint8) int32 { 13297 var zNew uintptr 13298 var nNew int32 = (*CsvReader)(unsafe.Pointer(p)).FnAlloc*2 + 100 13299 zNew = sqlite3.Xsqlite3_realloc64(tls, (*CsvReader)(unsafe.Pointer(p)).Fz, uint64(nNew)) 13300 if zNew != 0 { 13301 (*CsvReader)(unsafe.Pointer(p)).Fz = zNew 13302 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = nNew 13303 *(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 13304 return 0 13305 } else { 13306 csv_errmsg(tls, p, ts+2069, 0) 13307 return 1 13308 } 13309 return int32(0) 13310 } 13311 13312 func csv_append(tls *libc.TLS, p uintptr, c uint8) int32 { 13313 if (*CsvReader)(unsafe.Pointer(p)).Fn >= (*CsvReader)(unsafe.Pointer(p)).FnAlloc-1 { 13314 return csv_resize_and_append(tls, p, c) 13315 } 13316 *(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 13317 return 0 13318 } 13319 13320 func csv_read_one_field(tls *libc.TLS, p uintptr) uintptr { 13321 bp := tls.Alloc(32) 13322 defer tls.Free(32) 13323 13324 var c int32 13325 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13326 c = csv_getc(tls, p) 13327 if c == -1 { 13328 (*CsvReader)(unsafe.Pointer(p)).FcTerm = -1 13329 return uintptr(0) 13330 } 13331 if c == '"' { 13332 var pc int32 13333 var ppc int32 13334 var startLine int32 = (*CsvReader)(unsafe.Pointer(p)).FnLine 13335 pc = libc.AssignInt32(&ppc, 0) 13336 for 1 != 0 { 13337 c = csv_getc(tls, p) 13338 if c <= '"' || pc == '"' { 13339 if c == '\n' { 13340 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 13341 } 13342 if c == '"' { 13343 if pc == '"' { 13344 pc = 0 13345 continue 13346 } 13347 } 13348 if c == ',' && pc == '"' || 13349 c == '\n' && pc == '"' || 13350 c == '\n' && pc == '\r' && ppc == '"' || 13351 c == -1 && pc == '"' { 13352 for __ccgo := true; __ccgo; __ccgo = int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn)))) != '"' { 13353 (*CsvReader)(unsafe.Pointer(p)).Fn-- 13354 } 13355 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(uint8(c)) 13356 break 13357 } 13358 if pc == '"' && c != '\r' { 13359 csv_errmsg(tls, p, ts+4434, libc.VaList(bp, (*CsvReader)(unsafe.Pointer(p)).FnLine, '"')) 13360 break 13361 } 13362 if c == -1 { 13363 csv_errmsg(tls, p, ts+4466, 13364 libc.VaList(bp+16, startLine, '"')) 13365 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(uint8(c)) 13366 break 13367 } 13368 } 13369 if csv_append(tls, p, uint8(c)) != 0 { 13370 return uintptr(0) 13371 } 13372 ppc = pc 13373 pc = c 13374 } 13375 } else { 13376 if c&0xff == 0xef && (*CsvReader)(unsafe.Pointer(p)).FbNotFirst == 0 { 13377 csv_append(tls, p, uint8(c)) 13378 c = csv_getc(tls, p) 13379 if c&0xff == 0xbb { 13380 csv_append(tls, p, uint8(c)) 13381 c = csv_getc(tls, p) 13382 if c&0xff == 0xbf { 13383 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 13384 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13385 return csv_read_one_field(tls, p) 13386 } 13387 } 13388 } 13389 for c > ',' || c != -1 && c != ',' && c != '\n' { 13390 if csv_append(tls, p, uint8(c)) != 0 { 13391 return uintptr(0) 13392 } 13393 c = csv_getc(tls, p) 13394 } 13395 if c == '\n' { 13396 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 13397 if (*CsvReader)(unsafe.Pointer(p)).Fn > 0 && int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn-1)))) == '\r' { 13398 (*CsvReader)(unsafe.Pointer(p)).Fn-- 13399 } 13400 } 13401 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(uint8(c)) 13402 } 13403 if (*CsvReader)(unsafe.Pointer(p)).Fz != 0 { 13404 *(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn))) = uint8(0) 13405 } 13406 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 13407 return (*CsvReader)(unsafe.Pointer(p)).Fz 13408 } 13409 13410 type CsvTable1 = struct { 13411 Fbase sqlite3_vtab 13412 FzFilename uintptr 13413 FzData uintptr 13414 FiStart int64 13415 FnCol int32 13416 FtstFlags uint32 13417 } 13418 13419 type CsvTable = CsvTable1 13420 13421 type CsvCursor1 = struct { 13422 Fbase sqlite3_vtab_cursor 13423 Frdr CsvReader 13424 FazVal uintptr 13425 FaLen uintptr 13426 FiRowid sqlite3_int64 13427 } 13428 13429 type CsvCursor = CsvCursor1 13430 13431 func csv_xfer_error(tls *libc.TLS, pTab uintptr, pRdr uintptr) { 13432 bp := tls.Alloc(8) 13433 defer tls.Free(8) 13434 13435 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg) 13436 (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, pRdr+64)) 13437 } 13438 13439 func csvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 13440 var p uintptr = pVtab 13441 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzFilename) 13442 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzData) 13443 sqlite3.Xsqlite3_free(tls, p) 13444 return SQLITE_OK 13445 } 13446 13447 func csv_skip_whitespace(tls *libc.TLS, z uintptr) uintptr { 13448 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(z))))*2)))&int32(_ISspace) != 0 { 13449 z++ 13450 } 13451 return z 13452 } 13453 13454 func csv_trim_whitespace(tls *libc.TLS, z uintptr) { 13455 var n size_t = libc.Xstrlen(tls, z) 13456 for n > uint64(0) && int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(z + uintptr(n)))))*2)))&int32(_ISspace) != 0 { 13457 n-- 13458 } 13459 *(*uint8)(unsafe.Pointer(z + uintptr(n))) = uint8(0) 13460 } 13461 13462 func csv_dequote(tls *libc.TLS, z uintptr) { 13463 var j int32 13464 var cQuote uint8 = *(*uint8)(unsafe.Pointer(z)) 13465 var i size_t 13466 var n size_t 13467 13468 if int32(cQuote) != '\'' && int32(cQuote) != '"' { 13469 return 13470 } 13471 n = libc.Xstrlen(tls, z) 13472 if n < uint64(2) || int32(*(*uint8)(unsafe.Pointer(z + uintptr(n-uint64(1))))) != int32(*(*uint8)(unsafe.Pointer(z))) { 13473 return 13474 } 13475 i = uint64(1) 13476 j = 0 13477 for ; i < n-uint64(1); i++ { 13478 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == int32(cQuote) && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+uint64(1))))) == int32(cQuote) { 13479 i++ 13480 } 13481 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(i))) 13482 } 13483 *(*uint8)(unsafe.Pointer(z + uintptr(j))) = uint8(0) 13484 } 13485 13486 func csv_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr) uintptr { 13487 z = csv_skip_whitespace(tls, z) 13488 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 13489 return uintptr(0) 13490 } 13491 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 13492 if int32(*(*uint8)(unsafe.Pointer(z))) != '=' { 13493 return uintptr(0) 13494 } 13495 return csv_skip_whitespace(tls, z+uintptr(1)) 13496 } 13497 13498 func csv_string_parameter(tls *libc.TLS, p uintptr, zParam uintptr, zArg uintptr, pzVal uintptr) int32 { 13499 bp := tls.Alloc(16) 13500 defer tls.Free(16) 13501 13502 var zValue uintptr 13503 zValue = csv_parameter(tls, zParam, int32(libc.Xstrlen(tls, zParam)), zArg) 13504 if zValue == uintptr(0) { 13505 return 0 13506 } 13507 *(*uint8)(unsafe.Pointer(p + 64)) = uint8(0) 13508 if *(*uintptr)(unsafe.Pointer(pzVal)) != 0 { 13509 csv_errmsg(tls, p, ts+4505, libc.VaList(bp, zParam)) 13510 return 1 13511 } 13512 *(*uintptr)(unsafe.Pointer(pzVal)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zValue)) 13513 if *(*uintptr)(unsafe.Pointer(pzVal)) == uintptr(0) { 13514 csv_errmsg(tls, p, ts+2069, 0) 13515 return 1 13516 } 13517 csv_trim_whitespace(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 13518 csv_dequote(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 13519 return 1 13520 } 13521 13522 func csv_boolean(tls *libc.TLS, z uintptr) int32 { 13523 if sqlite3.Xsqlite3_stricmp(tls, ts+4174, z) == 0 || 13524 sqlite3.Xsqlite3_stricmp(tls, ts+4178, z) == 0 || 13525 sqlite3.Xsqlite3_stricmp(tls, ts+4534, z) == 0 || 13526 int32(*(*uint8)(unsafe.Pointer(z))) == '1' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == 0 { 13527 return 1 13528 } 13529 if sqlite3.Xsqlite3_stricmp(tls, ts+4539, z) == 0 || 13530 sqlite3.Xsqlite3_stricmp(tls, ts+4542, z) == 0 || 13531 sqlite3.Xsqlite3_stricmp(tls, ts+4546, z) == 0 || 13532 int32(*(*uint8)(unsafe.Pointer(z))) == '0' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == 0 { 13533 return 0 13534 } 13535 return -1 13536 } 13537 13538 func csv_boolean_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr, pValue uintptr) int32 { 13539 var b int32 13540 z = csv_skip_whitespace(tls, z) 13541 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 13542 return 0 13543 } 13544 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 13545 if int32(*(*uint8)(unsafe.Pointer(z))) == 0 { 13546 *(*int32)(unsafe.Pointer(pValue)) = 1 13547 return 1 13548 } 13549 if int32(*(*uint8)(unsafe.Pointer(z))) != '=' { 13550 return 0 13551 } 13552 z = csv_skip_whitespace(tls, z+uintptr(1)) 13553 b = csv_boolean(tls, z) 13554 if b >= 0 { 13555 *(*int32)(unsafe.Pointer(pValue)) = b 13556 return 1 13557 } 13558 return 0 13559 } 13560 13561 func csvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13562 bp := tls.Alloc(372) 13563 defer tls.Free(372) 13564 13565 var pNew uintptr 13566 var bHeader int32 13567 var rc int32 13568 var i int32 13569 var j int32 13570 var tstFlags int32 13571 13572 var nCol int32 13573 13574 var z uintptr 13575 var zValue uintptr 13576 var z1 uintptr 13577 var pStr uintptr 13578 var zSep uintptr 13579 var iCol int32 13580 pNew = uintptr(0) 13581 bHeader = -1 13582 rc = SQLITE_OK 13583 tstFlags = 0 13584 nCol = -99 13585 13586 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(CsvReader{}))) 13587 libc.Xmemset(tls, bp+344, 0, uint64(unsafe.Sizeof([3]uintptr{}))) 13588 i = 3 13589 __1: 13590 if !(i < argc) { 13591 goto __3 13592 } 13593 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 13594 j = 0 13595 __4: 13596 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 13597 goto __6 13598 } 13599 if !(csv_string_parameter(tls, bp+80, azParam[j], z, bp+344+uintptr(j)*8) != 0) { 13600 goto __7 13601 } 13602 goto __6 13603 __7: 13604 ; 13605 goto __5 13606 __5: 13607 j++ 13608 goto __4 13609 goto __6 13610 __6: 13611 ; 13612 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 13613 goto __8 13614 } 13615 if !(*(*uint8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 13616 goto __10 13617 } 13618 goto csvtab_connect_error 13619 __10: 13620 ; 13621 goto __9 13622 __8: 13623 if !(csv_boolean_parameter(tls, ts+4552, 6, z, bp+368) != 0) { 13624 goto __11 13625 } 13626 if !(bHeader >= 0) { 13627 goto __13 13628 } 13629 csv_errmsg(tls, bp+80, ts+4559, 0) 13630 goto csvtab_connect_error 13631 __13: 13632 ; 13633 bHeader = *(*int32)(unsafe.Pointer(bp + 368)) 13634 goto __12 13635 __11: 13636 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4592, 9, z)) != uintptr(0)) { 13637 goto __14 13638 } 13639 tstFlags = int32(uint32(libc.Xatoi(tls, zValue))) 13640 goto __15 13641 __14: 13642 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4602, 7, z)) != uintptr(0)) { 13643 goto __16 13644 } 13645 if !(nCol > 0) { 13646 goto __18 13647 } 13648 csv_errmsg(tls, bp+80, ts+4610, 0) 13649 goto csvtab_connect_error 13650 __18: 13651 ; 13652 nCol = libc.Xatoi(tls, zValue) 13653 if !(nCol <= 0) { 13654 goto __19 13655 } 13656 csv_errmsg(tls, bp+80, ts+4644, 0) 13657 goto csvtab_connect_error 13658 __19: 13659 ; 13660 goto __17 13661 __16: 13662 csv_errmsg(tls, bp+80, ts+4675, libc.VaList(bp, z)) 13663 goto csvtab_connect_error 13664 __17: 13665 ; 13666 __15: 13667 ; 13668 __12: 13669 ; 13670 __9: 13671 ; 13672 goto __2 13673 __2: 13674 i++ 13675 goto __1 13676 goto __3 13677 __3: 13678 ; 13679 if !(libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344)) == uintptr(0)) == libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) == uintptr(0))) { 13680 goto __20 13681 } 13682 csv_errmsg(tls, bp+80, ts+4695, 0) 13683 goto csvtab_connect_error 13684 __20: 13685 ; 13686 if !((nCol <= 0 || bHeader == 1) && 13687 csv_reader_open(tls, bp+80, *(*uintptr)(unsafe.Pointer(bp + 344)), *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8))) != 0) { 13688 goto __21 13689 } 13690 goto csvtab_connect_error 13691 __21: 13692 ; 13693 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CsvTable{}))) 13694 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 13695 if !(pNew == uintptr(0)) { 13696 goto __22 13697 } 13698 goto csvtab_connect_oom 13699 __22: 13700 ; 13701 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(CsvTable{}))) 13702 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 13703 goto __23 13704 } 13705 pStr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 13706 zSep = ts + 584 13707 iCol = 0 13708 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+979, 0) 13709 if !(nCol < 0 && bHeader < 1) { 13710 goto __25 13711 } 13712 nCol = 0 13713 __26: 13714 csv_read_one_field(tls, bp+80) 13715 nCol++ 13716 goto __27 13717 __27: 13718 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13719 goto __26 13720 } 13721 goto __28 13722 __28: 13723 ; 13724 __25: 13725 ; 13726 if !(nCol > 0 && bHeader < 1) { 13727 goto __29 13728 } 13729 iCol = 0 13730 __31: 13731 if !(iCol < nCol) { 13732 goto __33 13733 } 13734 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+8, zSep, iCol)) 13735 zSep = ts + 4758 13736 goto __32 13737 __32: 13738 iCol++ 13739 goto __31 13740 goto __33 13741 __33: 13742 ; 13743 goto __30 13744 __29: 13745 __34: 13746 z1 = csv_read_one_field(tls, bp+80) 13747 if !(nCol > 0 && iCol < nCol || nCol < 0 && bHeader != 0) { 13748 goto __37 13749 } 13750 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4760, libc.VaList(bp+24, zSep, z1)) 13751 zSep = ts + 4758 13752 iCol++ 13753 __37: 13754 ; 13755 goto __35 13756 __35: 13757 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13758 goto __34 13759 } 13760 goto __36 13761 __36: 13762 ; 13763 if !(nCol < 0) { 13764 goto __38 13765 } 13766 nCol = iCol 13767 goto __39 13768 __38: 13769 __40: 13770 if !(iCol < nCol) { 13771 goto __41 13772 } 13773 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+40, zSep, libc.PreIncInt32(&iCol, 1))) 13774 zSep = ts + 4758 13775 goto __40 13776 __41: 13777 ; 13778 __39: 13779 ; 13780 __30: 13781 ; 13782 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13783 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+585, 0) 13784 *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) = sqlite3.Xsqlite3_str_finish(tls, pStr) 13785 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 13786 goto __42 13787 } 13788 goto csvtab_connect_oom 13789 __42: 13790 ; 13791 goto __24 13792 __23: 13793 if !(nCol < 0) { 13794 goto __43 13795 } 13796 __45: 13797 csv_read_one_field(tls, bp+80) 13798 (*CsvTable)(unsafe.Pointer(pNew)).FnCol++ 13799 goto __46 13800 __46: 13801 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 13802 goto __45 13803 } 13804 goto __47 13805 __47: 13806 ; 13807 goto __44 13808 __43: 13809 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 13810 __44: 13811 ; 13812 __24: 13813 ; 13814 (*CsvTable)(unsafe.Pointer(pNew)).FzFilename = *(*uintptr)(unsafe.Pointer(bp + 344)) 13815 *(*uintptr)(unsafe.Pointer(bp + 344)) = uintptr(0) 13816 (*CsvTable)(unsafe.Pointer(pNew)).FzData = *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) 13817 *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) = uintptr(0) 13818 (*CsvTable)(unsafe.Pointer(pNew)).FtstFlags = uint32(tstFlags) 13819 if !(bHeader != 1) { 13820 goto __48 13821 } 13822 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(0) 13823 goto __49 13824 __48: 13825 if !((*CsvTable)(unsafe.Pointer(pNew)).FzData != 0) { 13826 goto __50 13827 } 13828 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(int32((*CsvReader)(unsafe.Pointer(bp + 80)).FiIn)) 13829 goto __51 13830 __50: 13831 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(int32(size_t(libc.Xftell(tls, (*CsvReader)(unsafe.Pointer(bp+80)).Fin)) - (*CsvReader)(unsafe.Pointer(bp+80)).FnIn + (*CsvReader)(unsafe.Pointer(bp+80)).FiIn)) 13832 __51: 13833 ; 13834 __49: 13835 ; 13836 csv_reader_reset(tls, bp+80) 13837 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8))) 13838 if !(rc != 0) { 13839 goto __52 13840 } 13841 csv_errmsg(tls, bp+80, ts+4772, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)), sqlite3.Xsqlite3_errmsg(tls, db))) 13842 goto csvtab_connect_error 13843 __52: 13844 ; 13845 i = 0 13846 __53: 13847 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 13848 goto __55 13849 } 13850 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 13851 goto __54 13852 __54: 13853 i++ 13854 goto __53 13855 goto __55 13856 __55: 13857 ; 13858 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 13859 return SQLITE_OK 13860 13861 csvtab_connect_oom: 13862 rc = SQLITE_NOMEM 13863 csv_errmsg(tls, bp+80, ts+2069, 0) 13864 13865 csvtab_connect_error: 13866 if !(pNew != 0) { 13867 goto __56 13868 } 13869 csvtabDisconnect(tls, pNew) 13870 __56: 13871 ; 13872 i = 0 13873 __57: 13874 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 13875 goto __59 13876 } 13877 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 13878 goto __58 13879 __58: 13880 i++ 13881 goto __57 13882 goto __59 13883 __59: 13884 ; 13885 if !(*(*uint8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 13886 goto __60 13887 } 13888 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(pzErr))) 13889 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, bp+80+64)) 13890 __60: 13891 ; 13892 csv_reader_reset(tls, bp+80) 13893 if !(rc == SQLITE_OK) { 13894 goto __61 13895 } 13896 rc = SQLITE_ERROR 13897 __61: 13898 ; 13899 return rc 13900 } 13901 13902 var azParam = [3]uintptr{ 13903 ts + 4794, ts + 4803, ts + 4808, 13904 } 13905 13906 func csvtabCursorRowReset(tls *libc.TLS, pCur uintptr) { 13907 var pTab uintptr = (*CsvCursor)(unsafe.Pointer(pCur)).Fbase.FpVtab 13908 var i int32 13909 for i = 0; i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol; i++ { 13910 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 13911 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 13912 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13913 } 13914 } 13915 13916 func csvtabCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13917 return csvtabConnect(tls, db, pAux, argc, argv, ppVtab, pzErr) 13918 } 13919 13920 func csvtabClose(tls *libc.TLS, cur uintptr) int32 { 13921 var pCur uintptr = cur 13922 csvtabCursorRowReset(tls, pCur) 13923 csv_reader_reset(tls, pCur+8) 13924 sqlite3.Xsqlite3_free(tls, cur) 13925 return SQLITE_OK 13926 } 13927 13928 func csvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 13929 var pTab uintptr = p 13930 var pCur uintptr 13931 var nByte size_t 13932 nByte = uint64(unsafe.Sizeof(CsvCursor{})) + (uint64(unsafe.Sizeof(uintptr(0)))+uint64(unsafe.Sizeof(int32(0))))*uint64((*CsvTable)(unsafe.Pointer(pTab)).FnCol) 13933 pCur = sqlite3.Xsqlite3_malloc64(tls, nByte) 13934 if pCur == uintptr(0) { 13935 return SQLITE_NOMEM 13936 } 13937 libc.Xmemset(tls, pCur, 0, nByte) 13938 (*CsvCursor)(unsafe.Pointer(pCur)).FazVal = pCur + 1*296 13939 (*CsvCursor)(unsafe.Pointer(pCur)).FaLen = (*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr((*CsvTable)(unsafe.Pointer(pTab)).FnCol)*8 13940 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 13941 if csv_reader_open(tls, pCur+8, (*CsvTable)(unsafe.Pointer(pTab)).FzFilename, (*CsvTable)(unsafe.Pointer(pTab)).FzData) != 0 { 13942 csv_xfer_error(tls, pTab, pCur+8) 13943 return SQLITE_ERROR 13944 } 13945 return SQLITE_OK 13946 } 13947 13948 func csvtabNext(tls *libc.TLS, cur uintptr) int32 { 13949 var pCur uintptr = cur 13950 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13951 var i int32 = 0 13952 var z uintptr 13953 for __ccgo := true; __ccgo; __ccgo = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == ',' { 13954 z = csv_read_one_field(tls, pCur+8) 13955 if z == uintptr(0) { 13956 break 13957 } 13958 if i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13959 if *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) < (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1 { 13960 var zNew uintptr = sqlite3.Xsqlite3_realloc64(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 13961 if zNew == uintptr(0) { 13962 csv_errmsg(tls, pCur+8, ts+2069, 0) 13963 csv_xfer_error(tls, pTab, pCur+8) 13964 break 13965 } 13966 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = zNew 13967 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn + 1 13968 } 13969 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), z, uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 13970 i++ 13971 } 13972 } 13973 if z == uintptr(0) || (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == -1 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13974 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(-1) 13975 } else { 13976 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid++ 13977 for i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 13978 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 13979 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 13980 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 13981 i++ 13982 } 13983 } 13984 return SQLITE_OK 13985 } 13986 13987 func csvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 13988 var pCur uintptr = cur 13989 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 13990 if i >= 0 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol && *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) != uintptr(0) { 13991 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), -1, libc.UintptrFromInt32(-1)) 13992 } 13993 return SQLITE_OK 13994 } 13995 13996 func csvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13997 var pCur uintptr = cur 13998 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid 13999 return SQLITE_OK 14000 } 14001 14002 func csvtabEof(tls *libc.TLS, cur uintptr) int32 { 14003 var pCur uintptr = cur 14004 return libc.Bool32((*CsvCursor)(unsafe.Pointer(pCur)).FiRowid < int64(0)) 14005 } 14006 14007 func csvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 14008 var pCur uintptr = pVtabCursor 14009 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 14010 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 14011 if (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin == uintptr(0) { 14012 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = size_t((*CsvTable)(unsafe.Pointer(pTab)).FiStart) 14013 } else { 14014 libc.Xfseek(tls, (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin, (*CsvTable)(unsafe.Pointer(pTab)).FiStart, SEEK_SET) 14015 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = uint64(0) 14016 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FnIn = uint64(0) 14017 } 14018 return csvtabNext(tls, pVtabCursor) 14019 } 14020 14021 func csvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 14022 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000) 14023 if (*CsvTable)(unsafe.Pointer(tab)).FtstFlags&uint32(CSVTEST_FIDX) != uint32(0) { 14024 var i int32 14025 var nConst int32 = 0 14026 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 14027 var op uint8 14028 if int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable) == 0 { 14029 continue 14030 } 14031 op = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop 14032 if int32(op) == SQLITE_INDEX_CONSTRAINT_EQ || 14033 int32(op) == SQLITE_INDEX_CONSTRAINT_LIKE || 14034 int32(op) == SQLITE_INDEX_CONSTRAINT_GLOB { 14035 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 14036 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(nConst)*8)).FargvIndex = nConst + 1 14037 nConst++ 14038 } 14039 } 14040 } 14041 return SQLITE_OK 14042 } 14043 14044 var CsvModule = sqlite3_module{ 14045 FxCreate: 0, 14046 FxConnect: 0, 14047 FxBestIndex: 0, 14048 FxDisconnect: 0, 14049 FxDestroy: 0, 14050 FxOpen: 0, 14051 FxClose: 0, 14052 FxFilter: 0, 14053 FxNext: 0, 14054 FxEof: 0, 14055 FxColumn: 0, 14056 FxRowid: 0, 14057 } 14058 14059 func csvtabUpdate(tls *libc.TLS, p uintptr, n int32, v uintptr, x uintptr) int32 { 14060 return SQLITE_READONLY 14061 } 14062 14063 var CsvModuleFauxWrite = sqlite3_module{ 14064 FxCreate: 0, 14065 FxConnect: 0, 14066 FxBestIndex: 0, 14067 FxDisconnect: 0, 14068 FxDestroy: 0, 14069 FxOpen: 0, 14070 FxClose: 0, 14071 FxFilter: 0, 14072 FxNext: 0, 14073 FxEof: 0, 14074 FxColumn: 0, 14075 FxRowid: 0, 14076 FxUpdate: 0, 14077 } 14078 14079 func sqlite3_csv_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14080 var rc int32 14081 _ = pApi 14082 14083 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4815, uintptr(unsafe.Pointer(&CsvModule)), uintptr(0)) 14084 if rc == SQLITE_OK { 14085 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4819, uintptr(unsafe.Pointer(&CsvModuleFauxWrite)), uintptr(0)) 14086 } 14087 return rc 14088 } 14089 14090 type Decimal1 = struct { 14091 Fsign uint8 14092 Foom uint8 14093 FisNull uint8 14094 FisInit uint8 14095 FnDigit int32 14096 FnFrac int32 14097 F__ccgo_pad1 [4]byte 14098 Fa uintptr 14099 } 14100 14101 type Decimal = Decimal1 14102 14103 func decimal_clear(tls *libc.TLS, p uintptr) { 14104 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(p)).Fa) 14105 } 14106 14107 func decimal_free(tls *libc.TLS, p uintptr) { 14108 if p != 0 { 14109 decimal_clear(tls, p) 14110 sqlite3.Xsqlite3_free(tls, p) 14111 } 14112 } 14113 14114 func decimal_new(tls *libc.TLS, pCtx uintptr, pIn uintptr, nAlt int32, zAlt uintptr) uintptr { 14115 var p uintptr 14116 var n int32 14117 var i int32 14118 var zIn uintptr 14119 var iExp int32 14120 var j int32 14121 var neg int32 14122 var c uint8 14123 var nExtra int32 14124 iExp = 0 14125 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Decimal{}))) 14126 if !(p == uintptr(0)) { 14127 goto __1 14128 } 14129 goto new_no_mem 14130 __1: 14131 ; 14132 (*Decimal)(unsafe.Pointer(p)).Fsign = uint8(0) 14133 (*Decimal)(unsafe.Pointer(p)).Foom = uint8(0) 14134 (*Decimal)(unsafe.Pointer(p)).FisInit = uint8(1) 14135 (*Decimal)(unsafe.Pointer(p)).FisNull = uint8(0) 14136 (*Decimal)(unsafe.Pointer(p)).FnDigit = 0 14137 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14138 if !(zAlt != 0) { 14139 goto __2 14140 } 14141 n = nAlt 14142 zIn = zAlt 14143 goto __3 14144 __2: 14145 if !(sqlite3.Xsqlite3_value_type(tls, pIn) == SQLITE_NULL) { 14146 goto __4 14147 } 14148 (*Decimal)(unsafe.Pointer(p)).Fa = uintptr(0) 14149 (*Decimal)(unsafe.Pointer(p)).FisNull = uint8(1) 14150 return p 14151 __4: 14152 ; 14153 n = sqlite3.Xsqlite3_value_bytes(tls, pIn) 14154 zIn = sqlite3.Xsqlite3_value_text(tls, pIn) 14155 __3: 14156 ; 14157 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc64(tls, uint64(n+1)) 14158 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14159 goto __5 14160 } 14161 goto new_no_mem 14162 __5: 14163 ; 14164 i = 0 14165 __6: 14166 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) { 14167 goto __8 14168 } 14169 goto __7 14170 __7: 14171 i++ 14172 goto __6 14173 goto __8 14174 __8: 14175 ; 14176 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '-') { 14177 goto __9 14178 } 14179 (*Decimal)(unsafe.Pointer(p)).Fsign = uint8(1) 14180 i++ 14181 goto __10 14182 __9: 14183 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '+') { 14184 goto __11 14185 } 14186 i++ 14187 __11: 14188 ; 14189 __10: 14190 ; 14191 __12: 14192 if !(i < n && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '0') { 14193 goto __13 14194 } 14195 i++ 14196 goto __12 14197 __13: 14198 ; 14199 __14: 14200 if !(i < n) { 14201 goto __15 14202 } 14203 c = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 14204 if !(int32(c) >= '0' && int32(c) <= '9') { 14205 goto __16 14206 } 14207 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncInt32(&(*Decimal)(unsafe.Pointer(p)).FnDigit, 1)))) = int8(int32(c) - '0') 14208 goto __17 14209 __16: 14210 if !(int32(c) == '.') { 14211 goto __18 14212 } 14213 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit + 1 14214 goto __19 14215 __18: 14216 if !(int32(c) == 'e' || int32(c) == 'E') { 14217 goto __20 14218 } 14219 j = i + 1 14220 neg = 0 14221 if !(j >= n) { 14222 goto __21 14223 } 14224 goto __15 14225 __21: 14226 ; 14227 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '-') { 14228 goto __22 14229 } 14230 neg = 1 14231 j++ 14232 goto __23 14233 __22: 14234 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '+') { 14235 goto __24 14236 } 14237 j++ 14238 __24: 14239 ; 14240 __23: 14241 ; 14242 __25: 14243 if !(j < n && iExp < 1000000) { 14244 goto __26 14245 } 14246 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) <= '9') { 14247 goto __27 14248 } 14249 iExp = iExp*10 + int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) - '0' 14250 __27: 14251 ; 14252 j++ 14253 goto __25 14254 __26: 14255 ; 14256 if !(neg != 0) { 14257 goto __28 14258 } 14259 iExp = -iExp 14260 __28: 14261 ; 14262 goto __15 14263 __20: 14264 ; 14265 __19: 14266 ; 14267 __17: 14268 ; 14269 i++ 14270 goto __14 14271 __15: 14272 ; 14273 if !((*Decimal)(unsafe.Pointer(p)).FnFrac != 0) { 14274 goto __29 14275 } 14276 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - ((*Decimal)(unsafe.Pointer(p)).FnFrac - 1) 14277 __29: 14278 ; 14279 if !(iExp > 0) { 14280 goto __30 14281 } 14282 if !((*Decimal)(unsafe.Pointer(p)).FnFrac > 0) { 14283 goto __32 14284 } 14285 if !(iExp <= (*Decimal)(unsafe.Pointer(p)).FnFrac) { 14286 goto __33 14287 } 14288 *(*int32)(unsafe.Pointer(p + 8)) -= iExp 14289 iExp = 0 14290 goto __34 14291 __33: 14292 iExp = iExp - (*Decimal)(unsafe.Pointer(p)).FnFrac 14293 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14294 __34: 14295 ; 14296 __32: 14297 ; 14298 if !(iExp > 0) { 14299 goto __35 14300 } 14301 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 14302 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14303 goto __36 14304 } 14305 goto new_no_mem 14306 __36: 14307 ; 14308 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(iExp)) 14309 *(*int32)(unsafe.Pointer(p + 4)) += iExp 14310 __35: 14311 ; 14312 goto __31 14313 __30: 14314 if !(iExp < 0) { 14315 goto __37 14316 } 14317 iExp = -iExp 14318 nExtra = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac - 1 14319 if !(nExtra != 0) { 14320 goto __38 14321 } 14322 if !(nExtra >= iExp) { 14323 goto __39 14324 } 14325 *(*int32)(unsafe.Pointer(p + 8)) += iExp 14326 iExp = 0 14327 goto __40 14328 __39: 14329 iExp = iExp - nExtra 14330 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - 1 14331 __40: 14332 ; 14333 __38: 14334 ; 14335 if !(iExp > 0) { 14336 goto __41 14337 } 14338 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 14339 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14340 goto __42 14341 } 14342 goto new_no_mem 14343 __42: 14344 ; 14345 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(iExp), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 14346 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(iExp)) 14347 *(*int32)(unsafe.Pointer(p + 4)) += iExp 14348 *(*int32)(unsafe.Pointer(p + 8)) += iExp 14349 __41: 14350 ; 14351 __37: 14352 ; 14353 __31: 14354 ; 14355 return p 14356 14357 new_no_mem: 14358 if !(pCtx != 0) { 14359 goto __43 14360 } 14361 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14362 __43: 14363 ; 14364 sqlite3.Xsqlite3_free(tls, p) 14365 return uintptr(0) 14366 } 14367 14368 func decimal_result(tls *libc.TLS, pCtx uintptr, p uintptr) { 14369 var z uintptr 14370 var i int32 14371 var j int32 14372 var n int32 14373 if p == uintptr(0) || (*Decimal)(unsafe.Pointer(p)).Foom != 0 { 14374 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14375 return 14376 } 14377 if (*Decimal)(unsafe.Pointer(p)).FisNull != 0 { 14378 sqlite3.Xsqlite3_result_null(tls, pCtx) 14379 return 14380 } 14381 z = sqlite3.Xsqlite3_malloc(tls, (*Decimal)(unsafe.Pointer(p)).FnDigit+4) 14382 if z == uintptr(0) { 14383 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14384 return 14385 } 14386 i = 0 14387 if (*Decimal)(unsafe.Pointer(p)).FnDigit == 0 || (*Decimal)(unsafe.Pointer(p)).FnDigit == 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa))) == 0 { 14388 (*Decimal)(unsafe.Pointer(p)).Fsign = uint8(0) 14389 } 14390 if (*Decimal)(unsafe.Pointer(p)).Fsign != 0 { 14391 *(*uint8)(unsafe.Pointer(z)) = uint8('-') 14392 i = 1 14393 } 14394 n = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac 14395 if n <= 0 { 14396 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = uint8('0') 14397 } 14398 j = 0 14399 for n > 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) == 0 { 14400 j++ 14401 n-- 14402 } 14403 for n > 0 { 14404 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = uint8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 14405 j++ 14406 n-- 14407 } 14408 if (*Decimal)(unsafe.Pointer(p)).FnFrac != 0 { 14409 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = uint8('.') 14410 for __ccgo := true; __ccgo; __ccgo = j < (*Decimal)(unsafe.Pointer(p)).FnDigit { 14411 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = uint8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 14412 j++ 14413 } 14414 } 14415 *(*uint8)(unsafe.Pointer(z + uintptr(i))) = uint8(0) 14416 sqlite3.Xsqlite3_result_text(tls, pCtx, z, i, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 14417 } 14418 14419 func decimalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14420 var p uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14421 _ = argc 14422 decimal_result(tls, context, p) 14423 decimal_free(tls, p) 14424 } 14425 14426 func decimal_cmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 14427 var nASig int32 14428 var nBSig int32 14429 var rc int32 14430 var n int32 14431 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) != int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 14432 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 14433 return -1 14434 } 14435 return +1 14436 } 14437 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 14438 var pTemp uintptr = pA 14439 pA = pB 14440 pB = pTemp 14441 } 14442 nASig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 14443 nBSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 14444 if nASig != nBSig { 14445 return nASig - nBSig 14446 } 14447 n = (*Decimal)(unsafe.Pointer(pA)).FnDigit 14448 if n > (*Decimal)(unsafe.Pointer(pB)).FnDigit { 14449 n = (*Decimal)(unsafe.Pointer(pB)).FnDigit 14450 } 14451 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(n)) 14452 if rc == 0 { 14453 rc = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnDigit 14454 } 14455 return rc 14456 } 14457 14458 func decimalCmpFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14459 var pA uintptr 14460 var pB uintptr 14461 var rc int32 14462 pA = uintptr(0) 14463 pB = uintptr(0) 14464 14465 _ = argc 14466 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14467 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0) { 14468 goto __1 14469 } 14470 goto cmp_done 14471 __1: 14472 ; 14473 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14474 if !(pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14475 goto __2 14476 } 14477 goto cmp_done 14478 __2: 14479 ; 14480 rc = decimal_cmp(tls, pA, pB) 14481 if !(rc < 0) { 14482 goto __3 14483 } 14484 rc = -1 14485 goto __4 14486 __3: 14487 if !(rc > 0) { 14488 goto __5 14489 } 14490 rc = +1 14491 __5: 14492 ; 14493 __4: 14494 ; 14495 sqlite3.Xsqlite3_result_int(tls, context, rc) 14496 cmp_done: 14497 decimal_free(tls, pA) 14498 decimal_free(tls, pB) 14499 } 14500 14501 func decimal_expand(tls *libc.TLS, p uintptr, nDigit int32, nFrac int32) { 14502 var nAddSig int32 14503 var nAddFrac int32 14504 if p == uintptr(0) { 14505 return 14506 } 14507 nAddFrac = nFrac - (*Decimal)(unsafe.Pointer(p)).FnFrac 14508 nAddSig = nDigit - (*Decimal)(unsafe.Pointer(p)).FnDigit - nAddFrac 14509 if nAddFrac == 0 && nAddSig == 0 { 14510 return 14511 } 14512 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64(nDigit+1)) 14513 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14514 (*Decimal)(unsafe.Pointer(p)).Foom = uint8(1) 14515 return 14516 } 14517 if nAddSig != 0 { 14518 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(nAddSig), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 14519 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(nAddSig)) 14520 *(*int32)(unsafe.Pointer(p + 4)) += nAddSig 14521 } 14522 if nAddFrac != 0 { 14523 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(nAddFrac)) 14524 *(*int32)(unsafe.Pointer(p + 4)) += nAddFrac 14525 *(*int32)(unsafe.Pointer(p + 8)) += nAddFrac 14526 } 14527 } 14528 14529 func decimal_add(tls *libc.TLS, pA uintptr, pB uintptr) { 14530 var nSig int32 14531 var nFrac int32 14532 var nDigit int32 14533 var i int32 14534 var rc int32 14535 if pA == uintptr(0) { 14536 return 14537 } 14538 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 14539 (*Decimal)(unsafe.Pointer(pA)).Foom = uint8(1) 14540 return 14541 } 14542 if (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0 { 14543 (*Decimal)(unsafe.Pointer(pA)).FisNull = uint8(1) 14544 return 14545 } 14546 nSig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 14547 if nSig != 0 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa))) == 0 { 14548 nSig-- 14549 } 14550 if nSig < (*Decimal)(unsafe.Pointer(pB)).FnDigit-(*Decimal)(unsafe.Pointer(pB)).FnFrac { 14551 nSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 14552 } 14553 nFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14554 if nFrac < (*Decimal)(unsafe.Pointer(pB)).FnFrac { 14555 nFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14556 } 14557 nDigit = nSig + nFrac + 1 14558 decimal_expand(tls, pA, nDigit, nFrac) 14559 decimal_expand(tls, pB, nDigit, nFrac) 14560 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 14561 (*Decimal)(unsafe.Pointer(pA)).Foom = uint8(1) 14562 } else { 14563 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) == int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 14564 var carry int32 = 0 14565 for i = nDigit - 1; i >= 0; i-- { 14566 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 14567 if x >= 10 { 14568 carry = 1 14569 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x - 10) 14570 } else { 14571 carry = 0 14572 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 14573 } 14574 } 14575 } else { 14576 var aA uintptr 14577 var aB uintptr 14578 var borrow int32 = 0 14579 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(nDigit)) 14580 if rc < 0 { 14581 aA = (*Decimal)(unsafe.Pointer(pB)).Fa 14582 aB = (*Decimal)(unsafe.Pointer(pA)).Fa 14583 (*Decimal)(unsafe.Pointer(pA)).Fsign = libc.BoolUint8(!((*Decimal)(unsafe.Pointer(pA)).Fsign != 0)) 14584 } else { 14585 aA = (*Decimal)(unsafe.Pointer(pA)).Fa 14586 aB = (*Decimal)(unsafe.Pointer(pB)).Fa 14587 } 14588 for i = nDigit - 1; i >= 0; i-- { 14589 var x int32 = int32(*(*int8)(unsafe.Pointer(aA + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(aB + uintptr(i)))) - borrow 14590 if x < 0 { 14591 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x + 10) 14592 borrow = 1 14593 } else { 14594 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 14595 borrow = 0 14596 } 14597 } 14598 } 14599 } 14600 } 14601 14602 func decimalCollFunc(tls *libc.TLS, notUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 14603 var zA uintptr = pKey1 14604 var zB uintptr = pKey2 14605 var pA uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey1, zA) 14606 var pB uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey2, zB) 14607 var rc int32 14608 _ = notUsed 14609 if pA == uintptr(0) || pB == uintptr(0) { 14610 rc = 0 14611 } else { 14612 rc = decimal_cmp(tls, pA, pB) 14613 } 14614 decimal_free(tls, pA) 14615 decimal_free(tls, pB) 14616 return rc 14617 } 14618 14619 func decimalAddFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14620 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14621 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14622 _ = argc 14623 decimal_add(tls, pA, pB) 14624 decimal_result(tls, context, pA) 14625 decimal_free(tls, pA) 14626 decimal_free(tls, pB) 14627 } 14628 14629 func decimalSubFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14630 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14631 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14632 _ = argc 14633 if pB != 0 { 14634 (*Decimal)(unsafe.Pointer(pB)).Fsign = libc.BoolUint8(!((*Decimal)(unsafe.Pointer(pB)).Fsign != 0)) 14635 decimal_add(tls, pA, pB) 14636 decimal_result(tls, context, pA) 14637 } 14638 decimal_free(tls, pA) 14639 decimal_free(tls, pB) 14640 } 14641 14642 func decimalSumStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14643 var p uintptr 14644 var pArg uintptr 14645 _ = argc 14646 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14647 if p == uintptr(0) { 14648 return 14649 } 14650 if !(int32((*Decimal)(unsafe.Pointer(p)).FisInit) != 0) { 14651 (*Decimal)(unsafe.Pointer(p)).FisInit = uint8(1) 14652 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc(tls, 2) 14653 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14654 (*Decimal)(unsafe.Pointer(p)).Foom = uint8(1) 14655 } else { 14656 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa)) = int8(0) 14657 } 14658 (*Decimal)(unsafe.Pointer(p)).FnDigit = 1 14659 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14660 } 14661 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14662 return 14663 } 14664 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14665 decimal_add(tls, p, pArg) 14666 decimal_free(tls, pArg) 14667 } 14668 14669 func decimalSumInverse(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14670 var p uintptr 14671 var pArg uintptr 14672 _ = argc 14673 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14674 if p == uintptr(0) { 14675 return 14676 } 14677 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 14678 return 14679 } 14680 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14681 if pArg != 0 { 14682 (*Decimal)(unsafe.Pointer(pArg)).Fsign = libc.BoolUint8(!((*Decimal)(unsafe.Pointer(pArg)).Fsign != 0)) 14683 } 14684 decimal_add(tls, p, pArg) 14685 decimal_free(tls, pArg) 14686 } 14687 14688 func decimalSumValue(tls *libc.TLS, context uintptr) { 14689 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14690 if p == uintptr(0) { 14691 return 14692 } 14693 decimal_result(tls, context, p) 14694 } 14695 14696 func decimalSumFinalize(tls *libc.TLS, context uintptr) { 14697 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 14698 if p == uintptr(0) { 14699 return 14700 } 14701 decimal_result(tls, context, p) 14702 decimal_clear(tls, p) 14703 } 14704 14705 func decimalMulFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14706 var pA uintptr 14707 var pB uintptr 14708 var acc uintptr 14709 var i int32 14710 var j int32 14711 var k int32 14712 var minFrac int32 14713 var f int8 14714 var carry int32 14715 var x int32 14716 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14717 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14718 acc = uintptr(0) 14719 _ = argc 14720 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || 14721 pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14722 goto __1 14723 } 14724 goto mul_end 14725 __1: 14726 ; 14727 acc = sqlite3.Xsqlite3_malloc64(tls, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14728 if !(acc == uintptr(0)) { 14729 goto __2 14730 } 14731 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14732 goto mul_end 14733 __2: 14734 ; 14735 libc.Xmemset(tls, acc, 0, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 14736 minFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14737 if !((*Decimal)(unsafe.Pointer(pB)).FnFrac < minFrac) { 14738 goto __3 14739 } 14740 minFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14741 __3: 14742 ; 14743 i = (*Decimal)(unsafe.Pointer(pA)).FnDigit - 1 14744 __4: 14745 if !(i >= 0) { 14746 goto __6 14747 } 14748 f = *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) 14749 carry = 0 14750 j = (*Decimal)(unsafe.Pointer(pB)).FnDigit - 1 14751 k = i + j + 3 14752 __7: 14753 if !(j >= 0) { 14754 goto __9 14755 } 14756 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + int32(f)*int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pB)).Fa + uintptr(j)))) + carry 14757 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14758 carry = x / 10 14759 goto __8 14760 __8: 14761 j-- 14762 k-- 14763 goto __7 14764 goto __9 14765 __9: 14766 ; 14767 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + carry 14768 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 14769 *(*int8)(unsafe.Pointer(acc + uintptr(k-1))) += int8(x / 10) 14770 goto __5 14771 __5: 14772 i-- 14773 goto __4 14774 goto __6 14775 __6: 14776 ; 14777 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(pA)).Fa) 14778 (*Decimal)(unsafe.Pointer(pA)).Fa = acc 14779 acc = uintptr(0) 14780 *(*int32)(unsafe.Pointer(pA + 4)) += (*Decimal)(unsafe.Pointer(pB)).FnDigit + 2 14781 *(*int32)(unsafe.Pointer(pA + 8)) += (*Decimal)(unsafe.Pointer(pB)).FnFrac 14782 *(*uint8)(unsafe.Pointer(pA)) ^= uint8(int32((*Decimal)(unsafe.Pointer(pB)).Fsign)) 14783 __10: 14784 if !((*Decimal)(unsafe.Pointer(pA)).FnFrac > minFrac && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr((*Decimal)(unsafe.Pointer(pA)).FnDigit-1)))) == 0) { 14785 goto __11 14786 } 14787 (*Decimal)(unsafe.Pointer(pA)).FnFrac-- 14788 (*Decimal)(unsafe.Pointer(pA)).FnDigit-- 14789 goto __10 14790 __11: 14791 ; 14792 decimal_result(tls, context, pA) 14793 14794 mul_end: 14795 sqlite3.Xsqlite3_free(tls, acc) 14796 decimal_free(tls, pA) 14797 decimal_free(tls, pB) 14798 } 14799 14800 func sqlite3_decimal_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14801 var rc int32 = SQLITE_OK 14802 var i uint32 14803 _ = pzErrMsg 14804 14805 _ = pApi 14806 14807 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc))/uint64(unsafe.Sizeof(struct { 14808 FzFuncName uintptr 14809 FnArg int32 14810 F__ccgo_pad1 [4]byte 14811 FxFunc uintptr 14812 }{})) && rc == SQLITE_OK; i++ { 14813 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc[i].FzFuncName, aFunc[i].FnArg, 14814 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 14815 uintptr(0), aFunc[i].FxFunc, uintptr(0), uintptr(0)) 14816 } 14817 if rc == SQLITE_OK { 14818 rc = sqlite3.Xsqlite3_create_window_function(tls, db, ts+4826, 1, 14819 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, uintptr(0), 14820 *(*uintptr)(unsafe.Pointer(&struct { 14821 f func(*libc.TLS, uintptr, int32, uintptr) 14822 }{decimalSumStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumFinalize})), 14823 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumValue})), *(*uintptr)(unsafe.Pointer(&struct { 14824 f func(*libc.TLS, uintptr, int32, uintptr) 14825 }{decimalSumInverse})), uintptr(0)) 14826 } 14827 if rc == SQLITE_OK { 14828 rc = sqlite3.Xsqlite3_create_collation(tls, db, ts+4838, SQLITE_UTF8, 14829 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 14830 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 14831 }{decimalCollFunc}))) 14832 } 14833 return rc 14834 } 14835 14836 var aFunc = [5]struct { 14837 FzFuncName uintptr 14838 FnArg int32 14839 F__ccgo_pad1 [4]byte 14840 FxFunc uintptr 14841 }{ 14842 {FzFuncName: ts + 4838, FnArg: 1, FxFunc: 0}, 14843 {FzFuncName: ts + 4846, FnArg: 2, FxFunc: 0}, 14844 {FzFuncName: ts + 4858, FnArg: 2, FxFunc: 0}, 14845 {FzFuncName: ts + 4870, FnArg: 2, FxFunc: 0}, 14846 {FzFuncName: ts + 4882, FnArg: 2, FxFunc: 0}, 14847 } 14848 14849 type EvalResult = struct { 14850 Fz uintptr 14851 FzSep uintptr 14852 FszSep int32 14853 F__ccgo_pad1 [4]byte 14854 FnAlloc sqlite3_int64 14855 FnUsed sqlite3_int64 14856 } 14857 14858 func callback(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr, colnames uintptr) int32 { 14859 var p uintptr = pCtx 14860 var i int32 14861 if argv == uintptr(0) { 14862 return 0 14863 } 14864 for i = 0; i < argc; i++ { 14865 var z uintptr 14866 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 14867 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 14868 } else { 14869 z = ts + 584 14870 } 14871 var sz size_t = libc.Xstrlen(tls, z) 14872 if sqlite3_int64(sz)+(*EvalResult)(unsafe.Pointer(p)).FnUsed+sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep)+int64(1) > (*EvalResult)(unsafe.Pointer(p)).FnAlloc { 14873 var zNew uintptr 14874 (*EvalResult)(unsafe.Pointer(p)).FnAlloc = sqlite3_int64(uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc*int64(2)) + sz + uint64((*EvalResult)(unsafe.Pointer(p)).FszSep) + uint64(1)) 14875 14876 if (*EvalResult)(unsafe.Pointer(p)).FnAlloc <= int64(0x7fffffff) { 14877 zNew = sqlite3.Xsqlite3_realloc64(tls, (*EvalResult)(unsafe.Pointer(p)).Fz, uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc)) 14878 } else { 14879 zNew = uintptr(0) 14880 } 14881 if zNew == uintptr(0) { 14882 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(p)).Fz) 14883 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EvalResult{}))) 14884 return 1 14885 } 14886 (*EvalResult)(unsafe.Pointer(p)).Fz = zNew 14887 } 14888 if (*EvalResult)(unsafe.Pointer(p)).FnUsed > int64(0) { 14889 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), (*EvalResult)(unsafe.Pointer(p)).FzSep, uint64((*EvalResult)(unsafe.Pointer(p)).FszSep)) 14890 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep) 14891 } 14892 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), z, sz) 14893 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64(sz) 14894 } 14895 return 0 14896 } 14897 14898 func sqlEvalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14899 bp := tls.Alloc(48) 14900 defer tls.Free(48) 14901 14902 var zSql uintptr 14903 var db uintptr 14904 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 14905 var rc int32 14906 14907 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(EvalResult{}))) 14908 (*EvalResult)(unsafe.Pointer(bp)).FzSep = ts + 4894 14909 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 14910 if zSql == uintptr(0) { 14911 return 14912 } 14913 if argc > 1 { 14914 (*EvalResult)(unsafe.Pointer(bp)).FzSep = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 14915 if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14916 return 14917 } 14918 } 14919 (*EvalResult)(unsafe.Pointer(bp)).FszSep = int32(libc.Xstrlen(tls, (*EvalResult)(unsafe.Pointer(bp)).FzSep)) 14920 db = sqlite3.Xsqlite3_context_db_handle(tls, context) 14921 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, *(*uintptr)(unsafe.Pointer(&struct { 14922 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 14923 }{callback})), bp, bp+40) 14924 if rc != SQLITE_OK { 14925 sqlite3.Xsqlite3_result_error(tls, context, *(*uintptr)(unsafe.Pointer(bp + 40)), -1) 14926 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 14927 } else if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 14928 sqlite3.Xsqlite3_result_error_nomem(tls, context) 14929 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(bp)).Fz) 14930 } else { 14931 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}))) 14932 } 14933 } 14934 14935 func sqlite3_eval_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14936 var rc int32 = SQLITE_OK 14937 _ = pApi 14938 14939 _ = pzErrMsg 14940 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 1, 14941 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14942 *(*uintptr)(unsafe.Pointer(&struct { 14943 f func(*libc.TLS, uintptr, int32, uintptr) 14944 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14945 if rc == SQLITE_OK { 14946 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 2, 14947 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 14948 *(*uintptr)(unsafe.Pointer(&struct { 14949 f func(*libc.TLS, uintptr, int32, uintptr) 14950 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 14951 } 14952 return rc 14953 } 14954 14955 type explain_vtab1 = struct { 14956 Fbase sqlite3_vtab 14957 Fdb uintptr 14958 } 14959 14960 type explain_vtab = explain_vtab1 14961 14962 type explain_cursor1 = struct { 14963 Fbase sqlite3_vtab_cursor 14964 Fdb uintptr 14965 FzSql uintptr 14966 FpExplain uintptr 14967 Frc int32 14968 F__ccgo_pad1 [4]byte 14969 } 14970 14971 type explain_cursor = explain_cursor1 14972 14973 func explainConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 14974 var pNew uintptr 14975 var rc int32 14976 14977 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 14978 ts+4901) 14979 if rc == SQLITE_OK { 14980 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_vtab{}))) 14981 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 14982 if pNew == uintptr(0) { 14983 return SQLITE_NOMEM 14984 } 14985 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(explain_vtab{}))) 14986 (*explain_vtab)(unsafe.Pointer(pNew)).Fdb = db 14987 } 14988 return rc 14989 } 14990 14991 func explainDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 14992 sqlite3.Xsqlite3_free(tls, pVtab) 14993 return SQLITE_OK 14994 } 14995 14996 func explainOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 14997 var pCur uintptr 14998 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_cursor{}))) 14999 if pCur == uintptr(0) { 15000 return SQLITE_NOMEM 15001 } 15002 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(explain_cursor{}))) 15003 (*explain_cursor)(unsafe.Pointer(pCur)).Fdb = (*explain_vtab)(unsafe.Pointer(p)).Fdb 15004 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15005 return SQLITE_OK 15006 } 15007 15008 func explainClose(tls *libc.TLS, cur uintptr) int32 { 15009 var pCur uintptr = cur 15010 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15011 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 15012 sqlite3.Xsqlite3_free(tls, pCur) 15013 return SQLITE_OK 15014 } 15015 15016 func explainNext(tls *libc.TLS, cur uintptr) int32 { 15017 var pCur uintptr = cur 15018 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15019 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_DONE && (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW { 15020 return (*explain_cursor)(unsafe.Pointer(pCur)).Frc 15021 } 15022 return SQLITE_OK 15023 } 15024 15025 func explainColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15026 var pCur uintptr = cur 15027 if i == EXPLN_COLUMN_SQL { 15028 sqlite3.Xsqlite3_result_text(tls, ctx, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql, -1, libc.UintptrFromInt32(-1)) 15029 } else { 15030 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, i)) 15031 } 15032 return SQLITE_OK 15033 } 15034 15035 func explainRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15036 var pCur uintptr = cur 15037 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, 0) 15038 return SQLITE_OK 15039 } 15040 15041 func explainEof(tls *libc.TLS, cur uintptr) int32 { 15042 var pCur uintptr = cur 15043 return libc.Bool32((*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW) 15044 } 15045 15046 func explainFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15047 bp := tls.Alloc(16) 15048 defer tls.Free(16) 15049 15050 var pCur uintptr = pVtabCursor 15051 var zSql uintptr = uintptr(0) 15052 var rc int32 15053 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15054 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 15055 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_TEXT { 15056 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = SQLITE_DONE 15057 return SQLITE_OK 15058 } 15059 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 15060 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 15061 if (*explain_cursor)(unsafe.Pointer(pCur)).FzSql != 0 { 15062 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+4963, libc.VaList(bp+8, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql)) 15063 } 15064 if zSql == uintptr(0) { 15065 rc = SQLITE_NOMEM 15066 } else { 15067 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*explain_cursor)(unsafe.Pointer(pCur)).Fdb, zSql, -1, pCur+24, uintptr(0)) 15068 sqlite3.Xsqlite3_free(tls, zSql) 15069 } 15070 if rc != 0 { 15071 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15072 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 15073 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 15074 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = uintptr(0) 15075 } else { 15076 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15077 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_DONE || (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_ROW { 15078 rc = SQLITE_OK 15079 } else { 15080 rc = (*explain_cursor)(unsafe.Pointer(pCur)).Frc 15081 } 15082 } 15083 return rc 15084 } 15085 15086 func explainBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15087 var i int32 15088 var idx int32 = -1 15089 var unusable int32 = 0 15090 15091 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(500) 15092 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 15093 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 15094 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != EXPLN_COLUMN_SQL { 15095 continue 15096 } 15097 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 15098 unusable = 1 15099 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 15100 idx = i 15101 } 15102 } 15103 if idx >= 0 { 15104 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 15105 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 15106 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).FargvIndex = 1 15107 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).Fomit = uint8(1) 15108 } else if unusable != 0 { 15109 return SQLITE_CONSTRAINT 15110 } 15111 return SQLITE_OK 15112 } 15113 15114 var explainModule = sqlite3_module{ 15115 FxConnect: 0, 15116 FxBestIndex: 0, 15117 FxDisconnect: 0, 15118 FxOpen: 0, 15119 FxClose: 0, 15120 FxFilter: 0, 15121 FxNext: 0, 15122 FxEof: 0, 15123 FxColumn: 0, 15124 FxRowid: 0, 15125 } 15126 15127 func sqlite3ExplainVtabInit(tls *libc.TLS, db uintptr) int32 { 15128 var rc int32 = SQLITE_OK 15129 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4974, uintptr(unsafe.Pointer(&explainModule)), uintptr(0)) 15130 return rc 15131 } 15132 15133 func sqlite3_explain_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15134 var rc int32 = SQLITE_OK 15135 _ = pApi 15136 15137 rc = sqlite3ExplainVtabInit(tls, db) 15138 return rc 15139 } 15140 15141 type flock = struct { 15142 Fl_type int16 15143 Fl_whence int16 15144 F__ccgo_pad1 [4]byte 15145 Fl_start int64 15146 Fl_len int64 15147 Fl_pid int32 15148 F__ccgo_pad2 [4]byte 15149 } 15150 15151 type useconds_t = uint32 15152 15153 type intptr_t = int64 15154 15155 type socklen_t = uint32 15156 15157 type dirent = struct { 15158 Fd_ino uint64 15159 Fd_off int64 15160 Fd_reclen uint16 15161 Fd_type uint8 15162 Fd_name [256]uint8 15163 F__ccgo_pad1 [5]byte 15164 } 15165 15166 type timezone = struct { 15167 Ftz_minuteswest int32 15168 Ftz_dsttime int32 15169 } 15170 15171 type itimerval = struct { 15172 Fit_interval struct { 15173 Ftv_sec int64 15174 Ftv_usec int64 15175 } 15176 Fit_value struct { 15177 Ftv_sec int64 15178 Ftv_usec int64 15179 } 15180 } 15181 15182 type tm = struct { 15183 Ftm_sec int32 15184 Ftm_min int32 15185 Ftm_hour int32 15186 Ftm_mday int32 15187 Ftm_mon int32 15188 Ftm_year int32 15189 Ftm_wday int32 15190 Ftm_yday int32 15191 Ftm_isdst int32 15192 F__ccgo_pad1 [4]byte 15193 Ftm_gmtoff int64 15194 Ftm_zone uintptr 15195 } 15196 15197 type itimerspec = struct { 15198 Fit_interval struct { 15199 Ftv_sec int64 15200 Ftv_nsec int64 15201 } 15202 Fit_value struct { 15203 Ftv_sec int64 15204 Ftv_nsec int64 15205 } 15206 } 15207 15208 type sigevent = struct { 15209 Fsigev_value struct { 15210 F__ccgo_pad1 [0]uint64 15211 Fsival_int int32 15212 F__ccgo_pad2 [4]byte 15213 } 15214 Fsigev_signo int32 15215 Fsigev_notify int32 15216 F_sigev_un struct { 15217 F__ccgo_pad1 [0]uint64 15218 F_pad [12]int32 15219 } 15220 } 15221 15222 func readFileContents(tls *libc.TLS, ctx uintptr, zName uintptr) { 15223 var in uintptr 15224 var nIn sqlite3_int64 15225 var pBuf uintptr 15226 var db uintptr 15227 var mxBlob int32 15228 15229 in = libc.Xfopen(tls, zName, ts+4402) 15230 if in == uintptr(0) { 15231 return 15232 } 15233 libc.Xfseek(tls, in, int64(0), SEEK_END) 15234 nIn = libc.Xftell(tls, in) 15235 libc.Xrewind(tls, in) 15236 db = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 15237 mxBlob = sqlite3.Xsqlite3_limit(tls, db, SQLITE_LIMIT_LENGTH, -1) 15238 if nIn > sqlite3_int64(mxBlob) { 15239 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_TOOBIG) 15240 libc.Xfclose(tls, in) 15241 return 15242 } 15243 pBuf = sqlite3.Xsqlite3_malloc64(tls, func() uint64 { 15244 if nIn != 0 { 15245 return uint64(nIn) 15246 } 15247 return uint64(1) 15248 }()) 15249 if pBuf == uintptr(0) { 15250 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15251 libc.Xfclose(tls, in) 15252 return 15253 } 15254 if nIn == sqlite3_int64(libc.Xfread(tls, pBuf, uint64(1), size_t(nIn), in)) { 15255 sqlite3.Xsqlite3_result_blob64(tls, ctx, pBuf, uint64(nIn), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 15256 } else { 15257 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_IOERR) 15258 sqlite3.Xsqlite3_free(tls, pBuf) 15259 } 15260 libc.Xfclose(tls, in) 15261 } 15262 15263 func readfileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15264 var zName uintptr 15265 _ = argc 15266 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15267 if zName == uintptr(0) { 15268 return 15269 } 15270 readFileContents(tls, context, zName) 15271 } 15272 15273 func ctxErrorMsg(tls *libc.TLS, ctx uintptr, zFmt uintptr, va uintptr) { 15274 var zMsg uintptr = uintptr(0) 15275 var ap va_list 15276 _ = ap 15277 ap = va 15278 zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 15279 sqlite3.Xsqlite3_result_error(tls, ctx, zMsg, -1) 15280 sqlite3.Xsqlite3_free(tls, zMsg) 15281 _ = ap 15282 } 15283 15284 func fileStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 15285 return libc.Xstat(tls, zPath, pStatBuf) 15286 } 15287 15288 func fileLinkStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 15289 return libc.Xlstat(tls, zPath, pStatBuf) 15290 } 15291 15292 func makeDirectory(tls *libc.TLS, zFile uintptr) int32 { 15293 bp := tls.Alloc(136) 15294 defer tls.Free(136) 15295 15296 var zCopy uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zFile)) 15297 var rc int32 = SQLITE_OK 15298 15299 if zCopy == uintptr(0) { 15300 rc = SQLITE_NOMEM 15301 } else { 15302 var nCopy int32 = int32(libc.Xstrlen(tls, zCopy)) 15303 var i int32 = 1 15304 15305 for rc == SQLITE_OK { 15306 var rc2 int32 15307 15308 for ; int32(*(*uint8)(unsafe.Pointer(zCopy + uintptr(i)))) != '/' && i < nCopy; i++ { 15309 } 15310 if i == nCopy { 15311 break 15312 } 15313 *(*uint8)(unsafe.Pointer(zCopy + uintptr(i))) = uint8(0) 15314 15315 rc2 = fileStat(tls, zCopy, bp+8) 15316 if rc2 != 0 { 15317 if libc.Xmkdir(tls, zCopy, uint32(0777)) != 0 { 15318 rc = SQLITE_ERROR 15319 } 15320 } else { 15321 if !((*stat)(unsafe.Pointer(bp+8)).Fst_mode&uint32(0170000) == uint32(0040000)) { 15322 rc = SQLITE_ERROR 15323 } 15324 } 15325 *(*uint8)(unsafe.Pointer(zCopy + uintptr(i))) = uint8('/') 15326 i++ 15327 } 15328 15329 sqlite3.Xsqlite3_free(tls, zCopy) 15330 } 15331 15332 return rc 15333 } 15334 15335 func writeFile(tls *libc.TLS, pCtx uintptr, zFile uintptr, pData uintptr, mode mode_t, mtime sqlite3_int64) int32 { 15336 bp := tls.Alloc(160) 15337 defer tls.Free(160) 15338 15339 if zFile == uintptr(0) { 15340 return 1 15341 } 15342 if mode&mode_t(0170000) == mode_t(0120000) { 15343 var zTo uintptr = sqlite3.Xsqlite3_value_text(tls, pData) 15344 if zTo == uintptr(0) || libc.Xsymlink(tls, zTo, zFile) < 0 { 15345 return 1 15346 } 15347 } else { 15348 if mode&mode_t(0170000) == mode_t(0040000) { 15349 if libc.Xmkdir(tls, zFile, mode) != 0 { 15350 if *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) != EEXIST || 15351 0 != fileStat(tls, zFile, bp) || 15352 !((*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0170000) == uint32(0040000)) || 15353 (*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0777) != mode&mode_t(0777) && 0 != libc.Xchmod(tls, zFile, mode&mode_t(0777)) { 15354 return 1 15355 } 15356 } 15357 } else { 15358 var nWrite sqlite3_int64 = int64(0) 15359 var z uintptr 15360 var rc int32 = 0 15361 var out uintptr = libc.Xfopen(tls, zFile, ts+4982) 15362 if out == uintptr(0) { 15363 return 1 15364 } 15365 z = sqlite3.Xsqlite3_value_blob(tls, pData) 15366 if z != 0 { 15367 var n sqlite3_int64 = sqlite3_int64(libc.Xfwrite(tls, z, uint64(1), uint64(sqlite3.Xsqlite3_value_bytes(tls, pData)), out)) 15368 nWrite = sqlite3_int64(sqlite3.Xsqlite3_value_bytes(tls, pData)) 15369 if nWrite != n { 15370 rc = 1 15371 } 15372 } 15373 libc.Xfclose(tls, out) 15374 if rc == 0 && mode != 0 && libc.Xchmod(tls, zFile, mode&mode_t(0777)) != 0 { 15375 rc = 1 15376 } 15377 if rc != 0 { 15378 return 2 15379 } 15380 sqlite3.Xsqlite3_result_int64(tls, pCtx, nWrite) 15381 } 15382 } 15383 15384 if mtime >= int64(0) { 15385 (*timeval)(unsafe.Pointer(bp + 128)).Ftv_usec = libc.AssignPtrInt64(bp+128+1*16+8, int64(0)) 15386 (*timeval)(unsafe.Pointer(bp + 128)).Ftv_sec = libc.Xtime(tls, uintptr(0)) 15387 (*timeval)(unsafe.Pointer(bp + 128 + 1*16)).Ftv_sec = mtime 15388 if libc.Xutimes(tls, zFile, bp+128) != 0 { 15389 return 1 15390 } 15391 } 15392 15393 return 0 15394 } 15395 15396 func writefileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15397 bp := tls.Alloc(24) 15398 defer tls.Free(24) 15399 15400 var zFile uintptr 15401 var mode mode_t = mode_t(0) 15402 var res int32 15403 var mtime sqlite3_int64 = int64(-1) 15404 15405 if argc < 2 || argc > 4 { 15406 sqlite3.Xsqlite3_result_error(tls, context, 15407 ts+4985, -1) 15408 return 15409 } 15410 15411 zFile = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15412 if zFile == uintptr(0) { 15413 return 15414 } 15415 if argc >= 3 { 15416 mode = mode_t(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 15417 } 15418 if argc == 4 { 15419 mtime = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 15420 } 15421 15422 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 15423 if res == 1 && *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) == ENOENT { 15424 if makeDirectory(tls, zFile) == SQLITE_OK { 15425 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 15426 } 15427 } 15428 15429 if argc > 2 && res != 0 { 15430 if mode&mode_t(0170000) == mode_t(0120000) { 15431 ctxErrorMsg(tls, context, ts+5035, libc.VaList(bp, zFile)) 15432 } else if mode&mode_t(0170000) == mode_t(0040000) { 15433 ctxErrorMsg(tls, context, ts+5064, libc.VaList(bp+8, zFile)) 15434 } else { 15435 ctxErrorMsg(tls, context, ts+5095, libc.VaList(bp+16, zFile)) 15436 } 15437 } 15438 } 15439 15440 func lsModeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15441 bp := tls.Alloc(16) 15442 defer tls.Free(16) 15443 15444 var i int32 15445 var iMode int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 15446 15447 _ = argc 15448 if iMode&0170000 == 0120000 { 15449 *(*uint8)(unsafe.Pointer(bp)) = uint8('l') 15450 } else if iMode&0170000 == 0100000 { 15451 *(*uint8)(unsafe.Pointer(bp)) = uint8('-') 15452 } else if iMode&0170000 == 0040000 { 15453 *(*uint8)(unsafe.Pointer(bp)) = uint8('d') 15454 } else { 15455 *(*uint8)(unsafe.Pointer(bp)) = uint8('?') 15456 } 15457 for i = 0; i < 3; i++ { 15458 var m int32 = iMode >> ((2 - i) * 3) 15459 var a uintptr = bp + uintptr(1+i*3) 15460 *(*uint8)(unsafe.Pointer(a)) = func() uint8 { 15461 if m&0x4 != 0 { 15462 return uint8('r') 15463 } 15464 return uint8('-') 15465 }() 15466 *(*uint8)(unsafe.Pointer(a + 1)) = func() uint8 { 15467 if m&0x2 != 0 { 15468 return uint8('w') 15469 } 15470 return uint8('-') 15471 }() 15472 *(*uint8)(unsafe.Pointer(a + 2)) = func() uint8 { 15473 if m&0x1 != 0 { 15474 return uint8('x') 15475 } 15476 return uint8('-') 15477 }() 15478 } 15479 *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0) 15480 sqlite3.Xsqlite3_result_text(tls, context, bp, -1, libc.UintptrFromInt32(-1)) 15481 } 15482 15483 type fsdir_cursor1 = struct { 15484 Fbase sqlite3_vtab_cursor 15485 FnLvl int32 15486 FiLvl int32 15487 FaLvl uintptr 15488 FzBase uintptr 15489 FnBase int32 15490 F__ccgo_pad1 [4]byte 15491 FsStat struct { 15492 Fst_dev uint64 15493 Fst_ino uint64 15494 Fst_mode uint32 15495 Fst_nlink uint32 15496 Fst_uid uint32 15497 Fst_gid uint32 15498 Fst_rdev uint64 15499 F__pad1 uint64 15500 Fst_size int64 15501 Fst_blksize int32 15502 F__pad2 int32 15503 Fst_blocks int64 15504 Fst_atim struct { 15505 Ftv_sec int64 15506 Ftv_nsec int64 15507 } 15508 Fst_mtim struct { 15509 Ftv_sec int64 15510 Ftv_nsec int64 15511 } 15512 Fst_ctim struct { 15513 Ftv_sec int64 15514 Ftv_nsec int64 15515 } 15516 F__glibc_reserved [2]int32 15517 } 15518 FzPath uintptr 15519 FiRowid sqlite3_int64 15520 } 15521 15522 type fsdir_cursor = fsdir_cursor1 15523 type FsdirLevel1 = struct { 15524 FpDir uintptr 15525 FzDir uintptr 15526 } 15527 15528 type FsdirLevel = FsdirLevel1 15529 15530 type fsdir_tab1 = struct{ Fbase sqlite3_vtab } 15531 15532 type fsdir_tab = fsdir_tab1 15533 15534 func fsdirConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15535 var pNew uintptr = uintptr(0) 15536 var rc int32 15537 _ = pAux 15538 _ = argc 15539 _ = argv 15540 _ = pzErr 15541 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5120) 15542 if rc == SQLITE_OK { 15543 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_tab{}))) 15544 if pNew == uintptr(0) { 15545 return SQLITE_NOMEM 15546 } 15547 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fsdir_tab{}))) 15548 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 15549 } 15550 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 15551 return rc 15552 } 15553 15554 func fsdirDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15555 sqlite3.Xsqlite3_free(tls, pVtab) 15556 return SQLITE_OK 15557 } 15558 15559 func fsdirOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 15560 var pCur uintptr 15561 _ = p 15562 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_cursor{}))) 15563 if pCur == uintptr(0) { 15564 return SQLITE_NOMEM 15565 } 15566 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fsdir_cursor{}))) 15567 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 15568 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15569 return SQLITE_OK 15570 } 15571 15572 func fsdirResetCursor(tls *libc.TLS, pCur uintptr) { 15573 var i int32 15574 for i = 0; i <= (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl; i++ { 15575 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(i)*16 15576 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir != 0 { 15577 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15578 } 15579 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15580 } 15581 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15582 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl) 15583 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = uintptr(0) 15584 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15585 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = uintptr(0) 15586 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = 0 15587 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = 0 15588 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 15589 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 15590 } 15591 15592 func fsdirClose(tls *libc.TLS, cur uintptr) int32 { 15593 var pCur uintptr = cur 15594 15595 fsdirResetCursor(tls, pCur) 15596 sqlite3.Xsqlite3_free(tls, pCur) 15597 return SQLITE_OK 15598 } 15599 15600 func fsdirSetErrmsg(tls *libc.TLS, pCur uintptr, zFmt uintptr, va uintptr) { 15601 var ap va_list 15602 _ = ap 15603 ap = va 15604 (*sqlite3_vtab)(unsafe.Pointer((*fsdir_cursor)(unsafe.Pointer(pCur)).Fbase.FpVtab)).FzErrMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 15605 _ = ap 15606 } 15607 15608 func fsdirNext(tls *libc.TLS, cur uintptr) int32 { 15609 bp := tls.Alloc(32) 15610 defer tls.Free(32) 15611 15612 var pCur uintptr = cur 15613 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15614 15615 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid++ 15616 if m&mode_t(0170000) == mode_t(0040000) { 15617 var iNew int32 = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl + 1 15618 var pLvl uintptr 15619 if iNew >= (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl { 15620 var nNew int32 = iNew + 1 15621 var nByte sqlite3_int64 = sqlite3_int64(uint64(nNew) * uint64(unsafe.Sizeof(FsdirLevel{}))) 15622 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl, uint64(nByte)) 15623 if aNew == uintptr(0) { 15624 return SQLITE_NOMEM 15625 } 15626 libc.Xmemset(tls, aNew+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl)*16, 0, uint64(unsafe.Sizeof(FsdirLevel{}))*uint64(nNew-(*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl)) 15627 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = aNew 15628 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = nNew 15629 } 15630 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = iNew 15631 pLvl = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(iNew)*16 15632 15633 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath 15634 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15635 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = libc.Xopendir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15636 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir == uintptr(0) { 15637 fsdirSetErrmsg(tls, pCur, ts+5180, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15638 return SQLITE_ERROR 15639 } 15640 } 15641 15642 for (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl >= 0 { 15643 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl)*16 15644 var pEntry uintptr = libc.Xreaddir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15645 if pEntry != 0 { 15646 if int32(*(*uint8)(unsafe.Pointer(pEntry + 19))) == '.' { 15647 if int32(*(*uint8)(unsafe.Pointer(pEntry + 19 + 1))) == '.' && int32(*(*uint8)(unsafe.Pointer(pEntry + 19 + 2))) == 0 { 15648 continue 15649 } 15650 if int32(*(*uint8)(unsafe.Pointer(pEntry + 19 + 1))) == 0 { 15651 continue 15652 } 15653 } 15654 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15655 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp+8, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir, pEntry+19)) 15656 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15657 return SQLITE_NOMEM 15658 } 15659 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 15660 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15661 return SQLITE_ERROR 15662 } 15663 return SQLITE_OK 15664 } 15665 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15666 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15667 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = uintptr(0) 15668 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = uintptr(0) 15669 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl-- 15670 } 15671 15672 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15673 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15674 return SQLITE_OK 15675 } 15676 15677 func fsdirColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15678 bp := tls.Alloc(64) 15679 defer tls.Free(64) 15680 15681 var pCur uintptr = cur 15682 switch i { 15683 case FSDIR_COLUMN_NAME: 15684 { 15685 sqlite3.Xsqlite3_result_text(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase), -1, libc.UintptrFromInt32(-1)) 15686 break 15687 15688 } 15689 15690 case FSDIR_COLUMN_MODE: 15691 sqlite3.Xsqlite3_result_int64(tls, ctx, int64((*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode)) 15692 break 15693 15694 case FSDIR_COLUMN_MTIME: 15695 sqlite3.Xsqlite3_result_int64(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mtim.Ftv_sec) 15696 break 15697 15698 case FSDIR_COLUMN_DATA: 15699 { 15700 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15701 if m&mode_t(0170000) == mode_t(0040000) { 15702 sqlite3.Xsqlite3_result_null(tls, ctx) 15703 } else if m&mode_t(0170000) == mode_t(0120000) { 15704 var aBuf uintptr = bp 15705 var nBuf sqlite3_int64 = int64(64) 15706 var n int32 15707 15708 for 1 != 0 { 15709 n = int32(libc.Xreadlink(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, aBuf, uint64(nBuf))) 15710 if sqlite3_int64(n) < nBuf { 15711 break 15712 } 15713 if aBuf != bp { 15714 sqlite3.Xsqlite3_free(tls, aBuf) 15715 } 15716 nBuf = nBuf * int64(2) 15717 aBuf = sqlite3.Xsqlite3_malloc64(tls, uint64(nBuf)) 15718 if aBuf == uintptr(0) { 15719 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15720 return SQLITE_NOMEM 15721 } 15722 } 15723 15724 sqlite3.Xsqlite3_result_text(tls, ctx, aBuf, n, libc.UintptrFromInt32(-1)) 15725 if aBuf != bp { 15726 sqlite3.Xsqlite3_free(tls, aBuf) 15727 } 15728 } else { 15729 readFileContents(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15730 } 15731 15732 } 15733 fallthrough 15734 case FSDIR_COLUMN_PATH: 15735 fallthrough 15736 default: 15737 { 15738 break 15739 15740 } 15741 } 15742 return SQLITE_OK 15743 } 15744 15745 func fsdirRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15746 var pCur uintptr = cur 15747 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid 15748 return SQLITE_OK 15749 } 15750 15751 func fsdirEof(tls *libc.TLS, cur uintptr) int32 { 15752 var pCur uintptr = cur 15753 return libc.Bool32((*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0)) 15754 } 15755 15756 func fsdirFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15757 bp := tls.Alloc(32) 15758 defer tls.Free(32) 15759 15760 var zDir uintptr = uintptr(0) 15761 var pCur uintptr = cur 15762 _ = idxStr 15763 fsdirResetCursor(tls, pCur) 15764 15765 if idxNum == 0 { 15766 fsdirSetErrmsg(tls, pCur, ts+5233, 0) 15767 return SQLITE_ERROR 15768 } 15769 15770 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15771 if zDir == uintptr(0) { 15772 fsdirSetErrmsg(tls, pCur, ts+5275, 0) 15773 return SQLITE_ERROR 15774 } 15775 if argc == 2 { 15776 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 15777 } 15778 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase != 0 { 15779 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = int32(libc.Xstrlen(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase)) + 1 15780 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase, zDir)) 15781 } else { 15782 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zDir)) 15783 } 15784 15785 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 15786 return SQLITE_NOMEM 15787 } 15788 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 15789 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15790 return SQLITE_ERROR 15791 } 15792 15793 return SQLITE_OK 15794 } 15795 15796 func fsdirBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15797 var i int32 15798 var idxPath int32 = -1 15799 var idxDir int32 = -1 15800 var seenPath int32 = 0 15801 var seenDir int32 = 0 15802 var pConstraint uintptr 15803 15804 _ = tab 15805 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 15806 i = 0 15807 __1: 15808 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15809 goto __3 15810 } 15811 { 15812 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 15813 goto __2 15814 } 15815 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 15816 case FSDIR_COLUMN_PATH: 15817 { 15818 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15819 idxPath = i 15820 seenPath = 0 15821 } else if idxPath < 0 { 15822 seenPath = 1 15823 } 15824 break 15825 15826 } 15827 case FSDIR_COLUMN_DIR: 15828 { 15829 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 15830 idxDir = i 15831 seenDir = 0 15832 } else if idxDir < 0 { 15833 seenDir = 1 15834 } 15835 break 15836 15837 } 15838 } 15839 15840 } 15841 goto __2 15842 __2: 15843 i++ 15844 pConstraint += 12 15845 goto __1 15846 goto __3 15847 __3: 15848 ; 15849 if seenPath != 0 || seenDir != 0 { 15850 return SQLITE_CONSTRAINT 15851 } 15852 15853 if idxPath < 0 { 15854 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 15855 15856 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(0x7fffffff) 15857 } else { 15858 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).Fomit = uint8(1) 15859 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).FargvIndex = 1 15860 if idxDir >= 0 { 15861 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).Fomit = uint8(1) 15862 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).FargvIndex = 2 15863 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 15864 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 15865 } else { 15866 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 15867 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100.0 15868 } 15869 } 15870 15871 return SQLITE_OK 15872 } 15873 15874 func fsdirRegister(tls *libc.TLS, db uintptr) int32 { 15875 var rc int32 = sqlite3.Xsqlite3_create_module(tls, db, ts+5325, uintptr(unsafe.Pointer(&fsdirModule1)), uintptr(0)) 15876 return rc 15877 } 15878 15879 var fsdirModule1 = sqlite3_module{ 15880 FxConnect: 0, 15881 FxBestIndex: 0, 15882 FxDisconnect: 0, 15883 FxOpen: 0, 15884 FxClose: 0, 15885 FxFilter: 0, 15886 FxNext: 0, 15887 FxEof: 0, 15888 FxColumn: 0, 15889 FxRowid: 0, 15890 } 15891 15892 func sqlite3_fileio_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15893 var rc int32 = SQLITE_OK 15894 _ = pApi 15895 15896 _ = pzErrMsg 15897 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5331, 1, 15898 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15899 *(*uintptr)(unsafe.Pointer(&struct { 15900 f func(*libc.TLS, uintptr, int32, uintptr) 15901 }{readfileFunc})), uintptr(0), uintptr(0)) 15902 if rc == SQLITE_OK { 15903 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5340, -1, 15904 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15905 *(*uintptr)(unsafe.Pointer(&struct { 15906 f func(*libc.TLS, uintptr, int32, uintptr) 15907 }{writefileFunc})), uintptr(0), uintptr(0)) 15908 } 15909 if rc == SQLITE_OK { 15910 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5350, 1, SQLITE_UTF8, uintptr(0), 15911 *(*uintptr)(unsafe.Pointer(&struct { 15912 f func(*libc.TLS, uintptr, int32, uintptr) 15913 }{lsModeFunc})), uintptr(0), uintptr(0)) 15914 } 15915 if rc == SQLITE_OK { 15916 rc = fsdirRegister(tls, db) 15917 } 15918 return rc 15919 } 15920 15921 type fuzzer_vtab1 = struct { 15922 Fbase sqlite3_vtab 15923 FzClassName uintptr 15924 FpRule uintptr 15925 FnCursor int32 15926 F__ccgo_pad1 [4]byte 15927 } 15928 15929 type fuzzer_vtab = fuzzer_vtab1 15930 type fuzzer_cursor1 = struct { 15931 Fbase sqlite3_vtab_cursor 15932 FiRowid sqlite3_int64 15933 FpVtab uintptr 15934 FrLimit fuzzer_cost 15935 F__ccgo_pad1 [4]byte 15936 FpStem uintptr 15937 FpDone uintptr 15938 FaQueue [20]uintptr 15939 FmxQueue int32 15940 F__ccgo_pad2 [4]byte 15941 FzBuf uintptr 15942 FnBuf int32 15943 FnStem int32 15944 FiRuleset int32 15945 F__ccgo_pad3 [4]byte 15946 FnullRule fuzzer_rule 15947 FapHash [4001]uintptr 15948 } 15949 15950 type fuzzer_cursor = fuzzer_cursor1 15951 type fuzzer_rule1 = struct { 15952 FpNext uintptr 15953 FzFrom uintptr 15954 FrCost fuzzer_cost 15955 FnFrom fuzzer_len 15956 FnTo fuzzer_len 15957 F__ccgo_pad1 [2]byte 15958 FiRuleset fuzzer_ruleid 15959 FzTo [4]uint8 15960 } 15961 15962 type fuzzer_rule = fuzzer_rule1 15963 type fuzzer_stem1 = struct { 15964 FzBasis uintptr 15965 FpRule uintptr 15966 FpNext uintptr 15967 FpHash uintptr 15968 FrBaseCost fuzzer_cost 15969 FrCostX fuzzer_cost 15970 FnBasis fuzzer_len 15971 Fn fuzzer_len 15972 F__ccgo_pad1 [6]byte 15973 } 15974 15975 type fuzzer_stem = fuzzer_stem1 15976 15977 type fuzzer_cost = int32 15978 type fuzzer_len = int8 15979 type fuzzer_ruleid = int32 15980 15981 func fuzzerMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 15982 bp := tls.Alloc(32) 15983 defer tls.Free(32) 15984 15985 var pTail uintptr 15986 15987 pTail = bp 15988 for pA != 0 && pB != 0 { 15989 if (*fuzzer_rule)(unsafe.Pointer(pA)).FrCost <= (*fuzzer_rule)(unsafe.Pointer(pB)).FrCost { 15990 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 15991 pTail = pA 15992 pA = (*fuzzer_rule)(unsafe.Pointer(pA)).FpNext 15993 } else { 15994 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 15995 pTail = pB 15996 pB = (*fuzzer_rule)(unsafe.Pointer(pB)).FpNext 15997 } 15998 } 15999 if pA == uintptr(0) { 16000 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 16001 } else { 16002 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 16003 } 16004 return (*fuzzer_rule)(unsafe.Pointer(bp)).FpNext 16005 } 16006 16007 func fuzzerLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 16008 bp := tls.Alloc(48) 16009 defer tls.Free(48) 16010 16011 var iRuleset sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 16012 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 16013 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 16014 var nCost int32 = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 16015 16016 var rc int32 = SQLITE_OK 16017 var nFrom int32 16018 var nTo int32 16019 var pRule uintptr = uintptr(0) 16020 16021 if zFrom == uintptr(0) { 16022 zFrom = ts + 584 16023 } 16024 if zTo == uintptr(0) { 16025 zTo = ts + 584 16026 } 16027 nFrom = int32(libc.Xstrlen(tls, zFrom)) 16028 nTo = int32(libc.Xstrlen(tls, zTo)) 16029 16030 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 16031 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 16032 return SQLITE_OK 16033 } 16034 16035 if nCost <= 0 || nCost > FUZZER_MX_COST { 16036 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 16037 libc.VaList(bp, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_COST)) 16038 rc = SQLITE_ERROR 16039 } else if nFrom > FUZZER_MX_LENGTH || nTo > FUZZER_MX_LENGTH { 16040 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 16041 libc.VaList(bp+16, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_LENGTH)) 16042 rc = SQLITE_ERROR 16043 } else if iRuleset < int64(0) || iRuleset > int64(FUZZER_MX_RULEID) { 16044 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+5357, 16045 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_RULEID)) 16046 rc = SQLITE_ERROR 16047 } else { 16048 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_rule{}))+uint64(nFrom)+uint64(nTo)) 16049 if pRule == uintptr(0) { 16050 rc = SQLITE_NOMEM 16051 } else { 16052 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(fuzzer_rule{}))) 16053 (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 28 16054 *(*uintptr)(unsafe.Pointer(pRule + 8)) += uintptr(nTo + 1) 16055 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom = fuzzer_len(nFrom) 16056 libc.Xmemcpy(tls, (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 16057 libc.Xmemcpy(tls, pRule+28, zTo, uint64(nTo+1)) 16058 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo = fuzzer_len(nTo) 16059 (*fuzzer_rule)(unsafe.Pointer(pRule)).FrCost = nCost 16060 (*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset = int32(iRuleset) 16061 } 16062 } 16063 16064 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 16065 return rc 16066 } 16067 16068 func fuzzerLoadRules(tls *libc.TLS, db uintptr, p uintptr, zDb uintptr, zData uintptr, pzErr uintptr) int32 { 16069 bp := tls.Alloc(192) 16070 defer tls.Free(192) 16071 16072 var rc int32 = SQLITE_OK 16073 var zSql uintptr 16074 var pHead uintptr = uintptr(0) 16075 16076 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, zDb, zData)) 16077 if zSql == uintptr(0) { 16078 rc = SQLITE_NOMEM 16079 } else { 16080 var rc2 int32 16081 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 16082 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 16083 if rc != SQLITE_OK { 16084 *(*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))) 16085 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 16086 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 16087 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, zData, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 16088 rc = SQLITE_ERROR 16089 } else { 16090 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 16091 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 16092 rc = fuzzerLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 16093 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 16094 (*fuzzer_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 16095 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 16096 } 16097 } 16098 } 16099 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 16100 if rc == SQLITE_OK { 16101 rc = rc2 16102 } 16103 } 16104 sqlite3.Xsqlite3_free(tls, zSql) 16105 16106 if rc == SQLITE_OK { 16107 var i uint32 16108 var pX uintptr 16109 16110 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 16111 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 16112 } 16113 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 16114 pHead = (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext 16115 (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 16116 for i = uint32(0); *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) != 0 && uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))-uint64(1); i++ { 16117 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 16118 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 16119 } 16120 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 16121 } 16122 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 16123 i = uint32(1) 16124 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 16125 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 16126 } 16127 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = fuzzerMergeRules(tls, (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule, pX) 16128 } else { 16129 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = pHead 16130 } 16131 16132 return rc 16133 } 16134 16135 func fuzzerDequote(tls *libc.TLS, zIn uintptr) uintptr { 16136 var nIn sqlite3_int64 16137 var zOut uintptr 16138 16139 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 16140 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 16141 if zOut != 0 { 16142 var q uint8 = *(*uint8)(unsafe.Pointer(zIn)) 16143 16144 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 16145 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 16146 } else { 16147 var iOut int32 = 0 16148 var iIn int32 16149 16150 if int32(q) == '[' { 16151 q = uint8(']') 16152 } 16153 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 16154 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 16155 iIn++ 16156 } 16157 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(zIn + uintptr(iIn))) 16158 } 16159 } 16160 16161 } 16162 return zOut 16163 } 16164 16165 func fuzzerDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 16166 var p uintptr = pVtab 16167 16168 for (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule != 0 { 16169 var pRule uintptr = (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule 16170 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16171 sqlite3.Xsqlite3_free(tls, pRule) 16172 } 16173 sqlite3.Xsqlite3_free(tls, p) 16174 return SQLITE_OK 16175 } 16176 16177 func fuzzerConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 16178 bp := tls.Alloc(8) 16179 defer tls.Free(8) 16180 16181 var rc int32 = SQLITE_OK 16182 var pNew uintptr = uintptr(0) 16183 var zModule uintptr = *(*uintptr)(unsafe.Pointer(argv)) 16184 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 16185 16186 if argc != 4 { 16187 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 16188 ts+5394, libc.VaList(bp, zModule)) 16189 rc = SQLITE_ERROR 16190 } else { 16191 var nModule sqlite3_int64 16192 16193 nModule = sqlite3_int64(libc.Xstrlen(tls, zModule)) 16194 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_vtab{}))+uint64(nModule)+uint64(1)) 16195 if pNew == uintptr(0) { 16196 rc = SQLITE_NOMEM 16197 } else { 16198 var zTab uintptr 16199 16200 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_vtab{}))) 16201 (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName = pNew + 1*48 16202 libc.Xmemcpy(tls, (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName, zModule, size_t(nModule+int64(1))) 16203 16204 zTab = fuzzerDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 16205 if zTab == uintptr(0) { 16206 rc = SQLITE_NOMEM 16207 } else { 16208 rc = fuzzerLoadRules(tls, db, pNew, zDb, zTab, pzErr) 16209 sqlite3.Xsqlite3_free(tls, zTab) 16210 } 16211 16212 if rc == SQLITE_OK { 16213 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5445) 16214 } 16215 if rc != SQLITE_OK { 16216 fuzzerDisconnect(tls, pNew) 16217 pNew = uintptr(0) 16218 } else { 16219 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 16220 } 16221 } 16222 } 16223 16224 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 16225 return rc 16226 } 16227 16228 func fuzzerOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 16229 var p uintptr = pVTab 16230 var pCur uintptr 16231 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fuzzer_cursor{}))) 16232 if pCur == uintptr(0) { 16233 return SQLITE_NOMEM 16234 } 16235 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fuzzer_cursor{}))) 16236 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab = p 16237 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 16238 (*fuzzer_vtab)(unsafe.Pointer(p)).FnCursor++ 16239 return SQLITE_OK 16240 } 16241 16242 func fuzzerClearStemList(tls *libc.TLS, pStem uintptr) { 16243 for pStem != 0 { 16244 var pNext uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext 16245 sqlite3.Xsqlite3_free(tls, pStem) 16246 pStem = pNext 16247 } 16248 } 16249 16250 func fuzzerClearCursor(tls *libc.TLS, pCur uintptr, clearHash int32) { 16251 var i int32 16252 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 16253 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone) 16254 for i = 0; i < FUZZER_NQUEUE; i++ { 16255 fuzzerClearStemList(tls, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 16256 } 16257 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16258 if clearHash != 0 && (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem != 0 { 16259 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = 0 16260 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16261 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = uintptr(0) 16262 libc.Xmemset(tls, pCur+48, 0, uint64(unsafe.Sizeof([20]uintptr{}))) 16263 libc.Xmemset(tls, pCur+272, 0, uint64(unsafe.Sizeof([4001]uintptr{}))) 16264 } 16265 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem = 0 16266 } 16267 16268 func fuzzerClose(tls *libc.TLS, cur uintptr) int32 { 16269 var pCur uintptr = cur 16270 fuzzerClearCursor(tls, pCur, 0) 16271 sqlite3.Xsqlite3_free(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 16272 (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 16273 sqlite3.Xsqlite3_free(tls, pCur) 16274 return SQLITE_OK 16275 } 16276 16277 func fuzzerRender(tls *libc.TLS, pStem uintptr, pzBuf uintptr, pnBuf uintptr) int32 { 16278 var pRule uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule 16279 var n int32 16280 var z uintptr 16281 16282 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis) + int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo) - int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) 16283 if *(*int32)(unsafe.Pointer(pnBuf)) < n+1 { 16284 *(*uintptr)(unsafe.Pointer(pzBuf)) = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(pzBuf)), n+100) 16285 if *(*uintptr)(unsafe.Pointer(pzBuf)) == uintptr(0) { 16286 return SQLITE_NOMEM 16287 } 16288 *(*int32)(unsafe.Pointer(pnBuf)) = n + 100 16289 } 16290 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) 16291 z = *(*uintptr)(unsafe.Pointer(pzBuf)) 16292 if n < 0 { 16293 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)+1)) 16294 } else { 16295 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(n)) 16296 libc.Xmemcpy(tls, z+uintptr(n), pRule+28, uint64((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)) 16297 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)), 16298 uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-n-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)+1)) 16299 } 16300 16301 return SQLITE_OK 16302 } 16303 16304 func fuzzerHash(tls *libc.TLS, z uintptr) uint32 { 16305 var h uint32 = uint32(0) 16306 for *(*uint8)(unsafe.Pointer(z)) != 0 { 16307 h = h<<3 ^ h>>29 ^ uint32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 16308 } 16309 return h % uint32(FUZZER_HASH) 16310 } 16311 16312 func fuzzerCost(tls *libc.TLS, pStem uintptr) fuzzer_cost { 16313 return libc.AssignPtrInt32(pStem+36, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrBaseCost+(*fuzzer_rule)(unsafe.Pointer((*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule)).FrCost) 16314 } 16315 16316 func fuzzerSeen(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 16317 var h uint32 16318 var pLookup uintptr 16319 16320 if fuzzerRender(tls, pStem, pCur+216, pCur+224) == SQLITE_NOMEM { 16321 return -1 16322 } 16323 h = fuzzerHash(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 16324 pLookup = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 16325 for pLookup != 0 && libc.Xstrcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pLookup)).FzBasis, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) != 0 { 16326 pLookup = (*fuzzer_stem)(unsafe.Pointer(pLookup)).FpHash 16327 } 16328 return libc.Bool32(pLookup != uintptr(0)) 16329 } 16330 16331 func fuzzerSkipRule(tls *libc.TLS, pRule uintptr, pStem uintptr, iRuleset int32) int32 { 16332 return libc.Bool32(pRule != 0 && ((*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset != iRuleset || 16333 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)) 16334 } 16335 16336 func fuzzerAdvance(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 16337 var pRule uintptr 16338 for libc.AssignUintptr(&pRule, (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule) != uintptr(0) { 16339 for int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) < int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) { 16340 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn++ 16341 if int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) == 0 || 16342 libc.Xmemcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis+uintptr((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn), (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, uint64((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)) == 0 { 16343 var rc int32 = fuzzerSeen(tls, pCur, pStem) 16344 if rc < 0 { 16345 return -1 16346 } 16347 if rc == 0 { 16348 fuzzerCost(tls, pStem) 16349 return 1 16350 } 16351 } 16352 } 16353 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = int8(-1) 16354 for __ccgo := true; __ccgo; __ccgo = fuzzerSkipRule(tls, pRule, pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 16355 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16356 } 16357 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pRule 16358 if pRule != 0 && fuzzerCost(tls, pStem) > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit { 16359 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = uintptr(0) 16360 } 16361 } 16362 return 0 16363 } 16364 16365 func fuzzerMergeStems(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 16366 bp := tls.Alloc(48) 16367 defer tls.Free(48) 16368 16369 var pTail uintptr 16370 16371 pTail = bp 16372 for pA != 0 && pB != 0 { 16373 if (*fuzzer_stem)(unsafe.Pointer(pA)).FrCostX <= (*fuzzer_stem)(unsafe.Pointer(pB)).FrCostX { 16374 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 16375 pTail = pA 16376 pA = (*fuzzer_stem)(unsafe.Pointer(pA)).FpNext 16377 } else { 16378 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 16379 pTail = pB 16380 pB = (*fuzzer_stem)(unsafe.Pointer(pB)).FpNext 16381 } 16382 } 16383 if pA == uintptr(0) { 16384 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 16385 } else { 16386 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 16387 } 16388 return (*fuzzer_stem)(unsafe.Pointer(bp)).FpNext 16389 } 16390 16391 func fuzzerLowestCostStem(tls *libc.TLS, pCur uintptr) uintptr { 16392 var pBest uintptr 16393 var pX uintptr 16394 var iBest int32 16395 var i int32 16396 16397 if (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem == uintptr(0) { 16398 iBest = -1 16399 pBest = uintptr(0) 16400 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 16401 pX = *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) 16402 if pX == uintptr(0) { 16403 continue 16404 } 16405 if pBest == uintptr(0) || (*fuzzer_stem)(unsafe.Pointer(pBest)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX { 16406 pBest = pX 16407 iBest = i 16408 } 16409 } 16410 if pBest != 0 { 16411 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(iBest)*8)) = (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext 16412 (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext = uintptr(0) 16413 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pBest 16414 } 16415 } 16416 return (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 16417 } 16418 16419 func fuzzerInsert(tls *libc.TLS, pCur uintptr, pNew uintptr) uintptr { 16420 var pX uintptr 16421 var i int32 16422 16423 if libc.AssignUintptr(&pX, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) && (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pNew)).FrCostX { 16424 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 16425 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pNew 16426 pNew = pX 16427 } 16428 16429 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 16430 pX = pNew 16431 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 16432 if *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) != 0 { 16433 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 16434 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = uintptr(0) 16435 } else { 16436 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 16437 break 16438 } 16439 } 16440 if i > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue { 16441 if i < FUZZER_NQUEUE { 16442 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = i 16443 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 16444 } else { 16445 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8))) 16446 *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8)) = pX 16447 } 16448 } 16449 16450 return fuzzerLowestCostStem(tls, pCur) 16451 } 16452 16453 func fuzzerNewStem(tls *libc.TLS, pCur uintptr, zWord uintptr, rBaseCost fuzzer_cost) uintptr { 16454 var pNew uintptr 16455 var pRule uintptr 16456 var h uint32 16457 16458 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_stem{}))+libc.Xstrlen(tls, zWord)+uint64(1)) 16459 if pNew == uintptr(0) { 16460 return uintptr(0) 16461 } 16462 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_stem{}))) 16463 (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis = pNew + 1*48 16464 (*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis = fuzzer_len(libc.Xstrlen(tls, zWord)) 16465 libc.Xmemcpy(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis, zWord, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis)+1)) 16466 pRule = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 16467 for fuzzerSkipRule(tls, pRule, pNew, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 16468 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16469 } 16470 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpRule = pRule 16471 (*fuzzer_stem)(unsafe.Pointer(pNew)).Fn = int8(-1) 16472 (*fuzzer_stem)(unsafe.Pointer(pNew)).FrBaseCost = libc.AssignPtrInt32(pNew+36, rBaseCost) 16473 h = fuzzerHash(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis) 16474 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpHash = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 16475 *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) = pNew 16476 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem++ 16477 return pNew 16478 } 16479 16480 func fuzzerNext(tls *libc.TLS, cur uintptr) int32 { 16481 var pCur uintptr = cur 16482 var rc int32 16483 var pStem uintptr 16484 var pNew uintptr 16485 16486 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid++ 16487 16488 pStem = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 16489 if (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX > 0 { 16490 rc = fuzzerRender(tls, pStem, pCur+216, pCur+224) 16491 if rc == SQLITE_NOMEM { 16492 return SQLITE_NOMEM 16493 } 16494 pNew = fuzzerNewStem(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX) 16495 if pNew != 0 { 16496 if fuzzerAdvance(tls, pCur, pNew) == 0 { 16497 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 16498 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pNew 16499 } else { 16500 if fuzzerInsert(tls, pCur, pNew) == pNew { 16501 return SQLITE_OK 16502 } 16503 } 16504 } else { 16505 return SQLITE_NOMEM 16506 } 16507 } 16508 16509 for libc.AssignUintptr(&pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) { 16510 var res int32 = fuzzerAdvance(tls, pCur, pStem) 16511 if res < 0 { 16512 return SQLITE_NOMEM 16513 } else if res > 0 { 16514 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16515 pStem = fuzzerInsert(tls, pCur, pStem) 16516 if libc.AssignInt32(&rc, fuzzerSeen(tls, pCur, pStem)) != 0 { 16517 if rc < 0 { 16518 return SQLITE_NOMEM 16519 } 16520 continue 16521 } 16522 return SQLITE_OK 16523 } 16524 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16525 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 16526 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pStem 16527 if fuzzerLowestCostStem(tls, pCur) != 0 { 16528 rc = fuzzerSeen(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 16529 if rc < 0 { 16530 return SQLITE_NOMEM 16531 } 16532 if rc == 0 { 16533 return SQLITE_OK 16534 } 16535 } 16536 } 16537 16538 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16539 return SQLITE_OK 16540 } 16541 16542 func fuzzerFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 16543 var pCur uintptr = pVtabCursor 16544 var zWord uintptr = ts + 584 16545 var pStem uintptr 16546 var idx int32 16547 16548 fuzzerClearCursor(tls, pCur, 1) 16549 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 2147483647 16550 idx = 0 16551 if idxNum&1 != 0 { 16552 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 16553 idx++ 16554 } 16555 if idxNum&2 != 0 { 16556 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 16557 idx++ 16558 } 16559 if idxNum&4 != 0 { 16560 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 16561 idx++ 16562 } 16563 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FpNext = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 16564 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FrCost = 0 16565 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnFrom = int8(0) 16566 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnTo = int8(0) 16567 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FzFrom = ts + 584 16568 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 16569 16570 if int32(libc.Xstrlen(tls, zWord)) < FUZZER_MX_OUTPUT_LENGTH { 16571 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = libc.AssignUintptr(&pStem, fuzzerNewStem(tls, pCur, zWord, 0)) 16572 if pStem == uintptr(0) { 16573 return SQLITE_NOMEM 16574 } 16575 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pCur + 240 16576 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = (*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis 16577 } else { 16578 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16579 } 16580 16581 return SQLITE_OK 16582 } 16583 16584 func fuzzerColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 16585 var pCur uintptr = cur 16586 if i == 0 { 16587 if fuzzerRender(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem, pCur+216, pCur+224) == SQLITE_NOMEM { 16588 return SQLITE_NOMEM 16589 } 16590 sqlite3.Xsqlite3_result_text(tls, ctx, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 16591 } else if i == 1 { 16592 sqlite3.Xsqlite3_result_int(tls, ctx, (*fuzzer_stem)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem)).FrCostX) 16593 } else { 16594 sqlite3.Xsqlite3_result_null(tls, ctx) 16595 } 16596 return SQLITE_OK 16597 } 16598 16599 func fuzzerRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 16600 var pCur uintptr = cur 16601 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid 16602 return SQLITE_OK 16603 } 16604 16605 func fuzzerEof(tls *libc.TLS, cur uintptr) int32 { 16606 var pCur uintptr = cur 16607 return libc.Bool32((*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit <= 0) 16608 } 16609 16610 func fuzzerBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 16611 var iPlan int32 = 0 16612 var iDistTerm int32 = -1 16613 var iRulesetTerm int32 = -1 16614 var i int32 16615 var seenMatch int32 = 0 16616 var pConstraint uintptr 16617 var rCost float64 = 1e12 16618 16619 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 16620 i = 0 16621 __1: 16622 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 16623 goto __3 16624 } 16625 { 16626 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16627 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16628 seenMatch = 1 16629 } 16630 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 16631 goto __2 16632 } 16633 if iPlan&1 == 0 && 16634 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16635 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16636 iPlan = iPlan | 1 16637 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 16638 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16639 rCost = rCost / 1e6 16640 } 16641 if iPlan&2 == 0 && 16642 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 16643 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 16644 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 16645 iPlan = iPlan | 2 16646 iDistTerm = i 16647 rCost = rCost / 10.0 16648 } 16649 if iPlan&4 == 0 && 16650 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 16651 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 16652 iPlan = iPlan | 4 16653 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16654 iRulesetTerm = i 16655 rCost = rCost / 10.0 16656 } 16657 16658 } 16659 goto __2 16660 __2: 16661 i++ 16662 pConstraint += 12 16663 goto __1 16664 goto __3 16665 __3: 16666 ; 16667 if iPlan&2 != 0 { 16668 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 16669 } 16670 if iPlan&4 != 0 { 16671 var idx int32 = 1 16672 if iPlan&1 != 0 { 16673 idx++ 16674 } 16675 if iPlan&2 != 0 { 16676 idx++ 16677 } 16678 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRulesetTerm)*8)).FargvIndex = idx 16679 } 16680 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 16681 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 16682 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 16683 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 16684 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 16685 } 16686 if seenMatch != 0 && iPlan&1 == 0 { 16687 rCost = 1e99 16688 } 16689 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 16690 16691 return SQLITE_OK 16692 } 16693 16694 var fuzzerModule = sqlite3_module{ 16695 FxCreate: 0, 16696 FxConnect: 0, 16697 FxBestIndex: 0, 16698 FxDisconnect: 0, 16699 FxDestroy: 0, 16700 FxOpen: 0, 16701 FxClose: 0, 16702 FxFilter: 0, 16703 FxNext: 0, 16704 FxEof: 0, 16705 FxColumn: 0, 16706 FxRowid: 0, 16707 } 16708 16709 func sqlite3_fuzzer_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16710 var rc int32 = SQLITE_OK 16711 _ = pApi 16712 16713 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+5483, uintptr(unsafe.Pointer(&fuzzerModule)), uintptr(0)) 16714 return rc 16715 } 16716 16717 func ieee754func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16718 bp := tls.Alloc(160) 16719 defer tls.Free(160) 16720 16721 if argc == 1 { 16722 var m sqlite3_int64 16723 16724 var e int32 16725 var isNeg int32 16726 16727 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16728 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 16729 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16730 var i uint32 16731 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = uint64(0) 16732 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 16733 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 24))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16734 } 16735 libc.Xmemcpy(tls, bp+16, bp+24, uint64(unsafe.Sizeof(float64(0)))) 16736 } else { 16737 *(*float64)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16738 } 16739 if *(*float64)(unsafe.Pointer(bp + 16)) < 0.0 { 16740 isNeg = 1 16741 *(*float64)(unsafe.Pointer(bp + 16)) = -*(*float64)(unsafe.Pointer(bp + 16)) 16742 } else { 16743 isNeg = 0 16744 } 16745 libc.Xmemcpy(tls, bp+32, bp+16, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 16746 if *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) == int64(0) { 16747 e = 0 16748 m = int64(0) 16749 } else { 16750 e = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 32)) >> 52) 16751 m = *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) & (int64(1)<<52 - int64(1)) 16752 if e == 0 { 16753 m <<= 1 16754 } else { 16755 m = m | int64(1)<<52 16756 } 16757 for e < 1075 && m > int64(0) && m&int64(1) == int64(0) { 16758 m >>= 1 16759 e++ 16760 } 16761 if isNeg != 0 { 16762 m = -m 16763 } 16764 } 16765 switch *(*int32)(unsafe.Pointer(sqlite3.Xsqlite3_user_data(tls, context))) { 16766 case 0: 16767 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+40, ts+5490, 16768 libc.VaList(bp, m, e-1075)) 16769 sqlite3.Xsqlite3_result_text(tls, context, bp+40, -1, libc.UintptrFromInt32(-1)) 16770 break 16771 fallthrough 16772 case 1: 16773 sqlite3.Xsqlite3_result_int64(tls, context, m) 16774 break 16775 fallthrough 16776 case 2: 16777 sqlite3.Xsqlite3_result_int(tls, context, e-1075) 16778 break 16779 } 16780 } else { 16781 var m sqlite3_int64 16782 var e sqlite3_int64 16783 16784 var isNeg int32 = 0 16785 m = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 16786 e = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 16787 16788 if e > int64(10000) { 16789 e = int64(10000) 16790 } else if e < int64(-10000) { 16791 e = int64(-10000) 16792 } 16793 16794 if m < int64(0) { 16795 isNeg = 1 16796 m = -m 16797 if m < int64(0) { 16798 return 16799 } 16800 } else if m == int64(0) && e > int64(-1000) && e < int64(1000) { 16801 sqlite3.Xsqlite3_result_double(tls, context, 0.0) 16802 return 16803 } 16804 for m>>32&int64(0xffe00000) != 0 { 16805 m >>= 1 16806 e++ 16807 } 16808 for m != int64(0) && m>>32&int64(0xfff00000) == int64(0) { 16809 m <<= 1 16810 e-- 16811 } 16812 e = e + int64(1075) 16813 if e <= int64(0) { 16814 if int64(1)-e >= int64(64) { 16815 m = int64(0) 16816 } else { 16817 m >>= int64(1) - e 16818 } 16819 e = int64(0) 16820 } else if e > int64(0x7ff) { 16821 e = int64(0x7ff) 16822 } 16823 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) = m & (int64(1)<<52 - int64(1)) 16824 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= e << 52 16825 if isNeg != 0 { 16826 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= libc.Int64FromUint64(uint64(1) << 63) 16827 } 16828 libc.Xmemcpy(tls, bp+144, bp+152, uint64(unsafe.Sizeof(float64(0)))) 16829 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 144))) 16830 } 16831 } 16832 16833 func ieee754func_from_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16834 bp := tls.Alloc(16) 16835 defer tls.Free(16) 16836 16837 _ = argc 16838 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 16839 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 16840 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 16841 var i uint32 16842 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = uint64(0) 16843 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 16844 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 8))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 16845 } 16846 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 16847 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp))) 16848 } 16849 } 16850 16851 func ieee754func_to_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16852 bp := tls.Alloc(24) 16853 defer tls.Free(24) 16854 16855 _ = argc 16856 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_FLOAT || 16857 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_INTEGER { 16858 *(*float64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 16859 16860 var i uint32 16861 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 16862 for i = uint32(1); uint64(i) <= uint64(unsafe.Sizeof(float64(0))); i++ { 16863 *(*uint8)(unsafe.Pointer(bp + 16 + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(i)))) = uint8(*(*sqlite3_uint64)(unsafe.Pointer(bp)) & uint64(0xff)) 16864 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 8 16865 } 16866 sqlite3.Xsqlite3_result_blob(tls, context, bp+16, int32(unsafe.Sizeof(float64(0))), libc.UintptrFromInt32(-1)) 16867 } 16868 } 16869 16870 func sqlite3_ieee_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16871 var i uint32 16872 var rc int32 = SQLITE_OK 16873 _ = pApi 16874 16875 _ = pzErrMsg 16876 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc1))/uint64(unsafe.Sizeof(struct { 16877 FzFName uintptr 16878 FnArg int32 16879 FiAux int32 16880 FxFunc uintptr 16881 }{})) && rc == SQLITE_OK; i++ { 16882 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc1[i].FzFName, aFunc1[i].FnArg, 16883 SQLITE_UTF8|SQLITE_INNOCUOUS, 16884 uintptr(unsafe.Pointer(&aFunc1))+uintptr(i)*24+12, 16885 aFunc1[i].FxFunc, uintptr(0), uintptr(0)) 16886 } 16887 return rc 16888 } 16889 16890 var aFunc1 = [6]struct { 16891 FzFName uintptr 16892 FnArg int32 16893 FiAux int32 16894 FxFunc uintptr 16895 }{ 16896 {FzFName: ts + 5507, FnArg: 1, FxFunc: 0}, 16897 {FzFName: ts + 5507, FnArg: 2, FxFunc: 0}, 16898 {FzFName: ts + 5515, FnArg: 1, FiAux: 1, FxFunc: 0}, 16899 {FzFName: ts + 5532, FnArg: 1, FiAux: 2, FxFunc: 0}, 16900 {FzFName: ts + 5549, FnArg: 1, FxFunc: 0}, 16901 {FzFName: ts + 5565, FnArg: 1, FxFunc: 0}, 16902 } 16903 16904 func sqlite3_mmap_warm(tls *libc.TLS, db uintptr, zDb uintptr) int32 { 16905 bp := tls.Alloc(88) 16906 defer tls.Free(88) 16907 16908 var rc int32 = SQLITE_OK 16909 var zSql uintptr = uintptr(0) 16910 var pgsz int32 = 0 16911 var nTotal int32 = 0 16912 16913 if 0 == sqlite3.Xsqlite3_get_autocommit(tls, db) { 16914 return SQLITE_MISUSE 16915 } 16916 16917 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5583, 16918 libc.VaList(bp, func() uintptr { 16919 if zDb != 0 { 16920 return ts + 5624 16921 } 16922 return ts + 584 16923 }(), func() uintptr { 16924 if zDb != 0 { 16925 return zDb 16926 } 16927 return ts + 584 16928 }(), func() uintptr { 16929 if zDb != 0 { 16930 return ts + 5626 16931 } 16932 return ts + 584 16933 }())) 16934 if zSql == uintptr(0) { 16935 return SQLITE_NOMEM 16936 } 16937 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 16938 sqlite3.Xsqlite3_free(tls, zSql) 16939 16940 if rc == SQLITE_OK { 16941 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5629, 16942 libc.VaList(bp+24, func() uintptr { 16943 if zDb != 0 { 16944 return ts + 5624 16945 } 16946 return ts + 584 16947 }(), func() uintptr { 16948 if zDb != 0 { 16949 return zDb 16950 } 16951 return ts + 584 16952 }(), func() uintptr { 16953 if zDb != 0 { 16954 return ts + 5626 16955 } 16956 return ts + 584 16957 }())) 16958 if zSql == uintptr(0) { 16959 rc = SQLITE_NOMEM 16960 } else { 16961 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 16962 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 16963 sqlite3.Xsqlite3_free(tls, zSql) 16964 if rc == SQLITE_OK { 16965 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 16966 pgsz = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 16967 } 16968 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 16969 } 16970 if rc == SQLITE_OK && pgsz == 0 { 16971 rc = SQLITE_ERROR 16972 } 16973 } 16974 } 16975 16976 if rc == SQLITE_OK { 16977 var rc2 int32 16978 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 16979 rc = sqlite3.Xsqlite3_file_control(tls, db, zDb, SQLITE_FCNTL_FILE_POINTER, bp+72) 16980 if rc == SQLITE_OK && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods)).FiVersion >= 3 { 16981 var iPg sqlite3_int64 = int64(1) 16982 var p uintptr = (*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods 16983 for 1 != 0 { 16984 rc = (*struct { 16985 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 16986 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods)(unsafe.Pointer(p)).FxFetch})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), sqlite3_int64(pgsz)*iPg, pgsz, bp+80) 16987 if rc != SQLITE_OK || *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 16988 break 16989 } 16990 16991 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80))))) 16992 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(pgsz-1)))) 16993 16994 rc = (*struct { 16995 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 16996 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods)(unsafe.Pointer(p)).FxUnfetch})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), sqlite3_int64(pgsz)*iPg, *(*uintptr)(unsafe.Pointer(bp + 80))) 16997 if rc != SQLITE_OK { 16998 break 16999 } 17000 iPg++ 17001 } 17002 sqlite3.Xsqlite3_log(tls, SQLITE_OK, 17003 ts+5652, libc.VaList(bp+48, func() int64 { 17004 if iPg == int64(1) { 17005 return int64(0) 17006 } 17007 return iPg 17008 }(), 17009 sqlite3.Xsqlite3_db_filename(tls, db, zDb))) 17010 } 17011 17012 rc2 = sqlite3.Xsqlite3_exec(tls, db, ts+5702, uintptr(0), uintptr(0), uintptr(0)) 17013 if rc == SQLITE_OK { 17014 rc = rc2 17015 } 17016 } 17017 17018 return rc 17019 } 17020 17021 type nextCharContext1 = struct { 17022 Fdb uintptr 17023 FpStmt uintptr 17024 FzPrefix uintptr 17025 FnPrefix int32 17026 FnAlloc int32 17027 FnUsed int32 17028 F__ccgo_pad1 [4]byte 17029 FaResult uintptr 17030 FmallocFailed int32 17031 FotherError int32 17032 } 17033 17034 type nextCharContext = nextCharContext1 17035 17036 func nextCharAppend(tls *libc.TLS, p uintptr, c uint32) { 17037 var i int32 17038 for i = 0; i < (*nextCharContext)(unsafe.Pointer(p)).FnUsed; i++ { 17039 if *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(i)*4)) == c { 17040 return 17041 } 17042 } 17043 if (*nextCharContext)(unsafe.Pointer(p)).FnUsed+1 > (*nextCharContext)(unsafe.Pointer(p)).FnAlloc { 17044 var aNew uintptr 17045 var n int32 = (*nextCharContext)(unsafe.Pointer(p)).FnAlloc*2 + 30 17046 aNew = sqlite3.Xsqlite3_realloc64(tls, (*nextCharContext)(unsafe.Pointer(p)).FaResult, uint64(n)*uint64(unsafe.Sizeof(uint32(0)))) 17047 if aNew == uintptr(0) { 17048 (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed = 1 17049 return 17050 } else { 17051 (*nextCharContext)(unsafe.Pointer(p)).FaResult = aNew 17052 (*nextCharContext)(unsafe.Pointer(p)).FnAlloc = n 17053 } 17054 } 17055 *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(libc.PostIncInt32(&(*nextCharContext)(unsafe.Pointer(p)).FnUsed, 1))*4)) = c 17056 } 17057 17058 func writeUtf8(tls *libc.TLS, z uintptr, c uint32) int32 { 17059 if c < uint32(0x00080) { 17060 *(*uint8)(unsafe.Pointer(z)) = uint8(c & uint32(0xff)) 17061 return 1 17062 } 17063 if c < uint32(0x00800) { 17064 *(*uint8)(unsafe.Pointer(z)) = uint8(0xC0 + int32(uint8(c>>6&uint32(0x1F)))) 17065 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 17066 return 2 17067 } 17068 if c < uint32(0x10000) { 17069 *(*uint8)(unsafe.Pointer(z)) = uint8(0xE0 + int32(uint8(c>>12&uint32(0x0F)))) 17070 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 17071 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 17072 return 3 17073 } 17074 *(*uint8)(unsafe.Pointer(z)) = uint8(0xF0 + int32(uint8(c>>18&uint32(0x07)))) 17075 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>12&uint32(0x3F)))) 17076 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 17077 *(*uint8)(unsafe.Pointer(z + 3)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 17078 return 4 17079 } 17080 17081 func readUtf8(tls *libc.TLS, z uintptr, pOut uintptr) int32 { 17082 var c uint32 = uint32(*(*uint8)(unsafe.Pointer(z))) 17083 if c < uint32(0xc0) { 17084 *(*uint32)(unsafe.Pointer(pOut)) = c 17085 return 1 17086 } else { 17087 var n int32 = 1 17088 c = uint32(validBits[c-uint32(0xc0)]) 17089 for int32(*(*uint8)(unsafe.Pointer(z + uintptr(n))))&0xc0 == 0x80 { 17090 c = c<<6 + uint32(0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&n, 1)))))) 17091 } 17092 if c < uint32(0x80) || c&0xFFFFF800 == uint32(0xD800) || c&0xFFFFFFFE == uint32(0xFFFE) { 17093 c = uint32(0xFFFD) 17094 } 17095 *(*uint32)(unsafe.Pointer(pOut)) = c 17096 return n 17097 } 17098 return int32(0) 17099 } 17100 17101 var validBits = [64]uint8{ 17102 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17103 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 17104 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 17105 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 17106 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17107 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 17108 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17109 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 17110 } 17111 17112 func findNextChars(tls *libc.TLS, p uintptr) { 17113 bp := tls.Alloc(12) 17114 defer tls.Free(12) 17115 17116 var cPrev uint32 = uint32(0) 17117 17118 var n int32 17119 var rc int32 17120 17121 for { 17122 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 1, (*nextCharContext)(unsafe.Pointer(p)).FzPrefix, (*nextCharContext)(unsafe.Pointer(p)).FnPrefix, 17123 uintptr(0)) 17124 n = writeUtf8(tls, bp, cPrev+uint32(1)) 17125 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 2, bp, n, uintptr(0)) 17126 rc = sqlite3.Xsqlite3_step(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17127 if rc == SQLITE_DONE { 17128 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17129 return 17130 } else if rc != SQLITE_ROW { 17131 (*nextCharContext)(unsafe.Pointer(p)).FotherError = rc 17132 return 17133 } else { 17134 var zOut uintptr = sqlite3.Xsqlite3_column_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 0) 17135 17136 n = readUtf8(tls, zOut+uintptr((*nextCharContext)(unsafe.Pointer(p)).FnPrefix), bp+8) 17137 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17138 nextCharAppend(tls, p, *(*uint32)(unsafe.Pointer(bp + 8))) 17139 cPrev = *(*uint32)(unsafe.Pointer(bp + 8)) 17140 if (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed != 0 { 17141 return 17142 } 17143 } 17144 } 17145 } 17146 17147 func nextCharFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17148 bp := tls.Alloc(136) 17149 defer tls.Free(136) 17150 17151 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17152 var zField uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 17153 var zWhere uintptr 17154 var zCollName uintptr 17155 var zWhereClause uintptr = uintptr(0) 17156 var zColl uintptr = uintptr(0) 17157 var zSql uintptr 17158 var rc int32 17159 17160 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(nextCharContext{}))) 17161 (*nextCharContext)(unsafe.Pointer(bp + 80)).Fdb = sqlite3.Xsqlite3_context_db_handle(tls, context) 17162 (*nextCharContext)(unsafe.Pointer(bp + 80)).FzPrefix = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 17163 (*nextCharContext)(unsafe.Pointer(bp + 80)).FnPrefix = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 17164 if zTable == uintptr(0) || zField == uintptr(0) || (*nextCharContext)(unsafe.Pointer(bp+80)).FzPrefix == uintptr(0) { 17165 return 17166 } 17167 if argc >= 4 && 17168 libc.AssignUintptr(&zWhere, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) != uintptr(0) && 17169 int32(*(*uint8)(unsafe.Pointer(zWhere))) != 0 { 17170 zWhereClause = sqlite3.Xsqlite3_mprintf(tls, ts+5706, libc.VaList(bp, zWhere)) 17171 if zWhereClause == uintptr(0) { 17172 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17173 return 17174 } 17175 } else { 17176 zWhereClause = ts + 584 17177 } 17178 if argc >= 5 && 17179 libc.AssignUintptr(&zCollName, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) != uintptr(0) && 17180 int32(*(*uint8)(unsafe.Pointer(zCollName))) != 0 { 17181 zColl = sqlite3.Xsqlite3_mprintf(tls, ts+5715, libc.VaList(bp+8, zCollName)) 17182 if zColl == uintptr(0) { 17183 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17184 if *(*uint8)(unsafe.Pointer(zWhereClause)) != 0 { 17185 sqlite3.Xsqlite3_free(tls, zWhereClause) 17186 } 17187 return 17188 } 17189 } else { 17190 zColl = ts + 584 17191 } 17192 zSql = sqlite3.Xsqlite3_mprintf(tls, 17193 ts+5728, 17194 libc.VaList(bp+16, zField, zTable, zField, zColl, zField, zColl, zWhereClause, zColl)) 17195 if *(*uint8)(unsafe.Pointer(zWhereClause)) != 0 { 17196 sqlite3.Xsqlite3_free(tls, zWhereClause) 17197 } 17198 if *(*uint8)(unsafe.Pointer(zColl)) != 0 { 17199 sqlite3.Xsqlite3_free(tls, zColl) 17200 } 17201 if zSql == uintptr(0) { 17202 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17203 return 17204 } 17205 17206 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb, zSql, -1, bp+80+8, uintptr(0)) 17207 sqlite3.Xsqlite3_free(tls, zSql) 17208 if rc != 0 { 17209 sqlite3.Xsqlite3_result_error(tls, context, sqlite3.Xsqlite3_errmsg(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb), -1) 17210 return 17211 } 17212 findNextChars(tls, bp+80) 17213 if (*nextCharContext)(unsafe.Pointer(bp+80)).FmallocFailed != 0 { 17214 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17215 } else { 17216 var pRes uintptr 17217 pRes = sqlite3.Xsqlite3_malloc64(tls, uint64((*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed*4+1)) 17218 if pRes == uintptr(0) { 17219 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17220 } else { 17221 var i int32 17222 var n int32 = 0 17223 for i = 0; i < (*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed; i++ { 17224 n = n + writeUtf8(tls, pRes+uintptr(n), *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(bp+80)).FaResult + uintptr(i)*4))) 17225 } 17226 *(*uint8)(unsafe.Pointer(pRes + uintptr(n))) = uint8(0) 17227 sqlite3.Xsqlite3_result_text(tls, context, pRes, n, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 17228 } 17229 } 17230 sqlite3.Xsqlite3_finalize(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FpStmt) 17231 sqlite3.Xsqlite3_free(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FaResult) 17232 } 17233 17234 func sqlite3_nextchar_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17235 var rc int32 = SQLITE_OK 17236 _ = pApi 17237 17238 _ = pzErrMsg 17239 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 3, 17240 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17241 *(*uintptr)(unsafe.Pointer(&struct { 17242 f func(*libc.TLS, uintptr, int32, uintptr) 17243 }{nextCharFunc})), uintptr(0), uintptr(0)) 17244 if rc == SQLITE_OK { 17245 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 4, 17246 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17247 *(*uintptr)(unsafe.Pointer(&struct { 17248 f func(*libc.TLS, uintptr, int32, uintptr) 17249 }{nextCharFunc})), uintptr(0), uintptr(0)) 17250 } 17251 if rc == SQLITE_OK { 17252 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 5, 17253 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17254 *(*uintptr)(unsafe.Pointer(&struct { 17255 f func(*libc.TLS, uintptr, int32, uintptr) 17256 }{nextCharFunc})), uintptr(0), uintptr(0)) 17257 } 17258 return rc 17259 } 17260 17261 var aiClass = [256]uint8{ 17262 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), 17263 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), 17264 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), 17265 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), 17266 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), 17267 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), 17268 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), 17269 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), 17270 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), 17271 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), 17272 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), 17273 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), 17274 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), 17275 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), 17276 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), 17277 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), 17278 } 17279 17280 var sqlite3UpperToLower = [256]uint8{ 17281 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), 17282 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), 17283 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), 17284 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), 17285 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), 17286 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), 17287 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), 17288 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), 17289 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), 17290 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), 17291 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), 17292 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), 17293 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), 17294 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), 17295 uint8(252), uint8(253), uint8(254), uint8(255), 17296 } 17297 17298 var sqlite3CtypeMap = [256]uint8{ 17299 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17300 uint8(0x00), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x00), uint8(0x00), 17301 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17302 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17303 uint8(0x01), uint8(0x00), uint8(0x80), uint8(0x00), uint8(0x40), uint8(0x00), uint8(0x00), uint8(0x80), 17304 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17305 uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), 17306 uint8(0x0c), uint8(0x0c), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17307 uint8(0x00), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x02), 17308 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 17309 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 17310 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x80), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x40), 17311 uint8(0x80), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x22), 17312 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 17313 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 17314 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17315 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17316 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17317 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17318 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17319 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17320 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17321 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17322 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17323 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17324 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17325 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17326 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17327 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17328 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17329 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17330 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17331 } 17332 17333 func sqlite3GetToken(tls *libc.TLS, z uintptr, tokenType uintptr) int32 { 17334 var i int32 17335 var c int32 17336 switch int32(aiClass[*(*uint8)(unsafe.Pointer(z))]) { 17337 case CC_SPACE: 17338 { 17339 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x01 != 0; i++ { 17340 } 17341 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17342 return i 17343 17344 } 17345 case CC_MINUS: 17346 { 17347 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '-' { 17348 for i = 2; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && c != '\n'; i++ { 17349 } 17350 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17351 return i 17352 } 17353 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17354 return 1 17355 17356 } 17357 case CC_LP: 17358 { 17359 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17360 return 1 17361 17362 } 17363 case CC_RP: 17364 { 17365 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17366 return 1 17367 17368 } 17369 case CC_SEMI: 17370 { 17371 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17372 return 1 17373 17374 } 17375 case CC_PLUS: 17376 { 17377 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17378 return 1 17379 17380 } 17381 case CC_STAR: 17382 { 17383 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17384 return 1 17385 17386 } 17387 case CC_SLASH: 17388 { 17389 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '*' || int32(*(*uint8)(unsafe.Pointer(z + 2))) == 0 { 17390 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17391 return 1 17392 } 17393 i = 3 17394 c = int32(*(*uint8)(unsafe.Pointer(z + 2))) 17395 for ; (c != '*' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/') && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17396 } 17397 if c != 0 { 17398 i++ 17399 } 17400 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17401 return i 17402 17403 } 17404 case CC_PERCENT: 17405 { 17406 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17407 return 1 17408 17409 } 17410 case CC_EQ: 17411 { 17412 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17413 return 1 + libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z + 1))) == '=') 17414 17415 } 17416 case CC_LT: 17417 { 17418 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 17419 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17420 return 2 17421 } else if c == '>' { 17422 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17423 return 2 17424 } else if c == '<' { 17425 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17426 return 2 17427 } else { 17428 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17429 return 1 17430 } 17431 17432 } 17433 fallthrough 17434 case CC_GT: 17435 { 17436 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 17437 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17438 return 2 17439 } else if c == '>' { 17440 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17441 return 2 17442 } else { 17443 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17444 return 1 17445 } 17446 17447 } 17448 fallthrough 17449 case CC_BANG: 17450 { 17451 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '=' { 17452 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17453 return 1 17454 } else { 17455 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17456 return 2 17457 } 17458 17459 } 17460 fallthrough 17461 case CC_PIPE: 17462 { 17463 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '|' { 17464 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17465 return 1 17466 } else { 17467 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17468 return 2 17469 } 17470 17471 } 17472 fallthrough 17473 case CC_COMMA: 17474 { 17475 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17476 return 1 17477 17478 } 17479 case CC_AND: 17480 { 17481 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17482 return 1 17483 17484 } 17485 case CC_TILDA: 17486 { 17487 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17488 return 1 17489 17490 } 17491 case CC_QUOTE: 17492 { 17493 var delim int32 = int32(*(*uint8)(unsafe.Pointer(z))) 17494 17495 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17496 if c == delim { 17497 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == delim { 17498 i++ 17499 } else { 17500 break 17501 } 17502 } 17503 } 17504 if c == '\'' { 17505 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17506 return i + 1 17507 } else if c != 0 { 17508 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17509 return i + 1 17510 } else { 17511 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17512 return i 17513 } 17514 17515 } 17516 fallthrough 17517 case CC_DOT: 17518 { 17519 if !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + 1))])&0x04 != 0) { 17520 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17521 return 1 17522 } 17523 17524 } 17525 fallthrough 17526 case CC_DIGIT: 17527 { 17528 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17529 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 { 17530 for i = 3; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17531 } 17532 return i 17533 } 17534 for i = 0; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 17535 } 17536 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' { 17537 i++ 17538 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 17539 i++ 17540 } 17541 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17542 } 17543 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 || 17544 (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) { 17545 i = i + 2 17546 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 17547 i++ 17548 } 17549 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17550 } 17551 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17552 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17553 i++ 17554 } 17555 return i 17556 17557 } 17558 case CC_QUOTE2: 17559 { 17560 i = 1 17561 c = int32(*(*uint8)(unsafe.Pointer(z))) 17562 for ; c != ']' && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17563 } 17564 *(*int32)(unsafe.Pointer(tokenType)) = func() int32 { 17565 if c == ']' { 17566 return TK_NAME 17567 } 17568 return TK_ERROR 17569 }() 17570 return i 17571 17572 } 17573 case CC_VARNUM: 17574 { 17575 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17576 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 17577 } 17578 return i 17579 17580 } 17581 case CC_DOLLAR: 17582 fallthrough 17583 case CC_VARALPHA: 17584 { 17585 var n int32 = 0 17586 17587 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17588 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17589 if int32(sqlite3CtypeMap[uint8(c)])&0x46 != 0 { 17590 n++ 17591 } else if c == '(' && n > 0 { 17592 for __ccgo := true; __ccgo; __ccgo = libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && !(int32(sqlite3CtypeMap[uint8(c)])&0x01 != 0) && c != ')' { 17593 i++ 17594 } 17595 if c == ')' { 17596 i++ 17597 } else { 17598 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17599 } 17600 break 17601 } else if c == ':' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == ':' { 17602 i++ 17603 } else { 17604 break 17605 } 17606 } 17607 if n == 0 { 17608 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17609 } 17610 return i 17611 17612 } 17613 case CC_KYWD: 17614 { 17615 for i = 1; int32(aiClass[*(*uint8)(unsafe.Pointer(z + uintptr(i)))]) <= CC_KYWD; i++ { 17616 } 17617 if int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17618 i++ 17619 break 17620 } 17621 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17622 return i 17623 17624 } 17625 case CC_X: 17626 { 17627 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '\'' { 17628 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17629 for i = 2; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17630 } 17631 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' || i%2 != 0 { 17632 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17633 for *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' { 17634 i++ 17635 } 17636 } 17637 if *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 { 17638 i++ 17639 } 17640 return i 17641 } 17642 17643 } 17644 fallthrough 17645 case CC_ID: 17646 { 17647 i = 1 17648 break 17649 17650 } 17651 default: 17652 { 17653 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17654 return 1 17655 17656 } 17657 } 17658 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17659 i++ 17660 } 17661 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17662 return i 17663 } 17664 17665 func sqlite3_normalize(tls *libc.TLS, zSql uintptr) uintptr { 17666 bp := tls.Alloc(4) 17667 defer tls.Free(4) 17668 17669 var z uintptr 17670 var nZ sqlite3_int64 17671 var nSql sqlite3_int64 17672 var i int32 17673 var j int32 17674 17675 var n int32 17676 var k int32 17677 17678 nSql = sqlite3_int64(libc.Xstrlen(tls, zSql)) 17679 nZ = nSql 17680 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nZ+int64(2))) 17681 if z == uintptr(0) { 17682 return uintptr(0) 17683 } 17684 for i = libc.AssignInt32(&j, 0); *(*uint8)(unsafe.Pointer(zSql + uintptr(i))) != 0; i = i + n { 17685 n = sqlite3GetToken(tls, zSql+uintptr(i), bp) 17686 switch *(*int32)(unsafe.Pointer(bp)) { 17687 case TK_SPACE: 17688 { 17689 break 17690 17691 } 17692 case TK_ERROR: 17693 { 17694 sqlite3.Xsqlite3_free(tls, z) 17695 return uintptr(0) 17696 17697 } 17698 case TK_LITERAL: 17699 { 17700 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8('?') 17701 break 17702 17703 } 17704 case TK_PUNCT: 17705 fallthrough 17706 case TK_NAME: 17707 { 17708 if n == 4 && sqlite3.Xsqlite3_strnicmp(tls, zSql+uintptr(i), ts+5846, 4) == 0 { 17709 if j >= 3 && libc.Xstrncmp(tls, z+uintptr(j)-uintptr(2), ts+5851, uint64(2)) == 0 && !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(j-3)))])&0x46 != 0) || 17710 j >= 4 && libc.Xstrncmp(tls, z+uintptr(j)-uintptr(3), ts+5854, uint64(3)) == 0 && !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(j-4)))])&0x46 != 0) { 17711 } else { 17712 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8('?') 17713 break 17714 } 17715 } 17716 if j > 0 && int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(j-1)))])&0x46 != 0 && int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(zSql + uintptr(i)))])&0x46 != 0 { 17717 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(' ') 17718 } 17719 for k = 0; k < n; k++ { 17720 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = sqlite3UpperToLower[*(*uint8)(unsafe.Pointer(zSql + uintptr(i+k)))] 17721 } 17722 break 17723 17724 } 17725 } 17726 } 17727 for j > 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(j-1)))) == ' ' { 17728 j-- 17729 } 17730 if j > 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(j-1)))) != ';' { 17731 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(';') 17732 } 17733 *(*uint8)(unsafe.Pointer(z + uintptr(j))) = uint8(0) 17734 17735 for i = 0; i < j; i = n { 17736 var zIn uintptr = libc.Xstrstr(tls, z+uintptr(i), ts+5858) 17737 var nParen int32 17738 if zIn == uintptr(0) { 17739 break 17740 } 17741 n = int32((int64(zIn)-int64(z))/1) + 3 17742 if n != 0 && int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(zIn + libc.UintptrFromInt32(-1)))])&0x46 != 0 { 17743 continue 17744 } 17745 if libc.Xstrncmp(tls, zIn, ts+5862, uint64(9)) == 0 && !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(zIn + 9))])&0x46 != 0) { 17746 continue 17747 } 17748 if libc.Xstrncmp(tls, zIn, ts+5872, uint64(7)) == 0 && !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(zIn + 7))])&0x46 != 0) { 17749 continue 17750 } 17751 nParen = 1 17752 k = 0 17753 for ; *(*uint8)(unsafe.Pointer(z + uintptr(n+k))) != 0; k++ { 17754 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(n+k)))) == '(' { 17755 nParen++ 17756 } 17757 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(n+k)))) == ')' { 17758 nParen-- 17759 if nParen == 0 { 17760 break 17761 } 17762 } 17763 } 17764 17765 if k < 5 { 17766 z = sqlite3.Xsqlite3_realloc64(tls, z, uint64(j+(5-k)+1)) 17767 if z == uintptr(0) { 17768 return uintptr(0) 17769 } 17770 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 17771 } else if k > 5 { 17772 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 17773 } 17774 j = j - k + 5 17775 *(*uint8)(unsafe.Pointer(z + uintptr(j))) = uint8(0) 17776 libc.Xmemcpy(tls, z+uintptr(n), ts+5880, uint64(5)) 17777 } 17778 return z 17779 } 17780 17781 type Percentile1 = struct { 17782 FnAlloc uint32 17783 FnUsed uint32 17784 FrPct float64 17785 Fa uintptr 17786 } 17787 17788 type Percentile = Percentile1 17789 17790 func isInfinity(tls *libc.TLS, r float64) int32 { 17791 bp := tls.Alloc(16) 17792 defer tls.Free(16) 17793 *(*float64)(unsafe.Pointer(bp + 8)) = r 17794 17795 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 17796 return libc.Bool32(*(*sqlite3_uint64)(unsafe.Pointer(bp))>>52&uint64(0x7ff) == uint64(0x7ff)) 17797 } 17798 17799 func sameValue(tls *libc.TLS, a float64, b float64) int32 { 17800 a = a - b 17801 return libc.Bool32(a >= -0.001 && a <= 0.001) 17802 } 17803 17804 func percentStep(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 17805 var p uintptr 17806 var rPct float64 17807 var eType int32 17808 var y float64 17809 17810 eType = sqlite3.Xsqlite3_value_numeric_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17811 rPct = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17812 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT || 17813 rPct < 0.0 || rPct > 100.0 { 17814 sqlite3.Xsqlite3_result_error(tls, pCtx, 17815 ts+5886, -1) 17816 return 17817 } 17818 17819 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, int32(unsafe.Sizeof(Percentile{}))) 17820 if p == uintptr(0) { 17821 return 17822 } 17823 17824 if (*Percentile)(unsafe.Pointer(p)).FrPct == 0.0 { 17825 (*Percentile)(unsafe.Pointer(p)).FrPct = rPct + 1.0 17826 } else if !(sameValue(tls, (*Percentile)(unsafe.Pointer(p)).FrPct, rPct+1.0) != 0) { 17827 sqlite3.Xsqlite3_result_error(tls, pCtx, 17828 ts+5953, -1) 17829 return 17830 } 17831 17832 eType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) 17833 if eType == SQLITE_NULL { 17834 return 17835 } 17836 17837 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT { 17838 sqlite3.Xsqlite3_result_error(tls, pCtx, 17839 ts+6017, -1) 17840 return 17841 } 17842 17843 y = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 17844 if isInfinity(tls, y) != 0 { 17845 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+6061, -1) 17846 return 17847 } 17848 17849 if (*Percentile)(unsafe.Pointer(p)).FnUsed >= (*Percentile)(unsafe.Pointer(p)).FnAlloc { 17850 var n uint32 = (*Percentile)(unsafe.Pointer(p)).FnAlloc*uint32(2) + uint32(250) 17851 var a uintptr = sqlite3.Xsqlite3_realloc64(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64(unsafe.Sizeof(float64(0)))*uint64(n)) 17852 if a == uintptr(0) { 17853 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17854 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 17855 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 17856 return 17857 } 17858 (*Percentile)(unsafe.Pointer(p)).FnAlloc = n 17859 (*Percentile)(unsafe.Pointer(p)).Fa = a 17860 } 17861 *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncUint32(&(*Percentile)(unsafe.Pointer(p)).FnUsed, 1))*8)) = y 17862 } 17863 17864 func doubleCmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 17865 var a float64 = *(*float64)(unsafe.Pointer(pA)) 17866 var b float64 = *(*float64)(unsafe.Pointer(pB)) 17867 if a == b { 17868 return 0 17869 } 17870 if a < b { 17871 return -1 17872 } 17873 return +1 17874 } 17875 17876 func percentFinal(tls *libc.TLS, pCtx uintptr) { 17877 var p uintptr 17878 var i1 uint32 17879 var i2 uint32 17880 var v1 float64 17881 var v2 float64 17882 var ix float64 17883 var vx float64 17884 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, 0) 17885 if p == uintptr(0) { 17886 return 17887 } 17888 if (*Percentile)(unsafe.Pointer(p)).Fa == uintptr(0) { 17889 return 17890 } 17891 if (*Percentile)(unsafe.Pointer(p)).FnUsed != 0 { 17892 libc.Xqsort(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64((*Percentile)(unsafe.Pointer(p)).FnUsed), uint64(unsafe.Sizeof(float64(0))), *(*uintptr)(unsafe.Pointer(&struct { 17893 f func(*libc.TLS, uintptr, uintptr) int32 17894 }{doubleCmp}))) 17895 ix = ((*Percentile)(unsafe.Pointer(p)).FrPct - 1.0) * float64((*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1)) * 0.01 17896 i1 = uint32(ix) 17897 if ix == float64(i1) || i1 == (*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1) { 17898 i2 = i1 17899 } else { 17900 i2 = i1 + uint32(1) 17901 } 17902 v1 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i1)*8)) 17903 v2 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i2)*8)) 17904 vx = v1 + (v2-v1)*(ix-float64(i1)) 17905 sqlite3.Xsqlite3_result_double(tls, pCtx, vx) 17906 } 17907 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 17908 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 17909 } 17910 17911 func sqlite3_percentile_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17912 var rc int32 = SQLITE_OK 17913 _ = pApi 17914 17915 _ = pzErrMsg 17916 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6087, 2, 17917 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17918 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17919 f func(*libc.TLS, uintptr, int32, uintptr) 17920 }{percentStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{percentFinal}))) 17921 return rc 17922 } 17923 17924 type prefixes_vtab1 = struct{ Fbase sqlite3_vtab } 17925 17926 type prefixes_vtab = prefixes_vtab1 17927 17928 type prefixes_cursor1 = struct { 17929 Fbase sqlite3_vtab_cursor 17930 FiRowid sqlite3_int64 17931 FzStr uintptr 17932 FnStr int32 17933 F__ccgo_pad1 [4]byte 17934 } 17935 17936 type prefixes_cursor = prefixes_cursor1 17937 17938 func prefixesConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17939 var pNew uintptr 17940 var rc int32 17941 17942 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17943 ts+6098) 17944 if rc == SQLITE_OK { 17945 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_vtab{}))) 17946 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17947 if pNew == uintptr(0) { 17948 return SQLITE_NOMEM 17949 } 17950 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(prefixes_vtab{}))) 17951 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 17952 } 17953 return rc 17954 } 17955 17956 func prefixesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17957 var p uintptr = pVtab 17958 sqlite3.Xsqlite3_free(tls, p) 17959 return SQLITE_OK 17960 } 17961 17962 func prefixesOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17963 var pCur uintptr 17964 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_cursor{}))) 17965 if pCur == uintptr(0) { 17966 return SQLITE_NOMEM 17967 } 17968 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(prefixes_cursor{}))) 17969 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17970 return SQLITE_OK 17971 } 17972 17973 func prefixesClose(tls *libc.TLS, cur uintptr) int32 { 17974 var pCur uintptr = cur 17975 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 17976 sqlite3.Xsqlite3_free(tls, pCur) 17977 return SQLITE_OK 17978 } 17979 17980 func prefixesNext(tls *libc.TLS, cur uintptr) int32 { 17981 var pCur uintptr = cur 17982 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid++ 17983 return SQLITE_OK 17984 } 17985 17986 func prefixesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 17987 var pCur uintptr = cur 17988 switch i { 17989 case 0: 17990 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), 17991 uintptr(0)) 17992 break 17993 default: 17994 sqlite3.Xsqlite3_result_text(tls, ctx, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr, (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr, uintptr(0)) 17995 break 17996 } 17997 return SQLITE_OK 17998 } 17999 18000 func prefixesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18001 var pCur uintptr = cur 18002 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid 18003 return SQLITE_OK 18004 } 18005 18006 func prefixesEof(tls *libc.TLS, cur uintptr) int32 { 18007 var pCur uintptr = cur 18008 return libc.Bool32((*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid > sqlite3_int64((*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr)) 18009 } 18010 18011 func prefixesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 18012 bp := tls.Alloc(8) 18013 defer tls.Free(8) 18014 18015 var pCur uintptr = pVtabCursor 18016 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 18017 if argc > 0 { 18018 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 18019 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = func() int32 { 18020 if (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr != 0 { 18021 return int32(libc.Xstrlen(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr)) 18022 } 18023 return 0 18024 }() 18025 } else { 18026 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = uintptr(0) 18027 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = 0 18028 } 18029 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 18030 return SQLITE_OK 18031 } 18032 18033 func prefixesBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 18034 var i int32 18035 var p uintptr 18036 18037 i = 0 18038 p = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 18039 __1: 18040 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 18041 goto __3 18042 } 18043 { 18044 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != 1 { 18045 goto __2 18046 } 18047 if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 18048 goto __2 18049 } 18050 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 18051 goto __2 18052 } 18053 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 18054 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 18055 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 18056 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 18057 return SQLITE_OK 18058 18059 } 18060 goto __2 18061 __2: 18062 i++ 18063 p += 12 18064 goto __1 18065 goto __3 18066 __3: 18067 ; 18068 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000000) 18069 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000000000) 18070 return SQLITE_OK 18071 } 18072 18073 var prefixesModule = sqlite3_module{ 18074 FxConnect: 0, 18075 FxBestIndex: 0, 18076 FxDisconnect: 0, 18077 FxOpen: 0, 18078 FxClose: 0, 18079 FxFilter: 0, 18080 FxNext: 0, 18081 FxEof: 0, 18082 FxColumn: 0, 18083 FxRowid: 0, 18084 } 18085 18086 func prefixLengthFunc(tls *libc.TLS, ctx uintptr, nVal int32, apVal uintptr) { 18087 var nByte int32 18088 var nRet int32 = 0 18089 var zL uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 18090 var zR uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 18091 var nL int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 18092 var nR int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 18093 var i int32 18094 18095 nByte = func() int32 { 18096 if nL > nR { 18097 return nL 18098 } 18099 return nR 18100 }() 18101 for i = 0; i < nByte; i++ { 18102 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i)))) != int32(*(*uint8)(unsafe.Pointer(zR + uintptr(i)))) { 18103 break 18104 } 18105 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 != 0x80 { 18106 nRet++ 18107 } 18108 } 18109 18110 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 == 0x80 { 18111 nRet-- 18112 } 18113 sqlite3.Xsqlite3_result_int(tls, ctx, nRet) 18114 } 18115 18116 func sqlite3_prefixes_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18117 var rc int32 = SQLITE_OK 18118 _ = pApi 18119 18120 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6162, uintptr(unsafe.Pointer(&prefixesModule)), uintptr(0)) 18121 if rc == SQLITE_OK { 18122 rc = sqlite3.Xsqlite3_create_function(tls, 18123 db, ts+6171, 2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 18124 f func(*libc.TLS, uintptr, int32, uintptr) 18125 }{prefixLengthFunc})), uintptr(0), uintptr(0)) 18126 } 18127 return rc 18128 } 18129 18130 type qpvtab_vtab1 = struct{ Fbase sqlite3_vtab } 18131 18132 type qpvtab_vtab = qpvtab_vtab1 18133 18134 type qpvtab_cursor1 = struct { 18135 Fbase sqlite3_vtab_cursor 18136 FiRowid sqlite3_int64 18137 FzData uintptr 18138 FnData int32 18139 Fflags int32 18140 } 18141 18142 type qpvtab_cursor = qpvtab_cursor1 18143 18144 var azColname = [13]uintptr{ 18145 ts + 6185, 18146 ts + 6188, 18147 ts + 6191, 18148 ts + 6194, 18149 ts + 6197, 18150 ts + 6200, 18151 ts + 6204, ts + 6206, ts + 6208, ts + 6210, ts + 6212, 18152 ts + 6214, 18153 ts + 584, 18154 } 18155 18156 func qpvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 18157 var pNew uintptr 18158 var rc int32 18159 18160 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 18161 ts+6220) 18162 if rc == SQLITE_OK { 18163 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_vtab{}))) 18164 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 18165 if pNew == uintptr(0) { 18166 return SQLITE_NOMEM 18167 } 18168 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(qpvtab_vtab{}))) 18169 } 18170 return rc 18171 } 18172 18173 func qpvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 18174 var p uintptr = pVtab 18175 sqlite3.Xsqlite3_free(tls, p) 18176 return SQLITE_OK 18177 } 18178 18179 func qpvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 18180 var pCur uintptr 18181 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_cursor{}))) 18182 if pCur == uintptr(0) { 18183 return SQLITE_NOMEM 18184 } 18185 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(qpvtab_cursor{}))) 18186 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 18187 return SQLITE_OK 18188 } 18189 18190 func qpvtabClose(tls *libc.TLS, cur uintptr) int32 { 18191 var pCur uintptr = cur 18192 sqlite3.Xsqlite3_free(tls, pCur) 18193 return SQLITE_OK 18194 } 18195 18196 func qpvtabNext(tls *libc.TLS, cur uintptr) int32 { 18197 var pCur uintptr = cur 18198 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 18199 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 18200 var zEnd uintptr = libc.Xstrchr(tls, z, '\n') 18201 if zEnd != 0 { 18202 zEnd++ 18203 } 18204 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = sqlite3_int64(int32((int64(zEnd) - int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData)) / 1)) 18205 } 18206 return SQLITE_OK 18207 } 18208 18209 func qpvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 18210 bp := tls.Alloc(1) 18211 defer tls.Free(1) 18212 18213 var pCur uintptr = cur 18214 if i >= QPVTAB_VN && i <= QPVTAB_RHS && (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 18215 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 18216 var zEnd uintptr 18217 var j int32 18218 j = QPVTAB_VN 18219 for 1 != 0 { 18220 zEnd = libc.Xstrchr(tls, z, func() int32 { 18221 if j == QPVTAB_RHS { 18222 return '\n' 18223 } 18224 return ',' 18225 }()) 18226 if j == i || zEnd == uintptr(0) { 18227 break 18228 } 18229 z = zEnd + uintptr(1) 18230 j++ 18231 } 18232 if zEnd == z { 18233 sqlite3.Xsqlite3_result_null(tls, ctx) 18234 } else if i == QPVTAB_IX || i == QPVTAB_OP || i == QPVTAB_UX { 18235 sqlite3.Xsqlite3_result_int(tls, ctx, libc.Xatoi(tls, z)) 18236 } else { 18237 sqlite3.Xsqlite3_result_text64(tls, ctx, z, uint64((int64(zEnd)-int64(z))/1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 18238 } 18239 } else if i >= QPVTAB_A && i <= QPVTAB_E { 18240 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags&0x001 != 0 { 18241 sqlite3.Xsqlite3_result_int(tls, ctx, i-QPVTAB_A+1) 18242 } else { 18243 *(*uint8)(unsafe.Pointer(bp)) = uint8('a' + i - QPVTAB_A) 18244 sqlite3.Xsqlite3_result_text64(tls, ctx, bp, uint64(1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 18245 } 18246 } else if i == QPVTAB_FLAGS { 18247 sqlite3.Xsqlite3_result_int(tls, ctx, (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags) 18248 } 18249 return SQLITE_OK 18250 } 18251 18252 func qpvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18253 var pCur uintptr = cur 18254 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid 18255 return SQLITE_OK 18256 } 18257 18258 func qpvtabEof(tls *libc.TLS, cur uintptr) int32 { 18259 var pCur uintptr = cur 18260 return libc.Bool32((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid >= sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData)) 18261 } 18262 18263 func qpvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 18264 var pCur uintptr = pVtabCursor 18265 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 18266 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData = idxStr 18267 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData = int32(libc.Xstrlen(tls, idxStr)) 18268 (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags = idxNum 18269 return SQLITE_OK 18270 } 18271 18272 func qpvtabStrAppendValue(tls *libc.TLS, pStr uintptr, pVal uintptr) { 18273 bp := tls.Alloc(25) 18274 defer tls.Free(25) 18275 18276 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 18277 case SQLITE_NULL: 18278 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+5846, 0) 18279 break 18280 case SQLITE_INTEGER: 18281 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6325, libc.VaList(bp, sqlite3.Xsqlite3_value_int64(tls, pVal))) 18282 break 18283 case SQLITE_FLOAT: 18284 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6330, libc.VaList(bp+8, sqlite3.Xsqlite3_value_double(tls, pVal))) 18285 break 18286 case SQLITE_TEXT: 18287 { 18288 var i int32 18289 var a uintptr = sqlite3.Xsqlite3_value_text(tls, pVal) 18290 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 18291 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18292 for i = 0; i < n; i++ { 18293 *(*uint8)(unsafe.Pointer(bp + 24)) = *(*uint8)(unsafe.Pointer(a + uintptr(i))) 18294 if int32(*(*uint8)(unsafe.Pointer(bp + 24))) == '\n' { 18295 *(*uint8)(unsafe.Pointer(bp + 24)) = uint8(' ') 18296 } 18297 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 18298 if int32(*(*uint8)(unsafe.Pointer(bp + 24))) == '\'' { 18299 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 18300 } 18301 } 18302 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18303 break 18304 18305 } 18306 case SQLITE_BLOB: 18307 { 18308 var i int32 18309 var a uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 18310 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 18311 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6334, 2) 18312 for i = 0; i < n; i++ { 18313 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6337, libc.VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a + uintptr(i)))))) 18314 } 18315 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18316 break 18317 18318 } 18319 } 18320 } 18321 18322 func qpvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 18323 bp := tls.Alloc(120) 18324 defer tls.Free(120) 18325 18326 var pStr uintptr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 18327 var i int32 18328 var k int32 = 0 18329 var rc int32 18330 _ = rc 18331 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6342, libc.VaList(bp, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint)) 18332 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 18333 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 18334 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 18335 if iCol == QPVTAB_FLAGS && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 18336 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 18337 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 18338 18339 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 18340 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 18341 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x002 != 0 { 18342 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 18343 } 18344 } 18345 } 18346 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 18347 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 18348 iCol = QPVTAB_NONE 18349 } 18350 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6362, 18351 libc.VaList(bp+8, i, 18352 azColname[iCol], 18353 op, 18354 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable))) 18355 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 18356 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 18357 18358 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 18359 qpvtabStrAppendValue(tls, pStr, *(*uintptr)(unsafe.Pointer(bp + 112))) 18360 } 18361 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6387, 1) 18362 } 18363 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 18364 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 18365 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 18366 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 18367 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 18368 iCol = QPVTAB_NONE 18369 } 18370 if iCol >= QPVTAB_A && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 18371 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&k, 1) 18372 if iCol <= QPVTAB_FLAGS || (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x004 != 0 { 18373 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 18374 } 18375 } 18376 } 18377 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6389, libc.VaList(bp+40, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy)) 18378 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; i++ { 18379 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 18380 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6406, libc.VaList(bp+48, i, 18381 func() uintptr { 18382 if iCol >= 0 { 18383 return azColname[iCol] 18384 } 18385 return ts + 6427 18386 }(), 18387 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy+uintptr(i)*8)).Fdesc))) 18388 } 18389 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6433, 18390 libc.VaList(bp+72, sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo))) 18391 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6463, libc.VaList(bp+80, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags)) 18392 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6480, libc.VaList(bp+88, int32((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 18393 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 18394 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 18395 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6496, libc.VaList(bp+96, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum)) 18396 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6511, 18397 libc.VaList(bp+104, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed)) 18398 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_str_finish(tls, pStr) 18399 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 18400 return SQLITE_OK 18401 } 18402 18403 var qpvtabModule = sqlite3_module{ 18404 FxConnect: 0, 18405 FxBestIndex: 0, 18406 FxDisconnect: 0, 18407 FxOpen: 0, 18408 FxClose: 0, 18409 FxFilter: 0, 18410 FxNext: 0, 18411 FxEof: 0, 18412 FxColumn: 0, 18413 FxRowid: 0, 18414 } 18415 18416 func sqlite3_qpvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18417 var rc int32 = SQLITE_OK 18418 _ = pApi 18419 18420 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6535, uintptr(unsafe.Pointer(&qpvtabModule)), uintptr(0)) 18421 return rc 18422 } 18423 18424 type ReStateNumber = uint16 18425 18426 type ReStateSet1 = struct { 18427 FnState uint32 18428 F__ccgo_pad1 [4]byte 18429 FaState uintptr 18430 } 18431 18432 type ReStateSet = ReStateSet1 18433 18434 type ReInput1 = struct { 18435 Fz uintptr 18436 Fi int32 18437 Fmx int32 18438 } 18439 18440 type ReInput = ReInput1 18441 18442 type ReCompiled1 = struct { 18443 FsIn ReInput 18444 FzErr uintptr 18445 FaOp uintptr 18446 FaArg uintptr 18447 FxNextChar uintptr 18448 FzInit [12]uint8 18449 FnInit int32 18450 FnState uint32 18451 FnAlloc uint32 18452 } 18453 18454 type ReCompiled = ReCompiled1 18455 18456 func re_add_state(tls *libc.TLS, pSet uintptr, newState int32) { 18457 var i uint32 18458 for i = uint32(0); i < (*ReStateSet)(unsafe.Pointer(pSet)).FnState; i++ { 18459 if int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(i)*2))) == newState { 18460 return 18461 } 18462 } 18463 *(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(libc.PostIncUint32(&(*ReStateSet)(unsafe.Pointer(pSet)).FnState, 1))*2)) = ReStateNumber(newState) 18464 } 18465 18466 func re_next_char(tls *libc.TLS, p uintptr) uint32 { 18467 var c uint32 18468 if (*ReInput)(unsafe.Pointer(p)).Fi >= (*ReInput)(unsafe.Pointer(p)).Fmx { 18469 return uint32(0) 18470 } 18471 c = uint32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*ReInput)(unsafe.Pointer(p)).Fi, 1))))) 18472 if c >= uint32(0x80) { 18473 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 { 18474 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) 18475 if c < uint32(0x80) { 18476 c = uint32(0xfffd) 18477 } 18478 } 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 && 18479 int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0xc0 == 0x80 { 18480 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) 18481 *(*int32)(unsafe.Pointer(p + 8)) += 2 18482 if c <= uint32(0x7ff) || c >= uint32(0xd800) && c <= uint32(0xdfff) { 18483 c = uint32(0xfffd) 18484 } 18485 } 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 && 18486 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 { 18487 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) | 18488 uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+2))))&0x3f) 18489 *(*int32)(unsafe.Pointer(p + 8)) += 3 18490 if c <= uint32(0xffff) || c > uint32(0x10ffff) { 18491 c = uint32(0xfffd) 18492 } 18493 } else { 18494 c = uint32(0xfffd) 18495 } 18496 } 18497 return c 18498 } 18499 18500 func re_next_char_nocase(tls *libc.TLS, p uintptr) uint32 { 18501 var c uint32 = re_next_char(tls, p) 18502 if c >= uint32('A') && c <= uint32('Z') { 18503 c = c + uint32('a'-'A') 18504 } 18505 return c 18506 } 18507 18508 func re_word_char(tls *libc.TLS, c int32) int32 { 18509 return libc.Bool32(c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || 18510 c >= 'A' && c <= 'Z' || c == '_') 18511 } 18512 18513 func re_digit_char(tls *libc.TLS, c int32) int32 { 18514 return libc.Bool32(c >= '0' && c <= '9') 18515 } 18516 18517 func re_space_char(tls *libc.TLS, c int32) int32 { 18518 return libc.Bool32(c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\v' || c == '\f') 18519 } 18520 18521 func sqlite3re_match(tls *libc.TLS, pRe uintptr, zIn uintptr, nIn int32) int32 { 18522 bp := tls.Alloc(248) 18523 defer tls.Free(248) 18524 18525 var pThis uintptr 18526 var pNext uintptr 18527 18528 var pToFree uintptr 18529 var i uint32 18530 var iSwap uint32 18531 var c int32 18532 var cPrev int32 18533 var rc int32 18534 18535 var x uint8 18536 var j int32 18537 var n int32 18538 var hit int32 18539 var x1 int32 18540 i = uint32(0) 18541 iSwap = uint32(0) 18542 c = RE_EOF + 1 18543 cPrev = 0 18544 rc = 0 18545 18546 (*ReInput)(unsafe.Pointer(bp + 232)).Fz = zIn 18547 (*ReInput)(unsafe.Pointer(bp + 232)).Fi = 0 18548 (*ReInput)(unsafe.Pointer(bp + 232)).Fmx = func() int32 { 18549 if nIn >= 0 { 18550 return nIn 18551 } 18552 return int32(libc.Xstrlen(tls, zIn)) 18553 }() 18554 18555 if !((*ReCompiled)(unsafe.Pointer(pRe)).FnInit != 0) { 18556 goto __1 18557 } 18558 x = *(*uint8)(unsafe.Pointer(pRe + 48)) 18559 __2: 18560 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit <= (*ReInput)(unsafe.Pointer(bp+232)).Fmx && 18561 (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr((*ReInput)(unsafe.Pointer(bp+232)).Fi)))) != int32(x) || libc.Xstrncmp(tls, zIn+uintptr((*ReInput)(unsafe.Pointer(bp+232)).Fi), pRe+48, uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnInit)) != 0)) { 18562 goto __3 18563 } 18564 (*ReInput)(unsafe.Pointer(bp+232)).Fi++ 18565 goto __2 18566 __3: 18567 ; 18568 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit > (*ReInput)(unsafe.Pointer(bp+232)).Fmx) { 18569 goto __4 18570 } 18571 return 0 18572 __4: 18573 ; 18574 __1: 18575 ; 18576 if !(uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState) <= uint64(unsafe.Sizeof([100]ReStateNumber{}))/(uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2))) { 18577 goto __5 18578 } 18579 pToFree = uintptr(0) 18580 (*ReStateSet)(unsafe.Pointer(bp)).FaState = bp + 32 18581 goto __6 18582 __5: 18583 pToFree = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2)*uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState)) 18584 if !(pToFree == uintptr(0)) { 18585 goto __7 18586 } 18587 return -1 18588 __7: 18589 ; 18590 (*ReStateSet)(unsafe.Pointer(bp)).FaState = pToFree 18591 __6: 18592 ; 18593 (*ReStateSet)(unsafe.Pointer(bp + 1*16)).FaState = (*ReStateSet)(unsafe.Pointer(bp)).FaState + uintptr((*ReCompiled)(unsafe.Pointer(pRe)).FnState)*2 18594 pNext = bp + 1*16 18595 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 18596 re_add_state(tls, pNext, 0) 18597 __8: 18598 if !(c != RE_EOF && (*ReStateSet)(unsafe.Pointer(pNext)).FnState > uint32(0)) { 18599 goto __9 18600 } 18601 cPrev = c 18602 c = int32((*struct { 18603 f func(*libc.TLS, uintptr) uint32 18604 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar})).f(tls, bp+232)) 18605 pThis = pNext 18606 pNext = bp + uintptr(iSwap)*16 18607 iSwap = uint32(1) - iSwap 18608 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 18609 i = uint32(0) 18610 __10: 18611 if !(i < (*ReStateSet)(unsafe.Pointer(pThis)).FnState) { 18612 goto __12 18613 } 18614 x1 = int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pThis)).FaState + uintptr(i)*2))) 18615 switch int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) { 18616 case RE_OP_MATCH: 18617 goto __14 18618 case RE_OP_ANY: 18619 goto __15 18620 case RE_OP_WORD: 18621 goto __16 18622 case RE_OP_NOTWORD: 18623 goto __17 18624 case RE_OP_DIGIT: 18625 goto __18 18626 case RE_OP_NOTDIGIT: 18627 goto __19 18628 case RE_OP_SPACE: 18629 goto __20 18630 case RE_OP_NOTSPACE: 18631 goto __21 18632 case RE_OP_BOUNDARY: 18633 goto __22 18634 case RE_OP_ANYSTAR: 18635 goto __23 18636 case RE_OP_FORK: 18637 goto __24 18638 case RE_OP_GOTO: 18639 goto __25 18640 case RE_OP_ACCEPT: 18641 goto __26 18642 case RE_OP_CC_EXC: 18643 goto __27 18644 case RE_OP_CC_INC: 18645 goto __28 18646 } 18647 goto __13 18648 __14: 18649 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) == c) { 18650 goto __29 18651 } 18652 re_add_state(tls, pNext, x1+1) 18653 __29: 18654 ; 18655 goto __13 18656 18657 __15: 18658 if !(c != 0) { 18659 goto __30 18660 } 18661 re_add_state(tls, pNext, x1+1) 18662 __30: 18663 ; 18664 goto __13 18665 18666 __16: 18667 if !(re_word_char(tls, c) != 0) { 18668 goto __31 18669 } 18670 re_add_state(tls, pNext, x1+1) 18671 __31: 18672 ; 18673 goto __13 18674 18675 __17: 18676 if !(!(re_word_char(tls, c) != 0) && c != 0) { 18677 goto __32 18678 } 18679 re_add_state(tls, pNext, x1+1) 18680 __32: 18681 ; 18682 goto __13 18683 18684 __18: 18685 if !(re_digit_char(tls, c) != 0) { 18686 goto __33 18687 } 18688 re_add_state(tls, pNext, x1+1) 18689 __33: 18690 ; 18691 goto __13 18692 18693 __19: 18694 if !(!(re_digit_char(tls, c) != 0) && c != 0) { 18695 goto __34 18696 } 18697 re_add_state(tls, pNext, x1+1) 18698 __34: 18699 ; 18700 goto __13 18701 18702 __20: 18703 if !(re_space_char(tls, c) != 0) { 18704 goto __35 18705 } 18706 re_add_state(tls, pNext, x1+1) 18707 __35: 18708 ; 18709 goto __13 18710 18711 __21: 18712 if !(!(re_space_char(tls, c) != 0) && c != 0) { 18713 goto __36 18714 } 18715 re_add_state(tls, pNext, x1+1) 18716 __36: 18717 ; 18718 goto __13 18719 18720 __22: 18721 if !(re_word_char(tls, c) != re_word_char(tls, cPrev)) { 18722 goto __37 18723 } 18724 re_add_state(tls, pThis, x1+1) 18725 __37: 18726 ; 18727 goto __13 18728 18729 __23: 18730 re_add_state(tls, pNext, x1) 18731 re_add_state(tls, pThis, x1+1) 18732 goto __13 18733 18734 __24: 18735 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18736 re_add_state(tls, pThis, x1+1) 18737 goto __13 18738 18739 __25: 18740 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 18741 goto __13 18742 18743 __26: 18744 rc = 1 18745 goto re_match_end 18746 18747 __27: 18748 if !(c == 0) { 18749 goto __38 18750 } 18751 goto __13 18752 __38: 18753 ; 18754 goto re_op_cc_inc 18755 18756 __28: 18757 re_op_cc_inc: 18758 j = 1 18759 n = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) 18760 hit = 0 18761 j = 1 18762 __39: 18763 if !(j > 0 && j < n) { 18764 goto __41 18765 } 18766 if !(int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1+j)))) == RE_OP_CC_VALUE) { 18767 goto __42 18768 } 18769 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j)*4)) == c) { 18770 goto __44 18771 } 18772 hit = 1 18773 j = -1 18774 __44: 18775 ; 18776 goto __43 18777 __42: 18778 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) { 18779 goto __45 18780 } 18781 hit = 1 18782 j = -1 18783 goto __46 18784 __45: 18785 j++ 18786 __46: 18787 ; 18788 __43: 18789 ; 18790 goto __40 18791 __40: 18792 j++ 18793 goto __39 18794 goto __41 18795 __41: 18796 ; 18797 if !(int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) == RE_OP_CC_EXC) { 18798 goto __47 18799 } 18800 hit = libc.BoolInt32(!(hit != 0)) 18801 __47: 18802 ; 18803 if !(hit != 0) { 18804 goto __48 18805 } 18806 re_add_state(tls, pNext, x1+n) 18807 __48: 18808 ; 18809 goto __13 18810 18811 __13: 18812 ; 18813 goto __11 18814 __11: 18815 i++ 18816 goto __10 18817 goto __12 18818 __12: 18819 ; 18820 goto __8 18821 __9: 18822 ; 18823 i = uint32(0) 18824 __49: 18825 if !(i < (*ReStateSet)(unsafe.Pointer(pNext)).FnState) { 18826 goto __51 18827 } 18828 if !(int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pNext)).FaState + uintptr(i)*2)))))) == RE_OP_ACCEPT) { 18829 goto __52 18830 } 18831 rc = 1 18832 goto __51 18833 __52: 18834 ; 18835 goto __50 18836 __50: 18837 i++ 18838 goto __49 18839 goto __51 18840 __51: 18841 ; 18842 re_match_end: 18843 sqlite3.Xsqlite3_free(tls, pToFree) 18844 return rc 18845 } 18846 18847 func re_resize(tls *libc.TLS, p uintptr, N int32) int32 { 18848 var aOp uintptr 18849 var aArg uintptr 18850 aOp = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp, uint64(N)*uint64(unsafe.Sizeof(uint8(0)))) 18851 if aOp == uintptr(0) { 18852 return 1 18853 } 18854 (*ReCompiled)(unsafe.Pointer(p)).FaOp = aOp 18855 aArg = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg, uint64(N)*uint64(unsafe.Sizeof(int32(0)))) 18856 if aArg == uintptr(0) { 18857 return 1 18858 } 18859 (*ReCompiled)(unsafe.Pointer(p)).FaArg = aArg 18860 (*ReCompiled)(unsafe.Pointer(p)).FnAlloc = uint32(N) 18861 return 0 18862 } 18863 18864 func re_insert(tls *libc.TLS, p uintptr, iBefore int32, op int32, arg int32) int32 { 18865 var i int32 18866 if (*ReCompiled)(unsafe.Pointer(p)).FnAlloc <= (*ReCompiled)(unsafe.Pointer(p)).FnState && re_resize(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnAlloc*uint32(2))) != 0 { 18867 return 0 18868 } 18869 for i = int32((*ReCompiled)(unsafe.Pointer(p)).FnState); i > iBefore; i-- { 18870 *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i))) = *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i-1))) 18871 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i-1)*4)) 18872 } 18873 (*ReCompiled)(unsafe.Pointer(p)).FnState++ 18874 *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(iBefore))) = uint8(op) 18875 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iBefore)*4)) = arg 18876 return iBefore 18877 } 18878 18879 func re_append(tls *libc.TLS, p uintptr, op int32, arg int32) int32 { 18880 return re_insert(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnState), op, arg) 18881 } 18882 18883 func re_copy(tls *libc.TLS, p uintptr, iStart int32, N int32) { 18884 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 { 18885 return 18886 } 18887 libc.Xmemcpy(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp+uintptr((*ReCompiled)(unsafe.Pointer(p)).FnState), (*ReCompiled)(unsafe.Pointer(p)).FaOp+uintptr(iStart), uint64(N)*uint64(unsafe.Sizeof(uint8(0)))) 18888 libc.Xmemcpy(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg+uintptr((*ReCompiled)(unsafe.Pointer(p)).FnState)*4, (*ReCompiled)(unsafe.Pointer(p)).FaArg+uintptr(iStart)*4, uint64(N)*uint64(unsafe.Sizeof(int32(0)))) 18889 *(*uint32)(unsafe.Pointer(p + 64)) += uint32(N) 18890 } 18891 18892 func re_hex(tls *libc.TLS, c int32, pV uintptr) int32 { 18893 if c >= '0' && c <= '9' { 18894 c = c - '0' 18895 } else if c >= 'a' && c <= 'f' { 18896 c = c - ('a' - 10) 18897 } else if c >= 'A' && c <= 'F' { 18898 c = c - ('A' - 10) 18899 } else { 18900 return 0 18901 } 18902 *(*int32)(unsafe.Pointer(pV)) = *(*int32)(unsafe.Pointer(pV))*16 + c&0xff 18903 return 1 18904 } 18905 18906 func re_esc_char(tls *libc.TLS, p uintptr) uint32 { 18907 bp := tls.Alloc(4) 18908 defer tls.Free(4) 18909 18910 var i int32 18911 *(*int32)(unsafe.Pointer(bp)) = 0 18912 var c uint8 18913 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18914 return uint32(0) 18915 } 18916 c = *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 18917 if int32(c) == 'u' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+4 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18918 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18919 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18920 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 && 18921 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 3))), bp) != 0 && 18922 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 4))), bp) != 0 { 18923 *(*int32)(unsafe.Pointer(p + 8)) += 5 18924 return uint32(*(*int32)(unsafe.Pointer(bp))) 18925 } 18926 } 18927 if int32(c) == 'x' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+2 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18928 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 18929 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 18930 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 { 18931 *(*int32)(unsafe.Pointer(p + 8)) += 3 18932 return uint32(*(*int32)(unsafe.Pointer(bp))) 18933 } 18934 } 18935 for i = 0; zEsc[i] != 0 && int32(zEsc[i]) != int32(c); i++ { 18936 } 18937 if zEsc[i] != 0 { 18938 if i < 6 { 18939 c = zTrans[i] 18940 } 18941 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18942 } else { 18943 (*ReCompiled)(unsafe.Pointer(p)).FzErr = ts + 6542 18944 } 18945 return uint32(c) 18946 } 18947 18948 var zEsc = *(*[21]uint8)(unsafe.Pointer(ts + 6559)) 18949 var zTrans = *(*[7]uint8)(unsafe.Pointer(ts + 6580)) 18950 18951 func rePeek(tls *libc.TLS, p uintptr) uint8 { 18952 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 18953 return *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 18954 } 18955 return uint8(0) 18956 } 18957 18958 func re_subcompile_re(tls *libc.TLS, p uintptr) uintptr { 18959 var zErr uintptr 18960 var iStart int32 18961 var iEnd int32 18962 var iGoto int32 18963 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18964 zErr = re_subcompile_string(tls, p) 18965 if zErr != 0 { 18966 return zErr 18967 } 18968 for int32(rePeek(tls, p)) == '|' { 18969 iEnd = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18970 re_insert(tls, p, iStart, RE_OP_FORK, iEnd+2-iStart) 18971 iGoto = re_append(tls, p, RE_OP_GOTO, 0) 18972 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 18973 zErr = re_subcompile_string(tls, p) 18974 if zErr != 0 { 18975 return zErr 18976 } 18977 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iGoto)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iGoto)) 18978 } 18979 return uintptr(0) 18980 } 18981 18982 func re_subcompile_string(tls *libc.TLS, p uintptr) uintptr { 18983 var iPrev int32 = -1 18984 var iStart int32 18985 var c uint32 18986 var zErr uintptr 18987 for libc.AssignUint32(&c, (*struct { 18988 f func(*libc.TLS, uintptr) uint32 18989 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 18990 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 18991 switch c { 18992 case uint32('|'): 18993 fallthrough 18994 case uint32('$'): 18995 fallthrough 18996 case uint32(')'): 18997 { 18998 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi-- 18999 return uintptr(0) 19000 19001 } 19002 case uint32('('): 19003 { 19004 zErr = re_subcompile_re(tls, p) 19005 if zErr != 0 { 19006 return zErr 19007 } 19008 if int32(rePeek(tls, p)) != ')' { 19009 return ts + 6587 19010 } 19011 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19012 break 19013 19014 } 19015 case uint32('.'): 19016 { 19017 if int32(rePeek(tls, p)) == '*' { 19018 re_append(tls, p, RE_OP_ANYSTAR, 0) 19019 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19020 } else { 19021 re_append(tls, p, RE_OP_ANY, 0) 19022 } 19023 break 19024 19025 } 19026 case uint32('*'): 19027 { 19028 if iPrev < 0 { 19029 return ts + 6601 19030 } 19031 re_insert(tls, p, iPrev, RE_OP_GOTO, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 19032 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState+uint32(1))) 19033 break 19034 19035 } 19036 case uint32('+'): 19037 { 19038 if iPrev < 0 { 19039 return ts + 6621 19040 } 19041 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState)) 19042 break 19043 19044 } 19045 case uint32('?'): 19046 { 19047 if iPrev < 0 { 19048 return ts + 6641 19049 } 19050 re_insert(tls, p, iPrev, RE_OP_FORK, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 19051 break 19052 19053 } 19054 case uint32('{'): 19055 { 19056 var m int32 = 0 19057 var n int32 = 0 19058 var sz int32 19059 var j int32 19060 if iPrev < 0 { 19061 return ts + 6661 19062 } 19063 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 19064 m = int32(uint32(m*10) + c - uint32('0')) 19065 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19066 } 19067 n = m 19068 if c == uint32(',') { 19069 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19070 n = 0 19071 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 19072 n = int32(uint32(n*10) + c - uint32('0')) 19073 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19074 } 19075 } 19076 if c != uint32('}') { 19077 return ts + 6685 19078 } 19079 if n > 0 && n < m { 19080 return ts + 6699 19081 } 19082 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19083 sz = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iPrev)) 19084 if m == 0 { 19085 if n == 0 { 19086 return ts + 6724 19087 } 19088 re_insert(tls, p, iPrev, RE_OP_FORK, sz+1) 19089 n-- 19090 } else { 19091 for j = 1; j < m; j++ { 19092 re_copy(tls, p, iPrev, sz) 19093 } 19094 } 19095 for j = m; j < n; j++ { 19096 re_append(tls, p, RE_OP_FORK, sz+1) 19097 re_copy(tls, p, iPrev, sz) 19098 } 19099 if n == 0 && m > 0 { 19100 re_append(tls, p, RE_OP_FORK, -sz) 19101 } 19102 break 19103 19104 } 19105 case uint32('['): 19106 { 19107 var iFirst int32 = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 19108 if int32(rePeek(tls, p)) == '^' { 19109 re_append(tls, p, RE_OP_CC_EXC, 0) 19110 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19111 } else { 19112 re_append(tls, p, RE_OP_CC_INC, 0) 19113 } 19114 for libc.AssignUint32(&c, (*struct { 19115 f func(*libc.TLS, uintptr) uint32 19116 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 19117 if c == uint32('[') && int32(rePeek(tls, p)) == ':' { 19118 return ts + 6757 19119 } 19120 if c == uint32('\\') { 19121 c = re_esc_char(tls, p) 19122 } 19123 if int32(rePeek(tls, p)) == '-' { 19124 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 19125 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19126 c = (*struct { 19127 f func(*libc.TLS, uintptr) uint32 19128 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p) 19129 if c == uint32('\\') { 19130 c = re_esc_char(tls, p) 19131 } 19132 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 19133 } else { 19134 re_append(tls, p, RE_OP_CC_VALUE, int32(c)) 19135 } 19136 if int32(rePeek(tls, p)) == ']' { 19137 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19138 break 19139 } 19140 } 19141 if c == uint32(0) { 19142 return ts + 6795 19143 } 19144 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iFirst)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iFirst)) 19145 break 19146 19147 } 19148 case uint32('\\'): 19149 { 19150 var specialOp int32 = 0 19151 switch int32(rePeek(tls, p)) { 19152 case 'b': 19153 specialOp = RE_OP_BOUNDARY 19154 break 19155 case 'd': 19156 specialOp = RE_OP_DIGIT 19157 break 19158 case 'D': 19159 specialOp = RE_OP_NOTDIGIT 19160 break 19161 case 's': 19162 specialOp = RE_OP_SPACE 19163 break 19164 case 'S': 19165 specialOp = RE_OP_NOTSPACE 19166 break 19167 case 'w': 19168 specialOp = RE_OP_WORD 19169 break 19170 case 'W': 19171 specialOp = RE_OP_NOTWORD 19172 break 19173 } 19174 if specialOp != 0 { 19175 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19176 re_append(tls, p, specialOp, 0) 19177 } else { 19178 c = re_esc_char(tls, p) 19179 re_append(tls, p, RE_OP_MATCH, int32(c)) 19180 } 19181 break 19182 19183 } 19184 default: 19185 { 19186 re_append(tls, p, RE_OP_MATCH, int32(c)) 19187 break 19188 19189 } 19190 } 19191 iPrev = iStart 19192 } 19193 return uintptr(0) 19194 } 19195 19196 func sqlite3re_free(tls *libc.TLS, pRe uintptr) { 19197 if pRe != 0 { 19198 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaOp) 19199 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaArg) 19200 sqlite3.Xsqlite3_free(tls, pRe) 19201 } 19202 } 19203 19204 func sqlite3re_compile(tls *libc.TLS, ppRe uintptr, zIn uintptr, noCase int32) uintptr { 19205 var pRe uintptr 19206 var zErr uintptr 19207 var i int32 19208 var j int32 19209 19210 *(*uintptr)(unsafe.Pointer(ppRe)) = uintptr(0) 19211 pRe = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(ReCompiled{}))) 19212 if pRe == uintptr(0) { 19213 return ts + 2069 19214 } 19215 libc.Xmemset(tls, pRe, 0, uint64(unsafe.Sizeof(ReCompiled{}))) 19216 (*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar = func() uintptr { 19217 if noCase != 0 { 19218 return *(*uintptr)(unsafe.Pointer(&struct { 19219 f func(*libc.TLS, uintptr) uint32 19220 }{re_next_char_nocase})) 19221 } 19222 return *(*uintptr)(unsafe.Pointer(&struct { 19223 f func(*libc.TLS, uintptr) uint32 19224 }{re_next_char})) 19225 }() 19226 if re_resize(tls, pRe, 30) != 0 { 19227 sqlite3re_free(tls, pRe) 19228 return ts + 2069 19229 } 19230 if int32(*(*uint8)(unsafe.Pointer(zIn))) == '^' { 19231 zIn++ 19232 } else { 19233 re_append(tls, pRe, RE_OP_ANYSTAR, 0) 19234 } 19235 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fz = zIn 19236 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi = 0 19237 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx = int32(libc.Xstrlen(tls, zIn)) 19238 zErr = re_subcompile_re(tls, pRe) 19239 if zErr != 0 { 19240 sqlite3re_free(tls, pRe) 19241 return zErr 19242 } 19243 if int32(rePeek(tls, pRe)) == '$' && (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi+1 >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 19244 re_append(tls, pRe, RE_OP_MATCH, RE_EOF) 19245 re_append(tls, pRe, RE_OP_ACCEPT, 0) 19246 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 19247 } else if (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 19248 re_append(tls, pRe, RE_OP_ACCEPT, 0) 19249 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 19250 } else { 19251 sqlite3re_free(tls, pRe) 19252 return ts + 6808 19253 } 19254 19255 if int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp))) == RE_OP_ANYSTAR && !(noCase != 0) { 19256 j = 0 19257 i = 1 19258 for ; j < int32(unsafe.Sizeof([12]uint8{}))-2 && int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(i)))) == RE_OP_MATCH; i++ { 19259 var x uint32 = uint32(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(i)*4))) 19260 if x <= uint32(127) { 19261 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(x) 19262 } else if x <= uint32(0xfff) { 19263 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xc0) | x>>6) 19264 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 19265 } else if x <= uint32(0xffff) { 19266 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xe0) | x>>12) 19267 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x>>6&uint32(0x3f)) 19268 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 19269 } else { 19270 break 19271 } 19272 } 19273 if j > 0 && int32(*(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(j-1)))) == 0 { 19274 j-- 19275 } 19276 (*ReCompiled)(unsafe.Pointer(pRe)).FnInit = j 19277 } 19278 return (*ReCompiled)(unsafe.Pointer(pRe)).FzErr 19279 } 19280 19281 func re_sql_func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19282 bp := tls.Alloc(8) 19283 defer tls.Free(8) 19284 19285 var zPattern uintptr 19286 var zStr uintptr 19287 var zErr uintptr 19288 var setAux int32 = 0 19289 19290 _ = argc 19291 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_get_auxdata(tls, context, 0) 19292 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 19293 zPattern = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19294 if zPattern == uintptr(0) { 19295 return 19296 } 19297 zErr = sqlite3re_compile(tls, bp, zPattern, libc.Bool32(sqlite3.Xsqlite3_user_data(tls, context) != uintptr(0))) 19298 if zErr != 0 { 19299 sqlite3re_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 19300 sqlite3.Xsqlite3_result_error(tls, context, zErr, -1) 19301 return 19302 } 19303 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 19304 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19305 return 19306 } 19307 setAux = 1 19308 } 19309 zStr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 19310 if zStr != uintptr(0) { 19311 sqlite3.Xsqlite3_result_int(tls, context, sqlite3re_match(tls, *(*uintptr)(unsafe.Pointer(bp)), zStr, -1)) 19312 } 19313 if setAux != 0 { 19314 sqlite3.Xsqlite3_set_auxdata(tls, context, 0, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3re_free}))) 19315 } 19316 } 19317 19318 func sqlite3_regexp_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19319 var rc int32 = SQLITE_OK 19320 _ = pApi 19321 19322 _ = pzErrMsg 19323 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6831, 2, 19324 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 19325 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 19326 f func(*libc.TLS, uintptr, int32, uintptr) 19327 }{re_sql_func})), uintptr(0), uintptr(0)) 19328 if rc == SQLITE_OK { 19329 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6838, 2, 19330 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 19331 db, *(*uintptr)(unsafe.Pointer(&struct { 19332 f func(*libc.TLS, uintptr, int32, uintptr) 19333 }{re_sql_func})), uintptr(0), uintptr(0)) 19334 } 19335 return rc 19336 } 19337 19338 func rememberFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 19339 var v sqlite3_int64 19340 var ptr uintptr 19341 19342 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 19343 ptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4060) 19344 if ptr != 0 { 19345 *(*sqlite3_int64)(unsafe.Pointer(ptr)) = v 19346 } 19347 sqlite3.Xsqlite3_result_int64(tls, pCtx, v) 19348 } 19349 19350 func sqlite3_remember_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19351 var rc int32 = SQLITE_OK 19352 _ = pApi 19353 19354 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6846, 2, SQLITE_UTF8, uintptr(0), 19355 *(*uintptr)(unsafe.Pointer(&struct { 19356 f func(*libc.TLS, uintptr, int32, uintptr) 19357 }{rememberFunc})), uintptr(0), uintptr(0)) 19358 return rc 19359 } 19360 19361 type series_cursor1 = struct { 19362 Fbase sqlite3_vtab_cursor 19363 FisDesc int32 19364 F__ccgo_pad1 [4]byte 19365 FiRowid sqlite3_int64 19366 FiValue sqlite3_int64 19367 FmnValue sqlite3_int64 19368 FmxValue sqlite3_int64 19369 FiStep sqlite3_int64 19370 } 19371 19372 type series_cursor = series_cursor1 19373 19374 func seriesConnect(tls *libc.TLS, db uintptr, pUnused uintptr, argcUnused int32, argvUnused uintptr, ppVtab uintptr, pzErrUnused uintptr) int32 { 19375 var pNew uintptr 19376 var rc int32 19377 19378 _ = pUnused 19379 _ = argcUnused 19380 _ = argvUnused 19381 _ = pzErrUnused 19382 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 19383 ts+6855) 19384 if rc == SQLITE_OK { 19385 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 19386 if pNew == uintptr(0) { 19387 return SQLITE_NOMEM 19388 } 19389 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 19390 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 19391 } 19392 return rc 19393 } 19394 19395 func seriesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 19396 sqlite3.Xsqlite3_free(tls, pVtab) 19397 return SQLITE_OK 19398 } 19399 19400 func seriesOpen(tls *libc.TLS, pUnused uintptr, ppCursor uintptr) int32 { 19401 var pCur uintptr 19402 _ = pUnused 19403 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(series_cursor{}))) 19404 if pCur == uintptr(0) { 19405 return SQLITE_NOMEM 19406 } 19407 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(series_cursor{}))) 19408 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 19409 return SQLITE_OK 19410 } 19411 19412 func seriesClose(tls *libc.TLS, cur uintptr) int32 { 19413 sqlite3.Xsqlite3_free(tls, cur) 19414 return SQLITE_OK 19415 } 19416 19417 func seriesNext(tls *libc.TLS, cur uintptr) int32 { 19418 var pCur uintptr = cur 19419 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 19420 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19421 } else { 19422 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) += (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19423 } 19424 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid++ 19425 return SQLITE_OK 19426 } 19427 19428 func seriesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 19429 var pCur uintptr = cur 19430 var x sqlite3_int64 = int64(0) 19431 switch i { 19432 case SERIES_COLUMN_START: 19433 x = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 19434 break 19435 case SERIES_COLUMN_STOP: 19436 x = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 19437 break 19438 case SERIES_COLUMN_STEP: 19439 x = (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19440 break 19441 default: 19442 x = (*series_cursor)(unsafe.Pointer(pCur)).FiValue 19443 break 19444 } 19445 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 19446 return SQLITE_OK 19447 } 19448 19449 func seriesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 19450 var pCur uintptr = cur 19451 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*series_cursor)(unsafe.Pointer(pCur)).FiRowid 19452 return SQLITE_OK 19453 } 19454 19455 func seriesEof(tls *libc.TLS, cur uintptr) int32 { 19456 var pCur uintptr = cur 19457 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 19458 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue < (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) 19459 } else { 19460 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue > (*series_cursor)(unsafe.Pointer(pCur)).FmxValue) 19461 } 19462 return int32(0) 19463 } 19464 19465 func seriesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStrUnused uintptr, argc int32, argv uintptr) int32 { 19466 var pCur uintptr = pVtabCursor 19467 var i int32 = 0 19468 _ = idxStrUnused 19469 if idxNum&1 != 0 { 19470 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19471 } else { 19472 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(0) 19473 } 19474 if idxNum&2 != 0 { 19475 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19476 } else { 19477 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 19478 } 19479 if idxNum&4 != 0 { 19480 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19481 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep == int64(0) { 19482 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 19483 } else if (*series_cursor)(unsafe.Pointer(pCur)).FiStep < int64(0) { 19484 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = -(*series_cursor)(unsafe.Pointer(pCur)).FiStep 19485 if idxNum&16 == 0 { 19486 idxNum = idxNum | 8 19487 } 19488 } 19489 } else { 19490 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 19491 } 19492 for i = 0; i < argc; i++ { 19493 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) == SQLITE_NULL { 19494 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(1) 19495 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0) 19496 break 19497 } 19498 } 19499 if idxNum&8 != 0 { 19500 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 1 19501 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 19502 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep > int64(0) { 19503 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= ((*series_cursor)(unsafe.Pointer(pCur)).FmxValue - (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) % (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19504 } 19505 } else { 19506 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 0 19507 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 19508 } 19509 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 19510 return SQLITE_OK 19511 } 19512 19513 func seriesBestIndex(tls *libc.TLS, pVTab uintptr, pIdxInfo uintptr) int32 { 19514 bp := tls.Alloc(12) 19515 defer tls.Free(12) 19516 19517 var i int32 19518 var j int32 19519 var idxNum int32 = 0 19520 var bStartSeen int32 = 0 19521 var unusableMask int32 = 0 19522 var nArg int32 = 0 19523 19524 var pConstraint uintptr 19525 19526 *(*int32)(unsafe.Pointer(bp)) = libc.AssignPtrInt32(bp+1*4, libc.AssignPtrInt32(bp+2*4, -1)) 19527 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 19528 i = 0 19529 __1: 19530 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 19531 goto __3 19532 } 19533 { 19534 var iCol int32 19535 var iMask int32 19536 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < SERIES_COLUMN_START { 19537 goto __2 19538 } 19539 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn - SERIES_COLUMN_START 19540 19541 iMask = int32(1) << iCol 19542 if iCol == 0 { 19543 bStartSeen = 1 19544 } 19545 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 19546 unusableMask = unusableMask | iMask 19547 goto __2 19548 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 19549 idxNum = idxNum | iMask 19550 *(*int32)(unsafe.Pointer(bp + uintptr(iCol)*4)) = i 19551 } 19552 19553 } 19554 goto __2 19555 __2: 19556 i++ 19557 pConstraint += 12 19558 goto __1 19559 goto __3 19560 __3: 19561 ; 19562 for i = 0; i < 3; i++ { 19563 if libc.AssignInt32(&j, *(*int32)(unsafe.Pointer(bp + uintptr(i)*4))) >= 0 { 19564 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).FargvIndex = libc.PreIncInt32(&nArg, 1) 19565 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).Fomit = libc.BoolUint8(!(1 != 0)) 19566 } 19567 } 19568 19569 if !(bStartSeen != 0) { 19570 sqlite3.Xsqlite3_free(tls, (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg) 19571 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 19572 ts+6914, 0) 19573 return SQLITE_ERROR 19574 } 19575 if unusableMask & ^idxNum != 0 { 19576 return SQLITE_CONSTRAINT 19577 } 19578 if idxNum&3 == 3 { 19579 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2 - libc.Bool32(idxNum&4 != 0)) 19580 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000) 19581 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy >= 1 && (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 0 { 19582 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 19583 idxNum = idxNum | 8 19584 } else { 19585 idxNum = idxNum | 16 19586 } 19587 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 19588 } 19589 } else { 19590 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 19591 } 19592 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 19593 return SQLITE_OK 19594 } 19595 19596 var seriesModule = sqlite3_module{ 19597 FxConnect: 0, 19598 FxBestIndex: 0, 19599 FxDisconnect: 0, 19600 FxOpen: 0, 19601 FxClose: 0, 19602 FxFilter: 0, 19603 FxNext: 0, 19604 FxEof: 0, 19605 FxColumn: 0, 19606 FxRowid: 0, 19607 } 19608 19609 func sqlite3_series_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19610 var rc int32 = SQLITE_OK 19611 _ = pApi 19612 19613 if sqlite3.Xsqlite3_libversion_number(tls) < 3008012 && pzErrMsg != uintptr(0) { 19614 *(*uintptr)(unsafe.Pointer(pzErrMsg)) = sqlite3.Xsqlite3_mprintf(tls, 19615 ts+6972, 0) 19616 return SQLITE_ERROR 19617 } 19618 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+7022, uintptr(unsafe.Pointer(&seriesModule)), uintptr(0)) 19619 return rc 19620 } 19621 19622 type u16 = uint16 19623 19624 var midClass = [128]uint8{ 19625 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19626 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19627 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19628 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19629 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 19630 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19631 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19632 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19633 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19634 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19635 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19636 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19637 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19638 uint8(CCLASS_SILENT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19639 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19640 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19641 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19642 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19643 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19644 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19645 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19646 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19647 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19648 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19649 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19650 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19651 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19652 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19653 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19654 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_VOWEL), 19655 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19656 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19657 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19658 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19659 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19660 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19661 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19662 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19663 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19664 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19665 uint8(CCLASS_C), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19666 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19667 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19668 } 19669 19670 var initClass = [128]uint8{ 19671 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19672 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19673 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19674 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19675 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 19676 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19677 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19678 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19679 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19680 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19681 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19682 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19683 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19684 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19685 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19686 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19687 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19688 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19689 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19690 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19691 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19692 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19693 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19694 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19695 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 19696 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 19697 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19698 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 19699 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19700 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_Y), 19701 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19702 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19703 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 19704 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 19705 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 19706 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 19707 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 19708 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19709 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 19710 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 19711 uint8(CCLASS_C), uint8(CCLASS_Y), uint8(CCLASS_C), 19712 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19713 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19714 } 19715 19716 var className = *(*[14]uint8)(unsafe.Pointer(ts + 7038)) 19717 19718 func phoneticHash(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 19719 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+1)) 19720 var i int32 19721 var nOut int32 = 0 19722 var cPrev uint8 = uint8(0x77) 19723 var cPrevX uint8 = uint8(0x77) 19724 var aClass uintptr = uintptr(unsafe.Pointer(&initClass)) 19725 19726 if zOut == uintptr(0) { 19727 return uintptr(0) 19728 } 19729 if nIn > 2 { 19730 switch int32(*(*uint8)(unsafe.Pointer(zIn))) { 19731 case 'g': 19732 fallthrough 19733 case 'k': 19734 { 19735 if int32(*(*uint8)(unsafe.Pointer(zIn + 1))) == 'n' { 19736 zIn++ 19737 nIn-- 19738 } 19739 break 19740 19741 } 19742 } 19743 } 19744 for i = 0; i < nIn; i++ { 19745 var c uint8 = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 19746 if i+1 < nIn { 19747 if int32(c) == 'w' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'r' { 19748 continue 19749 } 19750 if int32(c) == 'd' && (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'j' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'g') { 19751 continue 19752 } 19753 if i+2 < nIn { 19754 if int32(c) == 't' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'c' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+2)))) == 'h' { 19755 continue 19756 } 19757 } 19758 } 19759 c = *(*uint8)(unsafe.Pointer(aClass + uintptr(int32(c)&0x7f))) 19760 if int32(c) == CCLASS_SPACE { 19761 continue 19762 } 19763 if int32(c) == CCLASS_OTHER && int32(cPrev) != CCLASS_DIGIT { 19764 continue 19765 } 19766 aClass = uintptr(unsafe.Pointer(&midClass)) 19767 if int32(c) == CCLASS_VOWEL && (int32(cPrevX) == CCLASS_R || int32(cPrevX) == CCLASS_L) { 19768 continue 19769 } 19770 if (int32(c) == CCLASS_R || int32(c) == CCLASS_L) && int32(cPrevX) == CCLASS_VOWEL { 19771 nOut-- 19772 } 19773 cPrev = c 19774 if int32(c) == CCLASS_SILENT { 19775 continue 19776 } 19777 cPrevX = c 19778 c = className[c] 19779 19780 if nOut == 0 || int32(c) != int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(nOut-1)))) { 19781 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = c 19782 } 19783 } 19784 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 19785 return zOut 19786 } 19787 19788 func phoneticHashSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19789 var zIn uintptr 19790 var zOut uintptr 19791 19792 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19793 if zIn == uintptr(0) { 19794 return 19795 } 19796 zOut = phoneticHash(tls, zIn, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 19797 if zOut == uintptr(0) { 19798 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19799 } else { 19800 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 19801 } 19802 } 19803 19804 func characterClass(tls *libc.TLS, cPrev uint8, c uint8) uint8 { 19805 if int32(cPrev) == 0 { 19806 return initClass[int32(c)&0x7f] 19807 } 19808 return midClass[int32(c)&0x7f] 19809 } 19810 19811 func insertOrDeleteCost(tls *libc.TLS, cPrev uint8, c uint8, cNext uint8) int32 { 19812 var classC uint8 = characterClass(tls, cPrev, c) 19813 var classCprev uint8 19814 19815 if int32(classC) == CCLASS_SILENT { 19816 return 1 19817 } 19818 if int32(cPrev) == int32(c) { 19819 return 10 19820 } 19821 if int32(classC) == CCLASS_VOWEL && (int32(cPrev) == 'r' || int32(cNext) == 'r') { 19822 return 20 19823 } 19824 classCprev = characterClass(tls, cPrev, cPrev) 19825 if int32(classC) == int32(classCprev) { 19826 if int32(classC) == CCLASS_VOWEL { 19827 return 15 19828 } else { 19829 return 50 19830 } 19831 } 19832 19833 return 100 19834 } 19835 19836 func substituteCost(tls *libc.TLS, cPrev uint8, cFrom uint8, cTo uint8) int32 { 19837 var classFrom uint8 19838 var classTo uint8 19839 if int32(cFrom) == int32(cTo) { 19840 return 0 19841 } 19842 if int32(cFrom) == int32(cTo)^0x20 && (int32(cTo) >= 'A' && int32(cTo) <= 'Z' || int32(cTo) >= 'a' && int32(cTo) <= 'z') { 19843 return 0 19844 } 19845 classFrom = characterClass(tls, cPrev, cFrom) 19846 classTo = characterClass(tls, cPrev, cTo) 19847 if int32(classFrom) == int32(classTo) { 19848 return 40 19849 } 19850 if int32(classFrom) >= CCLASS_B && int32(classFrom) <= CCLASS_Y && 19851 int32(classTo) >= CCLASS_B && int32(classTo) <= CCLASS_Y { 19852 return 75 19853 } 19854 19855 return 100 19856 } 19857 19858 func editdist1(tls *libc.TLS, zA uintptr, zB uintptr, pnMatch uintptr) int32 { 19859 bp := tls.Alloc(300) 19860 defer tls.Free(300) 19861 19862 var nA int32 19863 var nB int32 19864 var xA int32 19865 var xB int32 19866 var cA uint8 = uint8(0) 19867 var cB uint8 19868 var cAprev uint8 19869 var cBprev uint8 19870 var cAnext uint8 19871 var cBnext uint8 19872 var d int32 19873 var dc int32 = 0 19874 var res int32 19875 var m uintptr 19876 var cx uintptr 19877 var toFree uintptr = uintptr(0) 19878 var nMatch int32 = 0 19879 19880 if zA == uintptr(0) || zB == uintptr(0) { 19881 return -1 19882 } 19883 19884 for *(*uint8)(unsafe.Pointer(zA)) != 0 && int32(*(*uint8)(unsafe.Pointer(zA))) == int32(*(*uint8)(unsafe.Pointer(zB))) { 19885 dc = int32(*(*uint8)(unsafe.Pointer(zA))) 19886 zA++ 19887 zB++ 19888 nMatch++ 19889 } 19890 if pnMatch != 0 { 19891 *(*int32)(unsafe.Pointer(pnMatch)) = nMatch 19892 } 19893 if int32(*(*uint8)(unsafe.Pointer(zA))) == 0 && int32(*(*uint8)(unsafe.Pointer(zB))) == 0 { 19894 return 0 19895 } 19896 19897 for nA = 0; *(*uint8)(unsafe.Pointer(zA + uintptr(nA))) != 0; nA++ { 19898 if int32(*(*uint8)(unsafe.Pointer(zA + uintptr(nA))))&0x80 != 0 { 19899 return -2 19900 } 19901 } 19902 for nB = 0; *(*uint8)(unsafe.Pointer(zB + uintptr(nB))) != 0; nB++ { 19903 if int32(*(*uint8)(unsafe.Pointer(zB + uintptr(nB))))&0x80 != 0 { 19904 return -2 19905 } 19906 } 19907 19908 if nA == 0 { 19909 cBprev = uint8(dc) 19910 for xB = libc.AssignInt32(&res, 0); int32(libc.AssignUint8(&cB, *(*uint8)(unsafe.Pointer(zB + uintptr(xB))))) != 0; xB++ { 19911 res = res + insertOrDeleteCost(tls, cBprev, cB, *(*uint8)(unsafe.Pointer(zB + uintptr(xB+1))))/FINAL_INS_COST_DIV 19912 cBprev = cB 19913 } 19914 return res 19915 } 19916 if nB == 0 { 19917 cAprev = uint8(dc) 19918 for xA = libc.AssignInt32(&res, 0); int32(libc.AssignUint8(&cA, *(*uint8)(unsafe.Pointer(zA + uintptr(xA))))) != 0; xA++ { 19919 res = res + insertOrDeleteCost(tls, cAprev, cA, *(*uint8)(unsafe.Pointer(zA + uintptr(xA+1)))) 19920 cAprev = cA 19921 } 19922 return res 19923 } 19924 19925 if int32(*(*uint8)(unsafe.Pointer(zA))) == '*' && int32(*(*uint8)(unsafe.Pointer(zA + 1))) == 0 { 19926 return 0 19927 } 19928 19929 if uint64(nB) < uint64(unsafe.Sizeof([75]int32{}))*uint64(4)/(uint64(unsafe.Sizeof(int32(0)))*uint64(5)) { 19930 m = bp 19931 } else { 19932 m = libc.AssignUintptr(&toFree, sqlite3.Xsqlite3_malloc64(tls, uint64((nB+1)*5)*uint64(unsafe.Sizeof(int32(0)))/uint64(4))) 19933 if m == uintptr(0) { 19934 return -3 19935 } 19936 } 19937 cx = m + uintptr(nB+1)*4 19938 19939 *(*int32)(unsafe.Pointer(m)) = 0 19940 *(*uint8)(unsafe.Pointer(cx)) = uint8(dc) 19941 cBprev = uint8(dc) 19942 for xB = 1; xB <= nB; xB++ { 19943 cBnext = *(*uint8)(unsafe.Pointer(zB + uintptr(xB))) 19944 cB = *(*uint8)(unsafe.Pointer(zB + uintptr(xB-1))) 19945 *(*uint8)(unsafe.Pointer(cx + uintptr(xB))) = cB 19946 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) + insertOrDeleteCost(tls, cBprev, cB, cBnext) 19947 cBprev = cB 19948 } 19949 cAprev = uint8(dc) 19950 for xA = 1; xA <= nA; xA++ { 19951 var lastA int32 = libc.Bool32(xA == nA) 19952 cA = *(*uint8)(unsafe.Pointer(zA + uintptr(xA-1))) 19953 cAnext = *(*uint8)(unsafe.Pointer(zA + uintptr(xA))) 19954 if int32(cA) == '*' && lastA != 0 { 19955 break 19956 } 19957 d = *(*int32)(unsafe.Pointer(m)) 19958 dc = int32(*(*uint8)(unsafe.Pointer(cx))) 19959 *(*int32)(unsafe.Pointer(m)) = d + insertOrDeleteCost(tls, cAprev, cA, cAnext) 19960 cBprev = uint8(0) 19961 for xB = 1; xB <= nB; xB++ { 19962 var totalCost int32 19963 var insCost int32 19964 var delCost int32 19965 var subCost int32 19966 var ncx int32 19967 cB = *(*uint8)(unsafe.Pointer(zB + uintptr(xB-1))) 19968 cBnext = *(*uint8)(unsafe.Pointer(zB + uintptr(xB))) 19969 19970 insCost = insertOrDeleteCost(tls, *(*uint8)(unsafe.Pointer(cx + uintptr(xB-1))), cB, cBnext) 19971 if lastA != 0 { 19972 insCost = insCost / FINAL_INS_COST_DIV 19973 } 19974 19975 delCost = insertOrDeleteCost(tls, *(*uint8)(unsafe.Pointer(cx + uintptr(xB))), cA, cBnext) 19976 19977 subCost = substituteCost(tls, *(*uint8)(unsafe.Pointer(cx + uintptr(xB-1))), cA, cB) 19978 19979 totalCost = insCost + *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) 19980 ncx = int32(cB) 19981 if delCost+*(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < totalCost { 19982 totalCost = delCost + *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19983 ncx = int32(cA) 19984 } 19985 if subCost+d < totalCost { 19986 totalCost = subCost + d 19987 } 19988 19989 d = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 19990 dc = int32(*(*uint8)(unsafe.Pointer(cx + uintptr(xB)))) 19991 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = totalCost 19992 *(*uint8)(unsafe.Pointer(cx + uintptr(xB))) = uint8(ncx) 19993 cBprev = cB 19994 } 19995 cAprev = cA 19996 } 19997 19998 if int32(cA) == '*' { 19999 res = *(*int32)(unsafe.Pointer(m + 1*4)) 20000 for xB = 1; xB <= nB; xB++ { 20001 if *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < res { 20002 res = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 20003 if pnMatch != 0 { 20004 *(*int32)(unsafe.Pointer(pnMatch)) = xB + nMatch 20005 } 20006 } 20007 } 20008 } else { 20009 res = *(*int32)(unsafe.Pointer(m + uintptr(nB)*4)) 20010 20011 } 20012 sqlite3.Xsqlite3_free(tls, toFree) 20013 return res 20014 } 20015 20016 func editdistSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20017 var res int32 = editdist1(tls, 20018 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 20019 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), 20020 uintptr(0)) 20021 if res < 0 { 20022 if res == -3 { 20023 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20024 } else if res == -2 { 20025 sqlite3.Xsqlite3_result_error(tls, context, ts+7052, -1) 20026 } else { 20027 sqlite3.Xsqlite3_result_error(tls, context, ts+7082, -1) 20028 } 20029 } else { 20030 sqlite3.Xsqlite3_result_int(tls, context, res) 20031 } 20032 } 20033 20034 type EditDist3Cost1 = struct { 20035 FpNext uintptr 20036 FnFrom u8 20037 FnTo u8 20038 FiCost u16 20039 Fa [4]uint8 20040 } 20041 20042 type EditDist3Cost = EditDist3Cost1 20043 type EditDist3Config1 = struct { 20044 FnLang int32 20045 F__ccgo_pad1 [4]byte 20046 Fa uintptr 20047 } 20048 20049 type EditDist3Config = EditDist3Config1 20050 type EditDist3From1 = struct { 20051 FnSubst int32 20052 FnDel int32 20053 FnByte int32 20054 F__ccgo_pad1 [4]byte 20055 FapSubst uintptr 20056 FapDel uintptr 20057 } 20058 20059 type EditDist3From = EditDist3From1 20060 type EditDist3FromString1 = struct { 20061 Fz uintptr 20062 Fn int32 20063 FisPrefix int32 20064 Fa uintptr 20065 } 20066 20067 type EditDist3FromString = EditDist3FromString1 20068 type EditDist3To1 = struct { 20069 FnIns int32 20070 FnByte int32 20071 FapIns uintptr 20072 } 20073 20074 type EditDist3To = EditDist3To1 20075 type EditDist3ToString1 = struct { 20076 Fz uintptr 20077 Fn int32 20078 F__ccgo_pad1 [4]byte 20079 Fa uintptr 20080 } 20081 20082 type EditDist3ToString = EditDist3ToString1 20083 type EditDist3Lang1 = struct { 20084 FiLang int32 20085 FiInsCost int32 20086 FiDelCost int32 20087 FiSubCost int32 20088 FpCost uintptr 20089 } 20090 20091 type EditDist3Lang = EditDist3Lang1 20092 20093 var editDist3Lang = EditDist3Lang{FiInsCost: 100, FiDelCost: 100, FiSubCost: 150} 20094 20095 func editDist3ConfigClear(tls *libc.TLS, p uintptr) { 20096 var i int32 20097 if p == uintptr(0) { 20098 return 20099 } 20100 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; i++ { 20101 var pCost uintptr 20102 var pNext uintptr 20103 pCost = (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(i)*24)).FpCost 20104 for pCost != 0 { 20105 pNext = (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext 20106 sqlite3.Xsqlite3_free(tls, pCost) 20107 pCost = pNext 20108 } 20109 } 20110 sqlite3.Xsqlite3_free(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa) 20111 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 20112 } 20113 20114 func editDist3ConfigDelete(tls *libc.TLS, pIn uintptr) { 20115 var p uintptr = pIn 20116 editDist3ConfigClear(tls, p) 20117 sqlite3.Xsqlite3_free(tls, p) 20118 } 20119 20120 func editDist3CostCompare(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 20121 var n int32 = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) 20122 var rc int32 20123 if n > int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) { 20124 n = int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 20125 } 20126 rc = libc.Xstrncmp(tls, pA+12, pB+12, uint64(n)) 20127 if rc == 0 { 20128 rc = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) - int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 20129 } 20130 return rc 20131 } 20132 20133 func editDist3CostMerge(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 20134 bp := tls.Alloc(8) 20135 defer tls.Free(8) 20136 20137 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 20138 var ppTail uintptr = bp 20139 var p uintptr 20140 for pA != 0 && pB != 0 { 20141 if editDist3CostCompare(tls, pA, pB) <= 0 { 20142 p = pA 20143 pA = (*EditDist3Cost)(unsafe.Pointer(pA)).FpNext 20144 } else { 20145 p = pB 20146 pB = (*EditDist3Cost)(unsafe.Pointer(pB)).FpNext 20147 } 20148 *(*uintptr)(unsafe.Pointer(ppTail)) = p 20149 ppTail = p 20150 } 20151 if pA != 0 { 20152 *(*uintptr)(unsafe.Pointer(ppTail)) = pA 20153 } else { 20154 *(*uintptr)(unsafe.Pointer(ppTail)) = pB 20155 } 20156 return *(*uintptr)(unsafe.Pointer(bp)) 20157 } 20158 20159 func editDist3CostSort(tls *libc.TLS, pList uintptr) uintptr { 20160 bp := tls.Alloc(480) 20161 defer tls.Free(480) 20162 20163 var p uintptr 20164 var i int32 20165 var mx int32 = 0 20166 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 20167 *(*uintptr)(unsafe.Pointer(bp + 1*8)) = uintptr(0) 20168 for pList != 0 { 20169 p = pList 20170 pList = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 20171 (*EditDist3Cost)(unsafe.Pointer(p)).FpNext = uintptr(0) 20172 for i = 0; *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0; i++ { 20173 p = editDist3CostMerge(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)), p) 20174 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = uintptr(0) 20175 } 20176 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = p 20177 if i > mx { 20178 mx = i 20179 *(*uintptr)(unsafe.Pointer(bp + uintptr(i+1)*8)) = uintptr(0) 20180 } 20181 } 20182 p = uintptr(0) 20183 for i = 0; i <= mx; i++ { 20184 if *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0 { 20185 p = editDist3CostMerge(tls, p, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8))) 20186 } 20187 } 20188 return p 20189 } 20190 20191 func editDist3ConfigLoad(tls *libc.TLS, p uintptr, db uintptr, zTable uintptr) int32 { 20192 bp := tls.Alloc(16) 20193 defer tls.Free(16) 20194 20195 var rc int32 20196 var rc2 int32 20197 var zSql uintptr 20198 var iLangPrev int32 = -9999 20199 var pLang uintptr = uintptr(0) 20200 20201 zSql = sqlite3.Xsqlite3_mprintf(tls, 20202 ts+7107, libc.VaList(bp, zTable)) 20203 if zSql == uintptr(0) { 20204 return SQLITE_NOMEM 20205 } 20206 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+8, uintptr(0)) 20207 sqlite3.Xsqlite3_free(tls, zSql) 20208 if rc != 0 { 20209 return rc 20210 } 20211 editDist3ConfigClear(tls, p) 20212 for sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) == SQLITE_ROW { 20213 var iLang int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0) 20214 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 20215 var nFrom int32 20216 if zFrom != 0 { 20217 nFrom = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 20218 } else { 20219 nFrom = 0 20220 } 20221 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 20222 var nTo int32 20223 if zTo != 0 { 20224 nTo = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 20225 } else { 20226 nTo = 0 20227 } 20228 var iCost int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 3) 20229 20230 if nFrom > 100 || nTo > 100 { 20231 continue 20232 } 20233 if iCost < 0 { 20234 continue 20235 } 20236 if iCost >= 10000 { 20237 continue 20238 } 20239 if pLang == uintptr(0) || iLang != iLangPrev { 20240 var pNew uintptr 20241 pNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa, uint64((*EditDist3Config)(unsafe.Pointer(p)).FnLang+1)*uint64(unsafe.Sizeof(EditDist3Lang{}))) 20242 if pNew == uintptr(0) { 20243 rc = SQLITE_NOMEM 20244 break 20245 } 20246 (*EditDist3Config)(unsafe.Pointer(p)).Fa = pNew 20247 pLang = (*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr((*EditDist3Config)(unsafe.Pointer(p)).FnLang)*24 20248 (*EditDist3Config)(unsafe.Pointer(p)).FnLang++ 20249 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiLang = iLang 20250 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = 100 20251 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = 100 20252 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = 150 20253 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = uintptr(0) 20254 iLangPrev = iLang 20255 } 20256 if nFrom == 1 && int32(*(*uint8)(unsafe.Pointer(zFrom))) == '?' && nTo == 0 { 20257 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = iCost 20258 } else if nFrom == 0 && nTo == 1 && int32(*(*uint8)(unsafe.Pointer(zTo))) == '?' { 20259 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = iCost 20260 } else if nFrom == 1 && nTo == 1 && int32(*(*uint8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*uint8)(unsafe.Pointer(zTo))) == '?' { 20261 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = iCost 20262 } else { 20263 var pCost uintptr 20264 var nExtra int32 = nFrom + nTo - 4 20265 if nExtra < 0 { 20266 nExtra = 0 20267 } 20268 pCost = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Cost{}))+uint64(nExtra)) 20269 if pCost == uintptr(0) { 20270 rc = SQLITE_NOMEM 20271 break 20272 } 20273 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnFrom = u8(nFrom) 20274 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnTo = u8(nTo) 20275 (*EditDist3Cost)(unsafe.Pointer(pCost)).FiCost = u16(iCost) 20276 libc.Xmemcpy(tls, pCost+12, zFrom, uint64(nFrom)) 20277 libc.Xmemcpy(tls, pCost+12+uintptr(nFrom), zTo, uint64(nTo)) 20278 (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 20279 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = pCost 20280 } 20281 } 20282 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 20283 if rc == SQLITE_OK { 20284 rc = rc2 20285 } 20286 if rc == SQLITE_OK { 20287 var iLang int32 20288 for iLang = 0; iLang < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; iLang++ { 20289 (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(iLang)*24)).FpCost = editDist3CostSort(tls, (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa+uintptr(iLang)*24)).FpCost) 20290 } 20291 } 20292 return rc 20293 } 20294 20295 func utf8Len(tls *libc.TLS, c uint8, N int32) int32 { 20296 var len int32 = 1 20297 if int32(c) > 0x7f { 20298 if int32(c)&0xe0 == 0xc0 { 20299 len = 2 20300 } else if int32(c)&0xf0 == 0xe0 { 20301 len = 3 20302 } else { 20303 len = 4 20304 } 20305 } 20306 if len > N { 20307 len = N 20308 } 20309 return len 20310 } 20311 20312 func matchTo(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 20313 if int32(*(*uint8)(unsafe.Pointer(p + 12 + uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)))) != int32(*(*uint8)(unsafe.Pointer(z))) { 20314 return 0 20315 } 20316 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n { 20317 return 0 20318 } 20319 if libc.Xstrncmp(tls, p+12+uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)) != 0 { 20320 return 0 20321 } 20322 return 1 20323 } 20324 20325 func matchFrom(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 20326 if (*EditDist3Cost)(unsafe.Pointer(p)).FnFrom != 0 { 20327 if int32(*(*uint8)(unsafe.Pointer(p + 12))) != int32(*(*uint8)(unsafe.Pointer(z))) { 20328 return 0 20329 } 20330 if libc.Xstrncmp(tls, p+12, z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)) != 0 { 20331 return 0 20332 } 20333 } 20334 return 1 20335 } 20336 20337 func matchFromTo(tls *libc.TLS, pStr uintptr, n1 int32, z2 uintptr, n2 int32) int32 { 20338 var b1 int32 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n1)*32)).FnByte 20339 if b1 > n2 { 20340 return 0 20341 } 20342 20343 if int32(*(*uint8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n1)))) != int32(*(*uint8)(unsafe.Pointer(z2))) { 20344 return 0 20345 } 20346 if libc.Xstrncmp(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz+uintptr(n1), z2, uint64(b1)) != 0 { 20347 return 0 20348 } 20349 return 1 20350 } 20351 20352 func editDist3FromStringDelete(tls *libc.TLS, p uintptr) { 20353 var i int32 20354 if p != 0 { 20355 for i = 0; i < (*EditDist3FromString)(unsafe.Pointer(p)).Fn; i++ { 20356 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapDel) 20357 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapSubst) 20358 } 20359 sqlite3.Xsqlite3_free(tls, p) 20360 } 20361 } 20362 20363 func editDist3FromStringNew(tls *libc.TLS, pLang uintptr, z uintptr, n int32) uintptr { 20364 var pStr uintptr 20365 var p uintptr 20366 var i int32 20367 20368 if z == uintptr(0) { 20369 return uintptr(0) 20370 } 20371 if n < 0 { 20372 n = int32(libc.Xstrlen(tls, z)) 20373 } 20374 pStr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3FromString{}))+uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)+uint64(n)+uint64(1)) 20375 if pStr == uintptr(0) { 20376 return uintptr(0) 20377 } 20378 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa = pStr + 1*24 20379 libc.Xmemset(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa, 0, uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)) 20380 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn = n 20381 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n)*32 20382 libc.Xmemcpy(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz, z, uint64(n+1)) 20383 if n != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(n-1)))) == '*' { 20384 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 1 20385 n-- 20386 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn-- 20387 *(*uint8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n))) = uint8(0) 20388 } else { 20389 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 0 20390 } 20391 20392 for i = 0; i < n; i++ { 20393 var pFrom uintptr = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(i)*32 20394 libc.Xmemset(tls, pFrom, 0, uint64(unsafe.Sizeof(EditDist3From{}))) 20395 (*EditDist3From)(unsafe.Pointer(pFrom)).FnByte = utf8Len(tls, *(*uint8)(unsafe.Pointer(z + uintptr(i))), n-i) 20396 for p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost; p != 0; p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext { 20397 var apNew uintptr 20398 if i+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > n { 20399 continue 20400 } 20401 if matchFrom(tls, p, z+uintptr(i), n-i) == 0 { 20402 continue 20403 } 20404 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) == 0 { 20405 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel, 20406 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnDel+1)) 20407 if apNew == uintptr(0) { 20408 break 20409 } 20410 (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel = apNew 20411 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnDel, 1))*8)) = p 20412 } else { 20413 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst, 20414 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst+1)) 20415 if apNew == uintptr(0) { 20416 break 20417 } 20418 (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst = apNew 20419 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst, 1))*8)) = p 20420 } 20421 } 20422 if p != 0 { 20423 editDist3FromStringDelete(tls, pStr) 20424 pStr = uintptr(0) 20425 break 20426 } 20427 } 20428 return pStr 20429 } 20430 20431 func updateCost(tls *libc.TLS, m uintptr, i int32, j int32, iCost int32) { 20432 var b uint32 20433 20434 b = *(*uint32)(unsafe.Pointer(m + uintptr(j)*4)) + uint32(iCost) 20435 if b < *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) { 20436 *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) = b 20437 } 20438 } 20439 20440 func editDist3Core(tls *libc.TLS, pFrom uintptr, z2 uintptr, n2 int32, pLang uintptr, pnMatch uintptr) int32 { 20441 bp := tls.Alloc(1048) 20442 defer tls.Free(1048) 20443 20444 var k int32 20445 var n int32 20446 var i1 int32 20447 var b1 int32 20448 var i2 int32 20449 var b2 int32 20450 20451 var a2 uintptr 20452 var m uintptr 20453 var pToFree uintptr 20454 var szRow int32 20455 var p uintptr 20456 var res int32 20457 var nByte sqlite3_uint64 20458 20459 var apNew uintptr 20460 var cx int32 20461 var cxp int32 20462 var cxd int32 20463 var cxu int32 20464 var rx int32 20465 var rxp int32 20466 var b int32 20467 var nExtra int32 20468 *(*EditDist3FromString)(unsafe.Pointer(bp + 1024)) = *(*EditDist3FromString)(unsafe.Pointer(pFrom)) 20469 20470 n = ((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1) * (n2 + 1) 20471 n = (n + 1) & libc.CplInt32(1) 20472 nByte = uint64(n)*uint64(unsafe.Sizeof(uint32(0))) + uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2) 20473 if !(nByte <= sqlite3_uint64(unsafe.Sizeof([256]uint32{}))) { 20474 goto __1 20475 } 20476 m = bp 20477 pToFree = uintptr(0) 20478 goto __2 20479 __1: 20480 m = libc.AssignUintptr(&pToFree, sqlite3.Xsqlite3_malloc64(tls, nByte)) 20481 if !(m == uintptr(0)) { 20482 goto __3 20483 } 20484 return -1 20485 __3: 20486 ; 20487 __2: 20488 ; 20489 a2 = m + uintptr(n)*4 20490 libc.Xmemset(tls, a2, 0, uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2)) 20491 20492 i2 = 0 20493 __4: 20494 if !(i2 < n2) { 20495 goto __6 20496 } 20497 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte = utf8Len(tls, *(*uint8)(unsafe.Pointer(z2 + uintptr(i2))), n2-i2) 20498 p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 20499 __7: 20500 if !(p != 0) { 20501 goto __9 20502 } 20503 if !(int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > 0) { 20504 goto __10 20505 } 20506 goto __9 20507 __10: 20508 ; 20509 if !(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n2) { 20510 goto __11 20511 } 20512 goto __8 20513 __11: 20514 ; 20515 if !(int32(*(*uint8)(unsafe.Pointer(p + 12))) > int32(*(*uint8)(unsafe.Pointer(z2 + uintptr(i2))))) { 20516 goto __12 20517 } 20518 goto __9 20519 __12: 20520 ; 20521 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) == 0) { 20522 goto __13 20523 } 20524 goto __8 20525 __13: 20526 ; 20527 (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns++ 20528 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns, uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns)) 20529 if !(apNew == uintptr(0)) { 20530 goto __14 20531 } 20532 res = -1 20533 goto editDist3Abort 20534 __14: 20535 ; 20536 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FapIns = apNew 20537 *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns-1)*8)) = p 20538 goto __8 20539 __8: 20540 p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 20541 goto __7 20542 goto __9 20543 __9: 20544 ; 20545 goto __5 20546 __5: 20547 i2++ 20548 goto __4 20549 goto __6 20550 __6: 20551 ; 20552 szRow = (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1 20553 libc.Xmemset(tls, m, 0x01, uint64((n2+1)*szRow)*uint64(unsafe.Sizeof(uint32(0)))) 20554 *(*uint32)(unsafe.Pointer(m)) = uint32(0) 20555 20556 i1 = 0 20557 __15: 20558 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 20559 goto __17 20560 } 20561 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 20562 updateCost(tls, m, i1+b1, i1, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 20563 k = 0 20564 __18: 20565 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 20566 goto __20 20567 } 20568 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 20569 updateCost(tls, m, i1+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), i1, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20570 goto __19 20571 __19: 20572 k++ 20573 goto __18 20574 goto __20 20575 __20: 20576 ; 20577 goto __16 20578 __16: 20579 i1 = i1 + b1 20580 goto __15 20581 goto __17 20582 __17: 20583 ; 20584 i2 = 0 20585 __21: 20586 if !(i2 < n2) { 20587 goto __23 20588 } 20589 b2 = (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte 20590 rx = szRow * (i2 + b2) 20591 rxp = szRow * i2 20592 updateCost(tls, m, rx, rxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20593 k = 0 20594 __24: 20595 if !(k < (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns) { 20596 goto __26 20597 } 20598 p = *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr(k)*8)) 20599 updateCost(tls, m, szRow*(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)), rxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20600 goto __25 20601 __25: 20602 k++ 20603 goto __24 20604 goto __26 20605 __26: 20606 ; 20607 i1 = 0 20608 __27: 20609 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 20610 goto __29 20611 } 20612 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 20613 cxp = rx + i1 20614 cx = cxp + b1 20615 cxd = rxp + i1 20616 cxu = cxd + b1 20617 updateCost(tls, m, cx, cxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 20618 k = 0 20619 __30: 20620 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 20621 goto __32 20622 } 20623 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 20624 updateCost(tls, m, cxp+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), cxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20625 goto __31 20626 __31: 20627 k++ 20628 goto __30 20629 goto __32 20630 __32: 20631 ; 20632 updateCost(tls, m, cx, cxu, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20633 if !(matchFromTo(tls, bp+1024, i1, z2+uintptr(i2), n2-i2) != 0) { 20634 goto __33 20635 } 20636 updateCost(tls, m, cx, cxd, 0) 20637 __33: 20638 ; 20639 updateCost(tls, m, cx, cxd, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost) 20640 k = 0 20641 __34: 20642 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnSubst) { 20643 goto __36 20644 } 20645 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapSubst + uintptr(k)*8)) 20646 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) != 0) { 20647 goto __37 20648 } 20649 updateCost(tls, m, cxd+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)+szRow*int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo), cxd, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20650 __37: 20651 ; 20652 goto __35 20653 __35: 20654 k++ 20655 goto __34 20656 goto __36 20657 __36: 20658 ; 20659 goto __28 20660 __28: 20661 i1 = i1 + b1 20662 goto __27 20663 goto __29 20664 __29: 20665 ; 20666 goto __22 20667 __22: 20668 i2 = i2 + b2 20669 goto __21 20670 goto __23 20671 __23: 20672 ; 20673 res = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*(n2+1)-1)*4))) 20674 n = n2 20675 if !((*EditDist3FromString)(unsafe.Pointer(bp+1024)).FisPrefix != 0) { 20676 goto __38 20677 } 20678 i2 = 1 20679 __39: 20680 if !(i2 <= n2) { 20681 goto __41 20682 } 20683 b = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*i2-1)*4))) 20684 if !(b <= res) { 20685 goto __42 20686 } 20687 res = b 20688 n = i2 - 1 20689 __42: 20690 ; 20691 goto __40 20692 __40: 20693 i2++ 20694 goto __39 20695 goto __41 20696 __41: 20697 ; 20698 __38: 20699 ; 20700 if !(pnMatch != 0) { 20701 goto __43 20702 } 20703 nExtra = 0 20704 k = 0 20705 __44: 20706 if !(k < n) { 20707 goto __46 20708 } 20709 if !(int32(*(*uint8)(unsafe.Pointer(z2 + uintptr(k))))&0xc0 == 0x80) { 20710 goto __47 20711 } 20712 nExtra++ 20713 __47: 20714 ; 20715 goto __45 20716 __45: 20717 k++ 20718 goto __44 20719 goto __46 20720 __46: 20721 ; 20722 *(*int32)(unsafe.Pointer(pnMatch)) = n - nExtra 20723 __43: 20724 ; 20725 editDist3Abort: 20726 i2 = 0 20727 __48: 20728 if !(i2 < n2) { 20729 goto __50 20730 } 20731 sqlite3.Xsqlite3_free(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns) 20732 goto __49 20733 __49: 20734 i2++ 20735 goto __48 20736 goto __50 20737 __50: 20738 ; 20739 sqlite3.Xsqlite3_free(tls, pToFree) 20740 return res 20741 } 20742 20743 func editDist3FindLang(tls *libc.TLS, pConfig uintptr, iLang int32) uintptr { 20744 var i int32 20745 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(pConfig)).FnLang; i++ { 20746 if (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(pConfig)).Fa+uintptr(i)*24)).FiLang == iLang { 20747 return (*EditDist3Config)(unsafe.Pointer(pConfig)).Fa + uintptr(i)*24 20748 } 20749 } 20750 return uintptr(unsafe.Pointer(&editDist3Lang)) 20751 } 20752 20753 func editDist3SqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20754 var pConfig uintptr = sqlite3.Xsqlite3_user_data(tls, context) 20755 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 20756 var rc int32 20757 if argc == 1 { 20758 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20759 rc = editDist3ConfigLoad(tls, pConfig, db, zTable) 20760 if rc != 0 { 20761 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 20762 } 20763 } else { 20764 var zA uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20765 var zB uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20766 var nA int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 20767 var nB int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20768 var iLang int32 20769 if argc == 3 { 20770 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 20771 } else { 20772 iLang = 0 20773 } 20774 var pLang uintptr = editDist3FindLang(tls, pConfig, iLang) 20775 var pFrom uintptr 20776 var dist int32 20777 20778 pFrom = editDist3FromStringNew(tls, pLang, zA, nA) 20779 if pFrom == uintptr(0) { 20780 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20781 return 20782 } 20783 dist = editDist3Core(tls, pFrom, zB, nB, pLang, uintptr(0)) 20784 editDist3FromStringDelete(tls, pFrom) 20785 if dist == -1 { 20786 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20787 } else { 20788 sqlite3.Xsqlite3_result_int(tls, context, dist) 20789 } 20790 } 20791 } 20792 20793 func editDist3Install(tls *libc.TLS, db uintptr) int32 { 20794 var rc int32 20795 var pConfig uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 20796 if pConfig == uintptr(0) { 20797 return SQLITE_NOMEM 20798 } 20799 libc.Xmemset(tls, pConfig, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 20800 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20801 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20802 *(*uintptr)(unsafe.Pointer(&struct { 20803 f func(*libc.TLS, uintptr, int32, uintptr) 20804 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20805 if rc == SQLITE_OK { 20806 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20807 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20808 *(*uintptr)(unsafe.Pointer(&struct { 20809 f func(*libc.TLS, uintptr, int32, uintptr) 20810 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 20811 } 20812 if rc == SQLITE_OK { 20813 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 20814 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 20815 *(*uintptr)(unsafe.Pointer(&struct { 20816 f func(*libc.TLS, uintptr, int32, uintptr) 20817 }{editDist3SqlFunc})), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{editDist3ConfigDelete}))) 20818 } else { 20819 sqlite3.Xsqlite3_free(tls, pConfig) 20820 } 20821 return rc 20822 } 20823 20824 var sqlite3Utf8Trans1 = [64]uint8{ 20825 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20826 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20827 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 20828 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 20829 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20830 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 20831 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 20832 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 20833 } 20834 20835 func utf8Read(tls *libc.TLS, z uintptr, n int32, pSize uintptr) int32 { 20836 var c int32 20837 var i int32 20838 20839 if 0 != 0 { 20840 c = libc.AssignInt32(&i, 0) 20841 } else { 20842 c = int32(*(*uint8)(unsafe.Pointer(z))) 20843 i = 1 20844 if c >= 0xc0 { 20845 c = int32(sqlite3Utf8Trans1[c-0xc0]) 20846 for i < n && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))&0xc0 == 0x80 { 20847 c = c<<6 + 0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1))))) 20848 } 20849 } 20850 } 20851 *(*int32)(unsafe.Pointer(pSize)) = i 20852 return c 20853 } 20854 20855 func utf8Charlen(tls *libc.TLS, zIn uintptr, nIn int32) int32 { 20856 bp := tls.Alloc(4) 20857 defer tls.Free(4) 20858 20859 var i int32 20860 var nChar int32 = 0 20861 for i = 0; i < nIn; nChar++ { 20862 utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 20863 i = i + *(*int32)(unsafe.Pointer(bp)) 20864 } 20865 return nChar 20866 } 20867 20868 type Transliteration1 = struct { 20869 FcFrom uint16 20870 FcTo0 uint8 20871 FcTo1 uint8 20872 FcTo2 uint8 20873 FcTo3 uint8 20874 } 20875 20876 type Transliteration = Transliteration1 20877 20878 var translit = [389]Transliteration{ 20879 {FcFrom: uint16(0x00A0), FcTo0: uint8(0x20)}, 20880 {FcFrom: uint16(0x00B5), FcTo0: uint8(0x75)}, 20881 {FcFrom: uint16(0x00C0), FcTo0: uint8(0x41)}, 20882 {FcFrom: uint16(0x00C1), FcTo0: uint8(0x41)}, 20883 {FcFrom: uint16(0x00C2), FcTo0: uint8(0x41)}, 20884 {FcFrom: uint16(0x00C3), FcTo0: uint8(0x41)}, 20885 {FcFrom: uint16(0x00C4), FcTo0: uint8(0x41), FcTo1: uint8(0x65)}, 20886 {FcFrom: uint16(0x00C5), FcTo0: uint8(0x41), FcTo1: uint8(0x61)}, 20887 {FcFrom: uint16(0x00C6), FcTo0: uint8(0x41), FcTo1: uint8(0x45)}, 20888 {FcFrom: uint16(0x00C7), FcTo0: uint8(0x43)}, 20889 {FcFrom: uint16(0x00C8), FcTo0: uint8(0x45)}, 20890 {FcFrom: uint16(0x00C9), FcTo0: uint8(0x45)}, 20891 {FcFrom: uint16(0x00CA), FcTo0: uint8(0x45)}, 20892 {FcFrom: uint16(0x00CB), FcTo0: uint8(0x45)}, 20893 {FcFrom: uint16(0x00CC), FcTo0: uint8(0x49)}, 20894 {FcFrom: uint16(0x00CD), FcTo0: uint8(0x49)}, 20895 {FcFrom: uint16(0x00CE), FcTo0: uint8(0x49)}, 20896 {FcFrom: uint16(0x00CF), FcTo0: uint8(0x49)}, 20897 {FcFrom: uint16(0x00D0), FcTo0: uint8(0x44)}, 20898 {FcFrom: uint16(0x00D1), FcTo0: uint8(0x4E)}, 20899 {FcFrom: uint16(0x00D2), FcTo0: uint8(0x4F)}, 20900 {FcFrom: uint16(0x00D3), FcTo0: uint8(0x4F)}, 20901 {FcFrom: uint16(0x00D4), FcTo0: uint8(0x4F)}, 20902 {FcFrom: uint16(0x00D5), FcTo0: uint8(0x4F)}, 20903 {FcFrom: uint16(0x00D6), FcTo0: uint8(0x4F), FcTo1: uint8(0x65)}, 20904 {FcFrom: uint16(0x00D7), FcTo0: uint8(0x78)}, 20905 {FcFrom: uint16(0x00D8), FcTo0: uint8(0x4F)}, 20906 {FcFrom: uint16(0x00D9), FcTo0: uint8(0x55)}, 20907 {FcFrom: uint16(0x00DA), FcTo0: uint8(0x55)}, 20908 {FcFrom: uint16(0x00DB), FcTo0: uint8(0x55)}, 20909 {FcFrom: uint16(0x00DC), FcTo0: uint8(0x55), FcTo1: uint8(0x65)}, 20910 {FcFrom: uint16(0x00DD), FcTo0: uint8(0x59)}, 20911 {FcFrom: uint16(0x00DE), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 20912 {FcFrom: uint16(0x00DF), FcTo0: uint8(0x73), FcTo1: uint8(0x73)}, 20913 {FcFrom: uint16(0x00E0), FcTo0: uint8(0x61)}, 20914 {FcFrom: uint16(0x00E1), FcTo0: uint8(0x61)}, 20915 {FcFrom: uint16(0x00E2), FcTo0: uint8(0x61)}, 20916 {FcFrom: uint16(0x00E3), FcTo0: uint8(0x61)}, 20917 {FcFrom: uint16(0x00E4), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20918 {FcFrom: uint16(0x00E5), FcTo0: uint8(0x61), FcTo1: uint8(0x61)}, 20919 {FcFrom: uint16(0x00E6), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 20920 {FcFrom: uint16(0x00E7), FcTo0: uint8(0x63)}, 20921 {FcFrom: uint16(0x00E8), FcTo0: uint8(0x65)}, 20922 {FcFrom: uint16(0x00E9), FcTo0: uint8(0x65)}, 20923 {FcFrom: uint16(0x00EA), FcTo0: uint8(0x65)}, 20924 {FcFrom: uint16(0x00EB), FcTo0: uint8(0x65)}, 20925 {FcFrom: uint16(0x00EC), FcTo0: uint8(0x69)}, 20926 {FcFrom: uint16(0x00ED), FcTo0: uint8(0x69)}, 20927 {FcFrom: uint16(0x00EE), FcTo0: uint8(0x69)}, 20928 {FcFrom: uint16(0x00EF), FcTo0: uint8(0x69)}, 20929 {FcFrom: uint16(0x00F0), FcTo0: uint8(0x64)}, 20930 {FcFrom: uint16(0x00F1), FcTo0: uint8(0x6E)}, 20931 {FcFrom: uint16(0x00F2), FcTo0: uint8(0x6F)}, 20932 {FcFrom: uint16(0x00F3), FcTo0: uint8(0x6F)}, 20933 {FcFrom: uint16(0x00F4), FcTo0: uint8(0x6F)}, 20934 {FcFrom: uint16(0x00F5), FcTo0: uint8(0x6F)}, 20935 {FcFrom: uint16(0x00F6), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 20936 {FcFrom: uint16(0x00F7), FcTo0: uint8(0x3A)}, 20937 {FcFrom: uint16(0x00F8), FcTo0: uint8(0x6F)}, 20938 {FcFrom: uint16(0x00F9), FcTo0: uint8(0x75)}, 20939 {FcFrom: uint16(0x00FA), FcTo0: uint8(0x75)}, 20940 {FcFrom: uint16(0x00FB), FcTo0: uint8(0x75)}, 20941 {FcFrom: uint16(0x00FC), FcTo0: uint8(0x75), FcTo1: uint8(0x65)}, 20942 {FcFrom: uint16(0x00FD), FcTo0: uint8(0x79)}, 20943 {FcFrom: uint16(0x00FE), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 20944 {FcFrom: uint16(0x00FF), FcTo0: uint8(0x79)}, 20945 {FcFrom: uint16(0x0100), FcTo0: uint8(0x41)}, 20946 {FcFrom: uint16(0x0101), FcTo0: uint8(0x61)}, 20947 {FcFrom: uint16(0x0102), FcTo0: uint8(0x41)}, 20948 {FcFrom: uint16(0x0103), FcTo0: uint8(0x61)}, 20949 {FcFrom: uint16(0x0104), FcTo0: uint8(0x41)}, 20950 {FcFrom: uint16(0x0105), FcTo0: uint8(0x61)}, 20951 {FcFrom: uint16(0x0106), FcTo0: uint8(0x43)}, 20952 {FcFrom: uint16(0x0107), FcTo0: uint8(0x63)}, 20953 {FcFrom: uint16(0x0108), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 20954 {FcFrom: uint16(0x0109), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 20955 {FcFrom: uint16(0x010A), FcTo0: uint8(0x43)}, 20956 {FcFrom: uint16(0x010B), FcTo0: uint8(0x63)}, 20957 {FcFrom: uint16(0x010C), FcTo0: uint8(0x43)}, 20958 {FcFrom: uint16(0x010D), FcTo0: uint8(0x63)}, 20959 {FcFrom: uint16(0x010E), FcTo0: uint8(0x44)}, 20960 {FcFrom: uint16(0x010F), FcTo0: uint8(0x64)}, 20961 {FcFrom: uint16(0x0110), FcTo0: uint8(0x44)}, 20962 {FcFrom: uint16(0x0111), FcTo0: uint8(0x64)}, 20963 {FcFrom: uint16(0x0112), FcTo0: uint8(0x45)}, 20964 {FcFrom: uint16(0x0113), FcTo0: uint8(0x65)}, 20965 {FcFrom: uint16(0x0114), FcTo0: uint8(0x45)}, 20966 {FcFrom: uint16(0x0115), FcTo0: uint8(0x65)}, 20967 {FcFrom: uint16(0x0116), FcTo0: uint8(0x45)}, 20968 {FcFrom: uint16(0x0117), FcTo0: uint8(0x65)}, 20969 {FcFrom: uint16(0x0118), FcTo0: uint8(0x45)}, 20970 {FcFrom: uint16(0x0119), FcTo0: uint8(0x65)}, 20971 {FcFrom: uint16(0x011A), FcTo0: uint8(0x45)}, 20972 {FcFrom: uint16(0x011B), FcTo0: uint8(0x65)}, 20973 {FcFrom: uint16(0x011C), FcTo0: uint8(0x47), FcTo1: uint8(0x68)}, 20974 {FcFrom: uint16(0x011D), FcTo0: uint8(0x67), FcTo1: uint8(0x68)}, 20975 {FcFrom: uint16(0x011E), FcTo0: uint8(0x47)}, 20976 {FcFrom: uint16(0x011F), FcTo0: uint8(0x67)}, 20977 {FcFrom: uint16(0x0120), FcTo0: uint8(0x47)}, 20978 {FcFrom: uint16(0x0121), FcTo0: uint8(0x67)}, 20979 {FcFrom: uint16(0x0122), FcTo0: uint8(0x47)}, 20980 {FcFrom: uint16(0x0123), FcTo0: uint8(0x67)}, 20981 {FcFrom: uint16(0x0124), FcTo0: uint8(0x48), FcTo1: uint8(0x68)}, 20982 {FcFrom: uint16(0x0125), FcTo0: uint8(0x68), FcTo1: uint8(0x68)}, 20983 {FcFrom: uint16(0x0126), FcTo0: uint8(0x48)}, 20984 {FcFrom: uint16(0x0127), FcTo0: uint8(0x68)}, 20985 {FcFrom: uint16(0x0128), FcTo0: uint8(0x49)}, 20986 {FcFrom: uint16(0x0129), FcTo0: uint8(0x69)}, 20987 {FcFrom: uint16(0x012A), FcTo0: uint8(0x49)}, 20988 {FcFrom: uint16(0x012B), FcTo0: uint8(0x69)}, 20989 {FcFrom: uint16(0x012C), FcTo0: uint8(0x49)}, 20990 {FcFrom: uint16(0x012D), FcTo0: uint8(0x69)}, 20991 {FcFrom: uint16(0x012E), FcTo0: uint8(0x49)}, 20992 {FcFrom: uint16(0x012F), FcTo0: uint8(0x69)}, 20993 {FcFrom: uint16(0x0130), FcTo0: uint8(0x49)}, 20994 {FcFrom: uint16(0x0131), FcTo0: uint8(0x69)}, 20995 {FcFrom: uint16(0x0132), FcTo0: uint8(0x49), FcTo1: uint8(0x4A)}, 20996 {FcFrom: uint16(0x0133), FcTo0: uint8(0x69), FcTo1: uint8(0x6A)}, 20997 {FcFrom: uint16(0x0134), FcTo0: uint8(0x4A), FcTo1: uint8(0x68)}, 20998 {FcFrom: uint16(0x0135), FcTo0: uint8(0x6A), FcTo1: uint8(0x68)}, 20999 {FcFrom: uint16(0x0136), FcTo0: uint8(0x4B)}, 21000 {FcFrom: uint16(0x0137), FcTo0: uint8(0x6B)}, 21001 {FcFrom: uint16(0x0138), FcTo0: uint8(0x6B)}, 21002 {FcFrom: uint16(0x0139), FcTo0: uint8(0x4C)}, 21003 {FcFrom: uint16(0x013A), FcTo0: uint8(0x6C)}, 21004 {FcFrom: uint16(0x013B), FcTo0: uint8(0x4C)}, 21005 {FcFrom: uint16(0x013C), FcTo0: uint8(0x6C)}, 21006 {FcFrom: uint16(0x013D), FcTo0: uint8(0x4C)}, 21007 {FcFrom: uint16(0x013E), FcTo0: uint8(0x6C)}, 21008 {FcFrom: uint16(0x013F), FcTo0: uint8(0x4C), FcTo1: uint8(0x2E)}, 21009 {FcFrom: uint16(0x0140), FcTo0: uint8(0x6C), FcTo1: uint8(0x2E)}, 21010 {FcFrom: uint16(0x0141), FcTo0: uint8(0x4C)}, 21011 {FcFrom: uint16(0x0142), FcTo0: uint8(0x6C)}, 21012 {FcFrom: uint16(0x0143), FcTo0: uint8(0x4E)}, 21013 {FcFrom: uint16(0x0144), FcTo0: uint8(0x6E)}, 21014 {FcFrom: uint16(0x0145), FcTo0: uint8(0x4E)}, 21015 {FcFrom: uint16(0x0146), FcTo0: uint8(0x6E)}, 21016 {FcFrom: uint16(0x0147), FcTo0: uint8(0x4E)}, 21017 {FcFrom: uint16(0x0148), FcTo0: uint8(0x6E)}, 21018 {FcFrom: uint16(0x0149), FcTo0: uint8(0x27), FcTo1: uint8(0x6E)}, 21019 {FcFrom: uint16(0x014A), FcTo0: uint8(0x4E), FcTo1: uint8(0x47)}, 21020 {FcFrom: uint16(0x014B), FcTo0: uint8(0x6E), FcTo1: uint8(0x67)}, 21021 {FcFrom: uint16(0x014C), FcTo0: uint8(0x4F)}, 21022 {FcFrom: uint16(0x014D), FcTo0: uint8(0x6F)}, 21023 {FcFrom: uint16(0x014E), FcTo0: uint8(0x4F)}, 21024 {FcFrom: uint16(0x014F), FcTo0: uint8(0x6F)}, 21025 {FcFrom: uint16(0x0150), FcTo0: uint8(0x4F)}, 21026 {FcFrom: uint16(0x0151), FcTo0: uint8(0x6F)}, 21027 {FcFrom: uint16(0x0152), FcTo0: uint8(0x4F), FcTo1: uint8(0x45)}, 21028 {FcFrom: uint16(0x0153), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 21029 {FcFrom: uint16(0x0154), FcTo0: uint8(0x52)}, 21030 {FcFrom: uint16(0x0155), FcTo0: uint8(0x72)}, 21031 {FcFrom: uint16(0x0156), FcTo0: uint8(0x52)}, 21032 {FcFrom: uint16(0x0157), FcTo0: uint8(0x72)}, 21033 {FcFrom: uint16(0x0158), FcTo0: uint8(0x52)}, 21034 {FcFrom: uint16(0x0159), FcTo0: uint8(0x72)}, 21035 {FcFrom: uint16(0x015A), FcTo0: uint8(0x53)}, 21036 {FcFrom: uint16(0x015B), FcTo0: uint8(0x73)}, 21037 {FcFrom: uint16(0x015C), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 21038 {FcFrom: uint16(0x015D), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 21039 {FcFrom: uint16(0x015E), FcTo0: uint8(0x53)}, 21040 {FcFrom: uint16(0x015F), FcTo0: uint8(0x73)}, 21041 {FcFrom: uint16(0x0160), FcTo0: uint8(0x53)}, 21042 {FcFrom: uint16(0x0161), FcTo0: uint8(0x73)}, 21043 {FcFrom: uint16(0x0162), FcTo0: uint8(0x54)}, 21044 {FcFrom: uint16(0x0163), FcTo0: uint8(0x74)}, 21045 {FcFrom: uint16(0x0164), FcTo0: uint8(0x54)}, 21046 {FcFrom: uint16(0x0165), FcTo0: uint8(0x74)}, 21047 {FcFrom: uint16(0x0166), FcTo0: uint8(0x54)}, 21048 {FcFrom: uint16(0x0167), FcTo0: uint8(0x74)}, 21049 {FcFrom: uint16(0x0168), FcTo0: uint8(0x55)}, 21050 {FcFrom: uint16(0x0169), FcTo0: uint8(0x75)}, 21051 {FcFrom: uint16(0x016A), FcTo0: uint8(0x55)}, 21052 {FcFrom: uint16(0x016B), FcTo0: uint8(0x75)}, 21053 {FcFrom: uint16(0x016C), FcTo0: uint8(0x55)}, 21054 {FcFrom: uint16(0x016D), FcTo0: uint8(0x75)}, 21055 {FcFrom: uint16(0x016E), FcTo0: uint8(0x55)}, 21056 {FcFrom: uint16(0x016F), FcTo0: uint8(0x75)}, 21057 {FcFrom: uint16(0x0170), FcTo0: uint8(0x55)}, 21058 {FcFrom: uint16(0x0171), FcTo0: uint8(0x75)}, 21059 {FcFrom: uint16(0x0172), FcTo0: uint8(0x55)}, 21060 {FcFrom: uint16(0x0173), FcTo0: uint8(0x75)}, 21061 {FcFrom: uint16(0x0174), FcTo0: uint8(0x57)}, 21062 {FcFrom: uint16(0x0175), FcTo0: uint8(0x77)}, 21063 {FcFrom: uint16(0x0176), FcTo0: uint8(0x59)}, 21064 {FcFrom: uint16(0x0177), FcTo0: uint8(0x79)}, 21065 {FcFrom: uint16(0x0178), FcTo0: uint8(0x59)}, 21066 {FcFrom: uint16(0x0179), FcTo0: uint8(0x5A)}, 21067 {FcFrom: uint16(0x017A), FcTo0: uint8(0x7A)}, 21068 {FcFrom: uint16(0x017B), FcTo0: uint8(0x5A)}, 21069 {FcFrom: uint16(0x017C), FcTo0: uint8(0x7A)}, 21070 {FcFrom: uint16(0x017D), FcTo0: uint8(0x5A)}, 21071 {FcFrom: uint16(0x017E), FcTo0: uint8(0x7A)}, 21072 {FcFrom: uint16(0x017F), FcTo0: uint8(0x73)}, 21073 {FcFrom: uint16(0x0192), FcTo0: uint8(0x66)}, 21074 {FcFrom: uint16(0x0218), FcTo0: uint8(0x53)}, 21075 {FcFrom: uint16(0x0219), FcTo0: uint8(0x73)}, 21076 {FcFrom: uint16(0x021A), FcTo0: uint8(0x54)}, 21077 {FcFrom: uint16(0x021B), FcTo0: uint8(0x74)}, 21078 {FcFrom: uint16(0x0386), FcTo0: uint8(0x41)}, 21079 {FcFrom: uint16(0x0388), FcTo0: uint8(0x45)}, 21080 {FcFrom: uint16(0x0389), FcTo0: uint8(0x49)}, 21081 {FcFrom: uint16(0x038A), FcTo0: uint8(0x49)}, 21082 {FcFrom: uint16(0x038C), FcTo0: uint8(0x4f)}, 21083 {FcFrom: uint16(0x038E), FcTo0: uint8(0x59)}, 21084 {FcFrom: uint16(0x038F), FcTo0: uint8(0x4f)}, 21085 {FcFrom: uint16(0x0390), FcTo0: uint8(0x69)}, 21086 {FcFrom: uint16(0x0391), FcTo0: uint8(0x41)}, 21087 {FcFrom: uint16(0x0392), FcTo0: uint8(0x42)}, 21088 {FcFrom: uint16(0x0393), FcTo0: uint8(0x47)}, 21089 {FcFrom: uint16(0x0394), FcTo0: uint8(0x44)}, 21090 {FcFrom: uint16(0x0395), FcTo0: uint8(0x45)}, 21091 {FcFrom: uint16(0x0396), FcTo0: uint8(0x5a)}, 21092 {FcFrom: uint16(0x0397), FcTo0: uint8(0x49)}, 21093 {FcFrom: uint16(0x0398), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 21094 {FcFrom: uint16(0x0399), FcTo0: uint8(0x49)}, 21095 {FcFrom: uint16(0x039A), FcTo0: uint8(0x4b)}, 21096 {FcFrom: uint16(0x039B), FcTo0: uint8(0x4c)}, 21097 {FcFrom: uint16(0x039C), FcTo0: uint8(0x4d)}, 21098 {FcFrom: uint16(0x039D), FcTo0: uint8(0x4e)}, 21099 {FcFrom: uint16(0x039E), FcTo0: uint8(0x58)}, 21100 {FcFrom: uint16(0x039F), FcTo0: uint8(0x4f)}, 21101 {FcFrom: uint16(0x03A0), FcTo0: uint8(0x50)}, 21102 {FcFrom: uint16(0x03A1), FcTo0: uint8(0x52)}, 21103 {FcFrom: uint16(0x03A3), FcTo0: uint8(0x53)}, 21104 {FcFrom: uint16(0x03A4), FcTo0: uint8(0x54)}, 21105 {FcFrom: uint16(0x03A5), FcTo0: uint8(0x59)}, 21106 {FcFrom: uint16(0x03A6), FcTo0: uint8(0x46)}, 21107 {FcFrom: uint16(0x03A7), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 21108 {FcFrom: uint16(0x03A8), FcTo0: uint8(0x50), FcTo1: uint8(0x73)}, 21109 {FcFrom: uint16(0x03A9), FcTo0: uint8(0x4f)}, 21110 {FcFrom: uint16(0x03AA), FcTo0: uint8(0x49)}, 21111 {FcFrom: uint16(0x03AB), FcTo0: uint8(0x59)}, 21112 {FcFrom: uint16(0x03AC), FcTo0: uint8(0x61)}, 21113 {FcFrom: uint16(0x03AD), FcTo0: uint8(0x65)}, 21114 {FcFrom: uint16(0x03AE), FcTo0: uint8(0x69)}, 21115 {FcFrom: uint16(0x03AF), FcTo0: uint8(0x69)}, 21116 {FcFrom: uint16(0x03B1), FcTo0: uint8(0x61)}, 21117 {FcFrom: uint16(0x03B2), FcTo0: uint8(0x62)}, 21118 {FcFrom: uint16(0x03B3), FcTo0: uint8(0x67)}, 21119 {FcFrom: uint16(0x03B4), FcTo0: uint8(0x64)}, 21120 {FcFrom: uint16(0x03B5), FcTo0: uint8(0x65)}, 21121 {FcFrom: uint16(0x03B6), FcTo0: uint8(0x7a)}, 21122 {FcFrom: uint16(0x03B7), FcTo0: uint8(0x69)}, 21123 {FcFrom: uint16(0x03B8), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 21124 {FcFrom: uint16(0x03B9), FcTo0: uint8(0x69)}, 21125 {FcFrom: uint16(0x03BA), FcTo0: uint8(0x6b)}, 21126 {FcFrom: uint16(0x03BB), FcTo0: uint8(0x6c)}, 21127 {FcFrom: uint16(0x03BC), FcTo0: uint8(0x6d)}, 21128 {FcFrom: uint16(0x03BD), FcTo0: uint8(0x6e)}, 21129 {FcFrom: uint16(0x03BE), FcTo0: uint8(0x78)}, 21130 {FcFrom: uint16(0x03BF), FcTo0: uint8(0x6f)}, 21131 {FcFrom: uint16(0x03C0), FcTo0: uint8(0x70)}, 21132 {FcFrom: uint16(0x03C1), FcTo0: uint8(0x72)}, 21133 {FcFrom: uint16(0x03C3), FcTo0: uint8(0x73)}, 21134 {FcFrom: uint16(0x03C4), FcTo0: uint8(0x74)}, 21135 {FcFrom: uint16(0x03C5), FcTo0: uint8(0x79)}, 21136 {FcFrom: uint16(0x03C6), FcTo0: uint8(0x66)}, 21137 {FcFrom: uint16(0x03C7), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 21138 {FcFrom: uint16(0x03C8), FcTo0: uint8(0x70), FcTo1: uint8(0x73)}, 21139 {FcFrom: uint16(0x03C9), FcTo0: uint8(0x6f)}, 21140 {FcFrom: uint16(0x03CA), FcTo0: uint8(0x69)}, 21141 {FcFrom: uint16(0x03CB), FcTo0: uint8(0x79)}, 21142 {FcFrom: uint16(0x03CC), FcTo0: uint8(0x6f)}, 21143 {FcFrom: uint16(0x03CD), FcTo0: uint8(0x79)}, 21144 {FcFrom: uint16(0x03CE), FcTo0: uint8(0x69)}, 21145 {FcFrom: uint16(0x0400), FcTo0: uint8(0x45)}, 21146 {FcFrom: uint16(0x0401), FcTo0: uint8(0x45)}, 21147 {FcFrom: uint16(0x0402), FcTo0: uint8(0x44)}, 21148 {FcFrom: uint16(0x0403), FcTo0: uint8(0x47)}, 21149 {FcFrom: uint16(0x0404), FcTo0: uint8(0x45)}, 21150 {FcFrom: uint16(0x0405), FcTo0: uint8(0x5a)}, 21151 {FcFrom: uint16(0x0406), FcTo0: uint8(0x49)}, 21152 {FcFrom: uint16(0x0407), FcTo0: uint8(0x49)}, 21153 {FcFrom: uint16(0x0408), FcTo0: uint8(0x4a)}, 21154 {FcFrom: uint16(0x0409), FcTo0: uint8(0x49)}, 21155 {FcFrom: uint16(0x040A), FcTo0: uint8(0x4e)}, 21156 {FcFrom: uint16(0x040B), FcTo0: uint8(0x44)}, 21157 {FcFrom: uint16(0x040C), FcTo0: uint8(0x4b)}, 21158 {FcFrom: uint16(0x040D), FcTo0: uint8(0x49)}, 21159 {FcFrom: uint16(0x040E), FcTo0: uint8(0x55)}, 21160 {FcFrom: uint16(0x040F), FcTo0: uint8(0x44)}, 21161 {FcFrom: uint16(0x0410), FcTo0: uint8(0x41)}, 21162 {FcFrom: uint16(0x0411), FcTo0: uint8(0x42)}, 21163 {FcFrom: uint16(0x0412), FcTo0: uint8(0x56)}, 21164 {FcFrom: uint16(0x0413), FcTo0: uint8(0x47)}, 21165 {FcFrom: uint16(0x0414), FcTo0: uint8(0x44)}, 21166 {FcFrom: uint16(0x0415), FcTo0: uint8(0x45)}, 21167 {FcFrom: uint16(0x0416), FcTo0: uint8(0x5a), FcTo1: uint8(0x68)}, 21168 {FcFrom: uint16(0x0417), FcTo0: uint8(0x5a)}, 21169 {FcFrom: uint16(0x0418), FcTo0: uint8(0x49)}, 21170 {FcFrom: uint16(0x0419), FcTo0: uint8(0x49)}, 21171 {FcFrom: uint16(0x041A), FcTo0: uint8(0x4b)}, 21172 {FcFrom: uint16(0x041B), FcTo0: uint8(0x4c)}, 21173 {FcFrom: uint16(0x041C), FcTo0: uint8(0x4d)}, 21174 {FcFrom: uint16(0x041D), FcTo0: uint8(0x4e)}, 21175 {FcFrom: uint16(0x041E), FcTo0: uint8(0x4f)}, 21176 {FcFrom: uint16(0x041F), FcTo0: uint8(0x50)}, 21177 {FcFrom: uint16(0x0420), FcTo0: uint8(0x52)}, 21178 {FcFrom: uint16(0x0421), FcTo0: uint8(0x53)}, 21179 {FcFrom: uint16(0x0422), FcTo0: uint8(0x54)}, 21180 {FcFrom: uint16(0x0423), FcTo0: uint8(0x55)}, 21181 {FcFrom: uint16(0x0424), FcTo0: uint8(0x46)}, 21182 {FcFrom: uint16(0x0425), FcTo0: uint8(0x4b), FcTo1: uint8(0x68)}, 21183 {FcFrom: uint16(0x0426), FcTo0: uint8(0x54), FcTo1: uint8(0x63)}, 21184 {FcFrom: uint16(0x0427), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 21185 {FcFrom: uint16(0x0428), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 21186 {FcFrom: uint16(0x0429), FcTo0: uint8(0x53), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 21187 {FcFrom: uint16(0x042A), FcTo0: uint8(0x61)}, 21188 {FcFrom: uint16(0x042B), FcTo0: uint8(0x59)}, 21189 {FcFrom: uint16(0x042C), FcTo0: uint8(0x59)}, 21190 {FcFrom: uint16(0x042D), FcTo0: uint8(0x45)}, 21191 {FcFrom: uint16(0x042E), FcTo0: uint8(0x49), FcTo1: uint8(0x75)}, 21192 {FcFrom: uint16(0x042F), FcTo0: uint8(0x49), FcTo1: uint8(0x61)}, 21193 {FcFrom: uint16(0x0430), FcTo0: uint8(0x61)}, 21194 {FcFrom: uint16(0x0431), FcTo0: uint8(0x62)}, 21195 {FcFrom: uint16(0x0432), FcTo0: uint8(0x76)}, 21196 {FcFrom: uint16(0x0433), FcTo0: uint8(0x67)}, 21197 {FcFrom: uint16(0x0434), FcTo0: uint8(0x64)}, 21198 {FcFrom: uint16(0x0435), FcTo0: uint8(0x65)}, 21199 {FcFrom: uint16(0x0436), FcTo0: uint8(0x7a), FcTo1: uint8(0x68)}, 21200 {FcFrom: uint16(0x0437), FcTo0: uint8(0x7a)}, 21201 {FcFrom: uint16(0x0438), FcTo0: uint8(0x69)}, 21202 {FcFrom: uint16(0x0439), FcTo0: uint8(0x69)}, 21203 {FcFrom: uint16(0x043A), FcTo0: uint8(0x6b)}, 21204 {FcFrom: uint16(0x043B), FcTo0: uint8(0x6c)}, 21205 {FcFrom: uint16(0x043C), FcTo0: uint8(0x6d)}, 21206 {FcFrom: uint16(0x043D), FcTo0: uint8(0x6e)}, 21207 {FcFrom: uint16(0x043E), FcTo0: uint8(0x6f)}, 21208 {FcFrom: uint16(0x043F), FcTo0: uint8(0x70)}, 21209 {FcFrom: uint16(0x0440), FcTo0: uint8(0x72)}, 21210 {FcFrom: uint16(0x0441), FcTo0: uint8(0x73)}, 21211 {FcFrom: uint16(0x0442), FcTo0: uint8(0x74)}, 21212 {FcFrom: uint16(0x0443), FcTo0: uint8(0x75)}, 21213 {FcFrom: uint16(0x0444), FcTo0: uint8(0x66)}, 21214 {FcFrom: uint16(0x0445), FcTo0: uint8(0x6b), FcTo1: uint8(0x68)}, 21215 {FcFrom: uint16(0x0446), FcTo0: uint8(0x74), FcTo1: uint8(0x63)}, 21216 {FcFrom: uint16(0x0447), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 21217 {FcFrom: uint16(0x0448), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 21218 {FcFrom: uint16(0x0449), FcTo0: uint8(0x73), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 21219 {FcFrom: uint16(0x044A), FcTo0: uint8(0x61)}, 21220 {FcFrom: uint16(0x044B), FcTo0: uint8(0x79)}, 21221 {FcFrom: uint16(0x044C), FcTo0: uint8(0x79)}, 21222 {FcFrom: uint16(0x044D), FcTo0: uint8(0x65)}, 21223 {FcFrom: uint16(0x044E), FcTo0: uint8(0x69), FcTo1: uint8(0x75)}, 21224 {FcFrom: uint16(0x044F), FcTo0: uint8(0x69), FcTo1: uint8(0x61)}, 21225 {FcFrom: uint16(0x0450), FcTo0: uint8(0x65)}, 21226 {FcFrom: uint16(0x0451), FcTo0: uint8(0x65)}, 21227 {FcFrom: uint16(0x0452), FcTo0: uint8(0x64)}, 21228 {FcFrom: uint16(0x0453), FcTo0: uint8(0x67)}, 21229 {FcFrom: uint16(0x0454), FcTo0: uint8(0x65)}, 21230 {FcFrom: uint16(0x0455), FcTo0: uint8(0x7a)}, 21231 {FcFrom: uint16(0x0456), FcTo0: uint8(0x69)}, 21232 {FcFrom: uint16(0x0457), FcTo0: uint8(0x69)}, 21233 {FcFrom: uint16(0x0458), FcTo0: uint8(0x6a)}, 21234 {FcFrom: uint16(0x0459), FcTo0: uint8(0x69)}, 21235 {FcFrom: uint16(0x045A), FcTo0: uint8(0x6e)}, 21236 {FcFrom: uint16(0x045B), FcTo0: uint8(0x64)}, 21237 {FcFrom: uint16(0x045C), FcTo0: uint8(0x6b)}, 21238 {FcFrom: uint16(0x045D), FcTo0: uint8(0x69)}, 21239 {FcFrom: uint16(0x045E), FcTo0: uint8(0x75)}, 21240 {FcFrom: uint16(0x045F), FcTo0: uint8(0x64)}, 21241 {FcFrom: uint16(0x1E02), FcTo0: uint8(0x42)}, 21242 {FcFrom: uint16(0x1E03), FcTo0: uint8(0x62)}, 21243 {FcFrom: uint16(0x1E0A), FcTo0: uint8(0x44)}, 21244 {FcFrom: uint16(0x1E0B), FcTo0: uint8(0x64)}, 21245 {FcFrom: uint16(0x1E1E), FcTo0: uint8(0x46)}, 21246 {FcFrom: uint16(0x1E1F), FcTo0: uint8(0x66)}, 21247 {FcFrom: uint16(0x1E40), FcTo0: uint8(0x4D)}, 21248 {FcFrom: uint16(0x1E41), FcTo0: uint8(0x6D)}, 21249 {FcFrom: uint16(0x1E56), FcTo0: uint8(0x50)}, 21250 {FcFrom: uint16(0x1E57), FcTo0: uint8(0x70)}, 21251 {FcFrom: uint16(0x1E60), FcTo0: uint8(0x53)}, 21252 {FcFrom: uint16(0x1E61), FcTo0: uint8(0x73)}, 21253 {FcFrom: uint16(0x1E6A), FcTo0: uint8(0x54)}, 21254 {FcFrom: uint16(0x1E6B), FcTo0: uint8(0x74)}, 21255 {FcFrom: uint16(0x1E80), FcTo0: uint8(0x57)}, 21256 {FcFrom: uint16(0x1E81), FcTo0: uint8(0x77)}, 21257 {FcFrom: uint16(0x1E82), FcTo0: uint8(0x57)}, 21258 {FcFrom: uint16(0x1E83), FcTo0: uint8(0x77)}, 21259 {FcFrom: uint16(0x1E84), FcTo0: uint8(0x57)}, 21260 {FcFrom: uint16(0x1E85), FcTo0: uint8(0x77)}, 21261 {FcFrom: uint16(0x1EF2), FcTo0: uint8(0x59)}, 21262 {FcFrom: uint16(0x1EF3), FcTo0: uint8(0x79)}, 21263 {FcFrom: uint16(0xFB00), FcTo0: uint8(0x66), FcTo1: uint8(0x66)}, 21264 {FcFrom: uint16(0xFB01), FcTo0: uint8(0x66), FcTo1: uint8(0x69)}, 21265 {FcFrom: uint16(0xFB02), FcTo0: uint8(0x66), FcTo1: uint8(0x6C)}, 21266 {FcFrom: uint16(0xFB05), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 21267 {FcFrom: uint16(0xFB06), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 21268 } 21269 21270 func spellfixFindTranslit(tls *libc.TLS, c int32, pxTop uintptr) uintptr { 21271 *(*int32)(unsafe.Pointer(pxTop)) = int32(uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{})) - uint64(1)) 21272 return uintptr(unsafe.Pointer(&translit)) 21273 } 21274 21275 func transliterate(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 21276 bp := tls.Alloc(8) 21277 defer tls.Free(8) 21278 21279 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn*4+1)) 21280 var c int32 21281 21282 var nOut int32 21283 if zOut == uintptr(0) { 21284 return uintptr(0) 21285 } 21286 nOut = 0 21287 for nIn > 0 { 21288 c = utf8Read(tls, zIn, nIn, bp) 21289 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 21290 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 21291 if c <= 127 { 21292 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8(c) 21293 } else { 21294 var xBtm int32 21295 var x int32 21296 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 21297 xBtm = 0 21298 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 21299 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 21300 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 21301 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo0 21302 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 21303 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo1 21304 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 21305 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo2 21306 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 21307 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo3 21308 } 21309 } 21310 } 21311 c = 0 21312 break 21313 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 21314 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 21315 } else { 21316 xBtm = x + 1 21317 } 21318 } 21319 if c != 0 { 21320 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8('?') 21321 } 21322 } 21323 } 21324 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 21325 return zOut 21326 } 21327 21328 func translen_to_charlen(tls *libc.TLS, zIn uintptr, nIn int32, nTrans int32) int32 { 21329 bp := tls.Alloc(8) 21330 defer tls.Free(8) 21331 21332 var i int32 21333 var c int32 21334 21335 var nOut int32 21336 var nChar int32 21337 21338 i = libc.AssignInt32(&nOut, 0) 21339 for nChar = 0; i < nIn && nOut < nTrans; nChar++ { 21340 c = utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 21341 i = i + *(*int32)(unsafe.Pointer(bp)) 21342 21343 nOut++ 21344 if c >= 128 { 21345 var xBtm int32 21346 var x int32 21347 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 21348 xBtm = 0 21349 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 21350 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 21351 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 21352 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 21353 nOut++ 21354 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 21355 nOut++ 21356 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 21357 nOut++ 21358 } 21359 } 21360 } 21361 break 21362 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 21363 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 21364 } else { 21365 xBtm = x + 1 21366 } 21367 } 21368 } 21369 } 21370 21371 return nChar 21372 } 21373 21374 func transliterateSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21375 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21376 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21377 var zOut uintptr = transliterate(tls, zIn, nIn) 21378 if zOut == uintptr(0) { 21379 sqlite3.Xsqlite3_result_error_nomem(tls, context) 21380 } else { 21381 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 21382 } 21383 } 21384 21385 func scriptCodeSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21386 bp := tls.Alloc(4) 21387 defer tls.Free(4) 21388 21389 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21390 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21391 var c int32 21392 21393 var scriptMask int32 = 0 21394 var res int32 21395 var seenDigit int32 = 0 21396 21397 for nIn > 0 { 21398 c = utf8Read(tls, zIn, nIn, bp) 21399 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 21400 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 21401 if c < 0x02af { 21402 if c >= 0x80 || int32(midClass[c&0x7f]) < CCLASS_DIGIT { 21403 scriptMask = scriptMask | SCRIPT_LATIN 21404 } else if c >= '0' && c <= '9' { 21405 seenDigit = 1 21406 } 21407 } else if c >= 0x0400 && c <= 0x04ff { 21408 scriptMask = scriptMask | SCRIPT_CYRILLIC 21409 } else if c >= 0x0386 && c <= 0x03ce { 21410 scriptMask = scriptMask | SCRIPT_GREEK 21411 } else if c >= 0x0590 && c <= 0x05ff { 21412 scriptMask = scriptMask | SCRIPT_HEBREW 21413 } else if c >= 0x0600 && c <= 0x06ff { 21414 scriptMask = scriptMask | SCRIPT_ARABIC 21415 } 21416 } 21417 if scriptMask == 0 && seenDigit != 0 { 21418 scriptMask = SCRIPT_LATIN 21419 } 21420 switch scriptMask { 21421 case 0: 21422 res = 999 21423 break 21424 case SCRIPT_LATIN: 21425 res = 215 21426 break 21427 case SCRIPT_CYRILLIC: 21428 res = 220 21429 break 21430 case SCRIPT_GREEK: 21431 res = 200 21432 break 21433 case SCRIPT_HEBREW: 21434 res = 125 21435 break 21436 case SCRIPT_ARABIC: 21437 res = 160 21438 break 21439 default: 21440 res = 998 21441 break 21442 } 21443 sqlite3.Xsqlite3_result_int(tls, context, res) 21444 } 21445 21446 type spellfix1_vtab1 = struct { 21447 Fbase sqlite3_vtab 21448 Fdb uintptr 21449 FzDbName uintptr 21450 FzTableName uintptr 21451 FzCostTable uintptr 21452 FpConfig3 uintptr 21453 } 21454 21455 type spellfix1_vtab = spellfix1_vtab1 21456 type spellfix1_cursor1 = struct { 21457 Fbase sqlite3_vtab_cursor 21458 FpVTab uintptr 21459 FzPattern uintptr 21460 FidxNum int32 21461 FnRow int32 21462 FnAlloc int32 21463 FiRow int32 21464 FiLang int32 21465 FiTop int32 21466 FiScope int32 21467 FnSearch int32 21468 FpFullScan uintptr 21469 Fa uintptr 21470 } 21471 21472 type spellfix1_cursor = spellfix1_cursor1 21473 21474 type spellfix1_row = struct { 21475 FiRowid sqlite3_int64 21476 FzWord uintptr 21477 FiRank int32 21478 FiDistance int32 21479 FiScore int32 21480 FiMatchlen int32 21481 FzHash [32]uint8 21482 } 21483 21484 func spellfix1DbExec(tls *libc.TLS, pRc uintptr, db uintptr, zFormat uintptr, va uintptr) { 21485 var ap va_list 21486 _ = ap 21487 var zSql uintptr 21488 if *(*int32)(unsafe.Pointer(pRc)) != 0 { 21489 return 21490 } 21491 ap = va 21492 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap) 21493 _ = ap 21494 if zSql == uintptr(0) { 21495 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 21496 } else { 21497 *(*int32)(unsafe.Pointer(pRc)) = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 21498 sqlite3.Xsqlite3_free(tls, zSql) 21499 } 21500 } 21501 21502 func spellfix1Uninit(tls *libc.TLS, isDestroy int32, pVTab uintptr) int32 { 21503 bp := tls.Alloc(20) 21504 defer tls.Free(20) 21505 21506 var p uintptr = pVTab 21507 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 21508 if isDestroy != 0 { 21509 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 21510 spellfix1DbExec(tls, bp+16, db, ts+7189, 21511 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 21512 } 21513 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 21514 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 21515 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 21516 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21517 sqlite3.Xsqlite3_free(tls, p) 21518 } 21519 return *(*int32)(unsafe.Pointer(bp + 16)) 21520 } 21521 21522 func spellfix1Disconnect(tls *libc.TLS, pVTab uintptr) int32 { 21523 return spellfix1Uninit(tls, 0, pVTab) 21524 } 21525 21526 func spellfix1Destroy(tls *libc.TLS, pVTab uintptr) int32 { 21527 return spellfix1Uninit(tls, 1, pVTab) 21528 } 21529 21530 func spellfix1Dequote(tls *libc.TLS, zIn uintptr) uintptr { 21531 bp := tls.Alloc(8) 21532 defer tls.Free(8) 21533 21534 var zOut uintptr 21535 var i int32 21536 var j int32 21537 var c uint8 21538 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zIn))))*2)))&int32(_ISspace) != 0 { 21539 zIn++ 21540 } 21541 zOut = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zIn)) 21542 if zOut == uintptr(0) { 21543 return uintptr(0) 21544 } 21545 i = int32(libc.Xstrlen(tls, zOut)) 21546 *(*uint8)(unsafe.Pointer(zOut + uintptr(i))) = uint8(0) 21547 c = *(*uint8)(unsafe.Pointer(zOut)) 21548 if int32(c) == '\'' || int32(c) == '"' { 21549 i = 1 21550 j = 0 21551 for ; 1 != 0; i++ { 21552 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&j, 1)))) = *(*uint8)(unsafe.Pointer(zOut + uintptr(i))) 21553 if int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(i)))) == int32(c) { 21554 if int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(i+1)))) == int32(c) { 21555 i++ 21556 } else { 21557 *(*uint8)(unsafe.Pointer(zOut + uintptr(j-1))) = uint8(0) 21558 break 21559 } 21560 } 21561 } 21562 } 21563 return zOut 21564 } 21565 21566 func spellfix1Init(tls *libc.TLS, isCreate int32, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21567 bp := tls.Alloc(60) 21568 defer tls.Free(60) 21569 21570 var pNew uintptr = uintptr(0) 21571 21572 var zDbName uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 21573 var zTableName uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 21574 var nDbName int32 21575 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_OK 21576 var i int32 21577 21578 nDbName = int32(libc.Xstrlen(tls, zDbName)) 21579 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_vtab{}))+uint64(nDbName)+uint64(1)) 21580 if pNew == uintptr(0) { 21581 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21582 } else { 21583 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(spellfix1_vtab{}))) 21584 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName = pNew + 1*64 21585 libc.Xmemcpy(tls, (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName, zDbName, uint64(nDbName+1)) 21586 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 21587 (*spellfix1_vtab)(unsafe.Pointer(pNew)).Fdb = db 21588 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0) { 21589 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21590 } else { 21591 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 21592 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_declare_vtab(tls, db, 21593 ts+7226) 21594 } 21595 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && isCreate != 0 { 21596 spellfix1DbExec(tls, bp+56, db, 21597 ts+7380, 21598 libc.VaList(bp+8, zDbName, zTableName)) 21599 spellfix1DbExec(tls, bp+56, db, 21600 ts+7514, 21601 libc.VaList(bp+24, zDbName, zTableName, zTableName)) 21602 } 21603 for i = 3; *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && i < argc; i++ { 21604 if libc.Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ts+7599, uint64(16)) == 0 && (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 21605 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable = spellfix1Dequote(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))+16) 21606 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 21607 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21608 } 21609 continue 21610 } 21611 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+7616, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 21612 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_ERROR 21613 } 21614 } 21615 21616 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 && pNew != 0 { 21617 *(*uintptr)(unsafe.Pointer(ppVTab)) = uintptr(0) 21618 spellfix1Uninit(tls, 0, pNew) 21619 } else { 21620 *(*uintptr)(unsafe.Pointer(ppVTab)) = pNew 21621 } 21622 return *(*int32)(unsafe.Pointer(bp + 56)) 21623 } 21624 21625 func spellfix1Connect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21626 return spellfix1Init(tls, 0, db, pAux, argc, argv, ppVTab, pzErr) 21627 } 21628 21629 func spellfix1Create(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21630 return spellfix1Init(tls, 1, db, pAux, argc, argv, ppVTab, pzErr) 21631 } 21632 21633 func spellfix1ResetCursor(tls *libc.TLS, pCur uintptr) { 21634 var i int32 21635 for i = 0; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21636 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(i)*64)).FzWord) 21637 } 21638 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = 0 21639 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 21640 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch = 0 21641 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21642 sqlite3.Xsqlite3_finalize(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21643 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan = uintptr(0) 21644 } 21645 } 21646 21647 func spellfix1ResizeCursor(tls *libc.TLS, pCur uintptr, N int32) { 21648 var aNew uintptr 21649 21650 aNew = sqlite3.Xsqlite3_realloc64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64(unsafe.Sizeof(spellfix1_row{}))*uint64(N)) 21651 if aNew == uintptr(0) && N > 0 { 21652 spellfix1ResetCursor(tls, pCur) 21653 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa) 21654 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = 0 21655 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = uintptr(0) 21656 } else { 21657 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = N 21658 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = aNew 21659 } 21660 } 21661 21662 func spellfix1Close(tls *libc.TLS, cur uintptr) int32 { 21663 var pCur uintptr = cur 21664 spellfix1ResetCursor(tls, pCur) 21665 spellfix1ResizeCursor(tls, pCur, 0) 21666 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 21667 sqlite3.Xsqlite3_free(tls, pCur) 21668 return SQLITE_OK 21669 } 21670 21671 func spellfix1BestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 21672 var iPlan int32 = 0 21673 var iLangTerm int32 = -1 21674 var iTopTerm int32 = -1 21675 var iScopeTerm int32 = -1 21676 var iDistTerm int32 = -1 21677 var iRowidTerm int32 = -1 21678 var i int32 21679 var pConstraint uintptr 21680 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 21681 i = 0 21682 __1: 21683 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 21684 goto __3 21685 } 21686 { 21687 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 21688 goto __2 21689 } 21690 21691 if iPlan&SPELLFIX_IDXNUM_MATCH == 0 && 21692 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_WORD && 21693 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 21694 iPlan = iPlan | SPELLFIX_IDXNUM_MATCH 21695 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 21696 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 21697 } 21698 21699 if iPlan&SPELLFIX_IDXNUM_LANGID == 0 && 21700 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_LANGID && 21701 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21702 iPlan = iPlan | SPELLFIX_IDXNUM_LANGID 21703 iLangTerm = i 21704 } 21705 21706 if iPlan&SPELLFIX_IDXNUM_TOP == 0 && 21707 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_TOP && 21708 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21709 iPlan = iPlan | SPELLFIX_IDXNUM_TOP 21710 iTopTerm = i 21711 } 21712 21713 if iPlan&SPELLFIX_IDXNUM_SCOPE == 0 && 21714 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_SCOPE && 21715 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21716 iPlan = iPlan | SPELLFIX_IDXNUM_SCOPE 21717 iScopeTerm = i 21718 } 21719 21720 if iPlan&(0x10|0x20) == 0 && 21721 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_DISTANCE && 21722 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 21723 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 21724 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 21725 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLT 21726 } else { 21727 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLE 21728 } 21729 iDistTerm = i 21730 } 21731 21732 if iPlan&SPELLFIX_IDXNUM_ROWID == 0 && 21733 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < 0 && 21734 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 21735 iPlan = iPlan | SPELLFIX_IDXNUM_ROWID 21736 iRowidTerm = i 21737 } 21738 21739 } 21740 goto __2 21741 __2: 21742 i++ 21743 pConstraint += 12 21744 goto __1 21745 goto __3 21746 __3: 21747 ; 21748 if iPlan&SPELLFIX_IDXNUM_MATCH != 0 { 21749 var idx int32 = 2 21750 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 21751 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 21752 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == SPELLFIX_COL_SCORE && 21753 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 21754 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 21755 } 21756 if iPlan&SPELLFIX_IDXNUM_LANGID != 0 { 21757 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21758 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).Fomit = uint8(1) 21759 } 21760 if iPlan&SPELLFIX_IDXNUM_TOP != 0 { 21761 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21762 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).Fomit = uint8(1) 21763 } 21764 if iPlan&SPELLFIX_IDXNUM_SCOPE != 0 { 21765 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21766 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).Fomit = uint8(1) 21767 } 21768 if iPlan&(0x10|0x20) != 0 { 21769 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 21770 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).Fomit = uint8(1) 21771 } 21772 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e5 21773 } else if iPlan&SPELLFIX_IDXNUM_ROWID != 0 { 21774 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SPELLFIX_IDXNUM_ROWID 21775 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).FargvIndex = 1 21776 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).Fomit = uint8(1) 21777 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 21778 } else { 21779 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 21780 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e50 21781 } 21782 return SQLITE_OK 21783 } 21784 21785 func spellfix1Open(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 21786 var p uintptr = pVTab 21787 var pCur uintptr 21788 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21789 if pCur == uintptr(0) { 21790 return SQLITE_NOMEM 21791 } 21792 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 21793 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab = p 21794 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 21795 return SQLITE_OK 21796 } 21797 21798 func spellfix1Score(tls *libc.TLS, iDistance int32, iRank int32) int32 { 21799 var iLog2 int32 21800 iLog2 = 0 21801 __1: 21802 if !(iRank > 0) { 21803 goto __3 21804 } 21805 { 21806 } 21807 goto __2 21808 __2: 21809 iLog2++ 21810 iRank >>= 1 21811 goto __1 21812 goto __3 21813 __3: 21814 ; 21815 return iDistance + 32 - iLog2 21816 } 21817 21818 func spellfix1RowCompare(tls *libc.TLS, A uintptr, B uintptr) int32 { 21819 var a uintptr = A 21820 var b uintptr = B 21821 return (*spellfix1_row)(unsafe.Pointer(a)).FiScore - (*spellfix1_row)(unsafe.Pointer(b)).FiScore 21822 } 21823 21824 type MatchQuery1 = struct { 21825 FpCur uintptr 21826 FpStmt uintptr 21827 FzHash [32]uint8 21828 FzPattern uintptr 21829 FnPattern int32 21830 F__ccgo_pad1 [4]byte 21831 FpMatchStr3 uintptr 21832 FpConfig3 uintptr 21833 FpLang uintptr 21834 FiLang int32 21835 FiScope int32 21836 FiMaxDist int32 21837 Frc int32 21838 FnRun int32 21839 FazPrior [1][32]uint8 21840 F__ccgo_pad2 [4]byte 21841 } 21842 21843 type MatchQuery = MatchQuery1 21844 21845 func spellfix1RunQuery(tls *libc.TLS, p uintptr, zQuery uintptr, nQuery int32) { 21846 bp := tls.Alloc(76) 21847 defer tls.Free(76) 21848 21849 var zK1 uintptr 21850 var zWord uintptr 21851 var iDist int32 21852 var iRank int32 21853 var iScore int32 21854 var iWorst int32 = 0 21855 var idx int32 21856 var idxWorst int32 = -1 21857 var i int32 21858 var iScope int32 = (*MatchQuery)(unsafe.Pointer(p)).FiScope 21859 var pCur uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpCur 21860 var pStmt uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpStmt 21861 21862 var zClass uintptr 21863 var nClass int32 21864 var rc int32 21865 21866 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) || (*MatchQuery)(unsafe.Pointer(p)).Frc != 0 { 21867 return 21868 } 21869 zClass = phoneticHash(tls, zQuery, nQuery) 21870 if zClass == uintptr(0) { 21871 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21872 return 21873 } 21874 nClass = int32(libc.Xstrlen(tls, zClass)) 21875 if nClass > SPELLFIX_MX_HASH-2 { 21876 nClass = SPELLFIX_MX_HASH - 2 21877 *(*uint8)(unsafe.Pointer(zClass + uintptr(nClass))) = uint8(0) 21878 } 21879 if nClass <= iScope { 21880 if nClass > 2 { 21881 iScope = nClass - 1 21882 } else { 21883 iScope = nClass 21884 } 21885 } 21886 libc.Xmemcpy(tls, bp+8, zClass, uint64(iScope)) 21887 sqlite3.Xsqlite3_free(tls, zClass) 21888 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(iScope))) = uint8(0) 21889 libc.Xmemcpy(tls, bp+40, bp+8, uint64(iScope)) 21890 *(*uint8)(unsafe.Pointer(bp + 40 + uintptr(iScope))) = uint8('Z') 21891 *(*uint8)(unsafe.Pointer(bp + 40 + uintptr(iScope+1))) = uint8(0) 21892 21893 libc.Xmemcpy(tls, p+108+uintptr(libc.PostIncInt32(&(*MatchQuery)(unsafe.Pointer(p)).FnRun, 1))*32, bp+8, uint64(iScope+1)) 21894 if sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, bp+8, -1, uintptr(0)) == SQLITE_NOMEM || 21895 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, bp+40, -1, uintptr(0)) == SQLITE_NOMEM { 21896 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21897 return 21898 } 21899 for sqlite3.Xsqlite3_step(tls, pStmt) == SQLITE_ROW { 21900 *(*int32)(unsafe.Pointer(bp + 72)) = -1 21901 iRank = sqlite3.Xsqlite3_column_int(tls, pStmt, 2) 21902 if (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3 != 0 { 21903 var nWord int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, 1) 21904 zWord = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 21905 iDist = editDist3Core(tls, (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3, zWord, nWord, (*MatchQuery)(unsafe.Pointer(p)).FpLang, bp+72) 21906 } else { 21907 zK1 = sqlite3.Xsqlite3_column_text(tls, pStmt, 3) 21908 if zK1 == uintptr(0) { 21909 continue 21910 } 21911 iDist = editdist1(tls, (*MatchQuery)(unsafe.Pointer(p)).FzPattern, zK1, uintptr(0)) 21912 } 21913 if iDist < 0 { 21914 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21915 break 21916 } 21917 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch++ 21918 21919 if (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist >= 0 { 21920 if iDist > (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist { 21921 continue 21922 } 21923 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc && (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum&SPELLFIX_IDXNUM_TOP == 0 { 21924 spellfix1ResizeCursor(tls, pCur, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc*2+10) 21925 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) { 21926 break 21927 } 21928 } 21929 } 21930 21931 iScore = spellfix1Score(tls, iDist, iRank) 21932 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21933 idx = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 21934 } else if iScore < iWorst { 21935 idx = idxWorst 21936 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord) 21937 } else { 21938 continue 21939 } 21940 21941 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FzWord = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pStmt, 1))) 21942 if (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord == uintptr(0) { 21943 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 21944 break 21945 } 21946 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRowid = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 21947 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRank = iRank 21948 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiDistance = iDist 21949 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiScore = iScore 21950 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiMatchlen = *(*int32)(unsafe.Pointer(bp + 72)) 21951 libc.Xmemcpy(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64+32, bp+8, uint64(iScope+1)) 21952 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21953 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow++ 21954 } 21955 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow == (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 21956 iWorst = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa)).FiScore 21957 idxWorst = 0 21958 for i = 1; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21959 iScore = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(i)*64)).FiScore 21960 if iWorst < iScore { 21961 iWorst = iScore 21962 idxWorst = i 21963 } 21964 } 21965 } 21966 } 21967 rc = sqlite3.Xsqlite3_reset(tls, pStmt) 21968 if rc != 0 { 21969 (*MatchQuery)(unsafe.Pointer(p)).Frc = rc 21970 } 21971 } 21972 21973 func spellfix1FilterForMatch(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 21974 bp := tls.Alloc(176) 21975 defer tls.Free(176) 21976 21977 var idxNum int32 21978 var zMatchThis uintptr 21979 var pMatchStr3 uintptr 21980 var zPattern uintptr 21981 var nPattern int32 21982 var iLimit int32 21983 var iScope int32 21984 var iLang int32 21985 var zSql uintptr 21986 21987 var rc int32 21988 var idx int32 21989 var p uintptr 21990 21991 idxNum = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 21992 pMatchStr3 = uintptr(0) 21993 iLimit = 20 21994 iScope = 3 21995 iLang = 0 21996 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 21997 idx = 1 21998 p = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 21999 22000 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable != uintptr(0) && (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 22001 goto __1 22002 } 22003 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 22004 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 22005 goto __2 22006 } 22007 return SQLITE_NOMEM 22008 __2: 22009 ; 22010 libc.Xmemset(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 22011 rc = editDist3ConfigLoad(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22012 if !(rc != 0) { 22013 goto __3 22014 } 22015 return rc 22016 __3: 22017 ; 22018 __1: 22019 ; 22020 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(MatchQuery{}))) 22021 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 3 22022 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = -1 22023 22024 if !(idxNum&2 != 0) { 22025 goto __4 22026 } 22027 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 22028 __4: 22029 ; 22030 if !(idxNum&4 != 0) { 22031 goto __5 22032 } 22033 iLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 22034 if !(iLimit < 1) { 22035 goto __6 22036 } 22037 iLimit = 1 22038 __6: 22039 ; 22040 __5: 22041 ; 22042 if !(idxNum&8 != 0) { 22043 goto __7 22044 } 22045 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 22046 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope < 1) { 22047 goto __8 22048 } 22049 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 1 22050 __8: 22051 ; 22052 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope > SPELLFIX_MX_HASH-2) { 22053 goto __9 22054 } 22055 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = SPELLFIX_MX_HASH - 2 22056 __9: 22057 ; 22058 __7: 22059 ; 22060 if !(idxNum&(16|32) != 0) { 22061 goto __10 22062 } 22063 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 22064 if !(idxNum&16 != 0) { 22065 goto __11 22066 } 22067 (*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist-- 22068 __11: 22069 ; 22070 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist < 0) { 22071 goto __12 22072 } 22073 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = 0 22074 __12: 22075 ; 22076 __10: 22077 ; 22078 spellfix1ResetCursor(tls, pCur) 22079 spellfix1ResizeCursor(tls, pCur, iLimit) 22080 zMatchThis = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22081 if !(zMatchThis == uintptr(0)) { 22082 goto __13 22083 } 22084 return SQLITE_OK 22085 __13: 22086 ; 22087 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 != 0) { 22088 goto __14 22089 } 22090 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = editDist3FindLang(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, iLang) 22091 pMatchStr3 = editDist3FromStringNew(tls, (*MatchQuery)(unsafe.Pointer(bp+24)).FpLang, zMatchThis, -1) 22092 if !(pMatchStr3 == uintptr(0)) { 22093 goto __16 22094 } 22095 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22096 goto filter_exit 22097 __16: 22098 ; 22099 goto __15 22100 __14: 22101 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = uintptr(0) 22102 __15: 22103 ; 22104 zPattern = transliterate(tls, zMatchThis, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22105 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 22106 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern = zPattern 22107 if !(zPattern == uintptr(0)) { 22108 goto __17 22109 } 22110 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22111 goto filter_exit 22112 __17: 22113 ; 22114 nPattern = int32(libc.Xstrlen(tls, zPattern)) 22115 if !(int32(*(*uint8)(unsafe.Pointer(zPattern + uintptr(nPattern-1)))) == '*') { 22116 goto __18 22117 } 22118 nPattern-- 22119 __18: 22120 ; 22121 zSql = sqlite3.Xsqlite3_mprintf(tls, 22122 ts+7650, 22123 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, iLang)) 22124 if !(zSql == uintptr(0)) { 22125 goto __19 22126 } 22127 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22128 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 22129 goto filter_exit 22130 __19: 22131 ; 22132 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, bp+168, uintptr(0)) 22133 sqlite3.Xsqlite3_free(tls, zSql) 22134 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang = iLang 22135 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpCur = pCur 22136 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpStmt = *(*uintptr)(unsafe.Pointer(bp + 168)) 22137 (*MatchQuery)(unsafe.Pointer(bp + 24)).FzPattern = zPattern 22138 (*MatchQuery)(unsafe.Pointer(bp + 24)).FnPattern = nPattern 22139 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpMatchStr3 = pMatchStr3 22140 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiLang = iLang 22141 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = rc 22142 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpConfig3 = (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 22143 if !((*MatchQuery)(unsafe.Pointer(bp+24)).Frc == SQLITE_OK) { 22144 goto __20 22145 } 22146 spellfix1RunQuery(tls, bp+24, zPattern, nPattern) 22147 __20: 22148 ; 22149 if !((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa != 0) { 22150 goto __21 22151 } 22152 libc.Xqsort(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64((*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow), uint64(unsafe.Sizeof(spellfix1_row{})), *(*uintptr)(unsafe.Pointer(&struct { 22153 f func(*libc.TLS, uintptr, uintptr) int32 22154 }{spellfix1RowCompare}))) 22155 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop = iLimit 22156 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope = iScope 22157 goto __22 22158 __21: 22159 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22160 __22: 22161 ; 22162 filter_exit: 22163 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 22164 editDist3FromStringDelete(tls, pMatchStr3) 22165 return (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc 22166 } 22167 22168 func spellfix1FilterForFullScan(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 22169 bp := tls.Alloc(24) 22170 defer tls.Free(24) 22171 22172 var rc int32 = SQLITE_OK 22173 var idxNum int32 = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 22174 var zSql uintptr 22175 var pVTab uintptr = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 22176 spellfix1ResetCursor(tls, pCur) 22177 22178 zSql = sqlite3.Xsqlite3_mprintf(tls, 22179 ts+7750, 22180 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzTableName, 22181 func() uintptr { 22182 if idxNum&64 != 0 { 22183 return ts + 7809 22184 } 22185 return ts + 584 22186 }())) 22187 if zSql == uintptr(0) { 22188 return SQLITE_NOMEM 22189 } 22190 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).Fdb, zSql, -1, pCur+56, uintptr(0)) 22191 sqlite3.Xsqlite3_free(tls, zSql) 22192 if rc == SQLITE_OK && idxNum&64 != 0 { 22193 rc = sqlite3.Xsqlite3_bind_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 1, *(*uintptr)(unsafe.Pointer(argv))) 22194 } 22195 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = libc.AssignPtrInt32(pCur+36, 0) 22196 if rc == SQLITE_OK { 22197 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 22198 if rc == SQLITE_ROW { 22199 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = -1 22200 rc = SQLITE_OK 22201 } 22202 if rc == SQLITE_DONE { 22203 rc = SQLITE_OK 22204 } 22205 } else { 22206 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 22207 } 22208 return rc 22209 } 22210 22211 func spellfix1Filter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 22212 var pCur uintptr = cur 22213 var rc int32 22214 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum = idxNum 22215 if idxNum&1 != 0 { 22216 rc = spellfix1FilterForMatch(tls, pCur, argc, argv) 22217 } else { 22218 rc = spellfix1FilterForFullScan(tls, pCur, argc, argv) 22219 } 22220 return rc 22221 } 22222 22223 func spellfix1Next(tls *libc.TLS, cur uintptr) int32 { 22224 var pCur uintptr = cur 22225 var rc int32 = SQLITE_OK 22226 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow { 22227 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22228 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 22229 if rc != SQLITE_ROW { 22230 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 22231 } 22232 if rc == SQLITE_ROW || rc == SQLITE_DONE { 22233 rc = SQLITE_OK 22234 } 22235 } else { 22236 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow++ 22237 } 22238 } 22239 return rc 22240 } 22241 22242 func spellfix1Eof(tls *libc.TLS, cur uintptr) int32 { 22243 var pCur uintptr = cur 22244 return libc.Bool32((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow) 22245 } 22246 22247 func spellfix1Column(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 22248 bp := tls.Alloc(4) 22249 defer tls.Free(4) 22250 22251 var pCur uintptr = cur 22252 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22253 if i <= SPELLFIX_COL_LANGID { 22254 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, i)) 22255 } else { 22256 sqlite3.Xsqlite3_result_null(tls, ctx) 22257 } 22258 return SQLITE_OK 22259 } 22260 switch i { 22261 case SPELLFIX_COL_WORD: 22262 { 22263 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FzWord, -1, uintptr(0)) 22264 break 22265 22266 } 22267 case SPELLFIX_COL_RANK: 22268 { 22269 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiRank) 22270 break 22271 22272 } 22273 case SPELLFIX_COL_DISTANCE: 22274 { 22275 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiDistance) 22276 break 22277 22278 } 22279 case SPELLFIX_COL_LANGID: 22280 { 22281 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang) 22282 break 22283 22284 } 22285 case SPELLFIX_COL_SCORE: 22286 { 22287 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiScore) 22288 break 22289 22290 } 22291 case SPELLFIX_COL_MATCHLEN: 22292 { 22293 *(*int32)(unsafe.Pointer(bp)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiMatchlen 22294 if *(*int32)(unsafe.Pointer(bp)) < 0 { 22295 var nPattern int32 = int32(libc.Xstrlen(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern)) 22296 var zWord uintptr = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FzWord 22297 var nWord int32 = int32(libc.Xstrlen(tls, zWord)) 22298 22299 if nPattern > 0 && int32(*(*uint8)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern + uintptr(nPattern-1)))) == '*' { 22300 var zTranslit uintptr 22301 var res int32 22302 zTranslit = transliterate(tls, zWord, nWord) 22303 if !(zTranslit != 0) { 22304 return SQLITE_NOMEM 22305 } 22306 res = editdist1(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern, zTranslit, bp) 22307 sqlite3.Xsqlite3_free(tls, zTranslit) 22308 if res < 0 { 22309 return SQLITE_NOMEM 22310 } 22311 *(*int32)(unsafe.Pointer(bp)) = translen_to_charlen(tls, zWord, nWord, *(*int32)(unsafe.Pointer(bp))) 22312 } else { 22313 *(*int32)(unsafe.Pointer(bp)) = utf8Charlen(tls, zWord, nWord) 22314 } 22315 } 22316 22317 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(bp))) 22318 break 22319 22320 } 22321 case SPELLFIX_COL_PHONEHASH: 22322 { 22323 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64+32, -1, uintptr(0)) 22324 break 22325 22326 } 22327 case SPELLFIX_COL_TOP: 22328 { 22329 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop) 22330 break 22331 22332 } 22333 case SPELLFIX_COL_SCOPE: 22334 { 22335 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope) 22336 break 22337 22338 } 22339 case SPELLFIX_COL_SRCHCNT: 22340 { 22341 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch) 22342 break 22343 22344 } 22345 default: 22346 { 22347 sqlite3.Xsqlite3_result_null(tls, ctx) 22348 break 22349 22350 } 22351 } 22352 return SQLITE_OK 22353 } 22354 22355 func spellfix1Rowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 22356 var pCur uintptr = cur 22357 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22358 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 4) 22359 } else { 22360 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiRowid 22361 } 22362 return SQLITE_OK 22363 } 22364 22365 func spellfix1GetConflict(tls *libc.TLS, db uintptr) uintptr { 22366 var eConflict int32 = sqlite3.Xsqlite3_vtab_on_conflict(tls, db) 22367 22368 return azConflict[eConflict-1] 22369 } 22370 22371 var azConflict = [5]uintptr{ 22372 ts + 7824, ts + 7833, ts + 7840, ts + 7840, ts + 7846, 22373 } 22374 22375 func spellfix1Update(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 22376 bp := tls.Alloc(284) 22377 defer tls.Free(284) 22378 22379 *(*int32)(unsafe.Pointer(bp + 280)) = SQLITE_OK 22380 var rowid sqlite3_int64 22381 var newRowid sqlite3_int64 22382 var p uintptr = pVTab 22383 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 22384 22385 if argc == 1 { 22386 rowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22387 spellfix1DbExec(tls, bp+280, db, 22388 ts+7854, 22389 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, rowid)) 22390 } else { 22391 var zWord uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 22392 var nWord int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 22393 var iLang int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 22394 var iRank int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 22395 var zSoundslike uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 22396 var nSoundslike int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 22397 var zK1 uintptr 22398 var zK2 uintptr 22399 var i int32 22400 var c uint8 22401 var zConflict uintptr = spellfix1GetConflict(tls, db) 22402 22403 if zWord == uintptr(0) { 22404 var zCmd uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 13*8))) 22405 if zCmd == uintptr(0) { 22406 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7897, 22407 libc.VaList(bp+24, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 22408 return SQLITE_CONSTRAINT | int32(5)<<8 22409 } 22410 if libc.Xstrcmp(tls, zCmd, ts+7933) == 0 { 22411 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 22412 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 22413 return SQLITE_OK 22414 } 22415 if libc.Xstrncmp(tls, zCmd, ts+7599, uint64(16)) == 0 { 22416 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 22417 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 22418 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22419 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = spellfix1Dequote(tls, zCmd+uintptr(16)) 22420 if (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable == uintptr(0) { 22421 return SQLITE_NOMEM 22422 } 22423 if int32(*(*uint8)(unsafe.Pointer((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable))) == 0 || sqlite3.Xsqlite3_stricmp(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable, ts+7939) == 0 { 22424 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22425 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = uintptr(0) 22426 } 22427 return SQLITE_OK 22428 } 22429 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7944, 22430 libc.VaList(bp+32, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zCmd)) 22431 return SQLITE_ERROR 22432 } 22433 if iRank < 1 { 22434 iRank = 1 22435 } 22436 if zSoundslike != 0 { 22437 zK1 = transliterate(tls, zSoundslike, nSoundslike) 22438 } else { 22439 zK1 = transliterate(tls, zWord, nWord) 22440 } 22441 if zK1 == uintptr(0) { 22442 return SQLITE_NOMEM 22443 } 22444 for i = 0; int32(libc.AssignUint8(&c, *(*uint8)(unsafe.Pointer(zK1 + uintptr(i))))) != 0; i++ { 22445 if int32(c) >= 'A' && int32(c) <= 'Z' { 22446 *(*uint8)(unsafe.Pointer(zK1 + uintptr(i))) += uint8('a' - 'A') 22447 } 22448 } 22449 zK2 = phoneticHash(tls, zK1, i) 22450 if zK2 == uintptr(0) { 22451 sqlite3.Xsqlite3_free(tls, zK1) 22452 return SQLITE_NOMEM 22453 } 22454 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 22455 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_NULL { 22456 spellfix1DbExec(tls, bp+280, db, 22457 ts+7979, 22458 libc.VaList(bp+48, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 22459 iRank, iLang, zWord, zK1, zWord, zK2)) 22460 } else { 22461 newRowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 22462 spellfix1DbExec(tls, bp+280, db, 22463 ts+8065, 22464 libc.VaList(bp+112, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 22465 newRowid, iRank, iLang, zWord, zK1, zWord, zK2)) 22466 } 22467 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 22468 } else { 22469 rowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 22470 newRowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 22471 spellfix1DbExec(tls, bp+280, db, 22472 ts+8165, 22473 libc.VaList(bp+192, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, newRowid, iRank, iLang, 22474 zWord, zK1, zWord, zK2, rowid)) 22475 } 22476 sqlite3.Xsqlite3_free(tls, zK1) 22477 sqlite3.Xsqlite3_free(tls, zK2) 22478 } 22479 return *(*int32)(unsafe.Pointer(bp + 280)) 22480 } 22481 22482 func spellfix1Rename(tls *libc.TLS, pVTab uintptr, zNew uintptr) int32 { 22483 bp := tls.Alloc(36) 22484 defer tls.Free(36) 22485 22486 var p uintptr = pVTab 22487 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 22488 *(*int32)(unsafe.Pointer(bp + 32)) = SQLITE_OK 22489 var zNewName uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zNew)) 22490 if zNewName == uintptr(0) { 22491 return SQLITE_NOMEM 22492 } 22493 spellfix1DbExec(tls, bp+32, db, 22494 ts+8274, 22495 libc.VaList(bp+8, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zNewName)) 22496 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK { 22497 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 22498 (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName = zNewName 22499 } else { 22500 sqlite3.Xsqlite3_free(tls, zNewName) 22501 } 22502 return *(*int32)(unsafe.Pointer(bp + 32)) 22503 } 22504 22505 var spellfix1Module = sqlite3_module{ 22506 FxCreate: 0, 22507 FxConnect: 0, 22508 FxBestIndex: 0, 22509 FxDisconnect: 0, 22510 FxDestroy: 0, 22511 FxOpen: 0, 22512 FxClose: 0, 22513 FxFilter: 0, 22514 FxNext: 0, 22515 FxEof: 0, 22516 FxColumn: 0, 22517 FxRowid: 0, 22518 FxUpdate: 0, 22519 FxRename: 0, 22520 } 22521 22522 func spellfix1Register(tls *libc.TLS, db uintptr) int32 { 22523 var rc int32 = SQLITE_OK 22524 var i int32 22525 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8323, 1, 22526 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22527 *(*uintptr)(unsafe.Pointer(&struct { 22528 f func(*libc.TLS, uintptr, int32, uintptr) 22529 }{transliterateSqlFunc})), uintptr(0), uintptr(0)) 22530 if rc == SQLITE_OK { 22531 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8342, 2, 22532 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22533 *(*uintptr)(unsafe.Pointer(&struct { 22534 f func(*libc.TLS, uintptr, int32, uintptr) 22535 }{editdistSqlFunc})), uintptr(0), uintptr(0)) 22536 } 22537 if rc == SQLITE_OK { 22538 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8361, 1, 22539 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22540 *(*uintptr)(unsafe.Pointer(&struct { 22541 f func(*libc.TLS, uintptr, int32, uintptr) 22542 }{phoneticHashSqlFunc})), uintptr(0), uintptr(0)) 22543 } 22544 if rc == SQLITE_OK { 22545 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8381, 1, 22546 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22547 *(*uintptr)(unsafe.Pointer(&struct { 22548 f func(*libc.TLS, uintptr, int32, uintptr) 22549 }{scriptCodeSqlFunc})), uintptr(0), uintptr(0)) 22550 } 22551 if rc == SQLITE_OK { 22552 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8402, uintptr(unsafe.Pointer(&spellfix1Module)), uintptr(0)) 22553 } 22554 if rc == SQLITE_OK { 22555 rc = editDist3Install(tls, db) 22556 } 22557 22558 for i = 0; uint64(i) < uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{}))-uint64(1); i++ { 22559 } 22560 22561 return rc 22562 } 22563 22564 func sqlite3_spellfix_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 22565 _ = pApi 22566 22567 return spellfix1Register(tls, db) 22568 return SQLITE_OK 22569 } 22570 22571 var totype_one int32 = 1 22572 22573 func totypeIsspace(tls *libc.TLS, c uint8) int32 { 22574 return libc.Bool32(int32(c) == ' ' || int32(c) == '\t' || int32(c) == '\n' || int32(c) == '\v' || int32(c) == '\f' || int32(c) == '\r') 22575 } 22576 22577 func totypeIsdigit(tls *libc.TLS, c uint8) int32 { 22578 return libc.Bool32(int32(c) >= '0' && int32(c) <= '9') 22579 } 22580 22581 func totypeCompare2pow63(tls *libc.TLS, zNum uintptr) int32 { 22582 var c int32 = 0 22583 var i int32 22584 22585 var pow63 uintptr = ts + 8412 22586 for i = 0; c == 0 && i < 18; i++ { 22587 c = (int32(*(*uint8)(unsafe.Pointer(zNum + uintptr(i)))) - int32(*(*uint8)(unsafe.Pointer(pow63 + uintptr(i))))) * 10 22588 } 22589 if c == 0 { 22590 c = int32(*(*uint8)(unsafe.Pointer(zNum + 18))) - '8' 22591 } 22592 return c 22593 } 22594 22595 func totypeAtoi64(tls *libc.TLS, zNum uintptr, pNum uintptr, length int32) int32 { 22596 var u sqlite3_uint64 = uint64(0) 22597 var neg int32 = 0 22598 var i int32 22599 var c int32 = 0 22600 var nonNum int32 = 0 22601 var zStart uintptr 22602 var zEnd uintptr = zNum + uintptr(length) 22603 22604 for zNum < zEnd && totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zNum))) != 0 { 22605 zNum++ 22606 } 22607 if zNum < zEnd { 22608 if int32(*(*uint8)(unsafe.Pointer(zNum))) == '-' { 22609 neg = 1 22610 zNum++ 22611 } else if int32(*(*uint8)(unsafe.Pointer(zNum))) == '+' { 22612 zNum++ 22613 } 22614 } 22615 zStart = zNum 22616 for zNum < zEnd && int32(*(*uint8)(unsafe.Pointer(zNum))) == '0' { 22617 zNum++ 22618 } 22619 for i = 0; zNum+uintptr(i) < zEnd && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(zNum + uintptr(i))))) >= '0' && c <= '9'; i++ { 22620 u = u*uint64(10) + sqlite3_uint64(c) - uint64('0') 22621 } 22622 if u > uint64(int64(0xffffffff)|int64(0x7fffffff)<<32) { 22623 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 22624 } else if neg != 0 { 22625 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = -sqlite3_int64(u) 22626 } else { 22627 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = sqlite3_int64(u) 22628 } 22629 if c != 0 && zNum+uintptr(i) < zEnd || i == 0 && zStart == zNum || i > 19 || nonNum != 0 { 22630 return 1 22631 } else if i < 19 { 22632 return 0 22633 } else { 22634 c = totypeCompare2pow63(tls, zNum) 22635 if c < 0 { 22636 return 0 22637 } else if c > 0 { 22638 return 1 22639 } else { 22640 if neg != 0 { 22641 return 0 22642 } 22643 return 2 22644 } 22645 } 22646 return int32(0) 22647 } 22648 22649 func totypeAtoF(tls *libc.TLS, z uintptr, pResult uintptr, length int32) int32 { 22650 var zEnd uintptr 22651 22652 var sign int32 22653 var s sqlite3_int64 22654 var d int32 22655 var esign int32 22656 var e int32 22657 var eValid int32 22658 var result float64 22659 var nDigits int32 22660 var nonNum int32 22661 var scale float64 22662 zEnd = z + uintptr(length) 22663 sign = 1 22664 s = int64(0) 22665 d = 0 22666 esign = 1 22667 e = 0 22668 eValid = 1 22669 nDigits = 0 22670 nonNum = 0 22671 22672 *(*float64)(unsafe.Pointer(pResult)) = 0.0 22673 22674 __1: 22675 if !(z < zEnd && totypeIsspace(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 22676 goto __2 22677 } 22678 z++ 22679 goto __1 22680 __2: 22681 ; 22682 if !(z >= zEnd) { 22683 goto __3 22684 } 22685 return 0 22686 __3: 22687 ; 22688 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '-') { 22689 goto __4 22690 } 22691 sign = -1 22692 z++ 22693 goto __5 22694 __4: 22695 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '+') { 22696 goto __6 22697 } 22698 z++ 22699 __6: 22700 ; 22701 __5: 22702 ; 22703 __7: 22704 if !(z < zEnd && int32(*(*uint8)(unsafe.Pointer(z))) == '0') { 22705 goto __8 22706 } 22707 z++ 22708 nDigits++ 22709 goto __7 22710 __8: 22711 ; 22712 __9: 22713 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 22714 goto __10 22715 } 22716 s = s*int64(10) + sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(z)))-'0') 22717 z++ 22718 nDigits++ 22719 goto __9 22720 __10: 22721 ; 22722 __11: 22723 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 22724 goto __12 22725 } 22726 z++ 22727 nDigits++ 22728 d++ 22729 goto __11 22730 __12: 22731 ; 22732 if !(z >= zEnd) { 22733 goto __13 22734 } 22735 goto totype_atof_calc 22736 __13: 22737 ; 22738 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '.') { 22739 goto __14 22740 } 22741 z++ 22742 22743 __15: 22744 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 22745 goto __16 22746 } 22747 s = s*int64(10) + sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(z)))-'0') 22748 z++ 22749 nDigits++ 22750 d-- 22751 goto __15 22752 __16: 22753 ; 22754 __17: 22755 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 22756 goto __18 22757 } 22758 z++ 22759 nDigits++ 22760 goto __17 22761 __18: 22762 ; 22763 __14: 22764 ; 22765 if !(z >= zEnd) { 22766 goto __19 22767 } 22768 goto totype_atof_calc 22769 __19: 22770 ; 22771 if !(int32(*(*uint8)(unsafe.Pointer(z))) == 'e' || int32(*(*uint8)(unsafe.Pointer(z))) == 'E') { 22772 goto __20 22773 } 22774 z++ 22775 eValid = 0 22776 if !(z >= zEnd) { 22777 goto __21 22778 } 22779 goto totype_atof_calc 22780 __21: 22781 ; 22782 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '-') { 22783 goto __22 22784 } 22785 esign = -1 22786 z++ 22787 goto __23 22788 __22: 22789 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '+') { 22790 goto __24 22791 } 22792 z++ 22793 __24: 22794 ; 22795 __23: 22796 ; 22797 __25: 22798 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 22799 goto __26 22800 } 22801 if e < 10000 { 22802 e = e*10 + (int32(*(*uint8)(unsafe.Pointer(z))) - '0') 22803 } else { 22804 e = 10000 22805 } 22806 z++ 22807 eValid = 1 22808 goto __25 22809 __26: 22810 ; 22811 __20: 22812 ; 22813 if !(nDigits != 0 && eValid != 0) { 22814 goto __27 22815 } 22816 __28: 22817 if !(z < zEnd && totypeIsspace(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 22818 goto __29 22819 } 22820 z++ 22821 goto __28 22822 __29: 22823 ; 22824 __27: 22825 ; 22826 totype_atof_calc: 22827 e = e*esign + d 22828 if !(e < 0) { 22829 goto __30 22830 } 22831 esign = -1 22832 e = e * -1 22833 goto __31 22834 __30: 22835 esign = 1 22836 __31: 22837 ; 22838 if !!(s != 0) { 22839 goto __32 22840 } 22841 22842 if sign < 0 && nDigits != 0 { 22843 result = -libc.Float64FromFloat64(float64(0)) 22844 } else { 22845 result = float64(0) 22846 } 22847 goto __33 22848 __32: 22849 if !(esign > 0) { 22850 goto __34 22851 } 22852 __36: 22853 if !(s < (int64(0xffffffff)|int64(0x7fffffff)<<32)/int64(10) && e > 0) { 22854 goto __37 22855 } 22856 e-- 22857 s = s * int64(10) 22858 goto __36 22859 __37: 22860 ; 22861 goto __35 22862 __34: 22863 __38: 22864 if !(!(int32(s%int64(10)) != 0) && e > 0) { 22865 goto __39 22866 } 22867 e-- 22868 s = s / int64(10) 22869 goto __38 22870 __39: 22871 ; 22872 __35: 22873 ; 22874 if sign < 0 { 22875 s = -s 22876 } else { 22877 s = s 22878 } 22879 22880 if !(e != 0) { 22881 goto __40 22882 } 22883 scale = 1.0 22884 22885 if !(e > 307 && e < 342) { 22886 goto __42 22887 } 22888 __44: 22889 if !(e%308 != 0) { 22890 goto __45 22891 } 22892 scale = scale * 1.0e+1 22893 e = e - 1 22894 goto __44 22895 __45: 22896 ; 22897 if !(esign < 0) { 22898 goto __46 22899 } 22900 result = float64(s) / scale 22901 result = result / 1.0e+308 22902 goto __47 22903 __46: 22904 result = float64(s) * scale 22905 result = result * 1.0e+308 22906 __47: 22907 ; 22908 goto __43 22909 __42: 22910 if !(e >= 342) { 22911 goto __48 22912 } 22913 if !(esign < 0) { 22914 goto __50 22915 } 22916 result = 0.0 * float64(s) 22917 goto __51 22918 __50: 22919 result = libc.Float64(1e308) * libc.Float64(1e308) * float64(s) 22920 __51: 22921 ; 22922 goto __49 22923 __48: 22924 __52: 22925 if !(e%22 != 0) { 22926 goto __53 22927 } 22928 scale = scale * 1.0e+1 22929 e = e - 1 22930 goto __52 22931 __53: 22932 ; 22933 __54: 22934 if !(e > 0) { 22935 goto __55 22936 } 22937 scale = scale * 1.0e+22 22938 e = e - 22 22939 goto __54 22940 __55: 22941 ; 22942 if !(esign < 0) { 22943 goto __56 22944 } 22945 result = float64(s) / scale 22946 goto __57 22947 __56: 22948 result = float64(s) * scale 22949 __57: 22950 ; 22951 __49: 22952 ; 22953 __43: 22954 ; 22955 goto __41 22956 __40: 22957 result = float64(s) 22958 __41: 22959 ; 22960 __33: 22961 ; 22962 *(*float64)(unsafe.Pointer(pResult)) = result 22963 22964 return libc.Bool32(z >= zEnd && nDigits > 0 && eValid != 0 && nonNum == 0) 22965 } 22966 22967 func tointegerFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22968 bp := tls.Alloc(24) 22969 defer tls.Free(24) 22970 22971 _ = argc 22972 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 22973 case SQLITE_FLOAT: 22974 { 22975 var rVal float64 = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 22976 var iVal sqlite3_int64 = sqlite3_int64(rVal) 22977 if rVal == float64(iVal) { 22978 sqlite3.Xsqlite3_result_int64(tls, context, iVal) 22979 } 22980 break 22981 22982 } 22983 case SQLITE_INTEGER: 22984 { 22985 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22986 break 22987 22988 } 22989 case SQLITE_BLOB: 22990 { 22991 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 22992 if zBlob != 0 { 22993 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 22994 if uint64(nBlob) == uint64(unsafe.Sizeof(sqlite3_int64(0))) { 22995 if int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&totype_one))))) == 0 { 22996 var i int32 22997 22998 for i = 0; uint64(i) < uint64(unsafe.Sizeof(sqlite3_int64(0))); i++ { 22999 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(sqlite3_int64(0)))-uint64(1)-uint64(i)))) 23000 } 23001 libc.Xmemcpy(tls, bp+8, bp, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 23002 } else { 23003 libc.Xmemcpy(tls, bp+8, zBlob, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 23004 } 23005 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))) 23006 } 23007 } 23008 break 23009 23010 } 23011 case SQLITE_TEXT: 23012 { 23013 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 23014 if zStr != 0 { 23015 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23016 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) { 23017 if !(totypeAtoi64(tls, zStr, bp+16, nStr) != 0) { 23018 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 23019 } 23020 } 23021 } 23022 break 23023 23024 } 23025 default: 23026 { 23027 break 23028 23029 } 23030 } 23031 } 23032 23033 func torealFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 23034 bp := tls.Alloc(24) 23035 defer tls.Free(24) 23036 23037 _ = argc 23038 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 23039 case SQLITE_FLOAT: 23040 { 23041 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv)))) 23042 break 23043 23044 } 23045 case SQLITE_INTEGER: 23046 { 23047 var iVal sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 23048 var rVal float64 = float64(iVal) 23049 if iVal == sqlite3_int64(rVal) { 23050 sqlite3.Xsqlite3_result_double(tls, context, rVal) 23051 } 23052 break 23053 23054 } 23055 case SQLITE_BLOB: 23056 { 23057 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 23058 if zBlob != 0 { 23059 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23060 if uint64(nBlob) == uint64(unsafe.Sizeof(float64(0))) { 23061 if int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&totype_one))))) == 1 { 23062 var i int32 23063 23064 for i = 0; uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 23065 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(1)-uint64(i)))) 23066 } 23067 libc.Xmemcpy(tls, bp+8, bp, uint64(unsafe.Sizeof(float64(0)))) 23068 } else { 23069 libc.Xmemcpy(tls, bp+8, zBlob, uint64(unsafe.Sizeof(float64(0)))) 23070 } 23071 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 8))) 23072 } 23073 } 23074 break 23075 23076 } 23077 case SQLITE_TEXT: 23078 { 23079 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 23080 if zStr != 0 { 23081 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23082 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr + uintptr(nStr-1)))) != 0) { 23083 if totypeAtoF(tls, zStr, bp+16, nStr) != 0 { 23084 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 16))) 23085 return 23086 } 23087 } 23088 } 23089 break 23090 23091 } 23092 default: 23093 { 23094 break 23095 23096 } 23097 } 23098 } 23099 23100 func sqlite3_totype_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 23101 var rc int32 = SQLITE_OK 23102 _ = pApi 23103 23104 _ = pzErrMsg 23105 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8431, 1, 23106 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 23107 *(*uintptr)(unsafe.Pointer(&struct { 23108 f func(*libc.TLS, uintptr, int32, uintptr) 23109 }{tointegerFunc})), uintptr(0), uintptr(0)) 23110 if rc == SQLITE_OK { 23111 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8441, 1, 23112 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 23113 *(*uintptr)(unsafe.Pointer(&struct { 23114 f func(*libc.TLS, uintptr, int32, uintptr) 23115 }{torealFunc})), uintptr(0), uintptr(0)) 23116 } 23117 return rc 23118 } 23119 23120 type UnionCsr1 = struct { 23121 Fbase sqlite3_vtab_cursor 23122 FpStmt uintptr 23123 FiMaxRowid sqlite3_int64 23124 FiTab int32 23125 F__ccgo_pad1 [4]byte 23126 } 23127 23128 type UnionCsr = UnionCsr1 23129 type UnionTab1 = struct { 23130 Fbase sqlite3_vtab 23131 Fdb uintptr 23132 FbSwarm int32 23133 FiPK int32 23134 FnSrc int32 23135 F__ccgo_pad1 [4]byte 23136 FaSrc uintptr 23137 FbHasContext int32 23138 F__ccgo_pad2 [4]byte 23139 FzSourceStr uintptr 23140 FpNotFound uintptr 23141 FpOpenClose uintptr 23142 FpClosable uintptr 23143 FnOpen int32 23144 FnMaxOpen int32 23145 } 23146 23147 type UnionTab = UnionTab1 23148 type UnionSrc1 = struct { 23149 FzDb uintptr 23150 FzTab uintptr 23151 FiMin sqlite3_int64 23152 FiMax sqlite3_int64 23153 FzFile uintptr 23154 FzContext uintptr 23155 FnUser int32 23156 F__ccgo_pad1 [4]byte 23157 Fdb uintptr 23158 FpNextClosable uintptr 23159 } 23160 23161 type UnionSrc = UnionSrc1 23162 23163 func unionMalloc(tls *libc.TLS, pRc uintptr, nByte sqlite3_int64) uintptr { 23164 var pRet uintptr 23165 23166 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23167 pRet = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 23168 if pRet != 0 { 23169 libc.Xmemset(tls, pRet, 0, size_t(nByte)) 23170 } else { 23171 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 23172 } 23173 } else { 23174 pRet = uintptr(0) 23175 } 23176 return pRet 23177 } 23178 23179 func unionStrdup(tls *libc.TLS, pRc uintptr, zIn uintptr) uintptr { 23180 var zRet uintptr = uintptr(0) 23181 if zIn != 0 { 23182 var nByte sqlite3_int64 = sqlite3_int64(libc.Xstrlen(tls, zIn) + uint64(1)) 23183 zRet = unionMalloc(tls, pRc, nByte) 23184 if zRet != 0 { 23185 libc.Xmemcpy(tls, zRet, zIn, size_t(nByte)) 23186 } 23187 } 23188 return zRet 23189 } 23190 23191 func unionDequote(tls *libc.TLS, z uintptr) { 23192 if z != 0 { 23193 var q uint8 = *(*uint8)(unsafe.Pointer(z)) 23194 23195 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 23196 var iIn int32 = 1 23197 var iOut int32 = 0 23198 if int32(q) == '[' { 23199 q = uint8(']') 23200 } 23201 for *(*uint8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 23202 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 23203 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 23204 iIn++ 23205 break 23206 } else { 23207 iIn = iIn + 2 23208 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 23209 } 23210 } else { 23211 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 23212 } 23213 } 23214 *(*uint8)(unsafe.Pointer(z + uintptr(iOut))) = uint8(0) 23215 } 23216 } 23217 } 23218 23219 func unionPrepare(tls *libc.TLS, pRc uintptr, db uintptr, zSql uintptr, pzErr uintptr) uintptr { 23220 bp := tls.Alloc(16) 23221 defer tls.Free(16) 23222 23223 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 23224 23225 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23226 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 23227 if rc != SQLITE_OK { 23228 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8448, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 23229 *(*int32)(unsafe.Pointer(pRc)) = rc 23230 } 23231 } 23232 return *(*uintptr)(unsafe.Pointer(bp + 8)) 23233 } 23234 23235 func unionPreparePrintf(tls *libc.TLS, pRc uintptr, pzErr uintptr, db uintptr, zFmt uintptr, va uintptr) uintptr { 23236 var pRet uintptr = uintptr(0) 23237 var zSql uintptr 23238 var ap va_list 23239 _ = ap 23240 ap = va 23241 23242 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 23243 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23244 if zSql == uintptr(0) { 23245 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 23246 } else { 23247 pRet = unionPrepare(tls, pRc, db, zSql, pzErr) 23248 } 23249 } 23250 sqlite3.Xsqlite3_free(tls, zSql) 23251 23252 _ = ap 23253 return pRet 23254 } 23255 23256 func unionFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr, pzErr uintptr) { 23257 bp := tls.Alloc(8) 23258 defer tls.Free(8) 23259 23260 var db uintptr = sqlite3.Xsqlite3_db_handle(tls, pStmt) 23261 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 23262 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23263 *(*int32)(unsafe.Pointer(pRc)) = rc 23264 if rc != 0 { 23265 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 23266 } 23267 } 23268 } 23269 23270 func unionInvokeOpenClose(tls *libc.TLS, pTab uintptr, pSrc uintptr, bClose int32, pzErr uintptr) int32 { 23271 bp := tls.Alloc(8) 23272 defer tls.Free(8) 23273 23274 var rc int32 = SQLITE_OK 23275 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 23276 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 23277 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23278 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 23279 } 23280 sqlite3.Xsqlite3_bind_int(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2+(*UnionTab)(unsafe.Pointer(pTab)).FbHasContext, bClose) 23281 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 23282 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose)) { 23283 if pzErr != 0 { 23284 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 23285 } 23286 } 23287 } 23288 return rc 23289 } 23290 23291 func unionCloseSources(tls *libc.TLS, pTab uintptr, nMax int32) { 23292 for (*UnionTab)(unsafe.Pointer(pTab)).FpClosable != 0 && (*UnionTab)(unsafe.Pointer(pTab)).FnOpen > nMax { 23293 var p uintptr 23294 var pp uintptr 23295 for pp = pTab + 88; (*UnionSrc)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNextClosable != 0; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 23296 } 23297 p = *(*uintptr)(unsafe.Pointer(pp)) 23298 23299 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(p)).Fdb) 23300 (*UnionSrc)(unsafe.Pointer(p)).Fdb = uintptr(0) 23301 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 23302 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen-- 23303 unionInvokeOpenClose(tls, pTab, p, 1, uintptr(0)) 23304 } 23305 } 23306 23307 func unionDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 23308 if pVtab != 0 { 23309 var pTab uintptr = pVtab 23310 var i int32 23311 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23312 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 23313 var bHaveSrcDb int32 = libc.Bool32((*UnionSrc)(unsafe.Pointer(pSrc)).Fdb != uintptr(0)) 23314 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23315 if bHaveSrcDb != 0 { 23316 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 23317 } 23318 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb) 23319 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab) 23320 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile) 23321 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext) 23322 } 23323 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 23324 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 23325 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) 23326 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc) 23327 sqlite3.Xsqlite3_free(tls, pTab) 23328 } 23329 return SQLITE_OK 23330 } 23331 23332 func unionIsIntkeyTable(tls *libc.TLS, db uintptr, pSrc uintptr, pzErr uintptr) int32 { 23333 bp := tls.Alloc(36) 23334 defer tls.Free(36) 23335 23336 *(*int32)(unsafe.Pointer(bp + 32)) = 0 23337 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 23338 var rc int32 23339 23340 sqlite3.Xsqlite3_table_column_metadata(tls, 23341 db, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, ts+8462, bp+24, uintptr(0), uintptr(0), bp+32, uintptr(0)) 23342 rc = sqlite3.Xsqlite3_errcode(tls, db) 23343 if rc == SQLITE_ERROR || 23344 rc == SQLITE_OK && (!(*(*int32)(unsafe.Pointer(bp + 32)) != 0) || sqlite3.Xsqlite3_stricmp(tls, ts+8470, *(*uintptr)(unsafe.Pointer(bp + 24))) != 0) { 23345 rc = SQLITE_ERROR 23346 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8478, 23347 libc.VaList(bp, func() uintptr { 23348 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23349 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 23350 } 23351 return ts + 584 23352 }(), 23353 func() uintptr { 23354 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23355 return ts + 8506 23356 } 23357 return ts + 584 23358 }(), 23359 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 23360 } 23361 return rc 23362 } 23363 23364 func unionSourceToStr(tls *libc.TLS, pRc uintptr, pTab uintptr, pSrc uintptr, pzErr uintptr) uintptr { 23365 bp := tls.Alloc(4) 23366 defer tls.Free(4) 23367 23368 var zRet uintptr = uintptr(0) 23369 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23370 var db uintptr = func() uintptr { 23371 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23372 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 23373 } 23374 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23375 }() 23376 *(*int32)(unsafe.Pointer(bp)) = unionIsIntkeyTable(tls, db, pSrc, pzErr) 23377 var pStmt uintptr = unionPrepare(tls, bp, db, 23378 ts+8508, pzErr) 23379 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23380 sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, -1, uintptr(0)) 23381 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, -1, uintptr(0)) 23382 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23383 var z uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23384 zRet = unionStrdup(tls, bp, z) 23385 } 23386 unionFinalize(tls, bp, pStmt, pzErr) 23387 } 23388 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp)) 23389 } 23390 23391 return zRet 23392 } 23393 23394 func unionSourceCheck(tls *libc.TLS, pTab uintptr, pzErr uintptr) int32 { 23395 bp := tls.Alloc(4) 23396 defer tls.Free(4) 23397 23398 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23399 var z0 uintptr = uintptr(0) 23400 var i int32 23401 23402 z0 = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, pzErr) 23403 for i = 1; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23404 var z uintptr = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc+uintptr(i)*72, pzErr) 23405 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && sqlite3.Xsqlite3_stricmp(tls, z, z0) != 0 { 23406 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 23407 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 23408 } 23409 sqlite3.Xsqlite3_free(tls, z) 23410 } 23411 sqlite3.Xsqlite3_free(tls, z0) 23412 23413 return *(*int32)(unsafe.Pointer(bp)) 23414 } 23415 23416 func unionOpenDatabaseInner(tls *libc.TLS, pTab uintptr, pSrc uintptr, pzErr uintptr) int32 { 23417 bp := tls.Alloc(16) 23418 defer tls.Free(16) 23419 23420 var rc int32 23421 23422 rc = unionInvokeOpenClose(tls, pTab, pSrc, 0, pzErr) 23423 if rc != SQLITE_OK { 23424 return rc 23425 } 23426 23427 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 23428 if rc == SQLITE_OK { 23429 return rc 23430 } 23431 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 23432 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23433 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 23434 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 23435 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23436 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 23437 } 23438 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 23439 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound)) { 23440 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 23441 return rc 23442 } 23443 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 23444 } 23445 if rc != SQLITE_OK { 23446 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_errmsg(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb))) 23447 } 23448 return rc 23449 } 23450 23451 var openFlags int32 = SQLITE_OPEN_READONLY | SQLITE_OPEN_URI 23452 23453 func unionOpenDatabase(tls *libc.TLS, pTab uintptr, iSrc int32, pzErr uintptr) int32 { 23454 bp := tls.Alloc(4) 23455 defer tls.Free(4) 23456 23457 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23458 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iSrc)*72 23459 23460 if (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb == uintptr(0) { 23461 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen-1) 23462 *(*int32)(unsafe.Pointer(bp)) = unionOpenDatabaseInner(tls, pTab, pSrc, pzErr) 23463 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23464 var z uintptr = unionSourceToStr(tls, bp, pTab, pSrc, pzErr) 23465 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23466 if (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr == uintptr(0) { 23467 (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr = z 23468 } else { 23469 if sqlite3.Xsqlite3_stricmp(tls, z, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) != 0 { 23470 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 23471 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 23472 } 23473 sqlite3.Xsqlite3_free(tls, z) 23474 } 23475 } 23476 } 23477 23478 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23479 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 23480 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 23481 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen++ 23482 } else { 23483 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23484 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 23485 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 23486 } 23487 } 23488 23489 return *(*int32)(unsafe.Pointer(bp)) 23490 } 23491 23492 func unionIncrRefcount(tls *libc.TLS, pTab uintptr, iTab int32) { 23493 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23494 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iTab)*72 23495 23496 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 23497 var pp uintptr 23498 for pp = pTab + 88; *(*uintptr)(unsafe.Pointer(pp)) != pSrc; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 23499 } 23500 *(*uintptr)(unsafe.Pointer(pp)) = (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable 23501 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = uintptr(0) 23502 } 23503 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser++ 23504 } 23505 } 23506 23507 func unionFinalizeCsrStmt(tls *libc.TLS, pCsr uintptr) int32 { 23508 var rc int32 = SQLITE_OK 23509 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 23510 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 23511 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 23512 rc = sqlite3.Xsqlite3_finalize(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) 23513 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 23514 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23515 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser-- 23516 23517 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 23518 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 23519 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 23520 } 23521 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen) 23522 } 23523 } 23524 return rc 23525 } 23526 23527 func union_isspace(tls *libc.TLS, c uint8) int32 { 23528 return libc.Bool32(int32(c) == ' ' || int32(c) == '\n' || int32(c) == '\r' || int32(c) == '\t') 23529 } 23530 23531 func union_isidchar(tls *libc.TLS, c uint8) int32 { 23532 return libc.Bool32(int32(c) >= 'a' && int32(c) <= 'z' || int32(c) >= 'A' && int32(c) < 'Z' || int32(c) >= '0' && int32(c) <= '9') 23533 } 23534 23535 func unionConfigureVtab(tls *libc.TLS, pRc uintptr, pTab uintptr, pStmt uintptr, nArg int32, azArg uintptr, pzErr uintptr) { 23536 bp := tls.Alloc(68) 23537 defer tls.Free(68) 23538 23539 *(*int32)(unsafe.Pointer(bp + 64)) = *(*int32)(unsafe.Pointer(pRc)) 23540 var i int32 23541 if *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK { 23542 (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext = libc.Bool32(sqlite3.Xsqlite3_column_count(tls, pStmt) > 4) 23543 } 23544 for i = 0; *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK && i < nArg; i++ { 23545 var zArg uintptr = unionStrdup(tls, bp+64, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8))) 23546 if zArg != 0 { 23547 var nOpt int32 = 0 23548 var zOpt uintptr 23549 var zVal uintptr 23550 23551 unionDequote(tls, zArg) 23552 zOpt = zArg 23553 for union_isspace(tls, *(*uint8)(unsafe.Pointer(zOpt))) != 0 { 23554 zOpt++ 23555 } 23556 zVal = zOpt 23557 if int32(*(*uint8)(unsafe.Pointer(zVal))) == ':' { 23558 zVal++ 23559 } 23560 for union_isidchar(tls, *(*uint8)(unsafe.Pointer(zVal))) != 0 { 23561 zVal++ 23562 } 23563 nOpt = int32((int64(zVal) - int64(zOpt)) / 1) 23564 23565 for union_isspace(tls, *(*uint8)(unsafe.Pointer(zVal))) != 0 { 23566 zVal++ 23567 } 23568 if int32(*(*uint8)(unsafe.Pointer(zVal))) == '=' { 23569 *(*uint8)(unsafe.Pointer(zOpt + uintptr(nOpt))) = uint8(0) 23570 zVal++ 23571 for union_isspace(tls, *(*uint8)(unsafe.Pointer(zVal))) != 0 { 23572 zVal++ 23573 } 23574 zVal = unionStrdup(tls, bp+64, zVal) 23575 if zVal != 0 { 23576 unionDequote(tls, zVal) 23577 if int32(*(*uint8)(unsafe.Pointer(zOpt))) == ':' { 23578 var iParam int32 = sqlite3.Xsqlite3_bind_parameter_index(tls, pStmt, zOpt) 23579 if iParam == 0 { 23580 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23581 ts+8621, libc.VaList(bp, zOpt)) 23582 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23583 } else { 23584 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3_bind_text(tls, pStmt, iParam, zVal, -1, libc.UintptrFromInt32(-1)) 23585 } 23586 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8658, 7) { 23587 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = libc.Xatoi(tls, zVal) 23588 if (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen <= 0 { 23589 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8666, 0) 23590 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23591 } 23592 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8699, 7) { 23593 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 23594 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23595 ts+8707, 0) 23596 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23597 } else { 23598 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23599 ts+8745, libc.VaList(bp+8, zVal, func() uintptr { 23600 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23601 return ts + 8762 23602 } 23603 return ts + 584 23604 }())) 23605 } 23606 } else if nOpt == 9 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8765, 9) { 23607 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 23608 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23609 ts+8775, 0) 23610 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23611 } else { 23612 (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23613 ts+8815, libc.VaList(bp+24, zVal, func() uintptr { 23614 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23615 return ts + 8762 23616 } 23617 return ts + 584 23618 }())) 23619 } 23620 } else { 23621 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8834, libc.VaList(bp+40, zOpt)) 23622 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23623 } 23624 sqlite3.Xsqlite3_free(tls, zVal) 23625 } 23626 } else { 23627 if i == 0 && nArg == 1 { 23628 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23629 ts+8869, libc.VaList(bp+48, zArg)) 23630 } else { 23631 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8884, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)))) 23632 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23633 } 23634 } 23635 sqlite3.Xsqlite3_free(tls, zArg) 23636 } 23637 } 23638 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 64)) 23639 } 23640 23641 func unionConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 23642 bp := tls.Alloc(44) 23643 defer tls.Free(44) 23644 23645 var pTab uintptr = uintptr(0) 23646 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 23647 var bSwarm int32 = func() int32 { 23648 if pAux == uintptr(0) { 23649 return 0 23650 } 23651 return 1 23652 }() 23653 var zVtab uintptr = func() uintptr { 23654 if bSwarm != 0 { 23655 return ts + 8911 23656 } 23657 return ts + 8921 23658 }() 23659 23660 if sqlite3.Xsqlite3_stricmp(tls, ts+8931, *(*uintptr)(unsafe.Pointer(argv + 1*8))) != 0 { 23661 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8936, libc.VaList(bp, zVtab)) 23662 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23663 } else if argc < 4 || argc > 4 && bSwarm == 0 { 23664 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8977, libc.VaList(bp+8, zVtab)) 23665 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23666 } else { 23667 var nAlloc int32 = 0 23668 var pStmt uintptr = uintptr(0) 23669 var zArg uintptr = unionStrdup(tls, bp+40, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 23670 23671 unionDequote(tls, zArg) 23672 pStmt = unionPreparePrintf(tls, bp+40, pzErr, db, 23673 ts+9010, libc.VaList(bp+16, zArg)) 23674 23675 pTab = unionMalloc(tls, bp+40, int64(unsafe.Sizeof(UnionTab{}))) 23676 if pTab != 0 { 23677 (*UnionTab)(unsafe.Pointer(pTab)).Fdb = db 23678 (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm = bSwarm 23679 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = SWARMVTAB_MAX_OPEN 23680 } 23681 23682 if bSwarm != 0 { 23683 unionConfigureVtab(tls, bp+40, pTab, pStmt, argc-4, argv+4*8, pzErr) 23684 } 23685 23686 for *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23687 var zDb uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23688 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 23689 var iMin sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 2) 23690 var iMax sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 3) 23691 var pSrc uintptr 23692 23693 if nAlloc <= (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 23694 var nNew int32 23695 if nAlloc != 0 { 23696 nNew = nAlloc * 2 23697 } else { 23698 nNew = 8 23699 } 23700 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, 23701 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, uint64(nNew)*uint64(unsafe.Sizeof(UnionSrc{}))) 23702 if aNew == uintptr(0) { 23703 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_NOMEM 23704 break 23705 } else { 23706 libc.Xmemset(tls, aNew+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*72, 0, uint64(nNew-(*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*uint64(unsafe.Sizeof(UnionSrc{}))) 23707 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc = aNew 23708 nAlloc = nNew 23709 } 23710 } 23711 23712 if iMax < iMin || (*UnionTab)(unsafe.Pointer(pTab)).FnSrc > 0 && iMin <= (*UnionSrc)(unsafe.Pointer((*UnionTab)(unsafe.Pointer(pTab)).FaSrc+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc-1)*72)).FiMax { 23713 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9040, 0) 23714 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23715 } 23716 23717 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23718 pSrc = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(libc.PostIncInt32(&(*UnionTab)(unsafe.Pointer(pTab)).FnSrc, 1))*72 23719 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab = unionStrdup(tls, bp+40, zTab) 23720 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin = iMin 23721 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax = iMax 23722 if bSwarm != 0 { 23723 (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile = unionStrdup(tls, bp+40, zDb) 23724 } else { 23725 (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb = unionStrdup(tls, bp+40, zDb) 23726 } 23727 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23728 var zContext uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 4) 23729 (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext = unionStrdup(tls, bp+40, zContext) 23730 } 23731 } 23732 } 23733 unionFinalize(tls, bp+40, pStmt, pzErr) 23734 pStmt = uintptr(0) 23735 23736 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FnSrc == 0 { 23737 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9067, 0) 23738 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 23739 } 23740 23741 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23742 if bSwarm != 0 { 23743 *(*int32)(unsafe.Pointer(bp + 40)) = unionOpenDatabase(tls, pTab, 0, pzErr) 23744 } else { 23745 *(*int32)(unsafe.Pointer(bp + 40)) = unionSourceCheck(tls, pTab, pzErr) 23746 } 23747 } 23748 23749 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 23750 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc 23751 var tdb uintptr = func() uintptr { 23752 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23753 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 23754 } 23755 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23756 }() 23757 pStmt = unionPreparePrintf(tls, bp+40, pzErr, tdb, 23758 ts+9095, 23759 libc.VaList(bp+24, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb)) 23760 } 23761 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23762 var zDecl uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23763 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zDecl) 23764 (*UnionTab)(unsafe.Pointer(pTab)).FiPK = sqlite3.Xsqlite3_column_int(tls, pStmt, 1) 23765 } 23766 23767 unionFinalize(tls, bp+40, pStmt, pzErr) 23768 } 23769 23770 if *(*int32)(unsafe.Pointer(bp + 40)) != SQLITE_OK { 23771 unionDisconnect(tls, pTab) 23772 pTab = uintptr(0) 23773 } 23774 23775 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 23776 return *(*int32)(unsafe.Pointer(bp + 40)) 23777 } 23778 23779 func unionOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 23780 bp := tls.Alloc(4) 23781 defer tls.Free(4) 23782 23783 var pCsr uintptr 23784 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23785 _ = p 23786 pCsr = unionMalloc(tls, bp, int64(unsafe.Sizeof(UnionCsr{}))) 23787 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 23788 return *(*int32)(unsafe.Pointer(bp)) 23789 } 23790 23791 func unionClose(tls *libc.TLS, cur uintptr) int32 { 23792 var pCsr uintptr = cur 23793 unionFinalizeCsrStmt(tls, pCsr) 23794 sqlite3.Xsqlite3_free(tls, pCsr) 23795 return SQLITE_OK 23796 } 23797 23798 func doUnionNext(tls *libc.TLS, pCsr uintptr) int32 { 23799 bp := tls.Alloc(28) 23800 defer tls.Free(28) 23801 23802 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_OK 23803 23804 if sqlite3.Xsqlite3_step(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) != SQLITE_ROW { 23805 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 23806 *(*int32)(unsafe.Pointer(bp + 24)) = unionFinalizeCsrStmt(tls, pCsr) 23807 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23808 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab++ 23809 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 23810 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 23811 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid >= (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23812 *(*int32)(unsafe.Pointer(bp + 24)) = unionOpenDatabase(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab, pTab+16) 23813 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPreparePrintf(tls, bp+24, pTab+16, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb, 23814 ts+9273, 23815 libc.VaList(bp, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, 23816 func() uintptr { 23817 if (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax > (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid { 23818 return ts + 9305 23819 } 23820 return ts + 9322 23821 }(), 23822 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid)) 23823 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 23824 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 23825 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ROW 23826 } 23827 } 23828 } 23829 } 23830 } 23831 23832 return *(*int32)(unsafe.Pointer(bp + 24)) 23833 } 23834 23835 func unionNext(tls *libc.TLS, cur uintptr) int32 { 23836 var rc int32 23837 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_ROW { 23838 rc = doUnionNext(tls, cur) 23839 } 23840 return rc 23841 } 23842 23843 func unionColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 23844 var pCsr uintptr = cur 23845 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 23846 return SQLITE_OK 23847 } 23848 23849 func unionRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 23850 var pCsr uintptr = cur 23851 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, 0) 23852 return SQLITE_OK 23853 } 23854 23855 func unionEof(tls *libc.TLS, cur uintptr) int32 { 23856 var pCsr uintptr = cur 23857 return libc.Bool32((*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 23858 } 23859 23860 func unionFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 23861 bp := tls.Alloc(108) 23862 defer tls.Free(108) 23863 23864 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 23865 var pCsr uintptr = pVtabCursor 23866 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 23867 var i int32 23868 var zSql uintptr = uintptr(0) 23869 var bZero int32 = 0 23870 23871 var iMin sqlite3_int64 = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 23872 var iMax sqlite3_int64 = int64(0xffffffff) | int64(0x7fffffff)<<32 23873 23874 _ = idxStr 23875 23876 if idxNum == SQLITE_INDEX_CONSTRAINT_EQ { 23877 iMin = libc.AssignInt64(&iMax, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 23878 } else { 23879 if idxNum&(SQLITE_INDEX_CONSTRAINT_LE|SQLITE_INDEX_CONSTRAINT_LT) != 0 { 23880 iMax = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 23881 if idxNum&SQLITE_INDEX_CONSTRAINT_LT != 0 { 23882 if iMax == int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) { 23883 bZero = 1 23884 } else { 23885 iMax-- 23886 } 23887 } 23888 } 23889 23890 if idxNum&(SQLITE_INDEX_CONSTRAINT_GE|SQLITE_INDEX_CONSTRAINT_GT) != 0 { 23891 iMin = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(argc-1)*8))) 23892 if idxNum&SQLITE_INDEX_CONSTRAINT_GT != 0 { 23893 if iMin == int64(0xffffffff)|int64(0x7fffffff)<<32 { 23894 bZero = 1 23895 } else { 23896 iMin++ 23897 } 23898 } 23899 } 23900 } 23901 23902 unionFinalizeCsrStmt(tls, pCsr) 23903 if bZero != 0 { 23904 return SQLITE_OK 23905 } 23906 23907 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23908 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 23909 if iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax || iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23910 continue 23911 } 23912 23913 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9326, libc.VaList(bp, zSql, func() uintptr { 23914 if zSql != 0 { 23915 return ts + 9360 23916 } 23917 return ts + 584 23918 }(), func() uintptr { 23919 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23920 return ts + 5624 23921 } 23922 return ts + 584 23923 }(), func() uintptr { 23924 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23925 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 23926 } 23927 return ts + 584 23928 }(), func() uintptr { 23929 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23930 return ts + 5626 23931 } 23932 return ts + 584 23933 }(), (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 23934 if zSql == uintptr(0) { 23935 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 23936 break 23937 } 23938 23939 if iMin == iMax { 23940 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9372, libc.VaList(bp+48, zSql, iMin)) 23941 } else { 23942 var zWhere uintptr = ts + 9392 23943 if iMin != int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) && iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 23944 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9398, libc.VaList(bp+64, zSql, iMin)) 23945 zWhere = ts + 9419 23946 } 23947 if iMax != int64(0xffffffff)|int64(0x7fffffff)<<32 && iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax { 23948 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9423, libc.VaList(bp+80, zSql, zWhere, iMax)) 23949 } 23950 } 23951 23952 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23953 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab = i 23954 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid = iMax 23955 *(*int32)(unsafe.Pointer(bp + 104)) = unionOpenDatabase(tls, pTab, i, pTab+16) 23956 break 23957 } 23958 } 23959 23960 if zSql == uintptr(0) { 23961 return *(*int32)(unsafe.Pointer(bp + 104)) 23962 } else { 23963 var db uintptr = func() uintptr { 23964 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23965 return (*UnionSrc)(unsafe.Pointer((*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72)).Fdb 23966 } 23967 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23968 }() 23969 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPrepare(tls, bp+104, db, zSql, pTab+16) 23970 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 23971 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 23972 } 23973 sqlite3.Xsqlite3_free(tls, zSql) 23974 } 23975 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 23976 return *(*int32)(unsafe.Pointer(bp + 104)) 23977 } 23978 return unionNext(tls, pVtabCursor) 23979 } 23980 23981 func unionBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 23982 var pTab uintptr = tab 23983 var iEq int32 = -1 23984 var iLt int32 = -1 23985 var iGt int32 = -1 23986 var i int32 23987 23988 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 23989 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 23990 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) { 23991 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) { 23992 case SQLITE_INDEX_CONSTRAINT_EQ: 23993 iEq = i 23994 break 23995 fallthrough 23996 case SQLITE_INDEX_CONSTRAINT_LE: 23997 fallthrough 23998 case SQLITE_INDEX_CONSTRAINT_LT: 23999 iLt = i 24000 break 24001 fallthrough 24002 case SQLITE_INDEX_CONSTRAINT_GE: 24003 fallthrough 24004 case SQLITE_INDEX_CONSTRAINT_GT: 24005 iGt = i 24006 break 24007 } 24008 } 24009 } 24010 24011 if iEq >= 0 { 24012 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1) 24013 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags = SQLITE_INDEX_SCAN_UNIQUE 24014 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 24015 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SQLITE_INDEX_CONSTRAINT_EQ 24016 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).FargvIndex = 1 24017 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).Fomit = uint8(1) 24018 } else { 24019 var iCons int32 = 1 24020 var idxNum int32 = 0 24021 var nRow sqlite3_int64 = int64(1000000) 24022 if iLt >= 0 { 24023 nRow = nRow / int64(2) 24024 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 24025 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).Fomit = uint8(1) 24026 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iLt)*12)).Fop) 24027 } 24028 if iGt >= 0 { 24029 nRow = nRow / int64(2) 24030 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 24031 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).Fomit = uint8(1) 24032 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iGt)*12)).Fop) 24033 } 24034 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = nRow 24035 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 * float64(nRow) 24036 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 24037 } 24038 24039 return SQLITE_OK 24040 } 24041 24042 func createUnionVtab(tls *libc.TLS, db uintptr) int32 { 24043 var rc int32 24044 24045 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8921, uintptr(unsafe.Pointer(&unionModule)), uintptr(0)) 24046 if rc == SQLITE_OK { 24047 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8911, uintptr(unsafe.Pointer(&unionModule)), db) 24048 } 24049 return rc 24050 } 24051 24052 var unionModule = sqlite3_module{ 24053 FxCreate: 0, 24054 FxConnect: 0, 24055 FxBestIndex: 0, 24056 FxDisconnect: 0, 24057 FxDestroy: 0, 24058 FxOpen: 0, 24059 FxClose: 0, 24060 FxFilter: 0, 24061 FxNext: 0, 24062 FxEof: 0, 24063 FxColumn: 0, 24064 FxRowid: 0, 24065 } 24066 24067 func sqlite3_unionvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 24068 var rc int32 = SQLITE_OK 24069 _ = pApi 24070 24071 _ = pzErrMsg 24072 rc = createUnionVtab(tls, db) 24073 return rc 24074 } 24075 24076 type wholenumber_cursor1 = struct { 24077 Fbase sqlite3_vtab_cursor 24078 FiValue sqlite3_int64 24079 FmxValue sqlite3_int64 24080 } 24081 24082 type wholenumber_cursor = wholenumber_cursor1 24083 24084 func wholenumberConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 24085 var pNew uintptr 24086 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 24087 if pNew == uintptr(0) { 24088 return SQLITE_NOMEM 24089 } 24090 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+9441) 24091 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 24092 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 24093 return SQLITE_OK 24094 } 24095 24096 func wholenumberDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 24097 sqlite3.Xsqlite3_free(tls, pVtab) 24098 return SQLITE_OK 24099 } 24100 24101 func wholenumberOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 24102 var pCur uintptr 24103 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(wholenumber_cursor{}))) 24104 if pCur == uintptr(0) { 24105 return SQLITE_NOMEM 24106 } 24107 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(wholenumber_cursor{}))) 24108 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 24109 return SQLITE_OK 24110 } 24111 24112 func wholenumberClose(tls *libc.TLS, cur uintptr) int32 { 24113 sqlite3.Xsqlite3_free(tls, cur) 24114 return SQLITE_OK 24115 } 24116 24117 func wholenumberNext(tls *libc.TLS, cur uintptr) int32 { 24118 var pCur uintptr = cur 24119 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue++ 24120 return SQLITE_OK 24121 } 24122 24123 func wholenumberColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 24124 var pCur uintptr = cur 24125 sqlite3.Xsqlite3_result_int64(tls, ctx, (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue) 24126 return SQLITE_OK 24127 } 24128 24129 func wholenumberRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 24130 var pCur uintptr = cur 24131 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue 24132 return SQLITE_OK 24133 } 24134 24135 func wholenumberEof(tls *libc.TLS, cur uintptr) int32 { 24136 var pCur uintptr = cur 24137 return libc.Bool32((*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue || (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue == int64(0)) 24138 } 24139 24140 func wholenumberFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 24141 var pCur uintptr = pVtabCursor 24142 var v sqlite3_int64 24143 var i int32 = 0 24144 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = int64(1) 24145 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 24146 if idxNum&3 != 0 { 24147 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) + sqlite3_int64(idxNum&1) 24148 if v > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v <= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 24149 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = v 24150 } 24151 i++ 24152 } 24153 if idxNum&12 != 0 { 24154 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) - sqlite3_int64(idxNum>>2&1) 24155 if v >= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v < (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 24156 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = v 24157 } 24158 } 24159 return SQLITE_OK 24160 } 24161 24162 func wholenumberBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 24163 var i int32 24164 var idxNum int32 = 0 24165 var argvIdx int32 = 1 24166 var ltIdx int32 = -1 24167 var gtIdx int32 = -1 24168 var pConstraint uintptr 24169 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 24170 i = 0 24171 __1: 24172 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 24173 goto __3 24174 } 24175 { 24176 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 24177 goto __2 24178 } 24179 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GT { 24180 idxNum = idxNum | 1 24181 ltIdx = i 24182 } 24183 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GE { 24184 idxNum = idxNum | 2 24185 ltIdx = i 24186 } 24187 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 24188 idxNum = idxNum | 4 24189 gtIdx = i 24190 } 24191 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE { 24192 idxNum = idxNum | 8 24193 gtIdx = i 24194 } 24195 24196 } 24197 goto __2 24198 __2: 24199 i++ 24200 pConstraint += 12 24201 goto __1 24202 goto __3 24203 __3: 24204 ; 24205 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 24206 if ltIdx >= 0 { 24207 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).FargvIndex = libc.PostIncInt32(&argvIdx, 1) 24208 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).Fomit = uint8(1) 24209 } 24210 if gtIdx >= 0 { 24211 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).FargvIndex = argvIdx 24212 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).Fomit = uint8(1) 24213 } 24214 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 24215 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 24216 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 24217 } 24218 if idxNum&12 == 0 { 24219 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e99 24220 } else if idxNum&3 == 0 { 24221 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 24222 } else { 24223 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 24224 } 24225 return SQLITE_OK 24226 } 24227 24228 var wholenumberModule = sqlite3_module{ 24229 FxCreate: 0, 24230 FxConnect: 0, 24231 FxBestIndex: 0, 24232 FxDisconnect: 0, 24233 FxDestroy: 0, 24234 FxOpen: 0, 24235 FxClose: 0, 24236 FxFilter: 0, 24237 FxNext: 0, 24238 FxEof: 0, 24239 FxColumn: 0, 24240 FxRowid: 0, 24241 } 24242 24243 func sqlite3_wholenumber_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 24244 var rc int32 = SQLITE_OK 24245 _ = pApi 24246 24247 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+9463, uintptr(unsafe.Pointer(&wholenumberModule)), uintptr(0)) 24248 return rc 24249 } 24250 24251 func test_rbu_delta(tls *libc.TLS, pCtx uintptr, nArg int32, apVal uintptr) { 24252 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 24253 var pScript uintptr 24254 var i int32 24255 24256 pScript = tcl.XTcl_NewObj(tls) 24257 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 24258 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, ts+9475, -1)) 24259 for i = 0; i < nArg; i++ { 24260 var pIn uintptr = *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)) 24261 var z uintptr = sqlite3.Xsqlite3_value_text(tls, pIn) 24262 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, z, -1)) 24263 } 24264 24265 if TCL_OK == tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_GLOBAL_ONLY) { 24266 var z uintptr = tcl.XTcl_GetStringResult(tls, interp) 24267 sqlite3.Xsqlite3_result_text(tls, pCtx, z, -1, libc.UintptrFromInt32(-1)) 24268 } else { 24269 tcl.XTcl_BackgroundError(tls, interp) 24270 } 24271 24272 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 24273 var _objPtr uintptr = pScript 24274 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 24275 tcl.XTclFreeObj(tls, _objPtr) 24276 } 24277 } 24278 } 24279 24280 func test_sqlite3rbu_cmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24281 bp := tls.Alloc(496) 24282 defer tls.Free(496) 24283 24284 var ret int32 = TCL_OK 24285 var pRbu uintptr = clientData 24286 *(*[14]RbuCmd)(unsafe.Pointer(bp + 24)) = [14]RbuCmd{ 24287 {FzName: ts + 9485, FnArg: 2, FzUsage: ts + 584}, 24288 {FzName: ts + 9490, FnArg: 2, FzUsage: ts + 584}, 24289 {FzName: ts + 9496, FnArg: 2, FzUsage: ts + 584}, 24290 {FzName: ts + 9513, FnArg: 2, FzUsage: ts + 584}, 24291 {FzName: ts + 9523, FnArg: 3, FzUsage: ts + 9535}, 24292 {FzName: ts + 9539, FnArg: 2, FzUsage: ts + 584}, 24293 {FzName: ts + 9551, FnArg: 3, FzUsage: ts + 9554}, 24294 {FzName: ts + 9558, FnArg: 2, FzUsage: ts + 584}, 24295 {FzName: ts + 9564, FnArg: 2, FzUsage: ts + 584}, 24296 {FzName: ts + 9573, FnArg: 2, FzUsage: ts + 584}, 24297 {FzName: ts + 9588, FnArg: 3, FzUsage: ts + 9604}, 24298 {FzName: ts + 9610, FnArg: 2, FzUsage: ts + 584}, 24299 {FzName: ts + 9620, FnArg: 3, FzUsage: ts + 9535}, 24300 {}, 24301 } 24302 24303 if objc < 2 { 24304 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9631) 24305 return TCL_ERROR 24306 } 24307 ret = tcl.XTcl_GetIndexFromObjStruct(tls, 24308 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, int32(unsafe.Sizeof(RbuCmd{})), ts+9638, 0, bp+360) 24309 if ret != 0 { 24310 return TCL_ERROR 24311 } 24312 if objc != (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FnArg { 24313 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FzUsage) 24314 return TCL_ERROR 24315 } 24316 24317 switch *(*int32)(unsafe.Pointer(bp + 360)) { 24318 case 0: 24319 { 24320 var rc int32 = sqlite3.Xsqlite3rbu_step(tls, pRbu) 24321 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24322 break 24323 24324 } 24325 24326 case 9: 24327 fallthrough 24328 case 1: 24329 { 24330 *(*uintptr)(unsafe.Pointer(bp + 368)) = uintptr(0) 24331 var rc int32 24332 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 24333 if *(*int32)(unsafe.Pointer(bp + 360)) == 1 { 24334 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, bp+368) 24335 } else { 24336 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, uintptr(0)) 24337 } 24338 if rc == SQLITE_OK || rc == SQLITE_DONE { 24339 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24340 24341 } else { 24342 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24343 if *(*uintptr)(unsafe.Pointer(bp + 368)) != 0 { 24344 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, *(*uintptr)(unsafe.Pointer(bp + 368)), 0)) 24345 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 368))) 24346 } 24347 ret = TCL_ERROR 24348 } 24349 break 24350 24351 } 24352 24353 case 2: 24354 { 24355 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, 0) 24356 var rc int32 = sqlite3.Xsqlite3_create_function(tls, 24357 db, ts+9475, -1, SQLITE_UTF8, interp, *(*uintptr)(unsafe.Pointer(&struct { 24358 f func(*libc.TLS, uintptr, int32, uintptr) 24359 }{test_rbu_delta})), uintptr(0), uintptr(0)) 24360 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24361 ret = func() int32 { 24362 if rc == SQLITE_OK { 24363 return TCL_OK 24364 } 24365 return TCL_ERROR 24366 }() 24367 break 24368 24369 } 24370 24371 case 3: 24372 { 24373 var rc int32 = sqlite3.Xsqlite3rbu_savestate(tls, pRbu) 24374 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24375 ret = func() int32 { 24376 if rc == SQLITE_OK { 24377 return TCL_OK 24378 } 24379 return TCL_ERROR 24380 }() 24381 break 24382 24383 } 24384 24385 case 12: 24386 fallthrough 24387 case 4: 24388 { 24389 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 360)) == 12)) 24390 var rc int32 = sqlite3.Xsqlite3_exec(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), uintptr(0), uintptr(0), uintptr(0)) 24391 if rc != SQLITE_OK { 24392 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, db), -1)) 24393 ret = TCL_ERROR 24394 } 24395 break 24396 24397 } 24398 24399 case 5: 24400 { 24401 var pObj uintptr 24402 sqlite3.Xsqlite3rbu_bp_progress(tls, pRbu, bp+376, bp+380) 24403 24404 pObj = tcl.XTcl_NewObj(tls) 24405 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 376)))) 24406 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 380)))) 24407 tcl.XTcl_SetObjResult(tls, interp, pObj) 24408 break 24409 24410 } 24411 24412 case 6: 24413 { 24414 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+384) != 0 { 24415 ret = TCL_ERROR 24416 } else { 24417 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, *(*int32)(unsafe.Pointer(bp + 384))) 24418 if sqlite3TestMakePointerStr(tls, interp, bp+388, db) != 0 { 24419 ret = TCL_ERROR 24420 } else { 24421 tcl.XTcl_SetResult(tls, interp, bp+388, uintptr(1)) 24422 } 24423 } 24424 break 24425 24426 } 24427 case 7: 24428 { 24429 *(*[6]uintptr)(unsafe.Pointer(bp + 440)) = [6]uintptr{uintptr(0), ts + 9649, ts + 9653, ts + 9658, ts + 9669, ts + 9674} 24430 var eState int32 = sqlite3.Xsqlite3rbu_state(tls, pRbu) 24431 24432 tcl.XTcl_SetResult(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 440 + uintptr(eState)*8)), uintptr(0)) 24433 break 24434 24435 } 24436 case 8: 24437 { 24438 var nStep sqlite3_int64 = sqlite3.Xsqlite3rbu_progress(tls, pRbu) 24439 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nStep)) 24440 break 24441 24442 } 24443 24444 case 10: 24445 { 24446 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+488) != 0 { 24447 ret = TCL_ERROR 24448 } else { 24449 *(*sqlite3_int64)(unsafe.Pointer(bp + 488)) = sqlite3.Xsqlite3rbu_temp_size_limit(tls, pRbu, *(*sqlite3_int64)(unsafe.Pointer(bp + 488))) 24450 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 488)))) 24451 } 24452 break 24453 24454 } 24455 case 11: 24456 { 24457 var sz sqlite3_int64 = sqlite3.Xsqlite3rbu_temp_size(tls, pRbu) 24458 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sz)) 24459 break 24460 24461 } 24462 24463 default: 24464 break 24465 } 24466 24467 return ret 24468 } 24469 24470 type RbuCmd = struct { 24471 FzName uintptr 24472 FnArg int32 24473 F__ccgo_pad1 [4]byte 24474 FzUsage uintptr 24475 } 24476 24477 func test_sqlite3rbu(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24478 var pRbu uintptr = uintptr(0) 24479 var zCmd uintptr 24480 var zTarget uintptr 24481 var zRbu uintptr 24482 var zStateDb uintptr = uintptr(0) 24483 24484 if objc != 4 && objc != 5 { 24485 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9680) 24486 return TCL_ERROR 24487 } 24488 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24489 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 24490 zRbu = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 24491 if objc == 5 { 24492 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 24493 } 24494 24495 pRbu = sqlite3.Xsqlite3rbu_open(tls, zTarget, zRbu, zStateDb) 24496 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 24497 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 24498 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 24499 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24500 return TCL_OK 24501 } 24502 24503 func test_sqlite3rbu_vacuum(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24504 var pRbu uintptr = uintptr(0) 24505 var zCmd uintptr 24506 var zTarget uintptr 24507 var zStateDb uintptr = uintptr(0) 24508 24509 if objc != 3 && objc != 4 { 24510 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9713) 24511 return TCL_ERROR 24512 } 24513 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24514 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 24515 if objc == 4 { 24516 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 24517 } 24518 if zStateDb != 0 && int32(*(*uint8)(unsafe.Pointer(zStateDb))) == 0 { 24519 zStateDb = uintptr(0) 24520 } 24521 24522 pRbu = sqlite3.Xsqlite3rbu_vacuum(tls, zTarget, zStateDb) 24523 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 24524 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 24525 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 24526 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24527 return TCL_OK 24528 } 24529 24530 func test_sqlite3rbu_create_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24531 var zName uintptr 24532 var zParent uintptr 24533 var rc int32 24534 24535 if objc != 3 && objc != 4 { 24536 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9739) 24537 return TCL_ERROR 24538 } 24539 24540 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 24541 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8))) 24542 if int32(*(*uint8)(unsafe.Pointer(zParent))) == 0 { 24543 zParent = uintptr(0) 24544 } 24545 24546 rc = sqlite3.Xsqlite3rbu_create_vfs(tls, zName, zParent) 24547 if rc != SQLITE_OK { 24548 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24549 return TCL_ERROR 24550 } else if objc == 4 { 24551 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, zName) 24552 sqlite3.Xsqlite3_vfs_register(tls, pVfs, 1) 24553 } 24554 24555 tcl.XTcl_ResetResult(tls, interp) 24556 return TCL_OK 24557 } 24558 24559 func test_sqlite3rbu_destroy_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24560 var zName uintptr 24561 24562 if objc != 2 { 24563 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 24564 return TCL_ERROR 24565 } 24566 24567 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24568 sqlite3.Xsqlite3rbu_destroy_vfs(tls, zName) 24569 return TCL_OK 24570 } 24571 24572 func test_sqlite3rbu_internal_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24573 bp := tls.Alloc(16) 24574 defer tls.Free(16) 24575 24576 var db uintptr 24577 24578 if objc != 1 { 24579 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 24580 return TCL_ERROR 24581 } 24582 24583 db = sqlite3.Xsqlite3rbu_db(tls, uintptr(0), 0) 24584 if db != uintptr(0) { 24585 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9767, 0)) 24586 return TCL_ERROR 24587 } 24588 24589 return TCL_OK 24590 } 24591 24592 func SqliteRbu_Init(tls *libc.TLS, interp uintptr) int32 { 24593 var i int32 24594 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd))/uint64(unsafe.Sizeof(struct { 24595 FzName uintptr 24596 FxProc uintptr 24597 }{})); i++ { 24598 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd[i].FzName, aObjCmd[i].FxProc, uintptr(0), uintptr(0)) 24599 } 24600 return TCL_OK 24601 } 24602 24603 var aObjCmd = [5]struct { 24604 FzName uintptr 24605 FxProc uintptr 24606 }{ 24607 {FzName: ts + 9790, FxProc: 0}, 24608 {FzName: ts + 9801, FxProc: 0}, 24609 {FzName: ts + 9819, FxProc: 0}, 24610 {FzName: ts + 9841, FxProc: 0}, 24611 {FzName: ts + 9864, FxProc: 0}, 24612 } 24613 24614 type sqlite31 = sqlite32 24615 24616 type sqlite3_str = sqlite3_str1 24617 24618 type uint8_t = uint8 24619 type uint16_t = uint16 24620 type uint32_t = uint32 24621 type uint64_t = uint64 24622 24623 type int_least8_t = int8 24624 type int_least16_t = int16 24625 type int_least32_t = int32 24626 type int_least64_t = int64 24627 24628 type uint_least8_t = uint8 24629 type uint_least16_t = uint16 24630 type uint_least32_t = uint32 24631 type uint_least64_t = uint64 24632 24633 type int_fast8_t = int8 24634 type int_fast16_t = int64 24635 type int_fast32_t = int64 24636 type int_fast64_t = int64 24637 24638 type uint_fast8_t = uint8 24639 type uint_fast16_t = uint64 24640 type uint_fast32_t = uint64 24641 type uint_fast64_t = uint64 24642 type uintptr_t = uint64 24643 24644 type intmax_t = int64 24645 type uintmax_t = uint64 24646 24647 type imaxdiv_t = struct { 24648 Fquot int64 24649 Frem int64 24650 } 24651 24652 type Hash1 = struct { 24653 Fhtsize uint32 24654 Fcount uint32 24655 Ffirst uintptr 24656 Fht uintptr 24657 } 24658 24659 type Hash = Hash1 24660 type HashElem1 = struct { 24661 Fnext uintptr 24662 Fprev uintptr 24663 Fdata uintptr 24664 FpKey uintptr 24665 } 24666 24667 type HashElem = HashElem1 24668 24669 type _ht = struct { 24670 Fcount uint32 24671 F__ccgo_pad1 [4]byte 24672 Fchain uintptr 24673 } 24674 24675 type max_align_t = struct { 24676 F__max_align_ll int64 24677 F__max_align_ld float64 24678 } 24679 type i16 = int16_t 24680 type i8 = int8_t 24681 24682 type tRowcnt = u32 24683 24684 type LogEst = int16_t 24685 24686 type uptr = uintptr_t 24687 24688 type BusyHandler1 = struct { 24689 FxBusyHandler uintptr 24690 FpBusyArg uintptr 24691 FnBusy int32 24692 F__ccgo_pad1 [4]byte 24693 } 24694 24695 type BusyHandler = BusyHandler1 24696 24697 type AggInfo1 = struct { 24698 FdirectMode u8 24699 FuseSortingIdx u8 24700 F__ccgo_pad1 [2]byte 24701 FsortingIdx int32 24702 FsortingIdxPTab int32 24703 FnSortingColumn int32 24704 FmnReg int32 24705 FmxReg int32 24706 FpGroupBy uintptr 24707 FaCol uintptr 24708 FnColumn int32 24709 FnAccumulator int32 24710 FaFunc uintptr 24711 FnFunc int32 24712 FselId u32 24713 } 24714 24715 type AggInfo = AggInfo1 24716 type AuthContext1 = struct { 24717 FzAuthContext uintptr 24718 FpParse uintptr 24719 } 24720 24721 type AuthContext = AuthContext1 24722 type AutoincInfo1 = struct { 24723 FpNext uintptr 24724 FpTab uintptr 24725 FiDb int32 24726 FregCtr int32 24727 } 24728 24729 type AutoincInfo = AutoincInfo1 24730 type CollSeq1 = struct { 24731 FzName uintptr 24732 Fenc u8 24733 F__ccgo_pad1 [7]byte 24734 FpUser uintptr 24735 FxCmp uintptr 24736 FxDel uintptr 24737 } 24738 24739 type CollSeq = CollSeq1 24740 type Column1 = struct { 24741 FzCnName uintptr 24742 FnotNull uint8 24743 F__ccgo_pad1 [1]byte 24744 Faffinity uint8 24745 FszEst u8 24746 FhName u8 24747 F__ccgo_pad2 [1]byte 24748 FiDflt u16 24749 FcolFlags u16 24750 F__ccgo_pad3 [6]byte 24751 } 24752 24753 type Column = Column1 24754 type Cte1 = struct { 24755 FzName uintptr 24756 FpCols uintptr 24757 FpSelect uintptr 24758 FzCteErr uintptr 24759 FpUse uintptr 24760 FeM10d u8 24761 F__ccgo_pad1 [7]byte 24762 } 24763 24764 type Cte = Cte1 24765 type CteUse1 = struct { 24766 FnUse int32 24767 FaddrM9e int32 24768 FregRtn int32 24769 FiCur int32 24770 FnRowEst LogEst 24771 FeM10d u8 24772 F__ccgo_pad1 [1]byte 24773 } 24774 24775 type CteUse = CteUse1 24776 type Db1 = struct { 24777 FzDbSName uintptr 24778 FpBt uintptr 24779 Fsafety_level u8 24780 FbSyncSet u8 24781 F__ccgo_pad1 [6]byte 24782 FpSchema uintptr 24783 } 24784 24785 type Db = Db1 24786 type DbFixer1 = struct { 24787 FpParse uintptr 24788 Fw Walker 24789 FpSchema uintptr 24790 FbTemp u8 24791 F__ccgo_pad1 [7]byte 24792 FzDb uintptr 24793 FzType uintptr 24794 FpName uintptr 24795 } 24796 24797 type DbFixer = DbFixer1 24798 type Schema1 = struct { 24799 Fschema_cookie int32 24800 FiGeneration int32 24801 FtblHash Hash 24802 FidxHash Hash 24803 FtrigHash Hash 24804 FfkeyHash Hash 24805 FpSeqTab uintptr 24806 Ffile_format u8 24807 Fenc u8 24808 FschemaFlags u16 24809 Fcache_size int32 24810 } 24811 24812 type Schema = Schema1 24813 type Expr1 = struct { 24814 Fop u8 24815 FaffExpr uint8 24816 Fop2 u8 24817 F__ccgo_pad1 [1]byte 24818 Fflags u32 24819 Fu struct{ FzToken uintptr } 24820 FpLeft uintptr 24821 FpRight uintptr 24822 Fx struct{ FpList uintptr } 24823 FnHeight int32 24824 FiTable int32 24825 FiColumn ynVar 24826 FiAgg i16 24827 Fw struct{ FiJoin int32 } 24828 FpAggInfo uintptr 24829 Fy struct{ FpTab uintptr } 24830 } 24831 24832 type Expr = Expr1 24833 type ExprList1 = struct { 24834 FnExpr int32 24835 FnAlloc int32 24836 Fa [1]struct { 24837 FpExpr uintptr 24838 FzEName uintptr 24839 Ffg struct { 24840 F__ccgo_pad1 [0]uint32 24841 FsortFlags u8 24842 F__ccgo_pad2 [3]byte 24843 FeEName uint16 24844 F__ccgo_pad3 [2]byte 24845 } 24846 Fu struct { 24847 F__ccgo_pad1 [0]uint32 24848 Fx struct { 24849 FiOrderByCol u16 24850 FiAlias u16 24851 } 24852 } 24853 F__ccgo_pad1 [4]byte 24854 } 24855 } 24856 24857 type ExprList = ExprList1 24858 type FKey1 = struct { 24859 FpFrom uintptr 24860 FpNextFrom uintptr 24861 FzTo uintptr 24862 FpNextTo uintptr 24863 FpPrevTo uintptr 24864 FnCol int32 24865 FisDeferred u8 24866 FaAction [2]u8 24867 F__ccgo_pad1 [1]byte 24868 FapTrigger [2]uintptr 24869 FaCol [1]struct { 24870 FiFrom int32 24871 F__ccgo_pad1 [4]byte 24872 FzCol uintptr 24873 } 24874 } 24875 24876 type FKey = FKey1 24877 type FuncDestructor1 = struct { 24878 FnRef int32 24879 F__ccgo_pad1 [4]byte 24880 FxDestroy uintptr 24881 FpUserData uintptr 24882 } 24883 24884 type FuncDestructor = FuncDestructor1 24885 type FuncDef1 = struct { 24886 FnArg i8 24887 F__ccgo_pad1 [3]byte 24888 FfuncFlags u32 24889 FpUserData uintptr 24890 FpNext uintptr 24891 FxSFunc uintptr 24892 FxFinalize uintptr 24893 FxValue uintptr 24894 FxInverse uintptr 24895 FzName uintptr 24896 Fu struct{ FpHash uintptr } 24897 } 24898 24899 type FuncDef = FuncDef1 24900 type FuncDefHash1 = struct{ Fa [23]uintptr } 24901 24902 type FuncDefHash = FuncDefHash1 24903 type IdList1 = struct { 24904 FnId int32 24905 FeU4 u8 24906 F__ccgo_pad1 [3]byte 24907 Fa [1]struct { 24908 FzName uintptr 24909 Fu4 struct { 24910 F__ccgo_pad1 [0]uint64 24911 Fidx int32 24912 F__ccgo_pad2 [4]byte 24913 } 24914 } 24915 } 24916 24917 type IdList = IdList1 24918 type Index1 = struct { 24919 FzName uintptr 24920 FaiColumn uintptr 24921 FaiRowLogEst uintptr 24922 FpTable uintptr 24923 FzColAff uintptr 24924 FpNext uintptr 24925 FpSchema uintptr 24926 FaSortOrder uintptr 24927 FazColl uintptr 24928 FpPartIdxWhere uintptr 24929 FaColExpr uintptr 24930 Ftnum Pgno 24931 FszIdxRow LogEst 24932 FnKeyCol u16 24933 FnColumn u16 24934 FonError u8 24935 F__ccgo_pad1 [1]byte 24936 FidxType uint16 24937 F__ccgo_pad2 [2]byte 24938 FnSample int32 24939 FnSampleCol int32 24940 FaAvgEq uintptr 24941 FaSample uintptr 24942 FaiRowEst uintptr 24943 FnRowEst0 tRowcnt 24944 F__ccgo_pad3 [4]byte 24945 FcolNotIdxed Bitmask 24946 } 24947 24948 type Index = Index1 24949 type IndexSample1 = struct { 24950 Fp uintptr 24951 Fn int32 24952 F__ccgo_pad1 [4]byte 24953 FanEq uintptr 24954 FanLt uintptr 24955 FanDLt uintptr 24956 } 24957 24958 type IndexSample = IndexSample1 24959 type KeyInfo1 = struct { 24960 FnRef u32 24961 Fenc u8 24962 F__ccgo_pad1 [1]byte 24963 FnKeyField u16 24964 FnAllField u16 24965 F__ccgo_pad2 [6]byte 24966 Fdb uintptr 24967 FaSortFlags uintptr 24968 FaColl [1]uintptr 24969 } 24970 24971 type KeyInfo = KeyInfo1 24972 type Lookaside1 = struct { 24973 FbDisable u32 24974 Fsz u16 24975 FszTrue u16 24976 FbMalloced u8 24977 F__ccgo_pad1 [3]byte 24978 FnSlot u32 24979 FanStat [3]u32 24980 F__ccgo_pad2 [4]byte 24981 FpInit uintptr 24982 FpFree uintptr 24983 FpSmallInit uintptr 24984 FpSmallFree uintptr 24985 FpMiddle uintptr 24986 FpStart uintptr 24987 FpEnd uintptr 24988 } 24989 24990 type Lookaside = Lookaside1 24991 type LookasideSlot1 = struct{ FpNext uintptr } 24992 24993 type LookasideSlot = LookasideSlot1 24994 type Module1 = struct { 24995 FpModule uintptr 24996 FzName uintptr 24997 FnRefModule int32 24998 F__ccgo_pad1 [4]byte 24999 FpAux uintptr 25000 FxDestroy uintptr 25001 FpEpoTab uintptr 25002 } 25003 25004 type Module = Module1 25005 type NameContext1 = struct { 25006 FpParse uintptr 25007 FpSrcList uintptr 25008 FuNC struct{ FpEList uintptr } 25009 FpNext uintptr 25010 FnRef int32 25011 FnNcErr int32 25012 FncFlags int32 25013 F__ccgo_pad1 [4]byte 25014 FpWinSelect uintptr 25015 } 25016 25017 type NameContext = NameContext1 25018 type OnOrUsing1 = struct { 25019 FpOn uintptr 25020 FpUsing uintptr 25021 } 25022 25023 type OnOrUsing = OnOrUsing1 25024 type Parse1 = struct { 25025 Fdb uintptr 25026 FzErrMsg uintptr 25027 FpVdbe uintptr 25028 Frc int32 25029 FcolNamesSet u8 25030 FcheckSchema u8 25031 Fnested u8 25032 FnTempReg u8 25033 FisMultiWrite u8 25034 FmayAbort u8 25035 FhasCompound u8 25036 FokConstFactor u8 25037 FdisableLookaside u8 25038 FdisableVtab u8 25039 FwithinRJSubrtn u8 25040 F__ccgo_pad1 [1]byte 25041 FnRangeReg int32 25042 FiRangeReg int32 25043 FnErr int32 25044 FnTab int32 25045 FnMem int32 25046 FszOpAlloc int32 25047 FiSelfTab int32 25048 FnLabel int32 25049 FnLabelAlloc int32 25050 F__ccgo_pad2 [4]byte 25051 FaLabel uintptr 25052 FpConstExpr uintptr 25053 FconstraintName Token 25054 FwriteMask yDbMask 25055 FcookieMask yDbMask 25056 FregRowid int32 25057 FregRoot int32 25058 FnMaxArg int32 25059 FnSelect int32 25060 FnTableLock int32 25061 F__ccgo_pad3 [4]byte 25062 FaTableLock uintptr 25063 FpAinc uintptr 25064 FpToplevel uintptr 25065 FpTriggerTab uintptr 25066 FpTriggerPrg uintptr 25067 FpCleanup uintptr 25068 Fu1 struct { 25069 F__ccgo_pad1 [0]uint64 25070 FaddrCrTab int32 25071 F__ccgo_pad2 [4]byte 25072 } 25073 FnQueryLoop u32 25074 Foldmask u32 25075 Fnewmask u32 25076 FeTriggerOp u8 25077 FbReturning u8 25078 FeOrconf u8 25079 FdisableTriggers u8 25080 FaTempReg [8]int32 25081 FpOuterParse uintptr 25082 FsNameToken Token 25083 FsLastToken Token 25084 FnVar ynVar 25085 FiPkSortOrder u8 25086 Fexplain u8 25087 FeParseMode u8 25088 F__ccgo_pad4 [3]byte 25089 FnVtabLock int32 25090 FnHeight int32 25091 FaddrExplain int32 25092 F__ccgo_pad5 [4]byte 25093 FpVList uintptr 25094 FpReprepare uintptr 25095 FzTail uintptr 25096 FpNewTable uintptr 25097 FpNewIndex uintptr 25098 FpNewTrigger uintptr 25099 FzAuthContext uintptr 25100 FsArg Token 25101 FapVtabLock uintptr 25102 FpWith uintptr 25103 FpRename uintptr 25104 } 25105 25106 type Parse = Parse1 25107 type ParseCleanup1 = struct { 25108 FpNext uintptr 25109 FpPtr uintptr 25110 FxCleanup uintptr 25111 } 25112 25113 type ParseCleanup = ParseCleanup1 25114 type PreUpdate1 = struct { 25115 Fv uintptr 25116 FpCsr uintptr 25117 Fop int32 25118 F__ccgo_pad1 [4]byte 25119 FaRecord uintptr 25120 Fkeyinfo KeyInfo 25121 FpUnpacked uintptr 25122 FpNewUnpacked uintptr 25123 FiNewReg int32 25124 FiBlobWrite int32 25125 FiKey1 i64 25126 FiKey2 i64 25127 FaNew uintptr 25128 FpTab uintptr 25129 FpPk uintptr 25130 } 25131 25132 type PrintfArguments1 = struct { 25133 FnArg int32 25134 FnUsed int32 25135 FapArg uintptr 25136 } 25137 25138 type PrintfArguments = PrintfArguments1 25139 type Returning1 = struct { 25140 FpParse uintptr 25141 FpReturnEL uintptr 25142 FretTrig Trigger 25143 FretTStep TriggerStep 25144 FiRetCur int32 25145 FnRetCol int32 25146 FiRetReg int32 25147 F__ccgo_pad1 [4]byte 25148 } 25149 25150 type Returning = Returning1 25151 type Savepoint1 = struct { 25152 FzName uintptr 25153 FnDeferredCons i64 25154 FnDeferredImmCons i64 25155 FpNext uintptr 25156 } 25157 25158 type Savepoint = Savepoint1 25159 type Select1 = struct { 25160 Fop u8 25161 F__ccgo_pad1 [1]byte 25162 FnSelectRow LogEst 25163 FselFlags u32 25164 FiLimit int32 25165 FiOffset int32 25166 FselId u32 25167 FaddrOpenEphm [2]int32 25168 F__ccgo_pad2 [4]byte 25169 FpEList uintptr 25170 FpSrc uintptr 25171 FpWhere uintptr 25172 FpGroupBy uintptr 25173 FpHaving uintptr 25174 FpOrderBy uintptr 25175 FpPrior uintptr 25176 FpNext uintptr 25177 FpLimit uintptr 25178 FpWith uintptr 25179 FpWin uintptr 25180 FpWinDefn uintptr 25181 } 25182 25183 type Select = Select1 25184 type SelectDest1 = struct { 25185 FeDest u8 25186 F__ccgo_pad1 [3]byte 25187 FiSDParm int32 25188 FiSDParm2 int32 25189 FiSdst int32 25190 FnSdst int32 25191 F__ccgo_pad2 [4]byte 25192 FzAffSdst uintptr 25193 FpOrderBy uintptr 25194 } 25195 25196 type SelectDest = SelectDest1 25197 type SrcItem1 = struct { 25198 FpSchema uintptr 25199 FzDatabase uintptr 25200 FzName uintptr 25201 FzAlias uintptr 25202 FpTab uintptr 25203 FpSelect uintptr 25204 FaddrFillSub int32 25205 FregReturn int32 25206 FregResult int32 25207 Ffg struct { 25208 F__ccgo_pad1 [0]uint32 25209 Fjointype u8 25210 F__ccgo_pad2 [3]byte 25211 FnotIndexed uint16 25212 F__ccgo_pad3 [2]byte 25213 } 25214 FiCursor int32 25215 Fu3 struct{ FpOn uintptr } 25216 FcolUsed Bitmask 25217 Fu1 struct{ FzIndexedBy uintptr } 25218 Fu2 struct{ FpIBIndex uintptr } 25219 } 25220 25221 type SrcItem = SrcItem1 25222 type SrcList1 = struct { 25223 FnSrc int32 25224 FnAlloc u32 25225 Fa [1]SrcItem 25226 } 25227 25228 type SrcList = SrcList1 25229 type StrAccum = sqlite3_str1 25230 type Table1 = struct { 25231 FzName uintptr 25232 FaCol uintptr 25233 FpIndex uintptr 25234 FzColAff uintptr 25235 FpCheck uintptr 25236 Ftnum Pgno 25237 FnTabRef u32 25238 FtabFlags u32 25239 FiPKey i16 25240 FnCol i16 25241 FnNVCol i16 25242 FnRowLogEst LogEst 25243 FszTabRow LogEst 25244 FkeyConf u8 25245 FeTabType u8 25246 Fu struct { 25247 Ftab struct { 25248 FaddColOffset int32 25249 F__ccgo_pad1 [4]byte 25250 FpFKey uintptr 25251 FpDfltList uintptr 25252 } 25253 } 25254 FpTrigger uintptr 25255 FpSchema uintptr 25256 } 25257 25258 type Table = Table1 25259 type Token1 = struct { 25260 Fz uintptr 25261 Fn uint32 25262 F__ccgo_pad1 [4]byte 25263 } 25264 25265 type Token = Token1 25266 type Trigger1 = struct { 25267 FzName uintptr 25268 Ftable uintptr 25269 Fop u8 25270 Ftr_tm u8 25271 FbReturning u8 25272 F__ccgo_pad1 [5]byte 25273 FpWhen uintptr 25274 FpColumns uintptr 25275 FpSchema uintptr 25276 FpTabSchema uintptr 25277 Fstep_list uintptr 25278 FpNext uintptr 25279 } 25280 25281 type Trigger = Trigger1 25282 type TriggerPrg1 = struct { 25283 FpTrigger uintptr 25284 FpNext uintptr 25285 FpProgram uintptr 25286 Forconf int32 25287 FaColmask [2]u32 25288 F__ccgo_pad1 [4]byte 25289 } 25290 25291 type TriggerPrg = TriggerPrg1 25292 type TriggerStep1 = struct { 25293 Fop u8 25294 Forconf u8 25295 F__ccgo_pad1 [6]byte 25296 FpTrig uintptr 25297 FpSelect uintptr 25298 FzTarget uintptr 25299 FpFrom uintptr 25300 FpWhere uintptr 25301 FpExprList uintptr 25302 FpIdList uintptr 25303 FpUpsert uintptr 25304 FzSpan uintptr 25305 FpNext uintptr 25306 FpLast uintptr 25307 } 25308 25309 type TriggerStep = TriggerStep1 25310 type UnpackedRecord1 = struct { 25311 FpKeyInfo uintptr 25312 FaMem uintptr 25313 Fu struct{ Fz uintptr } 25314 Fn int32 25315 FnField u16 25316 Fdefault_rc i8 25317 FerrCode u8 25318 Fr1 i8 25319 Fr2 i8 25320 FeqSeen u8 25321 F__ccgo_pad1 [5]byte 25322 } 25323 25324 type UnpackedRecord = UnpackedRecord1 25325 type Upsert1 = struct { 25326 FpUpsertTarget uintptr 25327 FpUpsertTargetWhere uintptr 25328 FpUpsertSet uintptr 25329 FpUpsertWhere uintptr 25330 FpNextUpsert uintptr 25331 FisDoUpdate u8 25332 F__ccgo_pad1 [7]byte 25333 FpToFree uintptr 25334 FpUpsertIdx uintptr 25335 FpUpsertSrc uintptr 25336 FregData int32 25337 FiDataCur int32 25338 FiIdxCur int32 25339 F__ccgo_pad2 [4]byte 25340 } 25341 25342 type Upsert = Upsert1 25343 type VTable1 = struct { 25344 Fdb uintptr 25345 FpMod uintptr 25346 FpVtab uintptr 25347 FnRef int32 25348 FbConstraint u8 25349 FeVtabRisk u8 25350 F__ccgo_pad1 [2]byte 25351 FiSavepoint int32 25352 F__ccgo_pad2 [4]byte 25353 FpNext uintptr 25354 } 25355 25356 type VTable = VTable1 25357 type Walker1 = struct { 25358 FpParse uintptr 25359 FxExprCallback uintptr 25360 FxSelectCallback uintptr 25361 FxSelectCallback2 uintptr 25362 FwalkerDepth int32 25363 FeCode u16 25364 F__ccgo_pad1 [2]byte 25365 Fu struct{ FpNC uintptr } 25366 } 25367 25368 type Walker = Walker1 25369 type Window1 = struct { 25370 FzName uintptr 25371 FzBase uintptr 25372 FpPartition uintptr 25373 FpOrderBy uintptr 25374 FeFrmType u8 25375 FeStart u8 25376 FeEnd u8 25377 FbImplicitFrame u8 25378 FeExclude u8 25379 F__ccgo_pad1 [3]byte 25380 FpStart uintptr 25381 FpEnd uintptr 25382 FppThis uintptr 25383 FpNextWin uintptr 25384 FpFilter uintptr 25385 FpWFunc uintptr 25386 FiEphCsr int32 25387 FregAccum int32 25388 FregResult int32 25389 FcsrApp int32 25390 FregApp int32 25391 FregPart int32 25392 FpOwner uintptr 25393 FnBufferCol int32 25394 FiArgCol int32 25395 FregOne int32 25396 FregStartRowid int32 25397 FregEndRowid int32 25398 FbExprArgs u8 25399 F__ccgo_pad2 [3]byte 25400 } 25401 25402 type Window = Window1 25403 type With1 = struct { 25404 FnCte int32 25405 FbView int32 25406 FpOuter uintptr 25407 Fa [1]Cte 25408 } 25409 25410 type With = With1 25411 25412 type Bitmask = u64 25413 25414 type VList = int32 25415 25416 type Pgno = u32 25417 25418 type PgHdr1 = struct { 25419 FpPage uintptr 25420 FpData uintptr 25421 FpExtra uintptr 25422 FpCache uintptr 25423 FpDirty uintptr 25424 FpPager uintptr 25425 Fpgno Pgno 25426 Fflags u16 25427 FnRef i16 25428 FpDirtyNext uintptr 25429 FpDirtyPrev uintptr 25430 } 25431 25432 type DbPage = PgHdr1 25433 25434 type Btree1 = struct { 25435 Fdb uintptr 25436 FpBt uintptr 25437 FinTrans u8 25438 Fsharable u8 25439 Flocked u8 25440 FhasIncrblobCur u8 25441 FwantToLock int32 25442 FnBackup int32 25443 FiBDataVersion u32 25444 FpNext uintptr 25445 FpPrev uintptr 25446 Flock BtLock 25447 } 25448 25449 type BtCursor1 = struct { 25450 FeState u8 25451 FcurFlags u8 25452 FcurPagerFlags u8 25453 Fhints u8 25454 FskipNext int32 25455 FpBtree uintptr 25456 FaOverflow uintptr 25457 FpKey uintptr 25458 FpBt uintptr 25459 FpNext uintptr 25460 Finfo CellInfo 25461 FnKey i64 25462 FpgnoRoot Pgno 25463 FiPage i8 25464 FcurIntKey u8 25465 Fix u16 25466 FaiIdx [19]u16 25467 F__ccgo_pad1 [2]byte 25468 FpKeyInfo uintptr 25469 FpPage uintptr 25470 FapPage [19]uintptr 25471 } 25472 25473 type BtShared1 = struct { 25474 FpPager uintptr 25475 Fdb uintptr 25476 FpCursor uintptr 25477 FpPage1 uintptr 25478 FopenFlags u8 25479 FautoVacuum u8 25480 FincrVacuum u8 25481 FbDoTruncate u8 25482 FinTransaction u8 25483 Fmax1bytePayload u8 25484 FnReserveWanted u8 25485 F__ccgo_pad1 [1]byte 25486 FbtsFlags u16 25487 FmaxLocal u16 25488 FminLocal u16 25489 FmaxLeaf u16 25490 FminLeaf u16 25491 F__ccgo_pad2 [2]byte 25492 FpageSize u32 25493 FusableSize u32 25494 FnTransaction int32 25495 FnPage u32 25496 F__ccgo_pad3 [4]byte 25497 FpSchema uintptr 25498 FxFreeSchema uintptr 25499 Fmutex uintptr 25500 FpHasContent uintptr 25501 FnRef int32 25502 F__ccgo_pad4 [4]byte 25503 FpNext uintptr 25504 FpLock uintptr 25505 FpWriter uintptr 25506 FpTmpSpace uintptr 25507 FnPreformatSize int32 25508 F__ccgo_pad5 [4]byte 25509 } 25510 25511 type BtreePayload1 = struct { 25512 FpKey uintptr 25513 FnKey sqlite3_int64 25514 FpData uintptr 25515 FaMem uintptr 25516 FnMem u16 25517 F__ccgo_pad1 [2]byte 25518 FnData int32 25519 FnZero int32 25520 F__ccgo_pad2 [4]byte 25521 } 25522 25523 type BtreePayload = BtreePayload1 25524 25525 type Vdbe1 = struct { 25526 Fdb uintptr 25527 FpPrev uintptr 25528 FpNext uintptr 25529 FpParse uintptr 25530 FnVar ynVar 25531 F__ccgo_pad1 [2]byte 25532 FnMem int32 25533 FnCursor int32 25534 FcacheCtr u32 25535 Fpc int32 25536 Frc int32 25537 FnChange i64 25538 FiStatement int32 25539 F__ccgo_pad2 [4]byte 25540 FiCurrentTime i64 25541 FnFkConstraint i64 25542 FnStmtDefCons i64 25543 FnStmtDefImmCons i64 25544 FaMem uintptr 25545 FapArg uintptr 25546 FapCsr uintptr 25547 FaVar uintptr 25548 FaOp uintptr 25549 FnOp int32 25550 FnOpAlloc int32 25551 FaColName uintptr 25552 FpResultSet uintptr 25553 FzErrMsg uintptr 25554 FpVList uintptr 25555 FstartTime i64 25556 FnResColumn u16 25557 FerrorAction u8 25558 FminWriteFileFormat u8 25559 FprepFlags u8 25560 FeVdbeState u8 25561 F__ccgo_pad3 [2]byte 25562 Fexpired uint8 25563 F__ccgo_pad4 [3]byte 25564 FbtreeMask yDbMask 25565 FlockMask yDbMask 25566 FaCounter [9]u32 25567 FzSql uintptr 25568 FpFree uintptr 25569 FpFrame uintptr 25570 FpDelFrame uintptr 25571 FnFrame int32 25572 Fexpmask u32 25573 FpProgram uintptr 25574 FpAuxData uintptr 25575 } 25576 25577 type SubProgram1 = struct { 25578 FaOp uintptr 25579 FnOp int32 25580 FnMem int32 25581 FnCsr int32 25582 F__ccgo_pad1 [4]byte 25583 FaOnce uintptr 25584 Ftoken uintptr 25585 FpNext uintptr 25586 } 25587 25588 type SubProgram = SubProgram1 25589 25590 type VdbeOp1 = struct { 25591 Fopcode u8 25592 Fp4type int8 25593 Fp5 u16 25594 Fp1 int32 25595 Fp2 int32 25596 Fp3 int32 25597 Fp4 struct { 25598 F__ccgo_pad1 [0]uint64 25599 Fi int32 25600 F__ccgo_pad2 [4]byte 25601 } 25602 FzComment uintptr 25603 } 25604 25605 type p4union = struct { 25606 F__ccgo_pad1 [0]uint64 25607 Fi int32 25608 F__ccgo_pad2 [4]byte 25609 } 25610 25611 type VdbeOp = VdbeOp1 25612 25613 type VdbeOpList1 = struct { 25614 Fopcode u8 25615 Fp1 int8 25616 Fp2 int8 25617 Fp3 int8 25618 } 25619 25620 type VdbeOpList = VdbeOpList1 25621 25622 type RecordCompare = uintptr 25623 25624 type PgHdr = PgHdr1 25625 25626 type sqlite3_xauth = uintptr 25627 25628 type sqlite3InitInfo = struct { 25629 FnewTnum Pgno 25630 FiDb u8 25631 Fbusy u8 25632 F__ccgo_pad1 [2]byte 25633 ForphanTrigger uint8 25634 F__ccgo_pad2 [7]byte 25635 FazInit uintptr 25636 } 25637 25638 type sColMap = struct { 25639 FiFrom int32 25640 F__ccgo_pad1 [4]byte 25641 FzCol uintptr 25642 } 25643 25644 type AggInfo_col = struct { 25645 FpTab uintptr 25646 FpCExpr uintptr 25647 FiTable int32 25648 FiMem int32 25649 FiColumn i16 25650 FiSorterColumn i16 25651 F__ccgo_pad1 [4]byte 25652 } 25653 25654 type AggInfo_func = struct { 25655 FpFExpr uintptr 25656 FpFunc uintptr 25657 FiMem int32 25658 FiDistinct int32 25659 FiDistAddr int32 25660 F__ccgo_pad1 [4]byte 25661 } 25662 25663 type ynVar = i16 25664 25665 type ExprList_item = struct { 25666 FpExpr uintptr 25667 FzEName uintptr 25668 Ffg struct { 25669 F__ccgo_pad1 [0]uint32 25670 FsortFlags u8 25671 F__ccgo_pad2 [3]byte 25672 FeEName uint16 25673 F__ccgo_pad3 [2]byte 25674 } 25675 Fu struct { 25676 F__ccgo_pad1 [0]uint32 25677 Fx struct { 25678 FiOrderByCol u16 25679 FiAlias u16 25680 } 25681 } 25682 F__ccgo_pad1 [4]byte 25683 } 25684 25685 type IdList_item = struct { 25686 FzName uintptr 25687 Fu4 struct { 25688 F__ccgo_pad1 [0]uint64 25689 Fidx int32 25690 F__ccgo_pad2 [4]byte 25691 } 25692 } 25693 25694 type yDbMask = uint32 25695 25696 type InitData = struct { 25697 Fdb uintptr 25698 FpzErrMsg uintptr 25699 FiDb int32 25700 Frc int32 25701 FmInitFlags u32 25702 FnInitRow u32 25703 FmxPage Pgno 25704 F__ccgo_pad1 [4]byte 25705 } 25706 25707 type Sqlite3Config = struct { 25708 FbMemstat int32 25709 FbCoreMutex u8 25710 FbFullMutex u8 25711 FbOpenUri u8 25712 FbUseCis u8 25713 FbSmallMalloc u8 25714 FbExtraSchemaChecks u8 25715 F__ccgo_pad1 [2]byte 25716 FmxStrlen int32 25717 FneverCorrupt int32 25718 FszLookaside int32 25719 FnLookaside int32 25720 FnStmtSpill int32 25721 Fm sqlite3_mem_methods 25722 Fmutex sqlite3_mutex_methods 25723 Fpcache2 sqlite3_pcache_methods2 25724 FpHeap uintptr 25725 FnHeap int32 25726 FmnReq int32 25727 FmxReq int32 25728 F__ccgo_pad2 [4]byte 25729 FszMmap sqlite3_int64 25730 FmxMmap sqlite3_int64 25731 FpPage uintptr 25732 FszPage int32 25733 FnPage int32 25734 FmxParserStack int32 25735 FsharedCacheEnabled int32 25736 FszPma u32 25737 FisInit int32 25738 FinProgress int32 25739 FisMutexInit int32 25740 FisMallocInit int32 25741 FisPCacheInit int32 25742 FnRefInitMutex int32 25743 F__ccgo_pad3 [4]byte 25744 FpInitMutex uintptr 25745 FxLog uintptr 25746 FpLogArg uintptr 25747 FmxMemdbSize sqlite3_int64 25748 FxTestCallback uintptr 25749 FbLocaltimeFault int32 25750 F__ccgo_pad4 [4]byte 25751 FxAltLocaltime uintptr 25752 FiOnceResetThreshold int32 25753 FszSorterRef u32 25754 FiPrngSeed uint32 25755 F__ccgo_pad5 [4]byte 25756 } 25757 25758 type BoxGeomCtx1 = struct { 25759 Finterp uintptr 25760 FpScript uintptr 25761 } 25762 25763 type BoxGeomCtx = BoxGeomCtx1 25764 25765 type BoxQueryCtx1 = struct { 25766 Finterp uintptr 25767 FpScript uintptr 25768 } 25769 25770 type BoxQueryCtx = BoxQueryCtx1 25771 25772 func testDelUser(tls *libc.TLS, pCtx uintptr) { 25773 var p uintptr = pCtx 25774 tcl.XTcl_EvalObjEx(tls, (*BoxGeomCtx)(unsafe.Pointer(p)).Finterp, (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript, 0) 25775 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25776 var _objPtr uintptr = (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript 25777 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25778 tcl.XTclFreeObj(tls, _objPtr) 25779 } 25780 } 25781 sqlite3.Xsqlite3_free(tls, p) 25782 } 25783 25784 func invokeTclGeomCb(tls *libc.TLS, zName uintptr, p uintptr, nCoord int32, aCoord uintptr) int32 { 25785 bp := tls.Alloc(96) 25786 defer tls.Free(96) 25787 25788 var rc int32 = SQLITE_OK 25789 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext != 0 { 25790 var pCtx uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext 25791 var interp uintptr = (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp 25792 var pScript uintptr = uintptr(0) 25793 var pParam uintptr = uintptr(0) 25794 var pCoord uintptr = uintptr(0) 25795 var ii int32 25796 var pRes uintptr 25797 25798 pScript = tcl.XTcl_DuplicateObj(tls, (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript) 25799 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 25800 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 25801 25802 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([64]uint8{}))-uint64(1)), bp+16, ts+9889, libc.VaList(bp, (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext)) 25803 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25804 25805 pParam = tcl.XTcl_NewObj(tls) 25806 for ii = 0; ii < (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam; ii++ { 25807 tcl.XTcl_ListObjAppendElement(tls, 25808 interp, pParam, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + uintptr(ii)*8)))) 25809 } 25810 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pParam) 25811 25812 pCoord = tcl.XTcl_NewObj(tls) 25813 for ii = 0; ii < nCoord; ii++ { 25814 tcl.XTcl_ListObjAppendElement(tls, interp, pCoord, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + uintptr(ii)*8)))) 25815 } 25816 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pCoord) 25817 25818 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([64]uint8{}))-uint64(1)), bp+16, ts+9889, libc.VaList(bp+8, p)) 25819 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25820 25821 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 25822 if rc != TCL_OK { 25823 rc = SQLITE_ERROR 25824 } else { 25825 *(*int32)(unsafe.Pointer(bp + 80)) = 0 25826 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 25827 25828 pRes = tcl.XTcl_GetObjResult(tls, interp) 25829 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) != 0 { 25830 return TCL_ERROR 25831 } 25832 if *(*int32)(unsafe.Pointer(bp + 80)) > 0 { 25833 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88))))) 25834 if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9892) { 25835 *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) = 0.0 25836 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam = 1 25837 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9897) { 25838 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 25839 rc = SQLITE_ERROR 25840 } else { 25841 var pBGCtx uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(BoxGeomCtx{}))) 25842 if pBGCtx == uintptr(0) { 25843 rc = SQLITE_NOMEM 25844 } else { 25845 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).Finterp = interp 25846 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, pRes) 25847 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript)).FrefCount++ 25848 tcl.XTcl_ListObjReplace(tls, interp, (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript, 0, 1, 0, uintptr(0)) 25849 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pBGCtx 25850 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testDelUser})) 25851 } 25852 } 25853 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9902) { 25854 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 25855 rc = SQLITE_ERROR 25856 } 25857 } 25858 } 25859 } 25860 } 25861 return rc 25862 } 25863 25864 func box_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 25865 var ii int32 25866 25867 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != nCoord { 25868 invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) 25869 return SQLITE_ERROR 25870 } 25871 if invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) != 0 { 25872 return SQLITE_ERROR 25873 } 25874 25875 for ii = 0; ii < nCoord; ii = ii + 2 { 25876 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)) { 25877 *(*int32)(unsafe.Pointer(pRes)) = 0 25878 return SQLITE_OK 25879 } 25880 } 25881 25882 *(*int32)(unsafe.Pointer(pRes)) = 1 25883 25884 return SQLITE_OK 25885 } 25886 25887 func register_box_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 25888 bp := tls.Alloc(80) 25889 defer tls.Free(80) 25890 25891 var pCtx uintptr 25892 25893 if objc != 3 { 25894 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 25895 return TCL_ERROR 25896 } 25897 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 25898 return TCL_ERROR 25899 } 25900 25901 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(uintptr(0)))) 25902 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp = interp 25903 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 25904 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 25905 25906 sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), ts+9915, *(*uintptr)(unsafe.Pointer(&struct { 25907 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 25908 }{box_geom})), pCtx) 25909 25910 sqlite3.Xsqlite3_snprintf(tls, 64, bp+16, ts+9889, libc.VaList(bp, pCtx)) 25911 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 25912 return TCL_OK 25913 } 25914 25915 func box_query(tls *libc.TLS, pInfo uintptr) int32 { 25916 bp := tls.Alloc(60) 25917 defer tls.Free(60) 25918 25919 *(*[4]uintptr)(unsafe.Pointer(bp)) = [4]uintptr{ts + 5854, ts + 9929, ts + 9936, uintptr(0)} 25920 var pCtx uintptr = (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FpContext 25921 var interp uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp 25922 var pEval uintptr 25923 var pArg uintptr 25924 var pTmp uintptr = uintptr(0) 25925 var rc int32 25926 var ii int32 25927 25928 pEval = tcl.XTcl_DuplicateObj(tls, (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript) 25929 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 25930 pArg = tcl.XTcl_NewObj(tls) 25931 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 25932 25933 pTmp = tcl.XTcl_NewObj(tls) 25934 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25935 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnParam; ii++ { 25936 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaParam + uintptr(ii)*8))) 25937 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25938 } 25939 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9942, -1)) 25940 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25941 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 25942 var _objPtr uintptr = pTmp 25943 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25944 tcl.XTclFreeObj(tls, _objPtr) 25945 } 25946 } 25947 25948 pTmp = tcl.XTcl_NewObj(tls) 25949 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25950 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnCoord; ii++ { 25951 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaCoord + uintptr(ii)*8))) 25952 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25953 } 25954 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9949, -1)) 25955 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25956 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 25957 var _objPtr uintptr = pTmp 25958 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25959 tcl.XTclFreeObj(tls, _objPtr) 25960 } 25961 } 25962 25963 pTmp = tcl.XTcl_NewObj(tls) 25964 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 25965 for ii = 0; ii <= (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel; ii++ { 25966 var p uintptr = tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FanQueue + uintptr(ii)*4)))) 25967 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 25968 } 25969 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9956, -1)) 25970 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 25971 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 25972 var _objPtr uintptr = pTmp 25973 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 25974 tcl.XTclFreeObj(tls, _objPtr) 25975 } 25976 } 25977 25978 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9964, -1)) 25979 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiLevel)) 25980 25981 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9971, -1)) 25982 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel)) 25983 25984 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9979, -1)) 25985 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewWideIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiRowid)) 25986 25987 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9986, -1)) 25988 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewDoubleObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrParentScore)) 25989 25990 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9999, -1)) 25991 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, 25992 tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin)*8)), -1)) 25993 25994 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, pArg) 25995 if tcl.XTcl_EvalObjEx(tls, interp, pEval, 0) != 0 { 25996 rc = SQLITE_ERROR 25997 } else { 25998 rc = SQLITE_OK 25999 } 26000 26001 if rc == SQLITE_OK { 26002 *(*float64)(unsafe.Pointer(bp + 48)) = 0.0 26003 *(*int32)(unsafe.Pointer(bp + 32)) = 0 26004 *(*int32)(unsafe.Pointer(bp + 56)) = 0 26005 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 26006 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 26007 26008 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+32, bp+40) != 0 || 26009 *(*int32)(unsafe.Pointer(bp + 32)) != 2 || 26010 tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)) + 1*8)), bp+48) != 0 || 26011 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)))), bp, int32(unsafe.Sizeof(uintptr(0))), ts+10013, 0, bp+56) != 0 { 26012 rc = SQLITE_ERROR 26013 } else { 26014 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrScore = *(*float64)(unsafe.Pointer(bp + 48)) 26015 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin = *(*int32)(unsafe.Pointer(bp + 56)) 26016 } 26017 } 26018 26019 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 26020 var _objPtr uintptr = pArg 26021 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26022 tcl.XTclFreeObj(tls, _objPtr) 26023 } 26024 } 26025 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 26026 var _objPtr uintptr = pEval 26027 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26028 tcl.XTclFreeObj(tls, _objPtr) 26029 } 26030 } 26031 return rc 26032 } 26033 26034 func box_query_destroy(tls *libc.TLS, p uintptr) { 26035 var pCtx uintptr = p 26036 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26037 var _objPtr uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript 26038 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26039 tcl.XTclFreeObj(tls, _objPtr) 26040 } 26041 } 26042 tcl.XTcl_Free(tls, pCtx) 26043 } 26044 26045 func register_box_query(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26046 bp := tls.Alloc(8) 26047 defer tls.Free(8) 26048 26049 var pCtx uintptr 26050 26051 if objc != 3 { 26052 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 26053 return TCL_ERROR 26054 } 26055 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 26056 return TCL_ERROR 26057 } 26058 26059 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(BoxQueryCtx{}))) 26060 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp = interp 26061 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26062 (*Tcl_Obj)(unsafe.Pointer((*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 26063 26064 sqlite3.Xsqlite3_rtree_query_callback(tls, 26065 *(*uintptr)(unsafe.Pointer(bp)), ts+10019, *(*uintptr)(unsafe.Pointer(&struct { 26066 f func(*libc.TLS, uintptr) int32 26067 }{box_query})), pCtx, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{box_query_destroy}))) 26068 26069 tcl.XTcl_ResetResult(tls, interp) 26070 return TCL_OK 26071 } 26072 26073 func Sqlitetestrtreedoc_Init(tls *libc.TLS, interp uintptr) int32 { 26074 tcl.XTcl_CreateObjCommand(tls, interp, ts+10024, *(*uintptr)(unsafe.Pointer(&struct { 26075 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26076 }{register_box_geom})), uintptr(0), uintptr(0)) 26077 tcl.XTcl_CreateObjCommand(tls, interp, ts+10042, *(*uintptr)(unsafe.Pointer(&struct { 26078 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26079 }{register_box_query})), uintptr(0), uintptr(0)) 26080 return TCL_OK 26081 } 26082 26083 type TestSession1 = struct { 26084 FpSession uintptr 26085 Finterp uintptr 26086 FpFilterScript uintptr 26087 } 26088 26089 type TestSession = TestSession1 26090 26091 type TestStreamInput1 = struct { 26092 FnStream int32 26093 F__ccgo_pad1 [4]byte 26094 FaData uintptr 26095 FnData int32 26096 FiData int32 26097 } 26098 26099 type TestStreamInput = TestStreamInput1 26100 26101 func dbHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 26102 bp := tls.Alloc(88) 26103 defer tls.Free(88) 26104 26105 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 26106 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 26107 return TCL_ERROR 26108 } 26109 26110 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26111 return TCL_OK 26112 } 26113 26114 func sql_exec_changeset(tls *libc.TLS, db uintptr, zSql uintptr, pnChangeset uintptr, ppChangeset uintptr) int32 { 26115 bp := tls.Alloc(8) 26116 defer tls.Free(8) 26117 26118 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 26119 var rc int32 26120 26121 rc = sqlite3.Xsqlite3session_create(tls, db, ts+85, bp) 26122 26123 if rc == SQLITE_OK { 26124 rc = sqlite3.Xsqlite3session_attach(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0)) 26125 } 26126 26127 if rc == SQLITE_OK { 26128 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 26129 } 26130 26131 if rc == SQLITE_OK { 26132 rc = sqlite3.Xsqlite3session_changeset(tls, *(*uintptr)(unsafe.Pointer(bp)), pnChangeset, ppChangeset) 26133 } 26134 26135 sqlite3.Xsqlite3session_delete(tls, *(*uintptr)(unsafe.Pointer(bp))) 26136 26137 return rc 26138 } 26139 26140 func test_sql_exec_changeset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26141 bp := tls.Alloc(40) 26142 defer tls.Free(40) 26143 26144 var zSql uintptr 26145 26146 var rc int32 26147 26148 if objc != 3 { 26149 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 26150 return TCL_ERROR 26151 } 26152 if dbHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 26153 return TCL_ERROR 26154 } 26155 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26156 26157 rc = sql_exec_changeset(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zSql, bp+24, bp+32) 26158 if rc != SQLITE_OK { 26159 tcl.XTcl_ResetResult(tls, interp) 26160 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+10068, 0)) 26161 return TCL_ERROR 26162 } 26163 26164 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 24)))) 26165 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 26166 return TCL_OK 26167 } 26168 26169 func test_tcl_integer(tls *libc.TLS, interp uintptr, zVar uintptr) int32 { 26170 bp := tls.Alloc(4) 26171 defer tls.Free(4) 26172 26173 var pObj uintptr 26174 *(*int32)(unsafe.Pointer(bp)) = 0 26175 var pName uintptr = tcl.XTcl_NewStringObj(tls, zVar, -1) 26176 (*Tcl_Obj)(unsafe.Pointer(pName)).FrefCount++ 26177 pObj = tcl.XTcl_ObjGetVar2(tls, interp, pName, uintptr(0), TCL_GLOBAL_ONLY) 26178 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26179 var _objPtr uintptr = pName 26180 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26181 tcl.XTclFreeObj(tls, _objPtr) 26182 } 26183 } 26184 if pObj != 0 { 26185 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pObj, bp) 26186 } 26187 return *(*int32)(unsafe.Pointer(bp)) 26188 } 26189 26190 func test_session_error(tls *libc.TLS, interp uintptr, rc int32, zErr uintptr) int32 { 26191 bp := tls.Alloc(24) 26192 defer tls.Free(24) 26193 26194 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26195 if zErr != 0 { 26196 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, zErr, 0)) 26197 sqlite3.Xsqlite3_free(tls, zErr) 26198 } 26199 return TCL_ERROR 26200 } 26201 26202 func test_table_filter(tls *libc.TLS, pCtx uintptr, zTbl uintptr) int32 { 26203 bp := tls.Alloc(4) 26204 defer tls.Free(4) 26205 26206 var p uintptr = pCtx 26207 var pEval uintptr 26208 var rc int32 26209 *(*int32)(unsafe.Pointer(bp)) = 0 26210 26211 pEval = tcl.XTcl_DuplicateObj(tls, (*TestSession)(unsafe.Pointer(p)).FpFilterScript) 26212 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26213 rc = tcl.XTcl_ListObjAppendElement(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 26214 if rc == TCL_OK { 26215 rc = tcl.XTcl_EvalObjEx(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 26216 } 26217 if rc == TCL_OK { 26218 rc = tcl.XTcl_GetBooleanFromObj(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestSession)(unsafe.Pointer(p)).Finterp), bp) 26219 } 26220 if rc != TCL_OK { 26221 tcl.XTcl_BackgroundError(tls, (*TestSession)(unsafe.Pointer(p)).Finterp) 26222 } 26223 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26224 var _objPtr uintptr = pEval 26225 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26226 tcl.XTclFreeObj(tls, _objPtr) 26227 } 26228 } 26229 26230 return *(*int32)(unsafe.Pointer(bp)) 26231 } 26232 26233 type TestSessionsBlob1 = struct { 26234 Fp uintptr 26235 Fn int32 26236 F__ccgo_pad1 [4]byte 26237 } 26238 26239 type TestSessionsBlob = TestSessionsBlob1 26240 26241 func testStreamOutput(tls *libc.TLS, pCtx uintptr, pData uintptr, nData int32) int32 { 26242 var pBlob uintptr = pCtx 26243 var pNew uintptr 26244 26245 pNew = sqlite3.Xsqlite3_realloc(tls, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn+nData) 26246 if pNew == uintptr(0) { 26247 return SQLITE_NOMEM 26248 } 26249 (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp = pNew 26250 libc.Xmemcpy(tls, pNew+uintptr((*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn), pData, uint64(nData)) 26251 *(*int32)(unsafe.Pointer(pBlob + 8)) += nData 26252 return SQLITE_OK 26253 } 26254 26255 func test_session_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26256 bp := tls.Alloc(44) 26257 defer tls.Free(44) 26258 26259 var p uintptr = clientData 26260 var pSession uintptr = (*TestSession)(unsafe.Pointer(p)).FpSession 26261 26262 var rc int32 26263 26264 if objc < 2 { 26265 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 26266 return TCL_ERROR 26267 } 26268 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 26269 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub)), int32(unsafe.Sizeof(SessionSubcmd{})), ts+2014, 0, bp) 26270 if rc != TCL_OK { 26271 return rc 26272 } 26273 if objc != 2+aSub[*(*int32)(unsafe.Pointer(bp))].FnArg { 26274 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub[*(*int32)(unsafe.Pointer(bp))].FzMsg) 26275 return TCL_ERROR 26276 } 26277 26278 switch *(*int32)(unsafe.Pointer(bp)) { 26279 case 0: 26280 { 26281 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26282 if int32(*(*uint8)(unsafe.Pointer(zArg))) == '*' && int32(*(*uint8)(unsafe.Pointer(zArg + 1))) == 0 { 26283 zArg = uintptr(0) 26284 } 26285 rc = sqlite3.Xsqlite3session_attach(tls, pSession, zArg) 26286 if rc != SQLITE_OK { 26287 return test_session_error(tls, interp, rc, uintptr(0)) 26288 } 26289 break 26290 26291 } 26292 26293 case 7: 26294 fallthrough 26295 case 1: 26296 { 26297 *(*TestSessionsBlob)(unsafe.Pointer(bp + 8)) = TestSessionsBlob{} 26298 if test_tcl_integer(tls, interp, ts+10098) != 0 { 26299 var pCtx uintptr = bp + 8 26300 if *(*int32)(unsafe.Pointer(bp)) == 7 { 26301 rc = sqlite3.Xsqlite3session_patchset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26302 f func(*libc.TLS, uintptr, uintptr, int32) int32 26303 }{testStreamOutput})), pCtx) 26304 } else { 26305 rc = sqlite3.Xsqlite3session_changeset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26306 f func(*libc.TLS, uintptr, uintptr, int32) int32 26307 }{testStreamOutput})), pCtx) 26308 } 26309 } else { 26310 if *(*int32)(unsafe.Pointer(bp)) == 7 { 26311 rc = sqlite3.Xsqlite3session_patchset(tls, pSession, bp+8+8, bp+8) 26312 } else { 26313 rc = sqlite3.Xsqlite3session_changeset(tls, pSession, bp+8+8, bp+8) 26314 } 26315 } 26316 if rc == SQLITE_OK { 26317 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fn)) 26318 } 26319 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp) 26320 if rc != SQLITE_OK { 26321 return test_session_error(tls, interp, rc, uintptr(0)) 26322 } 26323 break 26324 26325 } 26326 26327 case 2: 26328 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 26329 break 26330 26331 case 3: 26332 { 26333 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 26334 return TCL_ERROR 26335 } 26336 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3session_enable(tls, pSession, *(*int32)(unsafe.Pointer(bp + 24))) 26337 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 24)) != 0))) 26338 break 26339 26340 } 26341 26342 case 4: 26343 { 26344 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+28) != 0 { 26345 return TCL_ERROR 26346 } 26347 *(*int32)(unsafe.Pointer(bp + 28)) = sqlite3.Xsqlite3session_indirect(tls, pSession, *(*int32)(unsafe.Pointer(bp + 28))) 26348 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 28)) != 0))) 26349 break 26350 26351 } 26352 26353 case 5: 26354 { 26355 var val int32 26356 val = sqlite3.Xsqlite3session_isempty(tls, pSession) 26357 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(val != 0))) 26358 break 26359 26360 } 26361 26362 case 6: 26363 { 26364 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 26365 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26366 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 26367 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26368 tcl.XTclFreeObj(tls, _objPtr) 26369 } 26370 } 26371 } 26372 (*TestSession)(unsafe.Pointer(p)).Finterp = interp 26373 (*TestSession)(unsafe.Pointer(p)).FpFilterScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26374 (*Tcl_Obj)(unsafe.Pointer((*TestSession)(unsafe.Pointer(p)).FpFilterScript)).FrefCount++ 26375 sqlite3.Xsqlite3session_table_filter(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26376 f func(*libc.TLS, uintptr, uintptr) int32 26377 }{test_table_filter})), clientData) 26378 break 26379 26380 } 26381 26382 case 8: 26383 { 26384 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 26385 rc = sqlite3.Xsqlite3session_diff(tls, pSession, 26386 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 26387 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), 26388 bp+32) 26389 26390 if rc != 0 { 26391 return test_session_error(tls, interp, rc, *(*uintptr)(unsafe.Pointer(bp + 32))) 26392 } 26393 break 26394 26395 } 26396 26397 case 9: 26398 { 26399 var nMalloc sqlite3_int64 = sqlite3.Xsqlite3session_memory_used(tls, pSession) 26400 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nMalloc)) 26401 break 26402 26403 } 26404 26405 case 10: 26406 { 26407 var nSize sqlite3_int64 = sqlite3.Xsqlite3session_changeset_size(tls, pSession) 26408 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nSize)) 26409 break 26410 26411 } 26412 case 11: 26413 { 26414 var rc int32 26415 26416 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 26417 return TCL_ERROR 26418 } 26419 rc = sqlite3.Xsqlite3session_object_config(tls, 26420 pSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+40) 26421 if rc != SQLITE_OK { 26422 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26423 } else { 26424 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 26425 } 26426 break 26427 26428 } 26429 } 26430 26431 return TCL_OK 26432 } 26433 26434 type SessionSubcmd = struct { 26435 FzSub uintptr 26436 FnArg int32 26437 F__ccgo_pad1 [4]byte 26438 FzMsg uintptr 26439 FiSub int32 26440 F__ccgo_pad2 [4]byte 26441 } 26442 26443 var aSub = [13]SessionSubcmd{ 26444 {FzSub: ts + 10121, FnArg: 1, FzMsg: ts + 1951}, 26445 {FzSub: ts + 10128, FzMsg: ts + 584}, 26446 {FzSub: ts + 10138, FzMsg: ts + 584}, 26447 {FzSub: ts + 10145, FnArg: 1, FzMsg: ts + 10152}, 26448 {FzSub: ts + 10157, FnArg: 1, FzMsg: ts + 10152}, 26449 {FzSub: ts + 10166, FzMsg: ts + 584}, 26450 {FzSub: ts + 10174, FnArg: 1, FzMsg: ts + 10187}, 26451 {FzSub: ts + 10194, FzMsg: ts + 584}, 26452 {FzSub: ts + 10203, FnArg: 2, FzMsg: ts + 10208}, 26453 {FzSub: ts + 10219, FzMsg: ts + 584}, 26454 {FzSub: ts + 10231, FzMsg: ts + 584}, 26455 {FzSub: ts + 10246, FnArg: 1, FzMsg: ts + 2413}, 26456 {}, 26457 } 26458 26459 func test_session_del(tls *libc.TLS, clientData uintptr) { 26460 var p uintptr = clientData 26461 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 26462 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26463 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 26464 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26465 tcl.XTclFreeObj(tls, _objPtr) 26466 } 26467 } 26468 } 26469 sqlite3.Xsqlite3session_delete(tls, (*TestSession)(unsafe.Pointer(p)).FpSession) 26470 tcl.XTcl_Free(tls, p) 26471 } 26472 26473 func test_sqlite3session(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26474 bp := tls.Alloc(92) 26475 defer tls.Free(92) 26476 26477 var db uintptr 26478 26479 var rc int32 26480 var p uintptr 26481 *(*int32)(unsafe.Pointer(bp + 88)) = -1 26482 26483 if objc != 4 { 26484 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10265) 26485 return TCL_ERROR 26486 } 26487 26488 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) { 26489 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 26490 return TCL_ERROR 26491 } 26492 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26493 26494 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestSession{}))) 26495 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TestSession{}))) 26496 rc = sqlite3.Xsqlite3session_create(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), p) 26497 if rc != SQLITE_OK { 26498 tcl.XTcl_Free(tls, p) 26499 return test_session_error(tls, interp, rc, uintptr(0)) 26500 } 26501 26502 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 26503 26504 *(*int32)(unsafe.Pointer(bp + 88)) = 1 26505 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 26506 26507 tcl.XTcl_CreateObjCommand(tls, 26508 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 26509 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26510 }{test_session_cmd})), p, 26511 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_session_del}))) 26512 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26513 return TCL_OK 26514 } 26515 26516 func test_append_value(tls *libc.TLS, pList uintptr, pVal uintptr) { 26517 if pVal == uintptr(0) { 26518 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 26519 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 26520 } else { 26521 var pObj uintptr 26522 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 26523 case SQLITE_NULL: 26524 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10287, 1)) 26525 pObj = tcl.XTcl_NewObj(tls) 26526 break 26527 fallthrough 26528 case SQLITE_INTEGER: 26529 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10289, 1)) 26530 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, pVal)) 26531 break 26532 fallthrough 26533 case SQLITE_FLOAT: 26534 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10291, 1)) 26535 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, pVal)) 26536 break 26537 fallthrough 26538 case SQLITE_TEXT: 26539 { 26540 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 26541 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 26542 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10293, 1)) 26543 pObj = tcl.XTcl_NewStringObj(tls, z, n) 26544 break 26545 26546 } 26547 fallthrough 26548 default: 26549 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+6206, 1)) 26550 pObj = tcl.XTcl_NewByteArrayObj(tls, 26551 sqlite3.Xsqlite3_value_blob(tls, pVal), 26552 sqlite3.Xsqlite3_value_bytes(tls, pVal)) 26553 break 26554 } 26555 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, pObj) 26556 } 26557 } 26558 26559 type TestConflictHandler1 = struct { 26560 Finterp uintptr 26561 FpConflictScript uintptr 26562 FpFilterScript uintptr 26563 } 26564 26565 type TestConflictHandler = TestConflictHandler1 26566 26567 func test_obj_eq_string(tls *libc.TLS, p uintptr, z uintptr) int32 { 26568 bp := tls.Alloc(4) 26569 defer tls.Free(4) 26570 26571 var n int32 26572 26573 var zObj uintptr 26574 26575 n = int32(libc.Xstrlen(tls, z)) 26576 zObj = tcl.XTcl_GetStringFromObj(tls, p, bp) 26577 26578 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == n && (n == 0 || 0 == libc.Xmemcmp(tls, zObj, z, uint64(n)))) 26579 } 26580 26581 func test_filter_handler(tls *libc.TLS, pCtx uintptr, zTab uintptr) int32 { 26582 bp := tls.Alloc(4) 26583 defer tls.Free(4) 26584 26585 var p uintptr = pCtx 26586 *(*int32)(unsafe.Pointer(bp)) = 1 26587 var pEval uintptr 26588 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 26589 26590 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpFilterScript) 26591 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26592 26593 if TCL_OK != tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zTab, -1)) || 26594 TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) || 26595 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 26596 tcl.XTcl_BackgroundError(tls, interp) 26597 } 26598 26599 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26600 var _objPtr uintptr = pEval 26601 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26602 tcl.XTclFreeObj(tls, _objPtr) 26603 } 26604 } 26605 return *(*int32)(unsafe.Pointer(bp)) 26606 } 26607 26608 func test_conflict_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 26609 bp := tls.Alloc(104) 26610 defer tls.Free(104) 26611 26612 var p uintptr = pCtx 26613 var pEval uintptr 26614 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 26615 *(*int32)(unsafe.Pointer(bp + 100)) = 0 26616 26617 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpConflictScript) 26618 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26619 26620 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 26621 26622 if eConf == SQLITE_CHANGESET_FOREIGN_KEY { 26623 sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+16) 26624 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, ts+10295, -1)) 26625 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 26626 } else { 26627 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, 26628 func() uintptr { 26629 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 26630 return ts + 10307 26631 } 26632 return func() uintptr { 26633 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_UPDATE { 26634 return ts + 10314 26635 } 26636 return ts + 10321 26637 }() 26638 }(), -1)) 26639 26640 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp)), -1)) 26641 26642 switch eConf { 26643 case SQLITE_CHANGESET_DATA: 26644 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10328, -1)) 26645 break 26646 fallthrough 26647 case SQLITE_CHANGESET_NOTFOUND: 26648 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10333, -1)) 26649 break 26650 fallthrough 26651 case SQLITE_CHANGESET_CONFLICT: 26652 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10342, -1)) 26653 break 26654 fallthrough 26655 case SQLITE_CHANGESET_CONSTRAINT: 26656 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10351, -1)) 26657 break 26658 } 26659 26660 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 26661 var i int32 26662 var pOld uintptr = tcl.XTcl_NewObj(tls) 26663 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26664 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+24) 26665 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 24))) 26666 } 26667 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pOld) 26668 } 26669 26670 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 26671 var i int32 26672 var pNew uintptr = tcl.XTcl_NewObj(tls) 26673 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26674 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+32) 26675 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 32))) 26676 } 26677 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pNew) 26678 } 26679 26680 if eConf == SQLITE_CHANGESET_DATA || eConf == SQLITE_CHANGESET_CONFLICT { 26681 var i int32 26682 var pConflict uintptr = tcl.XTcl_NewObj(tls) 26683 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26684 var rc int32 26685 _ = rc 26686 26687 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, i, bp+40) 26688 26689 test_append_value(tls, pConflict, *(*uintptr)(unsafe.Pointer(bp + 40))) 26690 } 26691 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pConflict) 26692 } 26693 26694 if eConf == SQLITE_CHANGESET_CONSTRAINT || 26695 eConf == SQLITE_CHANGESET_NOTFOUND { 26696 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, 0, bp+48) 26697 _ = rc 26698 26699 } else { 26700 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, -1, bp+56) 26701 _ = rc 26702 26703 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+56) 26704 26705 } 26706 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_DELETE { 26707 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, 0, bp+64) 26708 _ = rc 26709 26710 } else { 26711 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, -1, bp+72) 26712 _ = rc 26713 26714 rc = sqlite3.Xsqlite3changeset_new(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+72) 26715 26716 } 26717 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 26718 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, 0, bp+80) 26719 _ = rc 26720 26721 } else { 26722 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, -1, bp+88) 26723 _ = rc 26724 26725 rc = sqlite3.Xsqlite3changeset_old(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+88) 26726 26727 } 26728 if eConf != SQLITE_CHANGESET_FOREIGN_KEY { 26729 var rc int32 = sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+96) 26730 _ = rc 26731 26732 } 26733 26734 } 26735 26736 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) { 26737 tcl.XTcl_BackgroundError(tls, interp) 26738 } else { 26739 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 26740 if test_obj_eq_string(tls, pRes, ts+10362) != 0 || test_obj_eq_string(tls, pRes, ts+584) != 0 { 26741 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_OMIT 26742 } else if test_obj_eq_string(tls, pRes, ts+7846) != 0 { 26743 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_REPLACE 26744 } else if test_obj_eq_string(tls, pRes, ts+7840) != 0 { 26745 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_ABORT 26746 } else { 26747 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pRes, bp+100) 26748 } 26749 } 26750 26751 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26752 var _objPtr uintptr = pEval 26753 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26754 tcl.XTclFreeObj(tls, _objPtr) 26755 } 26756 } 26757 return *(*int32)(unsafe.Pointer(bp + 100)) 26758 } 26759 26760 func replace_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 26761 bp := tls.Alloc(32) 26762 defer tls.Free(32) 26763 26764 var i int32 26765 var x int32 = 0 26766 26767 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 26768 26769 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 26770 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26771 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+16) 26772 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 26773 x++ 26774 } 26775 } 26776 26777 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 26778 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 26779 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+24) 26780 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 26781 x++ 26782 } 26783 } 26784 26785 if eConf == SQLITE_CHANGESET_DATA { 26786 return SQLITE_CHANGESET_REPLACE 26787 } 26788 return SQLITE_CHANGESET_OMIT 26789 } 26790 26791 func testStreamInput(tls *libc.TLS, pCtx uintptr, pData uintptr, pnData uintptr) int32 { 26792 var p uintptr = pCtx 26793 var nReq int32 = *(*int32)(unsafe.Pointer(pnData)) 26794 var nRem int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnData - (*TestStreamInput)(unsafe.Pointer(p)).FiData 26795 var nRet int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnStream 26796 26797 var pAlloc uintptr = sqlite3.Xsqlite3_malloc(tls, 10) 26798 if pAlloc == uintptr(0) { 26799 return SQLITE_NOMEM 26800 } 26801 sqlite3.Xsqlite3_free(tls, pAlloc) 26802 26803 if nRet > nReq { 26804 nRet = nReq 26805 } 26806 if nRet > nRem { 26807 nRet = nRem 26808 } 26809 26810 if nRet > 0 { 26811 libc.Xmemcpy(tls, pData, (*TestStreamInput)(unsafe.Pointer(p)).FaData+uintptr((*TestStreamInput)(unsafe.Pointer(p)).FiData), uint64(nRet)) 26812 *(*int32)(unsafe.Pointer(p + 20)) += nRet 26813 } 26814 26815 *(*int32)(unsafe.Pointer(pnData)) = nRet 26816 return SQLITE_OK 26817 } 26818 26819 func testSqlite3changesetApply(tls *libc.TLS, bV2 int32, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26820 bp := tls.Alloc(156) 26821 defer tls.Free(156) 26822 26823 var db uintptr 26824 26825 var rc int32 26826 var pChangeset uintptr 26827 26828 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 26829 *(*int32)(unsafe.Pointer(bp + 152)) = 0 26830 var flags int32 = 0 26831 26832 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 26833 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = test_tcl_integer(tls, interp, ts+10098) 26834 26835 if bV2 != 0 { 26836 if objc > 1 { 26837 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26838 var n int32 = int32(libc.Xstrlen(tls, z1)) 26839 if n > 1 && n <= 12 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10367, z1, n) { 26840 flags = flags | SQLITE_CHANGESETAPPLY_NOSAVEPOINT 26841 objc-- 26842 objv += 8 26843 } 26844 } 26845 if objc > 1 { 26846 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26847 var n int32 = int32(libc.Xstrlen(tls, z1)) 26848 if n > 1 && n <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10380, z1, n) { 26849 flags = flags | SQLITE_CHANGESETAPPLY_INVERT 26850 objc-- 26851 objv += 8 26852 } 26853 } 26854 } 26855 26856 if objc != 4 && objc != 5 { 26857 var zMsg uintptr 26858 if bV2 != 0 { 26859 zMsg = ts + 10388 26860 } else { 26861 zMsg = ts + 10459 26862 } 26863 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zMsg) 26864 return TCL_ERROR 26865 } 26866 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) { 26867 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), 0)) 26868 return TCL_ERROR 26869 } 26870 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData)) 26871 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+112) 26872 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpConflictScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 26873 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpFilterScript = func() uintptr { 26874 if objc == 5 { 26875 return *(*uintptr)(unsafe.Pointer(objv + 4*8)) 26876 } 26877 return uintptr(0) 26878 }() 26879 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).Finterp = interp 26880 26881 if (*TestStreamInput)(unsafe.Pointer(bp+24)).FnStream == 0 { 26882 if bV2 == 0 { 26883 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 26884 func() uintptr { 26885 if objc == 5 { 26886 return *(*uintptr)(unsafe.Pointer(&struct { 26887 f func(*libc.TLS, uintptr, uintptr) int32 26888 }{test_filter_handler})) 26889 } 26890 return uintptr(0) 26891 }(), *(*uintptr)(unsafe.Pointer(&struct { 26892 f func(*libc.TLS, uintptr, int32, uintptr) int32 26893 }{test_conflict_handler})), bp+120) 26894 } else { 26895 rc = sqlite3.Xsqlite3changeset_apply_v2(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 26896 func() uintptr { 26897 if objc == 5 { 26898 return *(*uintptr)(unsafe.Pointer(&struct { 26899 f func(*libc.TLS, uintptr, uintptr) int32 26900 }{test_filter_handler})) 26901 } 26902 return uintptr(0) 26903 }(), *(*uintptr)(unsafe.Pointer(&struct { 26904 f func(*libc.TLS, uintptr, int32, uintptr) int32 26905 }{test_conflict_handler})), bp+120, 26906 bp+144, bp+152, flags) 26907 } 26908 } else { 26909 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = pChangeset 26910 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnData = *(*int32)(unsafe.Pointer(bp + 112)) 26911 if bV2 == 0 { 26912 rc = sqlite3.Xsqlite3changeset_apply_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 26913 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26914 }{testStreamInput})), bp+24, 26915 func() uintptr { 26916 if objc == 5 { 26917 return *(*uintptr)(unsafe.Pointer(&struct { 26918 f func(*libc.TLS, uintptr, uintptr) int32 26919 }{test_filter_handler})) 26920 } 26921 return uintptr(0) 26922 }(), 26923 *(*uintptr)(unsafe.Pointer(&struct { 26924 f func(*libc.TLS, uintptr, int32, uintptr) int32 26925 }{test_conflict_handler})), bp+120) 26926 } else { 26927 rc = sqlite3.Xsqlite3changeset_apply_v2_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 26928 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 26929 }{testStreamInput})), bp+24, 26930 func() uintptr { 26931 if objc == 5 { 26932 return *(*uintptr)(unsafe.Pointer(&struct { 26933 f func(*libc.TLS, uintptr, uintptr) int32 26934 }{test_filter_handler})) 26935 } 26936 return uintptr(0) 26937 }(), 26938 *(*uintptr)(unsafe.Pointer(&struct { 26939 f func(*libc.TLS, uintptr, int32, uintptr) int32 26940 }{test_conflict_handler})), bp+120, 26941 bp+144, bp+152, flags) 26942 } 26943 } 26944 26945 if rc != SQLITE_OK { 26946 return test_session_error(tls, interp, rc, uintptr(0)) 26947 } else { 26948 tcl.XTcl_ResetResult(tls, interp) 26949 if bV2 != 0 && *(*uintptr)(unsafe.Pointer(bp + 144)) != 0 { 26950 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 144)), *(*int32)(unsafe.Pointer(bp + 152)))) 26951 } 26952 } 26953 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 144))) 26954 return TCL_OK 26955 } 26956 26957 func test_sqlite3changeset_apply(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26958 return testSqlite3changesetApply(tls, 0, clientData, interp, objc, objv) 26959 } 26960 26961 func test_sqlite3changeset_apply_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26962 return testSqlite3changesetApply(tls, 1, clientData, interp, objc, objv) 26963 } 26964 26965 func test_sqlite3changeset_apply_replace_all(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26966 bp := tls.Alloc(92) 26967 defer tls.Free(92) 26968 26969 var db uintptr 26970 26971 var rc int32 26972 var pChangeset uintptr 26973 26974 if objc != 3 { 26975 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10504) 26976 return TCL_ERROR 26977 } 26978 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) { 26979 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 26980 return TCL_ERROR 26981 } 26982 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26983 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+88) 26984 26985 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 88)), pChangeset, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 26986 f func(*libc.TLS, uintptr, int32, uintptr) int32 26987 }{replace_handler})), uintptr(0)) 26988 if rc != SQLITE_OK { 26989 return test_session_error(tls, interp, rc, uintptr(0)) 26990 } 26991 tcl.XTcl_ResetResult(tls, interp) 26992 return TCL_OK 26993 } 26994 26995 func test_sqlite3changeset_invert(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26996 bp := tls.Alloc(40) 26997 defer tls.Free(40) 26998 26999 var rc int32 27000 27001 if objc != 2 { 27002 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10517) 27003 return TCL_ERROR 27004 } 27005 27006 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27007 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestSessionsBlob{}))) 27008 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27009 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 27010 27011 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream != 0 { 27012 rc = sqlite3.Xsqlite3changeset_invert_strm(tls, 27013 *(*uintptr)(unsafe.Pointer(&struct { 27014 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27015 }{testStreamInput})), bp, *(*uintptr)(unsafe.Pointer(&struct { 27016 f func(*libc.TLS, uintptr, uintptr, int32) int32 27017 }{testStreamOutput})), bp+24) 27018 } else { 27019 rc = sqlite3.Xsqlite3changeset_invert(tls, (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, bp+24+8, bp+24) 27020 } 27021 if rc != SQLITE_OK { 27022 rc = test_session_error(tls, interp, rc, uintptr(0)) 27023 } else { 27024 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fn)) 27025 } 27026 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp) 27027 return rc 27028 } 27029 27030 func test_sqlite3changeset_concat(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27031 bp := tls.Alloc(64) 27032 defer tls.Free(64) 27033 27034 var rc int32 27035 27036 *(*TestSessionsBlob)(unsafe.Pointer(bp + 48)) = TestSessionsBlob{} 27037 27038 if objc != 3 { 27039 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10527) 27040 return TCL_ERROR 27041 } 27042 27043 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27044 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27045 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 27046 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24+16) 27047 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27048 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = (*TestStreamInput)(unsafe.Pointer(bp)).FnStream 27049 27050 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream > 0 { 27051 rc = sqlite3.Xsqlite3changeset_concat_strm(tls, 27052 *(*uintptr)(unsafe.Pointer(&struct { 27053 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27054 }{testStreamInput})), bp, 27055 *(*uintptr)(unsafe.Pointer(&struct { 27056 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27057 }{testStreamInput})), bp+24, 27058 *(*uintptr)(unsafe.Pointer(&struct { 27059 f func(*libc.TLS, uintptr, uintptr, int32) int32 27060 }{testStreamOutput})), bp+48) 27061 } else { 27062 rc = sqlite3.Xsqlite3changeset_concat(tls, 27063 (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, (*TestStreamInput)(unsafe.Pointer(bp+24)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+24)).FaData, bp+48+8, bp+48) 27064 } 27065 27066 if rc != SQLITE_OK { 27067 rc = test_session_error(tls, interp, rc, uintptr(0)) 27068 } else { 27069 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fn)) 27070 } 27071 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp) 27072 return rc 27073 } 27074 27075 func test_sqlite3session_foreach(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27076 bp := tls.Alloc(104) 27077 defer tls.Free(104) 27078 27079 var pChangeset uintptr 27080 27081 var rc int32 27082 var pVarname uintptr 27083 var pCS uintptr 27084 var pScript uintptr 27085 var isCheckNext int32 = 0 27086 var isInvert int32 = 0 27087 27088 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27089 27090 for objc > 1 { 27091 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27092 var nOpt int32 = int32(libc.Xstrlen(tls, zOpt)) 27093 if int32(*(*uint8)(unsafe.Pointer(zOpt))) != '-' { 27094 break 27095 } 27096 if nOpt <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10380, nOpt) { 27097 isInvert = 1 27098 } else if nOpt <= 5 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10538, nOpt) { 27099 isCheckNext = 1 27100 } else { 27101 break 27102 } 27103 objv += 8 27104 objc-- 27105 } 27106 if objc != 4 { 27107 tcl.XTcl_WrongNumArgs(tls, 27108 interp, 1, objv, ts+10544) 27109 return TCL_ERROR 27110 } 27111 27112 pVarname = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 27113 pCS = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 27114 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 27115 27116 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, pCS, bp+24) 27117 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27118 if isInvert != 0 { 27119 var f int32 = SQLITE_CHANGESETSTART_INVERT 27120 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 27121 rc = sqlite3.Xsqlite3changeset_start_v2(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset, f) 27122 } else { 27123 var pCtx uintptr = bp 27124 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 27125 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 27126 rc = sqlite3.Xsqlite3changeset_start_v2_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 27127 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27128 }{testStreamInput})), pCtx, f) 27129 } 27130 } else { 27131 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 27132 rc = sqlite3.Xsqlite3changeset_start(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset) 27133 } else { 27134 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 27135 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 27136 rc = sqlite3.Xsqlite3changeset_start_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 27137 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27138 }{testStreamInput})), bp) 27139 } 27140 } 27141 if rc != SQLITE_OK { 27142 return test_session_error(tls, interp, rc, uintptr(0)) 27143 } 27144 27145 for SQLITE_ROW == sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) { 27146 var pVar uintptr 27147 var pOld uintptr 27148 var pNew uintptr 27149 27150 var zPK uintptr 27151 27152 var i int32 27153 27154 if SQLITE_MISUSE != sqlite3.Xsqlite3changeset_fk_conflicts(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+40) { 27155 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27156 return TCL_ERROR 27157 } 27158 27159 sqlite3.Xsqlite3changeset_op(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+48, bp+56, bp+60, bp+64) 27160 pVar = tcl.XTcl_NewObj(tls) 27161 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, 27162 func() uintptr { 27163 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_INSERT { 27164 return ts + 10307 27165 } 27166 return func() uintptr { 27167 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_UPDATE { 27168 return ts + 10314 27169 } 27170 return ts + 10321 27171 }() 27172 }(), -1)) 27173 27174 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), -1)) 27175 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 64)) != 0))) 27176 27177 zPK = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 56))+1)) 27178 libc.Xmemset(tls, zPK, 0, uint64(*(*int32)(unsafe.Pointer(bp + 56))+1)) 27179 sqlite3.Xsqlite3changeset_pk(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+72, bp+80) 27180 27181 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 27182 *(*uint8)(unsafe.Pointer(zPK + uintptr(i))) = func() uint8 { 27183 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)) + uintptr(i))) != 0 { 27184 return uint8('X') 27185 } 27186 return uint8('.') 27187 }() 27188 } 27189 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, zPK, -1)) 27190 tcl.XTcl_Free(tls, zPK) 27191 27192 pOld = tcl.XTcl_NewObj(tls) 27193 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_INSERT { 27194 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 27195 sqlite3.Xsqlite3changeset_old(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+88) 27196 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 88))) 27197 } 27198 } 27199 pNew = tcl.XTcl_NewObj(tls) 27200 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_DELETE { 27201 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 27202 sqlite3.Xsqlite3changeset_new(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+96) 27203 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 96))) 27204 } 27205 } 27206 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pOld) 27207 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pNew) 27208 27209 tcl.XTcl_ObjSetVar2(tls, interp, pVarname, uintptr(0), pVar, 0) 27210 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 27211 if rc != TCL_OK && rc != TCL_CONTINUE { 27212 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27213 if rc == TCL_BREAK { 27214 return TCL_OK 27215 } 27216 return rc 27217 } 27218 } 27219 27220 if isCheckNext != 0 { 27221 var rc2 int32 = sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27222 _ = rc2 27223 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27224 27225 } else { 27226 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27227 } 27228 if rc != SQLITE_OK { 27229 return test_session_error(tls, interp, rc, uintptr(0)) 27230 } 27231 27232 return TCL_OK 27233 } 27234 27235 func test_rebaser_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27236 bp := tls.Alloc(48) 27237 defer tls.Free(48) 27238 27239 var p uintptr = clientData 27240 27241 var rc int32 27242 27243 if objc < 2 { 27244 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 27245 return TCL_ERROR 27246 } 27247 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 27248 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub1)), int32(unsafe.Sizeof(RebaseSubcmd{})), ts+2014, 0, bp) 27249 if rc != TCL_OK { 27250 return rc 27251 } 27252 if objc != 2+aSub1[*(*int32)(unsafe.Pointer(bp))].FnArg { 27253 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub1[*(*int32)(unsafe.Pointer(bp))].FzMsg) 27254 return TCL_ERROR 27255 } 27256 27257 switch *(*int32)(unsafe.Pointer(bp)) { 27258 case 0: 27259 { 27260 *(*int32)(unsafe.Pointer(bp + 4)) = 0 27261 var pRebase uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 27262 rc = sqlite3.Xsqlite3rebaser_configure(tls, p, *(*int32)(unsafe.Pointer(bp + 4)), pRebase) 27263 break 27264 27265 } 27266 27267 case 1: 27268 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 27269 break 27270 27271 default: 27272 { 27273 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27274 libc.Xmemset(tls, bp+32, 0, uint64(unsafe.Sizeof(TestSessionsBlob{}))) 27275 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8+16) 27276 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27277 27278 if (*TestStreamInput)(unsafe.Pointer(bp+8)).FnStream != 0 { 27279 rc = sqlite3.Xsqlite3rebaser_rebase_strm(tls, p, 27280 *(*uintptr)(unsafe.Pointer(&struct { 27281 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27282 }{testStreamInput})), bp+8, 27283 *(*uintptr)(unsafe.Pointer(&struct { 27284 f func(*libc.TLS, uintptr, uintptr, int32) int32 27285 }{testStreamOutput})), bp+32) 27286 } else { 27287 rc = sqlite3.Xsqlite3rebaser_rebase(tls, p, (*TestStreamInput)(unsafe.Pointer(bp+8)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+8)).FaData, bp+32+8, bp+32) 27288 } 27289 27290 if rc == SQLITE_OK { 27291 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fn)) 27292 } 27293 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp) 27294 break 27295 27296 } 27297 } 27298 27299 if rc != SQLITE_OK { 27300 return test_session_error(tls, interp, rc, uintptr(0)) 27301 } 27302 return TCL_OK 27303 } 27304 27305 type RebaseSubcmd = struct { 27306 FzSub uintptr 27307 FnArg int32 27308 F__ccgo_pad1 [4]byte 27309 FzMsg uintptr 27310 FiSub int32 27311 F__ccgo_pad2 [4]byte 27312 } 27313 27314 var aSub1 = [4]RebaseSubcmd{ 27315 {FzSub: ts + 10587, FnArg: 1, FzMsg: ts + 10597}, 27316 {FzSub: ts + 10138, FzMsg: ts + 584}, 27317 {FzSub: ts + 10609, FnArg: 1, FzMsg: ts + 10517}, 27318 {}, 27319 } 27320 27321 func test_rebaser_del(tls *libc.TLS, clientData uintptr) { 27322 var p uintptr = clientData 27323 sqlite3.Xsqlite3rebaser_delete(tls, p) 27324 } 27325 27326 func test_sqlite3rebaser_create(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27327 bp := tls.Alloc(8) 27328 defer tls.Free(8) 27329 27330 var rc int32 27331 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 27332 if objc != 2 { 27333 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 27334 return SQLITE_ERROR 27335 } 27336 27337 rc = sqlite3.Xsqlite3rebaser_create(tls, bp) 27338 if rc != SQLITE_OK { 27339 return test_session_error(tls, interp, rc, uintptr(0)) 27340 } 27341 27342 tcl.XTcl_CreateObjCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 27343 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27344 }{test_rebaser_cmd})), 27345 *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_rebaser_del}))) 27346 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27347 return TCL_OK 27348 } 27349 27350 func test_sqlite3session_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27351 bp := tls.Alloc(8) 27352 defer tls.Free(8) 27353 27354 var rc int32 27355 27356 if objc != 3 { 27357 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10616) 27358 return SQLITE_ERROR 27359 } 27360 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 27361 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub2)), int32(unsafe.Sizeof(ConfigOpt{})), ts+2014, 0, bp) 27362 if rc != TCL_OK { 27363 return rc 27364 } 27365 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 27366 return TCL_ERROR 27367 } 27368 27369 rc = sqlite3.Xsqlite3session_config(tls, aSub2[*(*int32)(unsafe.Pointer(bp))].Fop, bp+4) 27370 if rc != SQLITE_OK { 27371 return test_session_error(tls, interp, rc, uintptr(0)) 27372 } 27373 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 27374 return TCL_OK 27375 } 27376 27377 type ConfigOpt = struct { 27378 FzSub uintptr 27379 Fop int32 27380 F__ccgo_pad1 [4]byte 27381 } 27382 27383 var aSub2 = [3]ConfigOpt{ 27384 {FzSub: ts + 10625, Fop: SQLITE_SESSION_CONFIG_STRMSIZE}, 27385 {FzSub: ts + 2758}, 27386 {}, 27387 } 27388 27389 func TestSession_Init(tls *libc.TLS, interp uintptr) int32 { 27390 bp := tls.Alloc(160) 27391 defer tls.Free(160) 27392 27393 *(*[10]struct { 27394 FzCmd uintptr 27395 FxProc uintptr 27396 })(unsafe.Pointer(bp)) = [10]struct { 27397 FzCmd uintptr 27398 FxProc uintptr 27399 }{ 27400 {FzCmd: ts + 10635, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27401 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27402 }{test_sqlite3session}))}, 27403 {FzCmd: ts + 10650, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27404 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27405 }{test_sqlite3session_foreach}))}, 27406 {FzCmd: ts + 10673, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27407 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27408 }{test_sqlite3changeset_invert}))}, 27409 {FzCmd: ts + 10697, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27410 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27411 }{test_sqlite3changeset_concat}))}, 27412 {FzCmd: ts + 10721, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27413 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27414 }{test_sqlite3changeset_apply}))}, 27415 {FzCmd: ts + 10744, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27416 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27417 }{test_sqlite3changeset_apply_v2}))}, 27418 {FzCmd: ts + 10770, 27419 FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27420 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27421 }{test_sqlite3changeset_apply_replace_all}))}, 27422 {FzCmd: ts + 10805, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27423 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27424 }{test_sql_exec_changeset}))}, 27425 {FzCmd: ts + 10824, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27426 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27427 }{test_sqlite3rebaser_create}))}, 27428 {FzCmd: ts + 10846, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27429 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27430 }{test_sqlite3session_config}))}, 27431 } 27432 var i int32 27433 27434 for i = 0; uint64(i) < uint64(unsafe.Sizeof([10]struct { 27435 FzCmd uintptr 27436 FxProc uintptr 27437 }{}))/uint64(unsafe.Sizeof(struct { 27438 FzCmd uintptr 27439 FxProc uintptr 27440 }{})); i++ { 27441 var p uintptr = bp + uintptr(i)*16 27442 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 27443 FzCmd uintptr 27444 FxProc uintptr 27445 })(unsafe.Pointer(p)).FzCmd, (*struct { 27446 FzCmd uintptr 27447 FxProc uintptr 27448 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 27449 } 27450 27451 return TCL_OK 27452 } 27453 27454 type sig_atomic_t = int32 27455 27456 type sigval = struct { 27457 F__ccgo_pad1 [0]uint64 27458 Fsival_int int32 27459 F__ccgo_pad2 [4]byte 27460 } 27461 27462 type siginfo_t = struct { 27463 Fsi_signo int32 27464 Fsi_errno int32 27465 Fsi_code int32 27466 F__pad0 int32 27467 F_sifields struct { 27468 F__ccgo_pad1 [0]uint64 27469 F_pad [28]int32 27470 } 27471 } 27472 27473 type sigval_t = sigval 27474 27475 type sigevent_t = sigevent 27476 27477 type sig_t = uintptr 27478 27479 type sigaction = struct { 27480 F__sigaction_handler struct{ Fsa_handler uintptr } 27481 Fsa_mask struct{ F__val [16]uint64 } 27482 Fsa_flags int32 27483 F__ccgo_pad1 [4]byte 27484 Fsa_restorer uintptr 27485 } 27486 27487 type sigcontext = struct { 27488 Ffault_address uint64 27489 Fregs [31]uint64 27490 Fsp uint64 27491 Fpc uint64 27492 Fpstate uint64 27493 F__reserved [4096]uint8 27494 } 27495 27496 type _aarch64_ctx = struct { 27497 Fmagic uint32 27498 Fsize uint32 27499 } 27500 27501 type fpsimd_context = struct { 27502 Fhead struct { 27503 Fmagic uint32 27504 Fsize uint32 27505 } 27506 Ffpsr uint32 27507 Ffpcr uint32 27508 Fvregs [32]struct { 27509 Flo uint64 27510 Fhi uint64 27511 } 27512 } 27513 27514 type esr_context = struct { 27515 Fhead struct { 27516 Fmagic uint32 27517 Fsize uint32 27518 } 27519 Fesr uint64 27520 } 27521 27522 type extra_context = struct { 27523 Fhead struct { 27524 Fmagic uint32 27525 Fsize uint32 27526 } 27527 Fdatap uint64 27528 Fsize uint32 27529 F__reserved [3]uint32 27530 } 27531 27532 type sve_context = struct { 27533 Fhead struct { 27534 Fmagic uint32 27535 Fsize uint32 27536 } 27537 Fvl uint16 27538 F__reserved [3]uint16 27539 } 27540 27541 type stack_t = struct { 27542 Fss_sp uintptr 27543 Fss_flags int32 27544 F__ccgo_pad1 [4]byte 27545 Fss_size size_t 27546 } 27547 27548 type user_regs_struct = struct { 27549 Fregs [31]uint64 27550 Fsp uint64 27551 Fpc uint64 27552 Fpstate uint64 27553 } 27554 27555 type user_fpsimd_struct = struct { 27556 Fvregs [32]struct { 27557 Flo uint64 27558 Fhi uint64 27559 } 27560 Ffpsr uint32 27561 Ffpcr uint32 27562 } 27563 27564 type elf_greg_t = uint64 27565 27566 type elf_gregset_t = [34]elf_greg_t 27567 27568 type elf_fpregset_t = user_fpsimd_struct 27569 27570 type elf_siginfo = struct { 27571 Fsi_signo int32 27572 Fsi_code int32 27573 Fsi_errno int32 27574 } 27575 27576 type elf_prstatus = struct { 27577 Fpr_info struct { 27578 Fsi_signo int32 27579 Fsi_code int32 27580 Fsi_errno int32 27581 } 27582 Fpr_cursig int16 27583 F__ccgo_pad1 [2]byte 27584 Fpr_sigpend uint64 27585 Fpr_sighold uint64 27586 Fpr_pid int32 27587 Fpr_ppid int32 27588 Fpr_pgrp int32 27589 Fpr_sid int32 27590 Fpr_utime struct { 27591 Ftv_sec int64 27592 Ftv_usec int64 27593 } 27594 Fpr_stime struct { 27595 Ftv_sec int64 27596 Ftv_usec int64 27597 } 27598 Fpr_cutime struct { 27599 Ftv_sec int64 27600 Ftv_usec int64 27601 } 27602 Fpr_cstime struct { 27603 Ftv_sec int64 27604 Ftv_usec int64 27605 } 27606 Fpr_reg elf_gregset_t 27607 Fpr_fpvalid int32 27608 F__ccgo_pad2 [4]byte 27609 } 27610 27611 type elf_prpsinfo = struct { 27612 Fpr_state uint8 27613 Fpr_sname uint8 27614 Fpr_zomb uint8 27615 Fpr_nice uint8 27616 F__ccgo_pad1 [4]byte 27617 Fpr_flag uint64 27618 Fpr_uid uint32 27619 Fpr_gid uint32 27620 Fpr_pid int32 27621 Fpr_ppid int32 27622 Fpr_pgrp int32 27623 Fpr_sid int32 27624 Fpr_fname [16]uint8 27625 Fpr_psargs [80]uint8 27626 } 27627 27628 type psaddr_t = uintptr 27629 27630 type prgregset_t = [34]elf_greg_t 27631 type prfpregset_t = user_fpsimd_struct 27632 27633 type lwpid_t = int32 27634 27635 type prstatus_t = elf_prstatus 27636 type prpsinfo_t = elf_prpsinfo 27637 27638 type greg_t = elf_greg_t 27639 27640 type gregset_t = elf_gregset_t 27641 27642 type fpregset_t = elf_fpregset_t 27643 27644 type mcontext_t = struct { 27645 Ffault_address uint64 27646 Fregs [31]uint64 27647 Fsp uint64 27648 Fpc uint64 27649 Fpstate uint64 27650 F__reserved [4096]uint8 27651 } 27652 27653 type ucontext_t1 = struct { 27654 Fuc_flags uint64 27655 Fuc_link uintptr 27656 Fuc_stack stack_t 27657 Fuc_sigmask sigset_t 27658 Fuc_mcontext mcontext_t 27659 } 27660 27661 type ucontext_t = ucontext_t1 27662 27663 type sigstack = struct { 27664 Fss_sp uintptr 27665 Fss_onstack int32 27666 F__ccgo_pad1 [4]byte 27667 } 27668 27669 type SqliteDb = struct { 27670 Fdb uintptr 27671 Finterp uintptr 27672 FzBusy uintptr 27673 FzCommit uintptr 27674 FzTrace uintptr 27675 FzTraceV2 uintptr 27676 FzProfile uintptr 27677 FzProgress uintptr 27678 FzBindFallback uintptr 27679 FzAuth uintptr 27680 FdisableAuth int32 27681 F__ccgo_pad1 [4]byte 27682 FzNull uintptr 27683 FpFunc uintptr 27684 FpUpdateHook uintptr 27685 FpPreUpdateHook uintptr 27686 FpRollbackHook uintptr 27687 FpWalHook uintptr 27688 FpUnlockNotify uintptr 27689 FpCollate uintptr 27690 Frc int32 27691 F__ccgo_pad2 [4]byte 27692 FpCollateNeeded uintptr 27693 FstmtList uintptr 27694 FstmtLast uintptr 27695 FmaxStmt int32 27696 FnStmt int32 27697 FpIncrblob uintptr 27698 FnStep int32 27699 FnSort int32 27700 FnIndex int32 27701 FnVMStep int32 27702 FnTransaction int32 27703 FopenFlags int32 27704 FnRef int32 27705 FbLegacyPrepare int32 27706 } 27707 27708 type SqlFunc1 = struct { 27709 Finterp uintptr 27710 FpScript uintptr 27711 FpDb uintptr 27712 FuseEvalObjv int32 27713 FeType int32 27714 FzName uintptr 27715 FpNext uintptr 27716 } 27717 27718 type SqlFunc = SqlFunc1 27719 27720 type SqlCollate1 = struct { 27721 Finterp uintptr 27722 FzScript uintptr 27723 FpNext uintptr 27724 } 27725 27726 type SqlCollate = SqlCollate1 27727 27728 type SqlPreparedStmt1 = struct { 27729 FpNext uintptr 27730 FpPrev uintptr 27731 FpStmt uintptr 27732 FnSql int32 27733 F__ccgo_pad1 [4]byte 27734 FzSql uintptr 27735 FnParm int32 27736 F__ccgo_pad2 [4]byte 27737 FapParm uintptr 27738 } 27739 27740 type SqlPreparedStmt = SqlPreparedStmt1 27741 27742 type IncrblobChannel1 = struct { 27743 FpBlob uintptr 27744 FpDb uintptr 27745 FiSeek int32 27746 F__ccgo_pad1 [4]byte 27747 Fchannel Tcl_Channel 27748 FpNext uintptr 27749 FpPrev uintptr 27750 } 27751 27752 type IncrblobChannel = IncrblobChannel1 27753 27754 func strlen30(tls *libc.TLS, z uintptr) int32 { 27755 var z2 uintptr = z 27756 for *(*uint8)(unsafe.Pointer(z2)) != 0 { 27757 z2++ 27758 } 27759 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 27760 } 27761 27762 func closeIncrblobChannels(tls *libc.TLS, pDb uintptr) { 27763 var p uintptr 27764 var pNext uintptr 27765 27766 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob; p != 0; p = pNext { 27767 pNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27768 27769 tcl.XTcl_UnregisterChannel(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27770 } 27771 } 27772 27773 func incrblobClose(tls *libc.TLS, instanceData ClientData, interp uintptr) int32 { 27774 var p uintptr = instanceData 27775 var rc int32 = sqlite3.Xsqlite3_blob_close(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27776 var db uintptr = (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).Fdb 27777 27778 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27779 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev 27780 } 27781 if (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev != 0 { 27782 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpPrev)).FpNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27783 } 27784 if (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob == p { 27785 (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 27786 } 27787 27788 tcl.XTcl_Free(tls, p) 27789 27790 if rc != SQLITE_OK { 27791 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(1)) 27792 return TCL_ERROR 27793 } 27794 return TCL_OK 27795 } 27796 27797 func incrblobInput(tls *libc.TLS, instanceData ClientData, buf uintptr, bufSize int32, errorCodePtr uintptr) int32 { 27798 var p uintptr = instanceData 27799 var nRead int32 = bufSize 27800 var nBlob int32 27801 var rc int32 27802 27803 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27804 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nRead > nBlob { 27805 nRead = nBlob - (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27806 } 27807 if nRead <= 0 { 27808 return 0 27809 } 27810 27811 rc = sqlite3.Xsqlite3_blob_read(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nRead, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27812 if rc != SQLITE_OK { 27813 *(*int32)(unsafe.Pointer(errorCodePtr)) = rc 27814 return -1 27815 } 27816 27817 *(*int32)(unsafe.Pointer(p + 16)) += nRead 27818 return nRead 27819 } 27820 27821 func incrblobOutput(tls *libc.TLS, instanceData ClientData, buf uintptr, toWrite int32, errorCodePtr uintptr) int32 { 27822 var p uintptr = instanceData 27823 var nWrite int32 = toWrite 27824 var nBlob int32 27825 var rc int32 27826 27827 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 27828 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nWrite > nBlob { 27829 *(*int32)(unsafe.Pointer(errorCodePtr)) = EINVAL 27830 return -1 27831 } 27832 if nWrite <= 0 { 27833 return 0 27834 } 27835 27836 rc = sqlite3.Xsqlite3_blob_write(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nWrite, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 27837 if rc != SQLITE_OK { 27838 *(*int32)(unsafe.Pointer(errorCodePtr)) = EIO 27839 return -1 27840 } 27841 27842 *(*int32)(unsafe.Pointer(p + 16)) += nWrite 27843 return nWrite 27844 } 27845 27846 func incrblobSeek(tls *libc.TLS, instanceData ClientData, offset int64, seekMode int32, errorCodePtr uintptr) int32 { 27847 var p uintptr = instanceData 27848 27849 switch seekMode { 27850 case SEEK_SET: 27851 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(offset) 27852 break 27853 case SEEK_CUR: 27854 *(*int32)(unsafe.Pointer(p + 16)) += int32(offset) 27855 break 27856 case SEEK_END: 27857 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(int64(sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob)) + offset) 27858 break 27859 27860 default: 27861 } 27862 27863 return (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 27864 } 27865 27866 func incrblobWatch(tls *libc.TLS, instanceData ClientData, mode int32) { 27867 } 27868 27869 func incrblobHandle(tls *libc.TLS, instanceData ClientData, dir int32, hPtr uintptr) int32 { 27870 return TCL_ERROR 27871 } 27872 27873 var IncrblobChannelType = Tcl_ChannelType{ 27874 FtypeName: ts + 10868, 27875 Fversion: uintptr(0x2), 27876 FcloseProc: 0, 27877 FinputProc: 0, 27878 FoutputProc: 0, 27879 FseekProc: 0, 27880 FwatchProc: 0, 27881 FgetHandleProc: 0, 27882 } 27883 27884 func createIncrblobChannel(tls *libc.TLS, interp uintptr, pDb uintptr, zDb uintptr, zTable uintptr, zColumn uintptr, iRow sqlite_int64, isReadonly int32) int32 { 27885 bp := tls.Alloc(80) 27886 defer tls.Free(80) 27887 27888 var p uintptr 27889 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 27890 27891 var rc int32 27892 var flags int32 = int32(1)<<1 | func() int32 { 27893 if isReadonly != 0 { 27894 return 0 27895 } 27896 return int32(1) << 2 27897 }() 27898 27899 rc = sqlite3.Xsqlite3_blob_open(tls, db, zDb, zTable, zColumn, iRow, libc.BoolInt32(!(isReadonly != 0)), bp+8) 27900 if rc != SQLITE_OK { 27901 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 27902 return TCL_ERROR 27903 } 27904 27905 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(IncrblobChannel{}))) 27906 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = 0 27907 (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob = *(*uintptr)(unsafe.Pointer(bp + 8)) 27908 27909 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]uint8{})), bp+16, ts+10877, libc.VaList(bp, libc.PreIncInt32(&count, 1))) 27910 (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel = tcl.XTcl_CreateChannel(tls, uintptr(unsafe.Pointer(&IncrblobChannelType)), bp+16, p, flags) 27911 tcl.XTcl_RegisterChannel(tls, interp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 27912 27913 (*IncrblobChannel)(unsafe.Pointer(p)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob 27914 (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev = uintptr(0) 27915 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 27916 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = p 27917 } 27918 (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob = p 27919 (*IncrblobChannel)(unsafe.Pointer(p)).FpDb = pDb 27920 27921 tcl.XTcl_SetResult(tls, interp, tcl.XTcl_GetChannelName(tls, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel), uintptr(1)) 27922 return TCL_OK 27923 } 27924 27925 var count int32 = 0 27926 27927 func safeToUseEvalObjv(tls *libc.TLS, interp uintptr, pCmd uintptr) int32 { 27928 bp := tls.Alloc(4) 27929 defer tls.Free(4) 27930 27931 var z uintptr 27932 27933 z = tcl.XTcl_GetStringFromObj(tls, pCmd, bp) 27934 for libc.PostDecInt32(&*(*int32)(unsafe.Pointer(bp)), 1) > 0 { 27935 var c int32 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 27936 if c == '$' || c == '[' || c == ';' { 27937 return 0 27938 } 27939 } 27940 return 1 27941 } 27942 27943 func findSqlFunc(tls *libc.TLS, pDb uintptr, zName uintptr) uintptr { 27944 var p uintptr 27945 var pNew uintptr 27946 var nName int32 = strlen30(tls, zName) 27947 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlFunc{}))+uint64(nName)+uint64(1))) 27948 (*SqlFunc)(unsafe.Pointer(pNew)).FzName = pNew + 1*48 27949 libc.Xmemcpy(tls, (*SqlFunc)(unsafe.Pointer(pNew)).FzName, zName, uint64(nName+1)) 27950 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc; p != 0; p = (*SqlFunc)(unsafe.Pointer(p)).FpNext { 27951 if sqlite3.Xsqlite3_stricmp(tls, (*SqlFunc)(unsafe.Pointer(p)).FzName, (*SqlFunc)(unsafe.Pointer(pNew)).FzName) == 0 { 27952 tcl.XTcl_Free(tls, pNew) 27953 return p 27954 } 27955 } 27956 (*SqlFunc)(unsafe.Pointer(pNew)).Finterp = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 27957 (*SqlFunc)(unsafe.Pointer(pNew)).FpDb = pDb 27958 (*SqlFunc)(unsafe.Pointer(pNew)).FpScript = uintptr(0) 27959 (*SqlFunc)(unsafe.Pointer(pNew)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27960 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = pNew 27961 return pNew 27962 } 27963 27964 func dbFreeStmt(tls *libc.TLS, pStmt uintptr) { 27965 if sqlite3.Xsqlite3_sql(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) == uintptr(0) { 27966 tcl.XTcl_Free(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FzSql) 27967 } 27968 sqlite3.Xsqlite3_finalize(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) 27969 tcl.XTcl_Free(tls, pStmt) 27970 } 27971 27972 func flushStmtCache(tls *libc.TLS, pDb uintptr) { 27973 var pPreStmt uintptr 27974 var pNext uintptr 27975 27976 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = pNext { 27977 pNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 27978 dbFreeStmt(tls, pPreStmt) 27979 } 27980 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt = 0 27981 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = uintptr(0) 27982 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = uintptr(0) 27983 } 27984 27985 func addDatabaseRef(tls *libc.TLS, pDb uintptr) { 27986 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef++ 27987 } 27988 27989 func delDatabaseRef(tls *libc.TLS, pDb uintptr) { 27990 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef-- 27991 if (*SqliteDb)(unsafe.Pointer(pDb)).FnRef == 0 { 27992 flushStmtCache(tls, pDb) 27993 closeIncrblobChannels(tls, pDb) 27994 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 27995 for (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc != 0 { 27996 var pFunc uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 27997 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = (*SqlFunc)(unsafe.Pointer(pFunc)).FpNext 27998 27999 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28000 var _objPtr uintptr = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 28001 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28002 tcl.XTclFreeObj(tls, _objPtr) 28003 } 28004 } 28005 tcl.XTcl_Free(tls, pFunc) 28006 } 28007 for (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate != 0 { 28008 var pCollate uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 28009 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext 28010 tcl.XTcl_Free(tls, pCollate) 28011 } 28012 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0 { 28013 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 28014 } 28015 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0 { 28016 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 28017 } 28018 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0 { 28019 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 28020 } 28021 if (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0 { 28022 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 28023 } 28024 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0 { 28025 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 28026 } 28027 if (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0 { 28028 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 28029 } 28030 if (*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0 { 28031 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 28032 } 28033 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 28034 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28035 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook 28036 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28037 tcl.XTclFreeObj(tls, _objPtr) 28038 } 28039 } 28040 } 28041 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 28042 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28043 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook 28044 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28045 tcl.XTclFreeObj(tls, _objPtr) 28046 } 28047 } 28048 } 28049 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 28050 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 28051 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook 28052 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28053 tcl.XTclFreeObj(tls, _objPtr) 28054 } 28055 } 28056 } 28057 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 28058 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 28059 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook 28060 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28061 tcl.XTclFreeObj(tls, _objPtr) 28062 } 28063 } 28064 } 28065 if (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0 { 28066 for __ccgo5 := true; __ccgo5; __ccgo5 = 0 != 0 { 28067 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 28068 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28069 tcl.XTclFreeObj(tls, _objPtr) 28070 } 28071 } 28072 } 28073 tcl.XTcl_Free(tls, pDb) 28074 } 28075 } 28076 28077 func DbDeleteCmd(tls *libc.TLS, db uintptr) { 28078 var pDb uintptr = db 28079 delDatabaseRef(tls, pDb) 28080 } 28081 28082 func DbBusyHandler(tls *libc.TLS, cd uintptr, nTries int32) int32 { 28083 bp := tls.Alloc(70) 28084 defer tls.Free(70) 28085 28086 var pDb uintptr = cd 28087 var rc int32 28088 28089 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+40, ts+1333, libc.VaList(bp, nTries)) 28090 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))) 28091 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 28092 return 0 28093 } 28094 return 1 28095 } 28096 28097 func DbProgressHandler(tls *libc.TLS, cd uintptr) int32 { 28098 var pDb uintptr = cd 28099 var rc int32 28100 28101 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 28102 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 28103 return 1 28104 } 28105 return 0 28106 } 28107 28108 func DbTraceHandler(tls *libc.TLS, cd uintptr, zSql uintptr) { 28109 bp := tls.Alloc(216) 28110 defer tls.Free(216) 28111 28112 var pDb uintptr = cd 28113 28114 tcl.XTcl_DStringInit(tls, bp) 28115 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, -1) 28116 tcl.XTcl_DStringAppendElement(tls, bp, zSql) 28117 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 28118 tcl.XTcl_DStringFree(tls, bp) 28119 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28120 } 28121 28122 func DbTraceV2Handler(tls *libc.TLS, type1 uint32, cd uintptr, pd uintptr, xd uintptr) int32 { 28123 var pDb uintptr = cd 28124 var pCmd uintptr 28125 28126 switch type1 { 28127 case uint32(SQLITE_TRACE_STMT): 28128 { 28129 var pStmt uintptr = pd 28130 var zSql uintptr = xd 28131 28132 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28133 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28134 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28135 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 28136 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28137 tcl.XTcl_NewStringObj(tls, zSql, -1)) 28138 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28139 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28140 var _objPtr uintptr = pCmd 28141 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28142 tcl.XTclFreeObj(tls, _objPtr) 28143 } 28144 } 28145 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28146 break 28147 28148 } 28149 case uint32(SQLITE_TRACE_PROFILE): 28150 { 28151 var pStmt uintptr = pd 28152 var ns sqlite3_int64 = *(*sqlite3_int64)(unsafe.Pointer(xd)) 28153 28154 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28155 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28156 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28157 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 28158 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28159 tcl.XTcl_NewWideIntObj(tls, ns)) 28160 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28161 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28162 var _objPtr uintptr = pCmd 28163 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28164 tcl.XTclFreeObj(tls, _objPtr) 28165 } 28166 } 28167 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28168 break 28169 28170 } 28171 case uint32(SQLITE_TRACE_ROW): 28172 { 28173 var pStmt uintptr = pd 28174 28175 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28176 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28177 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28178 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 28179 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28180 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28181 var _objPtr uintptr = pCmd 28182 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28183 tcl.XTclFreeObj(tls, _objPtr) 28184 } 28185 } 28186 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28187 break 28188 28189 } 28190 case uint32(SQLITE_TRACE_CLOSE): 28191 { 28192 var db uintptr = pd 28193 28194 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28195 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28196 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28197 tcl.XTcl_NewWideIntObj(tls, int64(db))) 28198 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28199 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 28200 var _objPtr uintptr = pCmd 28201 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28202 tcl.XTclFreeObj(tls, _objPtr) 28203 } 28204 } 28205 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28206 break 28207 28208 } 28209 } 28210 return SQLITE_OK 28211 } 28212 28213 func DbProfileHandler(tls *libc.TLS, cd uintptr, zSql uintptr, tm1 sqlite_uint64) { 28214 bp := tls.Alloc(328) 28215 defer tls.Free(328) 28216 28217 var pDb uintptr = cd 28218 28219 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([100]uint8{}))-uint64(1)), bp+8, ts+6325, libc.VaList(bp, tm1)) 28220 tcl.XTcl_DStringInit(tls, bp+112) 28221 tcl.XTcl_DStringAppend(tls, bp+112, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, -1) 28222 tcl.XTcl_DStringAppendElement(tls, bp+112, zSql) 28223 tcl.XTcl_DStringAppendElement(tls, bp+112, bp+8) 28224 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+112)).Fstring) 28225 tcl.XTcl_DStringFree(tls, bp+112) 28226 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28227 } 28228 28229 func DbCommitHandler(tls *libc.TLS, cd uintptr) int32 { 28230 var pDb uintptr = cd 28231 var rc int32 28232 28233 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 28234 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 28235 return 1 28236 } 28237 return 0 28238 } 28239 28240 func DbRollbackHandler(tls *libc.TLS, clientData uintptr) { 28241 var pDb uintptr = clientData 28242 28243 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook, 0) { 28244 tcl.XTcl_BackgroundError(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28245 } 28246 } 28247 28248 func DbWalHandler(tls *libc.TLS, clientData uintptr, db uintptr, zDb uintptr, nEntry int32) int32 { 28249 bp := tls.Alloc(4) 28250 defer tls.Free(4) 28251 28252 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 28253 var p uintptr 28254 var pDb uintptr = clientData 28255 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28256 28257 p = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook) 28258 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 28259 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28260 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewIntObj(tls, nEntry)) 28261 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, p, 0) || 28262 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 28263 tcl.XTcl_BackgroundError(tls, interp) 28264 } 28265 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28266 var _objPtr uintptr = p 28267 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28268 tcl.XTclFreeObj(tls, _objPtr) 28269 } 28270 } 28271 28272 return *(*int32)(unsafe.Pointer(bp)) 28273 } 28274 28275 func setTestUnlockNotifyVars(tls *libc.TLS, interp uintptr, iArg int32, nArg int32) { 28276 bp := tls.Alloc(80) 28277 defer tls.Free(80) 28278 28279 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]uint8{})), bp+16, ts+1333, libc.VaList(bp, iArg)) 28280 tcl.XTcl_SetVar2(tls, interp, ts+10889, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 28281 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]uint8{})), bp+16, ts+1333, libc.VaList(bp+8, nArg)) 28282 tcl.XTcl_SetVar2(tls, interp, ts+10914, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 28283 } 28284 28285 func DbUnlockNotify(tls *libc.TLS, apArg uintptr, nArg int32) { 28286 var i int32 28287 for i = 0; i < nArg; i++ { 28288 var flags int32 = TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT 28289 var pDb uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 28290 setTestUnlockNotifyVars(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, i, nArg) 28291 28292 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify, flags) 28293 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28294 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 28295 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28296 tcl.XTclFreeObj(tls, _objPtr) 28297 } 28298 } 28299 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 28300 } 28301 } 28302 28303 func DbPreUpdateHandler(tls *libc.TLS, p uintptr, db uintptr, op int32, zDb uintptr, zTbl uintptr, iKey1 sqlite_int64, iKey2 sqlite_int64) { 28304 var pDb uintptr = p 28305 var pCmd uintptr 28306 28307 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook) 28308 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28309 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr[(op-1)/9], -1)) 28310 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28311 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28312 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey1)) 28313 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey2)) 28314 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28315 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28316 var _objPtr uintptr = pCmd 28317 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28318 tcl.XTclFreeObj(tls, _objPtr) 28319 } 28320 } 28321 } 28322 28323 var azStr = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 28324 28325 func DbUpdateHandler(tls *libc.TLS, p uintptr, op int32, zDb uintptr, zTbl uintptr, rowid sqlite_int64) { 28326 var pDb uintptr = p 28327 var pCmd uintptr 28328 28329 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook) 28330 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28331 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr1[(op-1)/9], -1)) 28332 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28333 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28334 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, rowid)) 28335 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28336 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28337 var _objPtr uintptr = pCmd 28338 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28339 tcl.XTclFreeObj(tls, _objPtr) 28340 } 28341 } 28342 } 28343 28344 var azStr1 = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 28345 28346 func tclCollateNeeded(tls *libc.TLS, pCtx uintptr, db uintptr, enc int32, zName uintptr) { 28347 var pDb uintptr = pCtx 28348 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 28349 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 28350 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 28351 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pScript, 0) 28352 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28353 var _objPtr uintptr = pScript 28354 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28355 tcl.XTclFreeObj(tls, _objPtr) 28356 } 28357 } 28358 } 28359 28360 func tclSqlCollate(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 28361 var p uintptr = pCtx 28362 var pCmd uintptr 28363 28364 pCmd = tcl.XTcl_NewStringObj(tls, (*SqlCollate)(unsafe.Pointer(p)).FzScript, -1) 28365 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28366 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zA, nA)) 28367 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zB, nB)) 28368 tcl.XTcl_EvalObjEx(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 28369 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28370 var _objPtr uintptr = pCmd 28371 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28372 tcl.XTclFreeObj(tls, _objPtr) 28373 } 28374 } 28375 return libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp)) 28376 } 28377 28378 func tclSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 28379 bp := tls.Alloc(40) 28380 defer tls.Free(40) 28381 28382 var p uintptr = sqlite3.Xsqlite3_user_data(tls, context) 28383 var pCmd uintptr 28384 var i int32 28385 var rc int32 28386 28387 if argc == 0 { 28388 pCmd = (*SqlFunc)(unsafe.Pointer(p)).FpScript 28389 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28390 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, 0) 28391 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28392 var _objPtr uintptr = pCmd 28393 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28394 tcl.XTclFreeObj(tls, _objPtr) 28395 } 28396 } 28397 } else { 28398 if tcl.XTcl_ListObjGetElements(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, (*SqlFunc)(unsafe.Pointer(p)).FpScript, bp, bp+8) != 0 { 28399 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28400 return 28401 } 28402 pCmd = tcl.XTcl_NewListObj(tls, *(*int32)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 28403 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28404 for i = 0; i < argc; i++ { 28405 var pIn uintptr = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 28406 var pVal uintptr 28407 28408 switch sqlite3.Xsqlite3_value_type(tls, pIn) { 28409 case SQLITE_BLOB: 28410 { 28411 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 28412 pVal = tcl.XTcl_NewByteArrayObj(tls, sqlite3.Xsqlite3_value_blob(tls, pIn), bytes) 28413 break 28414 28415 } 28416 fallthrough 28417 case SQLITE_INTEGER: 28418 { 28419 var v sqlite_int64 = sqlite3.Xsqlite3_value_int64(tls, pIn) 28420 if v >= int64(-2147483647) && v <= int64(2147483647) { 28421 pVal = tcl.XTcl_NewIntObj(tls, int32(v)) 28422 } else { 28423 pVal = tcl.XTcl_NewWideIntObj(tls, v) 28424 } 28425 break 28426 28427 } 28428 fallthrough 28429 case SQLITE_FLOAT: 28430 { 28431 var r float64 = sqlite3.Xsqlite3_value_double(tls, pIn) 28432 pVal = tcl.XTcl_NewDoubleObj(tls, r) 28433 break 28434 28435 } 28436 fallthrough 28437 case SQLITE_NULL: 28438 { 28439 pVal = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 28440 break 28441 28442 } 28443 fallthrough 28444 default: 28445 { 28446 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 28447 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pIn), bytes) 28448 break 28449 28450 } 28451 } 28452 rc = tcl.XTcl_ListObjAppendElement(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, pVal) 28453 if rc != 0 { 28454 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28455 var _objPtr uintptr = pCmd 28456 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28457 tcl.XTclFreeObj(tls, _objPtr) 28458 } 28459 } 28460 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28461 return 28462 } 28463 } 28464 if !((*SqlFunc)(unsafe.Pointer(p)).FuseEvalObjv != 0) { 28465 tcl.XTcl_GetString(tls, pCmd) 28466 } 28467 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 28468 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28469 var _objPtr uintptr = pCmd 28470 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28471 tcl.XTclFreeObj(tls, _objPtr) 28472 } 28473 } 28474 } 28475 28476 if rc != 0 && rc != TCL_RETURN { 28477 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28478 } else { 28479 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp) 28480 28481 var data uintptr 28482 var zType uintptr = func() uintptr { 28483 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28484 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28485 } 28486 return ts + 584 28487 }() 28488 var c uint8 = *(*uint8)(unsafe.Pointer(zType)) 28489 var eType int32 = (*SqlFunc)(unsafe.Pointer(p)).FeType 28490 28491 if eType == SQLITE_NULL { 28492 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28493 eType = SQLITE_BLOB 28494 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 || 28495 int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || 28496 int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28497 eType = SQLITE_INTEGER 28498 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28499 eType = SQLITE_FLOAT 28500 } else { 28501 eType = SQLITE_TEXT 28502 } 28503 } 28504 28505 switch eType { 28506 case SQLITE_BLOB: 28507 { 28508 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+16) 28509 sqlite3.Xsqlite3_result_blob(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 28510 break 28511 28512 } 28513 fallthrough 28514 case SQLITE_INTEGER: 28515 { 28516 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+24) { 28517 sqlite3.Xsqlite3_result_int64(tls, context, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 28518 break 28519 } 28520 28521 } 28522 fallthrough 28523 case SQLITE_FLOAT: 28524 { 28525 if TCL_OK == tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+32) { 28526 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 32))) 28527 break 28528 } 28529 28530 } 28531 fallthrough 28532 default: 28533 { 28534 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+16) 28535 sqlite3.Xsqlite3_result_text(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 28536 break 28537 28538 } 28539 } 28540 28541 } 28542 } 28543 28544 func auth_callback(tls *libc.TLS, pArg uintptr, code int32, zArg1 uintptr, zArg2 uintptr, zArg3 uintptr, zArg4 uintptr) int32 { 28545 bp := tls.Alloc(216) 28546 defer tls.Free(216) 28547 28548 var zCode uintptr 28549 28550 var rc int32 28551 var zReply uintptr 28552 28553 var pDb uintptr = pArg 28554 if (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth != 0 { 28555 return SQLITE_OK 28556 } 28557 28558 switch code { 28559 case SQLITE_COPY: 28560 zCode = ts + 10944 28561 break 28562 case SQLITE_CREATE_INDEX: 28563 zCode = ts + 10956 28564 break 28565 case SQLITE_CREATE_TABLE: 28566 zCode = ts + 10976 28567 break 28568 case SQLITE_CREATE_TEMP_INDEX: 28569 zCode = ts + 10996 28570 break 28571 case SQLITE_CREATE_TEMP_TABLE: 28572 zCode = ts + 11021 28573 break 28574 case SQLITE_CREATE_TEMP_TRIGGER: 28575 zCode = ts + 11046 28576 break 28577 case SQLITE_CREATE_TEMP_VIEW: 28578 zCode = ts + 11073 28579 break 28580 case SQLITE_CREATE_TRIGGER: 28581 zCode = ts + 11097 28582 break 28583 case SQLITE_CREATE_VIEW: 28584 zCode = ts + 11119 28585 break 28586 case SQLITE_DELETE: 28587 zCode = ts + 11138 28588 break 28589 case SQLITE_DROP_INDEX: 28590 zCode = ts + 11152 28591 break 28592 case SQLITE_DROP_TABLE: 28593 zCode = ts + 11170 28594 break 28595 case SQLITE_DROP_TEMP_INDEX: 28596 zCode = ts + 11188 28597 break 28598 case SQLITE_DROP_TEMP_TABLE: 28599 zCode = ts + 11211 28600 break 28601 case SQLITE_DROP_TEMP_TRIGGER: 28602 zCode = ts + 11234 28603 break 28604 case SQLITE_DROP_TEMP_VIEW: 28605 zCode = ts + 11259 28606 break 28607 case SQLITE_DROP_TRIGGER: 28608 zCode = ts + 11281 28609 break 28610 case SQLITE_DROP_VIEW: 28611 zCode = ts + 11301 28612 break 28613 case SQLITE_INSERT: 28614 zCode = ts + 11318 28615 break 28616 case SQLITE_PRAGMA: 28617 zCode = ts + 11332 28618 break 28619 case SQLITE_READ: 28620 zCode = ts + 11346 28621 break 28622 case SQLITE_SELECT: 28623 zCode = ts + 11358 28624 break 28625 case SQLITE_TRANSACTION: 28626 zCode = ts + 11372 28627 break 28628 case SQLITE_UPDATE: 28629 zCode = ts + 11391 28630 break 28631 case SQLITE_ATTACH: 28632 zCode = ts + 11405 28633 break 28634 case SQLITE_DETACH: 28635 zCode = ts + 11419 28636 break 28637 case SQLITE_ALTER_TABLE: 28638 zCode = ts + 11433 28639 break 28640 case SQLITE_REINDEX: 28641 zCode = ts + 11452 28642 break 28643 case SQLITE_ANALYZE: 28644 zCode = ts + 11467 28645 break 28646 case SQLITE_CREATE_VTABLE: 28647 zCode = ts + 11482 28648 break 28649 case SQLITE_DROP_VTABLE: 28650 zCode = ts + 11503 28651 break 28652 case SQLITE_FUNCTION: 28653 zCode = ts + 11522 28654 break 28655 case SQLITE_SAVEPOINT: 28656 zCode = ts + 11538 28657 break 28658 case SQLITE_RECURSIVE: 28659 zCode = ts + 11555 28660 break 28661 default: 28662 zCode = ts + 11572 28663 break 28664 } 28665 tcl.XTcl_DStringInit(tls, bp) 28666 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, -1) 28667 tcl.XTcl_DStringAppendElement(tls, bp, zCode) 28668 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28669 if zArg1 != 0 { 28670 return zArg1 28671 } 28672 return ts + 584 28673 }()) 28674 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28675 if zArg2 != 0 { 28676 return zArg2 28677 } 28678 return ts + 584 28679 }()) 28680 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28681 if zArg3 != 0 { 28682 return zArg3 28683 } 28684 return ts + 584 28685 }()) 28686 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28687 if zArg4 != 0 { 28688 return zArg4 28689 } 28690 return ts + 584 28691 }()) 28692 rc = tcl.XTcl_GlobalEval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 28693 tcl.XTcl_DStringFree(tls, bp) 28694 if rc == TCL_OK { 28695 zReply = tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28696 } else { 28697 zReply = ts + 11577 28698 } 28699 if libc.Xstrcmp(tls, zReply, ts+2127) == 0 { 28700 rc = SQLITE_OK 28701 } else if libc.Xstrcmp(tls, zReply, ts+11577) == 0 { 28702 rc = SQLITE_DENY 28703 } else if libc.Xstrcmp(tls, zReply, ts+11589) == 0 { 28704 rc = SQLITE_IGNORE 28705 } else { 28706 rc = 999 28707 } 28708 return rc 28709 } 28710 28711 func local_getline(tls *libc.TLS, zPrompt uintptr, in uintptr) uintptr { 28712 var zLine uintptr 28713 var nLine int32 28714 var n int32 28715 28716 nLine = 100 28717 zLine = libc.Xmalloc(tls, uint64(nLine)) 28718 if zLine == uintptr(0) { 28719 return uintptr(0) 28720 } 28721 n = 0 28722 for 1 != 0 { 28723 if n+100 > nLine { 28724 nLine = nLine*2 + 100 28725 zLine = libc.Xrealloc(tls, zLine, uint64(nLine)) 28726 if zLine == uintptr(0) { 28727 return uintptr(0) 28728 } 28729 } 28730 if libc.Xfgets(tls, zLine+uintptr(n), nLine-n, in) == uintptr(0) { 28731 if n == 0 { 28732 libc.Xfree(tls, zLine) 28733 return uintptr(0) 28734 } 28735 *(*uint8)(unsafe.Pointer(zLine + uintptr(n))) = uint8(0) 28736 break 28737 } 28738 for *(*uint8)(unsafe.Pointer(zLine + uintptr(n))) != 0 { 28739 n++ 28740 } 28741 if n > 0 && int32(*(*uint8)(unsafe.Pointer(zLine + uintptr(n-1)))) == '\n' { 28742 n-- 28743 *(*uint8)(unsafe.Pointer(zLine + uintptr(n))) = uint8(0) 28744 break 28745 } 28746 } 28747 zLine = libc.Xrealloc(tls, zLine, uint64(n+1)) 28748 return zLine 28749 } 28750 28751 func DbTransPostCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 28752 bp := tls.Alloc(16) 28753 defer tls.Free(16) 28754 28755 var pDb uintptr = *(*ClientData)(unsafe.Pointer(data)) 28756 var rc int32 = result 28757 var zEnd uintptr 28758 28759 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction-- 28760 zEnd = azEnd[libc.Bool32(rc == TCL_ERROR)*2+libc.Bool32((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0)] 28761 28762 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 28763 if sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zEnd, uintptr(0), uintptr(0), uintptr(0)) != 0 { 28764 if rc != TCL_ERROR { 28765 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 28766 rc = TCL_ERROR 28767 } 28768 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+7824, uintptr(0), uintptr(0), uintptr(0)) 28769 } 28770 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 28771 28772 delDatabaseRef(tls, pDb) 28773 return rc 28774 } 28775 28776 var azEnd = [4]uintptr{ 28777 ts + 11603, 28778 ts + 11628, 28779 ts + 11635, 28780 ts + 7824, 28781 } 28782 28783 func dbPrepare(tls *libc.TLS, pDb uintptr, zSql uintptr, ppStmt uintptr, pzOut uintptr) int32 { 28784 var prepFlags uint32 = uint32(0) 28785 if (*SqliteDb)(unsafe.Pointer(pDb)).FbLegacyPrepare != 0 { 28786 return sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, ppStmt, pzOut) 28787 } 28788 28789 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt > 5 { 28790 prepFlags = uint32(SQLITE_PREPARE_PERSISTENT) 28791 } 28792 28793 return sqlite3.Xsqlite3_prepare_v3(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, prepFlags, ppStmt, pzOut) 28794 } 28795 28796 func dbPrepareAndBind(tls *libc.TLS, pDb uintptr, zIn uintptr, pzOut uintptr, ppPreStmt uintptr) int32 { 28797 bp := tls.Alloc(32) 28798 defer tls.Free(32) 28799 28800 var zSql uintptr = zIn 28801 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 28802 var pPreStmt uintptr 28803 var nSql int32 28804 var nVar int32 = 0 28805 var iParm int32 = 0 28806 var c uint8 28807 var i int32 28808 var needResultReset int32 = 0 28809 var rc int32 = SQLITE_OK 28810 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28811 28812 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = uintptr(0) 28813 28814 for int32(libc.AssignUint8(&c, *(*uint8)(unsafe.Pointer(zSql)))) == ' ' || int32(c) == '\t' || int32(c) == '\r' || int32(c) == '\n' { 28815 zSql++ 28816 } 28817 nSql = strlen30(tls, zSql) 28818 28819 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext { 28820 var n int32 = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql 28821 if nSql >= n && 28822 libc.Xmemcmp(tls, (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql, zSql, uint64(n)) == 0 && 28823 (int32(*(*uint8)(unsafe.Pointer(zSql + uintptr(n)))) == 0 || int32(*(*uint8)(unsafe.Pointer(zSql + uintptr(n-1)))) == ';') { 28824 *(*uintptr)(unsafe.Pointer(bp)) = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 28825 *(*uintptr)(unsafe.Pointer(pzOut)) = zSql + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql) 28826 28827 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev != 0 { 28828 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev)).FpNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28829 } else { 28830 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28831 } 28832 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext != 0 { 28833 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext)).FpPrev = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28834 } else { 28835 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 28836 } 28837 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28838 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28839 break 28840 } 28841 } 28842 28843 if pPreStmt == uintptr(0) { 28844 var nByte int32 28845 28846 if SQLITE_OK != dbPrepare(tls, pDb, zSql, bp, pzOut) { 28847 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28848 return TCL_ERROR 28849 } 28850 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 28851 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) { 28852 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 28853 return TCL_ERROR 28854 } else { 28855 return TCL_OK 28856 } 28857 } 28858 28859 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 28860 nByte = int32(uint64(unsafe.Sizeof(SqlPreparedStmt{})) + uint64(nVar)*uint64(unsafe.Sizeof(uintptr(0)))) 28861 pPreStmt = tcl.XTcl_Alloc(tls, uint32(nByte)) 28862 libc.Xmemset(tls, pPreStmt, 0, uint64(nByte)) 28863 28864 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt = *(*uintptr)(unsafe.Pointer(bp)) 28865 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql = int32((int64(*(*uintptr)(unsafe.Pointer(pzOut))) - int64(zSql)) / 1) 28866 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 28867 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm = pPreStmt + 1*56 28868 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql == uintptr(0) { 28869 var zCopy uintptr = tcl.XTcl_Alloc(tls, uint32((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql+1)) 28870 libc.Xmemcpy(tls, zCopy, zSql, uint64((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql)) 28871 *(*uint8)(unsafe.Pointer(zCopy + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql))) = uint8(0) 28872 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = zCopy 28873 } 28874 } 28875 28876 for i = 1; i <= nVar; i++ { 28877 var zVar uintptr = sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28878 if zVar != uintptr(0) && (int32(*(*uint8)(unsafe.Pointer(zVar))) == '$' || int32(*(*uint8)(unsafe.Pointer(zVar))) == ':' || int32(*(*uint8)(unsafe.Pointer(zVar))) == '@') { 28879 var pVar uintptr = tcl.XTcl_GetVar2Ex(tls, interp, zVar+1, uintptr(0), 0) 28880 if pVar == uintptr(0) && (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != uintptr(0) { 28881 var pCmd uintptr 28882 var rx int32 28883 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, -1) 28884 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28885 tcl.XTcl_ListObjAppendElement(tls, interp, pCmd, tcl.XTcl_NewStringObj(tls, zVar, -1)) 28886 if needResultReset != 0 { 28887 tcl.XTcl_ResetResult(tls, interp) 28888 } 28889 needResultReset = 1 28890 rx = tcl.XTcl_EvalObjEx(tls, interp, pCmd, TCL_EVAL_DIRECT) 28891 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28892 var _objPtr uintptr = pCmd 28893 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28894 tcl.XTclFreeObj(tls, _objPtr) 28895 } 28896 } 28897 if rx == TCL_OK { 28898 pVar = tcl.XTcl_GetObjResult(tls, interp) 28899 } else if rx == TCL_ERROR { 28900 rc = TCL_ERROR 28901 break 28902 } else { 28903 pVar = uintptr(0) 28904 } 28905 } 28906 if pVar != 0 { 28907 var data uintptr 28908 var zType uintptr = func() uintptr { 28909 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28910 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28911 } 28912 return ts + 584 28913 }() 28914 c = *(*uint8)(unsafe.Pointer(zType)) 28915 if int32(*(*uint8)(unsafe.Pointer(zVar))) == '@' || int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28916 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+8) 28917 sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 28918 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28919 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 28920 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 28921 tcl.XTcl_GetIntFromObj(tls, interp, pVar, bp+8) 28922 sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*int32)(unsafe.Pointer(bp + 8))) 28923 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28924 tcl.XTcl_GetDoubleFromObj(tls, interp, pVar, bp+16) 28925 sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*float64)(unsafe.Pointer(bp + 16))) 28926 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28927 tcl.XTcl_GetWideIntFromObj(tls, interp, pVar, bp+24) 28928 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 28929 } else { 28930 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+8) 28931 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 28932 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 28933 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 28934 } 28935 } else { 28936 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 28937 } 28938 if needResultReset != 0 { 28939 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28940 } 28941 } 28942 } 28943 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = iParm 28944 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = pPreStmt 28945 if needResultReset != 0 && rc == TCL_OK { 28946 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28947 } 28948 28949 return rc 28950 } 28951 28952 func dbReleaseStmt(tls *libc.TLS, pDb uintptr, pPreStmt uintptr, discard int32) { 28953 var i int32 28954 28955 for i = 0; i < (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm; i++ { 28956 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28957 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(i)*8)) 28958 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28959 tcl.XTclFreeObj(tls, _objPtr) 28960 } 28961 } 28962 } 28963 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = 0 28964 28965 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt <= 0 || discard != 0 { 28966 dbFreeStmt(tls, pPreStmt) 28967 } else { 28968 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList 28969 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev = uintptr(0) 28970 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 28971 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpPrev = pPreStmt 28972 } 28973 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = pPreStmt 28974 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast == uintptr(0) { 28975 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = pPreStmt 28976 } else { 28977 } 28978 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt++ 28979 28980 for (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt > (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt { 28981 var pLast uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast 28982 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pLast)).FpPrev 28983 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast)).FpNext = uintptr(0) 28984 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 28985 dbFreeStmt(tls, pLast) 28986 } 28987 } 28988 } 28989 28990 type DbEvalContext1 = struct { 28991 FpDb uintptr 28992 FpSql uintptr 28993 FzSql uintptr 28994 FpPreStmt uintptr 28995 FnCol int32 28996 FevalFlags int32 28997 FpArray uintptr 28998 FapColName uintptr 28999 } 29000 29001 type DbEvalContext = DbEvalContext1 29002 29003 func dbReleaseColumnNames(tls *libc.TLS, p uintptr) { 29004 if (*DbEvalContext)(unsafe.Pointer(p)).FapColName != 0 { 29005 var i int32 29006 for i = 0; i < (*DbEvalContext)(unsafe.Pointer(p)).FnCol; i++ { 29007 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29008 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FapColName + uintptr(i)*8)) 29009 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29010 tcl.XTclFreeObj(tls, _objPtr) 29011 } 29012 } 29013 } 29014 tcl.XTcl_Free(tls, (*DbEvalContext)(unsafe.Pointer(p)).FapColName) 29015 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = uintptr(0) 29016 } 29017 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = 0 29018 } 29019 29020 func dbEvalInit(tls *libc.TLS, p uintptr, pDb uintptr, pSql uintptr, pArray uintptr, evalFlags int32) { 29021 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(DbEvalContext{}))) 29022 (*DbEvalContext)(unsafe.Pointer(p)).FpDb = pDb 29023 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = tcl.XTcl_GetString(tls, pSql) 29024 (*DbEvalContext)(unsafe.Pointer(p)).FpSql = pSql 29025 (*Tcl_Obj)(unsafe.Pointer(pSql)).FrefCount++ 29026 if pArray != 0 { 29027 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = pArray 29028 (*Tcl_Obj)(unsafe.Pointer(pArray)).FrefCount++ 29029 } 29030 (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags = evalFlags 29031 addDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 29032 } 29033 29034 func dbEvalRowInfo(tls *libc.TLS, p uintptr, pnCol uintptr, papColName uintptr) { 29035 if uintptr(0) == (*DbEvalContext)(unsafe.Pointer(p)).FapColName { 29036 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 29037 var i int32 29038 var nCol int32 29039 var apColName uintptr = uintptr(0) 29040 29041 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = libc.AssignInt32(&nCol, sqlite3.Xsqlite3_column_count(tls, pStmt)) 29042 if nCol > 0 && (papColName != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0) { 29043 apColName = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol))) 29044 for i = 0; i < nCol; i++ { 29045 *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)) = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_name(tls, pStmt, i), -1) 29046 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)))).FrefCount++ 29047 } 29048 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = apColName 29049 } 29050 29051 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 29052 var interp uintptr = (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).Finterp 29053 var pColList uintptr = tcl.XTcl_NewObj(tls) 29054 var pStar uintptr = tcl.XTcl_NewStringObj(tls, ts+3840, -1) 29055 29056 for i = 0; i < nCol; i++ { 29057 tcl.XTcl_ListObjAppendElement(tls, interp, pColList, *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8))) 29058 } 29059 (*Tcl_Obj)(unsafe.Pointer(pStar)).FrefCount++ 29060 tcl.XTcl_ObjSetVar2(tls, interp, (*DbEvalContext)(unsafe.Pointer(p)).FpArray, pStar, pColList, 0) 29061 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29062 var _objPtr uintptr = pStar 29063 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29064 tcl.XTclFreeObj(tls, _objPtr) 29065 } 29066 } 29067 } 29068 } 29069 29070 if papColName != 0 { 29071 *(*uintptr)(unsafe.Pointer(papColName)) = (*DbEvalContext)(unsafe.Pointer(p)).FapColName 29072 } 29073 if pnCol != 0 { 29074 *(*int32)(unsafe.Pointer(pnCol)) = (*DbEvalContext)(unsafe.Pointer(p)).FnCol 29075 } 29076 } 29077 29078 func dbEvalStep(tls *libc.TLS, p uintptr) int32 { 29079 var zPrevSql uintptr = uintptr(0) 29080 29081 for *(*uint8)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FzSql)) != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 29082 var rc int32 29083 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt == uintptr(0) { 29084 zPrevSql = func() uintptr { 29085 if (*DbEvalContext)(unsafe.Pointer(p)).FzSql == zPrevSql { 29086 return uintptr(0) 29087 } 29088 return (*DbEvalContext)(unsafe.Pointer(p)).FzSql 29089 }() 29090 rc = dbPrepareAndBind(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FzSql, p+16, p+24) 29091 if rc != TCL_OK { 29092 return rc 29093 } 29094 } else { 29095 var rcs int32 29096 var pDb uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpDb 29097 var pPreStmt uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt 29098 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 29099 29100 rcs = sqlite3.Xsqlite3_step(tls, pStmt) 29101 if rcs == SQLITE_ROW { 29102 return TCL_OK 29103 } 29104 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 29105 dbEvalRowInfo(tls, p, uintptr(0), uintptr(0)) 29106 } 29107 rcs = sqlite3.Xsqlite3_reset(tls, pStmt) 29108 29109 (*SqliteDb)(unsafe.Pointer(pDb)).FnStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, 1) 29110 (*SqliteDb)(unsafe.Pointer(pDb)).FnSort = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_SORT, 1) 29111 (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_AUTOINDEX, 1) 29112 (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_VM_STEP, 1) 29113 dbReleaseColumnNames(tls, p) 29114 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 29115 29116 if rcs != SQLITE_OK { 29117 dbReleaseStmt(tls, pDb, pPreStmt, 1) 29118 if (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FbLegacyPrepare != 0 && rcs == SQLITE_SCHEMA && zPrevSql != 0 { 29119 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = zPrevSql 29120 continue 29121 } 29122 tcl.XTcl_SetObjResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, 29123 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 29124 return TCL_ERROR 29125 } else { 29126 dbReleaseStmt(tls, pDb, pPreStmt, 0) 29127 } 29128 } 29129 } 29130 29131 return TCL_BREAK 29132 } 29133 29134 func dbEvalFinalize(tls *libc.TLS, p uintptr) { 29135 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 29136 sqlite3.Xsqlite3_reset(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt) 29137 dbReleaseStmt(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt, 0) 29138 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 29139 } 29140 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 29141 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29142 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 29143 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29144 tcl.XTclFreeObj(tls, _objPtr) 29145 } 29146 } 29147 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = uintptr(0) 29148 } 29149 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 29150 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpSql 29151 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29152 tcl.XTclFreeObj(tls, _objPtr) 29153 } 29154 } 29155 dbReleaseColumnNames(tls, p) 29156 delDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 29157 } 29158 29159 func dbEvalColumnValue(tls *libc.TLS, p uintptr, iCol int32) uintptr { 29160 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 29161 switch sqlite3.Xsqlite3_column_type(tls, pStmt, iCol) { 29162 case SQLITE_BLOB: 29163 { 29164 var bytes int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, iCol) 29165 var zBlob uintptr = sqlite3.Xsqlite3_column_blob(tls, pStmt, iCol) 29166 if !(zBlob != 0) { 29167 bytes = 0 29168 } 29169 return tcl.XTcl_NewByteArrayObj(tls, zBlob, bytes) 29170 29171 } 29172 case SQLITE_INTEGER: 29173 { 29174 var v sqlite_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, iCol) 29175 if v >= int64(-2147483647) && v <= int64(2147483647) { 29176 return tcl.XTcl_NewIntObj(tls, int32(v)) 29177 } else { 29178 return tcl.XTcl_NewWideIntObj(tls, v) 29179 } 29180 29181 } 29182 fallthrough 29183 case SQLITE_FLOAT: 29184 { 29185 return tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_column_double(tls, pStmt, iCol)) 29186 29187 } 29188 case SQLITE_NULL: 29189 { 29190 return tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 29191 29192 } 29193 } 29194 29195 return tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_text(tls, pStmt, iCol), -1) 29196 } 29197 29198 func DbUseNre(tls *libc.TLS) int32 { 29199 bp := tls.Alloc(8) 29200 defer tls.Free(8) 29201 29202 tcl.XTcl_GetVersion(tls, bp, bp+4, uintptr(0), uintptr(0)) 29203 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == 8 && *(*int32)(unsafe.Pointer(bp + 4)) >= 6 || *(*int32)(unsafe.Pointer(bp)) > 8) 29204 } 29205 29206 func DbEvalNextCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 29207 bp := tls.Alloc(16) 29208 defer tls.Free(16) 29209 29210 var rc int32 = result 29211 29212 var p uintptr = *(*ClientData)(unsafe.Pointer(data)) 29213 var pScript uintptr = *(*ClientData)(unsafe.Pointer(data + 1*8)) 29214 var pArray uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 29215 29216 for (rc == TCL_OK || rc == TCL_CONTINUE) && TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, p)) { 29217 var i int32 29218 29219 dbEvalRowInfo(tls, p, bp, bp+8) 29220 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 29221 if pArray == uintptr(0) { 29222 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(0), dbEvalColumnValue(tls, p, i), 0) 29223 } else if (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags&SQLITE_EVAL_WITHOUTNULLS != 0 && 29224 sqlite3.Xsqlite3_column_type(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt, i) == SQLITE_NULL { 29225 tcl.XTcl_UnsetVar2(tls, interp, tcl.XTcl_GetString(tls, pArray), 29226 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8))), 0) 29227 } else { 29228 tcl.XTcl_ObjSetVar2(tls, interp, pArray, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), dbEvalColumnValue(tls, p, i), 0) 29229 } 29230 } 29231 29232 if DbUseNre(tls) != 0 { 29233 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 29234 f func(*libc.TLS, uintptr, uintptr, int32) int32 29235 }{DbEvalNextCmd})), p, pScript, uintptr(0), uintptr(0)) 29236 return tcl.XTcl_NREvalObj(tls, interp, pScript, 0) 29237 } else { 29238 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 29239 } 29240 } 29241 29242 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29243 var _objPtr uintptr = pScript 29244 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29245 tcl.XTclFreeObj(tls, _objPtr) 29246 } 29247 } 29248 dbEvalFinalize(tls, p) 29249 tcl.XTcl_Free(tls, p) 29250 29251 if rc == TCL_OK || rc == TCL_BREAK { 29252 tcl.XTcl_ResetResult(tls, interp) 29253 rc = TCL_OK 29254 } 29255 return rc 29256 } 29257 29258 func DbHookCmd(tls *libc.TLS, interp uintptr, pDb uintptr, pArg uintptr, ppHook uintptr) { 29259 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 29260 29261 if *(*uintptr)(unsafe.Pointer(ppHook)) != 0 { 29262 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(ppHook))) 29263 if pArg != 0 { 29264 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29265 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer(ppHook)) 29266 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29267 tcl.XTclFreeObj(tls, _objPtr) 29268 } 29269 } 29270 *(*uintptr)(unsafe.Pointer(ppHook)) = uintptr(0) 29271 } 29272 } 29273 if pArg != 0 { 29274 if tcl.XTcl_GetCharLength(tls, pArg) > 0 { 29275 *(*uintptr)(unsafe.Pointer(ppHook)) = pArg 29276 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppHook)))).FrefCount++ 29277 } 29278 } 29279 29280 sqlite3.Xsqlite3_preupdate_hook(tls, db, func() uintptr { 29281 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 29282 return *(*uintptr)(unsafe.Pointer(&struct { 29283 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, sqlite_int64, sqlite_int64) 29284 }{DbPreUpdateHandler})) 29285 } 29286 return uintptr(0) 29287 }(), pDb) 29288 sqlite3.Xsqlite3_update_hook(tls, db, func() uintptr { 29289 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 29290 return *(*uintptr)(unsafe.Pointer(&struct { 29291 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, sqlite_int64) 29292 }{DbUpdateHandler})) 29293 } 29294 return uintptr(0) 29295 }(), pDb) 29296 sqlite3.Xsqlite3_rollback_hook(tls, db, func() uintptr { 29297 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 29298 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbRollbackHandler})) 29299 } 29300 return uintptr(0) 29301 }(), pDb) 29302 sqlite3.Xsqlite3_wal_hook(tls, db, func() uintptr { 29303 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 29304 return *(*uintptr)(unsafe.Pointer(&struct { 29305 f func(*libc.TLS, uintptr, uintptr, uintptr, int32) int32 29306 }{DbWalHandler})) 29307 } 29308 return uintptr(0) 29309 }(), pDb) 29310 } 29311 29312 func DbObjCmd(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29313 bp := tls.Alloc(1588) 29314 defer tls.Free(1588) 29315 *(*uintptr)(unsafe.Pointer(bp + 1464)) = cd 29316 29317 var pDb uintptr 29318 29319 var rc int32 29320 var zAuth uintptr 29321 29322 var zDestFile uintptr 29323 var zSrcDb uintptr 29324 29325 var pBackup uintptr 29326 var zCallback uintptr 29327 29328 var zBusy uintptr 29329 29330 var subCmd uintptr 29331 29332 var pResult uintptr 29333 var pCollate uintptr 29334 var zName uintptr 29335 var zScript uintptr 29336 29337 var _objPtr uintptr 29338 var zCommit uintptr 29339 29340 var pResult1 uintptr 29341 var isComplete int32 29342 29343 var zOpt uintptr 29344 29345 var pResult2 uintptr 29346 var ii int32 29347 var zErr uintptr 29348 var nErr int32 29349 var z uintptr 29350 var zTable uintptr 29351 var zFile uintptr 29352 var zConflict uintptr 29353 29354 var nCol int32 29355 var nByte int32 29356 var i int32 29357 var j int32 29358 var nSep int32 29359 var nNull int32 29360 var zSql uintptr 29361 var zLine uintptr 29362 var azCol uintptr 29363 var zCommit1 uintptr 29364 var in uintptr 29365 var lineno int32 29366 29367 var pResult3 uintptr 29368 29369 var zSep uintptr 29370 var zNull uintptr 29371 29372 var z1 uintptr 29373 var flags int32 29374 var zSchema uintptr 29375 var pValue uintptr 29376 var pBA uintptr 29377 var pData uintptr 29378 29379 var xrc int32 29380 29381 var i1 int32 29382 29383 var pResult4 uintptr 29384 29385 var i2 int32 29386 29387 var _objPtr1 uintptr 29388 29389 var pRet uintptr 29390 29391 var p uintptr 29392 var pArray uintptr 29393 var pScript uintptr 29394 var evalFlags int32 29395 var zOpt1 uintptr 29396 29397 var z2 uintptr 29398 var n1 int32 29399 var _objPtr2 uintptr 29400 var flags1 int32 29401 var pFunc uintptr 29402 var pScript1 uintptr 29403 var zName1 uintptr 29404 29405 var i3 int32 29406 29407 var isReadonly1 int32 29408 var zDb uintptr 29409 var zTable1 uintptr 29410 var zColumn uintptr 29411 29412 var zNull1 uintptr 29413 var pResult5 uintptr 29414 var rowid Tcl_WideInt 29415 var zProgress uintptr 29416 29417 var zProfile uintptr 29418 29419 var zSrcFile uintptr 29420 var zDestDb uintptr 29421 29422 var pBackup1 uintptr 29423 var nTimeout int32 29424 var needFree int32 29425 var zSchema1 uintptr 29426 29427 var pData1 uintptr 29428 var v2 int32 29429 var zOp uintptr 29430 29431 var pResult6 uintptr 29432 var zTrace uintptr 29433 29434 var _objPtr3 uintptr 29435 var _objPtr4 uintptr 29436 29437 var pError uintptr 29438 29439 var i4 int32 29440 var zTraceV2 uintptr 29441 29442 var wMask Tcl_WideInt 29443 29444 var pScript2 uintptr 29445 var zBegin uintptr 29446 var _objPtr5 uintptr 29447 var xNotify uintptr 29448 var pNotifyArg uintptr 29449 var nCol2 int32 29450 var pRet1 uintptr 29451 var pObj1 uintptr 29452 29453 var ppHook uintptr 29454 29455 var zArg uintptr 29456 var i5 int32 29457 pDb = *(*uintptr)(unsafe.Pointer(bp + 1464)) 29458 rc = TCL_OK 29459 29460 if !(objc < 2) { 29461 goto __1 29462 } 29463 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 29464 return TCL_ERROR 29465 __1: 29466 ; 29467 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&DB_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+11691, 0, bp+1016) != 0) { 29468 goto __2 29469 } 29470 return TCL_ERROR 29471 __2: 29472 ; 29473 switch uint32(*(*int32)(unsafe.Pointer(bp + 1016))) { 29474 case uint32(0): 29475 goto __4 29476 29477 case uint32(1): 29478 goto __5 29479 29480 case uint32(2): 29481 goto __6 29482 29483 case uint32(3): 29484 goto __7 29485 29486 case uint32(4): 29487 goto __8 29488 29489 case uint32(5): 29490 goto __9 29491 29492 case uint32(6): 29493 goto __10 29494 29495 case uint32(7): 29496 goto __11 29497 29498 case uint32(8): 29499 goto __12 29500 29501 case uint32(9): 29502 goto __13 29503 29504 case uint32(10): 29505 goto __14 29506 29507 case uint32(11): 29508 goto __15 29509 29510 case uint32(12): 29511 goto __16 29512 29513 case uint32(13): 29514 goto __17 29515 29516 case uint32(14): 29517 goto __18 29518 29519 case uint32(15): 29520 goto __19 29521 29522 case uint32(16): 29523 goto __20 29524 29525 case uint32(18): 29526 goto __21 29527 case uint32(24): 29528 goto __22 29529 29530 case uint32(17): 29531 goto __23 29532 29533 case uint32(19): 29534 goto __24 29535 29536 case uint32(20): 29537 goto __25 29538 29539 case uint32(21): 29540 goto __26 29541 29542 case uint32(23): 29543 goto __27 29544 29545 case uint32(22): 29546 goto __28 29547 29548 case uint32(27): 29549 goto __29 29550 29551 case uint32(26): 29552 goto __30 29553 29554 case uint32(28): 29555 goto __31 29556 29557 case uint32(29): 29558 goto __32 29559 29560 case uint32(31): 29561 goto __33 29562 29563 case uint32(32): 29564 goto __34 29565 29566 case uint32(33): 29567 goto __35 29568 29569 case uint32(34): 29570 goto __36 29571 29572 case uint32(35): 29573 goto __37 29574 29575 case uint32(36): 29576 goto __38 29577 29578 case uint32(37): 29579 goto __39 29580 29581 case uint32(38): 29582 goto __40 29583 29584 case uint32(25): 29585 goto __41 29586 29587 case uint32(41): 29588 goto __42 29589 case uint32(39): 29590 goto __43 29591 case uint32(30): 29592 goto __44 29593 29594 case uint32(40): 29595 goto __45 29596 } 29597 goto __3 29598 29599 __4: 29600 if !(objc > 3) { 29601 goto __46 29602 } 29603 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29604 return TCL_ERROR 29605 goto __47 29606 __46: 29607 if !(objc == 2) { 29608 goto __48 29609 } 29610 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29611 goto __50 29612 } 29613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, uintptr(0))) 29614 __50: 29615 ; 29616 goto __49 29617 __48: 29618 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29619 goto __51 29620 } 29621 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 29622 __51: 29623 ; 29624 zAuth = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1020) 29625 if !(zAuth != 0 && *(*int32)(unsafe.Pointer(bp + 1020)) > 0) { 29626 goto __52 29627 } 29628 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 29629 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, zAuth, uint64(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 29630 goto __53 29631 __52: 29632 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = uintptr(0) 29633 __53: 29634 ; 29635 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29636 goto __54 29637 } 29638 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29639 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29640 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 29641 }{auth_callback})), pDb) 29642 goto __55 29643 __54: 29644 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29645 __55: 29646 ; 29647 __49: 29648 ; 29649 __47: 29650 ; 29651 goto __3 29652 29653 __5: 29654 if !(objc == 3) { 29655 goto __56 29656 } 29657 zSrcDb = ts + 85 29658 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29659 goto __57 29660 __56: 29661 if !(objc == 4) { 29662 goto __58 29663 } 29664 zSrcDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29665 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 29666 goto __59 29667 __58: 29668 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 29669 return TCL_ERROR 29670 __59: 29671 ; 29672 __57: 29673 ; 29674 rc = sqlite3.Xsqlite3_open_v2(tls, zDestFile, bp+1024, 29675 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 29676 if !(rc != SQLITE_OK) { 29677 goto __60 29678 } 29679 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+11729, 29680 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29681 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29682 return TCL_ERROR 29683 __60: 29684 ; 29685 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 1024)), ts+85, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSrcDb) 29686 if !(pBackup == uintptr(0)) { 29687 goto __61 29688 } 29689 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+11759, 29690 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29691 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29692 return TCL_ERROR 29693 __61: 29694 ; 29695 __62: 29696 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup, 100)) == SQLITE_OK) { 29697 goto __63 29698 } 29699 goto __62 29700 __63: 29701 ; 29702 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 29703 if !(rc == SQLITE_DONE) { 29704 goto __64 29705 } 29706 rc = TCL_OK 29707 goto __65 29708 __64: 29709 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+11759, 29710 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29711 rc = TCL_ERROR 29712 __65: 29713 ; 29714 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29715 goto __3 29716 29717 __6: 29718 if !(objc > 3) { 29719 goto __66 29720 } 29721 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29722 return TCL_ERROR 29723 goto __67 29724 __66: 29725 if !(objc == 2) { 29726 goto __68 29727 } 29728 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 29729 goto __70 29730 } 29731 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+88, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, uintptr(0))) 29732 __70: 29733 ; 29734 goto __69 29735 __68: 29736 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 29737 goto __71 29738 } 29739 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 29740 __71: 29741 ; 29742 zCallback = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1032) 29743 if !(zCallback != 0 && *(*int32)(unsafe.Pointer(bp + 1032)) > 0) { 29744 goto __72 29745 } 29746 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 29747 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, zCallback, uint64(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 29748 goto __73 29749 __72: 29750 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = uintptr(0) 29751 __73: 29752 ; 29753 __69: 29754 ; 29755 __67: 29756 ; 29757 goto __3 29758 29759 __7: 29760 if !(objc > 3) { 29761 goto __74 29762 } 29763 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11775) 29764 return TCL_ERROR 29765 goto __75 29766 __74: 29767 if !(objc == 2) { 29768 goto __76 29769 } 29770 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29771 goto __78 29772 } 29773 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, uintptr(0))) 29774 __78: 29775 ; 29776 goto __77 29777 __76: 29778 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29779 goto __79 29780 } 29781 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 29782 __79: 29783 ; 29784 zBusy = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1036) 29785 if !(zBusy != 0 && *(*int32)(unsafe.Pointer(bp + 1036)) > 0) { 29786 goto __80 29787 } 29788 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 29789 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, zBusy, uint64(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 29790 goto __81 29791 __80: 29792 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = uintptr(0) 29793 __81: 29794 ; 29795 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 29796 goto __82 29797 } 29798 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29799 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29800 f func(*libc.TLS, uintptr, int32) int32 29801 }{DbBusyHandler})), pDb) 29802 goto __83 29803 __82: 29804 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29805 __83: 29806 ; 29807 __77: 29808 ; 29809 __75: 29810 ; 29811 goto __3 29812 29813 __8: 29814 if !(objc <= 2) { 29815 goto __84 29816 } 29817 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+11784) 29818 return TCL_ERROR 29819 __84: 29820 ; 29821 subCmd = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29822 if !(int32(*(*uint8)(unsafe.Pointer(subCmd))) == 'f' && libc.Xstrcmp(tls, subCmd, ts+11803) == 0) { 29823 goto __85 29824 } 29825 if !(objc != 3) { 29826 goto __87 29827 } 29828 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11803) 29829 return TCL_ERROR 29830 goto __88 29831 __87: 29832 flushStmtCache(tls, pDb) 29833 __88: 29834 ; 29835 goto __86 29836 __85: 29837 if !(int32(*(*uint8)(unsafe.Pointer(subCmd))) == 's' && libc.Xstrcmp(tls, subCmd, ts+11809) == 0) { 29838 goto __89 29839 } 29840 if !(objc != 4) { 29841 goto __91 29842 } 29843 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11814) 29844 return TCL_ERROR 29845 goto __92 29846 __91: 29847 if !(TCL_ERROR == tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1040)) { 29848 goto __93 29849 } 29850 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+120, ts+11821, 29851 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)), ts+11838, uintptr(0))) 29852 return TCL_ERROR 29853 goto __94 29854 __93: 29855 if !(*(*int32)(unsafe.Pointer(bp + 1040)) < 0) { 29856 goto __95 29857 } 29858 flushStmtCache(tls, pDb) 29859 *(*int32)(unsafe.Pointer(bp + 1040)) = 0 29860 goto __96 29861 __95: 29862 if !(*(*int32)(unsafe.Pointer(bp + 1040)) > MAX_PREPARED_STMTS) { 29863 goto __97 29864 } 29865 *(*int32)(unsafe.Pointer(bp + 1040)) = MAX_PREPARED_STMTS 29866 __97: 29867 ; 29868 __96: 29869 ; 29870 (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt = *(*int32)(unsafe.Pointer(bp + 1040)) 29871 __94: 29872 ; 29873 __92: 29874 ; 29875 goto __90 29876 __89: 29877 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+152, ts+11851, 29878 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)), ts+11864, 29879 uintptr(0))) 29880 return TCL_ERROR 29881 __90: 29882 ; 29883 __86: 29884 ; 29885 goto __3 29886 29887 __9: 29888 if !(objc != 2) { 29889 goto __98 29890 } 29891 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 29892 return TCL_ERROR 29893 __98: 29894 ; 29895 pResult = tcl.XTcl_GetObjResult(tls, interp) 29896 tcl.XTcl_SetWideIntObj(tls, pResult, sqlite3.Xsqlite3_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 29897 goto __3 29898 29899 __10: 29900 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0))) 29901 goto __3 29902 29903 __11: 29904 if !(objc != 4) { 29905 goto __99 29906 } 29907 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11889) 29908 return TCL_ERROR 29909 __99: 29910 ; 29911 zName = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 29912 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1044) 29913 pCollate = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlCollate{}))+uint64(*(*int32)(unsafe.Pointer(bp + 1044)))+uint64(1))) 29914 if !(pCollate == uintptr(0)) { 29915 goto __100 29916 } 29917 return TCL_ERROR 29918 __100: 29919 ; 29920 (*SqlCollate)(unsafe.Pointer(pCollate)).Finterp = interp 29921 (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 29922 (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript = pCollate + 1*24 29923 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = pCollate 29924 libc.Xmemcpy(tls, (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 1044))+1)) 29925 if !(sqlite3.Xsqlite3_create_collation(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName, SQLITE_UTF8, 29926 pCollate, *(*uintptr)(unsafe.Pointer(&struct { 29927 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 29928 }{tclSqlCollate}))) != 0) { 29929 goto __101 29930 } 29931 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 29932 return TCL_ERROR 29933 __101: 29934 ; 29935 goto __3 29936 29937 __12: 29938 if !(objc != 3) { 29939 goto __102 29940 } 29941 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+10187) 29942 return TCL_ERROR 29943 __102: 29944 ; 29945 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0) { 29946 goto __103 29947 } 29948 __104: 29949 _objPtr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 29950 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1) { 29951 goto __107 29952 } 29953 tcl.XTclFreeObj(tls, _objPtr) 29954 __107: 29955 ; 29956 goto __105 29957 __105: 29958 if 0 != 0 { 29959 goto __104 29960 } 29961 goto __106 29962 __106: 29963 ; 29964 __103: 29965 ; 29966 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29967 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount++ 29968 sqlite3.Xsqlite3_collation_needed(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, pDb, *(*uintptr)(unsafe.Pointer(&struct { 29969 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 29970 }{tclCollateNeeded}))) 29971 goto __3 29972 29973 __13: 29974 if !(objc > 3) { 29975 goto __108 29976 } 29977 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29978 return TCL_ERROR 29979 goto __109 29980 __108: 29981 if !(objc == 2) { 29982 goto __110 29983 } 29984 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29985 goto __112 29986 } 29987 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+184, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, uintptr(0))) 29988 __112: 29989 ; 29990 goto __111 29991 __110: 29992 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 29993 goto __113 29994 } 29995 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 29996 __113: 29997 ; 29998 zCommit = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1048) 29999 if !(zCommit != 0 && *(*int32)(unsafe.Pointer(bp + 1048)) > 0) { 30000 goto __114 30001 } 30002 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 30003 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, zCommit, uint64(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 30004 goto __115 30005 __114: 30006 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = uintptr(0) 30007 __115: 30008 ; 30009 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 30010 goto __116 30011 } 30012 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30013 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30014 f func(*libc.TLS, uintptr) int32 30015 }{DbCommitHandler})), pDb) 30016 goto __117 30017 __116: 30018 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30019 __117: 30020 ; 30021 __111: 30022 ; 30023 __109: 30024 ; 30025 goto __3 30026 30027 __14: 30028 if !(objc != 3) { 30029 goto __118 30030 } 30031 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 30032 return TCL_ERROR 30033 __118: 30034 ; 30035 isComplete = sqlite3.Xsqlite3_complete(tls, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0))) 30036 pResult1 = tcl.XTcl_GetObjResult(tls, interp) 30037 tcl.XTcl_SetIntObj(tls, pResult1, libc.Bool32(isComplete != 0)) 30038 goto __3 30039 30040 __15: 30041 if !(objc > 4) { 30042 goto __119 30043 } 30044 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11901) 30045 return TCL_ERROR 30046 __119: 30047 ; 30048 if !(objc == 2) { 30049 goto __120 30050 } 30051 30052 pResult2 = tcl.XTcl_NewListObj(tls, 0, uintptr(0)) 30053 ii = 0 30054 __122: 30055 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 30056 goto __124 30057 } 30058 *(*int32)(unsafe.Pointer(bp + 1052)) = 0 30059 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+200, -1, bp+1052)) 30060 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 30061 tcl.XTcl_NewStringObj(tls, aDbConfig[ii].FzName, -1)) 30062 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 30063 tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1052)))) 30064 goto __123 30065 __123: 30066 ii++ 30067 goto __122 30068 goto __124 30069 __124: 30070 ; 30071 goto __121 30072 __120: 30073 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30074 *(*int32)(unsafe.Pointer(bp + 1056)) = -1 30075 *(*int32)(unsafe.Pointer(bp + 1060)) = 0 30076 if !(int32(*(*uint8)(unsafe.Pointer(zOpt))) == '-') { 30077 goto __125 30078 } 30079 zOpt++ 30080 __125: 30081 ; 30082 ii = 0 30083 __126: 30084 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 30085 goto __128 30086 } 30087 if !(libc.Xstrcmp(tls, aDbConfig[ii].FzName, zOpt) == 0) { 30088 goto __129 30089 } 30090 goto __128 30091 __129: 30092 ; 30093 goto __127 30094 __127: 30095 ii++ 30096 goto __126 30097 goto __128 30098 __128: 30099 ; 30100 if !(uint64(ii) >= uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 30101 goto __130 30102 } 30103 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+216, ts+11920, zOpt, 30104 ts+11945, uintptr(0))) 30105 return TCL_ERROR 30106 __130: 30107 ; 30108 if !(objc == 4) { 30109 goto __131 30110 } 30111 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1056) != 0) { 30112 goto __132 30113 } 30114 return TCL_ERROR 30115 __132: 30116 ; 30117 __131: 30118 ; 30119 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+248, *(*int32)(unsafe.Pointer(bp + 1056)), bp+1060)) 30120 pResult2 = tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1060))) 30121 __121: 30122 ; 30123 tcl.XTcl_SetObjResult(tls, interp, pResult2) 30124 goto __3 30125 30126 __16: 30127 lineno = 0 30128 if !(objc < 5 || objc > 7) { 30129 goto __133 30130 } 30131 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 30132 ts+11947) 30133 return TCL_ERROR 30134 __133: 30135 ; 30136 if !(objc >= 6) { 30137 goto __134 30138 } 30139 zSep = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8)), uintptr(0)) 30140 goto __135 30141 __134: 30142 zSep = ts + 12009 30143 __135: 30144 ; 30145 if !(objc >= 7) { 30146 goto __136 30147 } 30148 zNull = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8)), uintptr(0)) 30149 goto __137 30150 __136: 30151 zNull = ts + 584 30152 __137: 30153 ; 30154 zConflict = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 30155 zTable = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)) 30156 zFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0)) 30157 nSep = strlen30(tls, zSep) 30158 nNull = strlen30(tls, zNull) 30159 if !(nSep == 0) { 30160 goto __138 30161 } 30162 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+264, ts+12011, 30163 uintptr(0))) 30164 return TCL_ERROR 30165 __138: 30166 ; 30167 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) { 30168 goto __139 30169 } 30170 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+280, ts+12090, zConflict, 30171 ts+12099, uintptr(0))) 30172 return TCL_ERROR 30173 __139: 30174 ; 30175 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+12179, libc.VaList(bp+312, zTable)) 30176 if !(zSql == uintptr(0)) { 30177 goto __140 30178 } 30179 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+320, ts+12198, zTable, uintptr(0))) 30180 return TCL_ERROR 30181 __140: 30182 ; 30183 nByte = strlen30(tls, zSql) 30184 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 30185 sqlite3.Xsqlite3_free(tls, zSql) 30186 if !(rc != 0) { 30187 goto __141 30188 } 30189 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+344, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30190 nCol = 0 30191 goto __142 30192 __141: 30193 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30194 __142: 30195 ; 30196 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30197 if !(nCol == 0) { 30198 goto __143 30199 } 30200 return TCL_ERROR 30201 __143: 30202 ; 30203 zSql = libc.Xmalloc(tls, uint64(nByte+50+nCol*2)) 30204 if !(zSql == uintptr(0)) { 30205 goto __144 30206 } 30207 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+368, ts+12229, uintptr(0))) 30208 return TCL_ERROR 30209 __144: 30210 ; 30211 sqlite3.Xsqlite3_snprintf(tls, nByte+50, zSql, ts+12251, 30212 libc.VaList(bp+384, zConflict, zTable)) 30213 j = strlen30(tls, zSql) 30214 i = 1 30215 __145: 30216 if !(i < nCol) { 30217 goto __147 30218 } 30219 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(',') 30220 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = uint8('?') 30221 goto __146 30222 __146: 30223 i++ 30224 goto __145 30225 goto __147 30226 __147: 30227 ; 30228 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(')') 30229 *(*uint8)(unsafe.Pointer(zSql + uintptr(j))) = uint8(0) 30230 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 30231 libc.Xfree(tls, zSql) 30232 if !(rc != 0) { 30233 goto __148 30234 } 30235 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+400, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30236 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30237 return TCL_ERROR 30238 __148: 30239 ; 30240 in = libc.Xfopen(tls, zFile, ts+4402) 30241 if !(in == uintptr(0)) { 30242 goto __149 30243 } 30244 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+424, ts+12283, zFile, uintptr(0))) 30245 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30246 return TCL_ERROR 30247 __149: 30248 ; 30249 azCol = libc.Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol+1)) 30250 if !(azCol == uintptr(0)) { 30251 goto __150 30252 } 30253 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+448, ts+12229, uintptr(0))) 30254 libc.Xfclose(tls, in) 30255 return TCL_ERROR 30256 __150: 30257 ; 30258 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+12309, uintptr(0), uintptr(0), uintptr(0)) 30259 zCommit1 = ts + 11628 30260 __151: 30261 if !(libc.AssignUintptr(&zLine, local_getline(tls, uintptr(0), in)) != uintptr(0)) { 30262 goto __152 30263 } 30264 lineno++ 30265 *(*uintptr)(unsafe.Pointer(azCol)) = zLine 30266 i = 0 30267 z = zLine 30268 __153: 30269 if !(*(*uint8)(unsafe.Pointer(z)) != 0) { 30270 goto __155 30271 } 30272 if !(int32(*(*uint8)(unsafe.Pointer(z))) == int32(*(*uint8)(unsafe.Pointer(zSep))) && libc.Xstrncmp(tls, z, zSep, uint64(nSep)) == 0) { 30273 goto __156 30274 } 30275 *(*uint8)(unsafe.Pointer(z)) = uint8(0) 30276 i++ 30277 if !(i < nCol) { 30278 goto __157 30279 } 30280 *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)) = z + uintptr(nSep) 30281 z += uintptr(nSep - 1) 30282 __157: 30283 ; 30284 __156: 30285 ; 30286 goto __154 30287 __154: 30288 z++ 30289 goto __153 30290 goto __155 30291 __155: 30292 ; 30293 if !(i+1 != nCol) { 30294 goto __158 30295 } 30296 nErr = strlen30(tls, zFile) + 200 30297 zErr = libc.Xmalloc(tls, uint64(nErr)) 30298 if !(zErr != 0) { 30299 goto __159 30300 } 30301 sqlite3.Xsqlite3_snprintf(tls, nErr, zErr, 30302 ts+12315, 30303 libc.VaList(bp+464, zFile, lineno, nCol, i+1)) 30304 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+496, zErr, uintptr(0))) 30305 libc.Xfree(tls, zErr) 30306 __159: 30307 ; 30308 zCommit1 = ts + 7824 30309 goto __152 30310 __158: 30311 ; 30312 i = 0 30313 __160: 30314 if !(i < nCol) { 30315 goto __162 30316 } 30317 30318 if !(nNull > 0 && libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), zNull) == 0 || 30319 strlen30(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8))) == 0) { 30320 goto __163 30321 } 30322 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1) 30323 goto __164 30324 __163: 30325 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), -1, uintptr(0)) 30326 __164: 30327 ; 30328 goto __161 30329 __161: 30330 i++ 30331 goto __160 30332 goto __162 30333 __162: 30334 ; 30335 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30336 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30337 libc.Xfree(tls, zLine) 30338 if !(rc != SQLITE_OK) { 30339 goto __165 30340 } 30341 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+512, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30342 zCommit1 = ts + 7824 30343 goto __152 30344 __165: 30345 ; 30346 goto __151 30347 __152: 30348 ; 30349 libc.Xfree(tls, azCol) 30350 libc.Xfclose(tls, in) 30351 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30352 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zCommit1, uintptr(0), uintptr(0), uintptr(0)) 30353 30354 if !(int32(*(*uint8)(unsafe.Pointer(zCommit1))) == 'C') { 30355 goto __166 30356 } 30357 30358 pResult3 = tcl.XTcl_GetObjResult(tls, interp) 30359 tcl.XTcl_SetIntObj(tls, pResult3, lineno) 30360 rc = TCL_OK 30361 goto __167 30362 __166: 30363 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]uint8{})), bp+1072, ts+1333, libc.VaList(bp+536, lineno)) 30364 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+544, ts+12375, bp+1072, 30365 uintptr(0))) 30366 rc = TCL_ERROR 30367 __167: 30368 ; 30369 goto __3 30370 30371 __17: 30372 zSchema = uintptr(0) 30373 pValue = uintptr(0) 30374 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = int64(0) 30375 *(*int32)(unsafe.Pointer(bp + 1160)) = 0 30376 30377 if !(objc < 3) { 30378 goto __168 30379 } 30380 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12408) 30381 rc = TCL_ERROR 30382 goto __3 30383 __168: 30384 ; 30385 i1 = 2 30386 __169: 30387 if !(i1 < objc-1) { 30388 goto __171 30389 } 30390 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i1)*8))) 30391 if !(libc.Xstrcmp(tls, z1, ts+12425) == 0 && i1 < objc-2) { 30392 goto __172 30393 } 30394 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1152) 30395 if !(rc != 0) { 30396 goto __173 30397 } 30398 goto deserialize_error 30399 __173: 30400 ; 30401 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 1152)) 30402 goto __170 30403 __172: 30404 ; 30405 if !(libc.Xstrcmp(tls, z1, ts+12434) == 0 && i1 < objc-2) { 30406 goto __174 30407 } 30408 rc = tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1160) 30409 if !(rc != 0) { 30410 goto __175 30411 } 30412 goto deserialize_error 30413 __175: 30414 ; 30415 goto __170 30416 __174: 30417 ; 30418 if !(zSchema == uintptr(0) && i1 == objc-2 && int32(*(*uint8)(unsafe.Pointer(z1))) != '-') { 30419 goto __176 30420 } 30421 zSchema = z1 30422 goto __170 30423 __176: 30424 ; 30425 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+568, ts+12444, z1, uintptr(0))) 30426 rc = TCL_ERROR 30427 goto deserialize_error 30428 goto __170 30429 __170: 30430 i1++ 30431 goto __169 30432 goto __171 30433 __171: 30434 ; 30435 pValue = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30436 pBA = tcl.XTcl_GetByteArrayFromObj(tls, pValue, bp+1164) 30437 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 30438 if !(pData == uintptr(0) && *(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 30439 goto __177 30440 } 30441 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+592, ts+2069, uintptr(0))) 30442 rc = TCL_ERROR 30443 goto __178 30444 __177: 30445 if !(*(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 30446 goto __179 30447 } 30448 libc.Xmemcpy(tls, pData, pBA, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 30449 __179: 30450 ; 30451 if !(*(*int32)(unsafe.Pointer(bp + 1160)) != 0) { 30452 goto __180 30453 } 30454 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY 30455 goto __181 30456 __180: 30457 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE 30458 __181: 30459 ; 30460 xrc = sqlite3.Xsqlite3_deserialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, pData, int64(*(*int32)(unsafe.Pointer(bp + 1164))), int64(*(*int32)(unsafe.Pointer(bp + 1164))), uint32(flags)) 30461 if !(xrc != 0) { 30462 goto __182 30463 } 30464 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+608, ts+12461, uintptr(0))) 30465 rc = TCL_ERROR 30466 __182: 30467 ; 30468 if !(*(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) > int64(0)) { 30469 goto __183 30470 } 30471 sqlite3.Xsqlite3_file_control(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, SQLITE_FCNTL_SIZE_LIMIT, bp+1168) 30472 __183: 30473 ; 30474 __178: 30475 ; 30476 deserialize_error: 30477 goto __3 30478 30479 __18: 30480 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+624, ts+12489, 30481 uintptr(0))) 30482 return TCL_ERROR 30483 30484 __19: 30485 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 30486 goto __3 30487 30488 __20: 30489 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_error_offset(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 30490 goto __3 30491 30492 __21: 30493 __22: 30494 pResult4 = uintptr(0) 30495 if !(objc != 3) { 30496 goto __184 30497 } 30498 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 30499 return TCL_ERROR 30500 __184: 30501 ; 30502 dbEvalInit(tls, bp+1176, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 30503 rc = dbEvalStep(tls, bp+1176) 30504 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 24) { 30505 goto __185 30506 } 30507 if !(rc == TCL_OK) { 30508 goto __187 30509 } 30510 pResult4 = dbEvalColumnValue(tls, bp+1176, 0) 30511 goto __188 30512 __187: 30513 if !(rc == TCL_BREAK) { 30514 goto __189 30515 } 30516 tcl.XTcl_ResetResult(tls, interp) 30517 __189: 30518 ; 30519 __188: 30520 ; 30521 goto __186 30522 __185: 30523 if !(rc == TCL_BREAK || rc == TCL_OK) { 30524 goto __190 30525 } 30526 pResult4 = tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(rc == TCL_OK) != 0)) 30527 __190: 30528 ; 30529 __186: 30530 ; 30531 dbEvalFinalize(tls, bp+1176) 30532 if !(pResult4 != 0) { 30533 goto __191 30534 } 30535 tcl.XTcl_SetObjResult(tls, interp, pResult4) 30536 __191: 30537 ; 30538 if !(rc == TCL_BREAK) { 30539 goto __192 30540 } 30541 rc = TCL_OK 30542 __192: 30543 ; 30544 goto __3 30545 30546 __23: 30547 evalFlags = 0 30548 __193: 30549 if !(objc > 3 && libc.AssignUintptr(&zOpt1, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) != uintptr(0) && int32(*(*uint8)(unsafe.Pointer(zOpt1))) == '-') { 30550 goto __194 30551 } 30552 if !(libc.Xstrcmp(tls, zOpt1, ts+12537) == 0) { 30553 goto __195 30554 } 30555 evalFlags = evalFlags | SQLITE_EVAL_WITHOUTNULLS 30556 goto __196 30557 __195: 30558 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+640, ts+12551, zOpt1, ts+11945, uintptr(0))) 30559 return TCL_ERROR 30560 __196: 30561 ; 30562 objc-- 30563 objv += 8 30564 goto __193 30565 __194: 30566 ; 30567 if !(objc < 3 || objc > 5) { 30568 goto __197 30569 } 30570 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 30571 ts+12569) 30572 return TCL_ERROR 30573 __197: 30574 ; 30575 if !(objc == 3) { 30576 goto __198 30577 } 30578 pRet = tcl.XTcl_NewObj(tls) 30579 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 30580 dbEvalInit(tls, bp+1232, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 30581 __200: 30582 if !(TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, bp+1232))) { 30583 goto __201 30584 } 30585 dbEvalRowInfo(tls, bp+1232, bp+1288, uintptr(0)) 30586 i2 = 0 30587 __202: 30588 if !(i2 < *(*int32)(unsafe.Pointer(bp + 1288))) { 30589 goto __204 30590 } 30591 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, dbEvalColumnValue(tls, bp+1232, i2)) 30592 goto __203 30593 __203: 30594 i2++ 30595 goto __202 30596 goto __204 30597 __204: 30598 ; 30599 goto __200 30600 __201: 30601 ; 30602 dbEvalFinalize(tls, bp+1232) 30603 if !(rc == TCL_BREAK) { 30604 goto __205 30605 } 30606 tcl.XTcl_SetObjResult(tls, interp, pRet) 30607 rc = TCL_OK 30608 __205: 30609 ; 30610 __206: 30611 _objPtr1 = pRet 30612 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr1)).FrefCount, 1) <= 1) { 30613 goto __209 30614 } 30615 tcl.XTclFreeObj(tls, _objPtr1) 30616 __209: 30617 ; 30618 goto __207 30619 __207: 30620 if 0 != 0 { 30621 goto __206 30622 } 30623 goto __208 30624 __208: 30625 ; 30626 goto __199 30627 __198: 30628 pArray = uintptr(0) 30629 30630 if !(objc >= 5 && *(*uint8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))))) != 0) { 30631 goto __210 30632 } 30633 pArray = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 30634 __210: 30635 ; 30636 pScript = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30637 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 30638 30639 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(DbEvalContext{}))) 30640 dbEvalInit(tls, p, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), pArray, evalFlags) 30641 30642 *(*ClientData)(unsafe.Pointer(bp + 1296)) = p 30643 *(*ClientData)(unsafe.Pointer(bp + 1296 + 1*8)) = pScript 30644 rc = DbEvalNextCmd(tls, bp+1296, interp, TCL_OK) 30645 __199: 30646 ; 30647 goto __3 30648 30649 __24: 30650 flags1 = SQLITE_UTF8 30651 *(*int32)(unsafe.Pointer(bp + 1312)) = -1 30652 *(*int32)(unsafe.Pointer(bp + 1368)) = SQLITE_NULL 30653 if !(objc < 4) { 30654 goto __211 30655 } 30656 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12605) 30657 return TCL_ERROR 30658 __211: 30659 ; 30660 i3 = 3 30661 __212: 30662 if !(i3 < objc-1) { 30663 goto __214 30664 } 30665 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8))) 30666 n1 = strlen30(tls, z2) 30667 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12628, uint64(n1)) == 0) { 30668 goto __215 30669 } 30670 if !(i3 == objc-2) { 30671 goto __217 30672 } 30673 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+672, ts+12638, z2, uintptr(0))) 30674 return TCL_ERROR 30675 __217: 30676 ; 30677 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3+1)*8)), bp+1312) != 0) { 30678 goto __218 30679 } 30680 return TCL_ERROR 30681 __218: 30682 ; 30683 if !(*(*int32)(unsafe.Pointer(bp + 1312)) < 0) { 30684 goto __219 30685 } 30686 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+696, ts+12668, 30687 uintptr(0))) 30688 return TCL_ERROR 30689 __219: 30690 ; 30691 i3++ 30692 goto __216 30693 __215: 30694 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12709, uint64(n1)) == 0) { 30695 goto __220 30696 } 30697 flags1 = flags1 | SQLITE_DETERMINISTIC 30698 goto __221 30699 __220: 30700 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12724, uint64(n1)) == 0) { 30701 goto __222 30702 } 30703 flags1 = flags1 | SQLITE_DIRECTONLY 30704 goto __223 30705 __222: 30706 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12736, uint64(n1)) == 0) { 30707 goto __224 30708 } 30709 flags1 = flags1 | SQLITE_INNOCUOUS 30710 goto __225 30711 __224: 30712 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12747, uint64(n1)) == 0) { 30713 goto __226 30714 } 30715 *(*[6]uintptr)(unsafe.Pointer(bp + 1320)) = [6]uintptr{ts + 8470, ts + 12759, ts + 12764, ts + 12769, ts + 12774, uintptr(0)} 30716 30717 if !(i3 == objc-2) { 30718 goto __228 30719 } 30720 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+712, ts+12638, z2, uintptr(0))) 30721 return TCL_ERROR 30722 __228: 30723 ; 30724 i3++ 30725 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8)), bp+1320, int32(unsafe.Sizeof(uintptr(0))), ts+12778, 0, bp+1368) != 0) { 30726 goto __229 30727 } 30728 return TCL_ERROR 30729 __229: 30730 ; 30731 *(*int32)(unsafe.Pointer(bp + 1368))++ 30732 goto __227 30733 __226: 30734 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+736, ts+11851, z2, 30735 ts+12783, uintptr(0))) 30736 return TCL_ERROR 30737 __227: 30738 ; 30739 __225: 30740 ; 30741 __223: 30742 ; 30743 __221: 30744 ; 30745 __216: 30746 ; 30747 goto __213 30748 __213: 30749 i3++ 30750 goto __212 30751 goto __214 30752 __214: 30753 ; 30754 pScript1 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30755 zName1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 30756 pFunc = findSqlFunc(tls, pDb, zName1) 30757 if !(pFunc == uintptr(0)) { 30758 goto __230 30759 } 30760 return TCL_ERROR 30761 __230: 30762 ; 30763 if !((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript != 0) { 30764 goto __231 30765 } 30766 __232: 30767 _objPtr2 = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 30768 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr2)).FrefCount, 1) <= 1) { 30769 goto __235 30770 } 30771 tcl.XTclFreeObj(tls, _objPtr2) 30772 __235: 30773 ; 30774 goto __233 30775 __233: 30776 if 0 != 0 { 30777 goto __232 30778 } 30779 goto __234 30780 __234: 30781 ; 30782 __231: 30783 ; 30784 (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript = pScript1 30785 (*Tcl_Obj)(unsafe.Pointer(pScript1)).FrefCount++ 30786 (*SqlFunc)(unsafe.Pointer(pFunc)).FuseEvalObjv = safeToUseEvalObjv(tls, interp, pScript1) 30787 (*SqlFunc)(unsafe.Pointer(pFunc)).FeType = *(*int32)(unsafe.Pointer(bp + 1368)) 30788 rc = sqlite3.Xsqlite3_create_function(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName1, *(*int32)(unsafe.Pointer(bp + 1312)), flags1, 30789 pFunc, *(*uintptr)(unsafe.Pointer(&struct { 30790 f func(*libc.TLS, uintptr, int32, uintptr) 30791 }{tclSqlFunc})), uintptr(0), uintptr(0)) 30792 if !(rc != SQLITE_OK) { 30793 goto __236 30794 } 30795 rc = TCL_ERROR 30796 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 30797 __236: 30798 ; 30799 goto __3 30800 30801 __25: 30802 isReadonly1 = 0 30803 zDb = ts + 85 30804 30805 if !(objc > 3 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), ts+12434) == 0) { 30806 goto __237 30807 } 30808 isReadonly1 = 1 30809 __237: 30810 ; 30811 if !(objc != 5+isReadonly1 && objc != 6+isReadonly1) { 30812 goto __238 30813 } 30814 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12861) 30815 return TCL_ERROR 30816 __238: 30817 ; 30818 if !(objc == 6+isReadonly1) { 30819 goto __239 30820 } 30821 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(2+isReadonly1)*8))) 30822 __239: 30823 ; 30824 zTable1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8))) 30825 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 30826 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+1376) 30827 30828 if !(rc == TCL_OK) { 30829 goto __240 30830 } 30831 rc = createIncrblobChannel(tls, 30832 interp, pDb, zDb, zTable1, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 1376)), isReadonly1) 30833 __240: 30834 ; 30835 goto __3 30836 30837 __26: 30838 sqlite3.Xsqlite3_interrupt(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30839 goto __3 30840 30841 __27: 30842 if !(objc != 2 && objc != 3) { 30843 goto __241 30844 } 30845 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12897) 30846 return TCL_ERROR 30847 __241: 30848 ; 30849 if !(objc == 3) { 30850 goto __242 30851 } 30852 zNull1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1384) 30853 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0) { 30854 goto __243 30855 } 30856 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 30857 __243: 30858 ; 30859 if !(zNull1 != 0 && *(*int32)(unsafe.Pointer(bp + 1384)) > 0) { 30860 goto __244 30861 } 30862 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1384))+1)) 30863 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, zNull1, uint64(*(*int32)(unsafe.Pointer(bp + 1384)))) 30864 *(*uint8)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FzNull + uintptr(*(*int32)(unsafe.Pointer(bp + 1384))))) = uint8(0) 30865 goto __245 30866 __244: 30867 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = uintptr(0) 30868 __245: 30869 ; 30870 __242: 30871 ; 30872 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, -1)) 30873 goto __3 30874 30875 __28: 30876 if !(objc != 2) { 30877 goto __246 30878 } 30879 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30880 return TCL_ERROR 30881 __246: 30882 ; 30883 rowid = sqlite3.Xsqlite3_last_insert_rowid(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30884 pResult5 = tcl.XTcl_GetObjResult(tls, interp) 30885 tcl.XTcl_SetWideIntObj(tls, pResult5, rowid) 30886 goto __3 30887 30888 __29: 30889 if !(objc == 2) { 30890 goto __247 30891 } 30892 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30893 goto __249 30894 } 30895 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+768, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, uintptr(0))) 30896 __249: 30897 ; 30898 goto __248 30899 __247: 30900 if !(objc == 4) { 30901 goto __250 30902 } 30903 if !(TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1388)) { 30904 goto __252 30905 } 30906 return TCL_ERROR 30907 __252: 30908 ; 30909 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30910 goto __253 30911 } 30912 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 30913 __253: 30914 ; 30915 zProgress = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1392) 30916 if !(zProgress != 0 && *(*int32)(unsafe.Pointer(bp + 1392)) > 0) { 30917 goto __254 30918 } 30919 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 30920 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, zProgress, uint64(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 30921 goto __255 30922 __254: 30923 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = uintptr(0) 30924 __255: 30925 ; 30926 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 30927 goto __256 30928 } 30929 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30930 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1388)), *(*uintptr)(unsafe.Pointer(&struct { 30931 f func(*libc.TLS, uintptr) int32 30932 }{DbProgressHandler})), pDb) 30933 goto __257 30934 __256: 30935 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, 0, uintptr(0), uintptr(0)) 30936 __257: 30937 ; 30938 goto __251 30939 __250: 30940 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12907) 30941 return TCL_ERROR 30942 __251: 30943 ; 30944 __248: 30945 ; 30946 goto __3 30947 30948 __30: 30949 if !(objc > 3) { 30950 goto __258 30951 } 30952 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30953 return TCL_ERROR 30954 goto __259 30955 __258: 30956 if !(objc == 2) { 30957 goto __260 30958 } 30959 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30960 goto __262 30961 } 30962 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+784, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, uintptr(0))) 30963 __262: 30964 ; 30965 goto __261 30966 __260: 30967 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30968 goto __263 30969 } 30970 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 30971 __263: 30972 ; 30973 zProfile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1396) 30974 if !(zProfile != 0 && *(*int32)(unsafe.Pointer(bp + 1396)) > 0) { 30975 goto __264 30976 } 30977 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 30978 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, zProfile, uint64(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 30979 goto __265 30980 __264: 30981 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = uintptr(0) 30982 __265: 30983 ; 30984 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 30985 goto __266 30986 } 30987 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30988 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30989 f func(*libc.TLS, uintptr, uintptr, sqlite_uint64) 30990 }{DbProfileHandler})), pDb) 30991 goto __267 30992 __266: 30993 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30994 __267: 30995 ; 30996 __261: 30997 ; 30998 __259: 30999 ; 31000 goto __3 31001 31002 __31: 31003 if !(objc != 3) { 31004 goto __268 31005 } 31006 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12918) 31007 return TCL_ERROR 31008 __268: 31009 ; 31010 goto __3 31011 31012 __32: 31013 nTimeout = 0 31014 31015 if !(objc == 3) { 31016 goto __269 31017 } 31018 zDestDb = ts + 85 31019 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31020 goto __270 31021 __269: 31022 if !(objc == 4) { 31023 goto __271 31024 } 31025 zDestDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31026 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 31027 goto __272 31028 __271: 31029 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 31030 return TCL_ERROR 31031 __272: 31032 ; 31033 __270: 31034 ; 31035 rc = sqlite3.Xsqlite3_open_v2(tls, zSrcFile, bp+1400, 31036 SQLITE_OPEN_READONLY|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 31037 if !(rc != SQLITE_OK) { 31038 goto __273 31039 } 31040 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+800, ts+12922, 31041 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))), uintptr(0))) 31042 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 31043 return TCL_ERROR 31044 __273: 31045 ; 31046 pBackup1 = sqlite3.Xsqlite3_backup_init(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zDestDb, *(*uintptr)(unsafe.Pointer(bp + 1400)), ts+85) 31047 if !(pBackup1 == uintptr(0)) { 31048 goto __274 31049 } 31050 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+824, ts+12952, 31051 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31052 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 31053 return TCL_ERROR 31054 __274: 31055 ; 31056 __275: 31057 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup1, 100)) == SQLITE_OK || 31058 rc == SQLITE_BUSY) { 31059 goto __276 31060 } 31061 if !(rc == SQLITE_BUSY) { 31062 goto __277 31063 } 31064 if !(libc.PostIncInt32(&nTimeout, 1) >= 3) { 31065 goto __278 31066 } 31067 goto __276 31068 __278: 31069 ; 31070 sqlite3.Xsqlite3_sleep(tls, 100) 31071 __277: 31072 ; 31073 goto __275 31074 __276: 31075 ; 31076 sqlite3.Xsqlite3_backup_finish(tls, pBackup1) 31077 if !(rc == SQLITE_DONE) { 31078 goto __279 31079 } 31080 rc = TCL_OK 31081 goto __280 31082 __279: 31083 if !(rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { 31084 goto __281 31085 } 31086 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+848, ts+12969, 31087 uintptr(0))) 31088 rc = TCL_ERROR 31089 goto __282 31090 __281: 31091 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+864, ts+12952, 31092 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31093 rc = TCL_ERROR 31094 __282: 31095 ; 31096 __280: 31097 ; 31098 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 31099 goto __3 31100 31101 __33: 31102 if objc >= 3 { 31103 zSchema1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31104 } else { 31105 zSchema1 = ts + 85 31106 } 31107 *(*sqlite3_int64)(unsafe.Pointer(bp + 1408)) = int64(0) 31108 if !(objc != 2 && objc != 3) { 31109 goto __283 31110 } 31111 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13006) 31112 rc = TCL_ERROR 31113 goto __284 31114 __283: 31115 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(SQLITE_SERIALIZE_NOCOPY)) 31116 if !(pData1 != 0) { 31117 goto __285 31118 } 31119 needFree = 0 31120 goto __286 31121 __285: 31122 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(0)) 31123 needFree = 1 31124 __286: 31125 ; 31126 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pData1, int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 1408))))) 31127 if !(needFree != 0) { 31128 goto __287 31129 } 31130 sqlite3.Xsqlite3_free(tls, pData1) 31131 __287: 31132 ; 31133 __284: 31134 ; 31135 goto __3 31136 31137 __34: 31138 if !(objc != 3) { 31139 goto __288 31140 } 31141 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13017) 31142 return TCL_ERROR 31143 __288: 31144 ; 31145 zOp = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31146 if !(libc.Xstrcmp(tls, zOp, ts+9485) == 0) { 31147 goto __289 31148 } 31149 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnStep 31150 goto __290 31151 __289: 31152 if !(libc.Xstrcmp(tls, zOp, ts+13039) == 0) { 31153 goto __291 31154 } 31155 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnSort 31156 goto __292 31157 __291: 31158 if !(libc.Xstrcmp(tls, zOp, ts+13044) == 0) { 31159 goto __293 31160 } 31161 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex 31162 goto __294 31163 __293: 31164 if !(libc.Xstrcmp(tls, zOp, ts+13054) == 0) { 31165 goto __295 31166 } 31167 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep 31168 goto __296 31169 __295: 31170 tcl.XTcl_AppendResult(tls, interp, 31171 libc.VaList(bp+888, ts+13061, 31172 uintptr(0))) 31173 return TCL_ERROR 31174 __296: 31175 ; 31176 __294: 31177 ; 31178 __292: 31179 ; 31180 __290: 31181 ; 31182 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, v2)) 31183 goto __3 31184 31185 __35: 31186 if !(objc != 3) { 31187 goto __297 31188 } 31189 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13117) 31190 return TCL_ERROR 31191 __297: 31192 ; 31193 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1416) != 0) { 31194 goto __298 31195 } 31196 return TCL_ERROR 31197 __298: 31198 ; 31199 sqlite3.Xsqlite3_busy_timeout(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1416))) 31200 goto __3 31201 31202 __36: 31203 if !(objc != 2) { 31204 goto __299 31205 } 31206 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 31207 return TCL_ERROR 31208 __299: 31209 ; 31210 pResult6 = tcl.XTcl_GetObjResult(tls, interp) 31211 tcl.XTcl_SetWideIntObj(tls, pResult6, sqlite3.Xsqlite3_total_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 31212 goto __3 31213 31214 __37: 31215 if !(objc > 3) { 31216 goto __300 31217 } 31218 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 31219 return TCL_ERROR 31220 goto __301 31221 __300: 31222 if !(objc == 2) { 31223 goto __302 31224 } 31225 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31226 goto __304 31227 } 31228 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+904, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, uintptr(0))) 31229 __304: 31230 ; 31231 goto __303 31232 __302: 31233 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31234 goto __305 31235 } 31236 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 31237 __305: 31238 ; 31239 zTrace = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1420) 31240 if !(zTrace != 0 && *(*int32)(unsafe.Pointer(bp + 1420)) > 0) { 31241 goto __306 31242 } 31243 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 31244 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, zTrace, uint64(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 31245 goto __307 31246 __306: 31247 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = uintptr(0) 31248 __307: 31249 ; 31250 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31251 goto __308 31252 } 31253 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31254 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 31255 f func(*libc.TLS, uintptr, uintptr) 31256 }{DbTraceHandler})), pDb) 31257 goto __309 31258 __308: 31259 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 31260 __309: 31261 ; 31262 __303: 31263 ; 31264 __301: 31265 ; 31266 goto __3 31267 31268 __38: 31269 if !(objc > 4) { 31270 goto __310 31271 } 31272 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13130) 31273 return TCL_ERROR 31274 goto __311 31275 __310: 31276 if !(objc == 2) { 31277 goto __312 31278 } 31279 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31280 goto __314 31281 } 31282 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+920, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, uintptr(0))) 31283 __314: 31284 ; 31285 goto __313 31286 __312: 31287 wMask = int64(0) 31288 if !(objc == 4) { 31289 goto __315 31290 } 31291 if !(TCL_OK != tcl.XTcl_ListObjLength(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1424)) { 31292 goto __317 31293 } 31294 return TCL_ERROR 31295 __317: 31296 ; 31297 i4 = 0 31298 __318: 31299 if !(i4 < *(*int32)(unsafe.Pointer(bp + 1424))) { 31300 goto __320 31301 } 31302 if !(TCL_OK != tcl.XTcl_ListObjIndex(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), i4, bp+1432)) { 31303 goto __321 31304 } 31305 return TCL_ERROR 31306 __321: 31307 ; 31308 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), uintptr(unsafe.Pointer(&TTYPE_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+13148, 0, bp+1440) != TCL_OK) { 31309 goto __322 31310 } 31311 pError = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, interp)) 31312 (*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount++ 31313 if !(TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), bp+1448)) { 31314 goto __324 31315 } 31316 __326: 31317 _objPtr3 = pError 31318 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr3)).FrefCount, 1) <= 1) { 31319 goto __329 31320 } 31321 tcl.XTclFreeObj(tls, _objPtr3) 31322 __329: 31323 ; 31324 goto __327 31325 __327: 31326 if 0 != 0 { 31327 goto __326 31328 } 31329 goto __328 31330 __328: 31331 ; 31332 wMask = wMask | *(*Tcl_WideInt)(unsafe.Pointer(bp + 1448)) 31333 goto __325 31334 __324: 31335 tcl.XTcl_SetObjResult(tls, interp, pError) 31336 __330: 31337 _objPtr4 = pError 31338 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr4)).FrefCount, 1) <= 1) { 31339 goto __333 31340 } 31341 tcl.XTclFreeObj(tls, _objPtr4) 31342 __333: 31343 ; 31344 goto __331 31345 __331: 31346 if 0 != 0 { 31347 goto __330 31348 } 31349 goto __332 31350 __332: 31351 ; 31352 return TCL_ERROR 31353 __325: 31354 ; 31355 goto __323 31356 __322: 31357 switch uint32(*(*int32)(unsafe.Pointer(bp + 1440))) { 31358 case uint32(0): 31359 goto __335 31360 case uint32(1): 31361 goto __336 31362 case uint32(2): 31363 goto __337 31364 case uint32(3): 31365 goto __338 31366 } 31367 goto __334 31368 __335: 31369 wMask = wMask | int64(SQLITE_TRACE_STMT) 31370 goto __334 31371 __336: 31372 wMask = wMask | int64(SQLITE_TRACE_PROFILE) 31373 goto __334 31374 __337: 31375 wMask = wMask | int64(SQLITE_TRACE_ROW) 31376 goto __334 31377 __338: 31378 wMask = wMask | int64(SQLITE_TRACE_CLOSE) 31379 goto __334 31380 __334: 31381 ; 31382 __323: 31383 ; 31384 goto __319 31385 __319: 31386 i4++ 31387 goto __318 31388 goto __320 31389 __320: 31390 ; 31391 goto __316 31392 __315: 31393 wMask = int64(SQLITE_TRACE_STMT) 31394 __316: 31395 ; 31396 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31397 goto __339 31398 } 31399 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 31400 __339: 31401 ; 31402 zTraceV2 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1424) 31403 if !(zTraceV2 != 0 && *(*int32)(unsafe.Pointer(bp + 1424)) > 0) { 31404 goto __340 31405 } 31406 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 31407 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, zTraceV2, uint64(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 31408 goto __341 31409 __340: 31410 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = uintptr(0) 31411 __341: 31412 ; 31413 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31414 goto __342 31415 } 31416 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31417 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(wMask), *(*uintptr)(unsafe.Pointer(&struct { 31418 f func(*libc.TLS, uint32, uintptr, uintptr, uintptr) int32 31419 }{DbTraceV2Handler})), pDb) 31420 goto __343 31421 __342: 31422 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(0), uintptr(0), uintptr(0)) 31423 __343: 31424 ; 31425 __313: 31426 ; 31427 __311: 31428 ; 31429 goto __3 31430 31431 __39: 31432 zBegin = ts + 13159 31433 if !(objc != 3 && objc != 4) { 31434 goto __344 31435 } 31436 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13186) 31437 return TCL_ERROR 31438 __344: 31439 ; 31440 if !((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0 && objc == 4) { 31441 goto __345 31442 } 31443 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&TTYPE_strs1)), int32(unsafe.Sizeof(uintptr(0))), ts+13200, 0, bp+1456) != 0) { 31444 goto __346 31445 } 31446 return TCL_ERROR 31447 __346: 31448 ; 31449 switch uint32(*(*int32)(unsafe.Pointer(bp + 1456))) { 31450 case uint32(0): 31451 goto __348 31452 case uint32(1): 31453 goto __349 31454 case uint32(2): 31455 goto __350 31456 } 31457 goto __347 31458 __348: 31459 ; 31460 goto __347 31461 __349: 31462 zBegin = ts + 13217 31463 goto __347 31464 __350: 31465 zBegin = ts + 13233 31466 goto __347 31467 __347: 31468 ; 31469 __345: 31470 ; 31471 pScript2 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 31472 31473 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 31474 rc = sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zBegin, uintptr(0), uintptr(0), uintptr(0)) 31475 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 31476 if !(rc != SQLITE_OK) { 31477 goto __351 31478 } 31479 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+936, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31480 return TCL_ERROR 31481 __351: 31482 ; 31483 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction++ 31484 31485 addDatabaseRef(tls, pDb) 31486 if !(DbUseNre(tls) != 0) { 31487 goto __352 31488 } 31489 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31490 f func(*libc.TLS, uintptr, uintptr, int32) int32 31491 }{DbTransPostCmd})), *(*uintptr)(unsafe.Pointer(bp + 1464)), uintptr(0), uintptr(0), uintptr(0)) 31492 tcl.XTcl_NREvalObj(tls, interp, pScript2, 0) 31493 goto __353 31494 __352: 31495 rc = DbTransPostCmd(tls, bp+1464, interp, tcl.XTcl_EvalObjEx(tls, interp, pScript2, 0)) 31496 __353: 31497 ; 31498 goto __3 31499 31500 __40: 31501 if !(objc != 2 && objc != 3) { 31502 goto __354 31503 } 31504 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 31505 rc = TCL_ERROR 31506 goto __355 31507 __354: 31508 xNotify = uintptr(0) 31509 pNotifyArg = uintptr(0) 31510 31511 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify != 0) { 31512 goto __356 31513 } 31514 __357: 31515 _objPtr5 = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 31516 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr5)).FrefCount, 1) <= 1) { 31517 goto __360 31518 } 31519 tcl.XTclFreeObj(tls, _objPtr5) 31520 __360: 31521 ; 31522 goto __358 31523 __358: 31524 if 0 != 0 { 31525 goto __357 31526 } 31527 goto __359 31528 __359: 31529 ; 31530 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 31531 __356: 31532 ; 31533 if !(objc == 3) { 31534 goto __361 31535 } 31536 xNotify = *(*uintptr)(unsafe.Pointer(&struct { 31537 f func(*libc.TLS, uintptr, int32) 31538 }{DbUnlockNotify})) 31539 pNotifyArg = pDb 31540 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 31541 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount++ 31542 __361: 31543 ; 31544 if !(sqlite3.Xsqlite3_unlock_notify(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, xNotify, pNotifyArg) != 0) { 31545 goto __362 31546 } 31547 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+952, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31548 rc = TCL_ERROR 31549 __362: 31550 ; 31551 __355: 31552 ; 31553 goto __3 31554 31555 __41: 31556 if !(objc < 3) { 31557 goto __363 31558 } 31559 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13258) 31560 __363: 31561 ; 31562 if !(tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&azSub)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+1472) != 0) { 31563 goto __364 31564 } 31565 return TCL_ERROR 31566 __364: 31567 ; 31568 switch uint32(*(*int32)(unsafe.Pointer(bp + 1472))) { 31569 case uint32(0): 31570 goto __366 31571 31572 case uint32(2): 31573 goto __367 31574 31575 case uint32(1): 31576 goto __368 31577 31578 case uint32(3): 31579 goto __369 31580 case uint32(4): 31581 goto __370 31582 } 31583 goto __365 31584 __366: 31585 nCol2 = sqlite3.Xsqlite3_preupdate_count(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 31586 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol2)) 31587 goto __365 31588 31589 __367: 31590 if !(objc > 4) { 31591 goto __371 31592 } 31593 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13277) 31594 return TCL_ERROR 31595 __371: 31596 ; 31597 DbHookCmd(tls, interp, pDb, func() uintptr { 31598 if objc == 4 { 31599 return *(*uintptr)(unsafe.Pointer(objv + 3*8)) 31600 } 31601 return uintptr(0) 31602 }(), pDb+112) 31603 goto __365 31604 31605 __368: 31606 if !(objc != 3) { 31607 goto __372 31608 } 31609 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+584) 31610 return TCL_ERROR 31611 __372: 31612 ; 31613 pRet1 = tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_preupdate_depth(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 31614 tcl.XTcl_SetObjResult(tls, interp, pRet1) 31615 goto __365 31616 31617 __369: 31618 __370: 31619 if !(objc != 4) { 31620 goto __373 31621 } 31622 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+13291) 31623 return TCL_ERROR 31624 __373: 31625 ; 31626 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1476) != 0) { 31627 goto __374 31628 } 31629 return TCL_ERROR 31630 __374: 31631 ; 31632 if !(*(*int32)(unsafe.Pointer(bp + 1472)) == 4) { 31633 goto __375 31634 } 31635 rc = sqlite3.Xsqlite3_preupdate_old(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 31636 goto __376 31637 __375: 31638 ; 31639 rc = sqlite3.Xsqlite3_preupdate_new(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 31640 __376: 31641 ; 31642 if !(rc == SQLITE_OK) { 31643 goto __377 31644 } 31645 pObj1 = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1480))), -1) 31646 tcl.XTcl_SetObjResult(tls, interp, pObj1) 31647 goto __378 31648 __377: 31649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+968, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31650 return TCL_ERROR 31651 __378: 31652 ; 31653 __365: 31654 ; 31655 goto __3 31656 31657 __42: 31658 __43: 31659 __44: 31660 ppHook = uintptr(0) 31661 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 41) { 31662 goto __379 31663 } 31664 ppHook = pDb + 128 31665 __379: 31666 ; 31667 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 39) { 31668 goto __380 31669 } 31670 ppHook = pDb + 104 31671 __380: 31672 ; 31673 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 30) { 31674 goto __381 31675 } 31676 ppHook = pDb + 120 31677 __381: 31678 ; 31679 if !(objc > 3) { 31680 goto __382 31681 } 31682 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 31683 return TCL_ERROR 31684 __382: 31685 ; 31686 DbHookCmd(tls, interp, pDb, func() uintptr { 31687 if objc == 3 { 31688 return *(*uintptr)(unsafe.Pointer(objv + 2*8)) 31689 } 31690 return uintptr(0) 31691 }(), ppHook) 31692 goto __3 31693 31694 __45: 31695 i5 = 2 31696 __383: 31697 if !(i5 < objc) { 31698 goto __385 31699 } 31700 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8))) 31701 31702 if !(libc.Xstrcmp(tls, zArg, ts+13297) == 0 && i5+1 < objc) { 31703 goto __386 31704 } 31705 i5++ 31706 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8)), pDb+228) != 0) { 31707 goto __388 31708 } 31709 return TCL_ERROR 31710 __388: 31711 ; 31712 goto __387 31713 __386: 31714 if !(libc.Xstrcmp(tls, zArg, ts+13317) == 0) { 31715 goto __389 31716 } 31717 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+1488, ts+9889, 31718 libc.VaList(bp+984, func() uintptr { 31719 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 31720 return (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpStmt 31721 } 31722 return uintptr(0) 31723 }())) 31724 tcl.XTcl_SetResult(tls, interp, bp+1488, uintptr(1)) 31725 goto __390 31726 __389: 31727 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+992, ts+13332, zArg, uintptr(0))) 31728 return TCL_ERROR 31729 __390: 31730 ; 31731 __387: 31732 ; 31733 goto __384 31734 __384: 31735 i5++ 31736 goto __383 31737 goto __385 31738 __385: 31739 ; 31740 if !(i5 == 2) { 31741 goto __391 31742 } 31743 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_libversion(tls), uintptr(0)) 31744 __391: 31745 ; 31746 goto __3 31747 31748 __3: 31749 ; 31750 return rc 31751 } 31752 31753 type DbConfigChoices = struct { 31754 FzName uintptr 31755 Fop int32 31756 F__ccgo_pad1 [4]byte 31757 } 31758 31759 var DB_strs = [43]uintptr{ 31760 ts + 13351, ts + 13362, ts + 13369, 31761 ts + 13383, ts + 13388, ts + 13394, 31762 ts + 9490, ts + 13402, ts + 13410, 31763 ts + 13427, ts + 13439, ts + 13448, 31764 ts + 13455, ts + 13460, ts + 13472, 31765 ts + 13494, ts + 13504, ts + 4896, 31766 ts + 13516, ts + 13523, ts + 10868, 31767 ts + 13532, ts + 13542, ts + 13560, 31768 ts + 13570, ts + 13580, ts + 13590, 31769 ts + 9564, ts + 13598, ts + 13604, 31770 ts + 13612, ts + 13626, ts + 13636, 31771 ts + 13643, ts + 13651, ts + 13665, 31772 ts + 13671, ts + 13680, ts + 13692, 31773 ts + 13706, ts + 13718, ts + 13726, 31774 uintptr(0), 31775 } 31776 var aDbConfig = [16]DbConfigChoices{ 31777 {FzName: ts + 13735, Fop: SQLITE_DBCONFIG_DEFENSIVE}, 31778 {FzName: ts + 13745, Fop: SQLITE_DBCONFIG_DQS_DDL}, 31779 {FzName: ts + 13753, Fop: SQLITE_DBCONFIG_DQS_DML}, 31780 {FzName: ts + 13761, Fop: SQLITE_DBCONFIG_ENABLE_FKEY}, 31781 {FzName: ts + 13773, Fop: SQLITE_DBCONFIG_ENABLE_QPSG}, 31782 {FzName: ts + 13785, Fop: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 31783 {FzName: ts + 13800, Fop: SQLITE_DBCONFIG_ENABLE_VIEW}, 31784 {FzName: ts + 13812, Fop: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 31785 {FzName: ts + 13827, Fop: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 31786 {FzName: ts + 13846, Fop: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 31787 {FzName: ts + 13865, Fop: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 31788 {FzName: ts + 13880, Fop: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 31789 {FzName: ts + 13897, Fop: SQLITE_DBCONFIG_RESET_DATABASE}, 31790 {FzName: ts + 13912, Fop: SQLITE_DBCONFIG_TRIGGER_EQP}, 31791 {FzName: ts + 13924, Fop: SQLITE_DBCONFIG_TRUSTED_SCHEMA}, 31792 {FzName: ts + 13939, Fop: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 31793 } 31794 var TTYPE_strs = [5]uintptr{ 31795 ts + 13955, ts + 13590, ts + 13965, ts + 9490, uintptr(0), 31796 } 31797 var TTYPE_strs1 = [4]uintptr{ 31798 ts + 13969, ts + 13978, ts + 13988, uintptr(0), 31799 } 31800 var azSub = [6]uintptr{ts + 1965, ts + 13998, ts + 14004, ts + 14009, ts + 14013, uintptr(0)} 31801 31802 func DbObjCmdAdaptor(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31803 return tcl.XTcl_NRCallObjProc(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31804 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31805 }{DbObjCmd})), cd, objc, objv) 31806 } 31807 31808 func sqliteCmdUsage(tls *libc.TLS, interp uintptr, objv uintptr) int32 { 31809 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 31810 ts+14017) 31811 return TCL_ERROR 31812 } 31813 31814 func DbMain(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31815 bp := tls.Alloc(336) 31816 defer tls.Free(336) 31817 31818 var p uintptr 31819 var zArg uintptr 31820 var zErrMsg uintptr 31821 var i int32 31822 var zFile uintptr = uintptr(0) 31823 var zVfs uintptr = uintptr(0) 31824 var flags int32 31825 *(*int32)(unsafe.Pointer(bp + 112)) = 1 31826 31827 var rc int32 31828 31829 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX 31830 31831 if objc == 1 { 31832 return sqliteCmdUsage(tls, interp, objv) 31833 } 31834 if objc == 2 { 31835 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 31836 if libc.Xstrcmp(tls, zArg, ts+14163) == 0 { 31837 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_libversion(tls), uintptr(0))) 31838 return TCL_OK 31839 } 31840 if libc.Xstrcmp(tls, zArg, ts+14172) == 0 { 31841 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3_sourceid(tls), uintptr(0))) 31842 return TCL_OK 31843 } 31844 if libc.Xstrcmp(tls, zArg, ts+14182) == 0 { 31845 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+14193, uintptr(0))) 31846 return TCL_OK 31847 } 31848 if int32(*(*uint8)(unsafe.Pointer(zArg))) == '-' { 31849 return sqliteCmdUsage(tls, interp, objv) 31850 } 31851 } 31852 for i = 2; i < objc; i++ { 31853 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 31854 if int32(*(*uint8)(unsafe.Pointer(zArg))) != '-' { 31855 if zFile != uintptr(0) { 31856 return sqliteCmdUsage(tls, interp, objv) 31857 } 31858 zFile = zArg 31859 continue 31860 } 31861 if i == objc-1 { 31862 return sqliteCmdUsage(tls, interp, objv) 31863 } 31864 i++ 31865 if libc.Xstrcmp(tls, zArg, ts+14195) == 0 { 31866 } else if libc.Xstrcmp(tls, zArg, ts+14200) == 0 { 31867 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 31868 } else if libc.Xstrcmp(tls, zArg, ts+12434) == 0 { 31869 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0 { 31870 return TCL_ERROR 31871 } 31872 if *(*int32)(unsafe.Pointer(bp + 88)) != 0 { 31873 flags = flags & libc.CplInt32(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE) 31874 flags = flags | SQLITE_OPEN_READONLY 31875 } else { 31876 flags = flags & libc.CplInt32(SQLITE_OPEN_READONLY) 31877 flags = flags | SQLITE_OPEN_READWRITE 31878 } 31879 } else if libc.Xstrcmp(tls, zArg, ts+14205) == 0 { 31880 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+92) != 0 { 31881 return TCL_ERROR 31882 } 31883 if *(*int32)(unsafe.Pointer(bp + 92)) != 0 && flags&SQLITE_OPEN_READONLY == 0 { 31884 flags = flags | SQLITE_OPEN_CREATE 31885 } else { 31886 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 31887 } 31888 } else if libc.Xstrcmp(tls, zArg, ts+14213) == 0 { 31889 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+96) != 0 { 31890 return TCL_ERROR 31891 } 31892 if *(*int32)(unsafe.Pointer(bp + 96)) != 0 { 31893 flags = flags | SQLITE_OPEN_NOFOLLOW 31894 } else { 31895 flags = flags & libc.CplInt32(SQLITE_OPEN_NOFOLLOW) 31896 } 31897 } else if libc.Xstrcmp(tls, zArg, ts+14223) == 0 { 31898 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+100) != 0 { 31899 return TCL_ERROR 31900 } 31901 if *(*int32)(unsafe.Pointer(bp + 100)) != 0 { 31902 flags = flags | SQLITE_OPEN_NOMUTEX 31903 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31904 } else { 31905 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31906 } 31907 } else if libc.Xstrcmp(tls, zArg, ts+14232) == 0 { 31908 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+104) != 0 { 31909 return TCL_ERROR 31910 } 31911 if *(*int32)(unsafe.Pointer(bp + 104)) != 0 { 31912 flags = flags | SQLITE_OPEN_FULLMUTEX 31913 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 31914 } else { 31915 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 31916 } 31917 } else if libc.Xstrcmp(tls, zArg, ts+14243) == 0 { 31918 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+108) != 0 { 31919 return TCL_ERROR 31920 } 31921 if *(*int32)(unsafe.Pointer(bp + 108)) != 0 { 31922 flags = flags | SQLITE_OPEN_URI 31923 } else { 31924 flags = flags & libc.CplInt32(SQLITE_OPEN_URI) 31925 } 31926 } else if libc.Xstrcmp(tls, zArg, ts+14248) == 0 { 31927 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+112) != 0 { 31928 return TCL_ERROR 31929 } 31930 } else { 31931 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+12444, zArg, uintptr(0))) 31932 return TCL_ERROR 31933 } 31934 } 31935 zErrMsg = uintptr(0) 31936 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqliteDb{}))) 31937 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(SqliteDb{}))) 31938 if zFile == uintptr(0) { 31939 zFile = ts + 584 31940 } 31941 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31942 zFile = tcl.XTcl_TranslateFileName(tls, interp, zFile, bp+120) 31943 } 31944 rc = sqlite3.Xsqlite3_open_v2(tls, zFile, p, flags, zVfs) 31945 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 31946 tcl.XTcl_DStringFree(tls, bp+120) 31947 } 31948 if (*SqliteDb)(unsafe.Pointer(p)).Fdb != 0 { 31949 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) { 31950 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb))) 31951 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) 31952 (*SqliteDb)(unsafe.Pointer(p)).Fdb = uintptr(0) 31953 } 31954 } else { 31955 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+80, sqlite3.Xsqlite3_errstr(tls, rc))) 31956 } 31957 if (*SqliteDb)(unsafe.Pointer(p)).Fdb == uintptr(0) { 31958 tcl.XTcl_SetResult(tls, interp, zErrMsg, uintptr(1)) 31959 tcl.XTcl_Free(tls, p) 31960 sqlite3.Xsqlite3_free(tls, zErrMsg) 31961 return TCL_ERROR 31962 } 31963 (*SqliteDb)(unsafe.Pointer(p)).FmaxStmt = NUM_PREPARED_STMTS 31964 (*SqliteDb)(unsafe.Pointer(p)).FopenFlags = flags & SQLITE_OPEN_URI 31965 (*SqliteDb)(unsafe.Pointer(p)).Finterp = interp 31966 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 31967 if DbUseNre(tls) != 0 { 31968 tcl.XTcl_NRCreateCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31969 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31970 }{DbObjCmdAdaptor})), *(*uintptr)(unsafe.Pointer(&struct { 31971 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31972 }{DbObjCmd})), 31973 p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31974 } else { 31975 tcl.XTcl_CreateObjCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 31976 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31977 }{DbObjCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 31978 } 31979 (*SqliteDb)(unsafe.Pointer(p)).FnRef = 1 31980 return TCL_OK 31981 } 31982 31983 func Sqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 31984 var rc int32 31985 if 1 != 0 { 31986 rc = TCL_OK 31987 } else { 31988 rc = TCL_ERROR 31989 } 31990 if rc == TCL_OK { 31991 tcl.XTcl_CreateObjCommand(tls, interp, ts+14267, *(*uintptr)(unsafe.Pointer(&struct { 31992 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31993 }{DbMain})), uintptr(0), uintptr(0)) 31994 31995 tcl.XTcl_CreateObjCommand(tls, interp, ts+14275, *(*uintptr)(unsafe.Pointer(&struct { 31996 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 31997 }{DbMain})), uintptr(0), uintptr(0)) 31998 rc = tcl.XTcl_PkgProvideEx(tls, interp, ts+14267, ts+14282, uintptr(0)) 31999 } 32000 return rc 32001 } 32002 32003 func Tclsqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 32004 return Sqlite3_Init(tls, interp) 32005 } 32006 32007 func Sqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32008 return TCL_OK 32009 } 32010 32011 func Tclsqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32012 return TCL_OK 32013 } 32014 32015 func Sqlite3_SafeInit(tls *libc.TLS, interp uintptr) int32 { 32016 return TCL_ERROR 32017 } 32018 32019 func Sqlite3_SafeUnload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32020 return TCL_ERROR 32021 } 32022 32023 func Sqlite_Init(tls *libc.TLS, interp uintptr) int32 { 32024 return Sqlite3_Init(tls, interp) 32025 } 32026 32027 func Tclsqlite_Init(tls *libc.TLS, interp uintptr) int32 { 32028 return Sqlite3_Init(tls, interp) 32029 } 32030 32031 func Sqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32032 return TCL_OK 32033 } 32034 32035 func Tclsqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32036 return TCL_OK 32037 } 32038 32039 func tclsh_main_loop(tls *libc.TLS) uintptr { 32040 return uintptr(unsafe.Pointer(&zMainloop)) 32041 } 32042 32043 var zMainloop = *(*[431]uint8)(unsafe.Pointer(ts + 14289)) 32044 32045 func main1(tls *libc.TLS, argc int32, argv uintptr) int32 { 32046 bp := tls.Alloc(64) 32047 defer tls.Free(64) 32048 32049 var interp uintptr 32050 var i int32 32051 var zScript uintptr = uintptr(0) 32052 32053 if libc.Xgetenv(tls, ts+14720) != 0 { 32054 if libc.Xisatty(tls, 0) != 0 && libc.Xisatty(tls, 2) != 0 { 32055 libc.Xfprintf(tls, libc.Xstderr, 32056 ts+14739, 32057 libc.VaList(bp, libc.Xgetpid(tls))) 32058 libc.Xfgetc(tls, libc.Xstdin) 32059 } else { 32060 libc.Xraise(tls, SIGTRAP) 32061 } 32062 } 32063 32064 sqlite3.Xsqlite3_shutdown(tls) 32065 32066 tcl.XTcl_FindExecutable(tls, *(*uintptr)(unsafe.Pointer(argv))) 32067 tcl.XTcl_SetSystemEncoding(tls, uintptr(0), ts+14801) 32068 interp = tcl.XTcl_CreateInterp(tls) 32069 Sqlite3_Init(tls, interp) 32070 32071 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]uint8{})), bp+32, ts+1333, libc.VaList(bp+8, argc-1)) 32072 tcl.XTcl_SetVar2(tls, interp, ts+14807, uintptr(0), bp+32, TCL_GLOBAL_ONLY) 32073 tcl.XTcl_SetVar2(tls, interp, ts+14812, uintptr(0), *(*uintptr)(unsafe.Pointer(argv)), TCL_GLOBAL_ONLY) 32074 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), ts+584, TCL_GLOBAL_ONLY) 32075 for i = 1; i < argc; i++ { 32076 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), TCL_GLOBAL_ONLY|TCL_LIST_ELEMENT|TCL_APPEND_VALUE) 32077 } 32078 zScript = sqlite3TestInit(tls, interp) 32079 if zScript == uintptr(0) { 32080 zScript = tclsh_main_loop(tls) 32081 } 32082 if tcl.XTcl_GlobalEval(tls, interp, zScript) != TCL_OK { 32083 var zInfo uintptr = tcl.XTcl_GetVar2(tls, interp, ts+14823, uintptr(0), TCL_GLOBAL_ONLY) 32084 if zInfo == uintptr(0) { 32085 zInfo = tcl.XTcl_GetStringResult(tls, interp) 32086 } 32087 libc.Xfprintf(tls, libc.Xstderr, ts+14833, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv)), zInfo)) 32088 return 1 32089 } 32090 return 0 32091 } 32092 32093 type sqlite3_value = sqlite3_value1 32094 32095 type sqlite3_context = sqlite3_context1 32096 32097 type _IO_cookie_io_functions_t = struct { 32098 Fread uintptr 32099 Fwrite uintptr 32100 Fseek uintptr 32101 Fclose uintptr 32102 } 32103 32104 type cookie_io_functions_t = _IO_cookie_io_functions_t 32105 type off64_t = int64 32106 type fpos64_t = _G_fpos64_t 32107 type ino64_t = uint64 32108 32109 type fd_set1 = struct{ Ffds_bits [16]int64 } 32110 32111 type blkcnt64_t = int64 32112 type fsblkcnt64_t = uint64 32113 type fsfilcnt64_t = uint64 32114 32115 type comparison_fn_t = uintptr 32116 type PreUpdate = PreUpdate1 32117 32118 type Vdbe = Vdbe1 32119 32120 type Mem = sqlite3_value1 32121 32122 type Op = VdbeOp1 32123 32124 type Bool = uint32 32125 32126 type AuxData1 = struct { 32127 FiAuxOp int32 32128 FiAuxArg int32 32129 FpAux uintptr 32130 FxDeleteAux uintptr 32131 FpNextAux uintptr 32132 } 32133 32134 type AuxData = AuxData1 32135 32136 type VdbeCursor1 = struct { 32137 FeCurType u8 32138 FiDb i8 32139 FnullRow u8 32140 FdeferredMoveto u8 32141 FisTable u8 32142 F__ccgo_pad1 [3]byte 32143 FisEphemeral uint8 32144 F__ccgo_pad2 [1]byte 32145 FseekHit u16 32146 F__ccgo_pad3 [4]byte 32147 Fub struct{ FpBtx uintptr } 32148 FseqCount i64 32149 FcacheStatus u32 32150 FseekResult int32 32151 FpAltCursor uintptr 32152 Fuc struct{ FpCursor uintptr } 32153 FpKeyInfo uintptr 32154 FiHdrOffset u32 32155 FpgnoRoot Pgno 32156 FnField i16 32157 FnHdrParsed u16 32158 F__ccgo_pad4 [4]byte 32159 FmovetoTarget i64 32160 FaOffset uintptr 32161 FaRow uintptr 32162 FpayloadSize u32 32163 FszRow u32 32164 FaType [1]u32 32165 F__ccgo_pad5 [4]byte 32166 } 32167 32168 type VdbeCursor = VdbeCursor1 32169 32170 type VdbeFrame1 = struct { 32171 Fv uintptr 32172 FpParent uintptr 32173 FaOp uintptr 32174 FanExec uintptr 32175 FaMem uintptr 32176 FapCsr uintptr 32177 FaOnce uintptr 32178 Ftoken uintptr 32179 FlastRowid i64 32180 FpAuxData uintptr 32181 FnCursor int32 32182 Fpc int32 32183 FnOp int32 32184 FnMem int32 32185 FnChildMem int32 32186 FnChildCsr int32 32187 FnChange i64 32188 FnDbChange i64 32189 } 32190 32191 type VdbeFrame = VdbeFrame1 32192 32193 type MemValue = struct{ Fr float64 } 32194 32195 type bft = uint32 32196 32197 type ScanStatus1 = struct { 32198 FaddrExplain int32 32199 FaddrLoop int32 32200 FaddrVisit int32 32201 FiSelectID int32 32202 FnEst LogEst 32203 F__ccgo_pad1 [6]byte 32204 FzName uintptr 32205 } 32206 32207 type ScanStatus = ScanStatus1 32208 32209 type DblquoteStr1 = struct { 32210 FpNextStr uintptr 32211 Fz [8]uint8 32212 } 32213 32214 type DblquoteStr = DblquoteStr1 32215 32216 type ValueList1 = struct { 32217 FpCsr uintptr 32218 FpOut uintptr 32219 } 32220 32221 type ValueList = ValueList1 32222 32223 func testHexToInt(tls *libc.TLS, h int32) int32 { 32224 if h >= '0' && h <= '9' { 32225 return h - '0' 32226 } else if h >= 'a' && h <= 'f' { 32227 return h - 'a' + 10 32228 } else { 32229 return h - 'A' + 10 32230 } 32231 return int32(0) 32232 } 32233 32234 func sqlite3TestTextToPtr(tls *libc.TLS, z uintptr) uintptr { 32235 bp := tls.Alloc(20) 32236 defer tls.Free(20) 32237 32238 if int32(*(*uint8)(unsafe.Pointer(z))) == '0' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == 'x' { 32239 z += uintptr(2) 32240 } 32241 *(*u64)(unsafe.Pointer(bp + 8)) = uint64(0) 32242 for *(*uint8)(unsafe.Pointer(z)) != 0 { 32243 *(*u64)(unsafe.Pointer(bp + 8)) = *(*u64)(unsafe.Pointer(bp + 8))<<4 + u64(testHexToInt(tls, int32(*(*uint8)(unsafe.Pointer(z))))) 32244 z++ 32245 } 32246 if uint64(unsafe.Sizeof(uintptr(0))) == uint64(unsafe.Sizeof(u64(0))) { 32247 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 32248 } else { 32249 *(*u32)(unsafe.Pointer(bp + 16)) = u32(*(*u64)(unsafe.Pointer(bp + 8))) 32250 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 32251 } 32252 return *(*uintptr)(unsafe.Pointer(bp)) 32253 } 32254 32255 func get_sqlite_pointer(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 32256 bp := tls.Alloc(212) 32257 defer tls.Free(212) 32258 32259 var p uintptr 32260 32261 if objc != 2 { 32262 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+14841) 32263 return TCL_ERROR 32264 } 32265 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 32266 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 32267 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 32268 return TCL_ERROR 32269 } 32270 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData 32271 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+112, ts+9889, libc.VaList(bp+24, (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb)) 32272 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+112, 0)) 32273 return TCL_OK 32274 } 32275 32276 func getDbPointer(tls *libc.TLS, interp uintptr, zA uintptr, ppDb uintptr) int32 { 32277 bp := tls.Alloc(64) 32278 defer tls.Free(64) 32279 32280 var p uintptr 32281 32282 if tcl.XTcl_GetCommandInfo(tls, interp, zA, bp) != 0 { 32283 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 32284 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 32285 } else { 32286 *(*uintptr)(unsafe.Pointer(ppDb)) = sqlite3TestTextToPtr(tls, zA) 32287 } 32288 return TCL_OK 32289 } 32290 32291 func sqlite3TestErrCode(tls *libc.TLS, interp uintptr, db uintptr, rc int32) int32 { 32292 bp := tls.Alloc(248) 32293 defer tls.Free(248) 32294 32295 if sqlite3.Xsqlite3_threadsafe(tls) == 0 && rc != SQLITE_MISUSE && rc != SQLITE_OK && 32296 sqlite3.Xsqlite3_errcode(tls, db) != rc { 32297 var r2 int32 = sqlite3.Xsqlite3_errcode(tls, db) 32298 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+48, 32299 ts+14879, 32300 libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), rc, sqlite3.Xsqlite3ErrName(tls, r2), r2)) 32301 tcl.XTcl_ResetResult(tls, interp) 32302 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 32303 return 1 32304 } 32305 return 0 32306 } 32307 32308 func getStmtPointer(tls *libc.TLS, interp uintptr, zArg uintptr, ppStmt uintptr) int32 { 32309 *(*uintptr)(unsafe.Pointer(ppStmt)) = sqlite3TestTextToPtr(tls, zArg) 32310 return TCL_OK 32311 } 32312 32313 func sqlite3TestMakePointerStr(tls *libc.TLS, interp uintptr, zPtr uintptr, p uintptr) int32 { 32314 bp := tls.Alloc(8) 32315 defer tls.Free(8) 32316 32317 sqlite3.Xsqlite3_snprintf(tls, 100, zPtr, ts+9889, libc.VaList(bp, p)) 32318 return TCL_OK 32319 } 32320 32321 func exec_printf_cb(tls *libc.TLS, pArg uintptr, argc int32, argv uintptr, name uintptr) int32 { 32322 var str uintptr = pArg 32323 var i int32 32324 32325 if (*Tcl_DString)(unsafe.Pointer(str)).Flength == 0 { 32326 for i = 0; i < argc; i++ { 32327 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 32328 if *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) != 0 { 32329 return *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) 32330 } 32331 return ts + 5846 32332 }()) 32333 } 32334 } 32335 for i = 0; i < argc; i++ { 32336 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 32337 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 32338 return *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 32339 } 32340 return ts + 5846 32341 }()) 32342 } 32343 return 0 32344 } 32345 32346 func test_io_trace(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32347 return TCL_OK 32348 } 32349 32350 func clang_sanitize_address(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32351 var res int32 = 0 32352 if res == 0 && libc.Xgetenv(tls, ts+14937) != uintptr(0) { 32353 res = 1 32354 } 32355 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 32356 return TCL_OK 32357 } 32358 32359 func test_exec_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32360 bp := tls.Alloc(310) 32361 defer tls.Free(310) 32362 32363 var rc int32 32364 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 32365 var zSql uintptr 32366 32367 if argc != 4 { 32368 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32369 ts+14975, 0)) 32370 return TCL_ERROR 32371 } 32372 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 32373 return TCL_ERROR 32374 } 32375 tcl.XTcl_DStringInit(tls, bp+56) 32376 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 32377 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 32378 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32379 }{exec_printf_cb})), bp+56, bp+272) 32380 sqlite3.Xsqlite3_free(tls, zSql) 32381 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 32382 tcl.XTcl_AppendElement(tls, interp, bp+280) 32383 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32384 if rc == SQLITE_OK { 32385 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 32386 } 32387 return *(*uintptr)(unsafe.Pointer(bp + 272)) 32388 }()) 32389 tcl.XTcl_DStringFree(tls, bp+56) 32390 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 32391 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 32392 } 32393 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 32394 return TCL_ERROR 32395 } 32396 return TCL_OK 32397 } 32398 32399 func test_exec_hex(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32400 bp := tls.Alloc(806) 32401 defer tls.Free(806) 32402 32403 var rc int32 32404 var i int32 32405 var j int32 32406 *(*uintptr)(unsafe.Pointer(bp + 768)) = uintptr(0) 32407 var zHex uintptr 32408 32409 if argc != 3 { 32410 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32411 ts+14993, 0)) 32412 return TCL_ERROR 32413 } 32414 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 32415 return TCL_ERROR 32416 } 32417 zHex = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 32418 i = libc.AssignInt32(&j, 0) 32419 __1: 32420 if !(uint64(i) < uint64(unsafe.Sizeof([501]uint8{}))-uint64(1) && *(*uint8)(unsafe.Pointer(zHex + uintptr(j))) != 0) { 32421 goto __3 32422 } 32423 { 32424 if int32(*(*uint8)(unsafe.Pointer(zHex + uintptr(j)))) == '%' && *(*uint8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 && *(*uint8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 { 32425 *(*uint8)(unsafe.Pointer(bp + 48 + uintptr(i))) = uint8(testHexToInt(tls, int32(*(*uint8)(unsafe.Pointer(zHex + uintptr(j+1)))))<<4 + testHexToInt(tls, int32(*(*uint8)(unsafe.Pointer(zHex + uintptr(j+2)))))) 32426 j = j + 2 32427 } else { 32428 *(*uint8)(unsafe.Pointer(bp + 48 + uintptr(i))) = *(*uint8)(unsafe.Pointer(zHex + uintptr(j))) 32429 } 32430 32431 } 32432 goto __2 32433 __2: 32434 i++ 32435 j++ 32436 goto __1 32437 goto __3 32438 __3: 32439 ; 32440 *(*uint8)(unsafe.Pointer(bp + 48 + uintptr(i))) = uint8(0) 32441 tcl.XTcl_DStringInit(tls, bp+552) 32442 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48, *(*uintptr)(unsafe.Pointer(&struct { 32443 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32444 }{exec_printf_cb})), bp+552, bp+768) 32445 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+776, ts+1333, libc.VaList(bp+32, rc)) 32446 tcl.XTcl_AppendElement(tls, interp, bp+776) 32447 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32448 if rc == SQLITE_OK { 32449 return (*Tcl_DString)(unsafe.Pointer(bp + 552)).Fstring 32450 } 32451 return *(*uintptr)(unsafe.Pointer(bp + 768)) 32452 }()) 32453 tcl.XTcl_DStringFree(tls, bp+552) 32454 if *(*uintptr)(unsafe.Pointer(bp + 768)) != 0 { 32455 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 768))) 32456 } 32457 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 40)), rc) != 0 { 32458 return TCL_ERROR 32459 } 32460 return TCL_OK 32461 } 32462 32463 func db_enter(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32464 bp := tls.Alloc(40) 32465 defer tls.Free(40) 32466 32467 if argc != 2 { 32468 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32469 ts+15001, 0)) 32470 return TCL_ERROR 32471 } 32472 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32473 return TCL_ERROR 32474 } 32475 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32476 return TCL_OK 32477 } 32478 32479 func db_leave(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32480 bp := tls.Alloc(40) 32481 defer tls.Free(40) 32482 32483 if argc != 2 { 32484 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32485 ts+15001, 0)) 32486 return TCL_ERROR 32487 } 32488 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32489 return TCL_ERROR 32490 } 32491 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32492 return TCL_OK 32493 } 32494 32495 func test_exec(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32496 bp := tls.Alloc(310) 32497 defer tls.Free(310) 32498 32499 var rc int32 32500 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 32501 var zSql uintptr 32502 var i int32 32503 var j int32 32504 32505 if argc != 3 { 32506 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32507 ts+15005, 0)) 32508 return TCL_ERROR 32509 } 32510 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 32511 return TCL_ERROR 32512 } 32513 tcl.XTcl_DStringInit(tls, bp+56) 32514 zSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 32515 for i = libc.AssignInt32(&j, 0); *(*uint8)(unsafe.Pointer(zSql + uintptr(i))) != 0; { 32516 if int32(*(*uint8)(unsafe.Pointer(zSql + uintptr(i)))) == '%' { 32517 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(testHexToInt(tls, int32(*(*uint8)(unsafe.Pointer(zSql + uintptr(i+1)))))<<4 + testHexToInt(tls, int32(*(*uint8)(unsafe.Pointer(zSql + uintptr(i+2)))))) 32518 i = i + 3 32519 } else { 32520 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&i, 1)))) 32521 } 32522 } 32523 *(*uint8)(unsafe.Pointer(zSql + uintptr(j))) = uint8(0) 32524 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 32525 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32526 }{exec_printf_cb})), bp+56, bp+272) 32527 sqlite3.Xsqlite3_free(tls, zSql) 32528 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 32529 tcl.XTcl_AppendElement(tls, interp, bp+280) 32530 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32531 if rc == SQLITE_OK { 32532 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 32533 } 32534 return *(*uintptr)(unsafe.Pointer(bp + 272)) 32535 }()) 32536 tcl.XTcl_DStringFree(tls, bp+56) 32537 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 32538 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 32539 } 32540 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 32541 return TCL_ERROR 32542 } 32543 return TCL_OK 32544 } 32545 32546 func test_exec_nr(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32547 bp := tls.Alloc(48) 32548 defer tls.Free(48) 32549 32550 var rc int32 32551 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 32552 if argc != 3 { 32553 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32554 ts+15005, 0)) 32555 return TCL_ERROR 32556 } 32557 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32558 return TCL_ERROR 32559 } 32560 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), uintptr(0), uintptr(0), bp+40) 32561 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32562 return TCL_ERROR 32563 } 32564 return TCL_OK 32565 } 32566 32567 func test_mprintf_z(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32568 bp := tls.Alloc(40) 32569 defer tls.Free(40) 32570 32571 var zResult uintptr = uintptr(0) 32572 var i int32 32573 32574 for i = 2; i < argc && (i == 2 || zResult != 0); i++ { 32575 zResult = sqlite3.Xsqlite3_mprintf(tls, ts+15013, libc.VaList(bp, zResult, *(*uintptr)(unsafe.Pointer(argv + 1*8)), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 32576 } 32577 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zResult, 0)) 32578 sqlite3.Xsqlite3_free(tls, zResult) 32579 return TCL_OK 32580 } 32581 32582 func test_mprintf_n(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32583 bp := tls.Alloc(20) 32584 defer tls.Free(20) 32585 32586 var zStr uintptr 32587 *(*int32)(unsafe.Pointer(bp + 16)) = 0 32588 zStr = sqlite3.Xsqlite3_mprintf(tls, ts+15020, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+16)) 32589 sqlite3.Xsqlite3_free(tls, zStr) 32590 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 32591 return TCL_OK 32592 } 32593 32594 func test_snprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32595 bp := tls.Alloc(124) 32596 defer tls.Free(124) 32597 32598 var n int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 32599 var zFormat uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 32600 var a1 int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 32601 if uint64(n) > uint64(unsafe.Sizeof([100]uint8{})) { 32602 n = int32(unsafe.Sizeof([100]uint8{})) 32603 } 32604 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+24, ts+15025, 0) 32605 sqlite3.Xsqlite3_snprintf(tls, n, bp+24, zFormat, libc.VaList(bp, a1)) 32606 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, 0)) 32607 return TCL_OK 32608 } 32609 32610 func test_get_table_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32611 bp := tls.Alloc(350) 32612 defer tls.Free(350) 32613 32614 var rc int32 32615 *(*uintptr)(unsafe.Pointer(bp + 304)) = uintptr(0) 32616 *(*int32)(unsafe.Pointer(bp + 312)) = 0 32617 *(*int32)(unsafe.Pointer(bp + 316)) = 0 32618 32619 var i int32 32620 32621 var zSql uintptr 32622 *(*int32)(unsafe.Pointer(bp + 64)) = -1 32623 if argc == 5 { 32624 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+64) != 0 { 32625 return TCL_ERROR 32626 } 32627 } 32628 if argc != 4 && argc != 5 { 32629 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32630 ts+15052, 0)) 32631 return TCL_ERROR 32632 } 32633 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) != 0 { 32634 return TCL_ERROR 32635 } 32636 tcl.XTcl_DStringInit(tls, bp+80) 32637 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 32638 if argc == 5 { 32639 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, uintptr(0), uintptr(0), bp+304) 32640 } else { 32641 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, bp+312, bp+316, bp+304) 32642 *(*int32)(unsafe.Pointer(bp + 64)) = (*(*int32)(unsafe.Pointer(bp + 312)) + 1) * *(*int32)(unsafe.Pointer(bp + 316)) 32643 } 32644 sqlite3.Xsqlite3_free(tls, zSql) 32645 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+320, ts+1333, libc.VaList(bp+40, rc)) 32646 tcl.XTcl_AppendElement(tls, interp, bp+320) 32647 if rc == SQLITE_OK { 32648 if argc == 4 { 32649 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+320, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 312)))) 32650 tcl.XTcl_AppendElement(tls, interp, bp+320) 32651 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+320, ts+1333, libc.VaList(bp+56, *(*int32)(unsafe.Pointer(bp + 316)))) 32652 tcl.XTcl_AppendElement(tls, interp, bp+320) 32653 } 32654 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 32655 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32656 if *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) != 0 { 32657 return *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) 32658 } 32659 return ts + 5846 32660 }()) 32661 } 32662 } else { 32663 tcl.XTcl_AppendElement(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 304))) 32664 } 32665 sqlite3.Xsqlite3_free_table(tls, *(*uintptr)(unsafe.Pointer(bp + 296))) 32666 if *(*uintptr)(unsafe.Pointer(bp + 304)) != 0 { 32667 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 304))) 32668 } 32669 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 72)), rc) != 0 { 32670 return TCL_ERROR 32671 } 32672 return TCL_OK 32673 } 32674 32675 func test_last_rowid(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32676 bp := tls.Alloc(94) 32677 defer tls.Free(94) 32678 32679 if argc != 2 { 32680 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15078, 0)) 32681 return TCL_ERROR 32682 } 32683 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 32684 return TCL_ERROR 32685 } 32686 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+64, ts+6325, libc.VaList(bp+32, sqlite3.Xsqlite3_last_insert_rowid(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 32687 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 32688 return SQLITE_OK 32689 } 32690 32691 func test_key(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32692 return TCL_OK 32693 } 32694 32695 func test_rekey(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32696 return TCL_OK 32697 } 32698 32699 func sqlite_test_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32700 bp := tls.Alloc(40) 32701 defer tls.Free(40) 32702 32703 var rc int32 32704 if argc != 2 { 32705 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32706 ts+15083, 0)) 32707 return TCL_ERROR 32708 } 32709 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32710 return TCL_ERROR 32711 } 32712 rc = sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32713 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32714 return TCL_OK 32715 } 32716 32717 func sqlite_test_close_v2(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32718 bp := tls.Alloc(40) 32719 defer tls.Free(40) 32720 32721 var rc int32 32722 if argc != 2 { 32723 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32724 ts+15083, 0)) 32725 return TCL_ERROR 32726 } 32727 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32728 return TCL_ERROR 32729 } 32730 rc = sqlite3.Xsqlite3_close_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32731 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32732 return TCL_OK 32733 } 32734 32735 func t1_ifnullFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32736 var i int32 32737 for i = 0; i < argc; i++ { 32738 if SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) { 32739 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 32740 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))), 32741 n, libc.UintptrFromInt32(-1)) 32742 break 32743 } 32744 } 32745 } 32746 32747 func hex8Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 32748 bp := tls.Alloc(208) 32749 defer tls.Free(208) 32750 32751 var z uintptr 32752 var i int32 32753 32754 z = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32755 for i = 0; uint64(i) < uint64(unsafe.Sizeof([200]uint8{}))/uint64(2)-uint64(2) && *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 32756 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([200]uint8{}))-uint64(i*2)), bp+8+uintptr(i*2), ts+6337, libc.VaList(bp, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))))) 32757 } 32758 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = uint8(0) 32759 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 32760 } 32761 32762 func hex16Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 32763 bp := tls.Alloc(408) 32764 defer tls.Free(408) 32765 32766 var z uintptr 32767 var i int32 32768 32769 z = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32770 for i = 0; uint64(i) < uint64(unsafe.Sizeof([400]uint8{}))/uint64(4)-uint64(4) && *(*uint16)(unsafe.Pointer(z + uintptr(i)*2)) != 0; i++ { 32771 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([400]uint8{}))-uint64(i*4)), bp+8+uintptr(i*4), ts+15094, libc.VaList(bp, int32(*(*uint16)(unsafe.Pointer(z + uintptr(i)*2)))&0xff)) 32772 } 32773 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i*4))) = uint8(0) 32774 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 32775 } 32776 32777 type dstr = struct { 32778 FnAlloc int32 32779 FnUsed int32 32780 Fz uintptr 32781 } 32782 32783 func dstrAppend(tls *libc.TLS, p uintptr, z uintptr, divider int32) { 32784 var n int32 = int32(libc.Xstrlen(tls, z)) 32785 if (*dstr)(unsafe.Pointer(p)).FnUsed+n+2 > (*dstr)(unsafe.Pointer(p)).FnAlloc { 32786 var zNew uintptr 32787 (*dstr)(unsafe.Pointer(p)).FnAlloc = (*dstr)(unsafe.Pointer(p)).FnAlloc*2 + n + 200 32788 zNew = sqlite3.Xsqlite3_realloc(tls, (*dstr)(unsafe.Pointer(p)).Fz, (*dstr)(unsafe.Pointer(p)).FnAlloc) 32789 if zNew == uintptr(0) { 32790 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(p)).Fz) 32791 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(dstr{}))) 32792 return 32793 } 32794 (*dstr)(unsafe.Pointer(p)).Fz = zNew 32795 } 32796 if divider != 0 && (*dstr)(unsafe.Pointer(p)).FnUsed > 0 { 32797 *(*uint8)(unsafe.Pointer((*dstr)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*dstr)(unsafe.Pointer(p)).FnUsed, 1)))) = uint8(divider) 32798 } 32799 libc.Xmemcpy(tls, (*dstr)(unsafe.Pointer(p)).Fz+uintptr((*dstr)(unsafe.Pointer(p)).FnUsed), z, uint64(n+1)) 32800 *(*int32)(unsafe.Pointer(p + 4)) += n 32801 } 32802 32803 func execFuncCallback(tls *libc.TLS, pData uintptr, argc int32, argv uintptr, NotUsed uintptr) int32 { 32804 var p uintptr = pData 32805 var i int32 32806 for i = 0; i < argc; i++ { 32807 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) == uintptr(0) { 32808 dstrAppend(tls, p, ts+5846, ' ') 32809 } else { 32810 dstrAppend(tls, p, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ' ') 32811 } 32812 } 32813 return 0 32814 } 32815 32816 func sqlite3ExecFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32817 bp := tls.Alloc(16) 32818 defer tls.Free(16) 32819 32820 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(dstr{}))) 32821 sqlite3.Xsqlite3_exec(tls, sqlite3.Xsqlite3_user_data(tls, context), 32822 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 32823 *(*uintptr)(unsafe.Pointer(&struct { 32824 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32825 }{execFuncCallback})), bp, uintptr(0)) 32826 sqlite3.Xsqlite3_result_text(tls, context, (*dstr)(unsafe.Pointer(bp)).Fz, (*dstr)(unsafe.Pointer(bp)).FnUsed, libc.UintptrFromInt32(-1)) 32827 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(bp)).Fz) 32828 } 32829 32830 func tkt2213Function(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32831 var nText int32 32832 var zText1 uintptr 32833 var zText2 uintptr 32834 var zText3 uintptr 32835 32836 nText = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32837 zText1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32838 zText2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32839 zText3 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32840 32841 if zText1 != zText2 || zText2 != zText3 { 32842 sqlite3.Xsqlite3_result_error(tls, context, ts+15099, -1) 32843 } else { 32844 var zCopy uintptr = sqlite3.Xsqlite3_malloc(tls, nText) 32845 libc.Xmemcpy(tls, zCopy, zText1, uint64(nText)) 32846 sqlite3.Xsqlite3_result_text(tls, context, zCopy, nText, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 32847 } 32848 } 32849 32850 func ptrChngFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32851 var p1 uintptr 32852 var p2 uintptr 32853 var zCmd uintptr 32854 if argc != 4 { 32855 return 32856 } 32857 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 32858 if zCmd == uintptr(0) { 32859 return 32860 } 32861 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32862 p1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32863 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32864 p1 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32865 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32866 p1 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32867 } else { 32868 return 32869 } 32870 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 32871 if zCmd == uintptr(0) { 32872 return 32873 } 32874 if libc.Xstrcmp(tls, zCmd, ts+15127) == 0 { 32875 sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 32876 } else if libc.Xstrcmp(tls, zCmd, ts+15133) == 0 { 32877 sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32878 } else if libc.Xstrcmp(tls, zCmd, ts+15141) == 0 { 32879 } else { 32880 return 32881 } 32882 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 32883 if zCmd == uintptr(0) { 32884 return 32885 } 32886 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 32887 p2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 32888 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 32889 p2 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 32890 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 32891 p2 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 32892 } else { 32893 return 32894 } 32895 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(p1 != p2)) 32896 } 32897 32898 func nondeterministicFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32899 sqlite3.Xsqlite3_result_int(tls, context, libc.PostIncInt32(&cnt, 1)) 32900 } 32901 32902 var cnt int32 = 0 32903 32904 func intrealFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 32905 bp := tls.Alloc(8) 32906 defer tls.Free(8) 32907 32908 var v sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 32909 sqlite3.Xsqlite3_result_int64(tls, context, v) 32910 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_RESULT_INTREAL, libc.VaList(bp, context)) 32911 } 32912 32913 func test_create_function(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32914 bp := tls.Alloc(40) 32915 defer tls.Free(40) 32916 32917 var rc int32 32918 32919 if argc != 2 { 32920 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32921 ts+15078, 0)) 32922 return TCL_ERROR 32923 } 32924 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32925 return TCL_ERROR 32926 } 32927 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15146, -1, SQLITE_UTF8, uintptr(0), 32928 *(*uintptr)(unsafe.Pointer(&struct { 32929 f func(*libc.TLS, uintptr, int32, uintptr) 32930 }{t1_ifnullFunc})), uintptr(0), uintptr(0)) 32931 if rc == SQLITE_OK { 32932 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15157, 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32933 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32934 f func(*libc.TLS, uintptr, int32, uintptr) 32935 }{hex8Func})), uintptr(0), uintptr(0)) 32936 } 32937 if rc == SQLITE_OK { 32938 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15162, 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 32939 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32940 f func(*libc.TLS, uintptr, int32, uintptr) 32941 }{hex16Func})), uintptr(0), uintptr(0)) 32942 } 32943 if rc == SQLITE_OK { 32944 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15168, 1, SQLITE_ANY, uintptr(0), 32945 *(*uintptr)(unsafe.Pointer(&struct { 32946 f func(*libc.TLS, uintptr, int32, uintptr) 32947 }{tkt2213Function})), uintptr(0), uintptr(0)) 32948 } 32949 if rc == SQLITE_OK { 32950 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15180, 4, SQLITE_ANY, uintptr(0), 32951 *(*uintptr)(unsafe.Pointer(&struct { 32952 f func(*libc.TLS, uintptr, int32, uintptr) 32953 }{ptrChngFunction})), uintptr(0), uintptr(0)) 32954 } 32955 32956 if rc == SQLITE_OK { 32957 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15195, -1, SQLITE_UTF8, 32958 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32959 f func(*libc.TLS, uintptr, int32, uintptr) 32960 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32961 } 32962 if rc == SQLITE_OK { 32963 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15204, -1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 32964 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32965 f func(*libc.TLS, uintptr, int32, uintptr) 32966 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 32967 } 32968 32969 if rc == SQLITE_OK { 32970 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15213, 1, SQLITE_UTF8, 32971 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 32972 f func(*libc.TLS, uintptr, int32, uintptr) 32973 }{intrealFunction})), uintptr(0), uintptr(0)) 32974 } 32975 32976 if rc == SQLITE_OK { 32977 var zUtf16 uintptr 32978 var pVal uintptr 32979 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32980 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 32981 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+15221, uint8(SQLITE_UTF8), uintptr(0)) 32982 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 32983 if (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FmallocFailed != 0 { 32984 rc = SQLITE_NOMEM 32985 } else { 32986 rc = sqlite3.Xsqlite3_create_function16(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zUtf16, 32987 1, SQLITE_UTF16, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct { 32988 f func(*libc.TLS, uintptr, int32, uintptr) 32989 }{sqlite3ExecFunc})), uintptr(0), uintptr(0)) 32990 } 32991 sqlite3.Xsqlite3ValueFree(tls, pVal) 32992 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32993 } 32994 32995 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32996 return TCL_ERROR 32997 } 32998 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 32999 return TCL_OK 33000 } 33001 33002 func test_drop_modules(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33003 bp := tls.Alloc(40) 33004 defer tls.Free(40) 33005 33006 if argc < 2 { 33007 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33008 ts+15078, 0)) 33009 return TCL_ERROR 33010 } 33011 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 33012 return TCL_ERROR 33013 } 33014 sqlite3.Xsqlite3_drop_modules(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), func() uintptr { 33015 if argc > 2 { 33016 return argv + uintptr(2)*8 33017 } 33018 return uintptr(0) 33019 }()) 33020 return TCL_OK 33021 } 33022 33023 type t1CountCtx1 = struct{ Fn int32 } 33024 33025 type t1CountCtx = t1CountCtx1 33026 33027 func t1CountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33028 bp := tls.Alloc(9) 33029 defer tls.Free(9) 33030 33031 var p uintptr 33032 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 33033 if (argc == 0 || SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv)))) && p != 0 { 33034 (*t1CountCtx)(unsafe.Pointer(p)).Fn++ 33035 } 33036 if argc > 0 { 33037 var v int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 33038 if v == 40 { 33039 sqlite3.Xsqlite3_result_error(tls, context, ts+15235, -1) 33040 } else if v == 41 { 33041 *(*[9]uint8)(unsafe.Pointer(bp)) = [9]uint8{uint8(0), uint8(0x61), uint8(0), uint8(0x62), uint8(0), uint8(0x63), uint8(0), uint8(0), uint8(0)} 33042 sqlite3.Xsqlite3_result_error16(tls, context, bp+1, -1) 33043 } 33044 } 33045 } 33046 33047 func t1CountFinalize(tls *libc.TLS, context uintptr) { 33048 var p uintptr 33049 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 33050 if p != 0 { 33051 if (*t1CountCtx)(unsafe.Pointer(p)).Fn == 42 { 33052 sqlite3.Xsqlite3_result_error(tls, context, ts+15265, -1) 33053 } else { 33054 sqlite3.Xsqlite3_result_int(tls, context, func() int32 { 33055 if p != 0 { 33056 return (*t1CountCtx)(unsafe.Pointer(p)).Fn 33057 } 33058 return 0 33059 }()) 33060 } 33061 } 33062 } 33063 33064 func legacyCountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33065 } 33066 33067 func legacyCountFinalize(tls *libc.TLS, context uintptr) { 33068 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_aggregate_count(tls, context)) 33069 } 33070 33071 func test_create_aggregate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33072 bp := tls.Alloc(40) 33073 defer tls.Free(40) 33074 33075 var rc int32 33076 if argc != 2 { 33077 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33078 ts+15083, 0)) 33079 return TCL_ERROR 33080 } 33081 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 33082 return TCL_ERROR 33083 } 33084 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 0, SQLITE_UTF8, uintptr(0), uintptr(0), 33085 *(*uintptr)(unsafe.Pointer(&struct { 33086 f func(*libc.TLS, uintptr, int32, uintptr) 33087 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 33088 if rc == SQLITE_OK { 33089 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 1, SQLITE_UTF8, uintptr(0), uintptr(0), 33090 *(*uintptr)(unsafe.Pointer(&struct { 33091 f func(*libc.TLS, uintptr, int32, uintptr) 33092 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 33093 } 33094 if rc == SQLITE_OK { 33095 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15294, 0, SQLITE_ANY, uintptr(0), uintptr(0), 33096 *(*uintptr)(unsafe.Pointer(&struct { 33097 f func(*libc.TLS, uintptr, int32, uintptr) 33098 }{legacyCountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{legacyCountFinalize}))) 33099 } 33100 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 33101 return TCL_ERROR 33102 } 33103 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33104 return TCL_OK 33105 } 33106 33107 func test_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33108 bp := tls.Alloc(40) 33109 defer tls.Free(40) 33110 33111 if argc != 2 { 33112 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33113 ts+15307, 0)) 33114 return TCL_ERROR 33115 } 33116 libc.Xprintf(tls, ts+389, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33117 return TCL_OK 33118 } 33119 33120 func sqlite3_mprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33121 bp := tls.Alloc(84) 33122 defer tls.Free(84) 33123 33124 var i int32 33125 var z uintptr 33126 if argc != 5 { 33127 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33128 ts+15314, 0)) 33129 return TCL_ERROR 33130 } 33131 for i = 2; i < 5; i++ { 33132 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 33133 return TCL_ERROR 33134 } 33135 } 33136 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), *(*int32)(unsafe.Pointer(bp + 72 + 2*4)))) 33137 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33138 sqlite3.Xsqlite3_free(tls, z) 33139 return TCL_OK 33140 } 33141 33142 func sqlite3_mprintf_int64(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33143 bp := tls.Alloc(112) 33144 defer tls.Free(112) 33145 33146 var i int32 33147 33148 var z uintptr 33149 if argc != 5 { 33150 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33151 ts+15314, 0)) 33152 return TCL_ERROR 33153 } 33154 for i = 2; i < 5; i++ { 33155 if sqlite3.Xsqlite3Atoi64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+88+uintptr(i-2)*8, sqlite3.Xsqlite3Strlen30(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))), uint8(SQLITE_UTF8)) != 0 { 33156 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15335, 0)) 33157 return TCL_ERROR 33158 } 33159 } 33160 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+48, *(*sqlite_int64)(unsafe.Pointer(bp + 88)), *(*sqlite_int64)(unsafe.Pointer(bp + 88 + 1*8)), *(*sqlite_int64)(unsafe.Pointer(bp + 88 + 2*8)))) 33161 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33162 sqlite3.Xsqlite3_free(tls, z) 33163 return TCL_OK 33164 } 33165 33166 func sqlite3_mprintf_long(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33167 bp := tls.Alloc(112) 33168 defer tls.Free(112) 33169 33170 var i int32 33171 33172 var z uintptr 33173 if argc != 5 { 33174 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33175 ts+15314, 0)) 33176 return TCL_ERROR 33177 } 33178 for i = 2; i < 5; i++ { 33179 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 33180 return TCL_ERROR 33181 } 33182 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) = int64(*(*int32)(unsafe.Pointer(bp + 72 + uintptr(i-2)*4))) 33183 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) &= int64(uint64(1)<<(uint64(unsafe.Sizeof(int32(0)))*uint64(8)) - uint64(1)) 33184 } 33185 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*int64)(unsafe.Pointer(bp + 88)), *(*int64)(unsafe.Pointer(bp + 88 + 1*8)), *(*int64)(unsafe.Pointer(bp + 88 + 2*8)))) 33186 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33187 sqlite3.Xsqlite3_free(tls, z) 33188 return TCL_OK 33189 } 33190 33191 func sqlite3_mprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33192 bp := tls.Alloc(84) 33193 defer tls.Free(84) 33194 33195 var i int32 33196 var z uintptr 33197 if argc < 4 || argc > 5 { 33198 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33199 ts+15374, 0)) 33200 return TCL_ERROR 33201 } 33202 for i = 2; i < 4; i++ { 33203 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 33204 return TCL_ERROR 33205 } 33206 } 33207 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), func() uintptr { 33208 if argc > 4 { 33209 return *(*uintptr)(unsafe.Pointer(argv + 4*8)) 33210 } 33211 return uintptr(0) 33212 }())) 33213 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33214 sqlite3.Xsqlite3_free(tls, z) 33215 return TCL_OK 33216 } 33217 33218 func sqlite3_snprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33219 bp := tls.Alloc(104) 33220 defer tls.Free(104) 33221 33222 var i int32 33223 33224 var z uintptr 33225 if argc < 5 || argc > 6 { 33226 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33227 ts+15400, 0)) 33228 return TCL_ERROR 33229 } 33230 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+88) != 0 { 33231 return TCL_ERROR 33232 } 33233 if *(*int32)(unsafe.Pointer(bp + 88)) < 0 { 33234 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15430, 0)) 33235 return TCL_ERROR 33236 } 33237 for i = 3; i < 5; i++ { 33238 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+92+uintptr(i-3)*4) != 0 { 33239 return TCL_ERROR 33240 } 33241 } 33242 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 88))+1) 33243 sqlite3.Xsqlite3_snprintf(tls, *(*int32)(unsafe.Pointer(bp + 88)), z, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 92)), *(*int32)(unsafe.Pointer(bp + 92 + 1*4)), func() uintptr { 33244 if argc > 4 { 33245 return *(*uintptr)(unsafe.Pointer(argv + 5*8)) 33246 } 33247 return uintptr(0) 33248 }())) 33249 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33250 sqlite3.Xsqlite3_free(tls, z) 33251 return TCL_OK 33252 } 33253 33254 func sqlite3_mprintf_double(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33255 bp := tls.Alloc(96) 33256 defer tls.Free(96) 33257 33258 var i int32 33259 33260 var z uintptr 33261 if argc != 5 { 33262 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33263 ts+15453, 0)) 33264 return TCL_ERROR 33265 } 33266 for i = 2; i < 4; i++ { 33267 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 33268 return TCL_ERROR 33269 } 33270 } 33271 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+88) != 0 { 33272 return TCL_ERROR 33273 } 33274 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), *(*float64)(unsafe.Pointer(bp + 88)))) 33275 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33276 sqlite3.Xsqlite3_free(tls, z) 33277 return TCL_OK 33278 } 33279 33280 func sqlite3_mprintf_scaled(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33281 bp := tls.Alloc(72) 33282 defer tls.Free(72) 33283 33284 var i int32 33285 33286 var z uintptr 33287 if argc != 4 { 33288 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33289 ts+15477, 0)) 33290 return TCL_ERROR 33291 } 33292 for i = 2; i < 4; i++ { 33293 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+56+uintptr(i-2)*8) != 0 { 33294 return TCL_ERROR 33295 } 33296 } 33297 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*float64)(unsafe.Pointer(bp + 56))**(*float64)(unsafe.Pointer(bp + 56 + 1*8)))) 33298 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 33299 sqlite3.Xsqlite3_free(tls, z) 33300 return TCL_OK 33301 } 33302 33303 func sqlite3_mprintf_stronly(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33304 bp := tls.Alloc(56) 33305 defer tls.Free(56) 33306 33307 var z uintptr 33308 if argc != 3 { 33309 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33310 ts+15500, 0)) 33311 return TCL_ERROR 33312 } 33313 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 33314 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 33315 sqlite3.Xsqlite3_free(tls, z) 33316 return TCL_OK 33317 } 33318 33319 func sqlite3_mprintf_hexdouble(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33320 bp := tls.Alloc(112) 33321 defer tls.Free(112) 33322 33323 var z uintptr 33324 33325 if argc != 3 { 33326 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33327 ts+15500, 0)) 33328 return TCL_ERROR 33329 } 33330 if libc.Xsscanf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), ts+15516, libc.VaList(bp+32, bp+88, bp+92)) != 2 { 33331 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+15525, 0)) 33332 return TCL_ERROR 33333 } 33334 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 88))) 33335 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = *(*sqlite_uint64)(unsafe.Pointer(bp + 104))<<32 + sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 92))) 33336 libc.Xmemcpy(tls, bp+96, bp+104, uint64(unsafe.Sizeof(float64(0)))) 33337 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+64, *(*float64)(unsafe.Pointer(bp + 96)))) 33338 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33339 sqlite3.Xsqlite3_free(tls, z) 33340 return TCL_OK 33341 } 33342 33343 func test_enable_shared(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33344 bp := tls.Alloc(4) 33345 defer tls.Free(4) 33346 33347 var rc int32 33348 33349 var ret int32 = 0 33350 33351 if objc != 2 && objc != 1 { 33352 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15569) 33353 return TCL_ERROR 33354 } 33355 ret = sqlite3.Xsqlite3Config.FsharedCacheEnabled 33356 33357 if objc == 2 { 33358 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 33359 return TCL_ERROR 33360 } 33361 rc = sqlite3.Xsqlite3_enable_shared_cache(tls, *(*int32)(unsafe.Pointer(bp))) 33362 if rc != SQLITE_OK { 33363 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 33364 return TCL_ERROR 33365 } 33366 } 33367 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(ret != 0))) 33368 return TCL_OK 33369 } 33370 33371 func test_extended_result_codes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33372 bp := tls.Alloc(12) 33373 defer tls.Free(12) 33374 33375 if objc != 3 { 33376 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15579) 33377 return TCL_ERROR 33378 } 33379 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33380 return TCL_ERROR 33381 } 33382 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33383 return TCL_ERROR 33384 } 33385 sqlite3.Xsqlite3_extended_result_codes(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 33386 return TCL_OK 33387 } 33388 33389 func test_libversion_number(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33390 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_libversion_number(tls))) 33391 return TCL_OK 33392 } 33393 33394 func test_table_column_metadata(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33395 bp := tls.Alloc(52) 33396 defer tls.Free(52) 33397 33398 var zDb uintptr 33399 var zTbl uintptr 33400 var zCol uintptr 33401 var rc int32 33402 var pRet uintptr 33403 33404 if objc != 5 && objc != 4 { 33405 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15590) 33406 return TCL_ERROR 33407 } 33408 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33409 return TCL_ERROR 33410 } 33411 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33412 zTbl = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 33413 if objc == 5 { 33414 zCol = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 33415 } else { 33416 zCol = uintptr(0) 33417 } 33418 33419 if libc.Xstrlen(tls, zDb) == uint64(0) { 33420 zDb = uintptr(0) 33421 } 33422 33423 rc = sqlite3.Xsqlite3_table_column_metadata(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDb, zTbl, zCol, 33424 bp+24, bp+32, bp+40, bp+44, bp+48) 33425 33426 if rc != SQLITE_OK { 33427 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 33428 return TCL_ERROR 33429 } 33430 33431 pRet = tcl.XTcl_NewObj(tls) 33432 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), -1)) 33433 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), -1)) 33434 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 33435 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 44)))) 33436 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 48)))) 33437 tcl.XTcl_SetObjResult(tls, interp, pRet) 33438 33439 return TCL_OK 33440 } 33441 33442 func blobHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 33443 bp := tls.Alloc(8) 33444 defer tls.Free(8) 33445 33446 var z uintptr 33447 33448 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 33449 if *(*int32)(unsafe.Pointer(bp)) == 0 { 33450 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 33451 } else { 33452 var channel Tcl_Channel 33453 var instanceData ClientData 33454 33455 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 33456 if !(channel != 0) { 33457 return TCL_ERROR 33458 } 33459 33460 tcl.XTcl_Flush(tls, channel) 33461 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 33462 33463 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 33464 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 33465 } 33466 33467 return TCL_OK 33468 } 33469 33470 func test_blob_reopen(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33471 bp := tls.Alloc(16) 33472 defer tls.Free(16) 33473 33474 var rc int32 33475 33476 if objc != 3 { 33477 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15616) 33478 return TCL_ERROR 33479 } 33480 33481 if blobHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 33482 return TCL_ERROR 33483 } 33484 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33485 return TCL_ERROR 33486 } 33487 33488 rc = sqlite3.Xsqlite3_blob_reopen(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 8))) 33489 if rc != SQLITE_OK { 33490 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 33491 } 33492 33493 return func() int32 { 33494 if rc == SQLITE_OK { 33495 return TCL_OK 33496 } 33497 return TCL_ERROR 33498 }() 33499 } 33500 33501 type TestCollationX1 = struct { 33502 Finterp uintptr 33503 FpCmp uintptr 33504 FpDel uintptr 33505 } 33506 33507 type TestCollationX = TestCollationX1 33508 33509 func testCreateCollationDel(tls *libc.TLS, pCtx uintptr) { 33510 var p uintptr = pCtx 33511 33512 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, (*TestCollationX)(unsafe.Pointer(p)).FpDel, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) 33513 if rc != TCL_OK { 33514 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 33515 } 33516 33517 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33518 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpCmp 33519 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33520 tcl.XTclFreeObj(tls, _objPtr) 33521 } 33522 } 33523 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 33524 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpDel 33525 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33526 tcl.XTclFreeObj(tls, _objPtr) 33527 } 33528 } 33529 sqlite3.Xsqlite3_free(tls, p) 33530 } 33531 33532 func testCreateCollationCmp(tls *libc.TLS, pCtx uintptr, nLeft int32, zLeft uintptr, nRight int32, zRight uintptr) int32 { 33533 bp := tls.Alloc(4) 33534 defer tls.Free(4) 33535 33536 var p uintptr = pCtx 33537 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpCmp) 33538 *(*int32)(unsafe.Pointer(bp)) = 0 33539 33540 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 33541 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zLeft, nLeft)) 33542 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zRight, nRight)) 33543 33544 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, pScript, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) || 33545 TCL_OK != tcl.XTcl_GetIntFromObj(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp), bp) { 33546 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 33547 } 33548 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33549 var _objPtr uintptr = pScript 33550 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33551 tcl.XTclFreeObj(tls, _objPtr) 33552 } 33553 } 33554 33555 return *(*int32)(unsafe.Pointer(bp)) 33556 } 33557 33558 func test_create_collation_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33559 bp := tls.Alloc(24) 33560 defer tls.Free(24) 33561 33562 var p uintptr 33563 33564 var rc int32 33565 33566 if objc != 5 { 33567 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15630) 33568 return TCL_ERROR 33569 } 33570 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33571 return TCL_ERROR 33572 } 33573 33574 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TestCollationX{}))) 33575 (*TestCollationX)(unsafe.Pointer(p)).FpCmp = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 33576 (*TestCollationX)(unsafe.Pointer(p)).FpDel = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 33577 (*TestCollationX)(unsafe.Pointer(p)).Finterp = interp 33578 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpCmp)).FrefCount++ 33579 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpDel)).FrefCount++ 33580 33581 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 16, 33582 p, *(*uintptr)(unsafe.Pointer(&struct { 33583 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33584 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 33585 if rc != SQLITE_MISUSE { 33586 tcl.XTcl_AppendResult(tls, interp, 33587 libc.VaList(bp, ts+15663, uintptr(0))) 33588 return TCL_ERROR 33589 } 33590 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), SQLITE_UTF8, 33591 p, *(*uintptr)(unsafe.Pointer(&struct { 33592 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33593 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 33594 return TCL_OK 33595 } 33596 33597 type CreateFunctionV21 = struct { 33598 Finterp uintptr 33599 FpFunc uintptr 33600 FpStep uintptr 33601 FpFinal uintptr 33602 FpDestroy uintptr 33603 } 33604 33605 type CreateFunctionV2 = CreateFunctionV21 33606 33607 func cf2Func(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 33608 } 33609 33610 func cf2Step(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 33611 } 33612 33613 func cf2Final(tls *libc.TLS, ctx uintptr) { 33614 } 33615 33616 func cf2Destroy(tls *libc.TLS, pUser uintptr) { 33617 var p uintptr = pUser 33618 33619 if (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp != 0 && (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33620 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy, 0) 33621 if rc != TCL_OK { 33622 tcl.XTcl_BackgroundError(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp) 33623 } 33624 } 33625 33626 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33627 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33628 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc 33629 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33630 tcl.XTclFreeObj(tls, _objPtr) 33631 } 33632 } 33633 } 33634 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33635 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 33636 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep 33637 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33638 tcl.XTclFreeObj(tls, _objPtr) 33639 } 33640 } 33641 } 33642 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33643 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 33644 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal 33645 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33646 tcl.XTclFreeObj(tls, _objPtr) 33647 } 33648 } 33649 } 33650 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33651 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 33652 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy 33653 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33654 tcl.XTclFreeObj(tls, _objPtr) 33655 } 33656 } 33657 } 33658 sqlite3.Xsqlite3_free(tls, p) 33659 } 33660 33661 func test_create_function_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33662 bp := tls.Alloc(180) 33663 defer tls.Free(180) 33664 33665 var zFunc uintptr 33666 33667 var p uintptr 33668 var i int32 33669 var rc int32 33670 33671 *(*[6]EncTable)(unsafe.Pointer(bp + 32)) = [6]EncTable{ 33672 {FzEnc: ts + 15728, Fenc: SQLITE_UTF8}, 33673 {FzEnc: ts + 15733, Fenc: SQLITE_UTF16}, 33674 {FzEnc: ts + 15739, Fenc: SQLITE_UTF16LE}, 33675 {FzEnc: ts + 15747, Fenc: SQLITE_UTF16BE}, 33676 {FzEnc: ts + 12774, Fenc: SQLITE_ANY}, 33677 {FzEnc: ts + 14193}, 33678 } 33679 33680 if objc < 5 || objc%2 == 0 { 33681 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15755) 33682 return TCL_ERROR 33683 } 33684 33685 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33686 return TCL_ERROR 33687 } 33688 zFunc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33689 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 33690 return TCL_ERROR 33691 } 33692 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+32, int32(unsafe.Sizeof(EncTable{})), 33693 ts+15784, 0, bp+128) != 0 { 33694 return TCL_ERROR 33695 } 33696 *(*int32)(unsafe.Pointer(bp + 128)) = (*EncTable)(unsafe.Pointer(bp + 32 + uintptr(*(*int32)(unsafe.Pointer(bp + 128)))*16)).Fenc 33697 33698 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CreateFunctionV2{}))) 33699 33700 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CreateFunctionV2{}))) 33701 (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp = interp 33702 33703 for i = 5; i < objc; i = i + 2 { 33704 *(*[5]uintptr)(unsafe.Pointer(bp + 136)) = [5]uintptr{ts + 15793, ts + 15799, ts + 15805, ts + 15812, uintptr(0)} 33705 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+136, int32(unsafe.Sizeof(uintptr(0))), ts+15821, 0, bp+176) != 0 { 33706 sqlite3.Xsqlite3_free(tls, p) 33707 return TCL_ERROR 33708 } 33709 33710 switch *(*int32)(unsafe.Pointer(bp + 176)) { 33711 case 0: 33712 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 33713 break 33714 case 1: 33715 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 33716 break 33717 case 2: 33718 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 33719 break 33720 case 3: 33721 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 33722 break 33723 } 33724 } 33725 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33726 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc) 33727 } 33728 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33729 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep) 33730 } 33731 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33732 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal) 33733 } 33734 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33735 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy) 33736 } 33737 33738 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33739 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc)).FrefCount++ 33740 } 33741 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33742 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpStep)).FrefCount++ 33743 } 33744 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33745 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal)).FrefCount++ 33746 } 33747 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33748 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy)).FrefCount++ 33749 } 33750 33751 rc = sqlite3.Xsqlite3_create_function_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zFunc, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 128)), p, 33752 func() uintptr { 33753 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33754 return *(*uintptr)(unsafe.Pointer(&struct { 33755 f func(*libc.TLS, uintptr, int32, uintptr) 33756 }{cf2Func})) 33757 } 33758 return uintptr(0) 33759 }(), 33760 func() uintptr { 33761 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33762 return *(*uintptr)(unsafe.Pointer(&struct { 33763 f func(*libc.TLS, uintptr, int32, uintptr) 33764 }{cf2Step})) 33765 } 33766 return uintptr(0) 33767 }(), 33768 func() uintptr { 33769 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33770 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Final})) 33771 } 33772 return uintptr(0) 33773 }(), 33774 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Destroy}))) 33775 if rc != SQLITE_OK { 33776 tcl.XTcl_ResetResult(tls, interp) 33777 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 33778 return TCL_ERROR 33779 } 33780 return TCL_OK 33781 } 33782 33783 type EncTable = struct { 33784 FzEnc uintptr 33785 Fenc int32 33786 F__ccgo_pad1 [4]byte 33787 } 33788 33789 func test_load_extension(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33790 bp := tls.Alloc(88) 33791 defer tls.Free(88) 33792 33793 var db uintptr 33794 _ = db 33795 var rc int32 33796 var zDb uintptr 33797 var zFile uintptr 33798 _ = zFile 33799 var zProc uintptr = uintptr(0) 33800 _ = zProc 33801 var zErr uintptr = uintptr(0) 33802 33803 if objc != 4 && objc != 3 { 33804 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15828) 33805 return TCL_ERROR 33806 } 33807 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33808 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33809 if objc == 4 { 33810 zProc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 33811 } 33812 33813 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+24) != 0) { 33814 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33815 return TCL_ERROR 33816 } 33817 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)).Fdb 33818 33819 rc = SQLITE_ERROR 33820 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+15850, 0) 33821 _ = zProc 33822 _ = zFile 33823 if rc != SQLITE_OK { 33824 tcl.XTcl_SetResult(tls, interp, func() uintptr { 33825 if zErr != 0 { 33826 return zErr 33827 } 33828 return ts + 584 33829 }(), uintptr(1)) 33830 rc = TCL_ERROR 33831 } else { 33832 rc = TCL_OK 33833 } 33834 sqlite3.Xsqlite3_free(tls, zErr) 33835 33836 return rc 33837 } 33838 33839 func test_enable_load(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33840 bp := tls.Alloc(100) 33841 defer tls.Free(100) 33842 33843 var db uintptr 33844 _ = db 33845 var zDb uintptr 33846 33847 if objc != 3 { 33848 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15892) 33849 return TCL_ERROR 33850 } 33851 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 33852 33853 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+32) != 0) { 33854 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 33855 return TCL_ERROR 33856 } 33857 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 32)).FobjClientData)).Fdb 33858 33859 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+96) != 0 { 33860 return TCL_ERROR 33861 } 33862 33863 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+15850)) 33864 return TCL_ERROR 33865 } 33866 33867 func sqlite_abort(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33868 libc.Xexit(tls, 255) 33869 33870 return TCL_OK 33871 } 33872 33873 func testFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33874 var zArg0 uintptr 33875 __1: 33876 if !(argc >= 2) { 33877 goto __2 33878 } 33879 zArg0 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33880 if !(zArg0 != 0) { 33881 goto __3 33882 } 33883 if !(0 == sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2577)) { 33884 goto __5 33885 } 33886 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33887 goto __6 33888 __5: 33889 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+3973) == 0) { 33890 goto __7 33891 } 33892 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33893 goto __8 33894 __7: 33895 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+15908) == 0) { 33896 goto __9 33897 } 33898 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), -1, 33899 libc.UintptrFromInt32(-1)) 33900 goto __10 33901 __9: 33902 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2562) == 0) { 33903 goto __11 33904 } 33905 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33906 goto __12 33907 __11: 33908 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+7939) == 0) { 33909 goto __13 33910 } 33911 sqlite3.Xsqlite3_result_null(tls, context) 33912 goto __14 33913 __13: 33914 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+10013) == 0) { 33915 goto __15 33916 } 33917 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv + uintptr(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))*8))) 33918 goto __16 33919 __15: 33920 goto error_out 33921 __16: 33922 ; 33923 __14: 33924 ; 33925 __12: 33926 ; 33927 __10: 33928 ; 33929 __8: 33930 ; 33931 __6: 33932 ; 33933 goto __4 33934 __3: 33935 goto error_out 33936 __4: 33937 ; 33938 argc = argc - 2 33939 argv += 8 * uintptr(2) 33940 goto __1 33941 __2: 33942 ; 33943 return 33944 33945 error_out: 33946 sqlite3.Xsqlite3_result_error(tls, context, 33947 ts+15915, -1) 33948 } 33949 33950 func test_register_func(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33951 bp := tls.Alloc(56) 33952 defer tls.Free(56) 33953 33954 var rc int32 33955 if argc != 3 { 33956 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33957 ts+15983, 0)) 33958 return TCL_ERROR 33959 } 33960 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 33961 return TCL_ERROR 33962 } 33963 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), -1, SQLITE_UTF8, uintptr(0), 33964 *(*uintptr)(unsafe.Pointer(&struct { 33965 f func(*libc.TLS, uintptr, int32, uintptr) 33966 }{testFunc})), uintptr(0), uintptr(0)) 33967 if rc != 0 { 33968 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 33969 return TCL_ERROR 33970 } 33971 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 33972 return TCL_ERROR 33973 } 33974 return TCL_OK 33975 } 33976 33977 func test_finalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 33978 bp := tls.Alloc(40) 33979 defer tls.Free(40) 33980 33981 var rc int32 33982 var db uintptr = uintptr(0) 33983 33984 if objc != 2 { 33985 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 33986 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 33987 return TCL_ERROR 33988 } 33989 33990 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 33991 return TCL_ERROR 33992 } 33993 33994 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 { 33995 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33996 } 33997 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33998 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33999 if db != 0 && sqlite3TestErrCode(tls, interp, db, rc) != 0 { 34000 return TCL_ERROR 34001 } 34002 return TCL_OK 34003 } 34004 34005 func test_stmt_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34006 bp := tls.Alloc(16) 34007 defer tls.Free(16) 34008 34009 var iValue int32 34010 var i int32 34011 *(*int32)(unsafe.Pointer(bp + 8)) = 0 34012 34013 var zOpName uintptr 34014 34015 if objc != 4 { 34016 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16009) 34017 return TCL_ERROR 34018 } 34019 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34020 return TCL_ERROR 34021 } 34022 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34023 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 34024 FzName uintptr 34025 Fop int32 34026 F__ccgo_pad1 [4]byte 34027 }{}))); i++ { 34028 if libc.Xstrcmp(tls, aOp[i].FzName, zOpName) == 0 { 34029 *(*int32)(unsafe.Pointer(bp + 8)) = aOp[i].Fop 34030 break 34031 } 34032 } 34033 if i >= int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 34034 FzName uintptr 34035 Fop int32 34036 F__ccgo_pad1 [4]byte 34037 }{}))) { 34038 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 34039 return TCL_ERROR 34040 } 34041 } 34042 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 34043 return TCL_ERROR 34044 } 34045 iValue = sqlite3.Xsqlite3_stmt_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 34046 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iValue)) 34047 return TCL_OK 34048 } 34049 34050 var aOp = [7]struct { 34051 FzName uintptr 34052 Fop int32 34053 F__ccgo_pad1 [4]byte 34054 }{ 34055 {FzName: ts + 16034, Fop: SQLITE_STMTSTATUS_FULLSCAN_STEP}, 34056 {FzName: ts + 16066, Fop: SQLITE_STMTSTATUS_SORT}, 34057 {FzName: ts + 16089, Fop: SQLITE_STMTSTATUS_AUTOINDEX}, 34058 {FzName: ts + 16117, Fop: SQLITE_STMTSTATUS_VM_STEP}, 34059 {FzName: ts + 16143, Fop: SQLITE_STMTSTATUS_REPREPARE}, 34060 {FzName: ts + 16171, Fop: SQLITE_STMTSTATUS_RUN}, 34061 {FzName: ts + 16193, Fop: SQLITE_STMTSTATUS_MEMUSED}, 34062 } 34063 34064 func test_config_sorterref(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34065 bp := tls.Alloc(12) 34066 defer tls.Free(12) 34067 34068 if objc != 2 { 34069 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 34070 return TCL_ERROR 34071 } 34072 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 34073 return TCL_ERROR 34074 } 34075 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_SORTERREF_SIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 34076 return TCL_OK 34077 } 34078 34079 func vfsCurrentTimeInt64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34080 bp := tls.Alloc(8) 34081 defer tls.Free(8) 34082 34083 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 34084 if objc != 1 { 34085 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 34086 return TCL_ERROR 34087 } 34088 (*struct { 34089 f func(*libc.TLS, uintptr, uintptr) int32 34090 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTimeInt64})).f(tls, pVfs, bp) 34091 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*i64)(unsafe.Pointer(bp)))) 34092 return TCL_OK 34093 } 34094 34095 func test_snapshot_get(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34096 bp := tls.Alloc(116) 34097 defer tls.Free(116) 34098 34099 var rc int32 34100 34101 var zName uintptr 34102 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 34103 34104 if objc != 3 { 34105 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 34106 return TCL_ERROR 34107 } 34108 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34109 return TCL_ERROR 34110 } 34111 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34112 34113 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 34114 if rc != SQLITE_OK { 34115 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34116 return TCL_ERROR 34117 } else { 34118 if sqlite3TestMakePointerStr(tls, interp, bp+16, *(*uintptr)(unsafe.Pointer(bp + 8))) != 0 { 34119 return TCL_ERROR 34120 } 34121 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 34122 } 34123 return TCL_OK 34124 } 34125 34126 func test_snapshot_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34127 bp := tls.Alloc(8) 34128 defer tls.Free(8) 34129 34130 var rc int32 34131 34132 var zName uintptr 34133 34134 if objc != 3 { 34135 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 34136 return TCL_ERROR 34137 } 34138 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34139 return TCL_ERROR 34140 } 34141 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34142 34143 rc = sqlite3.Xsqlite3_snapshot_recover(tls, *(*uintptr)(unsafe.Pointer(bp)), zName) 34144 if rc != SQLITE_OK { 34145 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34146 return TCL_ERROR 34147 } else { 34148 tcl.XTcl_ResetResult(tls, interp) 34149 } 34150 return TCL_OK 34151 } 34152 34153 func test_snapshot_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34154 bp := tls.Alloc(8) 34155 defer tls.Free(8) 34156 34157 var rc int32 34158 34159 var zName uintptr 34160 var pSnapshot uintptr 34161 34162 if objc != 4 { 34163 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 34164 return TCL_ERROR 34165 } 34166 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34167 return TCL_ERROR 34168 } 34169 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34170 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)))) 34171 34172 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, pSnapshot) 34173 if rc != SQLITE_OK { 34174 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34175 return TCL_ERROR 34176 } else { 34177 tcl.XTcl_ResetResult(tls, interp) 34178 } 34179 return TCL_OK 34180 } 34181 34182 func test_snapshot_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34183 var pSnapshot uintptr 34184 if objc != 2 { 34185 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16254) 34186 return TCL_ERROR 34187 } 34188 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 34189 sqlite3.Xsqlite3_snapshot_free(tls, pSnapshot) 34190 return TCL_OK 34191 } 34192 34193 func test_snapshot_cmp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34194 var res int32 34195 var p1 uintptr 34196 var p2 uintptr 34197 if objc != 3 { 34198 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 34199 return TCL_ERROR 34200 } 34201 p1 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 34202 p2 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 34203 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 34204 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 34205 return TCL_OK 34206 } 34207 34208 func test_snapshot_get_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34209 bp := tls.Alloc(16) 34210 defer tls.Free(16) 34211 34212 var rc int32 34213 34214 var zName uintptr 34215 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 34216 34217 if objc != 3 { 34218 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 34219 return TCL_ERROR 34220 } 34221 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34222 return TCL_ERROR 34223 } 34224 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34225 34226 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 34227 if rc != SQLITE_OK { 34228 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34229 return TCL_ERROR 34230 } else { 34231 tcl.XTcl_SetObjResult(tls, interp, 34232 tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), int32(unsafe.Sizeof(sqlite3_snapshot{})))) 34233 sqlite3.Xsqlite3_snapshot_free(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 34234 } 34235 return TCL_OK 34236 } 34237 34238 func test_snapshot_open_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34239 bp := tls.Alloc(28) 34240 defer tls.Free(28) 34241 34242 var rc int32 34243 34244 var zName uintptr 34245 var pBlob uintptr 34246 34247 if objc != 4 { 34248 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 34249 return TCL_ERROR 34250 } 34251 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 34252 return TCL_ERROR 34253 } 34254 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34255 pBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) 34256 if uint64(*(*int32)(unsafe.Pointer(bp + 24))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) { 34257 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 34258 return TCL_ERROR 34259 } 34260 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zName, pBlob) 34261 if rc != SQLITE_OK { 34262 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34263 return TCL_ERROR 34264 } 34265 return TCL_OK 34266 } 34267 34268 func test_snapshot_cmp_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34269 bp := tls.Alloc(24) 34270 defer tls.Free(24) 34271 34272 var res int32 34273 var p1 uintptr 34274 var p2 uintptr 34275 34276 if objc != 3 { 34277 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 34278 return TCL_ERROR 34279 } 34280 34281 p1 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 34282 p2 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) 34283 34284 if uint64(*(*int32)(unsafe.Pointer(bp + 16))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) || *(*int32)(unsafe.Pointer(bp + 16)) != *(*int32)(unsafe.Pointer(bp + 20)) { 34285 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 34286 return TCL_ERROR 34287 } 34288 34289 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 34290 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 34291 return TCL_OK 34292 } 34293 34294 func test_delete_database(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34295 var rc int32 34296 var zFile uintptr 34297 if objc != 2 { 34298 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16296) 34299 return TCL_ERROR 34300 } 34301 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34302 rc = sqlite3_delete_database(tls, zFile) 34303 34304 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34305 return TCL_OK 34306 } 34307 34308 func test_atomic_batch_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34309 bp := tls.Alloc(32) 34310 defer tls.Free(32) 34311 34312 var zFile uintptr = uintptr(0) 34313 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 34314 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 34315 var bRes int32 = 0 34316 var dc int32 = 0 34317 var rc int32 34318 34319 if objc != 2 { 34320 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16301) 34321 return TCL_ERROR 34322 } 34323 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34324 34325 rc = sqlite3.Xsqlite3_open(tls, zFile, bp+16) 34326 if rc != SQLITE_OK { 34327 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 34328 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 34329 return TCL_ERROR 34330 } 34331 34332 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 34333 dc = (*struct { 34334 f func(*libc.TLS, uintptr) int32 34335 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)))).FpMethods)).FxDeviceCharacteristics})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 34336 if dc&SQLITE_IOCAP_BATCH_ATOMIC != 0 { 34337 bRes = 1 34338 } 34339 34340 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bRes)) 34341 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 34342 return TCL_OK 34343 } 34344 34345 func test_next_stmt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34346 bp := tls.Alloc(114) 34347 defer tls.Free(114) 34348 34349 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 34350 34351 if objc != 3 { 34352 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34353 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16306, 0)) 34354 return TCL_ERROR 34355 } 34356 34357 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 34358 return TCL_ERROR 34359 } 34360 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+56) != 0 { 34361 return TCL_ERROR 34362 } 34363 *(*uintptr)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_next_stmt(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56))) 34364 if *(*uintptr)(unsafe.Pointer(bp + 56)) != 0 { 34365 if sqlite3TestMakePointerStr(tls, interp, bp+64, *(*uintptr)(unsafe.Pointer(bp + 56))) != 0 { 34366 return TCL_ERROR 34367 } 34368 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+64, 0)) 34369 } 34370 return TCL_OK 34371 } 34372 34373 func test_stmt_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34374 bp := tls.Alloc(40) 34375 defer tls.Free(40) 34376 34377 var rc int32 34378 34379 if objc != 2 { 34380 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34381 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34382 return TCL_ERROR 34383 } 34384 34385 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34386 return TCL_ERROR 34387 } 34388 rc = sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34389 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 34390 return TCL_OK 34391 } 34392 34393 func test_stmt_isexplain(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34394 bp := tls.Alloc(40) 34395 defer tls.Free(40) 34396 34397 var rc int32 34398 34399 if objc != 2 { 34400 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34401 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34402 return TCL_ERROR 34403 } 34404 34405 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34406 return TCL_ERROR 34407 } 34408 rc = sqlite3.Xsqlite3_stmt_isexplain(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34409 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 34410 return TCL_OK 34411 } 34412 34413 func test_stmt_busy(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34414 bp := tls.Alloc(40) 34415 defer tls.Free(40) 34416 34417 var rc int32 34418 34419 if objc != 2 { 34420 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34421 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34422 return TCL_ERROR 34423 } 34424 34425 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34426 return TCL_ERROR 34427 } 34428 rc = sqlite3.Xsqlite3_stmt_busy(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34429 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 34430 return TCL_OK 34431 } 34432 34433 func uses_stmt_journal(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34434 bp := tls.Alloc(40) 34435 defer tls.Free(40) 34436 34437 if objc != 2 { 34438 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34439 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34440 return TCL_ERROR 34441 } 34442 34443 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34444 return TCL_ERROR 34445 } 34446 sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34447 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)) + 200))&0x20>>5) != 0))) 34448 return TCL_OK 34449 } 34450 34451 func test_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34452 bp := tls.Alloc(40) 34453 defer tls.Free(40) 34454 34455 var rc int32 34456 34457 if objc != 2 { 34458 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34459 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34460 return TCL_ERROR 34461 } 34462 34463 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34464 return TCL_ERROR 34465 } 34466 34467 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34468 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 && sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34469 return TCL_ERROR 34470 } 34471 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 34472 34473 return TCL_OK 34474 } 34475 34476 func test_expired(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34477 bp := tls.Alloc(40) 34478 defer tls.Free(40) 34479 34480 if objc != 2 { 34481 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34482 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34483 return TCL_ERROR 34484 } 34485 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34486 return TCL_ERROR 34487 } 34488 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(sqlite3.Xsqlite3_expired(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) != 0))) 34489 return TCL_OK 34490 } 34491 34492 func test_transfer_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34493 bp := tls.Alloc(48) 34494 defer tls.Free(48) 34495 34496 if objc != 3 { 34497 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34498 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16321, 0)) 34499 return TCL_ERROR 34500 } 34501 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34502 return TCL_ERROR 34503 } 34504 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+40) != 0 { 34505 return TCL_ERROR 34506 } 34507 tcl.XTcl_SetObjResult(tls, interp, 34508 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_transfer_bindings(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))))) 34509 return TCL_OK 34510 } 34511 34512 func test_changes(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34513 bp := tls.Alloc(40) 34514 defer tls.Free(40) 34515 34516 if objc != 2 { 34517 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34518 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 34519 return TCL_ERROR 34520 } 34521 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34522 return TCL_ERROR 34523 } 34524 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_changes(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 34525 return TCL_OK 34526 } 34527 34528 var sqlite_static_bind_value uintptr = uintptr(0) 34529 var sqlite_static_bind_nbyte int32 = 0 34530 34531 func test_bind(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34532 bp := tls.Alloc(142) 34533 defer tls.Free(142) 34534 34535 var rc int32 34536 34537 if argc != 5 { 34538 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34539 ts+16340, 0)) 34540 return TCL_ERROR 34541 } 34542 if getStmtPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 34543 return TCL_ERROR 34544 } 34545 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+88) != 0 { 34546 return TCL_ERROR 34547 } 34548 if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+7939) == 0 { 34549 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88))) 34550 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16376) == 0 { 34551 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, -1, uintptr(0)) 34552 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16383) == 0 { 34553 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, 34554 sqlite_static_bind_nbyte, uintptr(0)) 34555 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16397) == 0 { 34556 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), *(*uintptr)(unsafe.Pointer(argv + 3*8)), -1, libc.UintptrFromInt32(-1)) 34557 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16404) == 0 { 34558 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), ts+16411, 10, uintptr(0)) 34559 } else { 34560 tcl.XTcl_AppendResult(tls, interp, 34561 libc.VaList(bp+32, ts+16422, 0)) 34562 return TCL_ERROR 34563 } 34564 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), rc) != 0 { 34565 return TCL_ERROR 34566 } 34567 if rc != 0 { 34568 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+92, ts+16476, libc.VaList(bp+48, rc)) 34569 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 34570 return TCL_ERROR 34571 } 34572 return TCL_OK 34573 } 34574 34575 var pTestCollateInterp uintptr 34576 34577 func test_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 34578 bp := tls.Alloc(4) 34579 defer tls.Free(4) 34580 34581 var i uintptr = pTestCollateInterp 34582 var encin int32 = int32(pCtx) 34583 34584 var n int32 34585 var pVal uintptr 34586 var pX uintptr 34587 34588 pX = tcl.XTcl_NewStringObj(tls, ts+16482, -1) 34589 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34590 34591 switch encin { 34592 case SQLITE_UTF8: 34593 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34594 break 34595 case SQLITE_UTF16LE: 34596 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34597 break 34598 case SQLITE_UTF16BE: 34599 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34600 break 34601 default: 34602 } 34603 34604 sqlite3.Xsqlite3BeginBenignMalloc(tls) 34605 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34606 if pVal != 0 { 34607 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nA, zA, uint8(encin), uintptr(0)) 34608 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 34609 tcl.XTcl_ListObjAppendElement(tls, i, pX, 34610 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 34611 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nB, zB, uint8(encin), uintptr(0)) 34612 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 34613 tcl.XTcl_ListObjAppendElement(tls, i, pX, 34614 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 34615 sqlite3.Xsqlite3ValueFree(tls, pVal) 34616 } 34617 sqlite3.Xsqlite3EndBenignMalloc(tls) 34618 34619 tcl.XTcl_EvalObjEx(tls, i, pX, 0) 34620 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34621 var _objPtr uintptr = pX 34622 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34623 tcl.XTclFreeObj(tls, _objPtr) 34624 } 34625 } 34626 tcl.XTcl_GetIntFromObj(tls, i, tcl.XTcl_GetObjResult(tls, i), bp) 34627 return *(*int32)(unsafe.Pointer(bp)) 34628 } 34629 34630 func test_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34631 bp := tls.Alloc(60) 34632 defer tls.Free(60) 34633 34634 var pVal uintptr 34635 var rc int32 34636 var zUtf16 uintptr 34637 34638 if !(objc != 5) { 34639 goto __1 34640 } 34641 goto bad_args 34642 __1: 34643 ; 34644 pTestCollateInterp = interp 34645 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 34646 goto __2 34647 } 34648 return TCL_ERROR 34649 __2: 34650 ; 34651 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56)) { 34652 goto __3 34653 } 34654 return TCL_ERROR 34655 __3: 34656 ; 34657 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF8, 34658 uintptr(SQLITE_UTF8), func() uintptr { 34659 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 34660 return *(*uintptr)(unsafe.Pointer(&struct { 34661 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34662 }{test_collate_func})) 34663 } 34664 return uintptr(0) 34665 }()) 34666 if !(rc == SQLITE_OK) { 34667 goto __4 34668 } 34669 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+56)) { 34670 goto __5 34671 } 34672 return TCL_ERROR 34673 __5: 34674 ; 34675 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF16LE, 34676 uintptr(SQLITE_UTF16LE), func() uintptr { 34677 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 34678 return *(*uintptr)(unsafe.Pointer(&struct { 34679 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34680 }{test_collate_func})) 34681 } 34682 return uintptr(0) 34683 }()) 34684 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+56)) { 34685 goto __6 34686 } 34687 return TCL_ERROR 34688 __6: 34689 ; 34690 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 34691 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 34692 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+16482, uint8(SQLITE_UTF8), uintptr(0)) 34693 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 34694 if !((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FmallocFailed != 0) { 34695 goto __7 34696 } 34697 rc = SQLITE_NOMEM 34698 goto __8 34699 __7: 34700 rc = sqlite3.Xsqlite3_create_collation16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zUtf16, SQLITE_UTF16BE, 34701 uintptr(SQLITE_UTF16BE), func() uintptr { 34702 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 34703 return *(*uintptr)(unsafe.Pointer(&struct { 34704 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34705 }{test_collate_func})) 34706 } 34707 return uintptr(0) 34708 }()) 34709 __8: 34710 ; 34711 sqlite3.Xsqlite3ValueFree(tls, pVal) 34712 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 34713 __4: 34714 ; 34715 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0) { 34716 goto __9 34717 } 34718 return TCL_ERROR 34719 __9: 34720 ; 34721 if !(rc != SQLITE_OK) { 34722 goto __10 34723 } 34724 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34725 return TCL_ERROR 34726 __10: 34727 ; 34728 return TCL_OK 34729 34730 bad_args: 34731 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+14949, 34732 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 34733 return TCL_ERROR 34734 } 34735 34736 func test_utf16bin_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 34737 var nCmp int32 = func() int32 { 34738 if nA > nB { 34739 return nB 34740 } 34741 return nA 34742 }() 34743 var res int32 = libc.Xmemcmp(tls, zA, zB, uint64(nCmp)) 34744 if res == 0 { 34745 res = nA - nB 34746 } 34747 return res 34748 } 34749 34750 func test_utf16bin_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34751 bp := tls.Alloc(8) 34752 defer tls.Free(8) 34753 34754 var rc int32 34755 34756 if !(objc != 2) { 34757 goto __1 34758 } 34759 goto bad_args 34760 __1: 34761 ; 34762 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 34763 goto __2 34764 } 34765 return TCL_ERROR 34766 __2: 34767 ; 34768 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16552, SQLITE_UTF16, uintptr(0), 34769 *(*uintptr)(unsafe.Pointer(&struct { 34770 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34771 }{test_utf16bin_collate_func}))) 34772 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 34773 goto __3 34774 } 34775 return TCL_ERROR 34776 __3: 34777 ; 34778 return TCL_OK 34779 34780 bad_args: 34781 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 34782 return TCL_ERROR 34783 } 34784 34785 var zNeededCollation [200]uint8 34786 var pzNeededCollation uintptr = 0 34787 34788 func test_collate_needed_cb(tls *libc.TLS, pCtx uintptr, db uintptr, eTextRep int32, pName uintptr) { 34789 var enc int32 = int32((*sqlite31)(unsafe.Pointer(db)).Fenc) 34790 var i int32 34791 var z uintptr 34792 z = pName 34793 i = 0 34794 for ; *(*uint8)(unsafe.Pointer(z)) != 0 || *(*uint8)(unsafe.Pointer(z + 1)) != 0; z++ { 34795 if *(*uint8)(unsafe.Pointer(z)) != 0 { 34796 zNeededCollation[libc.PostIncInt32(&i, 1)] = *(*uint8)(unsafe.Pointer(z)) 34797 } 34798 } 34799 zNeededCollation[i] = uint8(0) 34800 sqlite3.Xsqlite3_create_collation(tls, 34801 db, ts+16482, int32((*sqlite31)(unsafe.Pointer(db)).Fenc), uintptr(intptr_t(enc)), *(*uintptr)(unsafe.Pointer(&struct { 34802 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34803 }{test_collate_func}))) 34804 } 34805 34806 func test_collate_needed(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34807 bp := tls.Alloc(8) 34808 defer tls.Free(8) 34809 34810 var rc int32 34811 34812 if !(objc != 2) { 34813 goto __1 34814 } 34815 goto bad_args 34816 __1: 34817 ; 34818 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 34819 goto __2 34820 } 34821 return TCL_ERROR 34822 __2: 34823 ; 34824 rc = sqlite3.Xsqlite3_collation_needed16(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34825 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 34826 }{test_collate_needed_cb}))) 34827 zNeededCollation[0] = uint8(0) 34828 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 34829 goto __3 34830 } 34831 return TCL_ERROR 34832 __3: 34833 ; 34834 return TCL_OK 34835 34836 bad_args: 34837 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 34838 return TCL_ERROR 34839 } 34840 34841 var unaligned_string_counter int32 = 0 34842 34843 func alignmentCollFunc(tls *libc.TLS, NotUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 34844 var rc int32 34845 var n int32 34846 if nKey1 < nKey2 { 34847 n = nKey1 34848 } else { 34849 n = nKey2 34850 } 34851 if nKey1 > 0 && 1 == 1&int32(pKey1) { 34852 unaligned_string_counter++ 34853 } 34854 if nKey2 > 0 && 1 == 1&int32(pKey2) { 34855 unaligned_string_counter++ 34856 } 34857 rc = libc.Xmemcmp(tls, pKey1, pKey2, uint64(n)) 34858 if rc == 0 { 34859 rc = nKey1 - nKey2 34860 } 34861 return rc 34862 } 34863 34864 func add_alignment_test_collations(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34865 bp := tls.Alloc(8) 34866 defer tls.Free(8) 34867 34868 if objc >= 2 { 34869 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34870 return TCL_ERROR 34871 } 34872 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16561, SQLITE_UTF16, 34873 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34874 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34875 }{alignmentCollFunc}))) 34876 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16577, SQLITE_UTF16_ALIGNED, 34877 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 34878 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34879 }{alignmentCollFunc}))) 34880 } 34881 return SQLITE_OK 34882 } 34883 34884 func test_function_utf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34885 var interp uintptr 34886 var pX uintptr 34887 var pVal uintptr 34888 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34889 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34890 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34891 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34892 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34893 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34894 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34895 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34896 var _objPtr uintptr = pX 34897 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34898 tcl.XTclFreeObj(tls, _objPtr) 34899 } 34900 } 34901 sqlite3.Xsqlite3_result_text(tls, pCtx, tcl.XTcl_GetStringResult(tls, interp), -1, libc.UintptrFromInt32(-1)) 34902 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34903 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34904 uint8(SQLITE_UTF8), uintptr(0)) 34905 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16be(tls, pVal), 34906 -1, libc.UintptrFromInt32(-1)) 34907 sqlite3.Xsqlite3ValueFree(tls, pVal) 34908 } 34909 34910 func test_function_utf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34911 var interp uintptr 34912 var pX uintptr 34913 var pVal uintptr 34914 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34915 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34916 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34917 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34918 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34919 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34920 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34921 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34922 var _objPtr uintptr = pX 34923 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34924 tcl.XTclFreeObj(tls, _objPtr) 34925 } 34926 } 34927 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34928 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34929 uint8(SQLITE_UTF8), uintptr(0)) 34930 sqlite3.Xsqlite3_result_text(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, pVal), -1, libc.UintptrFromInt32(-1)) 34931 sqlite3.Xsqlite3ValueFree(tls, pVal) 34932 } 34933 34934 func test_function_utf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 34935 var interp uintptr 34936 var pX uintptr 34937 var pVal uintptr 34938 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 34939 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 34940 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34941 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34942 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 34943 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 34944 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 34945 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34946 var _objPtr uintptr = pX 34947 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34948 tcl.XTclFreeObj(tls, _objPtr) 34949 } 34950 } 34951 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34952 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 34953 uint8(SQLITE_UTF8), uintptr(0)) 34954 sqlite3.Xsqlite3_result_text16(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34955 -1, libc.UintptrFromInt32(-1)) 34956 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34957 -1, libc.UintptrFromInt32(-1)) 34958 sqlite3.Xsqlite3_result_text16le(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 34959 -1, libc.UintptrFromInt32(-1)) 34960 sqlite3.Xsqlite3ValueFree(tls, pVal) 34961 } 34962 34963 func test_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34964 bp := tls.Alloc(44) 34965 defer tls.Free(44) 34966 34967 if !(objc != 5) { 34968 goto __1 34969 } 34970 goto bad_args 34971 __1: 34972 ; 34973 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0) { 34974 goto __2 34975 } 34976 return TCL_ERROR 34977 __2: 34978 ; 34979 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40)) { 34980 goto __3 34981 } 34982 return TCL_ERROR 34983 __3: 34984 ; 34985 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 34986 goto __4 34987 } 34988 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF8, 34989 interp, *(*uintptr)(unsafe.Pointer(&struct { 34990 f func(*libc.TLS, uintptr, int32, uintptr) 34991 }{test_function_utf8})), uintptr(0), uintptr(0)) 34992 __4: 34993 ; 34994 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+40)) { 34995 goto __5 34996 } 34997 return TCL_ERROR 34998 __5: 34999 ; 35000 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 35001 goto __6 35002 } 35003 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16LE, 35004 interp, *(*uintptr)(unsafe.Pointer(&struct { 35005 f func(*libc.TLS, uintptr, int32, uintptr) 35006 }{test_function_utf16le})), uintptr(0), uintptr(0)) 35007 __6: 35008 ; 35009 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40)) { 35010 goto __7 35011 } 35012 return TCL_ERROR 35013 __7: 35014 ; 35015 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 35016 goto __8 35017 } 35018 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16BE, 35019 interp, *(*uintptr)(unsafe.Pointer(&struct { 35020 f func(*libc.TLS, uintptr, int32, uintptr) 35021 }{test_function_utf16be})), uintptr(0), uintptr(0)) 35022 __8: 35023 ; 35024 return TCL_OK 35025 bad_args: 35026 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35027 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 35028 return TCL_ERROR 35029 } 35030 35031 func test_errstr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35032 var zCode uintptr 35033 var i int32 35034 if objc != 1 { 35035 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16605) 35036 } 35037 35038 zCode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 35039 for i = 0; i < 200; i++ { 35040 if 0 == libc.Xstrcmp(tls, sqlite3.Xsqlite3ErrName(tls, i), zCode) { 35041 break 35042 } 35043 } 35044 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, i), uintptr(0)) 35045 return TCL_OK 35046 } 35047 35048 func test_breakpoint(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35049 return TCL_OK 35050 } 35051 35052 func test_bind_zeroblob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35053 bp := tls.Alloc(16) 35054 defer tls.Free(16) 35055 35056 var rc int32 35057 35058 if objc != 4 { 35059 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 35060 return TCL_ERROR 35061 } 35062 35063 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35064 return TCL_ERROR 35065 } 35066 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 35067 return TCL_ERROR 35068 } 35069 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 35070 return TCL_ERROR 35071 } 35072 35073 rc = sqlite3.Xsqlite3_bind_zeroblob(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 35074 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp))), rc) != 0 { 35075 return TCL_ERROR 35076 } 35077 if rc != SQLITE_OK { 35078 return TCL_ERROR 35079 } 35080 35081 return TCL_OK 35082 } 35083 35084 func test_bind_zeroblob64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35085 bp := tls.Alloc(40) 35086 defer tls.Free(40) 35087 35088 var rc int32 35089 35090 if objc != 4 { 35091 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 35092 return TCL_ERROR 35093 } 35094 35095 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 35096 return TCL_ERROR 35097 } 35098 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 35099 return TCL_ERROR 35100 } 35101 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+32) != 0 { 35102 return TCL_ERROR 35103 } 35104 35105 rc = sqlite3.Xsqlite3_bind_zeroblob64(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 24)), uint64(*(*Tcl_WideInt)(unsafe.Pointer(bp + 32)))) 35106 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), rc) != 0 { 35107 return TCL_ERROR 35108 } 35109 if rc != SQLITE_OK { 35110 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35111 return TCL_ERROR 35112 } 35113 35114 return TCL_OK 35115 } 35116 35117 func test_bind_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35118 bp := tls.Alloc(48) 35119 defer tls.Free(48) 35120 35121 var rc int32 35122 35123 if objc != 4 { 35124 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35125 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35126 return TCL_ERROR 35127 } 35128 35129 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35130 return TCL_ERROR 35131 } 35132 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35133 return TCL_ERROR 35134 } 35135 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 35136 return TCL_ERROR 35137 } 35138 35139 rc = sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*int32)(unsafe.Pointer(bp + 44))) 35140 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35141 return TCL_ERROR 35142 } 35143 if rc != SQLITE_OK { 35144 return TCL_ERROR 35145 } 35146 35147 return TCL_OK 35148 } 35149 35150 func test_intarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35151 var i int32 35152 35153 sqlite3.Xsqlite3_free(tls, p) 35154 p = uintptr(0) 35155 if objc > 1 { 35156 p = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(objc-1))) 35157 if p == uintptr(0) { 35158 return TCL_ERROR 35159 } 35160 for i = 0; i < objc-1; i++ { 35161 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p+uintptr(i)*4) != 0 { 35162 sqlite3.Xsqlite3_free(tls, p) 35163 p = uintptr(0) 35164 return TCL_ERROR 35165 } 35166 } 35167 } 35168 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p))) 35169 return TCL_OK 35170 } 35171 35172 var p uintptr = uintptr(0) 35173 35174 func test_int64array_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35175 bp := tls.Alloc(8) 35176 defer tls.Free(8) 35177 35178 var i int32 35179 35180 sqlite3.Xsqlite3_free(tls, p1) 35181 p1 = uintptr(0) 35182 if objc > 1 { 35183 p1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(objc-1))) 35184 if p1 == uintptr(0) { 35185 return TCL_ERROR 35186 } 35187 for i = 0; i < objc-1; i++ { 35188 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), bp) != 0 { 35189 sqlite3.Xsqlite3_free(tls, p1) 35190 p1 = uintptr(0) 35191 return TCL_ERROR 35192 } 35193 *(*sqlite3_int64)(unsafe.Pointer(p1 + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 35194 } 35195 } 35196 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p1))) 35197 return TCL_OK 35198 } 35199 35200 var p1 uintptr = uintptr(0) 35201 35202 func test_doublearray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35203 var i int32 35204 35205 sqlite3.Xsqlite3_free(tls, p2) 35206 p2 = uintptr(0) 35207 if objc > 1 { 35208 p2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(objc-1))) 35209 if p2 == uintptr(0) { 35210 return TCL_ERROR 35211 } 35212 for i = 0; i < objc-1; i++ { 35213 if tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p2+uintptr(i)*8) != 0 { 35214 sqlite3.Xsqlite3_free(tls, p2) 35215 p2 = uintptr(0) 35216 return TCL_ERROR 35217 } 35218 } 35219 } 35220 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p2))) 35221 return TCL_OK 35222 } 35223 35224 var p2 uintptr = uintptr(0) 35225 35226 func test_textarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35227 bp := tls.Alloc(8) 35228 defer tls.Free(8) 35229 35230 var i int32 35231 35232 for i = 0; i < n; i++ { 35233 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*8))) 35234 } 35235 sqlite3.Xsqlite3_free(tls, p3) 35236 p3 = uintptr(0) 35237 if objc > 1 { 35238 p3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(objc-1))) 35239 if p3 == uintptr(0) { 35240 return TCL_ERROR 35241 } 35242 for i = 0; i < objc-1; i++ { 35243 *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*8)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8))))) 35244 } 35245 } 35246 n = objc - 1 35247 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p3))) 35248 return TCL_OK 35249 } 35250 35251 var n int32 = 0 35252 var p3 uintptr = uintptr(0) 35253 35254 func test_bind_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35255 bp := tls.Alloc(56) 35256 defer tls.Free(56) 35257 35258 var rc int32 35259 35260 if objc != 4 { 35261 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35262 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35263 return TCL_ERROR 35264 } 35265 35266 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35267 return TCL_ERROR 35268 } 35269 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35270 return TCL_ERROR 35271 } 35272 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 35273 return TCL_ERROR 35274 } 35275 35276 rc = sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 48))) 35277 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35278 return TCL_ERROR 35279 } 35280 if rc != SQLITE_OK { 35281 return TCL_ERROR 35282 } 35283 35284 return TCL_OK 35285 } 35286 35287 func test_bind_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35288 bp := tls.Alloc(64) 35289 defer tls.Free(64) 35290 35291 *(*float64)(unsafe.Pointer(bp + 48)) = float64(0) 35292 var rc int32 35293 var zVal uintptr 35294 var i int32 35295 35296 if objc != 4 { 35297 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35298 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35299 return TCL_ERROR 35300 } 35301 35302 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35303 return TCL_ERROR 35304 } 35305 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35306 return TCL_ERROR 35307 } 35308 35309 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35310 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 35311 FzName uintptr 35312 FiUpper uint32 35313 FiLower uint32 35314 }{})); i++ { 35315 if libc.Xstrcmp(tls, aSpecialFp[i].FzName, zVal) == 0 { 35316 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) = sqlite3_uint64(aSpecialFp[i].FiUpper) 35317 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) <<= 32 35318 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) |= sqlite3_uint64(aSpecialFp[i].FiLower) 35319 35320 libc.Xmemcpy(tls, bp+48, bp+56, uint64(8)) 35321 break 35322 } 35323 } 35324 if uint64(i) >= uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 35325 FzName uintptr 35326 FiUpper uint32 35327 FiLower uint32 35328 }{})) && tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 35329 return TCL_ERROR 35330 } 35331 rc = sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*float64)(unsafe.Pointer(bp + 48))) 35332 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35333 return TCL_ERROR 35334 } 35335 if rc != SQLITE_OK { 35336 return TCL_ERROR 35337 } 35338 35339 return TCL_OK 35340 } 35341 35342 var aSpecialFp = [10]struct { 35343 FzName uintptr 35344 FiUpper uint32 35345 FiLower uint32 35346 }{ 35347 {FzName: ts + 16643, FiUpper: uint32(0x7fffffff), FiLower: 0xffffffff}, 35348 {FzName: ts + 16647, FiUpper: uint32(0x7ff7ffff), FiLower: 0xffffffff}, 35349 {FzName: ts + 16652, FiUpper: 0xffffffff, FiLower: 0xffffffff}, 35350 {FzName: ts + 16657, FiUpper: 0xfff7ffff, FiLower: 0xffffffff}, 35351 {FzName: ts + 16663, FiUpper: uint32(0x7ff00000)}, 35352 {FzName: ts + 16668, FiUpper: 0xfff00000}, 35353 {FzName: ts + 16673, FiLower: uint32(0x00000001)}, 35354 {FzName: ts + 16681, FiUpper: 0x80000000, FiLower: uint32(0x00000001)}, 35355 {FzName: ts + 16690, FiUpper: uint32(0x7ff80000)}, 35356 {FzName: ts + 16695, FiUpper: 0xfff80000}, 35357 } 35358 35359 func test_bind_null(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35360 bp := tls.Alloc(44) 35361 defer tls.Free(44) 35362 35363 var rc int32 35364 35365 if objc != 3 { 35366 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35367 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16701, 0)) 35368 return TCL_ERROR 35369 } 35370 35371 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35372 return TCL_ERROR 35373 } 35374 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35375 return TCL_ERROR 35376 } 35377 35378 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 35379 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35380 return TCL_ERROR 35381 } 35382 if rc != SQLITE_OK { 35383 return TCL_ERROR 35384 } 35385 35386 return TCL_OK 35387 } 35388 35389 func test_bind_text(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35390 bp := tls.Alloc(84) 35391 defer tls.Free(84) 35392 35393 *(*int32)(unsafe.Pointer(bp + 76)) = 0 35394 35395 var value uintptr 35396 var rc int32 35397 var toFree uintptr = uintptr(0) 35398 35399 if objc != 5 { 35400 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35401 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 35402 return TCL_ERROR 35403 } 35404 35405 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 35406 return TCL_ERROR 35407 } 35408 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 35409 return TCL_ERROR 35410 } 35411 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 35412 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 35413 return TCL_ERROR 35414 } 35415 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 { 35416 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+1)) 35417 if toFree == uintptr(0) { 35418 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 35419 return TCL_ERROR 35420 } 35421 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 35422 *(*uint8)(unsafe.Pointer(toFree + uintptr(*(*int32)(unsafe.Pointer(bp + 76))))) = uint8(0) 35423 value = toFree 35424 } 35425 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), libc.UintptrFromInt32(-1)) 35426 libc.Xfree(tls, toFree) 35427 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35428 return TCL_ERROR 35429 } 35430 if rc != SQLITE_OK { 35431 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 35432 return TCL_ERROR 35433 } 35434 35435 return TCL_OK 35436 } 35437 35438 func test_bind_text16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35439 bp := tls.Alloc(84) 35440 defer tls.Free(84) 35441 35442 var value uintptr 35443 var toFree uintptr = uintptr(0) 35444 var rc int32 35445 *(*int32)(unsafe.Pointer(bp + 76)) = 0 35446 35447 var xDel uintptr = func() uintptr { 35448 if objc == 6 { 35449 return uintptr(0) 35450 } 35451 return libc.UintptrFromInt32(-1) 35452 }() 35453 var oStmt uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-4)*8)) 35454 var oN uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)) 35455 var oString uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)) 35456 var oBytes uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 35457 35458 if objc != 5 && objc != 6 { 35459 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35460 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 35461 return TCL_ERROR 35462 } 35463 35464 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, oStmt), bp+64) != 0 { 35465 return TCL_ERROR 35466 } 35467 if tcl.XTcl_GetIntFromObj(tls, interp, oN, bp+72) != 0 { 35468 return TCL_ERROR 35469 } 35470 value = tcl.XTcl_GetByteArrayFromObj(tls, oString, bp+76) 35471 if tcl.XTcl_GetIntFromObj(tls, interp, oBytes, bp+80) != 0 { 35472 return TCL_ERROR 35473 } 35474 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 && xDel == libc.UintptrFromInt32(-1) { 35475 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+3)) 35476 if toFree == uintptr(0) { 35477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 35478 return TCL_ERROR 35479 } 35480 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 35481 libc.Xmemset(tls, toFree+uintptr(*(*int32)(unsafe.Pointer(bp + 76))), 0, uint64(3)) 35482 value = toFree 35483 } 35484 rc = sqlite3.Xsqlite3_bind_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDel) 35485 libc.Xfree(tls, toFree) 35486 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35487 return TCL_ERROR 35488 } 35489 if rc != SQLITE_OK { 35490 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35491 return TCL_ERROR 35492 } 35493 35494 return TCL_OK 35495 } 35496 35497 func test_bind_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35498 bp := tls.Alloc(284) 35499 defer tls.Free(284) 35500 35501 var value uintptr 35502 var rc int32 35503 var xDestructor sqlite3_destructor_type = libc.UintptrFromInt32(-1) 35504 35505 if objc != 5 && objc != 6 { 35506 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35507 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16729, 0)) 35508 return TCL_ERROR 35509 } 35510 35511 if objc == 6 { 35512 xDestructor = uintptr(0) 35513 objv += 8 35514 } 35515 35516 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 35517 return TCL_ERROR 35518 } 35519 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 35520 return TCL_ERROR 35521 } 35522 35523 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 35524 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 35525 return TCL_ERROR 35526 } 35527 35528 if *(*int32)(unsafe.Pointer(bp + 80)) > *(*int32)(unsafe.Pointer(bp + 76)) { 35529 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+84, 35530 ts+16748, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 76)))) 35531 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+84, uintptr(0))) 35532 return TCL_ERROR 35533 } 35534 35535 rc = sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDestructor) 35536 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35537 return TCL_ERROR 35538 } 35539 if rc != SQLITE_OK { 35540 return TCL_ERROR 35541 } 35542 35543 return TCL_OK 35544 } 35545 35546 func test_bind_value_from_preupdate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35547 bp := tls.Alloc(48) 35548 defer tls.Free(48) 35549 35550 var z3 uintptr = uintptr(0) 35551 var db uintptr = uintptr(0) 35552 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 35553 35554 if objc != 5 { 35555 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16782) 35556 return TCL_ERROR 35557 } 35558 35559 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 35560 return TCL_ERROR 35561 } 35562 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+32) != 0 { 35563 return TCL_ERROR 35564 } 35565 z3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35566 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+36) != 0 { 35567 return TCL_ERROR 35568 } 35569 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 35570 35571 if int32(*(*uint8)(unsafe.Pointer(z3))) == 'n' { 35572 sqlite3.Xsqlite3_preupdate_new(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 35573 } else if int32(*(*uint8)(unsafe.Pointer(z3))) == 'o' { 35574 sqlite3.Xsqlite3_preupdate_old(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 35575 } else { 35576 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16801, z3, uintptr(0))) 35577 return TCL_ERROR 35578 } 35579 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))) 35580 35581 return TCL_OK 35582 } 35583 35584 func test_bind_value_from_select(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35585 bp := tls.Alloc(72) 35586 defer tls.Free(72) 35587 35588 var zSql uintptr = uintptr(0) 35589 var db uintptr = uintptr(0) 35590 var rc int32 = SQLITE_OK 35591 35592 if objc != 4 { 35593 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16828) 35594 return TCL_ERROR 35595 } 35596 35597 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35598 return TCL_ERROR 35599 } 35600 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) != 0 { 35601 return TCL_ERROR 35602 } 35603 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35604 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35605 35606 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 35607 if rc != SQLITE_OK { 35608 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16842, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 35609 return TCL_ERROR 35610 } 35611 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 35612 var pVal uintptr = sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 35613 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56)), pVal) 35614 } 35615 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 35616 if rc != SQLITE_OK { 35617 tcl.XTcl_AppendResult(tls, interp, 35618 libc.VaList(bp+24, ts+16857, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 35619 return TCL_ERROR 35620 } 35621 35622 return TCL_OK 35623 } 35624 35625 func test_carray_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35626 bp := tls.Alloc(112) 35627 defer tls.Free(112) 35628 35629 var eType int32 35630 var nData int32 35631 var aData uintptr 35632 var isTransient int32 35633 var isStatic int32 35634 35635 var i int32 35636 var j int32 35637 var rc int32 35638 var xDel uintptr 35639 var z uintptr 35640 35641 var a uintptr 35642 35643 var a1 uintptr 35644 35645 var a2 uintptr 35646 var v3 uintptr 35647 var a3 uintptr 35648 eType = 0 35649 nData = 0 35650 aData = uintptr(0) 35651 isTransient = 0 35652 isStatic = 0 35653 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 35654 35655 if !(aStaticData != 0) { 35656 goto __1 35657 } 35658 35659 if !(eStaticType == 3) { 35660 goto __2 35661 } 35662 i = 0 35663 __3: 35664 if !(i < nStaticData) { 35665 goto __5 35666 } 35667 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aStaticData + uintptr(i)*8))) 35668 goto __4 35669 __4: 35670 i++ 35671 goto __3 35672 goto __5 35673 __5: 35674 ; 35675 __2: 35676 ; 35677 sqlite3.Xsqlite3_free(tls, aStaticData) 35678 aStaticData = uintptr(0) 35679 nStaticData = 0 35680 eStaticType = 0 35681 __1: 35682 ; 35683 if !(objc == 1) { 35684 goto __6 35685 } 35686 return TCL_OK 35687 __6: 35688 ; 35689 i = 1 35690 __7: 35691 if !(i < objc && int32(*(*uint8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)))))) == '-') { 35692 goto __9 35693 } 35694 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 35695 if !(libc.Xstrcmp(tls, z, ts+16878) == 0) { 35696 goto __10 35697 } 35698 isTransient = 1 35699 xDel = libc.UintptrFromInt32(-1) 35700 goto __11 35701 __10: 35702 if !(libc.Xstrcmp(tls, z, ts+16889) == 0) { 35703 goto __12 35704 } 35705 isStatic = 1 35706 xDel = uintptr(0) 35707 goto __13 35708 __12: 35709 if !(libc.Xstrcmp(tls, z, ts+16897) == 0) { 35710 goto __14 35711 } 35712 eType = 0 35713 goto __15 35714 __14: 35715 if !(libc.Xstrcmp(tls, z, ts+16904) == 0) { 35716 goto __16 35717 } 35718 eType = 1 35719 goto __17 35720 __16: 35721 if !(libc.Xstrcmp(tls, z, ts+16911) == 0) { 35722 goto __18 35723 } 35724 eType = 2 35725 goto __19 35726 __18: 35727 if !(libc.Xstrcmp(tls, z, ts+16919) == 0) { 35728 goto __20 35729 } 35730 eType = 3 35731 goto __21 35732 __20: 35733 if !(libc.Xstrcmp(tls, z, ts+16925) == 0) { 35734 goto __22 35735 } 35736 goto __9 35737 goto __23 35738 __22: 35739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+12444, z, uintptr(0))) 35740 return TCL_ERROR 35741 __23: 35742 ; 35743 __21: 35744 ; 35745 __19: 35746 ; 35747 __17: 35748 ; 35749 __15: 35750 ; 35751 __13: 35752 ; 35753 __11: 35754 ; 35755 goto __8 35756 __8: 35757 i++ 35758 goto __7 35759 goto __9 35760 __9: 35761 ; 35762 if !(eType == 3 && !(isStatic != 0) && !(isTransient != 0)) { 35763 goto __24 35764 } 35765 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+16928, 35766 uintptr(0))) 35767 return TCL_ERROR 35768 __24: 35769 ; 35770 if !(isStatic != 0 && isTransient != 0) { 35771 goto __25 35772 } 35773 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+16975, 35774 uintptr(0))) 35775 return TCL_ERROR 35776 __25: 35777 ; 35778 if !(objc-i < 2) { 35779 goto __26 35780 } 35781 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17013) 35782 return TCL_ERROR 35783 __26: 35784 ; 35785 if !(getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))), bp+80) != 0) { 35786 goto __27 35787 } 35788 return TCL_ERROR 35789 __27: 35790 ; 35791 i++ 35792 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0) { 35793 goto __28 35794 } 35795 return TCL_ERROR 35796 __28: 35797 ; 35798 i++ 35799 nData = objc - i 35800 switch eType + 4*libc.Bool32(nData <= 0) { 35801 case 0: 35802 goto __30 35803 case 1: 35804 goto __31 35805 case 2: 35806 goto __32 35807 case 3: 35808 goto __33 35809 case 4: 35810 goto __34 35811 } 35812 goto __29 35813 __30: 35814 a = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nData))) 35815 if !(a == uintptr(0)) { 35816 goto __35 35817 } 35818 rc = SQLITE_NOMEM 35819 goto carray_bind_done 35820 __35: 35821 ; 35822 j = 0 35823 __36: 35824 if !(j < nData) { 35825 goto __38 35826 } 35827 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+92) != 0) { 35828 goto __39 35829 } 35830 sqlite3.Xsqlite3_free(tls, a) 35831 return TCL_ERROR 35832 __39: 35833 ; 35834 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = *(*int32)(unsafe.Pointer(bp + 92)) 35835 goto __37 35836 __37: 35837 j++ 35838 goto __36 35839 goto __38 35840 __38: 35841 ; 35842 aData = a 35843 goto __29 35844 35845 __31: 35846 a1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(nData))) 35847 if !(a1 == uintptr(0)) { 35848 goto __40 35849 } 35850 rc = SQLITE_NOMEM 35851 goto carray_bind_done 35852 __40: 35853 ; 35854 j = 0 35855 __41: 35856 if !(j < nData) { 35857 goto __43 35858 } 35859 if !(tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+96) != 0) { 35860 goto __44 35861 } 35862 sqlite3.Xsqlite3_free(tls, a1) 35863 return TCL_ERROR 35864 __44: 35865 ; 35866 *(*sqlite3_int64)(unsafe.Pointer(a1 + uintptr(j)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) 35867 goto __42 35868 __42: 35869 j++ 35870 goto __41 35871 goto __43 35872 __43: 35873 ; 35874 aData = a1 35875 goto __29 35876 35877 __32: 35878 a2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(nData))) 35879 if !(a2 == uintptr(0)) { 35880 goto __45 35881 } 35882 rc = SQLITE_NOMEM 35883 goto carray_bind_done 35884 __45: 35885 ; 35886 j = 0 35887 __46: 35888 if !(j < nData) { 35889 goto __48 35890 } 35891 if !(tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+104) != 0) { 35892 goto __49 35893 } 35894 sqlite3.Xsqlite3_free(tls, a2) 35895 return TCL_ERROR 35896 __49: 35897 ; 35898 *(*float64)(unsafe.Pointer(a2 + uintptr(j)*8)) = *(*float64)(unsafe.Pointer(bp + 104)) 35899 goto __47 35900 __47: 35901 j++ 35902 goto __46 35903 goto __48 35904 __48: 35905 ; 35906 aData = a2 35907 goto __29 35908 35909 __33: 35910 a3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nData))) 35911 if !(a3 == uintptr(0)) { 35912 goto __50 35913 } 35914 rc = SQLITE_NOMEM 35915 goto carray_bind_done 35916 __50: 35917 ; 35918 j = 0 35919 __51: 35920 if !(j < nData) { 35921 goto __53 35922 } 35923 v3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8))) 35924 *(*uintptr)(unsafe.Pointer(a3 + uintptr(j)*8)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+56, v3)) 35925 goto __52 35926 __52: 35927 j++ 35928 goto __51 35929 goto __53 35930 __53: 35931 ; 35932 aData = a3 35933 goto __29 35934 35935 __34: 35936 aData = ts + 584 35937 xDel = uintptr(0) 35938 isTransient = 0 35939 isStatic = 0 35940 goto __29 35941 35942 __29: 35943 ; 35944 if !(isStatic != 0) { 35945 goto __54 35946 } 35947 aStaticData = aData 35948 nStaticData = nData 35949 eStaticType = eType 35950 __54: 35951 ; 35952 rc = sqlite3_carray_bind(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), aData, nData, eType, xDel) 35953 if !(isTransient != 0) { 35954 goto __55 35955 } 35956 if !(eType == 3) { 35957 goto __56 35958 } 35959 i = 0 35960 __57: 35961 if !(i < nData) { 35962 goto __59 35963 } 35964 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8))) 35965 goto __58 35966 __58: 35967 i++ 35968 goto __57 35969 goto __59 35970 __59: 35971 ; 35972 __56: 35973 ; 35974 sqlite3.Xsqlite3_free(tls, aData) 35975 __55: 35976 ; 35977 carray_bind_done: 35978 if !(rc != 0) { 35979 goto __60 35980 } 35981 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, sqlite3.Xsqlite3_errstr(tls, rc), uintptr(0))) 35982 return TCL_ERROR 35983 __60: 35984 ; 35985 return TCL_OK 35986 } 35987 35988 var aStaticData uintptr = uintptr(0) 35989 var nStaticData int32 = 0 35990 var eStaticType int32 = 0 35991 35992 func test_bind_parameter_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35993 bp := tls.Alloc(8) 35994 defer tls.Free(8) 35995 35996 if objc != 2 { 35997 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 35998 return TCL_ERROR 35999 } 36000 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36001 return TCL_ERROR 36002 } 36003 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))))) 36004 return TCL_OK 36005 } 36006 36007 func test_bind_parameter_name(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36008 bp := tls.Alloc(12) 36009 defer tls.Free(12) 36010 36011 if objc != 3 { 36012 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17047) 36013 return TCL_ERROR 36014 } 36015 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36016 return TCL_ERROR 36017 } 36018 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 36019 return TCL_ERROR 36020 } 36021 tcl.XTcl_SetObjResult(tls, interp, 36022 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))), -1)) 36023 return TCL_OK 36024 } 36025 36026 func test_bind_parameter_index(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36027 bp := tls.Alloc(8) 36028 defer tls.Free(8) 36029 36030 if objc != 3 { 36031 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17054) 36032 return TCL_ERROR 36033 } 36034 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36035 return TCL_ERROR 36036 } 36037 tcl.XTcl_SetObjResult(tls, interp, 36038 tcl.XTcl_NewIntObj(tls, 36039 sqlite3.Xsqlite3_bind_parameter_index(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))))) 36040 return TCL_OK 36041 } 36042 36043 func test_clear_bindings(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36044 bp := tls.Alloc(8) 36045 defer tls.Free(8) 36046 36047 if objc != 2 { 36048 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36049 return TCL_ERROR 36050 } 36051 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36052 return TCL_ERROR 36053 } 36054 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_clear_bindings(tls, *(*uintptr)(unsafe.Pointer(bp))))) 36055 return TCL_OK 36056 } 36057 36058 func test_sleep(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36059 bp := tls.Alloc(4) 36060 defer tls.Free(4) 36061 36062 if objc != 2 { 36063 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+13117) 36064 return TCL_ERROR 36065 } 36066 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36067 return TCL_ERROR 36068 } 36069 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_sleep(tls, *(*int32)(unsafe.Pointer(bp))))) 36070 return TCL_OK 36071 } 36072 36073 func test_ex_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36074 bp := tls.Alloc(56) 36075 defer tls.Free(56) 36076 36077 var rc int32 36078 36079 if objc != 2 { 36080 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36081 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36082 return TCL_ERROR 36083 } 36084 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36085 return TCL_ERROR 36086 } 36087 rc = sqlite3.Xsqlite3_extended_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 36088 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36089 return TCL_OK 36090 } 36091 36092 func test_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36093 bp := tls.Alloc(56) 36094 defer tls.Free(56) 36095 36096 var rc int32 36097 36098 if objc != 2 { 36099 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36100 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36101 return TCL_ERROR 36102 } 36103 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36104 return TCL_ERROR 36105 } 36106 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 36107 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36108 return TCL_OK 36109 } 36110 36111 func test_errmsg(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36112 bp := tls.Alloc(40) 36113 defer tls.Free(40) 36114 36115 var zErr uintptr 36116 36117 if objc != 2 { 36118 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36119 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36120 return TCL_ERROR 36121 } 36122 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36123 return TCL_ERROR 36124 } 36125 36126 zErr = sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36127 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErr, -1)) 36128 return TCL_OK 36129 } 36130 36131 func test_error_offset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36132 bp := tls.Alloc(40) 36133 defer tls.Free(40) 36134 36135 var iByteOffset int32 36136 36137 if objc != 2 { 36138 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36139 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36140 return TCL_ERROR 36141 } 36142 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36143 return TCL_ERROR 36144 } 36145 36146 iByteOffset = sqlite3.Xsqlite3_error_offset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36147 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iByteOffset)) 36148 return TCL_OK 36149 } 36150 36151 func test_errmsg16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36152 bp := tls.Alloc(40) 36153 defer tls.Free(40) 36154 36155 var zErr uintptr 36156 var z uintptr 36157 var bytes int32 = 0 36158 36159 if objc != 2 { 36160 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36161 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36162 return TCL_ERROR 36163 } 36164 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36165 return TCL_ERROR 36166 } 36167 36168 zErr = sqlite3.Xsqlite3_errmsg16(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36169 if zErr != 0 { 36170 z = zErr 36171 for bytes = 0; *(*uint8)(unsafe.Pointer(z + uintptr(bytes))) != 0 || *(*uint8)(unsafe.Pointer(z + uintptr(bytes+1))) != 0; bytes = bytes + 2 { 36172 } 36173 } 36174 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zErr, bytes)) 36175 return TCL_OK 36176 } 36177 36178 func test_prepare(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36179 bp := tls.Alloc(162) 36180 defer tls.Free(162) 36181 36182 var zSql uintptr 36183 36184 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 36185 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 36186 36187 var rc int32 36188 36189 if objc != 5 && objc != 4 { 36190 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36191 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36192 return TCL_ERROR 36193 } 36194 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36195 return TCL_ERROR 36196 } 36197 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36198 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 36199 return TCL_ERROR 36200 } 36201 36202 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, func() uintptr { 36203 if objc >= 5 { 36204 return bp + 104 36205 } 36206 return uintptr(0) 36207 }()) 36208 tcl.XTcl_ResetResult(tls, interp) 36209 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36210 return TCL_ERROR 36211 } 36212 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 36213 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36214 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 36215 } 36216 if int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) < *(*int32)(unsafe.Pointer(bp + 88)) { 36217 *(*int32)(unsafe.Pointer(bp + 88)) = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) 36218 } 36219 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 104)), *(*int32)(unsafe.Pointer(bp + 88))), 0) 36220 } 36221 if rc != SQLITE_OK { 36222 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 36223 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36224 return TCL_ERROR 36225 } 36226 36227 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 36228 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 36229 return TCL_ERROR 36230 } 36231 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 36232 } 36233 return TCL_OK 36234 } 36235 36236 func test_prepare_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36237 bp := tls.Alloc(162) 36238 defer tls.Free(162) 36239 36240 var zSql uintptr 36241 var zCopy uintptr = uintptr(0) 36242 36243 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 36244 var pzTail uintptr 36245 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 36246 36247 var rc int32 36248 36249 if objc != 5 && objc != 4 { 36250 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36251 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 36252 return TCL_ERROR 36253 } 36254 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36255 return TCL_ERROR 36256 } 36257 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36258 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 36259 return TCL_ERROR 36260 } 36261 36262 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36263 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36264 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36265 } else { 36266 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 36267 zCopy = libc.Xmalloc(tls, uint64(n)) 36268 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 36269 } 36270 if objc >= 5 { 36271 pzTail = bp + 96 36272 } else { 36273 pzTail = uintptr(0) 36274 } 36275 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 88)), bp+104, pzTail) 36276 if objc >= 5 { 36277 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 36278 } 36279 libc.Xfree(tls, zCopy) 36280 36281 tcl.XTcl_ResetResult(tls, interp) 36282 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36283 return TCL_ERROR 36284 } 36285 if rc == SQLITE_OK && objc >= 5 && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 36286 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36287 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 36288 } 36289 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 96)), *(*int32)(unsafe.Pointer(bp + 88))), 0) 36290 } 36291 if rc != SQLITE_OK { 36292 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 36293 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36294 return TCL_ERROR 36295 } 36296 36297 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 36298 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 36299 return TCL_ERROR 36300 } 36301 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 36302 } 36303 return TCL_OK 36304 } 36305 36306 func test_prepare_v3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36307 bp := tls.Alloc(162) 36308 defer tls.Free(162) 36309 36310 var zSql uintptr 36311 var zCopy uintptr = uintptr(0) 36312 36313 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 36314 var pzTail uintptr 36315 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 36316 36317 var rc int32 36318 36319 if objc != 6 && objc != 5 { 36320 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36321 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17110, 0)) 36322 return TCL_ERROR 36323 } 36324 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36325 return TCL_ERROR 36326 } 36327 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36328 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 36329 return TCL_ERROR 36330 } 36331 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+92) != 0 { 36332 return TCL_ERROR 36333 } 36334 36335 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36336 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36337 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36338 } else { 36339 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 36340 zCopy = libc.Xmalloc(tls, uint64(n)) 36341 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 36342 } 36343 if objc >= 6 { 36344 pzTail = bp + 96 36345 } else { 36346 pzTail = uintptr(0) 36347 } 36348 rc = sqlite3.Xsqlite3_prepare_v3(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 88)), uint32(*(*int32)(unsafe.Pointer(bp + 92))), bp+104, pzTail) 36349 libc.Xfree(tls, zCopy) 36350 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 36351 36352 tcl.XTcl_ResetResult(tls, interp) 36353 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36354 return TCL_ERROR 36355 } 36356 if rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 && objc >= 6 { 36357 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36358 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 36359 } 36360 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 96)), *(*int32)(unsafe.Pointer(bp + 88))), 0) 36361 } 36362 if rc != SQLITE_OK { 36363 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 36364 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36365 return TCL_ERROR 36366 } 36367 36368 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 36369 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 36370 return TCL_ERROR 36371 } 36372 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 36373 } 36374 return TCL_OK 36375 } 36376 36377 func test_prepare_tkt3134(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36378 bp := tls.Alloc(146) 36379 defer tls.Free(146) 36380 36381 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 36382 36383 var rc int32 36384 36385 if objc != 2 { 36386 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36387 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 36388 return TCL_ERROR 36389 } 36390 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36391 return TCL_ERROR 36392 } 36393 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), uintptr(unsafe.Pointer(&zSql))+1, 0, bp+88, uintptr(0)) 36394 36395 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36396 return TCL_ERROR 36397 } 36398 if rc != SQLITE_OK { 36399 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+96, ts+16476, libc.VaList(bp+32, rc)) 36400 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36401 return TCL_ERROR 36402 } 36403 36404 if *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 36405 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 88))) != 0 { 36406 return TCL_ERROR 36407 } 36408 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 36409 } 36410 return TCL_OK 36411 } 36412 36413 var zSql = *(*[10]uint8)(unsafe.Pointer(ts + 17138)) 36414 36415 func test_prepare16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36416 bp := tls.Alloc(130) 36417 defer tls.Free(130) 36418 36419 var zSql uintptr 36420 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 36421 var pTail uintptr = uintptr(0) 36422 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 36423 36424 var rc int32 36425 36426 if objc != 5 && objc != 4 { 36427 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36428 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36429 return TCL_ERROR 36430 } 36431 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36432 return TCL_ERROR 36433 } 36434 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 36435 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 36436 return TCL_ERROR 36437 } 36438 36439 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 36440 if objc >= 5 { 36441 return bp + 72 36442 } 36443 return uintptr(0) 36444 }()) 36445 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36446 return TCL_ERROR 36447 } 36448 if rc != 0 { 36449 return TCL_ERROR 36450 } 36451 36452 if objc >= 5 { 36453 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 36454 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 36455 } else { 36456 *(*int32)(unsafe.Pointer(bp + 56)) = 0 36457 } 36458 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 36459 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 36460 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 36461 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36462 var _objPtr uintptr = pTail 36463 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36464 tcl.XTclFreeObj(tls, _objPtr) 36465 } 36466 } 36467 } 36468 36469 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 36470 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 36471 return TCL_ERROR 36472 } 36473 } 36474 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 36475 return TCL_OK 36476 } 36477 36478 func test_prepare16_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36479 bp := tls.Alloc(130) 36480 defer tls.Free(130) 36481 36482 var zSql uintptr 36483 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 36484 var pTail uintptr = uintptr(0) 36485 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 36486 36487 var rc int32 36488 36489 if objc != 5 && objc != 4 { 36490 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36491 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36492 return TCL_ERROR 36493 } 36494 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36495 return TCL_ERROR 36496 } 36497 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 36498 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 36499 return TCL_ERROR 36500 } 36501 36502 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 36503 if objc >= 5 { 36504 return bp + 72 36505 } 36506 return uintptr(0) 36507 }()) 36508 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36509 return TCL_ERROR 36510 } 36511 if rc != 0 { 36512 return TCL_ERROR 36513 } 36514 36515 if objc >= 5 { 36516 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 36517 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 36518 } else { 36519 *(*int32)(unsafe.Pointer(bp + 56)) = 0 36520 } 36521 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 36522 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 36523 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 36524 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36525 var _objPtr uintptr = pTail 36526 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36527 tcl.XTclFreeObj(tls, _objPtr) 36528 } 36529 } 36530 } 36531 36532 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 36533 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 36534 return TCL_ERROR 36535 } 36536 } 36537 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 36538 return TCL_OK 36539 } 36540 36541 func test_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36542 bp := tls.Alloc(156) 36543 defer tls.Free(156) 36544 36545 var zFilename uintptr 36546 36547 if objc != 3 && objc != 2 && objc != 1 { 36548 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36549 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 36550 return TCL_ERROR 36551 } 36552 36553 if objc > 1 { 36554 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36555 } else { 36556 zFilename = uintptr(0) 36557 } 36558 sqlite3.Xsqlite3_open(tls, zFilename, bp+48) 36559 36560 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 36561 return TCL_ERROR 36562 } 36563 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 36564 return TCL_OK 36565 } 36566 36567 func test_open_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36568 bp := tls.Alloc(484) 36569 defer tls.Free(484) 36570 36571 var zFilename uintptr 36572 var zVfs uintptr 36573 var flags int32 = 0 36574 36575 var rc int32 36576 36577 var i int32 36578 36579 if objc != 4 { 36580 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17171) 36581 return TCL_ERROR 36582 } 36583 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36584 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 36585 if int32(*(*uint8)(unsafe.Pointer(zVfs))) == 0x00 { 36586 zVfs = uintptr(0) 36587 } 36588 36589 rc = tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16, bp+24) 36590 if rc != TCL_OK { 36591 return rc 36592 } 36593 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 16)); i++ { 36594 *(*[21]OpenFlag)(unsafe.Pointer(bp + 32)) = [21]OpenFlag{ 36595 {FzFlag: ts + 17190, Fflag: SQLITE_OPEN_READONLY}, 36596 {FzFlag: ts + 17211, Fflag: SQLITE_OPEN_READWRITE}, 36597 {FzFlag: ts + 17233, Fflag: SQLITE_OPEN_CREATE}, 36598 {FzFlag: ts + 17252, Fflag: SQLITE_OPEN_DELETEONCLOSE}, 36599 {FzFlag: ts + 17278, Fflag: SQLITE_OPEN_EXCLUSIVE}, 36600 {FzFlag: ts + 17300, Fflag: SQLITE_OPEN_AUTOPROXY}, 36601 {FzFlag: ts + 17322, Fflag: SQLITE_OPEN_MAIN_DB}, 36602 {FzFlag: ts + 17342, Fflag: SQLITE_OPEN_TEMP_DB}, 36603 {FzFlag: ts + 17362, Fflag: SQLITE_OPEN_TRANSIENT_DB}, 36604 {FzFlag: ts + 17387, Fflag: SQLITE_OPEN_MAIN_JOURNAL}, 36605 {FzFlag: ts + 17412, Fflag: SQLITE_OPEN_TEMP_JOURNAL}, 36606 {FzFlag: ts + 17437, Fflag: SQLITE_OPEN_SUBJOURNAL}, 36607 {FzFlag: ts + 17460, Fflag: SQLITE_OPEN_SUPER_JOURNAL}, 36608 {FzFlag: ts + 17486, Fflag: SQLITE_OPEN_NOMUTEX}, 36609 {FzFlag: ts + 17506, Fflag: SQLITE_OPEN_FULLMUTEX}, 36610 {FzFlag: ts + 17528, Fflag: SQLITE_OPEN_SHAREDCACHE}, 36611 {FzFlag: ts + 17552, Fflag: SQLITE_OPEN_PRIVATECACHE}, 36612 {FzFlag: ts + 17577, Fflag: SQLITE_OPEN_WAL}, 36613 {FzFlag: ts + 17593, Fflag: SQLITE_OPEN_URI}, 36614 {FzFlag: ts + 17609, Fflag: SQLITE_OPEN_EXRESCODE}, 36615 {}, 36616 } 36617 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)) + uintptr(i)*8)), bp+32, int32(unsafe.Sizeof(OpenFlag{})), 36618 ts+17631, 0, bp+368) 36619 if rc != TCL_OK { 36620 return rc 36621 } 36622 flags = flags | (*OpenFlag)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 368)))*16)).Fflag 36623 } 36624 36625 rc = sqlite3.Xsqlite3_open_v2(tls, zFilename, bp+376, flags, zVfs) 36626 if sqlite3TestMakePointerStr(tls, interp, bp+384, *(*uintptr)(unsafe.Pointer(bp + 376))) != 0 { 36627 return TCL_ERROR 36628 } 36629 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+384, 0)) 36630 return TCL_OK 36631 } 36632 36633 type OpenFlag = struct { 36634 FzFlag uintptr 36635 Fflag int32 36636 F__ccgo_pad1 [4]byte 36637 } 36638 36639 func test_open16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36640 bp := tls.Alloc(156) 36641 defer tls.Free(156) 36642 36643 var zFilename uintptr 36644 36645 if objc != 3 { 36646 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36647 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 36648 return TCL_ERROR 36649 } 36650 36651 zFilename = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 36652 sqlite3.Xsqlite3_open16(tls, zFilename, bp+48) 36653 36654 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 36655 return TCL_ERROR 36656 } 36657 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 36658 return TCL_OK 36659 } 36660 36661 func test_complete16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36662 var zBuf uintptr 36663 36664 if objc != 2 { 36665 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17636) 36666 return TCL_ERROR 36667 } 36668 36669 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 36670 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_complete16(tls, zBuf))) 36671 return TCL_OK 36672 } 36673 36674 func test_normalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36675 var zSql uintptr 36676 var zNorm uintptr 36677 36678 if objc != 2 { 36679 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9535) 36680 return TCL_ERROR 36681 } 36682 36683 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36684 zNorm = sqlite3_normalize(tls, zSql) 36685 if zNorm != 0 { 36686 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zNorm, -1)) 36687 sqlite3.Xsqlite3_free(tls, zNorm) 36688 } 36689 return TCL_OK 36690 } 36691 36692 func test_step(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36693 bp := tls.Alloc(40) 36694 defer tls.Free(40) 36695 36696 var rc int32 36697 36698 if objc != 2 { 36699 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36700 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+16315, 0)) 36701 return TCL_ERROR 36702 } 36703 36704 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36705 return TCL_ERROR 36706 } 36707 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36708 36709 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36710 return TCL_OK 36711 } 36712 36713 func test_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36714 bp := tls.Alloc(8) 36715 defer tls.Free(8) 36716 36717 if objc != 2 { 36718 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36719 return TCL_ERROR 36720 } 36721 36722 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36723 return TCL_ERROR 36724 } 36725 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 36726 return TCL_OK 36727 } 36728 36729 func test_ex_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36730 bp := tls.Alloc(8) 36731 defer tls.Free(8) 36732 36733 var z uintptr 36734 36735 if objc != 2 { 36736 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36737 return TCL_ERROR 36738 } 36739 36740 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36741 return TCL_ERROR 36742 } 36743 z = sqlite3.Xsqlite3_expanded_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 36744 tcl.XTcl_SetResult(tls, interp, z, uintptr(1)) 36745 sqlite3.Xsqlite3_free(tls, z) 36746 return TCL_OK 36747 } 36748 36749 func test_column_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36750 bp := tls.Alloc(40) 36751 defer tls.Free(40) 36752 36753 if objc != 2 { 36754 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36755 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36756 return TCL_ERROR 36757 } 36758 36759 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36760 return TCL_ERROR 36761 } 36762 36763 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36764 return TCL_OK 36765 } 36766 36767 func test_column_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36768 bp := tls.Alloc(44) 36769 defer tls.Free(44) 36770 36771 var tp int32 36772 36773 if objc != 3 { 36774 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36775 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36776 return TCL_ERROR 36777 } 36778 36779 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36780 return TCL_ERROR 36781 } 36782 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36783 return TCL_ERROR 36784 } 36785 36786 tp = sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36787 switch tp { 36788 case SQLITE_INTEGER: 36789 tcl.XTcl_SetResult(tls, interp, ts+2413, uintptr(0)) 36790 break 36791 case SQLITE_NULL: 36792 tcl.XTcl_SetResult(tls, interp, ts+5846, uintptr(0)) 36793 break 36794 case SQLITE_FLOAT: 36795 tcl.XTcl_SetResult(tls, interp, ts+17662, uintptr(0)) 36796 break 36797 case SQLITE_TEXT: 36798 tcl.XTcl_SetResult(tls, interp, ts+17668, uintptr(0)) 36799 break 36800 case SQLITE_BLOB: 36801 tcl.XTcl_SetResult(tls, interp, ts+17673, uintptr(0)) 36802 break 36803 default: 36804 } 36805 36806 return TCL_OK 36807 } 36808 36809 func test_column_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36810 bp := tls.Alloc(44) 36811 defer tls.Free(44) 36812 36813 var iVal i64 36814 36815 if objc != 3 { 36816 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36817 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36818 return TCL_ERROR 36819 } 36820 36821 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36822 return TCL_ERROR 36823 } 36824 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36825 return TCL_ERROR 36826 } 36827 36828 iVal = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36829 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iVal)) 36830 return TCL_OK 36831 } 36832 36833 func test_column_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36834 bp := tls.Alloc(44) 36835 defer tls.Free(44) 36836 36837 var len int32 36838 var pBlob uintptr 36839 36840 if objc != 3 { 36841 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36842 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36843 return TCL_ERROR 36844 } 36845 36846 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36847 return TCL_ERROR 36848 } 36849 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36850 return TCL_ERROR 36851 } 36852 36853 len = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36854 pBlob = sqlite3.Xsqlite3_column_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36855 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pBlob, len)) 36856 return TCL_OK 36857 } 36858 36859 func test_column_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36860 bp := tls.Alloc(44) 36861 defer tls.Free(44) 36862 36863 var rVal float64 36864 36865 if objc != 3 { 36866 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36867 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36868 return TCL_ERROR 36869 } 36870 36871 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36872 return TCL_ERROR 36873 } 36874 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36875 return TCL_ERROR 36876 } 36877 36878 rVal = sqlite3.Xsqlite3_column_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36879 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewDoubleObj(tls, rVal)) 36880 return TCL_OK 36881 } 36882 36883 func test_data_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36884 bp := tls.Alloc(40) 36885 defer tls.Free(40) 36886 36887 if objc != 2 { 36888 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36889 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36890 return TCL_ERROR 36891 } 36892 36893 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36894 return TCL_ERROR 36895 } 36896 36897 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_data_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36898 return TCL_OK 36899 } 36900 36901 func test_stmt_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36902 bp := tls.Alloc(44) 36903 defer tls.Free(44) 36904 36905 var xFunc uintptr 36906 var zRet uintptr 36907 36908 xFunc = clientData 36909 if objc != 3 { 36910 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36911 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36912 return TCL_ERROR 36913 } 36914 36915 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36916 return TCL_ERROR 36917 } 36918 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36919 return TCL_ERROR 36920 } 36921 zRet = (*struct { 36922 f func(*libc.TLS, uintptr, int32) uintptr 36923 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36924 if zRet != 0 { 36925 tcl.XTcl_SetResult(tls, interp, zRet, uintptr(0)) 36926 } 36927 return TCL_OK 36928 } 36929 36930 func test_global_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36931 var rc int32 36932 if objc != 1 { 36933 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 36934 return TCL_ERROR 36935 } 36936 rc = sqlite3.Xsqlite3_global_recover(tls) 36937 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36938 return TCL_OK 36939 } 36940 36941 func test_stmt_utf16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36942 bp := tls.Alloc(44) 36943 defer tls.Free(44) 36944 36945 var pRet uintptr 36946 var zName16 uintptr 36947 var xFunc uintptr 36948 36949 xFunc = clientData 36950 if objc != 3 { 36951 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36952 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36953 return TCL_ERROR 36954 } 36955 36956 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36957 return TCL_ERROR 36958 } 36959 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36960 return TCL_ERROR 36961 } 36962 36963 zName16 = (*struct { 36964 f func(*libc.TLS, uintptr, int32) uintptr 36965 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 36966 if zName16 != 0 { 36967 var n int32 36968 var z uintptr = zName16 36969 for n = 0; *(*uint8)(unsafe.Pointer(z + uintptr(n))) != 0 || *(*uint8)(unsafe.Pointer(z + uintptr(n+1))) != 0; n = n + 2 { 36970 } 36971 pRet = tcl.XTcl_NewByteArrayObj(tls, zName16, n+2) 36972 tcl.XTcl_SetObjResult(tls, interp, pRet) 36973 } 36974 36975 return TCL_OK 36976 } 36977 36978 func test_stmt_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36979 bp := tls.Alloc(44) 36980 defer tls.Free(44) 36981 36982 var xFunc uintptr 36983 36984 xFunc = clientData 36985 if objc != 3 { 36986 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36987 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 36988 return TCL_ERROR 36989 } 36990 36991 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36992 return TCL_ERROR 36993 } 36994 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 36995 return TCL_ERROR 36996 } 36997 36998 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*struct { 36999 f func(*libc.TLS, uintptr, int32) int32 37000 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))))) 37001 return TCL_OK 37002 } 37003 37004 func test_interrupt(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37005 bp := tls.Alloc(40) 37006 defer tls.Free(40) 37007 37008 if argc != 2 { 37009 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15001, 0)) 37010 return TCL_ERROR 37011 } 37012 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 37013 return TCL_ERROR 37014 } 37015 sqlite3.Xsqlite3_interrupt(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 37016 return TCL_OK 37017 } 37018 37019 func delete_function(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37020 bp := tls.Alloc(40) 37021 defer tls.Free(40) 37022 37023 var rc int32 37024 37025 if argc != 3 { 37026 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 37027 ts+17678, 0)) 37028 return TCL_ERROR 37029 } 37030 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 37031 return TCL_ERROR 37032 } 37033 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), -1, SQLITE_UTF8, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 37034 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37035 return TCL_OK 37036 } 37037 37038 func delete_collation(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37039 bp := tls.Alloc(40) 37040 defer tls.Free(40) 37041 37042 var rc int32 37043 37044 if argc != 3 { 37045 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 37046 ts+17678, 0)) 37047 return TCL_ERROR 37048 } 37049 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 37050 return TCL_ERROR 37051 } 37052 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), SQLITE_UTF8, uintptr(0), uintptr(0)) 37053 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37054 return TCL_OK 37055 } 37056 37057 func get_autocommit(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37058 bp := tls.Alloc(94) 37059 defer tls.Free(94) 37060 37061 if argc != 2 { 37062 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 37063 ts+15001, 0)) 37064 return TCL_ERROR 37065 } 37066 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 37067 return TCL_ERROR 37068 } 37069 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+64, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3_get_autocommit(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 37070 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 37071 return TCL_OK 37072 } 37073 37074 func test_busy_timeout(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37075 bp := tls.Alloc(60) 37076 defer tls.Free(60) 37077 37078 var rc int32 37079 37080 if argc != 3 { 37081 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 37082 ts+15001, 0)) 37083 return TCL_ERROR 37084 } 37085 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 37086 return TCL_ERROR 37087 } 37088 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 37089 return TCL_ERROR 37090 } 37091 rc = sqlite3.Xsqlite3_busy_timeout(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56))) 37092 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 37093 return TCL_OK 37094 } 37095 37096 func tcl_variable_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37097 var pVar uintptr 37098 if objc != 2 { 37099 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17696) 37100 return TCL_ERROR 37101 } 37102 pVar = tcl.XTcl_GetVar2Ex(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0), TCL_LEAVE_ERR_MSG) 37103 if pVar == uintptr(0) { 37104 return TCL_ERROR 37105 } 37106 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 37107 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname, -1)) 37108 } 37109 return TCL_OK 37110 } 37111 37112 func test_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37113 bp := tls.Alloc(4) 37114 defer tls.Free(4) 37115 37116 var amt int32 37117 if objc != 1 && objc != 2 { 37118 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 37119 return TCL_ERROR 37120 } 37121 if objc == 2 { 37122 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37123 return TCL_ERROR 37124 } 37125 } else { 37126 *(*int32)(unsafe.Pointer(bp)) = -1 37127 } 37128 amt = sqlite3.Xsqlite3_release_memory(tls, *(*int32)(unsafe.Pointer(bp))) 37129 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, amt)) 37130 return TCL_OK 37131 } 37132 37133 func test_db_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37134 bp := tls.Alloc(8) 37135 defer tls.Free(8) 37136 37137 var rc int32 37138 if objc != 2 { 37139 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37140 return TCL_ERROR 37141 } 37142 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37143 return TCL_ERROR 37144 } 37145 rc = sqlite3.Xsqlite3_db_release_memory(tls, *(*uintptr)(unsafe.Pointer(bp))) 37146 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37147 return TCL_OK 37148 } 37149 37150 func test_db_cacheflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37151 bp := tls.Alloc(8) 37152 defer tls.Free(8) 37153 37154 var rc int32 37155 if objc != 2 { 37156 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37157 return TCL_ERROR 37158 } 37159 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37160 return TCL_ERROR 37161 } 37162 rc = sqlite3.Xsqlite3_db_cacheflush(tls, *(*uintptr)(unsafe.Pointer(bp))) 37163 if rc != 0 { 37164 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 37165 return TCL_ERROR 37166 } 37167 37168 tcl.XTcl_ResetResult(tls, interp) 37169 return TCL_OK 37170 } 37171 37172 func test_system_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37173 bp := tls.Alloc(8) 37174 defer tls.Free(8) 37175 37176 var iErrno int32 37177 if objc != 2 { 37178 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37179 return TCL_ERROR 37180 } 37181 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37182 return TCL_ERROR 37183 } 37184 iErrno = sqlite3.Xsqlite3_system_errno(tls, *(*uintptr)(unsafe.Pointer(bp))) 37185 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iErrno)) 37186 return TCL_OK 37187 } 37188 37189 func test_db_filename(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37190 bp := tls.Alloc(24) 37191 defer tls.Free(24) 37192 37193 var zDbName uintptr 37194 if objc != 3 { 37195 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 37196 return TCL_ERROR 37197 } 37198 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 37199 return TCL_ERROR 37200 } 37201 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37202 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_db_filename(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbName), uintptr(0))) 37203 return TCL_OK 37204 } 37205 37206 func test_db_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37207 bp := tls.Alloc(8) 37208 defer tls.Free(8) 37209 37210 var zDbName uintptr 37211 if objc != 3 { 37212 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 37213 return TCL_ERROR 37214 } 37215 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37216 return TCL_ERROR 37217 } 37218 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37219 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_db_readonly(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName))) 37220 return TCL_OK 37221 } 37222 37223 func test_soft_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37224 bp := tls.Alloc(8) 37225 defer tls.Free(8) 37226 37227 var amt sqlite3_int64 37228 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 37229 if objc != 1 && objc != 2 { 37230 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 37231 return TCL_ERROR 37232 } 37233 if objc == 2 { 37234 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37235 return TCL_ERROR 37236 } 37237 } 37238 amt = sqlite3.Xsqlite3_soft_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 37239 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 37240 return TCL_OK 37241 } 37242 37243 func test_hard_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37244 bp := tls.Alloc(8) 37245 defer tls.Free(8) 37246 37247 var amt sqlite3_int64 37248 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 37249 if objc != 1 && objc != 2 { 37250 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 37251 return TCL_ERROR 37252 } 37253 if objc == 2 { 37254 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37255 return TCL_ERROR 37256 } 37257 } 37258 amt = sqlite3.Xsqlite3_hard_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 37259 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 37260 return TCL_OK 37261 } 37262 37263 func test_thread_cleanup(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37264 sqlite3.Xsqlite3_thread_cleanup(tls) 37265 return TCL_OK 37266 } 37267 37268 func test_pager_refcounts(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37269 bp := tls.Alloc(40) 37270 defer tls.Free(40) 37271 37272 var i int32 37273 var v int32 37274 var a uintptr 37275 var pResult uintptr 37276 37277 if objc != 2 { 37278 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37279 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37280 return TCL_ERROR 37281 } 37282 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37283 return TCL_ERROR 37284 } 37285 pResult = tcl.XTcl_NewObj(tls) 37286 for i = 0; i < (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FnDb; i++ { 37287 if (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt == uintptr(0) { 37288 v = -1 37289 } else { 37290 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 37291 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt)) 37292 v = *(*int32)(unsafe.Pointer(a)) 37293 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 37294 } 37295 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, v)) 37296 } 37297 tcl.XTcl_SetObjResult(tls, interp, pResult) 37298 return TCL_OK 37299 } 37300 37301 func working_64bit_int(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37302 var pTestObj uintptr 37303 var working int32 = 0 37304 37305 pTestObj = tcl.XTcl_NewWideIntObj(tls, int64(1000000)*int64(1234567890)) 37306 working = libc.Bool32(libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, pTestObj), ts+17709) == 0) 37307 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37308 var _objPtr uintptr = pTestObj 37309 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37310 tcl.XTclFreeObj(tls, _objPtr) 37311 } 37312 } 37313 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(working != 0))) 37314 return TCL_OK 37315 } 37316 37317 func vfs_unlink_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37318 bp := tls.Alloc(496) 37319 defer tls.Free(496) 37320 37321 var i int32 37322 var pMain uintptr 37323 37324 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(0)) 37325 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 37326 (*sqlite3_vfs)(unsafe.Pointer(bp + 168)).FzName = ts + 17732 37327 37328 pMain = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37329 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 37330 37331 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 0) 37332 37333 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 37334 37335 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 1) 37336 37337 if pMain != 0 { 37338 sqlite3.Xsqlite3_vfs_register(tls, pMain, 1) 37339 37340 } 37341 37342 for i = 0; uint64(i) < uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 37343 *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37344 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 37345 sqlite3.Xsqlite3_vfs_unregister(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8))) 37346 37347 } 37348 } 37349 37350 sqlite3.Xsqlite3_vfs_register(tls, pMain, 0) 37351 37352 sqlite3.Xsqlite3_vfs_unregister(tls, pMain) 37353 37354 for i = int32(uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)); i >= 0; i-- { 37355 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 37356 sqlite3.Xsqlite3_vfs_register(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)), 1) 37357 37358 } 37359 } 37360 37361 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 37362 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 37363 37364 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 37365 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 37366 37367 return TCL_OK 37368 } 37369 37370 func vfs_initfail_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37371 bp := tls.Alloc(168) 37372 defer tls.Free(168) 37373 37374 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 37375 37376 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37377 return TCL_ERROR 37378 } 37379 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 37380 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37381 return TCL_ERROR 37382 } 37383 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 37384 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37385 return TCL_ERROR 37386 } 37387 return TCL_OK 37388 } 37389 37390 var apVfs [20]uintptr 37391 var nVfs int32 = 0 37392 37393 func vfs_unregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37394 var i int32 37395 for i = 0; i < int32(uint64(unsafe.Sizeof(apVfs))/uint64(unsafe.Sizeof(uintptr(0)))); i++ { 37396 apVfs[i] = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37397 if apVfs[i] == uintptr(0) { 37398 break 37399 } 37400 sqlite3.Xsqlite3_vfs_unregister(tls, apVfs[i]) 37401 } 37402 nVfs = i 37403 return TCL_OK 37404 } 37405 37406 func vfs_reregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37407 var i int32 37408 for i = nVfs - 1; i >= 0; i-- { 37409 sqlite3.Xsqlite3_vfs_register(tls, apVfs[i], 1) 37410 } 37411 return TCL_OK 37412 } 37413 37414 func file_control_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37415 bp := tls.Alloc(44) 37416 defer tls.Free(44) 37417 37418 *(*int32)(unsafe.Pointer(bp + 40)) = 0 37419 37420 var rc int32 37421 _ = rc 37422 37423 if objc != 2 { 37424 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37425 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37426 return TCL_ERROR 37427 } 37428 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37429 return TCL_ERROR 37430 } 37431 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), uintptr(0), 0, bp+40) 37432 37433 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+17738, SQLITE_FCNTL_LOCKSTATE, bp+40) 37434 37435 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+85, -1, bp+40) 37436 37437 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+8931, -1, bp+40) 37438 37439 return TCL_OK 37440 } 37441 37442 func file_control_lasterrno_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37443 bp := tls.Alloc(76) 37444 defer tls.Free(76) 37445 37446 *(*int32)(unsafe.Pointer(bp + 72)) = 0 37447 37448 var rc int32 37449 37450 if objc != 2 { 37451 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37452 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37453 return TCL_ERROR 37454 } 37455 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37456 return TCL_ERROR 37457 } 37458 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_LAST_ERRNO, bp+72) 37459 if rc != 0 { 37460 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37461 return TCL_ERROR 37462 } 37463 if *(*int32)(unsafe.Pointer(bp + 72)) != 0 { 37464 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17751, 37465 tcl.XTcl_GetStringFromObj(tls, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 72))), uintptr(0)), ts+4894, 0)) 37466 return TCL_ERROR 37467 } 37468 return TCL_OK 37469 } 37470 37471 func file_control_data_version(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37472 bp := tls.Alloc(120) 37473 defer tls.Free(120) 37474 37475 var zDb uintptr 37476 37477 var rc int32 37478 37479 if objc != 3 && objc != 2 { 37480 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17779) 37481 return TCL_ERROR 37482 } 37483 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 37484 return TCL_ERROR 37485 } 37486 if objc == 3 { 37487 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37488 } else { 37489 zDb = uintptr(0) 37490 } 37491 37492 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, SQLITE_FCNTL_DATA_VERSION, bp+16) 37493 if rc != 0 { 37494 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37495 return TCL_ERROR 37496 } else { 37497 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+20, ts+17791, libc.VaList(bp, *(*uint32)(unsafe.Pointer(bp + 16)))) 37498 tcl.XTcl_SetResult(tls, interp, bp+20, uintptr(1)) 37499 return TCL_OK 37500 } 37501 return int32(0) 37502 } 37503 37504 func file_control_chunksize_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37505 bp := tls.Alloc(12) 37506 defer tls.Free(12) 37507 37508 var zDb uintptr 37509 37510 var rc int32 37511 37512 if objc != 4 { 37513 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 37514 return TCL_ERROR 37515 } 37516 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37517 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 37518 return TCL_ERROR 37519 } 37520 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37521 if int32(*(*uint8)(unsafe.Pointer(zDb))) == 0 { 37522 zDb = uintptr(0) 37523 } 37524 37525 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_CHUNK_SIZE, bp+8) 37526 if rc != 0 { 37527 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37528 return TCL_ERROR 37529 } 37530 return TCL_OK 37531 } 37532 37533 func file_control_sizehint_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37534 bp := tls.Alloc(16) 37535 defer tls.Free(16) 37536 37537 var zDb uintptr 37538 37539 var rc int32 37540 37541 if objc != 4 { 37542 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 37543 return TCL_ERROR 37544 } 37545 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37546 tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 37547 return TCL_ERROR 37548 } 37549 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37550 if int32(*(*uint8)(unsafe.Pointer(zDb))) == 0 { 37551 zDb = uintptr(0) 37552 } 37553 37554 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_SIZE_HINT, bp+8) 37555 if rc != 0 { 37556 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37557 return TCL_ERROR 37558 } 37559 return TCL_OK 37560 } 37561 37562 func file_control_lockproxy_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37563 bp := tls.Alloc(40) 37564 defer tls.Free(40) 37565 37566 if objc != 3 { 37567 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37568 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17809, 0)) 37569 return TCL_ERROR 37570 } 37571 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37572 return TCL_ERROR 37573 } 37574 37575 return TCL_OK 37576 } 37577 37578 func file_control_persist_wal(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37579 bp := tls.Alloc(176) 37580 defer tls.Free(176) 37581 37582 var rc int32 37583 37584 if objc != 3 { 37585 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37586 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 37587 return TCL_ERROR 37588 } 37589 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37590 return TCL_ERROR 37591 } 37592 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 37593 return TCL_ERROR 37594 } 37595 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_PERSIST_WAL, bp+72) 37596 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 37597 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 37598 return TCL_OK 37599 } 37600 37601 func file_control_powersafe_overwrite(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37602 bp := tls.Alloc(176) 37603 defer tls.Free(176) 37604 37605 var rc int32 37606 37607 if objc != 3 { 37608 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37609 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 37610 return TCL_ERROR 37611 } 37612 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37613 return TCL_ERROR 37614 } 37615 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 37616 return TCL_ERROR 37617 } 37618 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_POWERSAFE_OVERWRITE, bp+72) 37619 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 37620 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 37621 return TCL_OK 37622 } 37623 37624 func file_control_vfsname(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37625 bp := tls.Alloc(64) 37626 defer tls.Free(64) 37627 37628 var zDbName uintptr = ts + 85 37629 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 37630 37631 if objc != 2 && objc != 3 { 37632 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37633 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37634 return TCL_ERROR 37635 } 37636 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 37637 return TCL_ERROR 37638 } 37639 if objc == 3 { 37640 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37641 } 37642 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_VFSNAME, bp+56) 37643 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 37644 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 37645 return TCL_OK 37646 } 37647 37648 func file_control_reservebytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37649 bp := tls.Alloc(12) 37650 defer tls.Free(12) 37651 37652 var zDbName uintptr = ts + 85 37653 *(*int32)(unsafe.Pointer(bp + 8)) = 0 37654 var rc int32 37655 37656 if objc != 3 { 37657 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17844) 37658 return TCL_ERROR 37659 } 37660 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37661 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 37662 return TCL_ERROR 37663 } 37664 37665 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName, SQLITE_FCNTL_RESERVE_BYTES, bp+8) 37666 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 37667 return TCL_OK 37668 } 37669 37670 func file_control_tempfilename(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37671 bp := tls.Alloc(64) 37672 defer tls.Free(64) 37673 37674 var zDbName uintptr = ts + 85 37675 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 37676 37677 if objc != 2 && objc != 3 { 37678 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37679 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37680 return TCL_ERROR 37681 } 37682 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 37683 return TCL_ERROR 37684 } 37685 if objc == 3 { 37686 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37687 } 37688 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_TEMPFILENAME, bp+56) 37689 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 37690 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 37691 return TCL_OK 37692 } 37693 37694 func file_control_external_reader(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37695 bp := tls.Alloc(44) 37696 defer tls.Free(44) 37697 37698 var zName uintptr = ts + 85 37699 *(*int32)(unsafe.Pointer(bp + 40)) = 0 37700 var rc int32 = SQLITE_OK 37701 37702 if objc != 2 && objc != 3 { 37703 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37704 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37705 return TCL_ERROR 37706 } 37707 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37708 return TCL_ERROR 37709 } 37710 if objc == 3 { 37711 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37712 } 37713 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, SQLITE_FCNTL_EXTERNAL_READER, bp+40) 37714 if rc != SQLITE_OK { 37715 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37716 return TCL_ERROR 37717 } 37718 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 37719 return TCL_OK 37720 } 37721 37722 func vfs_list(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37723 var pVfs uintptr 37724 var pRet uintptr = tcl.XTcl_NewObj(tls) 37725 if objc != 1 { 37726 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 37727 return TCL_ERROR 37728 } 37729 for pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)); pVfs != 0; pVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpNext { 37730 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 37731 } 37732 tcl.XTcl_SetObjResult(tls, interp, pRet) 37733 return TCL_OK 37734 } 37735 37736 func test_limit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37737 bp := tls.Alloc(68) 37738 defer tls.Free(68) 37739 37740 var rc int32 37741 var i int32 37742 var id int32 = 0 37743 37744 var zId uintptr 37745 37746 if objc != 4 { 37747 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37748 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17849, 0)) 37749 return TCL_ERROR 37750 } 37751 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 37752 return TCL_ERROR 37753 } 37754 zId = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37755 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 37756 FzName uintptr 37757 Fid int32 37758 F__ccgo_pad1 [4]byte 37759 }{})); i++ { 37760 if libc.Xstrcmp(tls, zId, aId[i].FzName) == 0 { 37761 id = aId[i].Fid 37762 break 37763 } 37764 } 37765 if uint64(i) >= uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 37766 FzName uintptr 37767 Fid int32 37768 F__ccgo_pad1 [4]byte 37769 }{})) { 37770 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17862, zId, uintptr(0))) 37771 return TCL_ERROR 37772 } 37773 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 37774 return TCL_ERROR 37775 } 37776 rc = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), id, *(*int32)(unsafe.Pointer(bp + 64))) 37777 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37778 return TCL_OK 37779 } 37780 37781 var aId = [14]struct { 37782 FzName uintptr 37783 Fid int32 37784 F__ccgo_pad1 [4]byte 37785 }{ 37786 {FzName: ts + 17883}, 37787 {FzName: ts + 17903, Fid: SQLITE_LIMIT_SQL_LENGTH}, 37788 {FzName: ts + 17927, Fid: SQLITE_LIMIT_COLUMN}, 37789 {FzName: ts + 17947, Fid: SQLITE_LIMIT_EXPR_DEPTH}, 37790 {FzName: ts + 17971, Fid: SQLITE_LIMIT_COMPOUND_SELECT}, 37791 {FzName: ts + 18000, Fid: SQLITE_LIMIT_VDBE_OP}, 37792 {FzName: ts + 18021, Fid: SQLITE_LIMIT_FUNCTION_ARG}, 37793 {FzName: ts + 18047, Fid: SQLITE_LIMIT_ATTACHED}, 37794 {FzName: ts + 18069, Fid: SQLITE_LIMIT_LIKE_PATTERN_LENGTH}, 37795 {FzName: ts + 18102, Fid: SQLITE_LIMIT_VARIABLE_NUMBER}, 37796 {FzName: ts + 18131, Fid: SQLITE_LIMIT_TRIGGER_DEPTH}, 37797 {FzName: ts + 18158, Fid: SQLITE_LIMIT_WORKER_THREADS}, 37798 {FzName: ts + 18186, Fid: -1}, 37799 {FzName: ts + 18208, Fid: SQLITE_LIMIT_WORKER_THREADS + 1}, 37800 } 37801 37802 func save_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37803 var rc int32 = sqlite3.Xsqlite3_test_control(tls, 9999, 0) 37804 _ = rc 37805 37806 rc = sqlite3.Xsqlite3_test_control(tls, -1, 0) 37807 37808 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SAVE, 0) 37809 return TCL_OK 37810 } 37811 37812 func restore_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37813 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_RESTORE, 0) 37814 return TCL_OK 37815 } 37816 37817 func reset_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37818 sqlite3.Xsqlite3_randomness(tls, 0, uintptr(0)) 37819 return TCL_OK 37820 } 37821 37822 func prng_seed(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37823 bp := tls.Alloc(32) 37824 defer tls.Free(32) 37825 37826 *(*int32)(unsafe.Pointer(bp + 16)) = 0 37827 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 37828 if objc != 2 && objc != 3 { 37829 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18228) 37830 return TCL_ERROR 37831 } 37832 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 37833 return TCL_ERROR 37834 } 37835 if objc == 3 && getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) != 0 { 37836 return TCL_ERROR 37837 } 37838 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SEED, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 24)))) 37839 return TCL_OK 37840 } 37841 37842 func extra_schema_checks(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37843 bp := tls.Alloc(12) 37844 defer tls.Free(12) 37845 37846 *(*int32)(unsafe.Pointer(bp + 8)) = 0 37847 if objc != 2 { 37848 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 37849 return TCL_ERROR 37850 } 37851 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 37852 return TCL_ERROR 37853 } 37854 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 37855 return TCL_OK 37856 } 37857 37858 func database_may_be_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37859 bp := tls.Alloc(8) 37860 defer tls.Free(8) 37861 37862 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 0)) 37863 return TCL_OK 37864 } 37865 37866 func database_never_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37867 bp := tls.Alloc(8) 37868 defer tls.Free(8) 37869 37870 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 1)) 37871 return TCL_OK 37872 } 37873 37874 func test_pcache_stats(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37875 bp := tls.Alloc(16) 37876 defer tls.Free(16) 37877 37878 var pRet uintptr 37879 37880 sqlite3.Xsqlite3PcacheStats(tls, bp, bp+4, bp+8, bp+12) 37881 37882 pRet = tcl.XTcl_NewObj(tls) 37883 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18246, -1)) 37884 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp)))) 37885 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18254, -1)) 37886 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 37887 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18258, -1)) 37888 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 37889 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18262, -1)) 37890 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 37891 37892 tcl.XTcl_SetObjResult(tls, interp, pRet) 37893 37894 return TCL_OK 37895 } 37896 37897 func test_unlock_notify_cb(tls *libc.TLS, aArg uintptr, nArg int32) { 37898 var ii int32 37899 for ii = 0; ii < nArg; ii++ { 37900 tcl.XTcl_EvalEx(tls, *(*uintptr)(unsafe.Pointer(aArg + uintptr(ii)*8)), ts+13692, -1, TCL_EVAL_GLOBAL) 37901 } 37902 } 37903 37904 func test_unlock_notify(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37905 bp := tls.Alloc(8) 37906 defer tls.Free(8) 37907 37908 var rc int32 37909 37910 if objc != 2 { 37911 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37912 return TCL_ERROR 37913 } 37914 37915 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37916 return TCL_ERROR 37917 } 37918 rc = sqlite3.Xsqlite3_unlock_notify(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct { 37919 f func(*libc.TLS, uintptr, int32) 37920 }{test_unlock_notify_cb})), interp) 37921 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37922 return TCL_OK 37923 } 37924 37925 func test_wal_checkpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37926 bp := tls.Alloc(8) 37927 defer tls.Free(8) 37928 37929 var zDb uintptr = uintptr(0) 37930 37931 var rc int32 37932 37933 if objc != 3 && objc != 2 { 37934 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18273) 37935 return TCL_ERROR 37936 } 37937 37938 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37939 return TCL_ERROR 37940 } 37941 if objc == 3 { 37942 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37943 } 37944 rc = sqlite3.Xsqlite3_wal_checkpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 37945 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37946 return TCL_OK 37947 } 37948 37949 func test_wal_checkpoint_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37950 bp := tls.Alloc(96) 37951 defer tls.Free(96) 37952 37953 var zDb uintptr = uintptr(0) 37954 37955 var rc int32 37956 37957 *(*int32)(unsafe.Pointer(bp + 88)) = -555 37958 *(*int32)(unsafe.Pointer(bp + 92)) = -555 37959 var pRet uintptr 37960 37961 *(*[5]uintptr)(unsafe.Pointer(bp + 48)) = [5]uintptr{ts + 18283, ts + 18291, ts + 18296, ts + 18304, uintptr(0)} 37962 37963 if objc != 3 && objc != 4 { 37964 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18313) 37965 return TCL_ERROR 37966 } 37967 37968 if objc == 4 { 37969 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37970 } 37971 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 || TCL_OK != tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) && 37972 TCL_OK != tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+48, int32(unsafe.Sizeof(uintptr(0))), ts+18328, 0, bp+40) { 37973 return TCL_ERROR 37974 } 37975 37976 rc = sqlite3.Xsqlite3_wal_checkpoint_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zDb, *(*int32)(unsafe.Pointer(bp + 40)), bp+88, bp+92) 37977 if rc != SQLITE_OK && rc != SQLITE_BUSY { 37978 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 37979 tcl.XTcl_ResetResult(tls, interp) 37980 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErrCode, ts+9645, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0)) 37981 return TCL_ERROR 37982 } 37983 37984 pRet = tcl.XTcl_NewObj(tls) 37985 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, func() int32 { 37986 if rc == SQLITE_BUSY { 37987 return 1 37988 } 37989 return 0 37990 }())) 37991 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 88)))) 37992 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 92)))) 37993 tcl.XTcl_SetObjResult(tls, interp, pRet) 37994 37995 return TCL_OK 37996 } 37997 37998 func test_wal_autocheckpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37999 bp := tls.Alloc(12) 38000 defer tls.Free(12) 38001 38002 var rc int32 38003 38004 if objc != 3 { 38005 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18333) 38006 return TCL_ERROR 38007 } 38008 38009 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 38010 tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 38011 return TCL_ERROR 38012 } 38013 38014 rc = sqlite3.Xsqlite3_wal_autocheckpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 38015 tcl.XTcl_ResetResult(tls, interp) 38016 if rc != SQLITE_OK { 38017 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 38018 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErrCode, -1)) 38019 return TCL_ERROR 38020 } 38021 38022 return TCL_OK 38023 } 38024 38025 type LogCallback = struct { 38026 FpInterp uintptr 38027 FpObj uintptr 38028 } 38029 38030 var logcallback = LogCallback{} 38031 38032 func xLogcallback(tls *libc.TLS, unused uintptr, err int32, zMsg uintptr) { 38033 var pNew uintptr = tcl.XTcl_DuplicateObj(tls, logcallback.FpObj) 38034 (*Tcl_Obj)(unsafe.Pointer(pNew)).FrefCount++ 38035 tcl.XTcl_ListObjAppendElement(tls, 38036 uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, err), -1)) 38037 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, zMsg, -1)) 38038 tcl.XTcl_EvalObjEx(tls, logcallback.FpInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT) 38039 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 38040 var _objPtr uintptr = pNew 38041 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 38042 tcl.XTclFreeObj(tls, _objPtr) 38043 } 38044 } 38045 } 38046 38047 func test_sqlite3_log(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38048 bp := tls.Alloc(32) 38049 defer tls.Free(32) 38050 38051 if objc > 2 { 38052 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10187) 38053 return TCL_ERROR 38054 } 38055 if logcallback.FpObj != 0 { 38056 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 38057 var _objPtr uintptr = logcallback.FpObj 38058 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 38059 tcl.XTclFreeObj(tls, _objPtr) 38060 } 38061 } 38062 logcallback.FpObj = uintptr(0) 38063 logcallback.FpInterp = uintptr(0) 38064 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp, uintptr(0), uintptr(0))) 38065 } 38066 if objc > 1 { 38067 logcallback.FpObj = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 38068 (*Tcl_Obj)(unsafe.Pointer(logcallback.FpObj)).FrefCount++ 38069 logcallback.FpInterp = interp 38070 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct { 38071 f func(*libc.TLS, uintptr, int32, uintptr) 38072 }{xLogcallback})), uintptr(0))) 38073 } 38074 return TCL_OK 38075 } 38076 38077 func runAsObjProc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38078 bp := tls.Alloc(112) 38079 defer tls.Free(112) 38080 38081 if objc < 2 { 38082 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18342) 38083 return TCL_ERROR 38084 } 38085 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 38086 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 38087 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 38088 return TCL_ERROR 38089 } 38090 if (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjProc == uintptr(0) { 38091 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18354, 38092 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 38093 return TCL_ERROR 38094 } 38095 return (*struct { 38096 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 38097 })(unsafe.Pointer(&struct{ uintptr }{(*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjProc})).f(tls, (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjClientData, interp, objc-1, objv+uintptr(1)*8) 38098 } 38099 38100 func printExplainQueryPlan(tls *libc.TLS, pStmt uintptr) int32 { 38101 bp := tls.Alloc(48) 38102 defer tls.Free(48) 38103 38104 var zSql uintptr 38105 var zExplain uintptr 38106 38107 var rc int32 38108 38109 zSql = sqlite3.Xsqlite3_sql(tls, pStmt) 38110 if zSql == uintptr(0) { 38111 return SQLITE_ERROR 38112 } 38113 38114 zExplain = sqlite3.Xsqlite3_mprintf(tls, ts+330, libc.VaList(bp, zSql)) 38115 if zExplain == uintptr(0) { 38116 return SQLITE_NOMEM 38117 } 38118 38119 rc = sqlite3.Xsqlite3_prepare_v2(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt), zExplain, -1, bp+40, uintptr(0)) 38120 sqlite3.Xsqlite3_free(tls, zExplain) 38121 if rc != SQLITE_OK { 38122 return rc 38123 } 38124 38125 for SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 38126 var iSelectid int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 38127 var iOrder int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 38128 var iFrom int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 38129 var zDetail uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 3) 38130 38131 libc.Xprintf(tls, ts+18379, libc.VaList(bp+8, iSelectid, iOrder, iFrom, zDetail)) 38132 } 38133 38134 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 38135 } 38136 38137 func test_print_eqp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38138 bp := tls.Alloc(8) 38139 defer tls.Free(8) 38140 38141 var rc int32 38142 38143 if objc != 2 { 38144 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 38145 return TCL_ERROR 38146 } 38147 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38148 return TCL_ERROR 38149 } 38150 rc = printExplainQueryPlan(tls, *(*uintptr)(unsafe.Pointer(bp))) 38151 38152 libc.Xfflush(tls, libc.Xstdout) 38153 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 38154 return TCL_OK 38155 } 38156 38157 type timex = struct { 38158 Fmodes uint32 38159 F__ccgo_pad1 [4]byte 38160 Foffset int64 38161 Ffreq int64 38162 Fmaxerror int64 38163 Festerror int64 38164 Fstatus int32 38165 F__ccgo_pad2 [4]byte 38166 Fconstant int64 38167 Fprecision int64 38168 Ftolerance int64 38169 Ftime struct { 38170 Ftv_sec int64 38171 Ftv_usec int64 38172 } 38173 Ftick int64 38174 Fppsfreq int64 38175 Fjitter int64 38176 Fshift int32 38177 F__ccgo_pad3 [4]byte 38178 Fstabil int64 38179 Fjitcnt int64 38180 Fcalcnt int64 38181 Ferrcnt int64 38182 Fstbcnt int64 38183 Ftai int32 38184 __164 uint32 38185 __168 uint32 38186 __172 uint32 38187 __176 uint32 38188 __180 uint32 38189 __184 uint32 38190 __188 uint32 38191 __192 uint32 38192 __196 uint32 38193 __200 uint32 38194 __204 uint32 38195 } 38196 38197 func testLocaltime(tls *libc.TLS, aliasT uintptr, aliasTM uintptr) int32 { 38198 var t time_t = *(*time_t)(unsafe.Pointer(aliasT)) 38199 var pTm uintptr = aliasTM 38200 var altT time_t 38201 var iJD sqlite3_int64 38202 var Z int32 38203 var A int32 38204 var B int32 38205 var C int32 38206 var D int32 38207 var E int32 38208 var X1 int32 38209 var S int32 38210 38211 if t/int64(86400)&int64(1) != 0 { 38212 altT = t + int64(1800) 38213 } else { 38214 altT = t - int64(1800) 38215 } 38216 iJD = altT + 210866760000 38217 Z = int32((iJD + int64(43200)) / int64(86400)) 38218 A = libc.Int32FromFloat64((float64(Z) - 1867216.25) / 36524.25) 38219 A = Z + 1 + A - A/4 38220 B = A + 1524 38221 C = libc.Int32FromFloat64((float64(B) - 122.1) / 365.25) 38222 D = 36525 * (C & 32767) / 100 38223 E = libc.Int32FromFloat64(float64(B-D) / 30.6001) 38224 X1 = libc.Int32FromFloat64(30.6001 * float64(E)) 38225 (*tm)(unsafe.Pointer(pTm)).Ftm_mday = B - D - X1 38226 (*tm)(unsafe.Pointer(pTm)).Ftm_mon = func() int32 { 38227 if E < 14 { 38228 return E - 2 38229 } 38230 return E - 14 38231 }() 38232 (*tm)(unsafe.Pointer(pTm)).Ftm_year = func() int32 { 38233 if (*tm)(unsafe.Pointer(pTm)).Ftm_mon > 1 { 38234 return C - 4716 38235 } 38236 return C - 4715 38237 }() - 1900 38238 S = int32((iJD + int64(43200)) % int64(86400)) 38239 (*tm)(unsafe.Pointer(pTm)).Ftm_hour = S / 3600 38240 (*tm)(unsafe.Pointer(pTm)).Ftm_min = S / 60 % 60 38241 (*tm)(unsafe.Pointer(pTm)).Ftm_sec = S % 60 38242 return libc.Bool32(t == int64(959609760)) 38243 } 38244 38245 func test_test_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38246 bp := tls.Alloc(192) 38247 defer tls.Free(192) 38248 38249 *(*[4]Verb)(unsafe.Pointer(bp + 72)) = [4]Verb{ 38250 {FzName: ts + 18392, Fi: SQLITE_TESTCTRL_LOCALTIME_FAULT}, 38251 {FzName: ts + 18424, Fi: SQLITE_TESTCTRL_SORTER_MMAP}, 38252 {FzName: ts + 18452, Fi: SQLITE_TESTCTRL_IMPOSTER}, 38253 {FzName: ts + 18477, Fi: SQLITE_TESTCTRL_INTERNAL_FUNCTIONS}, 38254 } 38255 38256 var iFlag int32 38257 var rc int32 38258 38259 if objc < 2 { 38260 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18512) 38261 return TCL_ERROR 38262 } 38263 38264 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 38265 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+72, int32(unsafe.Sizeof(Verb{})), ts+18525, 0, bp+136) 38266 if rc != TCL_OK { 38267 return rc 38268 } 38269 38270 iFlag = (*Verb)(unsafe.Pointer(bp + 72 + uintptr(*(*int32)(unsafe.Pointer(bp + 136)))*16)).Fi 38271 switch iFlag { 38272 case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: 38273 { 38274 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 38275 if objc != 3 { 38276 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 38277 return TCL_ERROR 38278 } 38279 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+144) != 0 { 38280 return TCL_ERROR 38281 } 38282 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(bp + 144)))) 38283 break 38284 38285 } 38286 case SQLITE_TESTCTRL_LOCALTIME_FAULT: 38287 { 38288 if objc != 3 { 38289 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18530) 38290 return TCL_ERROR 38291 } 38292 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+152) != 0 { 38293 return TCL_ERROR 38294 } 38295 sqlite3.Xsqlite3_test_control(tls, iFlag, libc.VaList(bp+8, *(*int32)(unsafe.Pointer(bp + 152)), *(*uintptr)(unsafe.Pointer(&struct { 38296 f func(*libc.TLS, uintptr, uintptr) int32 38297 }{testLocaltime})))) 38298 break 38299 38300 } 38301 38302 case SQLITE_TESTCTRL_SORTER_MMAP: 38303 { 38304 if objc != 4 { 38305 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18536) 38306 return TCL_ERROR 38307 } 38308 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+160) != 0 { 38309 return TCL_ERROR 38310 } 38311 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168) != 0 { 38312 return TCL_ERROR 38313 } 38314 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_SORTER_MMAP, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 160)), *(*int32)(unsafe.Pointer(bp + 168)))) 38315 break 38316 38317 } 38318 38319 case SQLITE_TESTCTRL_IMPOSTER: 38320 { 38321 var zDbName uintptr 38322 38323 if objc != 6 { 38324 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18545) 38325 return TCL_ERROR 38326 } 38327 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+176) != 0 { 38328 return TCL_ERROR 38329 } 38330 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 38331 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+184) != 0 { 38332 return TCL_ERROR 38333 } 38334 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+188) != 0 { 38335 return TCL_ERROR 38336 } 38337 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_IMPOSTER, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 176)), zDbName, *(*int32)(unsafe.Pointer(bp + 184)), *(*int32)(unsafe.Pointer(bp + 188)))) 38338 break 38339 38340 } 38341 } 38342 38343 tcl.XTcl_ResetResult(tls, interp) 38344 return TCL_OK 38345 } 38346 38347 type Verb = struct { 38348 FzName uintptr 38349 Fi int32 38350 F__ccgo_pad1 [4]byte 38351 } 38352 38353 type rlim_t = uint64 38354 type rlim64_t = uint64 38355 38356 type rlimit = struct { 38357 Frlim_cur rlim_t 38358 Frlim_max rlim_t 38359 } 38360 38361 type rlimit64 = struct { 38362 Frlim_cur rlim64_t 38363 Frlim_max rlim64_t 38364 } 38365 38366 type rusage = struct { 38367 Fru_utime struct { 38368 Ftv_sec int64 38369 Ftv_usec int64 38370 } 38371 Fru_stime struct { 38372 Ftv_sec int64 38373 Ftv_usec int64 38374 } 38375 F__32 struct{ Fru_maxrss int64 } 38376 F__40 struct{ Fru_ixrss int64 } 38377 F__48 struct{ Fru_idrss int64 } 38378 F__56 struct{ Fru_isrss int64 } 38379 F__64 struct{ Fru_minflt int64 } 38380 F__72 struct{ Fru_majflt int64 } 38381 F__80 struct{ Fru_nswap int64 } 38382 F__88 struct{ Fru_inblock int64 } 38383 F__96 struct{ Fru_oublock int64 } 38384 F__104 struct{ Fru_msgsnd int64 } 38385 F__112 struct{ Fru_msgrcv int64 } 38386 F__120 struct{ Fru_nsignals int64 } 38387 F__128 struct{ Fru_nvcsw int64 } 38388 F__136 struct{ Fru_nivcsw int64 } 38389 } 38390 38391 func test_getrusage(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38392 bp := tls.Alloc(1216) 38393 defer tls.Free(1216) 38394 38395 libc.Xmemset(tls, bp+48, 0, uint64(unsafe.Sizeof(rusage{}))) 38396 libc.Xgetrusage(tls, RUSAGE_SELF, bp+48) 38397 38398 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1024]uint8{})), bp+192, 38399 ts+18566, 38400 libc.VaList(bp, int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_usec), 38401 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_usec), 38402 int32(*(*int64)(unsafe.Pointer(bp + 48 + 64))), int32(*(*int64)(unsafe.Pointer(bp + 48 + 72))))) 38403 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+192, -1)) 38404 return TCL_OK 38405 } 38406 38407 func optimization_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38408 bp := tls.Alloc(68) 38409 defer tls.Free(68) 38410 38411 var i int32 38412 38413 var zOpt uintptr 38414 38415 var mask int32 = 0 38416 38417 if objc != 4 { 38418 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18626) 38419 return TCL_ERROR 38420 } 38421 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 38422 return TCL_ERROR 38423 } 38424 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 38425 return TCL_ERROR 38426 } 38427 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38428 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38429 FzOptName uintptr 38430 Fmask int32 38431 F__ccgo_pad1 [4]byte 38432 }{})); i++ { 38433 if libc.Xstrcmp(tls, zOpt, aOpt[i].FzOptName) == 0 { 38434 mask = aOpt[i].Fmask 38435 break 38436 } 38437 } 38438 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 38439 mask = ^mask 38440 } 38441 if uint64(i) >= uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38442 FzOptName uintptr 38443 Fmask int32 38444 F__ccgo_pad1 [4]byte 38445 }{})) { 38446 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18641, 38447 uintptr(0))) 38448 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38449 FzOptName uintptr 38450 Fmask int32 38451 F__ccgo_pad1 [4]byte 38452 }{})); i++ { 38453 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+4894, aOpt[i].FzOptName, uintptr(0))) 38454 } 38455 return TCL_ERROR 38456 } 38457 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_OPTIMIZATIONS, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 56)), mask)) 38458 return TCL_OK 38459 } 38460 38461 var aOpt = [14]struct { 38462 FzOptName uintptr 38463 Fmask int32 38464 F__ccgo_pad1 [4]byte 38465 }{ 38466 {FzOptName: ts + 18682, Fmask: libc.Int32FromUint32(SQLITE_AllOpts)}, 38467 {FzOptName: ts + 18686}, 38468 {FzOptName: ts + 18691, Fmask: SQLITE_QueryFlattener}, 38469 {FzOptName: ts + 18707, Fmask: SQLITE_GroupByOrder}, 38470 {FzOptName: ts + 18721, Fmask: SQLITE_FactorOutConst}, 38471 {FzOptName: ts + 18738, Fmask: SQLITE_DistinctOpt}, 38472 {FzOptName: ts + 18751, Fmask: SQLITE_CoverIdxScan}, 38473 {FzOptName: ts + 18766, Fmask: SQLITE_OrderByIdxJoin}, 38474 {FzOptName: ts + 18784, Fmask: SQLITE_Transitive}, 38475 {FzOptName: ts + 18795, Fmask: SQLITE_OmitNoopJoin}, 38476 {FzOptName: ts + 18810, Fmask: SQLITE_Stat4}, 38477 {FzOptName: ts + 18816, Fmask: SQLITE_SkipScan}, 38478 {FzOptName: ts + 18826, Fmask: SQLITE_PushDown}, 38479 {FzOptName: ts + 18836, Fmask: SQLITE_BalancedMerge}, 38480 } 38481 38482 func tclLoadStaticExtensionCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38483 bp := tls.Alloc(80) 38484 defer tls.Free(80) 38485 38486 var zName uintptr 38487 var i int32 38488 var j int32 38489 var rc int32 38490 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 38491 if objc < 3 { 38492 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18851) 38493 return TCL_ERROR 38494 } 38495 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 38496 return TCL_ERROR 38497 } 38498 for j = 2; j < objc; j++ { 38499 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(j)*8))) 38500 for i = 0; i < int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 38501 FzExtName uintptr 38502 FpInit uintptr 38503 }{}))); i++ { 38504 if libc.Xstrcmp(tls, zName, aExtension[i].FzExtName) == 0 { 38505 break 38506 } 38507 } 38508 if i >= int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 38509 FzExtName uintptr 38510 FpInit uintptr 38511 }{}))) { 38512 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18863, zName, uintptr(0))) 38513 return TCL_ERROR 38514 } 38515 if aExtension[i].FpInit != 0 { 38516 rc = (*struct { 38517 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 38518 })(unsafe.Pointer(&struct{ uintptr }{aExtension[i].FpInit})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), bp+72, uintptr(0)) 38519 } else { 38520 rc = SQLITE_OK 38521 } 38522 if rc != SQLITE_OK && rc != SQLITE_OK|int32(1)<<8 || *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 38523 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18883, zName, ts+18902, *(*uintptr)(unsafe.Pointer(bp + 72)), 38524 uintptr(0))) 38525 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38526 return TCL_ERROR 38527 } 38528 } 38529 return TCL_OK 38530 } 38531 38532 var aExtension = [22]struct { 38533 FzExtName uintptr 38534 FpInit uintptr 38535 }{ 38536 {FzExtName: ts + 18912, FpInit: 0}, 38537 {FzExtName: ts + 18919, FpInit: 0}, 38538 {FzExtName: ts + 4060, FpInit: 0}, 38539 {FzExtName: ts + 18929, FpInit: 0}, 38540 {FzExtName: ts + 4815, FpInit: 0}, 38541 {FzExtName: ts + 4838, FpInit: 0}, 38542 {FzExtName: ts + 4896, FpInit: 0}, 38543 {FzExtName: ts + 4974, FpInit: 0}, 38544 {FzExtName: ts + 18937, FpInit: 0}, 38545 {FzExtName: ts + 5483, FpInit: 0}, 38546 {FzExtName: ts + 5507, FpInit: 0}, 38547 {FzExtName: ts + 18944, FpInit: 0}, 38548 {FzExtName: ts + 6087, FpInit: 0}, 38549 {FzExtName: ts + 6162, FpInit: 0}, 38550 {FzExtName: ts + 6535, FpInit: 0}, 38551 {FzExtName: ts + 6831, FpInit: 0}, 38552 {FzExtName: ts + 6846, FpInit: 0}, 38553 {FzExtName: ts + 18953, FpInit: 0}, 38554 {FzExtName: ts + 18960, FpInit: 0}, 38555 {FzExtName: ts + 18969, FpInit: 0}, 38556 {FzExtName: ts + 8921, FpInit: 0}, 38557 {FzExtName: ts + 9463, FpInit: 0}, 38558 } 38559 38560 func sorter_test_fakeheap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38561 bp := tls.Alloc(4) 38562 defer tls.Free(4) 38563 38564 if objc != 2 { 38565 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 38566 return TCL_ERROR 38567 } 38568 38569 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 38570 return TCL_ERROR 38571 } 38572 38573 if *(*int32)(unsafe.Pointer(bp)) != 0 { 38574 if sqlite3.Xsqlite3Config.FpHeap == uintptr(0) { 38575 sqlite3.Xsqlite3Config.FpHeap = libc.UintptrFromInt64(int64(-1)) 38576 } 38577 } else { 38578 if sqlite3.Xsqlite3Config.FpHeap == libc.UintptrFromInt64(int64(-1)) { 38579 sqlite3.Xsqlite3Config.FpHeap = uintptr(0) 38580 } 38581 } 38582 38583 tcl.XTcl_ResetResult(tls, interp) 38584 return TCL_OK 38585 } 38586 38587 func sorter_test_sort4_helper(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38588 bp := tls.Alloc(80) 38589 defer tls.Free(80) 38590 38591 var zSql1 uintptr 38592 var zSql2 uintptr 38593 38594 var iStep int32 38595 var iCksum1 uint32 38596 var iCksum2 uint32 38597 var rc int32 38598 var iB int32 38599 38600 var a int32 38601 var a1 int32 38602 iCksum1 = uint32(0) 38603 iCksum2 = uint32(0) 38604 38605 if !(objc != 5) { 38606 goto __1 38607 } 38608 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18976) 38609 return TCL_ERROR 38610 __1: 38611 ; 38612 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0) { 38613 goto __2 38614 } 38615 return TCL_ERROR 38616 __2: 38617 ; 38618 zSql1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38619 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0) { 38620 goto __3 38621 } 38622 return TCL_ERROR 38623 __3: 38624 ; 38625 zSql2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 38626 38627 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql1, -1, bp+72, uintptr(0)) 38628 if !(rc != SQLITE_OK) { 38629 goto __4 38630 } 38631 goto sql_error 38632 __4: 38633 ; 38634 iB = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) - 1 38635 iStep = 0 38636 __5: 38637 if !(iStep < *(*int32)(unsafe.Pointer(bp + 64)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 38638 goto __7 38639 } 38640 a = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 38641 if !(a != sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), iB)) { 38642 goto __8 38643 } 38644 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18995, 0)) 38645 return TCL_ERROR 38646 __8: 38647 ; 38648 iCksum1 = iCksum1 + (iCksum1<<3 + uint32(a)) 38649 goto __6 38650 __6: 38651 iStep++ 38652 goto __5 38653 goto __7 38654 __7: 38655 ; 38656 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38657 if !(rc != SQLITE_OK) { 38658 goto __9 38659 } 38660 goto sql_error 38661 __9: 38662 ; 38663 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql2, -1, bp+72, uintptr(0)) 38664 if !(rc != SQLITE_OK) { 38665 goto __10 38666 } 38667 goto sql_error 38668 __10: 38669 ; 38670 iStep = 0 38671 __11: 38672 if !(SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 38673 goto __13 38674 } 38675 a1 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 38676 iCksum2 = iCksum2 + (iCksum2<<3 + uint32(a1)) 38677 goto __12 38678 __12: 38679 iStep++ 38680 goto __11 38681 goto __13 38682 __13: 38683 ; 38684 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38685 if !(rc != SQLITE_OK) { 38686 goto __14 38687 } 38688 goto sql_error 38689 __14: 38690 ; 38691 if !(iCksum1 != iCksum2) { 38692 goto __15 38693 } 38694 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19014, 0)) 38695 return TCL_ERROR 38696 __15: 38697 ; 38698 return TCL_OK 38699 sql_error: 38700 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19032, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 56))), 0)) 38701 return TCL_ERROR 38702 } 38703 38704 func test_bad_behavior(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38705 bp := tls.Alloc(44) 38706 defer tls.Free(44) 38707 38708 var xyz int32 38709 var i int32 = *(*int32)(unsafe.Pointer(clientData)) 38710 var j int32 38711 38712 var a uintptr 38713 if objc != 2 { 38714 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19044) 38715 return TCL_ERROR 38716 } 38717 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 38718 return TCL_ERROR 38719 } 38720 switch *(*int32)(unsafe.Pointer(bp)) { 38721 case 1: 38722 { 38723 xyz = 0x7fffff00 - i 38724 xyz = xyz + 0x100 38725 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, xyz)) 38726 break 38727 38728 } 38729 case 2: 38730 { 38731 *(*int32)(unsafe.Pointer(bp + 4 + 1*4)) = 5 38732 if *(*int32)(unsafe.Pointer(bp + 4 + uintptr(i)*4)) > 0 { 38733 *(*int32)(unsafe.Pointer(bp + 4 + 1*4))++ 38734 } 38735 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4 + 1*4)))) 38736 break 38737 38738 } 38739 case 3: 38740 { 38741 a = libc.Xmalloc(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(10)) 38742 for j = 0; j < 10; j++ { 38743 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = j 38744 } 38745 libc.Xfree(tls, a) 38746 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 38747 break 38748 38749 } 38750 case 4: 38751 { 38752 tcl.XTcl_Panic(tls, ts+19049, 0) 38753 break 38754 38755 } 38756 } 38757 return TCL_OK 38758 } 38759 38760 func test_register_dbstat_vtab(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38761 bp := tls.Alloc(64) 38762 defer tls.Free(64) 38763 38764 var zDb uintptr 38765 38766 if objc != 2 { 38767 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38768 return TCL_ERROR 38769 } 38770 38771 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38772 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp) != 0 { 38773 var db uintptr = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)).Fdb 38774 sqlite3.Xsqlite3DbstatRegister(tls, db) 38775 } 38776 return TCL_OK 38777 } 38778 38779 func test_sqlite3_db_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38780 bp := tls.Alloc(28) 38781 defer tls.Free(28) 38782 38783 var i int32 38784 *(*int32)(unsafe.Pointer(bp + 24)) = 0 38785 var zSetting uintptr 38786 38787 if objc != 4 && objc != 3 { 38788 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19066) 38789 return TCL_ERROR 38790 } 38791 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 38792 return TCL_ERROR 38793 } 38794 zSetting = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38795 if sqlite3.Xsqlite3_strglob(tls, ts+19085, zSetting) == 0 { 38796 zSetting += uintptr(7) 38797 } 38798 if sqlite3.Xsqlite3_strglob(tls, ts+19094, zSetting) == 0 { 38799 zSetting += uintptr(9) 38800 } 38801 if sqlite3.Xsqlite3_strglob(tls, ts+19105, zSetting) == 0 { 38802 zSetting += uintptr(7) 38803 } 38804 for i = 0; i < int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 38805 FzName uintptr 38806 FeVal int32 38807 F__ccgo_pad1 [4]byte 38808 }{}))); i++ { 38809 if libc.Xstrcmp(tls, zSetting, aSetting[i].FzName) == 0 { 38810 break 38811 } 38812 } 38813 if i >= int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 38814 FzName uintptr 38815 FeVal int32 38816 F__ccgo_pad1 [4]byte 38817 }{}))) { 38818 tcl.XTcl_SetObjResult(tls, interp, 38819 tcl.XTcl_NewStringObj(tls, ts+19114, -1)) 38820 return TCL_ERROR 38821 } 38822 if objc == 4 { 38823 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 38824 return TCL_ERROR 38825 } 38826 } else { 38827 *(*int32)(unsafe.Pointer(bp + 24)) = -1 38828 } 38829 sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), aSetting[i].FeVal, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 24)), bp+24)) 38830 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 24)))) 38831 return TCL_OK 38832 } 38833 38834 var aSetting = [14]struct { 38835 FzName uintptr 38836 FeVal int32 38837 F__ccgo_pad1 [4]byte 38838 }{ 38839 {FzName: ts + 19148, FeVal: SQLITE_DBCONFIG_ENABLE_FKEY}, 38840 {FzName: ts + 19153, FeVal: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 38841 {FzName: ts + 19161, FeVal: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 38842 {FzName: ts + 19176, FeVal: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 38843 {FzName: ts + 19191, FeVal: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 38844 {FzName: ts + 19208, FeVal: SQLITE_DBCONFIG_ENABLE_QPSG}, 38845 {FzName: ts + 19213, FeVal: SQLITE_DBCONFIG_TRIGGER_EQP}, 38846 {FzName: ts + 19225, FeVal: SQLITE_DBCONFIG_RESET_DATABASE}, 38847 {FzName: ts + 19234, FeVal: SQLITE_DBCONFIG_DEFENSIVE}, 38848 {FzName: ts + 19244, FeVal: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 38849 {FzName: ts + 19260, FeVal: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 38850 {FzName: ts + 19279, FeVal: SQLITE_DBCONFIG_DQS_DML}, 38851 {FzName: ts + 19287, FeVal: SQLITE_DBCONFIG_DQS_DDL}, 38852 {FzName: ts + 19295, FeVal: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 38853 } 38854 38855 func test_sqlite3_txn_state(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38856 bp := tls.Alloc(8) 38857 defer tls.Free(8) 38858 38859 var zSchema uintptr 38860 var iTxn int32 38861 38862 if objc != 2 && objc != 3 { 38863 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19314) 38864 return TCL_ERROR 38865 } 38866 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38867 return TCL_ERROR 38868 } 38869 if objc == 3 { 38870 zSchema = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38871 } else { 38872 zSchema = uintptr(0) 38873 } 38874 iTxn = sqlite3.Xsqlite3_txn_state(tls, *(*uintptr)(unsafe.Pointer(bp)), zSchema) 38875 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iTxn)) 38876 return TCL_OK 38877 } 38878 38879 func test_dbconfig_maindbname_icecube(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38880 bp := tls.Alloc(16) 38881 defer tls.Free(16) 38882 38883 var rc int32 38884 38885 if objc != 2 { 38886 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38887 return TCL_ERROR 38888 } else { 38889 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 38890 return TCL_ERROR 38891 } 38892 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), SQLITE_DBCONFIG_MAINDBNAME, libc.VaList(bp, ts+19326)) 38893 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 38894 return TCL_OK 38895 } 38896 return int32(0) 38897 } 38898 38899 func test_mmap_warm(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38900 bp := tls.Alloc(8) 38901 defer tls.Free(8) 38902 38903 if objc != 2 && objc != 3 { 38904 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19334) 38905 return TCL_ERROR 38906 } else { 38907 var rc int32 38908 38909 var zDb uintptr = uintptr(0) 38910 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38911 return TCL_ERROR 38912 } 38913 if objc == 3 { 38914 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38915 } 38916 rc = sqlite3_mmap_warm(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 38917 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 38918 return TCL_OK 38919 } 38920 return int32(0) 38921 } 38922 38923 func test_write_db(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38924 bp := tls.Alloc(32) 38925 defer tls.Free(32) 38926 38927 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 38928 *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) = int64(0) 38929 var aData uintptr = uintptr(0) 38930 *(*int32)(unsafe.Pointer(bp + 16)) = 0 38931 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 38932 var rc int32 38933 38934 if objc != 4 { 38935 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19346) 38936 return TCL_ERROR 38937 } 38938 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38939 return TCL_ERROR 38940 } 38941 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 38942 return TCL_ERROR 38943 } 38944 aData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16) 38945 38946 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 38947 rc = (*struct { 38948 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 38949 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)))).FpMethods)).FxWrite})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), aData, *(*int32)(unsafe.Pointer(bp + 16)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 8))) 38950 38951 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38952 return TCL_OK 38953 } 38954 38955 func test_register_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38956 if objc != 1 { 38957 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38958 return TCL_ERROR 38959 } else { 38960 var rc int32 = sqlite3_register_cksumvfs(tls, uintptr(0)) 38961 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38962 } 38963 return TCL_OK 38964 } 38965 38966 func test_unregister_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38967 if objc != 1 { 38968 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38969 return TCL_ERROR 38970 } else { 38971 var rc int32 = sqlite3_unregister_cksumvfs(tls) 38972 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 38973 } 38974 return TCL_OK 38975 } 38976 38977 func test_decode_hexdb(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38978 bp := tls.Alloc(296) 38979 defer tls.Free(296) 38980 38981 var zIn uintptr = uintptr(0) 38982 var a uintptr = uintptr(0) 38983 *(*int32)(unsafe.Pointer(bp + 216)) = 0 38984 var lineno int32 = 0 38985 var i int32 38986 var iNext int32 38987 var iOffset int32 = 0 38988 38989 var rc int32 38990 38991 if objc != 2 { 38992 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19361) 38993 return TCL_ERROR 38994 } 38995 zIn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38996 for i = 0; *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) != 0; i = iNext { 38997 lineno++ 38998 for iNext = i; *(*uint8)(unsafe.Pointer(zIn + uintptr(iNext))) != 0 && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iNext)))) != '\n'; iNext++ { 38999 } 39000 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iNext)))) == '\n' { 39001 iNext++ 39002 } 39003 for int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == ' ' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '\t' { 39004 i++ 39005 } 39006 if a == uintptr(0) { 39007 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19367, libc.VaList(bp, bp+216, bp+220)) 39008 if rc != 2 { 39009 continue 39010 } 39011 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 { 39012 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19389, uintptr(0))) 39013 return TCL_ERROR 39014 } 39015 *(*int32)(unsafe.Pointer(bp + 216)) = (*(*int32)(unsafe.Pointer(bp + 216)) + *(*int32)(unsafe.Pointer(bp + 220)) - 1) & ^(*(*int32)(unsafe.Pointer(bp + 220)) - 1) 39016 if *(*int32)(unsafe.Pointer(bp + 216)) < 512 { 39017 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19410, uintptr(0))) 39018 return TCL_ERROR 39019 } 39020 a = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 39021 if a == uintptr(0) { 39022 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+2069, uintptr(0))) 39023 return TCL_ERROR 39024 } 39025 libc.Xmemset(tls, a, 0, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 39026 continue 39027 } 39028 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19427, libc.VaList(bp+64, bp+224, bp+228)) 39029 if rc == 2 { 39030 iOffset = *(*int32)(unsafe.Pointer(bp + 228)) 39031 continue 39032 } 39033 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19447, 39034 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, 39035 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)) 39036 if rc == 17 { 39037 *(*int32)(unsafe.Pointer(bp + 228)) = iOffset + *(*int32)(unsafe.Pointer(bp + 224)) 39038 if *(*int32)(unsafe.Pointer(bp + 228))+16 <= *(*int32)(unsafe.Pointer(bp + 216)) { 39039 var ii int32 39040 for ii = 0; ii < 16; ii++ { 39041 *(*uint8)(unsafe.Pointer(a + uintptr(*(*int32)(unsafe.Pointer(bp + 228))+ii))) = uint8(*(*uint32)(unsafe.Pointer(bp + 232 + uintptr(ii)*4)) & uint32(0xff)) 39042 } 39043 } 39044 continue 39045 } 39046 } 39047 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, a, *(*int32)(unsafe.Pointer(bp + 216)))) 39048 libc.Xfree(tls, a) 39049 return TCL_OK 39050 } 39051 39052 type AutovacPageData1 = struct { 39053 Finterp uintptr 39054 FzScript uintptr 39055 } 39056 39057 type AutovacPageData = AutovacPageData1 39058 39059 func test_autovacuum_pages_callback(tls *libc.TLS, pClientData uintptr, zSchema uintptr, nFilePages uint32, nFreePages uint32, nBytePerPage uint32) uint32 { 39060 bp := tls.Alloc(344) 39061 defer tls.Free(344) 39062 39063 var pData uintptr = pClientData 39064 39065 tcl.XTcl_DStringInit(tls, bp+24) 39066 tcl.XTcl_DStringAppend(tls, bp+24, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, -1) 39067 tcl.XTcl_DStringAppendElement(tls, bp+24, zSchema) 39068 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+240, ts+17791, libc.VaList(bp, nFilePages)) 39069 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 39070 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+240, ts+17791, libc.VaList(bp+8, nFreePages)) 39071 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 39072 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+240, ts+17791, libc.VaList(bp+16, nBytePerPage)) 39073 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 39074 tcl.XTcl_ResetResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp) 39075 tcl.XTcl_Eval(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+24)).Fstring) 39076 tcl.XTcl_DStringFree(tls, bp+24) 39077 *(*uint32)(unsafe.Pointer(bp + 340)) = nFreePages 39078 tcl.XTcl_GetIntFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp), bp+340) 39079 return *(*uint32)(unsafe.Pointer(bp + 340)) 39080 } 39081 39082 func test_autovacuum_pages(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39083 bp := tls.Alloc(1048) 39084 defer tls.Free(1048) 39085 39086 var pData uintptr 39087 39088 var rc int32 39089 var zScript uintptr 39090 if objc != 2 && objc != 3 { 39091 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19501) 39092 return TCL_ERROR 39093 } 39094 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) != 0 { 39095 return TCL_ERROR 39096 } 39097 if objc == 3 { 39098 zScript = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39099 } else { 39100 zScript = uintptr(0) 39101 } 39102 if zScript != 0 { 39103 var nScript size_t = libc.Xstrlen(tls, zScript) 39104 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(AutovacPageData{}))+nScript+uint64(1)) 39105 if pData == uintptr(0) { 39106 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, uintptr(0))) 39107 return TCL_ERROR 39108 } 39109 (*AutovacPageData)(unsafe.Pointer(pData)).Finterp = interp 39110 (*AutovacPageData)(unsafe.Pointer(pData)).FzScript = pData + 1*16 39111 libc.Xmemcpy(tls, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, zScript, nScript+uint64(1)) 39112 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), *(*uintptr)(unsafe.Pointer(&struct { 39113 f func(*libc.TLS, uintptr, uintptr, uint32, uint32, uint32) uint32 39114 }{test_autovacuum_pages_callback})), 39115 pData, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 39116 } else { 39117 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), uintptr(0), uintptr(0), uintptr(0)) 39118 } 39119 if rc != 0 { 39120 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]uint8{})), bp+48, 39121 ts+19513, libc.VaList(bp+16, rc)) 39122 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+48, uintptr(0))) 39123 return TCL_ERROR 39124 } 39125 return TCL_OK 39126 } 39127 39128 func Sqlitetest1_Init(tls *libc.TLS, interp uintptr) int32 { 39129 var i int32 39130 39131 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd1))/uint64(unsafe.Sizeof(struct { 39132 FzName uintptr 39133 FxProc uintptr 39134 }{})); i++ { 39135 tcl.XTcl_CreateCommand(tls, interp, aCmd1[i].FzName, aCmd1[i].FxProc, uintptr(0), uintptr(0)) 39136 } 39137 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd1))/uint64(unsafe.Sizeof(struct { 39138 FzName uintptr 39139 FxProc uintptr 39140 FclientData uintptr 39141 }{})); i++ { 39142 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd1[i].FzName, 39143 aObjCmd1[i].FxProc, aObjCmd1[i].FclientData, uintptr(0)) 39144 } 39145 tcl.XTcl_LinkVar(tls, interp, ts+19551, 39146 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_search_count)), TCL_LINK_INT) 39147 tcl.XTcl_LinkVar(tls, interp, ts+19571, 39148 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_found_count)), TCL_LINK_INT) 39149 tcl.XTcl_LinkVar(tls, interp, ts+19590, 39150 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sort_count)), TCL_LINK_INT) 39151 tcl.XTcl_LinkVar(tls, interp, ts+19608, 39152 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_max_blobsize)), TCL_LINK_INT) 39153 tcl.XTcl_LinkVar(tls, interp, ts+19629, 39154 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_like_count)), TCL_LINK_INT) 39155 tcl.XTcl_LinkVar(tls, interp, ts+19647, 39156 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_interrupt_count)), TCL_LINK_INT) 39157 tcl.XTcl_LinkVar(tls, interp, ts+19670, 39158 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_open_file_count)), TCL_LINK_INT) 39159 tcl.XTcl_LinkVar(tls, interp, ts+19693, 39160 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_current_time)), TCL_LINK_INT) 39161 tcl.XTcl_LinkVar(tls, interp, ts+19713, 39162 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_xferopt_count)), TCL_LINK_INT) 39163 tcl.XTcl_LinkVar(tls, interp, ts+19735, 39164 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_readdb_count)), TCL_LINK_INT) 39165 tcl.XTcl_LinkVar(tls, interp, ts+19762, 39166 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writedb_count)), TCL_LINK_INT) 39167 tcl.XTcl_LinkVar(tls, interp, ts+19790, 39168 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writej_count)), TCL_LINK_INT) 39169 tcl.XTcl_LinkVar(tls, interp, ts+19817, 39170 uintptr(unsafe.Pointer(&unaligned_string_counter)), TCL_LINK_INT) 39171 tcl.XTcl_LinkVar(tls, interp, ts+19842, 39172 uintptr(unsafe.Pointer(&pzNeededCollation)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 39173 { 39174 tcl.XTcl_LinkVar(tls, interp, ts+19871, 39175 uintptr(unsafe.Pointer(&query_plan)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 39176 39177 } 39178 tcl.XTcl_LinkVar(tls, interp, ts+19889, 39179 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_opentemp_count)), TCL_LINK_INT) 39180 tcl.XTcl_LinkVar(tls, interp, ts+19911, 39181 uintptr(unsafe.Pointer(&sqlite_static_bind_value)), TCL_LINK_STRING) 39182 tcl.XTcl_LinkVar(tls, interp, ts+19936, 39183 uintptr(unsafe.Pointer(&sqlite_static_bind_nbyte)), TCL_LINK_INT) 39184 tcl.XTcl_LinkVar(tls, interp, ts+19961, 39185 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_temp_directory)), TCL_LINK_STRING) 39186 tcl.XTcl_LinkVar(tls, interp, ts+19983, 39187 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_data_directory)), TCL_LINK_STRING) 39188 tcl.XTcl_LinkVar(tls, interp, ts+20005, 39189 uintptr(unsafe.Pointer(&bitmask_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39190 tcl.XTcl_LinkVar(tls, interp, ts+20018, 39191 uintptr(unsafe.Pointer(&longdouble_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39192 tcl.XTcl_LinkVar(tls, interp, ts+20034, 39193 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sync_count)), TCL_LINK_INT) 39194 tcl.XTcl_LinkVar(tls, interp, ts+20052, 39195 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_fullsync_count)), TCL_LINK_INT) 39196 return TCL_OK 39197 } 39198 39199 var iZero int32 = 0 39200 var aCmd1 = [39]struct { 39201 FzName uintptr 39202 FxProc uintptr 39203 }{ 39204 {FzName: ts + 20074, FxProc: 0}, 39205 {FzName: ts + 20083, FxProc: 0}, 39206 {FzName: ts + 20092, FxProc: 0}, 39207 {FzName: ts + 20112, FxProc: 0}, 39208 {FzName: ts + 20134, FxProc: 0}, 39209 {FzName: ts + 20155, FxProc: 0}, 39210 {FzName: ts + 20175, FxProc: 0}, 39211 {FzName: ts + 20196, FxProc: 0}, 39212 {FzName: ts + 20220, FxProc: 0}, 39213 {FzName: ts + 20243, FxProc: 0}, 39214 {FzName: ts + 20266, FxProc: 0}, 39215 {FzName: ts + 20292, FxProc: 0}, 39216 {FzName: ts + 20315, FxProc: 0}, 39217 {FzName: ts + 20338, FxProc: 0}, 39218 {FzName: ts + 20359, FxProc: 0}, 39219 {FzName: ts + 20385, FxProc: 0}, 39220 {FzName: ts + 20405, FxProc: 0}, 39221 {FzName: ts + 20422, FxProc: 0}, 39222 {FzName: ts + 20435, FxProc: 0}, 39223 {FzName: ts + 20451, FxProc: 0}, 39224 {FzName: ts + 20476, FxProc: 0}, 39225 {FzName: ts + 20490, FxProc: 0}, 39226 {FzName: ts + 20507, FxProc: 0}, 39227 {FzName: ts + 20531, FxProc: 0}, 39228 {FzName: ts + 20556, FxProc: 0}, 39229 {FzName: ts + 20577, FxProc: 0}, 39230 {FzName: ts + 20607, FxProc: 0}, 39231 {FzName: ts + 20620, FxProc: 0}, 39232 {FzName: ts + 20632, FxProc: 0}, 39233 {FzName: ts + 20643, FxProc: 0}, 39234 {FzName: ts + 20655, FxProc: 0}, 39235 {FzName: ts + 20669, FxProc: 0}, 39236 {FzName: ts + 20687, FxProc: 0}, 39237 {FzName: ts + 20710, FxProc: 0}, 39238 {FzName: ts + 20734, FxProc: 0}, 39239 {FzName: ts + 20757, FxProc: 0}, 39240 {FzName: ts + 20778, FxProc: 0}, 39241 {FzName: ts + 20785, FxProc: 0}, 39242 {FzName: ts + 20800, FxProc: 0}, 39243 } 39244 var aObjCmd1 = [165]struct { 39245 FzName uintptr 39246 FxProc uintptr 39247 FclientData uintptr 39248 }{ 39249 {FzName: ts + 20823, FxProc: 0}, 39250 {FzName: ts + 20841, FxProc: 0}, 39251 {FzName: ts + 20859, FxProc: 0, FclientData: 0}, 39252 {FzName: ts + 20872, FxProc: 0}, 39253 {FzName: ts + 20893, FxProc: 0}, 39254 {FzName: ts + 20920, FxProc: 0}, 39255 {FzName: ts + 20934, FxProc: 0}, 39256 {FzName: ts + 20950, FxProc: 0}, 39257 {FzName: ts + 20967, FxProc: 0}, 39258 {FzName: ts + 20982, FxProc: 0}, 39259 {FzName: ts + 20999, FxProc: 0}, 39260 {FzName: ts + 21021, FxProc: 0}, 39261 {FzName: ts + 21045, FxProc: 0}, 39262 {FzName: ts + 21064, FxProc: 0}, 39263 {FzName: ts + 21084, FxProc: 0}, 39264 {FzName: ts + 21102, FxProc: 0}, 39265 {FzName: ts + 21120, FxProc: 0}, 39266 {FzName: ts + 21140, FxProc: 0}, 39267 {FzName: ts + 21158, FxProc: 0}, 39268 {FzName: ts + 21189, FxProc: 0}, 39269 {FzName: ts + 21223, FxProc: 0}, 39270 {FzName: ts + 21243, FxProc: 0}, 39271 {FzName: ts + 21272, FxProc: 0}, 39272 {FzName: ts + 21300, FxProc: 0}, 39273 {FzName: ts + 21329, FxProc: 0}, 39274 {FzName: ts + 21352, FxProc: 0}, 39275 {FzName: ts + 21366, FxProc: 0}, 39276 {FzName: ts + 21382, FxProc: 0}, 39277 {FzName: ts + 21407, FxProc: 0}, 39278 {FzName: ts + 21422, FxProc: 0}, 39279 {FzName: ts + 21443, FxProc: 0}, 39280 {FzName: ts + 21460, FxProc: 0}, 39281 {FzName: ts + 21473, FxProc: 0}, 39282 {FzName: ts + 21488, FxProc: 0}, 39283 {FzName: ts + 21504, FxProc: 0}, 39284 {FzName: ts + 21523, FxProc: 0}, 39285 {FzName: ts + 21541, FxProc: 0}, 39286 {FzName: ts + 21557, FxProc: 0}, 39287 {FzName: ts + 21575, FxProc: 0}, 39288 {FzName: ts + 21594, FxProc: 0}, 39289 {FzName: ts + 21613, FxProc: 0}, 39290 {FzName: ts + 21637, FxProc: 0}, 39291 {FzName: ts + 21658, FxProc: 0}, 39292 {FzName: ts + 21675, FxProc: 0}, 39293 {FzName: ts + 21695, FxProc: 0}, 39294 {FzName: ts + 21709, FxProc: 0}, 39295 {FzName: ts + 21725, FxProc: 0}, 39296 {FzName: ts + 21751, FxProc: 0}, 39297 {FzName: ts + 21767, FxProc: 0}, 39298 {FzName: ts + 21780, FxProc: 0}, 39299 {FzName: ts + 21792, FxProc: 0}, 39300 {FzName: ts + 21813, FxProc: 0}, 39301 {FzName: ts + 21831, FxProc: 0}, 39302 {FzName: ts + 21853, FxProc: 0}, 39303 {FzName: ts + 21876, FxProc: 0}, 39304 {FzName: ts + 21894, FxProc: 0}, 39305 {FzName: ts + 21912, FxProc: 0}, 39306 {FzName: ts + 21935, FxProc: 0}, 39307 {FzName: ts + 21961, FxProc: 0}, 39308 {FzName: ts + 21983, FxProc: 0}, 39309 {FzName: ts + 22004, FxProc: 0}, 39310 {FzName: ts + 22024, FxProc: 0}, 39311 {FzName: ts + 22044, FxProc: 0}, 39312 {FzName: ts + 22068, FxProc: 0}, 39313 {FzName: ts + 22094, FxProc: 0}, 39314 {FzName: ts + 22120, FxProc: 0}, 39315 {FzName: ts + 22143, FxProc: 0}, 39316 {FzName: ts + 22167, FxProc: 0}, 39317 {FzName: ts + 22190, FxProc: 0}, 39318 {FzName: ts + 22220, FxProc: 0}, 39319 {FzName: ts + 22250, FxProc: 0}, 39320 {FzName: ts + 22264, FxProc: 0}, 39321 {FzName: ts + 22292, FxProc: 0}, 39322 {FzName: ts + 22308, FxProc: 0}, 39323 {FzName: ts + 22327, FxProc: 0}, 39324 {FzName: ts + 22344, FxProc: 0}, 39325 {FzName: ts + 22354, FxProc: 0}, 39326 {FzName: ts + 22374, FxProc: 0}, 39327 {FzName: ts + 22397, FxProc: 0}, 39328 {FzName: ts + 22421, FxProc: 0}, 39329 {FzName: ts + 22442, FxProc: 0}, 39330 {FzName: ts + 22454, FxProc: 0}, 39331 {FzName: ts + 22475, FxProc: 0}, 39332 {FzName: ts + 22494, FxProc: 0}, 39333 {FzName: ts + 22514, FxProc: 0}, 39334 {FzName: ts + 22534, FxProc: 0}, 39335 {FzName: ts + 22556, FxProc: 0}, 39336 {FzName: ts + 22577, FxProc: 0, FclientData: 0}, 39337 {FzName: ts + 22597, FxProc: 0, FclientData: 0}, 39338 {FzName: ts + 22617, FxProc: 0, FclientData: 0}, 39339 {FzName: ts + 22636, FxProc: 0, FclientData: 0}, 39340 {FzName: ts + 22657, FxProc: 0, FclientData: 0}, 39341 {FzName: ts + 22681, FxProc: 0, FclientData: 0}, 39342 {FzName: ts + 22710, FxProc: 0, FclientData: 0}, 39343 {FzName: ts + 22736, FxProc: 0, FclientData: 0}, 39344 {FzName: ts + 22763, FxProc: 0, FclientData: 0}, 39345 {FzName: ts + 22786, FxProc: 0, FclientData: 0}, 39346 {FzName: ts + 22808, FxProc: 0, FclientData: 0}, 39347 {FzName: ts + 22830, FxProc: 0}, 39348 {FzName: ts + 22860, FxProc: 0, FclientData: 0}, 39349 {FzName: ts + 22886, 39350 FxProc: 0, FclientData: 0}, 39351 {FzName: ts + 22917, FxProc: 0, FclientData: 0}, 39352 {FzName: ts + 22945, FxProc: 0, FclientData: 0}, 39353 {FzName: ts + 22974, FxProc: 0}, 39354 {FzName: ts + 23002, FxProc: 0}, 39355 {FzName: ts + 23025, FxProc: 0}, 39356 {FzName: ts + 23043, FxProc: 0}, 39357 {FzName: ts + 23059, FxProc: 0}, 39358 {FzName: ts + 23077, FxProc: 0}, 39359 {FzName: ts + 23096, FxProc: 0}, 39360 {FzName: ts + 23115, FxProc: 0}, 39361 {FzName: ts + 23133, FxProc: 0}, 39362 {FzName: ts + 23161, FxProc: 0}, 39363 {FzName: ts + 23189, FxProc: 0}, 39364 {FzName: ts + 23217, FxProc: 0}, 39365 {FzName: ts + 23244, FxProc: 0}, 39366 {FzName: ts + 23270, FxProc: 0}, 39367 {FzName: ts + 23295, FxProc: 0}, 39368 {FzName: ts + 23328, FxProc: 0}, 39369 {FzName: ts + 23349, FxProc: 0}, 39370 {FzName: ts + 23375, FxProc: 0}, 39371 {FzName: ts + 23401, FxProc: 0}, 39372 {FzName: ts + 23430, FxProc: 0}, 39373 {FzName: ts + 23447, FxProc: 0}, 39374 {FzName: ts + 23474, FxProc: 0}, 39375 {FzName: ts + 23491, FxProc: 0}, 39376 {FzName: ts + 23515, FxProc: 0}, 39377 {FzName: ts + 23533, FxProc: 0}, 39378 {FzName: ts + 23559, FxProc: 0}, 39379 {FzName: ts + 23579, FxProc: 0}, 39380 {FzName: ts + 23597, FxProc: 0}, 39381 {FzName: ts + 23625, FxProc: 0}, 39382 {FzName: ts + 23653, FxProc: 0}, 39383 {FzName: ts + 23679, FxProc: 0}, 39384 {FzName: ts + 23709, FxProc: 0}, 39385 {FzName: ts + 23729, FxProc: 0}, 39386 {FzName: ts + 23742, FxProc: 0}, 39387 {FzName: ts + 23764, FxProc: 0}, 39388 {FzName: ts + 23787, FxProc: 0}, 39389 {FzName: ts + 23813, FxProc: 0}, 39390 {FzName: ts + 23840, FxProc: 0}, 39391 {FzName: ts + 23857, FxProc: 0}, 39392 {FzName: ts + 23882, FxProc: 0}, 39393 {FzName: ts + 23903, FxProc: 0}, 39394 {FzName: ts + 23913, FxProc: 0}, 39395 {FzName: ts + 23935, FxProc: 0}, 39396 {FzName: ts + 23956, FxProc: 0}, 39397 {FzName: ts + 23981, FxProc: 0}, 39398 {FzName: ts + 24004, FxProc: 0}, 39399 {FzName: ts + 24025, FxProc: 0}, 39400 {FzName: ts + 24047, FxProc: 0}, 39401 {FzName: ts + 24069, FxProc: 0}, 39402 {FzName: ts + 24090, FxProc: 0}, 39403 {FzName: ts + 24115, FxProc: 0}, 39404 {FzName: ts + 24141, FxProc: 0}, 39405 {FzName: ts + 24168, FxProc: 0}, 39406 {FzName: ts + 24194, FxProc: 0}, 39407 {FzName: ts + 24218, FxProc: 0}, 39408 {FzName: ts + 24237, FxProc: 0}, 39409 {FzName: ts + 24255, FxProc: 0}, 39410 {FzName: ts + 24280, FxProc: 0}, 39411 {FzName: ts + 24305, FxProc: 0}, 39412 {FzName: ts + 24318, FxProc: 0}, 39413 {FzName: ts + 24332, FxProc: 0}, 39414 {FzName: ts + 24358, FxProc: 0}, 39415 } 39416 var bitmask_size int32 = int32(uint64(unsafe.Sizeof(Bitmask(0))) * uint64(8)) 39417 var longdouble_size int32 = int32(unsafe.Sizeof(float64(0))) 39418 var query_plan uintptr = ts + 24386 39419 39420 var test_pagesize int32 = 1024 39421 39422 func pager_test_reiniter(tls *libc.TLS, pNotUsed uintptr) { 39423 return 39424 } 39425 39426 func pager_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39427 bp := tls.Alloc(192) 39428 defer tls.Free(192) 39429 39430 var rc int32 39431 39432 if argc != 3 { 39433 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39434 ts+24412, 0)) 39435 return TCL_ERROR 39436 } 39437 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39438 return TCL_ERROR 39439 } 39440 rc = sqlite3.Xsqlite3PagerOpen(tls, sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)), bp+80, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, 0, 39441 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB, 39442 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{pager_test_reiniter}))) 39443 if rc != SQLITE_OK { 39444 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39445 return TCL_ERROR 39446 } 39447 sqlite3.Xsqlite3PagerSetCachesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 39448 *(*u32)(unsafe.Pointer(bp + 88)) = u32(test_pagesize) 39449 sqlite3.Xsqlite3PagerSetPagesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), bp+88, -1) 39450 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+92, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39451 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, 0)) 39452 return TCL_OK 39453 } 39454 39455 func pager_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39456 bp := tls.Alloc(48) 39457 defer tls.Free(48) 39458 39459 var pPager uintptr 39460 var rc int32 39461 if argc != 2 { 39462 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39463 ts+24430, 0)) 39464 return TCL_ERROR 39465 } 39466 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39467 rc = sqlite3.Xsqlite3PagerClose(tls, pPager, uintptr(0)) 39468 if rc != SQLITE_OK { 39469 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39470 return TCL_ERROR 39471 } 39472 return TCL_OK 39473 } 39474 39475 func pager_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39476 bp := tls.Alloc(48) 39477 defer tls.Free(48) 39478 39479 var pPager uintptr 39480 var rc int32 39481 if argc != 2 { 39482 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39483 ts+24430, 0)) 39484 return TCL_ERROR 39485 } 39486 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39487 rc = sqlite3.Xsqlite3PagerRollback(tls, pPager) 39488 if rc != SQLITE_OK { 39489 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39490 return TCL_ERROR 39491 } 39492 return TCL_OK 39493 } 39494 39495 func pager_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39496 bp := tls.Alloc(64) 39497 defer tls.Free(64) 39498 39499 var pPager uintptr 39500 var rc int32 39501 if argc != 2 { 39502 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39503 ts+24430, 0)) 39504 return TCL_ERROR 39505 } 39506 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39507 rc = sqlite3.Xsqlite3PagerCommitPhaseOne(tls, pPager, uintptr(0), 0) 39508 if rc != SQLITE_OK { 39509 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39510 return TCL_ERROR 39511 } 39512 rc = sqlite3.Xsqlite3PagerCommitPhaseTwo(tls, pPager) 39513 if rc != SQLITE_OK { 39514 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39515 return TCL_ERROR 39516 } 39517 return TCL_OK 39518 } 39519 39520 func pager_stmt_begin(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39521 bp := tls.Alloc(48) 39522 defer tls.Free(48) 39523 39524 var pPager uintptr 39525 var rc int32 39526 if argc != 2 { 39527 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39528 ts+24430, 0)) 39529 return TCL_ERROR 39530 } 39531 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39532 rc = sqlite3.Xsqlite3PagerOpenSavepoint(tls, pPager, 1) 39533 if rc != SQLITE_OK { 39534 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39535 return TCL_ERROR 39536 } 39537 return TCL_OK 39538 } 39539 39540 func pager_stmt_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39541 bp := tls.Alloc(48) 39542 defer tls.Free(48) 39543 39544 var pPager uintptr 39545 var rc int32 39546 if argc != 2 { 39547 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39548 ts+24430, 0)) 39549 return TCL_ERROR 39550 } 39551 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39552 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_ROLLBACK, 0) 39553 sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 39554 if rc != SQLITE_OK { 39555 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39556 return TCL_ERROR 39557 } 39558 return TCL_OK 39559 } 39560 39561 func pager_stmt_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39562 bp := tls.Alloc(48) 39563 defer tls.Free(48) 39564 39565 var pPager uintptr 39566 var rc int32 39567 if argc != 2 { 39568 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39569 ts+24430, 0)) 39570 return TCL_ERROR 39571 } 39572 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39573 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 39574 if rc != SQLITE_OK { 39575 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39576 return TCL_ERROR 39577 } 39578 return TCL_OK 39579 } 39580 39581 func pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39582 bp := tls.Alloc(140) 39583 defer tls.Free(140) 39584 39585 var pPager uintptr 39586 var i int32 39587 var a uintptr 39588 if argc != 2 { 39589 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39590 ts+24430, 0)) 39591 return TCL_ERROR 39592 } 39593 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39594 a = sqlite3.Xsqlite3PagerStats(tls, pPager) 39595 for i = 0; i < 9; i++ { 39596 tcl.XTcl_AppendElement(tls, interp, zName[i]) 39597 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 39598 tcl.XTcl_AppendElement(tls, interp, bp+40) 39599 } 39600 return TCL_OK 39601 } 39602 39603 var zName = [9]uintptr{ 39604 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 39605 ts + 24448, ts + 24452, ts + 24457, 39606 } 39607 39608 func pager_pagecount(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39609 bp := tls.Alloc(160) 39610 defer tls.Free(160) 39611 39612 var pPager uintptr 39613 39614 if argc != 2 { 39615 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39616 ts+24430, 0)) 39617 return TCL_ERROR 39618 } 39619 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39620 sqlite3.Xsqlite3PagerPagecount(tls, pPager, bp+56) 39621 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+60, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 56)))) 39622 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 39623 return TCL_OK 39624 } 39625 39626 func page_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39627 bp := tls.Alloc(188) 39628 defer tls.Free(188) 39629 39630 var pPager uintptr 39631 39632 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 39633 39634 var rc int32 39635 if argc != 3 { 39636 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39637 ts+24462, 0)) 39638 return TCL_ERROR 39639 } 39640 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39641 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39642 return TCL_ERROR 39643 } 39644 rc = sqlite3.Xsqlite3PagerSharedLock(tls, pPager) 39645 if rc == SQLITE_OK { 39646 rc = sqlite3.Xsqlite3PagerGet(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 72))), bp+80, 0) 39647 } 39648 if rc != SQLITE_OK { 39649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39650 return TCL_ERROR 39651 } 39652 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39653 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 39654 return TCL_OK 39655 } 39656 39657 func page_lookup(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39658 bp := tls.Alloc(160) 39659 defer tls.Free(160) 39660 39661 var pPager uintptr 39662 39663 var pPage uintptr 39664 39665 if argc != 3 { 39666 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39667 ts+24462, 0)) 39668 return TCL_ERROR 39669 } 39670 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39671 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 39672 return TCL_ERROR 39673 } 39674 pPage = sqlite3.Xsqlite3PagerLookup(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 56)))) 39675 if pPage != 0 { 39676 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+60, ts+9889, libc.VaList(bp+32, pPage)) 39677 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 39678 } 39679 return TCL_OK 39680 } 39681 39682 func pager_truncate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39683 bp := tls.Alloc(36) 39684 defer tls.Free(36) 39685 39686 var pPager uintptr 39687 39688 if argc != 3 { 39689 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39690 ts+24462, 0)) 39691 return TCL_ERROR 39692 } 39693 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39694 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 39695 return TCL_ERROR 39696 } 39697 sqlite3.Xsqlite3PagerTruncateImage(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 32)))) 39698 return TCL_OK 39699 } 39700 39701 func page_unref(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39702 bp := tls.Alloc(32) 39703 defer tls.Free(32) 39704 39705 var pPage uintptr 39706 if argc != 2 { 39707 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39708 ts+24472, 0)) 39709 return TCL_ERROR 39710 } 39711 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39712 sqlite3.Xsqlite3PagerUnref(tls, pPage) 39713 return TCL_OK 39714 } 39715 39716 func page_read(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39717 bp := tls.Alloc(148) 39718 defer tls.Free(148) 39719 39720 var pPage uintptr 39721 if argc != 2 { 39722 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39723 ts+24472, 0)) 39724 return TCL_ERROR 39725 } 39726 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39727 libc.Xmemcpy(tls, bp+48, sqlite3.Xsqlite3PagerGetData(tls, pPage), uint64(unsafe.Sizeof([100]uint8{}))) 39728 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 39729 return TCL_OK 39730 } 39731 39732 func page_number(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39733 bp := tls.Alloc(156) 39734 defer tls.Free(156) 39735 39736 var pPage uintptr 39737 if argc != 2 { 39738 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39739 ts+24472, 0)) 39740 return TCL_ERROR 39741 } 39742 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39743 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+56, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3PagerPagenumber(tls, pPage))) 39744 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 39745 return TCL_OK 39746 } 39747 39748 func page_write(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39749 bp := tls.Alloc(48) 39750 defer tls.Free(48) 39751 39752 var pPage uintptr 39753 var pData uintptr 39754 var rc int32 39755 if argc != 3 { 39756 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39757 ts+24479, 0)) 39758 return TCL_ERROR 39759 } 39760 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39761 rc = sqlite3.Xsqlite3PagerWrite(tls, pPage) 39762 if rc != SQLITE_OK { 39763 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39764 return TCL_ERROR 39765 } 39766 pData = sqlite3.Xsqlite3PagerGetData(tls, pPage) 39767 libc.Xstrncpy(tls, pData, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(test_pagesize-1)) 39768 *(*uint8)(unsafe.Pointer(pData + uintptr(test_pagesize-1))) = uint8(0) 39769 return TCL_OK 39770 } 39771 39772 func fake_big_file(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39773 bp := tls.Alloc(96) 39774 defer tls.Free(96) 39775 39776 var pVfs uintptr 39777 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 39778 var rc int32 39779 39780 var offset i64 39781 var zFile uintptr 39782 var nFile int32 39783 if argc != 3 { 39784 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39785 ts+24491, 0)) 39786 return TCL_ERROR 39787 } 39788 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 39789 return TCL_ERROR 39790 } 39791 39792 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39793 nFile = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 39794 zFile = sqlite3.Xsqlite3_malloc(tls, nFile+2) 39795 if zFile == uintptr(0) { 39796 return TCL_ERROR 39797 } 39798 libc.Xmemcpy(tls, zFile, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(nFile+1)) 39799 *(*uint8)(unsafe.Pointer(zFile + uintptr(nFile+1))) = uint8(0) 39800 rc = sqlite3.Xsqlite3OsOpenMalloc(tls, pVfs, zFile, bp+88, 39801 SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB, uintptr(0)) 39802 if rc != 0 { 39803 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+24510, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39804 sqlite3.Xsqlite3_free(tls, zFile) 39805 return TCL_ERROR 39806 } 39807 offset = i64(*(*int32)(unsafe.Pointer(bp + 80))) 39808 offset = offset * int64(1024*1024) 39809 rc = sqlite3.Xsqlite3OsWrite(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), ts+24524, 14, offset) 39810 sqlite3.Xsqlite3OsCloseFree(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 39811 sqlite3.Xsqlite3_free(tls, zFile) 39812 if rc != 0 { 39813 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, ts+24538, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39814 return TCL_ERROR 39815 } 39816 return TCL_OK 39817 } 39818 39819 func testPendingByte(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39820 bp := tls.Alloc(44) 39821 defer tls.Free(44) 39822 39823 var rc int32 39824 if argc != 2 { 39825 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39826 ts+24553, uintptr(0))) 39827 return TCL_ERROR 39828 } 39829 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 39830 return TCL_ERROR 39831 } 39832 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PENDING_BYTE, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 40)))) 39833 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39834 return TCL_OK 39835 } 39836 39837 var faultSimInterp uintptr = uintptr(0) 39838 var faultSimScriptSize int32 = 0 39839 var faultSimScript uintptr 39840 39841 func faultSimCallback(tls *libc.TLS, x int32) int32 { 39842 bp := tls.Alloc(38) 39843 defer tls.Free(38) 39844 39845 var i int32 39846 var isNeg int32 39847 var rc int32 39848 if x == 0 { 39849 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), ts+14193, uint64(2)) 39850 } else { 39851 if x < 0 { 39852 isNeg = 1 39853 x = -x 39854 } else { 39855 isNeg = 0 39856 } 39857 *(*uint8)(unsafe.Pointer(bp + 8 + 29)) = uint8(0) 39858 i = int32(uint64(unsafe.Sizeof([30]uint8{})) - uint64(2)) 39859 __1: 39860 if !(i > 0 && x > 0) { 39861 goto __3 39862 } 39863 { 39864 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i))) = uint8(x%10 + '0') 39865 39866 } 39867 goto __2 39868 __2: 39869 i-- 39870 x = x / 10 39871 goto __1 39872 goto __3 39873 __3: 39874 ; 39875 if isNeg != 0 { 39876 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(libc.PostDecInt32(&i, 1)))) = uint8('-') 39877 } 39878 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), bp+8+uintptr(i)+uintptr(1), uint64(unsafe.Sizeof([30]uint8{}))-uint64(i)) 39879 } 39880 rc = tcl.XTcl_Eval(tls, faultSimInterp, faultSimScript) 39881 if rc != 0 { 39882 libc.Xfprintf(tls, libc.Xstderr, ts+24568, libc.VaList(bp, faultSimScript)) 39883 rc = SQLITE_ERROR 39884 } else { 39885 rc = libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, faultSimInterp)) 39886 } 39887 tcl.XTcl_ResetResult(tls, faultSimInterp) 39888 return rc 39889 } 39890 39891 func faultInstallCmd(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39892 bp := tls.Alloc(64) 39893 defer tls.Free(64) 39894 39895 var zScript uintptr 39896 var nScript int32 39897 var rc int32 39898 if argc != 1 && argc != 2 { 39899 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39900 ts+24604, uintptr(0))) 39901 } 39902 if argc == 2 { 39903 zScript = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 39904 } else { 39905 zScript = ts + 584 39906 } 39907 nScript = int32(libc.Xstrlen(tls, zScript)) 39908 if faultSimScript != 0 { 39909 libc.Xfree(tls, faultSimScript) 39910 faultSimScript = uintptr(0) 39911 } 39912 if nScript == 0 { 39913 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_FAULT_INSTALL, libc.VaList(bp+32, 0)) 39914 } else { 39915 faultSimScript = libc.Xmalloc(tls, uint64(nScript+100)) 39916 if faultSimScript == uintptr(0) { 39917 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2069, uintptr(0))) 39918 return SQLITE_ERROR 39919 } 39920 libc.Xmemcpy(tls, faultSimScript, zScript, uint64(nScript)) 39921 *(*uint8)(unsafe.Pointer(faultSimScript + uintptr(nScript))) = uint8(' ') 39922 faultSimScriptSize = nScript + 1 39923 faultSimInterp = interp 39924 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})))) 39925 } 39926 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39927 return SQLITE_OK 39928 } 39929 39930 func testBitvecBuiltinTest(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39931 bp := tls.Alloc(452) 39932 defer tls.Free(452) 39933 39934 var rc int32 39935 var nProg int32 = 0 39936 39937 var z uintptr 39938 if argc != 3 { 39939 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39940 ts+24613, uintptr(0))) 39941 } 39942 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 39943 return TCL_ERROR 39944 } 39945 z = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 39946 for nProg < 99 && *(*uint8)(unsafe.Pointer(z)) != 0 { 39947 for *(*uint8)(unsafe.Pointer(z)) != 0 && !(int32(sqlite3.Xsqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z))])&0x04 != 0) { 39948 z++ 39949 } 39950 if int32(*(*uint8)(unsafe.Pointer(z))) == 0 { 39951 break 39952 } 39953 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(libc.PostIncInt32(&nProg, 1))*4)) = libc.Xatoi(tls, z) 39954 for int32(sqlite3.Xsqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z))])&0x04 != 0 { 39955 z++ 39956 } 39957 } 39958 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(nProg)*4)) = 0 39959 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BITVEC_TEST, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 48)), bp+52)) 39960 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39961 return TCL_OK 39962 } 39963 39964 func Sqlitetest2_Init(tls *libc.TLS, interp uintptr) int32 { 39965 var i int32 39966 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd2))/uint64(unsafe.Sizeof(struct { 39967 FzName uintptr 39968 FxProc uintptr 39969 }{})); i++ { 39970 tcl.XTcl_CreateCommand(tls, interp, aCmd2[i].FzName, aCmd2[i].FxProc, uintptr(0), uintptr(0)) 39971 } 39972 tcl.XTcl_LinkVar(tls, interp, ts+24628, 39973 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_pending)), TCL_LINK_INT) 39974 tcl.XTcl_LinkVar(tls, interp, ts+24652, 39975 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_persist)), TCL_LINK_INT) 39976 tcl.XTcl_LinkVar(tls, interp, ts+24676, 39977 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hit)), TCL_LINK_INT) 39978 tcl.XTcl_LinkVar(tls, interp, ts+24696, 39979 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hardhit)), TCL_LINK_INT) 39980 tcl.XTcl_LinkVar(tls, interp, ts+24720, 39981 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull_pending)), TCL_LINK_INT) 39982 tcl.XTcl_LinkVar(tls, interp, ts+24744, 39983 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull)), TCL_LINK_INT) 39984 tcl.XTcl_LinkVar(tls, interp, ts+24760, 39985 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3PendingByte)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39986 return TCL_OK 39987 } 39988 39989 var aCmd2 = [20]struct { 39990 FzName uintptr 39991 FxProc uintptr 39992 }{ 39993 {FzName: ts + 24780, FxProc: 0}, 39994 {FzName: ts + 24791, FxProc: 0}, 39995 {FzName: ts + 24803, FxProc: 0}, 39996 {FzName: ts + 24816, FxProc: 0}, 39997 {FzName: ts + 24831, FxProc: 0}, 39998 {FzName: ts + 24848, FxProc: 0}, 39999 {FzName: ts + 24866, FxProc: 0}, 40000 {FzName: ts + 24886, FxProc: 0}, 40001 {FzName: ts + 24898, FxProc: 0}, 40002 {FzName: ts + 24914, FxProc: 0}, 40003 {FzName: ts + 24923, FxProc: 0}, 40004 {FzName: ts + 24935, FxProc: 0}, 40005 {FzName: ts + 24946, FxProc: 0}, 40006 {FzName: ts + 24956, FxProc: 0}, 40007 {FzName: ts + 24967, FxProc: 0}, 40008 {FzName: ts + 24979, FxProc: 0}, 40009 {FzName: ts + 24994, FxProc: 0}, 40010 {FzName: ts + 25008, FxProc: 0}, 40011 {FzName: ts + 25033, FxProc: 0}, 40012 {FzName: ts + 25067, FxProc: 0}, 40013 } 40014 40015 type Btree = Btree1 40016 type BtCursor = BtCursor1 40017 type BtShared = BtShared1 40018 40019 type MemPage1 = struct { 40020 FisInit u8 40021 FintKey u8 40022 FintKeyLeaf u8 40023 F__ccgo_pad1 [1]byte 40024 Fpgno Pgno 40025 Fleaf u8 40026 FhdrOffset u8 40027 FchildPtrSize u8 40028 Fmax1bytePayload u8 40029 FnOverflow u8 40030 F__ccgo_pad2 [1]byte 40031 FmaxLocal u16 40032 FminLocal u16 40033 FcellOffset u16 40034 FnFree int32 40035 FnCell u16 40036 FmaskPage u16 40037 FaiOvfl [4]u16 40038 F__ccgo_pad3 [4]byte 40039 FapOvfl [4]uintptr 40040 FpBt uintptr 40041 FaData uintptr 40042 FaDataEnd uintptr 40043 FaCellIdx uintptr 40044 FaDataOfst uintptr 40045 FpDbPage uintptr 40046 FxCellSize uintptr 40047 FxParseCell uintptr 40048 } 40049 40050 type MemPage = MemPage1 40051 type BtLock1 = struct { 40052 FpBtree uintptr 40053 FiTable Pgno 40054 FeLock u8 40055 F__ccgo_pad1 [3]byte 40056 FpNext uintptr 40057 } 40058 40059 type BtLock = BtLock1 40060 type CellInfo1 = struct { 40061 FnKey i64 40062 FpPayload uintptr 40063 FnPayload u32 40064 FnLocal u16 40065 FnSize u16 40066 } 40067 40068 type CellInfo = CellInfo1 40069 40070 type IntegrityCk1 = struct { 40071 FpBt uintptr 40072 FpPager uintptr 40073 FaPgRef uintptr 40074 FnPage Pgno 40075 FmxErr int32 40076 FnErr int32 40077 FbOomFault int32 40078 FzPfx uintptr 40079 Fv1 Pgno 40080 Fv2 int32 40081 FerrMsg StrAccum 40082 Fheap uintptr 40083 Fdb uintptr 40084 } 40085 40086 type IntegrityCk = IntegrityCk1 40087 40088 var sDb sqlite31 40089 var nRefSqlite3 int32 = 0 40090 40091 func btree_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40092 bp := tls.Alloc(188) 40093 defer tls.Free(188) 40094 40095 var rc int32 40096 40097 var n int32 40098 var zFilename uintptr 40099 if argc != 3 { 40100 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40101 ts+25102, 0)) 40102 return TCL_ERROR 40103 } 40104 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 40105 return TCL_ERROR 40106 } 40107 nRefSqlite3++ 40108 if nRefSqlite3 == 1 { 40109 sDb.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 40110 sDb.Fmutex = sqlite3.Xsqlite3MutexAlloc(tls, SQLITE_MUTEX_RECURSIVE) 40111 sqlite3.Xsqlite3_mutex_enter(tls, sDb.Fmutex) 40112 } 40113 n = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 40114 zFilename = sqlite3.Xsqlite3_malloc(tls, n+2) 40115 if zFilename == uintptr(0) { 40116 return TCL_ERROR 40117 } 40118 libc.Xmemcpy(tls, zFilename, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint64(n+1)) 40119 *(*uint8)(unsafe.Pointer(zFilename + uintptr(n+1))) = uint8(0) 40120 rc = sqlite3.Xsqlite3BtreeOpen(tls, sDb.FpVfs, zFilename, uintptr(unsafe.Pointer(&sDb)), bp+80, 0, 40121 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB) 40122 sqlite3.Xsqlite3_free(tls, zFilename) 40123 if rc != SQLITE_OK { 40124 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40125 return TCL_ERROR 40126 } 40127 sqlite3.Xsqlite3BtreeSetCacheSize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 40128 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 40129 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 40130 return TCL_OK 40131 } 40132 40133 func btree_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40134 bp := tls.Alloc(48) 40135 defer tls.Free(48) 40136 40137 var pBt uintptr 40138 var rc int32 40139 if argc != 2 { 40140 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40141 ts+24430, 0)) 40142 return TCL_ERROR 40143 } 40144 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40145 rc = sqlite3.Xsqlite3BtreeClose(tls, pBt) 40146 if rc != SQLITE_OK { 40147 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40148 return TCL_ERROR 40149 } 40150 nRefSqlite3-- 40151 if nRefSqlite3 == 0 { 40152 sqlite3.Xsqlite3_mutex_leave(tls, sDb.Fmutex) 40153 sqlite3.Xsqlite3_mutex_free(tls, sDb.Fmutex) 40154 sDb.Fmutex = uintptr(0) 40155 sDb.FpVfs = uintptr(0) 40156 } 40157 return TCL_OK 40158 } 40159 40160 func btree_begin_transaction(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40161 bp := tls.Alloc(48) 40162 defer tls.Free(48) 40163 40164 var pBt uintptr 40165 var rc int32 40166 if argc != 2 { 40167 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40168 ts+24430, 0)) 40169 return TCL_ERROR 40170 } 40171 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40172 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40173 rc = sqlite3.Xsqlite3BtreeBeginTrans(tls, pBt, 1, uintptr(0)) 40174 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40175 if rc != SQLITE_OK { 40176 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40177 return TCL_ERROR 40178 } 40179 return TCL_OK 40180 } 40181 40182 func btree_pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40183 bp := tls.Alloc(140) 40184 defer tls.Free(140) 40185 40186 var pBt uintptr 40187 var i int32 40188 var a uintptr 40189 40190 if argc != 2 { 40191 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40192 ts+24430, 0)) 40193 return TCL_ERROR 40194 } 40195 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40196 40197 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40198 40199 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40200 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 40201 for i = 0; i < 11; i++ { 40202 tcl.XTcl_AppendElement(tls, interp, zName1[i]) 40203 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 40204 tcl.XTcl_AppendElement(tls, interp, bp+40) 40205 } 40206 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40207 40208 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40209 return TCL_OK 40210 } 40211 40212 var zName1 = [11]uintptr{ 40213 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 40214 ts + 24448, ts + 24452, ts + 24457, ts + 25126, ts + 25131, 40215 } 40216 40217 func btree_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40218 bp := tls.Alloc(110) 40219 defer tls.Free(110) 40220 40221 var pBt uintptr 40222 40223 var pCur uintptr 40224 var rc int32 = SQLITE_OK 40225 40226 if argc != 4 { 40227 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40228 ts+25137, 0)) 40229 return TCL_ERROR 40230 } 40231 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40232 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 40233 return TCL_ERROR 40234 } 40235 if tcl.XTcl_GetBoolean(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+76) != 0 { 40236 return TCL_ERROR 40237 } 40238 if *(*int32)(unsafe.Pointer(bp + 76)) != 0 { 40239 *(*int32)(unsafe.Pointer(bp + 76)) = BTREE_WRCSR 40240 } 40241 pCur = tcl.XTcl_Alloc(tls, uint32(sqlite3.Xsqlite3BtreeCursorSize(tls))) 40242 libc.Xmemset(tls, pCur, 0, uint64(sqlite3.Xsqlite3BtreeCursorSize(tls))) 40243 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40244 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40245 rc = sqlite3.Xsqlite3BtreeLockTable(tls, pBt, *(*int32)(unsafe.Pointer(bp + 72)), libc.BoolUint8(!!(*(*int32)(unsafe.Pointer(bp + 76)) != 0))) 40246 if rc == SQLITE_OK { 40247 rc = sqlite3.Xsqlite3BtreeCursor(tls, pBt, uint32(*(*int32)(unsafe.Pointer(bp + 72))), *(*int32)(unsafe.Pointer(bp + 76)), uintptr(0), pCur) 40248 } 40249 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40250 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40251 if rc != 0 { 40252 tcl.XTcl_Free(tls, pCur) 40253 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40254 return TCL_ERROR 40255 } 40256 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+80, ts+9889, libc.VaList(bp+48, pCur)) 40257 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 40258 return SQLITE_OK 40259 } 40260 40261 func btree_close_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40262 bp := tls.Alloc(48) 40263 defer tls.Free(48) 40264 40265 var pCur uintptr 40266 var rc int32 40267 40268 if argc != 2 { 40269 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40270 ts+24430, 0)) 40271 return TCL_ERROR 40272 } 40273 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40274 { 40275 var pBt uintptr = (*BtCursor)(unsafe.Pointer(pCur)).FpBtree 40276 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40277 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40278 rc = sqlite3.Xsqlite3BtreeCloseCursor(tls, pCur) 40279 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40280 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40281 40282 } 40283 tcl.XTcl_Free(tls, pCur) 40284 if rc != 0 { 40285 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40286 return TCL_ERROR 40287 } 40288 return SQLITE_OK 40289 } 40290 40291 func btree_next(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40292 bp := tls.Alloc(172) 40293 defer tls.Free(172) 40294 40295 var pCur uintptr 40296 var rc int32 40297 var res int32 = 0 40298 40299 if argc != 2 { 40300 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40301 ts+24430, 0)) 40302 return TCL_ERROR 40303 } 40304 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40305 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40306 rc = sqlite3.Xsqlite3BtreeNext(tls, pCur, 0) 40307 if rc == SQLITE_DONE { 40308 res = 1 40309 rc = SQLITE_OK 40310 } 40311 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40312 if rc != 0 { 40313 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40314 return TCL_ERROR 40315 } 40316 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+72, ts+1333, libc.VaList(bp+48, res)) 40317 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40318 return SQLITE_OK 40319 } 40320 40321 func btree_first(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40322 bp := tls.Alloc(176) 40323 defer tls.Free(176) 40324 40325 var pCur uintptr 40326 var rc int32 40327 *(*int32)(unsafe.Pointer(bp + 72)) = 0 40328 40329 if argc != 2 { 40330 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40331 ts+24430, 0)) 40332 return TCL_ERROR 40333 } 40334 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40335 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40336 rc = sqlite3.Xsqlite3BtreeFirst(tls, pCur, bp+72) 40337 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40338 if rc != 0 { 40339 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40340 return TCL_ERROR 40341 } 40342 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+76, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 72)))) 40343 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+76, 0)) 40344 return SQLITE_OK 40345 } 40346 40347 func btree_eof(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40348 bp := tls.Alloc(106) 40349 defer tls.Free(106) 40350 40351 var pCur uintptr 40352 var rc int32 40353 40354 if argc != 2 { 40355 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40356 ts+24430, 0)) 40357 return TCL_ERROR 40358 } 40359 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40360 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40361 rc = sqlite3.Xsqlite3BtreeEof(tls, pCur) 40362 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40363 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+56, ts+1333, libc.VaList(bp+32, rc)) 40364 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40365 return SQLITE_OK 40366 } 40367 40368 func btree_payload_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40369 bp := tls.Alloc(106) 40370 defer tls.Free(106) 40371 40372 var pCur uintptr 40373 var n u32 40374 40375 if argc != 2 { 40376 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40377 ts+24430, 0)) 40378 return TCL_ERROR 40379 } 40380 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40381 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40382 n = sqlite3.Xsqlite3BtreePayloadSize(tls, pCur) 40383 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40384 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+56, ts+17791, libc.VaList(bp+32, n)) 40385 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40386 return SQLITE_OK 40387 } 40388 40389 func btree_varint_test(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40390 bp := tls.Alloc(516) 40391 defer tls.Free(516) 40392 40393 var in u64 40394 40395 var n1 int32 40396 var n2 int32 40397 var i int32 40398 var j int32 40399 40400 if argc != 5 { 40401 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40402 ts+25161, 0)) 40403 return TCL_ERROR 40404 } 40405 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+184) != 0 { 40406 return TCL_ERROR 40407 } 40408 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+188) != 0 { 40409 return TCL_ERROR 40410 } 40411 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+192) != 0 { 40412 return TCL_ERROR 40413 } 40414 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+196) != 0 { 40415 return TCL_ERROR 40416 } 40417 in = u64(*(*u32)(unsafe.Pointer(bp + 184))) 40418 in = in * u64(*(*u32)(unsafe.Pointer(bp + 188))) 40419 for i = 0; i < int32(*(*u32)(unsafe.Pointer(bp + 192))); i++ { 40420 n1 = sqlite3.Xsqlite3PutVarint(tls, bp+200, in) 40421 if n1 > 9 || n1 < 1 { 40422 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40423 ts+25196, libc.VaList(bp+32, n1)) 40424 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+300, 0)) 40425 return TCL_ERROR 40426 } 40427 n2 = int32(sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504)) 40428 if n1 != n2 { 40429 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40430 ts+25246, libc.VaList(bp+56, n1, n2)) 40431 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, bp+300, 0)) 40432 return TCL_ERROR 40433 } 40434 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 40435 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40436 ts+25294, libc.VaList(bp+88, in, *(*u64)(unsafe.Pointer(bp + 504)))) 40437 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, bp+300, 0)) 40438 return TCL_ERROR 40439 } 40440 if in&uint64(0xffffffff) == in { 40441 n2 = int32(func() uint8 { 40442 if int32(*(*uint8)(unsafe.Pointer(bp + 200))) < int32(u8(0x80)) { 40443 return uint8(func() int32 { *(*u32)(unsafe.Pointer(bp + 512)) = u32(*(*uint8)(unsafe.Pointer(bp + 200))); return 1 }()) 40444 } 40445 return sqlite3.Xsqlite3GetVarint32(tls, bp+200, bp+512) 40446 }()) 40447 *(*u64)(unsafe.Pointer(bp + 504)) = u64(*(*u32)(unsafe.Pointer(bp + 512))) 40448 if n1 != n2 { 40449 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40450 ts+25333, 40451 libc.VaList(bp+120, n1, n2)) 40452 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+136, bp+300, 0)) 40453 return TCL_ERROR 40454 } 40455 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 40456 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40457 ts+25383, 40458 libc.VaList(bp+152, in, *(*u64)(unsafe.Pointer(bp + 504)))) 40459 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+168, bp+300, 0)) 40460 return TCL_ERROR 40461 } 40462 } 40463 40464 for j = 0; j < 19; j++ { 40465 sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504) 40466 } 40467 in = in + u64(*(*u32)(unsafe.Pointer(bp + 196))) 40468 } 40469 return TCL_OK 40470 } 40471 40472 func btree_from_db(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40473 bp := tls.Alloc(236) 40474 defer tls.Free(236) 40475 40476 var db uintptr 40477 var pBt uintptr 40478 var iDb int32 = 0 40479 40480 if argc != 2 && argc != 3 { 40481 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40482 ts+25439, 0)) 40483 return TCL_ERROR 40484 } 40485 40486 if 1 != tcl.XTcl_GetCommandInfo(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) { 40487 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25455, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+11945, 0)) 40488 return TCL_ERROR 40489 } 40490 if argc == 3 { 40491 iDb = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40492 } 40493 40494 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 72)).FobjClientData)) 40495 40496 pBt = (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(db)).FaDb + uintptr(iDb)*32)).FpBt 40497 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+136, ts+9889, libc.VaList(bp+64, pBt)) 40498 tcl.XTcl_SetResult(tls, interp, bp+136, uintptr(1)) 40499 return TCL_OK 40500 } 40501 40502 func btree_ismemdb(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40503 bp := tls.Alloc(32) 40504 defer tls.Free(32) 40505 40506 var pBt uintptr 40507 var res int32 40508 var pFile uintptr 40509 40510 if argc != 2 { 40511 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40512 ts+24430, 0)) 40513 return TCL_ERROR 40514 } 40515 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40516 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40517 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40518 pFile = sqlite3.Xsqlite3PagerFile(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 40519 res = libc.Bool32((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods == uintptr(0)) 40520 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40521 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40522 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(res != 0))) 40523 return SQLITE_OK 40524 } 40525 40526 func btree_set_cache_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40527 bp := tls.Alloc(36) 40528 defer tls.Free(36) 40529 40530 var pBt uintptr 40531 40532 if argc != 3 { 40533 tcl.XTcl_AppendResult(tls, 40534 interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+25476, 0)) 40535 return TCL_ERROR 40536 } 40537 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40538 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 40539 return TCL_ERROR 40540 } 40541 40542 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40543 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40544 sqlite3.Xsqlite3BtreeSetCacheSize(tls, pBt, *(*int32)(unsafe.Pointer(bp + 32))) 40545 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40546 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40547 return TCL_OK 40548 } 40549 40550 func btree_insert(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40551 bp := tls.Alloc(68) 40552 defer tls.Free(68) 40553 40554 var pCur uintptr 40555 40556 if objc != 4 && objc != 3 { 40557 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+25488) 40558 return TCL_ERROR 40559 } 40560 40561 libc.Xmemset(tls, bp+16, 0, uint64(unsafe.Sizeof(BtreePayload{}))) 40562 if objc == 4 { 40563 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 40564 return TCL_ERROR 40565 } 40566 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 40567 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16+36) 40568 } else { 40569 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpKey = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) 40570 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 40571 } 40572 pCur = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 40573 40574 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 40575 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40576 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3BtreeInsert(tls, pCur, bp+16, 0, 0) 40577 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40578 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 40579 40580 tcl.XTcl_ResetResult(tls, interp) 40581 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 40582 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, *(*int32)(unsafe.Pointer(bp + 64))), 0)) 40583 return TCL_ERROR 40584 } 40585 return TCL_OK 40586 } 40587 40588 func Sqlitetest3_Init(tls *libc.TLS, interp uintptr) int32 { 40589 var i int32 40590 40591 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd3))/uint64(unsafe.Sizeof(struct { 40592 FzName uintptr 40593 FxProc uintptr 40594 }{})); i++ { 40595 tcl.XTcl_CreateCommand(tls, interp, aCmd3[i].FzName, aCmd3[i].FxProc, uintptr(0), uintptr(0)) 40596 } 40597 40598 tcl.XTcl_CreateObjCommand(tls, interp, ts+25512, *(*uintptr)(unsafe.Pointer(&struct { 40599 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 40600 }{btree_insert})), uintptr(0), uintptr(0)) 40601 40602 return TCL_OK 40603 } 40604 40605 var aCmd3 = [14]struct { 40606 FzName uintptr 40607 FxProc uintptr 40608 }{ 40609 {FzName: ts + 25525, FxProc: 0}, 40610 {FzName: ts + 25536, FxProc: 0}, 40611 {FzName: ts + 25548, FxProc: 0}, 40612 {FzName: ts + 25572, FxProc: 0}, 40613 {FzName: ts + 25590, FxProc: 0}, 40614 {FzName: ts + 25603, FxProc: 0}, 40615 {FzName: ts + 25622, FxProc: 0}, 40616 {FzName: ts + 25633, FxProc: 0}, 40617 {FzName: ts + 25643, FxProc: 0}, 40618 {FzName: ts + 25662, FxProc: 0}, 40619 {FzName: ts + 25674, FxProc: 0}, 40620 {FzName: ts + 25692, FxProc: 0}, 40621 {FzName: ts + 25706, FxProc: 0}, 40622 {FzName: ts + 25720, FxProc: 0}, 40623 } 40624 40625 type sched_param = struct{ Fsched_priority int32 } 40626 40627 type cpu_set_t = struct{ F__bits [16]uint64 } 40628 40629 type _pthread_cleanup_buffer = struct { 40630 F__routine uintptr 40631 F__arg uintptr 40632 F__canceltype int32 40633 F__ccgo_pad1 [4]byte 40634 F__prev uintptr 40635 } 40636 40637 type __pthread_cleanup_frame = struct { 40638 F__cancel_routine uintptr 40639 F__cancel_arg uintptr 40640 F__do_it int32 40641 F__cancel_type int32 40642 } 40643 40644 type Thread = struct { 40645 FzFilename uintptr 40646 FxOp uintptr 40647 FzArg uintptr 40648 Fopnum int32 40649 Fbusy int32 40650 Fcompleted int32 40651 F__ccgo_pad1 [4]byte 40652 Fdb uintptr 40653 FpStmt uintptr 40654 FzErr uintptr 40655 FzStaticErr uintptr 40656 Frc int32 40657 Fargc int32 40658 Fargv [100]uintptr 40659 Fcolv [100]uintptr 40660 } 40661 40662 var threadset [26]Thread 40663 40664 func test_barrier(tls *libc.TLS) { 40665 var pMutex uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_APP1) 40666 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 40667 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 40668 } 40669 40670 func test_thread_main(tls *libc.TLS, pArg uintptr) uintptr { 40671 var p uintptr = pArg 40672 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 40673 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40674 } 40675 sqlite3.Xsqlite3_open(tls, (*Thread)(unsafe.Pointer(p)).FzFilename, p+40) 40676 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread)(unsafe.Pointer(p)).Fdb) { 40677 (*Thread)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread)(unsafe.Pointer(p)).Fdb)) 40678 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40679 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 40680 } 40681 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40682 test_barrier(tls) 40683 (*Thread)(unsafe.Pointer(p)).Fcompleted = 1 40684 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 40685 libc.Xsched_yield(tls) 40686 } 40687 test_barrier(tls) 40688 for (*Thread)(unsafe.Pointer(p)).FxOp != 0 { 40689 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 40690 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 40691 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 40692 } 40693 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread)(unsafe.Pointer(p)).FxOp})).f(tls, p) 40694 test_barrier(tls) 40695 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 40696 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 40697 libc.Xsched_yield(tls) 40698 } 40699 test_barrier(tls) 40700 } 40701 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 40702 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40703 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40704 } 40705 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 40706 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40707 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 40708 } 40709 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 40710 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 40711 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 40712 } 40713 test_barrier(tls) 40714 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 40715 sqlite3.Xsqlite3_thread_cleanup(tls) 40716 return uintptr(0) 40717 } 40718 40719 func parse_thread_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 40720 bp := tls.Alloc(16) 40721 defer tls.Free(16) 40722 40723 if zArg == uintptr(0) || int32(*(*uint8)(unsafe.Pointer(zArg))) == 0 || int32(*(*uint8)(unsafe.Pointer(zArg + 1))) != 0 || !(int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zArg))))*2)))&int32(_ISupper) != 0) { 40724 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 40725 return -1 40726 } 40727 return int32(*(*uint8)(unsafe.Pointer(zArg))) - 'A' 40728 } 40729 40730 func tcl_thread_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40731 bp := tls.Alloc(96) 40732 defer tls.Free(96) 40733 40734 var i int32 40735 40736 var rc int32 40737 40738 if argc != 3 { 40739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40740 ts+25780, 0)) 40741 return TCL_ERROR 40742 } 40743 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40744 if i < 0 { 40745 return TCL_ERROR 40746 } 40747 if threadset[i].Fbusy != 0 { 40748 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 40749 return TCL_ERROR 40750 } 40751 threadset[i].Fbusy = 1 40752 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 40753 threadset[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 40754 threadset[i].Fopnum = 1 40755 threadset[i].Fcompleted = 0 40756 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 40757 f func(*libc.TLS, uintptr) uintptr 40758 }{test_thread_main})), uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40759 if rc != 0 { 40760 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 40761 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 40762 threadset[i].Fbusy = 0 40763 return TCL_ERROR 40764 } 40765 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 40766 return TCL_OK 40767 } 40768 40769 func test_thread_wait(tls *libc.TLS, p uintptr) { 40770 test_barrier(tls) 40771 for (*Thread)(unsafe.Pointer(p)).Fopnum > (*Thread)(unsafe.Pointer(p)).Fcompleted { 40772 libc.Xsched_yield(tls) 40773 } 40774 test_barrier(tls) 40775 } 40776 40777 func tcl_thread_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40778 bp := tls.Alloc(48) 40779 defer tls.Free(48) 40780 40781 var i int32 40782 40783 if argc != 2 { 40784 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40785 ts+25849, 0)) 40786 return TCL_ERROR 40787 } 40788 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40789 if i < 0 { 40790 return TCL_ERROR 40791 } 40792 if !(threadset[i].Fbusy != 0) { 40793 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40794 return TCL_ERROR 40795 } 40796 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40797 return TCL_OK 40798 } 40799 40800 func test_stop_thread(tls *libc.TLS, p uintptr) { 40801 test_thread_wait(tls, p) 40802 (*Thread)(unsafe.Pointer(p)).FxOp = uintptr(0) 40803 (*Thread)(unsafe.Pointer(p)).Fopnum++ 40804 test_thread_wait(tls, p) 40805 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzArg) 40806 (*Thread)(unsafe.Pointer(p)).FzArg = uintptr(0) 40807 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzFilename) 40808 (*Thread)(unsafe.Pointer(p)).FzFilename = uintptr(0) 40809 (*Thread)(unsafe.Pointer(p)).Fbusy = 0 40810 } 40811 40812 func tcl_thread_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40813 bp := tls.Alloc(48) 40814 defer tls.Free(48) 40815 40816 var i int32 40817 40818 if argc != 2 { 40819 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40820 ts+25849, 0)) 40821 return TCL_ERROR 40822 } 40823 if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 40824 for i = 0; i < N_THREAD; i++ { 40825 if threadset[i].Fbusy != 0 { 40826 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40827 } 40828 } 40829 } else { 40830 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40831 if i < 0 { 40832 return TCL_ERROR 40833 } 40834 if !(threadset[i].Fbusy != 0) { 40835 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40836 return TCL_ERROR 40837 } 40838 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40839 } 40840 return TCL_OK 40841 } 40842 40843 func tcl_thread_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40844 bp := tls.Alloc(172) 40845 defer tls.Free(172) 40846 40847 var i int32 40848 40849 if argc != 2 { 40850 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40851 ts+25849, 0)) 40852 return TCL_ERROR 40853 } 40854 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40855 if i < 0 { 40856 return TCL_ERROR 40857 } 40858 if !(threadset[i].Fbusy != 0) { 40859 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40860 return TCL_ERROR 40861 } 40862 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40863 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset[i].Fargc)) 40864 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40865 return TCL_OK 40866 } 40867 40868 func tcl_thread_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40869 bp := tls.Alloc(84) 40870 defer tls.Free(84) 40871 40872 var i int32 40873 40874 if argc != 3 { 40875 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40876 ts+25868, 0)) 40877 return TCL_ERROR 40878 } 40879 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40880 if i < 0 { 40881 return TCL_ERROR 40882 } 40883 if !(threadset[i].Fbusy != 0) { 40884 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40885 return TCL_ERROR 40886 } 40887 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 40888 return TCL_ERROR 40889 } 40890 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40891 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40892 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40893 return TCL_ERROR 40894 } 40895 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset)) + uintptr(i)*1680 + 80 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*8)), 0)) 40896 return TCL_OK 40897 } 40898 40899 func tcl_thread_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40900 bp := tls.Alloc(84) 40901 defer tls.Free(84) 40902 40903 var i int32 40904 40905 if argc != 3 { 40906 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40907 ts+25868, 0)) 40908 return TCL_ERROR 40909 } 40910 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 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 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 40919 return TCL_ERROR 40920 } 40921 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40922 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 40923 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 40924 return TCL_ERROR 40925 } 40926 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset)) + uintptr(i)*1680 + 880 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*8)), 0)) 40927 return TCL_OK 40928 } 40929 40930 func tcl_thread_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40931 bp := tls.Alloc(64) 40932 defer tls.Free(64) 40933 40934 var i int32 40935 var zName uintptr 40936 40937 if argc != 2 { 40938 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40939 ts+25849, 0)) 40940 return TCL_ERROR 40941 } 40942 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40943 if i < 0 { 40944 return TCL_ERROR 40945 } 40946 if !(threadset[i].Fbusy != 0) { 40947 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40948 return TCL_ERROR 40949 } 40950 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40951 zName = sqlite3.Xsqlite3ErrName(tls, threadset[i].Frc) 40952 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 40953 return TCL_OK 40954 } 40955 40956 func tcl_thread_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40957 bp := tls.Alloc(64) 40958 defer tls.Free(64) 40959 40960 var i int32 40961 40962 if argc != 2 { 40963 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40964 ts+25849, 0)) 40965 return TCL_ERROR 40966 } 40967 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40968 if i < 0 { 40969 return TCL_ERROR 40970 } 40971 if !(threadset[i].Fbusy != 0) { 40972 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 40973 return TCL_ERROR 40974 } 40975 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 40976 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset[i].FzErr, 0)) 40977 return TCL_OK 40978 } 40979 40980 func do_compile(tls *libc.TLS, p uintptr) { 40981 if (*Thread)(unsafe.Pointer(p)).Fdb == uintptr(0) { 40982 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 40983 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 40984 return 40985 } 40986 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 40987 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 40988 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40989 } 40990 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_prepare(tls, (*Thread)(unsafe.Pointer(p)).Fdb, (*Thread)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 40991 } 40992 40993 func tcl_thread_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40994 bp := tls.Alloc(56) 40995 defer tls.Free(56) 40996 40997 var i int32 40998 if argc != 3 { 40999 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41000 ts+25921, 0)) 41001 return TCL_ERROR 41002 } 41003 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41004 if i < 0 { 41005 return TCL_ERROR 41006 } 41007 if !(threadset[i].Fbusy != 0) { 41008 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41009 return TCL_ERROR 41010 } 41011 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41012 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile})) 41013 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 41014 threadset[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 41015 test_barrier(tls) 41016 threadset[i].Fopnum++ 41017 return TCL_OK 41018 } 41019 41020 func do_step(tls *libc.TLS, p uintptr) { 41021 var i int32 41022 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41023 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41024 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41025 return 41026 } 41027 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_step(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 41028 if (*Thread)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 41029 (*Thread)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 41030 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt); i++ { 41031 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 41032 } 41033 for i = 0; i < (*Thread)(unsafe.Pointer(p)).Fargc; i++ { 41034 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 41035 } 41036 } 41037 } 41038 41039 func tcl_thread_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41040 bp := tls.Alloc(48) 41041 defer tls.Free(48) 41042 41043 var i int32 41044 if argc != 2 { 41045 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41046 ts+25958, 0)) 41047 return TCL_ERROR 41048 } 41049 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41050 if i < 0 { 41051 return TCL_ERROR 41052 } 41053 if !(threadset[i].Fbusy != 0) { 41054 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41055 return TCL_ERROR 41056 } 41057 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41058 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step})) 41059 test_barrier(tls) 41060 threadset[i].Fopnum++ 41061 return TCL_OK 41062 } 41063 41064 func do_finalize(tls *libc.TLS, p uintptr) { 41065 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41066 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41067 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41068 return 41069 } 41070 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 41071 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41072 } 41073 41074 func tcl_thread_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41075 bp := tls.Alloc(48) 41076 defer tls.Free(48) 41077 41078 var i int32 41079 if argc != 2 { 41080 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41081 ts+25958, 0)) 41082 return TCL_ERROR 41083 } 41084 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41085 if i < 0 { 41086 return TCL_ERROR 41087 } 41088 if !(threadset[i].Fbusy != 0) { 41089 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41090 return TCL_ERROR 41091 } 41092 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41093 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize})) 41094 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 41095 threadset[i].FzArg = uintptr(0) 41096 test_barrier(tls) 41097 threadset[i].Fopnum++ 41098 return TCL_OK 41099 } 41100 41101 func tcl_thread_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41102 bp := tls.Alloc(64) 41103 defer tls.Free(64) 41104 41105 var i int32 41106 var j int32 41107 var temp uintptr 41108 if argc != 3 { 41109 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41110 ts+25963, 0)) 41111 return TCL_ERROR 41112 } 41113 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41114 if i < 0 { 41115 return TCL_ERROR 41116 } 41117 if !(threadset[i].Fbusy != 0) { 41118 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41119 return TCL_ERROR 41120 } 41121 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41122 j = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 41123 if j < 0 { 41124 return TCL_ERROR 41125 } 41126 if !(threadset[j].Fbusy != 0) { 41127 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 41128 return TCL_ERROR 41129 } 41130 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(j)*1680) 41131 temp = threadset[i].Fdb 41132 threadset[i].Fdb = threadset[j].Fdb 41133 threadset[j].Fdb = temp 41134 return TCL_OK 41135 } 41136 41137 func tcl_thread_db_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41138 bp := tls.Alloc(164) 41139 defer tls.Free(164) 41140 41141 var i int32 41142 41143 if argc != 2 { 41144 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41145 ts+25849, 0)) 41146 return TCL_ERROR 41147 } 41148 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41149 if i < 0 { 41150 return TCL_ERROR 41151 } 41152 if !(threadset[i].Fbusy != 0) { 41153 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41154 return TCL_ERROR 41155 } 41156 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41157 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].Fdb) 41158 threadset[i].Fdb = uintptr(0) 41159 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 41160 return TCL_OK 41161 } 41162 41163 func tcl_thread_db_put(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41164 bp := tls.Alloc(48) 41165 defer tls.Free(48) 41166 41167 var i int32 41168 if argc != 3 { 41169 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41170 ts+25972, 0)) 41171 return TCL_ERROR 41172 } 41173 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41174 if i < 0 { 41175 return TCL_ERROR 41176 } 41177 if !(threadset[i].Fbusy != 0) { 41178 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41179 return TCL_ERROR 41180 } 41181 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41182 41183 threadset[i].Fdb = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 41184 return TCL_OK 41185 } 41186 41187 func tcl_thread_stmt_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41188 bp := tls.Alloc(164) 41189 defer tls.Free(164) 41190 41191 var i int32 41192 41193 if argc != 2 { 41194 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41195 ts+25849, 0)) 41196 return TCL_ERROR 41197 } 41198 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41199 if i < 0 { 41200 return TCL_ERROR 41201 } 41202 if !(threadset[i].Fbusy != 0) { 41203 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41204 return TCL_ERROR 41205 } 41206 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41207 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].FpStmt) 41208 threadset[i].FpStmt = uintptr(0) 41209 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 41210 return TCL_OK 41211 } 41212 41213 func Sqlitetest4_Init(tls *libc.TLS, interp uintptr) int32 { 41214 var i int32 41215 41216 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd4))/uint64(unsafe.Sizeof(struct { 41217 FzName uintptr 41218 FxProc uintptr 41219 }{})); i++ { 41220 tcl.XTcl_CreateCommand(tls, interp, aCmd4[i].FzName, aCmd4[i].FxProc, uintptr(0), uintptr(0)) 41221 } 41222 return TCL_OK 41223 } 41224 41225 var aCmd4 = [15]struct { 41226 FzName uintptr 41227 FxProc uintptr 41228 }{ 41229 {FzName: ts + 25979, FxProc: 0}, 41230 {FzName: ts + 25993, FxProc: 0}, 41231 {FzName: ts + 26005, FxProc: 0}, 41232 {FzName: ts + 26017, FxProc: 0}, 41233 {FzName: ts + 26029, FxProc: 0}, 41234 {FzName: ts + 26041, FxProc: 0}, 41235 {FzName: ts + 26056, FxProc: 0}, 41236 {FzName: ts + 26070, FxProc: 0}, 41237 {FzName: ts + 26083, FxProc: 0}, 41238 {FzName: ts + 26098, FxProc: 0}, 41239 {FzName: ts + 26110, FxProc: 0}, 41240 {FzName: ts + 26126, FxProc: 0}, 41241 {FzName: ts + 26138, FxProc: 0}, 41242 {FzName: ts + 26152, FxProc: 0}, 41243 {FzName: ts + 26166, FxProc: 0}, 41244 } 41245 41246 func binarize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41247 bp := tls.Alloc(4) 41248 defer tls.Free(4) 41249 41250 var bytes uintptr 41251 var pRet uintptr 41252 41253 bytes = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 41254 pRet = tcl.XTcl_NewByteArrayObj(tls, bytes, *(*int32)(unsafe.Pointer(bp))+1) 41255 tcl.XTcl_SetObjResult(tls, interp, pRet) 41256 return TCL_OK 41257 } 41258 41259 func test_value_overhead(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41260 bp := tls.Alloc(96) 41261 defer tls.Free(96) 41262 41263 var i int32 41264 41265 if objc != 3 { 41266 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 41267 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+26182, 0)) 41268 return TCL_ERROR 41269 } 41270 41271 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32) != 0 { 41272 return TCL_ERROR 41273 } 41274 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+36) != 0 { 41275 return TCL_ERROR 41276 } 41277 41278 (*Mem)(unsafe.Pointer(bp + 40)).Fflags = u16(MEM_Str | MEM_Term | MEM_Static) 41279 (*Mem)(unsafe.Pointer(bp + 40)).Fz = ts + 26209 41280 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = u8(SQLITE_UTF8) 41281 41282 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 41283 if *(*int32)(unsafe.Pointer(bp + 36)) != 0 { 41284 sqlite3.Xsqlite3_value_text(tls, bp+40) 41285 } 41286 } 41287 41288 return TCL_OK 41289 } 41290 41291 func name_to_enc(tls *libc.TLS, interp uintptr, pObj uintptr) u8 { 41292 bp := tls.Alloc(104) 41293 defer tls.Free(104) 41294 41295 *(*[5]EncName)(unsafe.Pointer(bp + 24)) = [5]EncName{ 41296 {FzName: ts + 26221, Fenc: u8(SQLITE_UTF8)}, 41297 {FzName: ts + 26226, Fenc: u8(SQLITE_UTF16LE)}, 41298 {FzName: ts + 26234, Fenc: u8(SQLITE_UTF16BE)}, 41299 {FzName: ts + 26242, Fenc: u8(SQLITE_UTF16)}, 41300 {}, 41301 } 41302 var pEnc uintptr 41303 var z uintptr = tcl.XTcl_GetString(tls, pObj) 41304 for pEnc = bp + 24; (*EncName)(unsafe.Pointer(pEnc)).FzName != 0; pEnc += 16 { 41305 if 0 == sqlite3.Xsqlite3StrICmp(tls, z, (*EncName)(unsafe.Pointer(pEnc)).FzName) { 41306 break 41307 } 41308 } 41309 if !(int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) != 0) { 41310 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26248, z, 0)) 41311 } 41312 if int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) == SQLITE_UTF16 { 41313 return u8(SQLITE_UTF16LE) 41314 } 41315 return (*EncName)(unsafe.Pointer(pEnc)).Fenc 41316 } 41317 41318 type EncName = struct { 41319 FzName uintptr 41320 Fenc u8 41321 F__ccgo_pad1 [7]byte 41322 } 41323 41324 func test_translate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41325 bp := tls.Alloc(44) 41326 defer tls.Free(44) 41327 41328 var enc_from u8 41329 var enc_to u8 41330 var pVal uintptr 41331 var z uintptr 41332 41333 var xDel uintptr = uintptr(0) 41334 41335 if objc != 4 && objc != 5 { 41336 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 41337 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), 41338 ts+26267, 0)) 41339 return TCL_ERROR 41340 } 41341 if objc == 5 { 41342 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 41343 } 41344 41345 enc_from = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41346 if !(enc_from != 0) { 41347 return TCL_ERROR 41348 } 41349 enc_to = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 41350 if !(enc_to != 0) { 41351 return TCL_ERROR 41352 } 41353 41354 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 41355 41356 if int32(enc_from) == SQLITE_UTF8 { 41357 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 41358 if objc == 5 { 41359 z = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, z)) 41360 } 41361 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 41362 } else { 41363 z = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) 41364 if objc == 5 { 41365 var zTmp uintptr = z 41366 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 40))) 41367 libc.Xmemcpy(tls, z, zTmp, uint64(*(*int32)(unsafe.Pointer(bp + 40)))) 41368 } 41369 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 41370 } 41371 41372 z = sqlite3.Xsqlite3ValueText(tls, pVal, enc_to) 41373 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3ValueBytes(tls, pVal, enc_to) + func() int32 { 41374 if int32(enc_to) == SQLITE_UTF8 { 41375 return 1 41376 } 41377 return 2 41378 }() 41379 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, z, *(*int32)(unsafe.Pointer(bp + 40)))) 41380 41381 sqlite3.Xsqlite3ValueFree(tls, pVal) 41382 41383 return TCL_OK 41384 } 41385 41386 func test_translate_selftest(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41387 sqlite3.Xsqlite3UtfSelfTest(tls) 41388 return SQLITE_OK 41389 } 41390 41391 func Sqlitetest5_Init(tls *libc.TLS, interp uintptr) int32 { 41392 var i int32 41393 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd5))/uint64(unsafe.Sizeof(struct { 41394 FzName uintptr 41395 FxProc uintptr 41396 }{})); i++ { 41397 tcl.XTcl_CreateObjCommand(tls, interp, aCmd5[i].FzName, aCmd5[i].FxProc, uintptr(0), uintptr(0)) 41398 } 41399 return SQLITE_OK 41400 } 41401 41402 var aCmd5 = [4]struct { 41403 FzName uintptr 41404 FxProc uintptr 41405 }{ 41406 {FzName: ts + 26302, FxProc: 0}, 41407 {FzName: ts + 26311, FxProc: 0}, 41408 {FzName: ts + 26331, FxProc: 0}, 41409 {FzName: ts + 26346, FxProc: 0}, 41410 } 41411 41412 type CrashFile1 = struct { 41413 FpMethod uintptr 41414 FpRealFile uintptr 41415 FzName uintptr 41416 Fflags int32 41417 F__ccgo_pad1 [4]byte 41418 FzData uintptr 41419 FnData int32 41420 F__ccgo_pad2 [4]byte 41421 FiSize i64 41422 } 41423 41424 type CrashFile = CrashFile1 41425 type CrashGlobal1 = struct { 41426 FpWriteList uintptr 41427 FpWriteListEnd uintptr 41428 FiSectorSize int32 41429 FiDeviceCharacteristics int32 41430 FiCrash int32 41431 FzCrashFile [500]uint8 41432 } 41433 41434 type CrashGlobal = CrashGlobal1 41435 type WriteBuffer1 = struct { 41436 FiOffset i64 41437 FnBuf int32 41438 F__ccgo_pad1 [4]byte 41439 FzBuf uintptr 41440 FpFile uintptr 41441 FpNext uintptr 41442 } 41443 41444 type WriteBuffer = WriteBuffer1 41445 41446 var g = CrashGlobal{FiSectorSize: SQLITE_DEFAULT_SECTOR_SIZE} 41447 41448 var sqlite3CrashTestEnable int32 = 0 41449 41450 func crash_malloc(tls *libc.TLS, nByte int32) uintptr { 41451 return tcl.XTcl_AttemptAlloc(tls, uint32(size_t(nByte))) 41452 } 41453 41454 func crash_free(tls *libc.TLS, p uintptr) { 41455 tcl.XTcl_Free(tls, p) 41456 } 41457 41458 func crash_realloc(tls *libc.TLS, p uintptr, n int32) uintptr { 41459 return tcl.XTcl_AttemptRealloc(tls, p, uint32(size_t(n))) 41460 } 41461 41462 func writeDbFile(tls *libc.TLS, p uintptr, z uintptr, iAmt i64, iOff i64) int32 { 41463 var rc int32 = SQLITE_OK 41464 var iSkip int32 = 0 41465 if iAmt-i64(iSkip) > int64(0) { 41466 rc = sqlite3.Xsqlite3OsWrite(tls, (*CrashFile)(unsafe.Pointer(p)).FpRealFile, z+uintptr(iSkip), int32(iAmt-i64(iSkip)), iOff+i64(iSkip)) 41467 } 41468 return rc 41469 } 41470 41471 func writeListSync(tls *libc.TLS, pFile uintptr, isCrash int32) int32 { 41472 bp := tls.Alloc(16) 41473 defer tls.Free(16) 41474 41475 var rc int32 = SQLITE_OK 41476 var iDc int32 = g.FiDeviceCharacteristics 41477 var pWrite uintptr 41478 var ppPtr uintptr 41479 41480 var pFinal uintptr = uintptr(0) 41481 if !(isCrash != 0) { 41482 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41483 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile { 41484 pFinal = pWrite 41485 } 41486 } 41487 } else if iDc&(SQLITE_IOCAP_SEQUENTIAL|SQLITE_IOCAP_SAFE_APPEND) != 0 { 41488 var nWrite int32 = 0 41489 41490 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41491 nWrite++ 41492 } 41493 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 41494 *(*int32)(unsafe.Pointer(bp)) = func() int32 { 41495 if *(*int32)(unsafe.Pointer(bp)) < 0 { 41496 return -1 * *(*int32)(unsafe.Pointer(bp)) 41497 } 41498 return *(*int32)(unsafe.Pointer(bp)) 41499 }() % nWrite 41500 for pWrite = g.FpWriteList; *(*int32)(unsafe.Pointer(bp)) > 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41501 *(*int32)(unsafe.Pointer(bp))-- 41502 } 41503 pFinal = pWrite 41504 } 41505 41506 ppPtr = uintptr(unsafe.Pointer(&g)) 41507 for pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)); rc == SQLITE_OK && pWrite != 0; pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)) { 41508 var pRealFile uintptr = (*CrashFile)(unsafe.Pointer((*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile)).FpRealFile 41509 41510 var eAction int32 = 0 41511 if !(isCrash != 0) { 41512 eAction = 2 41513 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile || iDc&SQLITE_IOCAP_SEQUENTIAL != 0 { 41514 eAction = 1 41515 } 41516 } else { 41517 sqlite3.Xsqlite3_randomness(tls, 1, bp+4) 41518 41519 if iDc&SQLITE_IOCAP_ATOMIC != 0 || (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf == uintptr(0) { 41520 *(*uint8)(unsafe.Pointer(bp + 4)) &= uint8(0x01) 41521 } 41522 41523 if iDc&SQLITE_IOCAP_SEQUENTIAL != 0 && pWrite != pFinal { 41524 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(0) 41525 } 41526 41527 if iDc&SQLITE_IOCAP_SAFE_APPEND != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 41528 sqlite3.Xsqlite3OsFileSize(tls, pRealFile, bp+8) 41529 if *(*i64)(unsafe.Pointer(bp + 8)) == (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset { 41530 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(0) 41531 } 41532 } 41533 41534 if int32(*(*uint8)(unsafe.Pointer(bp + 4)))&0x06 == 0x06 { 41535 eAction = 3 41536 } else { 41537 eAction = func() int32 { 41538 if int32(*(*uint8)(unsafe.Pointer(bp + 4)))&0x01 != 0 { 41539 return 2 41540 } 41541 return 1 41542 }() 41543 } 41544 } 41545 41546 switch eAction { 41547 case 1: 41548 { 41549 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 41550 rc = writeDbFile(tls, 41551 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf, int64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf), (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 41552 } else { 41553 rc = sqlite3.Xsqlite3OsTruncate(tls, pRealFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 41554 } 41555 *(*uintptr)(unsafe.Pointer(ppPtr)) = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext 41556 crash_free(tls, pWrite) 41557 break 41558 41559 } 41560 case 2: 41561 { 41562 ppPtr = pWrite + 32 41563 break 41564 41565 } 41566 case 3: 41567 { 41568 var zGarbage uintptr 41569 var iFirst int32 = int32((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset / i64(g.FiSectorSize)) 41570 var iLast int32 = int32(((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset + i64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf) - int64(1)) / i64(g.FiSectorSize)) 41571 41572 zGarbage = crash_malloc(tls, g.FiSectorSize) 41573 if zGarbage != 0 { 41574 var i sqlite3_int64 41575 for i = sqlite3_int64(iFirst); rc == SQLITE_OK && i <= sqlite3_int64(iLast); i++ { 41576 sqlite3.Xsqlite3_randomness(tls, g.FiSectorSize, zGarbage) 41577 rc = writeDbFile(tls, 41578 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, zGarbage, int64(g.FiSectorSize), i*sqlite3_int64(g.FiSectorSize)) 41579 } 41580 crash_free(tls, zGarbage) 41581 } else { 41582 rc = SQLITE_NOMEM 41583 } 41584 41585 ppPtr = pWrite + 32 41586 break 41587 41588 } 41589 41590 default: 41591 } 41592 41593 if pWrite == pFinal { 41594 break 41595 } 41596 } 41597 41598 if rc == SQLITE_OK && isCrash != 0 { 41599 libc.Xexit(tls, -1) 41600 } 41601 41602 for pWrite = g.FpWriteList; pWrite != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41603 } 41604 g.FpWriteListEnd = pWrite 41605 41606 return rc 41607 } 41608 41609 func writeListAppend(tls *libc.TLS, pFile uintptr, iOffset sqlite3_int64, zBuf uintptr, nBuf int32) int32 { 41610 var pNew uintptr 41611 41612 pNew = crash_malloc(tls, int32(uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf))) 41613 if pNew == uintptr(0) { 41614 libc.Xfprintf(tls, libc.Xstderr, ts+26365, 0) 41615 } 41616 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf)) 41617 (*WriteBuffer)(unsafe.Pointer(pNew)).FiOffset = iOffset 41618 (*WriteBuffer)(unsafe.Pointer(pNew)).FnBuf = nBuf 41619 (*WriteBuffer)(unsafe.Pointer(pNew)).FpFile = pFile 41620 if zBuf != 0 { 41621 (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf = pNew + 1*40 41622 libc.Xmemcpy(tls, (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf, zBuf, uint64(nBuf)) 41623 } 41624 41625 if g.FpWriteList != 0 { 41626 (*WriteBuffer)(unsafe.Pointer(g.FpWriteListEnd)).FpNext = pNew 41627 } else { 41628 g.FpWriteList = pNew 41629 } 41630 g.FpWriteListEnd = pNew 41631 41632 return SQLITE_OK 41633 } 41634 41635 func cfClose(tls *libc.TLS, pFile uintptr) int32 { 41636 var pCrash uintptr = pFile 41637 writeListSync(tls, pCrash, 0) 41638 sqlite3.Xsqlite3OsClose(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FpRealFile) 41639 return SQLITE_OK 41640 } 41641 41642 func cfRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 41643 var pCrash uintptr = pFile 41644 var nCopy int32 = func() int32 { 41645 if i64(iAmt) < (*CrashFile)(unsafe.Pointer(pCrash)).FiSize-iOfst { 41646 return int32(i64(iAmt)) 41647 } 41648 return int32((*CrashFile)(unsafe.Pointer(pCrash)).FiSize - iOfst) 41649 }() 41650 41651 if nCopy > 0 { 41652 libc.Xmemcpy(tls, zBuf, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), uint64(nCopy)) 41653 } 41654 41655 if nCopy < iAmt { 41656 return SQLITE_IOERR | int32(2)<<8 41657 } 41658 41659 return SQLITE_OK 41660 } 41661 41662 func cfWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 41663 var pCrash uintptr = pFile 41664 if sqlite_int64(iAmt)+iOfst > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 41665 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(sqlite_int64(iAmt) + iOfst)) 41666 } 41667 for (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > i64((*CrashFile)(unsafe.Pointer(pCrash)).FnData) { 41668 var zNew uintptr 41669 var nNew int32 = (*CrashFile)(unsafe.Pointer(pCrash)).FnData*2 + 4096 41670 zNew = crash_realloc(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData, nNew) 41671 if !(zNew != 0) { 41672 return SQLITE_NOMEM 41673 } 41674 libc.Xmemset(tls, zNew+uintptr((*CrashFile)(unsafe.Pointer(pCrash)).FnData), 0, uint64(nNew-(*CrashFile)(unsafe.Pointer(pCrash)).FnData)) 41675 (*CrashFile)(unsafe.Pointer(pCrash)).FnData = nNew 41676 (*CrashFile)(unsafe.Pointer(pCrash)).FzData = zNew 41677 } 41678 libc.Xmemcpy(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), zBuf, uint64(iAmt)) 41679 return writeListAppend(tls, pFile, iOfst, zBuf, iAmt) 41680 } 41681 41682 func cfTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 41683 var pCrash uintptr = pFile 41684 41685 if (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > size { 41686 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(size)) 41687 } 41688 return writeListAppend(tls, pFile, size, uintptr(0), 0) 41689 } 41690 41691 func cfSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 41692 var pCrash uintptr = pFile 41693 var isCrash int32 = 0 41694 41695 var zName uintptr = (*CrashFile)(unsafe.Pointer(pCrash)).FzName 41696 var zCrashFile uintptr = uintptr(unsafe.Pointer(&g)) + 28 41697 var nName int32 = int32(libc.Xstrlen(tls, zName)) 41698 var nCrashFile int32 = int32(libc.Xstrlen(tls, zCrashFile)) 41699 41700 if nCrashFile > 0 && int32(*(*uint8)(unsafe.Pointer(zCrashFile + uintptr(nCrashFile-1)))) == '*' { 41701 nCrashFile-- 41702 if nName > nCrashFile { 41703 nName = nCrashFile 41704 } 41705 } 41706 41707 if nName == nCrashFile && 0 == libc.Xmemcmp(tls, zName, zCrashFile, uint64(nName)) { 41708 if libc.PreDecInt32(&g.FiCrash, 1) == 0 { 41709 isCrash = 1 41710 } 41711 } 41712 41713 return writeListSync(tls, pCrash, isCrash) 41714 } 41715 41716 func cfFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 41717 var pCrash uintptr = pFile 41718 *(*sqlite_int64)(unsafe.Pointer(pSize)) = (*CrashFile)(unsafe.Pointer(pCrash)).FiSize 41719 return SQLITE_OK 41720 } 41721 41722 func cfLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 41723 return sqlite3.Xsqlite3OsLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 41724 } 41725 41726 func cfUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 41727 return sqlite3.Xsqlite3OsUnlock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 41728 } 41729 41730 func cfCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 41731 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, pResOut) 41732 } 41733 41734 func cfFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 41735 if op == SQLITE_FCNTL_SIZE_HINT { 41736 var pCrash uintptr = pFile 41737 var nByte i64 = *(*i64)(unsafe.Pointer(pArg)) 41738 if nByte > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 41739 if SQLITE_OK == writeListAppend(tls, pFile, nByte, uintptr(0), 0) { 41740 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(nByte)) 41741 } 41742 } 41743 return SQLITE_OK 41744 } 41745 return sqlite3.Xsqlite3OsFileControl(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, op, pArg) 41746 } 41747 41748 func cfSectorSize(tls *libc.TLS, pFile uintptr) int32 { 41749 return g.FiSectorSize 41750 } 41751 41752 func cfDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 41753 return g.FiDeviceCharacteristics 41754 } 41755 41756 func cfShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 41757 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41758 return (*struct { 41759 f func(*libc.TLS, uintptr, int32, int32, int32) int32 41760 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 41761 } 41762 41763 func cfShmBarrier(tls *libc.TLS, pFile uintptr) { 41764 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41765 (*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) 41766 } 41767 41768 func cfShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 41769 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41770 return (*struct { 41771 f func(*libc.TLS, uintptr, int32) int32 41772 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, delFlag) 41773 } 41774 41775 func cfShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, sz int32, w int32, pp uintptr) int32 { 41776 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 41777 return (*struct { 41778 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 41779 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iRegion, sz, w, pp) 41780 } 41781 41782 var CrashFileVtab = sqlite3_io_methods{ 41783 FiVersion: 2, 41784 FxClose: 0, 41785 FxRead: 0, 41786 FxWrite: 0, 41787 FxTruncate: 0, 41788 FxSync: 0, 41789 FxFileSize: 0, 41790 FxLock: 0, 41791 FxUnlock: 0, 41792 FxCheckReservedLock: 0, 41793 FxFileControl: 0, 41794 FxSectorSize: 0, 41795 FxDeviceCharacteristics: 0, 41796 FxShmMap: 0, 41797 FxShmLock: 0, 41798 FxShmBarrier: 0, 41799 FxShmUnmap: 0, 41800 } 41801 41802 type crashAppData = struct{ FpOrig uintptr } 41803 41804 func cfOpen(tls *libc.TLS, pCfVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 41805 bp := tls.Alloc(8) 41806 defer tls.Free(8) 41807 41808 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41809 var rc int32 41810 var pWrapper uintptr = pFile 41811 var pReal uintptr = pWrapper + 1*56 41812 41813 libc.Xmemset(tls, pWrapper, 0, uint64(unsafe.Sizeof(CrashFile{}))) 41814 rc = sqlite3.Xsqlite3OsOpen(tls, pVfs, zName, pReal, flags, pOutFlags) 41815 41816 if rc == SQLITE_OK { 41817 (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod = uintptr(unsafe.Pointer(&CrashFileVtab)) 41818 (*CrashFile)(unsafe.Pointer(pWrapper)).FzName = zName 41819 (*CrashFile)(unsafe.Pointer(pWrapper)).FpRealFile = pReal 41820 rc = sqlite3.Xsqlite3OsFileSize(tls, pReal, bp) 41821 (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize = i64(int32(*(*i64)(unsafe.Pointer(bp)))) 41822 (*CrashFile)(unsafe.Pointer(pWrapper)).Fflags = flags 41823 } 41824 if rc == SQLITE_OK { 41825 (*CrashFile)(unsafe.Pointer(pWrapper)).FnData = int32(int64(4096) + (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize) 41826 (*CrashFile)(unsafe.Pointer(pWrapper)).FzData = crash_malloc(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FnData) 41827 if (*CrashFile)(unsafe.Pointer(pWrapper)).FzData != 0 { 41828 var iOff i64 41829 41830 libc.Xmemset(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData, 0, uint64((*CrashFile)(unsafe.Pointer(pWrapper)).FnData)) 41831 for iOff = int64(0); iOff < (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize; iOff = iOff + int64(512) { 41832 var nRead int32 = int32((*CrashFile)(unsafe.Pointer(pWrapper)).FiSize - iOff) 41833 if nRead > 512 { 41834 nRead = 512 41835 } 41836 rc = sqlite3.Xsqlite3OsRead(tls, pReal, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData+uintptr(iOff), nRead, iOff) 41837 } 41838 } else { 41839 rc = SQLITE_NOMEM 41840 } 41841 } 41842 if rc != SQLITE_OK && (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod != 0 { 41843 sqlite3.Xsqlite3OsClose(tls, pFile) 41844 } 41845 return rc 41846 } 41847 41848 func cfDelete(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, dirSync int32) int32 { 41849 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41850 return (*struct { 41851 f func(*libc.TLS, uintptr, uintptr, int32) int32 41852 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDelete})).f(tls, pVfs, zPath, dirSync) 41853 } 41854 41855 func cfAccess(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 41856 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41857 return (*struct { 41858 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41859 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxAccess})).f(tls, pVfs, zPath, flags, pResOut) 41860 } 41861 41862 func cfFullPathname(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) int32 { 41863 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41864 return (*struct { 41865 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 41866 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})).f(tls, pVfs, zPath, nPathOut, zPathOut) 41867 } 41868 41869 func cfDlOpen(tls *libc.TLS, pCfVfs uintptr, zPath uintptr) uintptr { 41870 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41871 return (*struct { 41872 f func(*libc.TLS, uintptr, uintptr) uintptr 41873 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlOpen})).f(tls, pVfs, zPath) 41874 } 41875 41876 func cfDlError(tls *libc.TLS, pCfVfs uintptr, nByte int32, zErrMsg uintptr) { 41877 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41878 (*struct { 41879 f func(*libc.TLS, uintptr, int32, uintptr) 41880 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlError})).f(tls, pVfs, nByte, zErrMsg) 41881 } 41882 41883 func cfDlSym(tls *libc.TLS, pCfVfs uintptr, pH uintptr, zSym uintptr) uintptr { 41884 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41885 return (*struct { 41886 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 41887 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlSym})).f(tls, pVfs, pH, zSym) 41888 } 41889 41890 func cfDlClose(tls *libc.TLS, pCfVfs uintptr, pHandle uintptr) { 41891 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41892 (*struct { 41893 f func(*libc.TLS, uintptr, uintptr) 41894 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlClose})).f(tls, pVfs, pHandle) 41895 } 41896 41897 func cfRandomness(tls *libc.TLS, pCfVfs uintptr, nByte int32, zBufOut uintptr) int32 { 41898 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41899 return (*struct { 41900 f func(*libc.TLS, uintptr, int32, uintptr) int32 41901 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxRandomness})).f(tls, pVfs, nByte, zBufOut) 41902 } 41903 41904 func cfSleep(tls *libc.TLS, pCfVfs uintptr, nMicro int32) int32 { 41905 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41906 return (*struct { 41907 f func(*libc.TLS, uintptr, int32) int32 41908 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSleep})).f(tls, pVfs, nMicro) 41909 } 41910 41911 func cfCurrentTime(tls *libc.TLS, pCfVfs uintptr, pTimeOut uintptr) int32 { 41912 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41913 return (*struct { 41914 f func(*libc.TLS, uintptr, uintptr) int32 41915 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTime})).f(tls, pVfs, pTimeOut) 41916 } 41917 41918 func cfGetLastError(tls *libc.TLS, pCfVfs uintptr, n int32, z uintptr) int32 { 41919 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 41920 return (*struct { 41921 f func(*libc.TLS, uintptr, int32, uintptr) int32 41922 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetLastError})).f(tls, pVfs, n, z) 41923 } 41924 41925 func processDevSymArgs(tls *libc.TLS, interp uintptr, objc int32, objv uintptr, piDeviceChar uintptr, piSectorSize uintptr) int32 { 41926 bp := tls.Alloc(316) 41927 defer tls.Free(316) 41928 41929 *(*[14]DeviceFlag)(unsafe.Pointer(bp + 88)) = [14]DeviceFlag{ 41930 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 41931 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 41932 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 41933 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 41934 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 41935 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 41936 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 41937 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 41938 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 41939 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 41940 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 41941 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 41942 {FzName: ts + 26529, FiValue: SQLITE_IOCAP_BATCH_ATOMIC}, 41943 {}, 41944 } 41945 var i int32 41946 var iDc int32 = 0 41947 *(*int32)(unsafe.Pointer(bp + 68)) = 0 41948 var setSectorsize int32 = 0 41949 var setDeviceChar int32 = 0 41950 41951 for i = 0; i < objc; i = i + 2 { 41952 var zOpt uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+64) 41953 41954 if (*(*int32)(unsafe.Pointer(bp + 64)) > 11 || *(*int32)(unsafe.Pointer(bp + 64)) < 2 || libc.Xstrncmp(tls, ts+26542, zOpt, uint64(*(*int32)(unsafe.Pointer(bp + 64)))) != 0) && 41955 (*(*int32)(unsafe.Pointer(bp + 64)) > 16 || *(*int32)(unsafe.Pointer(bp + 64)) < 2 || libc.Xstrncmp(tls, ts+26554, zOpt, uint64(*(*int32)(unsafe.Pointer(bp + 64)))) != 0) { 41956 tcl.XTcl_AppendResult(tls, interp, 41957 libc.VaList(bp, ts+26571, zOpt, 41958 ts+26585, 0)) 41959 return TCL_ERROR 41960 } 41961 if i == objc-1 { 41962 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26633, zOpt, ts+11945, 0)) 41963 return TCL_ERROR 41964 } 41965 41966 if int32(*(*uint8)(unsafe.Pointer(zOpt + 1))) == 's' { 41967 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+68) != 0 { 41968 return TCL_ERROR 41969 } 41970 setSectorsize = 1 41971 } else { 41972 var j int32 41973 41974 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+72, bp+80) != 0 { 41975 return TCL_ERROR 41976 } 41977 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 72)); j++ { 41978 var rc int32 41979 41980 var pFlag uintptr = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(j)*8))) 41981 (*Tcl_Obj)(unsafe.Pointer(pFlag)).FrefCount++ 41982 tcl.XTcl_UtfToLower(tls, tcl.XTcl_GetString(tls, pFlag)) 41983 41984 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 41985 interp, pFlag, bp+88, int32(unsafe.Sizeof(DeviceFlag{})), ts+26664, 0, bp+312) 41986 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 41987 var _objPtr uintptr = pFlag 41988 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 41989 tcl.XTclFreeObj(tls, _objPtr) 41990 } 41991 } 41992 if rc != 0 { 41993 return TCL_ERROR 41994 } 41995 41996 iDc = iDc | (*DeviceFlag)(unsafe.Pointer(bp+88+uintptr(*(*int32)(unsafe.Pointer(bp + 312)))*16)).FiValue 41997 } 41998 setDeviceChar = 1 41999 } 42000 } 42001 42002 if setDeviceChar != 0 { 42003 *(*int32)(unsafe.Pointer(piDeviceChar)) = iDc 42004 } 42005 if setSectorsize != 0 { 42006 *(*int32)(unsafe.Pointer(piSectorSize)) = *(*int32)(unsafe.Pointer(bp + 68)) 42007 } 42008 42009 return TCL_OK 42010 } 42011 42012 type DeviceFlag = struct { 42013 FzName uintptr 42014 FiValue int32 42015 F__ccgo_pad1 [4]byte 42016 } 42017 42018 func crashNowCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42019 if objc != 1 { 42020 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 42021 return TCL_ERROR 42022 } 42023 writeListSync(tls, uintptr(0), 1) 42024 42025 return TCL_OK 42026 } 42027 42028 func crashEnableCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42029 bp := tls.Alloc(8) 42030 defer tls.Free(8) 42031 42032 *(*int32)(unsafe.Pointer(bp + 4)) = 0 42033 42034 if objc != 2 && objc != 3 { 42035 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26677) 42036 return TCL_ERROR 42037 } 42038 42039 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 42040 return TCL_ERROR 42041 } 42042 if objc == 3 && tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 42043 return TCL_ERROR 42044 } 42045 42046 if *(*int32)(unsafe.Pointer(bp)) != 0 && crashVfs.FpAppData != 0 || !(*(*int32)(unsafe.Pointer(bp)) != 0) && !(int32(crashVfs.FpAppData) != 0) { 42047 return TCL_OK 42048 } 42049 42050 if crashVfs.FpAppData == uintptr(0) { 42051 var pOriginalVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 42052 crashVfs.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FmxPathname 42053 crashVfs.FpAppData = pOriginalVfs 42054 crashVfs.FszOsFile = int32(uint64(unsafe.Sizeof(CrashFile{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FszOsFile)) 42055 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&crashVfs)), *(*int32)(unsafe.Pointer(bp + 4))) 42056 } else { 42057 crashVfs.FpAppData = uintptr(0) 42058 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&crashVfs))) 42059 } 42060 42061 return TCL_OK 42062 } 42063 42064 var crashVfs = sqlite3_vfs{ 42065 FiVersion: 2, 42066 FzName: ts + 26694, 42067 FxOpen: 0, 42068 FxDelete: 0, 42069 FxAccess: 0, 42070 FxFullPathname: 0, 42071 FxDlOpen: 0, 42072 FxDlError: 0, 42073 FxDlSym: 0, 42074 FxDlClose: 0, 42075 FxRandomness: 0, 42076 FxSleep: 0, 42077 FxCurrentTime: 0, 42078 FxGetLastError: 0, 42079 } 42080 42081 func crashParamsObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42082 bp := tls.Alloc(48) 42083 defer tls.Free(48) 42084 42085 var zCrashFile uintptr 42086 42087 *(*int32)(unsafe.Pointer(bp + 40)) = -1 42088 *(*int32)(unsafe.Pointer(bp + 44)) = -1 42089 42090 if !(objc < 3) { 42091 goto __1 42092 } 42093 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26700) 42094 goto error 42095 __1: 42096 ; 42097 zCrashFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+32) 42098 if !(uint64(*(*int32)(unsafe.Pointer(bp + 32))) >= uint64(unsafe.Sizeof([500]uint8{}))) { 42099 goto __2 42100 } 42101 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26726, zCrashFile, ts+11945, 0)) 42102 goto error 42103 __2: 42104 ; 42105 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+36) != 0) { 42106 goto __3 42107 } 42108 goto error 42109 __3: 42110 ; 42111 if !(processDevSymArgs(tls, interp, objc-3, objv+1*8, bp+40, bp+44) != 0) { 42112 goto __4 42113 } 42114 return TCL_ERROR 42115 __4: 42116 ; 42117 if !(*(*int32)(unsafe.Pointer(bp + 40)) >= 0) { 42118 goto __5 42119 } 42120 g.FiDeviceCharacteristics = *(*int32)(unsafe.Pointer(bp + 40)) 42121 __5: 42122 ; 42123 if !(*(*int32)(unsafe.Pointer(bp + 44)) >= 0) { 42124 goto __6 42125 } 42126 g.FiSectorSize = *(*int32)(unsafe.Pointer(bp + 44)) 42127 __6: 42128 ; 42129 g.FiCrash = *(*int32)(unsafe.Pointer(bp + 36)) 42130 libc.Xmemcpy(tls, uintptr(unsafe.Pointer(&g))+28, zCrashFile, uint64(*(*int32)(unsafe.Pointer(bp + 32))+1)) 42131 sqlite3CrashTestEnable = 1 42132 return TCL_OK 42133 42134 error: 42135 return TCL_ERROR 42136 } 42137 42138 func devSymObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42139 bp := tls.Alloc(8) 42140 defer tls.Free(8) 42141 42142 *(*int32)(unsafe.Pointer(bp)) = -1 42143 *(*int32)(unsafe.Pointer(bp + 4)) = -1 42144 42145 if processDevSymArgs(tls, interp, objc-1, objv+1*8, bp, bp+4) != 0 { 42146 return TCL_ERROR 42147 } 42148 devsym_register(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 42149 42150 return TCL_OK 42151 } 42152 42153 func writeCrashObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42154 bp := tls.Alloc(4) 42155 defer tls.Free(4) 42156 42157 *(*int32)(unsafe.Pointer(bp)) = 0 42158 42159 if objc != 2 { 42160 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26750) 42161 return TCL_ERROR 42162 } 42163 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 42164 return TCL_ERROR 42165 } 42166 42167 devsym_crash_on_write(tls, *(*int32)(unsafe.Pointer(bp))) 42168 return TCL_OK 42169 } 42170 42171 func dsUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42172 if objc != 1 { 42173 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 42174 return TCL_ERROR 42175 } 42176 42177 devsym_unregister(tls) 42178 return TCL_OK 42179 } 42180 42181 func jtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42182 bp := tls.Alloc(48) 42183 defer tls.Free(48) 42184 42185 var zParent uintptr = uintptr(0) 42186 42187 if objc != 2 && objc != 3 { 42188 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26757) 42189 return TCL_ERROR 42190 } 42191 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 42192 if objc == 3 { 42193 if libc.Xstrcmp(tls, zParent, ts+26779) != 0 { 42194 tcl.XTcl_AppendResult(tls, interp, 42195 libc.VaList(bp, ts+11851, zParent, ts+26788, 0)) 42196 return TCL_ERROR 42197 } 42198 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 42199 } 42200 42201 if !(int32(*(*uint8)(unsafe.Pointer(zParent))) != 0) { 42202 zParent = uintptr(0) 42203 } 42204 if jt_register(tls, zParent, libc.Bool32(objc == 3)) != 0 { 42205 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26808, 0)) 42206 return TCL_ERROR 42207 } 42208 42209 return TCL_OK 42210 } 42211 42212 func jtUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42213 if objc != 1 { 42214 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 42215 return TCL_ERROR 42216 } 42217 42218 jt_unregister(tls) 42219 return TCL_OK 42220 } 42221 42222 func Sqlitetest6_Init(tls *libc.TLS, interp uintptr) int32 { 42223 tcl.XTcl_CreateObjCommand(tls, interp, ts+26829, *(*uintptr)(unsafe.Pointer(&struct { 42224 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42225 }{crashEnableCmd})), uintptr(0), uintptr(0)) 42226 tcl.XTcl_CreateObjCommand(tls, interp, ts+26850, *(*uintptr)(unsafe.Pointer(&struct { 42227 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42228 }{crashParamsObjCmd})), uintptr(0), uintptr(0)) 42229 tcl.XTcl_CreateObjCommand(tls, interp, ts+26870, *(*uintptr)(unsafe.Pointer(&struct { 42230 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42231 }{crashNowCmd})), uintptr(0), uintptr(0)) 42232 tcl.XTcl_CreateObjCommand(tls, interp, ts+26888, *(*uintptr)(unsafe.Pointer(&struct { 42233 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42234 }{devSymObjCmd})), uintptr(0), uintptr(0)) 42235 tcl.XTcl_CreateObjCommand(tls, interp, ts+26912, *(*uintptr)(unsafe.Pointer(&struct { 42236 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42237 }{writeCrashObjCmd})), uintptr(0), uintptr(0)) 42238 tcl.XTcl_CreateObjCommand(tls, interp, ts+26935, *(*uintptr)(unsafe.Pointer(&struct { 42239 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42240 }{dsUnregisterObjCmd})), uintptr(0), uintptr(0)) 42241 tcl.XTcl_CreateObjCommand(tls, interp, ts+26953, *(*uintptr)(unsafe.Pointer(&struct { 42242 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42243 }{jtObjCmd})), uintptr(0), uintptr(0)) 42244 tcl.XTcl_CreateObjCommand(tls, interp, ts+26969, *(*uintptr)(unsafe.Pointer(&struct { 42245 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42246 }{jtUnregisterObjCmd})), uintptr(0), uintptr(0)) 42247 return TCL_OK 42248 } 42249 42250 type Thread1 = struct { 42251 FzFilename uintptr 42252 FxOp uintptr 42253 FzArg uintptr 42254 Fopnum int32 42255 Fbusy int32 42256 Fcompleted int32 42257 F__ccgo_pad1 [4]byte 42258 Fdb uintptr 42259 FpStmt uintptr 42260 FzErr uintptr 42261 FzStaticErr uintptr 42262 Frc int32 42263 Fargc int32 42264 Fargv [100]uintptr 42265 Fcolv [100]uintptr 42266 FnServer int32 42267 F__ccgo_pad2 [4]byte 42268 } 42269 42270 var threadset1 [26]Thread1 42271 42272 func client_main(tls *libc.TLS, pArg uintptr) uintptr { 42273 var p uintptr = pArg 42274 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 42275 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42276 } 42277 sqlite3_client_open(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename, p+40) 42278 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) { 42279 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread1)(unsafe.Pointer(p)).Fdb)) 42280 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42281 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 42282 } 42283 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42284 (*Thread1)(unsafe.Pointer(p)).Fcompleted = 1 42285 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42286 libc.Xsched_yield(tls) 42287 } 42288 for (*Thread1)(unsafe.Pointer(p)).FxOp != 0 { 42289 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 42290 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 42291 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 42292 } 42293 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread1)(unsafe.Pointer(p)).FxOp})).f(tls, p) 42294 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 42295 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42296 libc.Xsched_yield(tls) 42297 } 42298 } 42299 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 42300 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42301 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42302 } 42303 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 42304 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42305 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 42306 } 42307 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 42308 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 42309 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 42310 } 42311 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 42312 sqlite3.Xsqlite3_thread_cleanup(tls) 42313 return uintptr(0) 42314 } 42315 42316 func parse_client_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 42317 bp := tls.Alloc(16) 42318 defer tls.Free(16) 42319 42320 if zArg == uintptr(0) || int32(*(*uint8)(unsafe.Pointer(zArg))) == 0 || int32(*(*uint8)(unsafe.Pointer(zArg + 1))) != 0 || !(int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zArg))))*2)))&int32(_ISupper) != 0) { 42321 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 42322 return -1 42323 } 42324 return int32(*(*uint8)(unsafe.Pointer(zArg))) - 'A' 42325 } 42326 42327 func tcl_client_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42328 bp := tls.Alloc(96) 42329 defer tls.Free(96) 42330 42331 var i int32 42332 42333 var rc int32 42334 42335 if argc != 3 { 42336 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42337 ts+25780, 0)) 42338 return TCL_ERROR 42339 } 42340 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42341 if i < 0 { 42342 return TCL_ERROR 42343 } 42344 if threadset1[i].Fbusy != 0 { 42345 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 42346 return TCL_ERROR 42347 } 42348 threadset1[i].Fbusy = 1 42349 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 42350 threadset1[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42351 threadset1[i].Fopnum = 1 42352 threadset1[i].Fcompleted = 0 42353 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 42354 f func(*libc.TLS, uintptr) uintptr 42355 }{client_main})), uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42356 if rc != 0 { 42357 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 42358 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 42359 threadset1[i].Fbusy = 0 42360 return TCL_ERROR 42361 } 42362 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 42363 if threadset1[i].FnServer == 0 { 42364 threadset1[i].FnServer = 1 42365 sqlite3_server_start2(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688+1680) 42366 } 42367 return TCL_OK 42368 } 42369 42370 func client_wait(tls *libc.TLS, p uintptr) { 42371 for (*Thread1)(unsafe.Pointer(p)).Fopnum > (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42372 libc.Xsched_yield(tls) 42373 } 42374 } 42375 42376 func tcl_client_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42377 bp := tls.Alloc(48) 42378 defer tls.Free(48) 42379 42380 var i int32 42381 42382 if argc != 2 { 42383 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42384 ts+25849, 0)) 42385 return TCL_ERROR 42386 } 42387 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42388 if i < 0 { 42389 return TCL_ERROR 42390 } 42391 if !(threadset1[i].Fbusy != 0) { 42392 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42393 return TCL_ERROR 42394 } 42395 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42396 return TCL_OK 42397 } 42398 42399 func stop_thread(tls *libc.TLS, p uintptr) { 42400 client_wait(tls, p) 42401 (*Thread1)(unsafe.Pointer(p)).FxOp = uintptr(0) 42402 (*Thread1)(unsafe.Pointer(p)).Fopnum++ 42403 client_wait(tls, p) 42404 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzArg) 42405 (*Thread1)(unsafe.Pointer(p)).FzArg = uintptr(0) 42406 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename) 42407 (*Thread1)(unsafe.Pointer(p)).FzFilename = uintptr(0) 42408 (*Thread1)(unsafe.Pointer(p)).Fbusy = 0 42409 } 42410 42411 func tcl_client_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42412 bp := tls.Alloc(48) 42413 defer tls.Free(48) 42414 42415 var i int32 42416 42417 if argc != 2 { 42418 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42419 ts+25849, 0)) 42420 return TCL_ERROR 42421 } 42422 if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 42423 for i = 0; i < N_THREAD; i++ { 42424 if threadset1[i].Fbusy != 0 { 42425 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42426 } 42427 } 42428 } else { 42429 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42430 if i < 0 { 42431 return TCL_ERROR 42432 } 42433 if !(threadset1[i].Fbusy != 0) { 42434 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42435 return TCL_ERROR 42436 } 42437 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42438 } 42439 42440 for i = 0; i < N_THREAD && threadset1[i].Fbusy == 0; i++ { 42441 } 42442 if i >= N_THREAD { 42443 sqlite3_server_stop(tls) 42444 for 1 != 0 { 42445 for i = 0; i < N_THREAD && threadset1[i].FnServer == 0; i++ { 42446 } 42447 if i == N_THREAD { 42448 break 42449 } 42450 libc.Xsched_yield(tls) 42451 } 42452 } 42453 return TCL_OK 42454 } 42455 42456 func tcl_client_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42457 bp := tls.Alloc(172) 42458 defer tls.Free(172) 42459 42460 var i int32 42461 42462 if argc != 2 { 42463 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42464 ts+25849, 0)) 42465 return TCL_ERROR 42466 } 42467 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42468 if i < 0 { 42469 return TCL_ERROR 42470 } 42471 if !(threadset1[i].Fbusy != 0) { 42472 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42473 return TCL_ERROR 42474 } 42475 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42476 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset1[i].Fargc)) 42477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 42478 return TCL_OK 42479 } 42480 42481 func tcl_client_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42482 bp := tls.Alloc(84) 42483 defer tls.Free(84) 42484 42485 var i int32 42486 42487 if argc != 3 { 42488 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42489 ts+25868, 0)) 42490 return TCL_ERROR 42491 } 42492 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42493 if i < 0 { 42494 return TCL_ERROR 42495 } 42496 if !(threadset1[i].Fbusy != 0) { 42497 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42498 return TCL_ERROR 42499 } 42500 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 42501 return TCL_ERROR 42502 } 42503 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42504 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 42505 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 42506 return TCL_ERROR 42507 } 42508 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset1)) + uintptr(i)*1688 + 80 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*8)), 0)) 42509 return TCL_OK 42510 } 42511 42512 func tcl_client_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42513 bp := tls.Alloc(84) 42514 defer tls.Free(84) 42515 42516 var i int32 42517 42518 if argc != 3 { 42519 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42520 ts+25868, 0)) 42521 return TCL_ERROR 42522 } 42523 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42524 if i < 0 { 42525 return TCL_ERROR 42526 } 42527 if !(threadset1[i].Fbusy != 0) { 42528 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42529 return TCL_ERROR 42530 } 42531 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 42532 return TCL_ERROR 42533 } 42534 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42535 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 42536 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 42537 return TCL_ERROR 42538 } 42539 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset1)) + uintptr(i)*1688 + 880 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*8)), 0)) 42540 return TCL_OK 42541 } 42542 42543 func tcl_client_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42544 bp := tls.Alloc(64) 42545 defer tls.Free(64) 42546 42547 var i int32 42548 var zName uintptr 42549 42550 if argc != 2 { 42551 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42552 ts+25849, 0)) 42553 return TCL_ERROR 42554 } 42555 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42556 if i < 0 { 42557 return TCL_ERROR 42558 } 42559 if !(threadset1[i].Fbusy != 0) { 42560 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42561 return TCL_ERROR 42562 } 42563 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42564 zName = sqlite3.Xsqlite3ErrName(tls, threadset1[i].Frc) 42565 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 42566 return TCL_OK 42567 } 42568 42569 func tcl_client_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42570 bp := tls.Alloc(64) 42571 defer tls.Free(64) 42572 42573 var i int32 42574 42575 if argc != 2 { 42576 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42577 ts+25849, 0)) 42578 return TCL_ERROR 42579 } 42580 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42581 if i < 0 { 42582 return TCL_ERROR 42583 } 42584 if !(threadset1[i].Fbusy != 0) { 42585 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42586 return TCL_ERROR 42587 } 42588 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42589 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset1[i].FzErr, 0)) 42590 return TCL_OK 42591 } 42592 42593 func do_compile1(tls *libc.TLS, p uintptr) { 42594 if (*Thread1)(unsafe.Pointer(p)).Fdb == uintptr(0) { 42595 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 42596 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42597 return 42598 } 42599 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 42600 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42601 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42602 } 42603 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_prepare(tls, (*Thread1)(unsafe.Pointer(p)).Fdb, (*Thread1)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 42604 } 42605 42606 func tcl_client_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42607 bp := tls.Alloc(56) 42608 defer tls.Free(56) 42609 42610 var i int32 42611 if argc != 3 { 42612 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42613 ts+25921, 0)) 42614 return TCL_ERROR 42615 } 42616 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42617 if i < 0 { 42618 return TCL_ERROR 42619 } 42620 if !(threadset1[i].Fbusy != 0) { 42621 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42622 return TCL_ERROR 42623 } 42624 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42625 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile1})) 42626 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42627 threadset1[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42628 threadset1[i].Fopnum++ 42629 return TCL_OK 42630 } 42631 42632 func do_step1(tls *libc.TLS, p uintptr) { 42633 var i int32 42634 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42635 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 42636 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42637 return 42638 } 42639 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_step(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42640 if (*Thread1)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 42641 (*Thread1)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42642 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt); i++ { 42643 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 42644 } 42645 for i = 0; i < (*Thread1)(unsafe.Pointer(p)).Fargc; i++ { 42646 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 42647 } 42648 } 42649 } 42650 42651 func tcl_client_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42652 bp := tls.Alloc(48) 42653 defer tls.Free(48) 42654 42655 var i int32 42656 if argc != 2 { 42657 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42658 ts+25958, 0)) 42659 return TCL_ERROR 42660 } 42661 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42662 if i < 0 { 42663 return TCL_ERROR 42664 } 42665 if !(threadset1[i].Fbusy != 0) { 42666 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42667 return TCL_ERROR 42668 } 42669 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42670 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step1})) 42671 threadset1[i].Fopnum++ 42672 return TCL_OK 42673 } 42674 42675 func do_finalize1(tls *libc.TLS, p uintptr) { 42676 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42677 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 42678 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42679 return 42680 } 42681 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42682 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42683 } 42684 42685 func tcl_client_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42686 bp := tls.Alloc(48) 42687 defer tls.Free(48) 42688 42689 var i int32 42690 if argc != 2 { 42691 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42692 ts+25958, 0)) 42693 return TCL_ERROR 42694 } 42695 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42696 if i < 0 { 42697 return TCL_ERROR 42698 } 42699 if !(threadset1[i].Fbusy != 0) { 42700 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42701 return TCL_ERROR 42702 } 42703 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42704 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize1})) 42705 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42706 threadset1[i].FzArg = uintptr(0) 42707 threadset1[i].Fopnum++ 42708 return TCL_OK 42709 } 42710 42711 func do_reset(tls *libc.TLS, p uintptr) { 42712 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42713 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 42714 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42715 return 42716 } 42717 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_reset(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42718 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42719 } 42720 42721 func tcl_client_reset(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42722 bp := tls.Alloc(48) 42723 defer tls.Free(48) 42724 42725 var i int32 42726 if argc != 2 { 42727 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42728 ts+25958, 0)) 42729 return TCL_ERROR 42730 } 42731 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42732 if i < 0 { 42733 return TCL_ERROR 42734 } 42735 if !(threadset1[i].Fbusy != 0) { 42736 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42737 return TCL_ERROR 42738 } 42739 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42740 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_reset})) 42741 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42742 threadset1[i].FzArg = uintptr(0) 42743 threadset1[i].Fopnum++ 42744 return TCL_OK 42745 } 42746 42747 func tcl_client_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42748 bp := tls.Alloc(64) 42749 defer tls.Free(64) 42750 42751 var i int32 42752 var j int32 42753 var temp uintptr 42754 if argc != 3 { 42755 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42756 ts+25963, 0)) 42757 return TCL_ERROR 42758 } 42759 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42760 if i < 0 { 42761 return TCL_ERROR 42762 } 42763 if !(threadset1[i].Fbusy != 0) { 42764 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42765 return TCL_ERROR 42766 } 42767 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42768 j = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 42769 if j < 0 { 42770 return TCL_ERROR 42771 } 42772 if !(threadset1[j].Fbusy != 0) { 42773 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 42774 return TCL_ERROR 42775 } 42776 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(j)*1688) 42777 temp = threadset1[i].Fdb 42778 threadset1[i].Fdb = threadset1[j].Fdb 42779 threadset1[j].Fdb = temp 42780 return TCL_OK 42781 } 42782 42783 func Sqlitetest7_Init(tls *libc.TLS, interp uintptr) int32 { 42784 var i int32 42785 42786 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd6))/uint64(unsafe.Sizeof(struct { 42787 FzName uintptr 42788 FxProc uintptr 42789 }{})); i++ { 42790 tcl.XTcl_CreateCommand(tls, interp, aCmd6[i].FzName, aCmd6[i].FxProc, uintptr(0), uintptr(0)) 42791 } 42792 return TCL_OK 42793 } 42794 42795 var aCmd6 = [13]struct { 42796 FzName uintptr 42797 FxProc uintptr 42798 }{ 42799 {FzName: ts + 26987, FxProc: 0}, 42800 {FzName: ts + 27001, FxProc: 0}, 42801 {FzName: ts + 27013, FxProc: 0}, 42802 {FzName: ts + 27025, FxProc: 0}, 42803 {FzName: ts + 27037, FxProc: 0}, 42804 {FzName: ts + 27049, FxProc: 0}, 42805 {FzName: ts + 27064, FxProc: 0}, 42806 {FzName: ts + 27078, FxProc: 0}, 42807 {FzName: ts + 27091, FxProc: 0}, 42808 {FzName: ts + 27106, FxProc: 0}, 42809 {FzName: ts + 27118, FxProc: 0}, 42810 {FzName: ts + 27131, FxProc: 0}, 42811 {FzName: ts + 27147, FxProc: 0}, 42812 } 42813 42814 type echo_vtab1 = struct { 42815 Fbase sqlite3_vtab 42816 Finterp uintptr 42817 Fdb uintptr 42818 FisPattern int32 42819 FinTransaction int32 42820 FzThis uintptr 42821 FzTableName uintptr 42822 FzLogName uintptr 42823 FnCol int32 42824 F__ccgo_pad1 [4]byte 42825 FaIndex uintptr 42826 FaCol uintptr 42827 } 42828 42829 type echo_vtab = echo_vtab1 42830 type echo_cursor1 = struct { 42831 Fbase sqlite3_vtab_cursor 42832 FpStmt uintptr 42833 } 42834 42835 type echo_cursor = echo_cursor1 42836 42837 func simulateVtabError(tls *libc.TLS, p uintptr, zMethod uintptr) int32 { 42838 bp := tls.Alloc(152) 42839 defer tls.Free(152) 42840 42841 var zErr uintptr 42842 42843 *(*uint8)(unsafe.Pointer(bp + 24 + 127)) = uint8(0) 42844 sqlite3.Xsqlite3_snprintf(tls, 127, bp+24, ts+27159, libc.VaList(bp, zMethod, (*echo_vtab)(unsafe.Pointer(p)).FzTableName)) 42845 zErr = tcl.XTcl_GetVar2(tls, (*echo_vtab)(unsafe.Pointer(p)).Finterp, bp+24, uintptr(0), TCL_GLOBAL_ONLY) 42846 if zErr != 0 { 42847 (*echo_vtab)(unsafe.Pointer(p)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+16, zErr)) 42848 } 42849 return libc.Bool32(zErr != uintptr(0)) 42850 } 42851 42852 func dequoteString(tls *libc.TLS, z uintptr) { 42853 var quote int32 42854 var i int32 42855 var j int32 42856 if z == uintptr(0) { 42857 return 42858 } 42859 quote = int32(*(*uint8)(unsafe.Pointer(z))) 42860 switch quote { 42861 case '\'': 42862 break 42863 case '"': 42864 break 42865 case '`': 42866 break 42867 case '[': 42868 quote = ']' 42869 break 42870 default: 42871 return 42872 } 42873 i = 1 42874 j = 0 42875 for ; *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 42876 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == quote { 42877 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == quote { 42878 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(quote) 42879 i++ 42880 } else { 42881 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(0) 42882 break 42883 } 42884 } else { 42885 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(i))) 42886 } 42887 } 42888 } 42889 42890 func getColumnNames(tls *libc.TLS, db uintptr, zTab uintptr, paCol uintptr, pnCol uintptr) int32 { 42891 bp := tls.Alloc(24) 42892 defer tls.Free(24) 42893 42894 var aCol uintptr 42895 var zSql uintptr 42896 42897 var rc int32 42898 var nCol int32 42899 var zName uintptr 42900 var ii int32 42901 var nBytes int32 42902 var zSpace uintptr 42903 aCol = uintptr(0) 42904 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42905 rc = SQLITE_OK 42906 nCol = 0 42907 42908 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27203, libc.VaList(bp, zTab)) 42909 if !!(zSql != 0) { 42910 goto __1 42911 } 42912 rc = SQLITE_NOMEM 42913 goto out 42914 __1: 42915 ; 42916 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 42917 sqlite3.Xsqlite3_free(tls, zSql) 42918 42919 if !(rc == SQLITE_OK) { 42920 goto __2 42921 } 42922 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42923 42924 nBytes = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(nCol)) 42925 ii = 0 42926 __3: 42927 if !(ii < nCol) { 42928 goto __5 42929 } 42930 zName = sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii) 42931 if !!(zName != 0) { 42932 goto __6 42933 } 42934 rc = SQLITE_NOMEM 42935 goto out 42936 __6: 42937 ; 42938 nBytes = nBytes + (int32(libc.Xstrlen(tls, zName)) + 1) 42939 goto __4 42940 __4: 42941 ii++ 42942 goto __3 42943 goto __5 42944 __5: 42945 ; 42946 aCol = sqlite3.Xsqlite3MallocZero(tls, uint64(nBytes)) 42947 if !!(aCol != 0) { 42948 goto __7 42949 } 42950 rc = SQLITE_NOMEM 42951 goto out 42952 __7: 42953 ; 42954 zSpace = aCol + uintptr(nCol)*8 42955 ii = 0 42956 __8: 42957 if !(ii < nCol) { 42958 goto __10 42959 } 42960 *(*uintptr)(unsafe.Pointer(aCol + uintptr(ii)*8)) = zSpace 42961 sqlite3.Xsqlite3_snprintf(tls, nBytes, zSpace, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii))) 42962 zSpace += uintptr(int32(libc.Xstrlen(tls, zSpace)) + 1) 42963 goto __9 42964 __9: 42965 ii++ 42966 goto __8 42967 goto __10 42968 __10: 42969 ; 42970 __2: 42971 ; 42972 *(*uintptr)(unsafe.Pointer(paCol)) = aCol 42973 *(*int32)(unsafe.Pointer(pnCol)) = nCol 42974 42975 out: 42976 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 42977 return rc 42978 } 42979 42980 func getIndexArray(tls *libc.TLS, db uintptr, zTab uintptr, nCol int32, paIndex uintptr) int32 { 42981 bp := tls.Alloc(32) 42982 defer tls.Free(32) 42983 42984 var aIndex uintptr 42985 var rc int32 42986 var zSql uintptr 42987 var cid int32 42988 var zIdx uintptr 42989 42990 var rc2 int32 42991 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 42992 aIndex = uintptr(0) 42993 42994 aIndex = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(nCol)) 42995 if !!(aIndex != 0) { 42996 goto __1 42997 } 42998 rc = SQLITE_NOMEM 42999 goto get_index_array_out 43000 __1: 43001 ; 43002 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27220, libc.VaList(bp, zTab)) 43003 if !!(zSql != 0) { 43004 goto __2 43005 } 43006 rc = SQLITE_NOMEM 43007 goto get_index_array_out 43008 __2: 43009 ; 43010 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 43011 sqlite3.Xsqlite3_free(tls, zSql) 43012 43013 __3: 43014 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW) { 43015 goto __4 43016 } 43017 zIdx = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 43018 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 43019 if !(zIdx == uintptr(0)) { 43020 goto __5 43021 } 43022 goto __3 43023 __5: 43024 ; 43025 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27242, libc.VaList(bp+8, zIdx)) 43026 if !!(zSql != 0) { 43027 goto __6 43028 } 43029 rc = SQLITE_NOMEM 43030 goto get_index_array_out 43031 __6: 43032 ; 43033 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+24, uintptr(0)) 43034 sqlite3.Xsqlite3_free(tls, zSql) 43035 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW) { 43036 goto __7 43037 } 43038 cid = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 43039 43040 *(*int32)(unsafe.Pointer(aIndex + uintptr(cid)*4)) = 1 43041 __7: 43042 ; 43043 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0) { 43044 goto __8 43045 } 43046 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43047 __8: 43048 ; 43049 if !(rc != SQLITE_OK) { 43050 goto __9 43051 } 43052 goto get_index_array_out 43053 __9: 43054 ; 43055 goto __3 43056 __4: 43057 ; 43058 get_index_array_out: 43059 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { 43060 goto __10 43061 } 43062 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 43063 if !(rc == SQLITE_OK) { 43064 goto __11 43065 } 43066 rc = rc2 43067 __11: 43068 ; 43069 __10: 43070 ; 43071 if !(rc != SQLITE_OK) { 43072 goto __12 43073 } 43074 sqlite3.Xsqlite3_free(tls, aIndex) 43075 aIndex = uintptr(0) 43076 __12: 43077 ; 43078 *(*uintptr)(unsafe.Pointer(paIndex)) = aIndex 43079 return rc 43080 } 43081 43082 func appendToEchoModule(tls *libc.TLS, interp uintptr, zArg uintptr) { 43083 var flags int32 = TCL_APPEND_VALUE | TCL_LIST_ELEMENT | TCL_GLOBAL_ONLY 43084 tcl.XTcl_SetVar2(tls, interp, ts+27264, uintptr(0), func() uintptr { 43085 if zArg != 0 { 43086 return zArg 43087 } 43088 return ts + 584 43089 }(), flags) 43090 } 43091 43092 func echoDeclareVtab(tls *libc.TLS, pVtab uintptr, db uintptr) int32 { 43093 bp := tls.Alloc(8) 43094 defer tls.Free(8) 43095 43096 var rc int32 = SQLITE_OK 43097 43098 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 { 43099 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 43100 rc = sqlite3.Xsqlite3_prepare(tls, db, 43101 ts+27276, 43102 -1, bp, uintptr(0)) 43103 if rc == SQLITE_OK { 43104 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, -1, uintptr(0)) 43105 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) == SQLITE_ROW { 43106 var rc2 int32 43107 var zCreateTable uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 43108 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 43109 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 43110 if rc == SQLITE_OK { 43111 rc = rc2 43112 } 43113 } else { 43114 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 43115 if rc == SQLITE_OK { 43116 rc = SQLITE_ERROR 43117 } 43118 } 43119 if rc == SQLITE_OK { 43120 rc = getColumnNames(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, pVtab+88, pVtab+72) 43121 } 43122 if rc == SQLITE_OK { 43123 rc = getIndexArray(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, (*echo_vtab)(unsafe.Pointer(pVtab)).FnCol, pVtab+80) 43124 } 43125 } 43126 } 43127 43128 return rc 43129 } 43130 43131 func echoDestructor(tls *libc.TLS, pVtab uintptr) int32 { 43132 var p uintptr = pVtab 43133 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaIndex) 43134 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaCol) 43135 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis) 43136 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzTableName) 43137 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzLogName) 43138 sqlite3.Xsqlite3_free(tls, p) 43139 return 0 43140 } 43141 43142 type EchoModule1 = struct { 43143 Finterp uintptr 43144 Fdb uintptr 43145 } 43146 43147 type EchoModule = EchoModule1 43148 43149 func echoConstructor(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43150 bp := tls.Alloc(32) 43151 defer tls.Free(32) 43152 43153 var rc int32 43154 var i int32 43155 var pVtab uintptr 43156 43157 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_vtab{}))) 43158 if !(pVtab != 0) { 43159 return SQLITE_NOMEM 43160 } 43161 (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp = (*EchoModule)(unsafe.Pointer(pAux)).Finterp 43162 (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb = db 43163 43164 (*echo_vtab)(unsafe.Pointer(pVtab)).FzThis = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 43165 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzThis) != 0) { 43166 echoDestructor(tls, pVtab) 43167 return SQLITE_NOMEM 43168 } 43169 43170 if argc > 3 { 43171 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 43172 dequoteString(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 43173 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 && int32(*(*uint8)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName))) == '*' { 43174 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)), (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName+1)) 43175 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 43176 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = z 43177 (*echo_vtab)(unsafe.Pointer(pVtab)).FisPattern = 1 43178 } 43179 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) != 0) { 43180 echoDestructor(tls, pVtab) 43181 return SQLITE_NOMEM 43182 } 43183 } 43184 43185 for i = 0; i < argc; i++ { 43186 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 43187 } 43188 43189 rc = echoDeclareVtab(tls, pVtab, db) 43190 if rc != SQLITE_OK { 43191 echoDestructor(tls, pVtab) 43192 return rc 43193 } 43194 43195 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 43196 return SQLITE_OK 43197 } 43198 43199 func echoCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43200 bp := tls.Alloc(24) 43201 defer tls.Free(24) 43202 43203 var rc int32 = SQLITE_OK 43204 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27345) 43205 rc = echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 43206 43207 if rc == SQLITE_OK && argc == 5 { 43208 var zSql uintptr 43209 var pVtab uintptr = *(*uintptr)(unsafe.Pointer(ppVtab)) 43210 (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) 43211 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27353, libc.VaList(bp+8, (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName)) 43212 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 43213 sqlite3.Xsqlite3_free(tls, zSql) 43214 if rc != SQLITE_OK { 43215 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, sqlite3.Xsqlite3_errmsg(tls, db))) 43216 } 43217 } 43218 43219 if *(*uintptr)(unsafe.Pointer(ppVtab)) != 0 && rc != SQLITE_OK { 43220 echoDestructor(tls, *(*uintptr)(unsafe.Pointer(ppVtab))) 43221 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 43222 } 43223 43224 if rc == SQLITE_OK { 43225 (*echo_vtab)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppVtab)))).FinTransaction = 1 43226 } 43227 43228 return rc 43229 } 43230 43231 func echoConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43232 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27377) 43233 return echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 43234 } 43235 43236 func echoDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 43237 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27386) 43238 return echoDestructor(tls, pVtab) 43239 } 43240 43241 func echoDestroy(tls *libc.TLS, pVtab uintptr) int32 { 43242 bp := tls.Alloc(8) 43243 defer tls.Free(8) 43244 43245 var rc int32 = SQLITE_OK 43246 var p uintptr = pVtab 43247 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27398) 43248 43249 if p != 0 && (*echo_vtab)(unsafe.Pointer(p)).FzLogName != 0 { 43250 var zSql uintptr 43251 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27407, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzLogName)) 43252 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 43253 sqlite3.Xsqlite3_free(tls, zSql) 43254 } 43255 43256 if rc == SQLITE_OK { 43257 rc = echoDestructor(tls, pVtab) 43258 } 43259 return rc 43260 } 43261 43262 func echoOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 43263 var pCur uintptr 43264 if simulateVtabError(tls, pVTab, ts+27421) != 0 { 43265 return SQLITE_ERROR 43266 } 43267 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_cursor{}))) 43268 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 43269 return func() int32 { 43270 if pCur != 0 { 43271 return SQLITE_OK 43272 } 43273 return SQLITE_NOMEM 43274 }() 43275 } 43276 43277 func echoClose(tls *libc.TLS, cur uintptr) int32 { 43278 var rc int32 43279 var pCur uintptr = cur 43280 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt 43281 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43282 sqlite3.Xsqlite3_free(tls, pCur) 43283 rc = sqlite3.Xsqlite3_finalize(tls, pStmt) 43284 return rc 43285 } 43286 43287 func echoEof(tls *libc.TLS, cur uintptr) int32 { 43288 return func() int32 { 43289 if (*echo_cursor)(unsafe.Pointer(cur)).FpStmt != 0 { 43290 return 0 43291 } 43292 return 1 43293 }() 43294 } 43295 43296 func echoNext(tls *libc.TLS, cur uintptr) int32 { 43297 var rc int32 = SQLITE_OK 43298 var pCur uintptr = cur 43299 43300 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27427) != 0 { 43301 return SQLITE_ERROR 43302 } 43303 43304 if (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt != 0 { 43305 rc = sqlite3.Xsqlite3_step(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43306 if rc == SQLITE_ROW { 43307 rc = SQLITE_OK 43308 } else { 43309 rc = sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43310 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43311 } 43312 } 43313 43314 return rc 43315 } 43316 43317 func echoColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 43318 var iCol int32 = i + 1 43319 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 43320 43321 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27433) != 0 { 43322 return SQLITE_ERROR 43323 } 43324 43325 if !(pStmt != 0) { 43326 sqlite3.Xsqlite3_result_null(tls, ctx) 43327 } else { 43328 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, pStmt, iCol)) 43329 } 43330 return SQLITE_OK 43331 } 43332 43333 func echoRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 43334 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 43335 43336 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+2304) != 0 { 43337 return SQLITE_ERROR 43338 } 43339 43340 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 43341 return SQLITE_OK 43342 } 43343 43344 func hashString(tls *libc.TLS, zString uintptr) int32 { 43345 var val u32 = u32(0) 43346 var ii int32 43347 for ii = 0; *(*uint8)(unsafe.Pointer(zString + uintptr(ii))) != 0; ii++ { 43348 val = val<<3 + u32(int32(*(*uint8)(unsafe.Pointer(zString + uintptr(ii))))) 43349 } 43350 return int32(val & u32(0x7fffffff)) 43351 } 43352 43353 func echoFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 43354 var rc int32 43355 var i int32 43356 43357 var pCur uintptr = pVtabCursor 43358 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 43359 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 43360 43361 if simulateVtabError(tls, pVtab, ts+27441) != 0 { 43362 return SQLITE_ERROR 43363 } 43364 43365 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27441) 43366 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, idxStr) 43367 for i = 0; i < argc; i++ { 43368 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 43369 } 43370 43371 sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43372 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43373 43374 rc = sqlite3.Xsqlite3_prepare(tls, db, idxStr, -1, pCur+8, uintptr(0)) 43375 43376 for i = 0; rc == SQLITE_OK && i < argc; i++ { 43377 rc = sqlite3.Xsqlite3_bind_value(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt, i+1, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 43378 } 43379 43380 if rc == SQLITE_OK { 43381 rc = echoNext(tls, pVtabCursor) 43382 } 43383 43384 return rc 43385 } 43386 43387 func string_concat(tls *libc.TLS, pzStr uintptr, zAppend uintptr, doFree int32, pRc uintptr) { 43388 bp := tls.Alloc(24) 43389 defer tls.Free(24) 43390 43391 var zIn uintptr = *(*uintptr)(unsafe.Pointer(pzStr)) 43392 if !(zAppend != 0) && doFree != 0 && *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 43393 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 43394 } 43395 if *(*int32)(unsafe.Pointer(pRc)) != SQLITE_OK { 43396 sqlite3.Xsqlite3_free(tls, zIn) 43397 zIn = uintptr(0) 43398 } else { 43399 if zIn != 0 { 43400 var zTemp uintptr = zIn 43401 zIn = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp, zIn, zAppend)) 43402 sqlite3.Xsqlite3_free(tls, zTemp) 43403 } else { 43404 zIn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zAppend)) 43405 } 43406 if !(zIn != 0) { 43407 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 43408 } 43409 } 43410 *(*uintptr)(unsafe.Pointer(pzStr)) = zIn 43411 if doFree != 0 { 43412 sqlite3.Xsqlite3_free(tls, zAppend) 43413 } 43414 } 43415 43416 func echoSelectList(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) uintptr { 43417 bp := tls.Alloc(24) 43418 defer tls.Free(24) 43419 43420 var zRet uintptr = uintptr(0) 43421 if sqlite3.Xsqlite3_libversion_number(tls) < 3010000 { 43422 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27449, 0) 43423 } else { 43424 var i int32 43425 for i = 0; i < (*echo_vtab)(unsafe.Pointer(pTab)).FnCol; i++ { 43426 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed&(uint64(1)<<func() int32 { 43427 if i >= 63 { 43428 return 63 43429 } 43430 return i 43431 }()) != 0 { 43432 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27453, libc.VaList(bp, zRet, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pTab)).FaCol + uintptr(i)*8)))) 43433 } else { 43434 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27460, libc.VaList(bp+16, zRet)) 43435 } 43436 if !(zRet != 0) { 43437 break 43438 } 43439 } 43440 } 43441 return zRet 43442 } 43443 43444 func echoBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 43445 bp := tls.Alloc(100) 43446 defer tls.Free(100) 43447 43448 var ii int32 43449 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 43450 var zCol uintptr = uintptr(0) 43451 var zNew uintptr 43452 var nArg int32 = 0 43453 var zSep uintptr = ts + 9392 43454 var pVtab uintptr = tab 43455 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 43456 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43457 43458 var nRow int32 = 0 43459 var useIdx int32 = 0 43460 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 43461 var useCost int32 = 0 43462 var cost float64 = float64(0) 43463 var isIgnoreUsable int32 = 0 43464 if tcl.XTcl_GetVar2(tls, interp, ts+27469, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 43465 isIgnoreUsable = 1 43466 } 43467 43468 if simulateVtabError(tls, pVtab, ts+27495) != 0 { 43469 return SQLITE_ERROR 43470 } 43471 43472 if tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 43473 cost = libc.Xatof(tls, tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY)) 43474 useCost = 1 43475 } else { 43476 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27523, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43477 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43478 return SQLITE_NOMEM 43479 } 43480 *(*int32)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_prepare(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb, *(*uintptr)(unsafe.Pointer(bp + 88)), -1, bp+80, uintptr(0)) 43481 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 43482 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 43483 return *(*int32)(unsafe.Pointer(bp + 96)) 43484 } 43485 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 43486 nRow = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 43487 *(*int32)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 43488 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 43489 return *(*int32)(unsafe.Pointer(bp + 96)) 43490 } 43491 } 43492 43493 zCol = echoSelectList(tls, pVtab, pIdxInfo) 43494 if !(zCol != 0) { 43495 return SQLITE_NOMEM 43496 } 43497 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27547, libc.VaList(bp+8, zCol, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43498 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43499 return SQLITE_NOMEM 43500 } 43501 43502 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 43503 var pConstraint uintptr 43504 var pUsage uintptr 43505 var iCol int32 43506 43507 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 43508 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 43509 43510 if !(isIgnoreUsable != 0) && !(int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) != 0) { 43511 continue 43512 } 43513 43514 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn 43515 if iCol < 0 || *(*int32)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaIndex + uintptr(iCol)*4)) != 0 { 43516 var zNewCol uintptr 43517 if iCol >= 0 { 43518 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 43519 } else { 43520 zNewCol = ts + 6427 43521 } 43522 var zOp uintptr = uintptr(0) 43523 useIdx = 1 43524 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) { 43525 case SQLITE_INDEX_CONSTRAINT_EQ: 43526 zOp = ts + 27570 43527 break 43528 fallthrough 43529 case SQLITE_INDEX_CONSTRAINT_LT: 43530 zOp = ts + 27572 43531 break 43532 fallthrough 43533 case SQLITE_INDEX_CONSTRAINT_GT: 43534 zOp = ts + 27574 43535 break 43536 fallthrough 43537 case SQLITE_INDEX_CONSTRAINT_LE: 43538 zOp = ts + 27576 43539 break 43540 fallthrough 43541 case SQLITE_INDEX_CONSTRAINT_GE: 43542 zOp = ts + 27579 43543 break 43544 fallthrough 43545 case SQLITE_INDEX_CONSTRAINT_MATCH: 43546 zOp = ts + 27582 43547 break 43548 fallthrough 43549 case SQLITE_INDEX_CONSTRAINT_LIKE: 43550 zOp = ts + 27587 43551 break 43552 fallthrough 43553 case SQLITE_INDEX_CONSTRAINT_GLOB: 43554 zOp = ts + 27592 43555 break 43556 fallthrough 43557 case SQLITE_INDEX_CONSTRAINT_REGEXP: 43558 zOp = ts + 6831 43559 break 43560 } 43561 if zOp != 0 { 43562 if int32(*(*uint8)(unsafe.Pointer(zOp))) == 'L' { 43563 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27597, 43564 libc.VaList(bp+24, zSep, zNewCol)) 43565 } else { 43566 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27632, libc.VaList(bp+40, zSep, zNewCol, zOp)) 43567 } 43568 string_concat(tls, bp+88, zNew, 1, bp+96) 43569 zSep = ts + 9419 43570 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&nArg, 1) 43571 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 43572 } 43573 } 43574 } 43575 43576 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) { 43577 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn 43578 var zNewCol uintptr 43579 if iCol >= 0 { 43580 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 43581 } else { 43582 zNewCol = ts + 6427 43583 } 43584 var zDir uintptr 43585 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 43586 zDir = ts + 27644 43587 } else { 43588 zDir = ts + 27649 43589 } 43590 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27653, libc.VaList(bp+64, zNewCol, zDir)) 43591 string_concat(tls, bp+88, zNew, 1, bp+96) 43592 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 43593 } 43594 43595 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27495) 43596 43597 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(bp + 88))) 43598 43599 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43600 return *(*int32)(unsafe.Pointer(bp + 96)) 43601 } 43602 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = hashString(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 43603 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = *(*uintptr)(unsafe.Pointer(bp + 88)) 43604 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 43605 if useCost != 0 { 43606 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = cost 43607 } else if useIdx != 0 { 43608 for ii = 0; uint64(ii) < uint64(unsafe.Sizeof(int32(0)))*uint64(8)-uint64(1); ii++ { 43609 if nRow&(int32(1)<<ii) != 0 { 43610 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(ii) 43611 } 43612 } 43613 } else { 43614 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(nRow) 43615 } 43616 return *(*int32)(unsafe.Pointer(bp + 96)) 43617 } 43618 43619 func echoUpdate(tls *libc.TLS, tab uintptr, nData int32, apData uintptr, pRowid uintptr) int32 { 43620 bp := tls.Alloc(136) 43621 defer tls.Free(136) 43622 43623 var pVtab uintptr = tab 43624 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 43625 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 43626 43627 *(*uintptr)(unsafe.Pointer(bp + 128)) = uintptr(0) 43628 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 43629 var bindArgZero int32 = 0 43630 var bindArgOne int32 = 0 43631 var i int32 43632 43633 if simulateVtabError(tls, pVtab, ts+27669) != 0 { 43634 return SQLITE_ERROR 43635 } 43636 43637 if nData > 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 43638 var zSep uintptr = ts + 27677 43639 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27682, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43640 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 43641 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43642 } 43643 43644 bindArgOne = libc.Bool32(*(*uintptr)(unsafe.Pointer(apData + 1*8)) != 0 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER) 43645 bindArgZero = 1 43646 43647 if bindArgOne != 0 { 43648 string_concat(tls, bp+96, ts+27692, 0, bp+104) 43649 zSep = ts + 4758 43650 } 43651 for i = 2; i < nData; i++ { 43652 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) == uintptr(0) { 43653 continue 43654 } 43655 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, 43656 ts+27707, libc.VaList(bp+8, zSep, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(i-2)*8)), i)), 1, bp+104) 43657 zSep = ts + 4758 43658 } 43659 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, ts+27717, libc.VaList(bp+32, nData)), 1, bp+104) 43660 } else if nData == 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 43661 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27734, libc.VaList(bp+40, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43662 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 43663 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43664 } 43665 bindArgZero = 1 43666 } else if nData > 2 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_NULL { 43667 var ii int32 43668 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 43669 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 43670 43671 *(*uintptr)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_mprintf(tls, ts+27766, libc.VaList(bp+48, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43672 if !(*(*uintptr)(unsafe.Pointer(bp + 112)) != 0) { 43673 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43674 } 43675 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER { 43676 bindArgOne = 1 43677 *(*uintptr)(unsafe.Pointer(bp + 120)) = sqlite3.Xsqlite3_mprintf(tls, ts+3405, 0) 43678 string_concat(tls, bp+112, ts+6427, 0, bp+104) 43679 } 43680 43681 for ii = 2; ii < nData; ii++ { 43682 string_concat(tls, bp+112, 43683 sqlite3.Xsqlite3_mprintf(tls, ts+27783, libc.VaList(bp+56, func() uintptr { 43684 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 43685 return ts + 97 43686 } 43687 return ts + 584 43688 }(), *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(ii-2)*8)))), 1, bp+104) 43689 string_concat(tls, bp+120, 43690 sqlite3.Xsqlite3_mprintf(tls, ts+27788, libc.VaList(bp+72, func() uintptr { 43691 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 43692 return ts + 97 43693 } 43694 return ts + 584 43695 }(), ii)), 1, bp+104) 43696 } 43697 43698 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 112)), 1, bp+104) 43699 string_concat(tls, bp+96, ts+27794, 0, bp+104) 43700 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 120)), 1, bp+104) 43701 string_concat(tls, bp+96, ts+585, 0, bp+104) 43702 } else { 43703 return SQLITE_ERROR 43704 } 43705 43706 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 43707 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_prepare(tls, db, *(*uintptr)(unsafe.Pointer(bp + 96)), -1, bp+128, uintptr(0)) 43708 } 43709 43710 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 96))) 43711 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 43712 if bindArgZero != 0 { 43713 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), nData, *(*uintptr)(unsafe.Pointer(apData))) 43714 } 43715 if bindArgOne != 0 { 43716 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), 1, *(*uintptr)(unsafe.Pointer(apData + 1*8))) 43717 } 43718 for i = 2; i < nData && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK; i++ { 43719 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) != 0 { 43720 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), i, *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8))) 43721 } 43722 } 43723 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 43724 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 43725 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 43726 } else { 43727 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 43728 } 43729 } 43730 43731 if pRowid != 0 && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 43732 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 43733 } 43734 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 43735 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+88, sqlite3.Xsqlite3_errmsg(tls, db))) 43736 } 43737 43738 return *(*int32)(unsafe.Pointer(bp + 104)) 43739 } 43740 43741 func echoTransactionCall(tls *libc.TLS, tab uintptr, zCall uintptr) int32 { 43742 bp := tls.Alloc(8) 43743 defer tls.Free(8) 43744 43745 var z uintptr 43746 var pVtab uintptr = tab 43747 z = sqlite3.Xsqlite3_mprintf(tls, ts+27804, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43748 if z == uintptr(0) { 43749 return SQLITE_NOMEM 43750 } 43751 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, zCall) 43752 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, z) 43753 sqlite3.Xsqlite3_free(tls, z) 43754 return SQLITE_OK 43755 } 43756 43757 func echoBegin(tls *libc.TLS, tab uintptr) int32 { 43758 var rc int32 43759 var pVtab uintptr = tab 43760 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43761 var zVal uintptr 43762 43763 if simulateVtabError(tls, pVtab, ts+27813) != 0 { 43764 return SQLITE_ERROR 43765 } 43766 43767 rc = echoTransactionCall(tls, tab, ts+27813) 43768 43769 if rc == SQLITE_OK { 43770 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27820, uintptr(0), TCL_GLOBAL_ONLY) 43771 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 43772 rc = SQLITE_ERROR 43773 } 43774 } 43775 if rc == SQLITE_OK { 43776 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 1 43777 } 43778 return rc 43779 } 43780 43781 func echoSync(tls *libc.TLS, tab uintptr) int32 { 43782 var rc int32 43783 var pVtab uintptr = tab 43784 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43785 var zVal uintptr 43786 43787 if simulateVtabError(tls, pVtab, ts+27843) != 0 { 43788 return SQLITE_ERROR 43789 } 43790 43791 rc = echoTransactionCall(tls, tab, ts+27843) 43792 43793 if rc == SQLITE_OK { 43794 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27849, uintptr(0), TCL_GLOBAL_ONLY) 43795 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 43796 rc = -1 43797 } 43798 } 43799 return rc 43800 } 43801 43802 func echoCommit(tls *libc.TLS, tab uintptr) int32 { 43803 var pVtab uintptr = tab 43804 var rc int32 43805 43806 if simulateVtabError(tls, pVtab, ts+27871) != 0 { 43807 return SQLITE_ERROR 43808 } 43809 43810 sqlite3.Xsqlite3BeginBenignMalloc(tls) 43811 rc = echoTransactionCall(tls, tab, ts+27871) 43812 sqlite3.Xsqlite3EndBenignMalloc(tls) 43813 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 43814 return rc 43815 } 43816 43817 func echoRollback(tls *libc.TLS, tab uintptr) int32 { 43818 var rc int32 43819 var pVtab uintptr = tab 43820 43821 rc = echoTransactionCall(tls, tab, ts+27879) 43822 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 43823 return rc 43824 } 43825 43826 func overloadedGlobFunction(tls *libc.TLS, pContext uintptr, nArg int32, apArg uintptr) { 43827 bp := tls.Alloc(216) 43828 defer tls.Free(216) 43829 43830 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pContext) 43831 43832 var i int32 43833 var rc int32 43834 tcl.XTcl_DStringInit(tls, bp) 43835 tcl.XTcl_DStringAppendElement(tls, bp, ts+27889) 43836 for i = 0; i < nArg; i++ { 43837 tcl.XTcl_DStringAppendElement(tls, bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)))) 43838 } 43839 rc = tcl.XTcl_Eval(tls, interp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 43840 tcl.XTcl_DStringFree(tls, bp) 43841 if rc != 0 { 43842 sqlite3.Xsqlite3_result_error(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), -1) 43843 } else { 43844 sqlite3.Xsqlite3_result_text(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), 43845 -1, libc.UintptrFromInt32(-1)) 43846 } 43847 tcl.XTcl_ResetResult(tls, interp) 43848 } 43849 43850 func echoFindFunction(tls *libc.TLS, vtab uintptr, nArg int32, zFuncName uintptr, pxFunc uintptr, ppArg uintptr) int32 { 43851 bp := tls.Alloc(64) 43852 defer tls.Free(64) 43853 43854 var pVtab uintptr = vtab 43855 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43856 43857 if libc.Xstrcmp(tls, zFuncName, ts+27592) != 0 { 43858 return 0 43859 } 43860 if tcl.XTcl_GetCommandInfo(tls, interp, ts+27889, bp) == 0 { 43861 return 0 43862 } 43863 *(*uintptr)(unsafe.Pointer(pxFunc)) = *(*uintptr)(unsafe.Pointer(&struct { 43864 f func(*libc.TLS, uintptr, int32, uintptr) 43865 }{overloadedGlobFunction})) 43866 *(*uintptr)(unsafe.Pointer(ppArg)) = interp 43867 return 1 43868 } 43869 43870 func echoRename(tls *libc.TLS, vtab uintptr, zNewName uintptr) int32 { 43871 bp := tls.Alloc(24) 43872 defer tls.Free(24) 43873 43874 var rc int32 = SQLITE_OK 43875 var p uintptr = vtab 43876 43877 if simulateVtabError(tls, p, ts+27910) != 0 { 43878 return SQLITE_ERROR 43879 } 43880 43881 if (*echo_vtab)(unsafe.Pointer(p)).FisPattern != 0 { 43882 var nThis int32 = int32(libc.Xstrlen(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis)) 43883 var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27918, 43884 libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzTableName, zNewName, (*echo_vtab)(unsafe.Pointer(p)).FzTableName+uintptr(nThis))) 43885 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 43886 sqlite3.Xsqlite3_free(tls, zSql) 43887 } 43888 43889 return rc 43890 } 43891 43892 func echoSavepoint(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43893 return SQLITE_OK 43894 } 43895 43896 func echoRelease(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43897 return SQLITE_OK 43898 } 43899 43900 func echoRollbackTo(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 43901 return SQLITE_OK 43902 } 43903 43904 var echoModule = sqlite3_module{ 43905 FiVersion: 1, 43906 FxCreate: 0, 43907 FxConnect: 0, 43908 FxBestIndex: 0, 43909 FxDisconnect: 0, 43910 FxDestroy: 0, 43911 FxOpen: 0, 43912 FxClose: 0, 43913 FxFilter: 0, 43914 FxNext: 0, 43915 FxEof: 0, 43916 FxColumn: 0, 43917 FxRowid: 0, 43918 FxUpdate: 0, 43919 FxBegin: 0, 43920 FxSync: 0, 43921 FxCommit: 0, 43922 FxRollback: 0, 43923 FxFindFunction: 0, 43924 FxRename: 0, 43925 } 43926 43927 var echoModuleV2 = sqlite3_module{ 43928 FiVersion: 2, 43929 FxCreate: 0, 43930 FxConnect: 0, 43931 FxBestIndex: 0, 43932 FxDisconnect: 0, 43933 FxDestroy: 0, 43934 FxOpen: 0, 43935 FxClose: 0, 43936 FxFilter: 0, 43937 FxNext: 0, 43938 FxEof: 0, 43939 FxColumn: 0, 43940 FxRowid: 0, 43941 FxUpdate: 0, 43942 FxBegin: 0, 43943 FxSync: 0, 43944 FxCommit: 0, 43945 FxRollback: 0, 43946 FxFindFunction: 0, 43947 FxRename: 0, 43948 FxSavepoint: 0, 43949 FxRelease: 0, 43950 FxRollbackTo: 0, 43951 } 43952 43953 func moduleDestroy(tls *libc.TLS, p uintptr) { 43954 var pMod uintptr = p 43955 sqlite3.Xsqlite3_create_function(tls, (*EchoModule)(unsafe.Pointer(pMod)).Fdb, ts+27948, 43956 SQLITE_ANY, 1, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 43957 sqlite3.Xsqlite3_free(tls, p) 43958 } 43959 43960 func register_echo_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43961 bp := tls.Alloc(8) 43962 defer tls.Free(8) 43963 43964 var rc int32 43965 43966 var pMod uintptr 43967 if objc != 2 { 43968 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 43969 return TCL_ERROR 43970 } 43971 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 43972 return TCL_ERROR 43973 } 43974 43975 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43976 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43977 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43978 rc = sqlite3.Xsqlite3_create_module_v2(tls, 43979 *(*uintptr)(unsafe.Pointer(bp)), ts+27986, uintptr(unsafe.Pointer(&echoModule)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43980 43981 if rc == SQLITE_OK { 43982 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 43983 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 43984 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 43985 rc = sqlite3.Xsqlite3_create_module_v2(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+27991, 43986 uintptr(unsafe.Pointer(&echoModuleV2)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 43987 } 43988 43989 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 43990 return TCL_OK 43991 } 43992 43993 func declare_vtab(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 43994 bp := tls.Alloc(8) 43995 defer tls.Free(8) 43996 43997 var rc int32 43998 if objc != 3 { 43999 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 44000 return TCL_ERROR 44001 } 44002 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 44003 return TCL_ERROR 44004 } 44005 rc = sqlite3.Xsqlite3_declare_vtab(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 44006 if rc != SQLITE_OK { 44007 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 44008 return TCL_ERROR 44009 } 44010 return TCL_OK 44011 } 44012 44013 func Sqlitetest8_Init(tls *libc.TLS, interp uintptr) int32 { 44014 var i int32 44015 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd2))/uint64(unsafe.Sizeof(struct { 44016 FzName uintptr 44017 FxProc uintptr 44018 FclientData uintptr 44019 }{})); i++ { 44020 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd2[i].FzName, 44021 aObjCmd2[i].FxProc, aObjCmd2[i].FclientData, uintptr(0)) 44022 } 44023 return TCL_OK 44024 } 44025 44026 var aObjCmd2 = [2]struct { 44027 FzName uintptr 44028 FxProc uintptr 44029 FclientData uintptr 44030 }{ 44031 {FzName: ts + 27999, FxProc: 0}, 44032 {FzName: ts + 28020, FxProc: 0}, 44033 } 44034 44035 func c_collation_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44036 bp := tls.Alloc(32) 44037 defer tls.Free(32) 44038 44039 var zErrFunction uintptr 44040 44041 var rc int32 44042 zErrFunction = ts + 28041 44043 if !(objc != 1) { 44044 goto __1 44045 } 44046 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44047 return TCL_ERROR 44048 __1: 44049 ; 44050 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 44051 if !(rc != SQLITE_OK) { 44052 goto __2 44053 } 44054 zErrFunction = ts + 21460 44055 goto error_out 44056 __2: 44057 ; 44058 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), ts+13402, 456, uintptr(0), uintptr(0)) 44059 if !(rc != SQLITE_MISUSE) { 44060 goto __3 44061 } 44062 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 44063 zErrFunction = ts + 28045 44064 goto error_out 44065 __3: 44066 ; 44067 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 44068 return TCL_OK 44069 44070 error_out: 44071 tcl.XTcl_ResetResult(tls, interp) 44072 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 44073 return TCL_ERROR 44074 } 44075 44076 func c_realloc_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44077 bp := tls.Alloc(24) 44078 defer tls.Free(24) 44079 44080 var p uintptr 44081 var zErrFunction uintptr 44082 zErrFunction = ts + 28041 44083 44084 if !(objc != 1) { 44085 goto __1 44086 } 44087 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44088 return TCL_ERROR 44089 __1: 44090 ; 44091 p = sqlite3.Xsqlite3_malloc(tls, 5) 44092 if !!(p != 0) { 44093 goto __2 44094 } 44095 zErrFunction = ts + 28095 44096 goto error_out 44097 __2: 44098 ; 44099 p = sqlite3.Xsqlite3_realloc(tls, p, -1) 44100 if !(p != 0) { 44101 goto __3 44102 } 44103 zErrFunction = ts + 28110 44104 goto error_out 44105 __3: 44106 ; 44107 return TCL_OK 44108 44109 error_out: 44110 tcl.XTcl_ResetResult(tls, interp) 44111 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 44112 return TCL_ERROR 44113 } 44114 44115 func c_misuse_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44116 bp := tls.Alloc(40) 44117 defer tls.Free(40) 44118 44119 var zErrFunction uintptr 44120 44121 var rc int32 44122 zErrFunction = ts + 28041 44123 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 44124 44125 if !(objc != 1) { 44126 goto __1 44127 } 44128 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44129 return TCL_ERROR 44130 __1: 44131 ; 44132 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 44133 if !(rc != SQLITE_OK) { 44134 goto __2 44135 } 44136 zErrFunction = ts + 21460 44137 goto error_out 44138 __2: 44139 ; 44140 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 44141 44142 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 44143 if !(rc != SQLITE_MISUSE) { 44144 goto __3 44145 } 44146 zErrFunction = ts + 21366 44147 goto error_out 44148 __3: 44149 ; 44150 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 44151 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 44152 if !(rc != SQLITE_MISUSE) { 44153 goto __4 44154 } 44155 zErrFunction = ts + 21541 44156 goto error_out 44157 __4: 44158 ; 44159 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 44160 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 44161 if !(rc != SQLITE_MISUSE) { 44162 goto __5 44163 } 44164 zErrFunction = ts + 21575 44165 goto error_out 44166 __5: 44167 ; 44168 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 44169 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 44170 if !(rc != SQLITE_MISUSE) { 44171 goto __6 44172 } 44173 zErrFunction = ts + 21557 44174 goto error_out 44175 __6: 44176 ; 44177 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 44178 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 44179 if !(rc != SQLITE_MISUSE) { 44180 goto __7 44181 } 44182 zErrFunction = ts + 21637 44183 goto error_out 44184 __7: 44185 ; 44186 return TCL_OK 44187 44188 error_out: 44189 tcl.XTcl_ResetResult(tls, interp) 44190 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 44191 return TCL_ERROR 44192 } 44193 44194 func Sqlitetest9_Init(tls *libc.TLS, interp uintptr) int32 { 44195 var i int32 44196 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd3))/uint64(unsafe.Sizeof(struct { 44197 FzName uintptr 44198 FxProc uintptr 44199 FclientData uintptr 44200 }{})); i++ { 44201 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd3[i].FzName, 44202 aObjCmd3[i].FxProc, aObjCmd3[i].FclientData, uintptr(0)) 44203 } 44204 return TCL_OK 44205 } 44206 44207 var aObjCmd3 = [3]struct { 44208 FzName uintptr 44209 FxProc uintptr 44210 FclientData uintptr 44211 }{ 44212 {FzName: ts + 28126, FxProc: 0}, 44213 {FzName: ts + 28140, FxProc: 0}, 44214 {FzName: ts + 28155, FxProc: 0}, 44215 } 44216 44217 func Sqlitetestasync_Init(tls *libc.TLS, interp uintptr) int32 { 44218 return TCL_OK 44219 } 44220 44221 func resetAutoExtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44222 sqlite3.Xsqlite3_reset_auto_extension(tls) 44223 return SQLITE_OK 44224 } 44225 44226 func Sqlitetest_autoext_Init(tls *libc.TLS, interp uintptr) int32 { 44227 tcl.XTcl_CreateObjCommand(tls, interp, ts+28172, 44228 *(*uintptr)(unsafe.Pointer(&struct { 44229 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44230 }{resetAutoExtObjCmd})), uintptr(0), uintptr(0)) 44231 return TCL_OK 44232 } 44233 44234 func backupTestCmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44235 bp := tls.Alloc(196) 44236 defer tls.Free(196) 44237 44238 *(*[5]BackupSubCommand)(unsafe.Pointer(bp)) = [5]BackupSubCommand{ 44239 {FzCmd: ts + 9485, FnArg: 1, FzArg: ts + 28201}, 44240 {FzCmd: ts + 28207, FeCmd: uint32(1), FzArg: ts + 584}, 44241 {FzCmd: ts + 28214, FeCmd: uint32(2), FzArg: ts + 584}, 44242 {FzCmd: ts + 28224, FeCmd: uint32(3), FzArg: ts + 584}, 44243 {}, 44244 } 44245 44246 var p uintptr = clientData 44247 44248 var rc int32 44249 44250 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 44251 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(BackupSubCommand{})), ts+11691, 0, bp+120) 44252 if rc != TCL_OK { 44253 return rc 44254 } 44255 if objc != 2+(*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FnArg { 44256 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FzArg) 44257 return TCL_ERROR 44258 } 44259 44260 switch (*BackupSubCommand)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FeCmd { 44261 case uint32(1): 44262 { 44263 var zCmdName uintptr 44264 44265 zCmdName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))) 44266 tcl.XTcl_GetCommandInfo(tls, interp, zCmdName, bp+128) 44267 (*Tcl_CmdInfo)(unsafe.Pointer(bp + 128)).FdeleteProc = uintptr(0) 44268 tcl.XTcl_SetCommandInfo(tls, interp, zCmdName, bp+128) 44269 tcl.XTcl_DeleteCommand(tls, interp, zCmdName) 44270 44271 rc = sqlite3.Xsqlite3_backup_finish(tls, p) 44272 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44273 break 44274 44275 } 44276 44277 case uint32(0): 44278 { 44279 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+192) { 44280 return TCL_ERROR 44281 } 44282 rc = sqlite3.Xsqlite3_backup_step(tls, p, *(*int32)(unsafe.Pointer(bp + 192))) 44283 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44284 break 44285 44286 } 44287 44288 case uint32(2): 44289 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_remaining(tls, p))) 44290 break 44291 44292 case uint32(3): 44293 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_pagecount(tls, p))) 44294 break 44295 } 44296 44297 return TCL_OK 44298 } 44299 44300 type BackupSubCommand = struct { 44301 FzCmd uintptr 44302 FeCmd uint32 44303 FnArg int32 44304 FzArg uintptr 44305 } 44306 44307 func backupTestFinish(tls *libc.TLS, clientData ClientData) { 44308 var pBackup uintptr = clientData 44309 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 44310 } 44311 44312 func backupTestInit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44313 bp := tls.Alloc(32) 44314 defer tls.Free(32) 44315 44316 var pBackup uintptr 44317 44318 var zDestName uintptr 44319 var zSrcName uintptr 44320 var zCmd uintptr 44321 44322 if objc != 6 { 44323 tcl.XTcl_WrongNumArgs(tls, 44324 interp, 1, objv, ts+28234) 44325 return TCL_ERROR 44326 } 44327 44328 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 44329 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+16) 44330 zDestName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 44331 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))), bp+24) 44332 zSrcName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 44333 44334 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDestName, *(*uintptr)(unsafe.Pointer(bp + 24)), zSrcName) 44335 if !(pBackup != 0) { 44336 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28280, 0)) 44337 return TCL_ERROR 44338 } 44339 44340 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 44341 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44342 }{backupTestCmd})), pBackup, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{backupTestFinish}))) 44343 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 44344 return TCL_OK 44345 } 44346 44347 func Sqlitetestbackup_Init(tls *libc.TLS, interp uintptr) int32 { 44348 tcl.XTcl_CreateObjCommand(tls, interp, ts+28309, *(*uintptr)(unsafe.Pointer(&struct { 44349 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44350 }{backupTestInit})), uintptr(0), uintptr(0)) 44351 return TCL_OK 44352 } 44353 44354 type tcl_vtab1 = struct { 44355 Fbase sqlite3_vtab 44356 Finterp uintptr 44357 FpCmd uintptr 44358 Fdb uintptr 44359 } 44360 44361 type tcl_vtab = tcl_vtab1 44362 type tcl_cursor1 = struct { 44363 Fbase sqlite3_vtab_cursor 44364 FpStmt uintptr 44365 } 44366 44367 type tcl_cursor = tcl_cursor1 44368 44369 func tclDequote(tls *libc.TLS, z uintptr) { 44370 var q uint8 = *(*uint8)(unsafe.Pointer(z)) 44371 44372 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 44373 var iIn int32 = 1 44374 var iOut int32 = 0 44375 if int32(q) == '[' { 44376 q = uint8(']') 44377 } 44378 44379 for *(*uint8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 44380 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 44381 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 44382 iIn++ 44383 break 44384 } else { 44385 iIn = iIn + 2 44386 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 44387 } 44388 } else { 44389 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 44390 } 44391 } 44392 44393 *(*uint8)(unsafe.Pointer(z + uintptr(iOut))) = uint8(0) 44394 } 44395 } 44396 44397 func tclConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 44398 bp := tls.Alloc(8) 44399 defer tls.Free(8) 44400 44401 var interp uintptr = pAux 44402 var pTab uintptr = uintptr(0) 44403 var zCmd uintptr = uintptr(0) 44404 var pScript uintptr = uintptr(0) 44405 var rc int32 = SQLITE_OK 44406 44407 if argc != 4 { 44408 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 44409 return SQLITE_ERROR 44410 } 44411 44412 zCmd = sqlite3.Xsqlite3_malloc64(tls, libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 44413 pTab = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(tcl_vtab{}))) 44414 if zCmd != 0 && pTab != 0 { 44415 libc.Xmemcpy(tls, zCmd, *(*uintptr)(unsafe.Pointer(argv + 3*8)), libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 44416 tclDequote(tls, zCmd) 44417 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(tcl_vtab{}))) 44418 44419 (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd = tcl.XTcl_NewStringObj(tls, zCmd, -1) 44420 (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp = interp 44421 (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb = db 44422 (*Tcl_Obj)(unsafe.Pointer((*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd)).FrefCount++ 44423 44424 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44425 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44426 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27377, -1)) 44427 44428 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44429 if rc != TCL_OK { 44430 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetStringResult(tls, interp))) 44431 rc = SQLITE_ERROR 44432 } else { 44433 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, tcl.XTcl_GetStringResult(tls, interp)) 44434 } 44435 44436 if rc != SQLITE_OK { 44437 sqlite3.Xsqlite3_free(tls, pTab) 44438 pTab = uintptr(0) 44439 } 44440 } else { 44441 rc = SQLITE_NOMEM 44442 } 44443 44444 sqlite3.Xsqlite3_free(tls, zCmd) 44445 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 44446 return rc 44447 } 44448 44449 func tclDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 44450 var pTab uintptr = pVtab 44451 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44452 var _objPtr uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd 44453 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44454 tcl.XTclFreeObj(tls, _objPtr) 44455 } 44456 } 44457 sqlite3.Xsqlite3_free(tls, pTab) 44458 return SQLITE_OK 44459 } 44460 44461 func tclOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 44462 var pCur uintptr 44463 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(tcl_cursor{}))) 44464 if pCur == uintptr(0) { 44465 return SQLITE_NOMEM 44466 } 44467 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(tcl_cursor{}))) 44468 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 44469 return SQLITE_OK 44470 } 44471 44472 func tclClose(tls *libc.TLS, cur uintptr) int32 { 44473 var pCur uintptr = cur 44474 if pCur != 0 { 44475 sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCur)).FpStmt) 44476 sqlite3.Xsqlite3_free(tls, pCur) 44477 } 44478 return SQLITE_OK 44479 } 44480 44481 func tclNext(tls *libc.TLS, pVtabCursor uintptr) int32 { 44482 bp := tls.Alloc(8) 44483 defer tls.Free(8) 44484 44485 var pCsr uintptr = pVtabCursor 44486 if (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt != 0 { 44487 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 44488 var rc int32 = sqlite3.Xsqlite3_step(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 44489 if rc != SQLITE_ROW { 44490 var zErr uintptr 44491 rc = sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 44492 (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 44493 if rc != SQLITE_OK { 44494 zErr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 44495 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 44496 } 44497 } 44498 } 44499 return SQLITE_OK 44500 } 44501 44502 func tclFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 44503 bp := tls.Alloc(56) 44504 defer tls.Free(56) 44505 44506 var pCsr uintptr = pVtabCursor 44507 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 44508 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 44509 var pScript uintptr 44510 var pArg uintptr 44511 var ii int32 44512 var rc int32 44513 44514 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44515 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44516 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27441, -1)) 44517 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewIntObj(tls, idxNum)) 44518 if idxStr != 0 { 44519 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, idxStr, -1)) 44520 } else { 44521 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 44522 } 44523 44524 pArg = tcl.XTcl_NewObj(tls) 44525 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 44526 for ii = 0; ii < argc; ii++ { 44527 var zVal uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8))) 44528 var pVal uintptr 44529 if zVal == uintptr(0) { 44530 pVal = tcl.XTcl_NewObj(tls) 44531 for rc = sqlite3.Xsqlite3_vtab_in_first(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8)), bp+32); rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 32)) != 0; rc = sqlite3.Xsqlite3_vtab_in_next(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8)), bp+32) { 44532 var pVal2 uintptr = uintptr(0) 44533 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 44534 if zVal != 0 { 44535 pVal2 = tcl.XTcl_NewStringObj(tls, zVal, -1) 44536 } else { 44537 pVal2 = tcl.XTcl_NewObj(tls) 44538 } 44539 tcl.XTcl_ListObjAppendElement(tls, interp, pVal, pVal2) 44540 } 44541 } else { 44542 pVal = tcl.XTcl_NewStringObj(tls, zVal, -1) 44543 } 44544 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pVal) 44545 } 44546 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pArg) 44547 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44548 var _objPtr uintptr = pArg 44549 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44550 tcl.XTclFreeObj(tls, _objPtr) 44551 } 44552 } 44553 44554 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44555 if rc != TCL_OK { 44556 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44557 rc = SQLITE_ERROR 44558 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 44559 } else { 44560 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44561 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 44562 44563 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+40, bp+48) 44564 if rc != TCL_OK { 44565 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44566 rc = SQLITE_ERROR 44567 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44568 } else { 44569 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 40)); ii = ii + 2 { 44570 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii)*8))) 44571 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii+1)*8)) 44572 if sqlite3.Xsqlite3_stricmp(tls, ts+1947, zCmd) == 0 { 44573 var zSql uintptr = tcl.XTcl_GetString(tls, p) 44574 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 44575 if rc != SQLITE_OK { 44576 var zErr uintptr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 44577 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+16, zErr)) 44578 } 44579 } else { 44580 rc = SQLITE_ERROR 44581 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+24, zCmd)) 44582 } 44583 } 44584 } 44585 } 44586 44587 if rc == SQLITE_OK { 44588 rc = tclNext(tls, pVtabCursor) 44589 } 44590 return rc 44591 } 44592 44593 func tclColumn(tls *libc.TLS, pVtabCursor uintptr, ctx uintptr, i int32) int32 { 44594 var pCsr uintptr = pVtabCursor 44595 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 44596 return SQLITE_OK 44597 } 44598 44599 func tclRowid(tls *libc.TLS, pVtabCursor uintptr, pRowid uintptr) int32 { 44600 var pCsr uintptr = pVtabCursor 44601 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, 0) 44602 return SQLITE_OK 44603 } 44604 44605 func tclEof(tls *libc.TLS, pVtabCursor uintptr) int32 { 44606 var pCsr uintptr = pVtabCursor 44607 return libc.Bool32((*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 44608 } 44609 44610 func testBestIndexObjConstraints(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 44611 var ii int32 44612 var pRes uintptr = tcl.XTcl_NewObj(tls) 44613 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 44614 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 44615 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 44616 var pElem uintptr = tcl.XTcl_NewObj(tls) 44617 var zOp uintptr = ts + 3405 44618 44619 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 44620 44621 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) { 44622 case SQLITE_INDEX_CONSTRAINT_EQ: 44623 zOp = ts + 28365 44624 break 44625 case SQLITE_INDEX_CONSTRAINT_GT: 44626 zOp = ts + 28368 44627 break 44628 case SQLITE_INDEX_CONSTRAINT_LE: 44629 zOp = ts + 28371 44630 break 44631 case SQLITE_INDEX_CONSTRAINT_LT: 44632 zOp = ts + 28374 44633 break 44634 case SQLITE_INDEX_CONSTRAINT_GE: 44635 zOp = ts + 28377 44636 break 44637 case SQLITE_INDEX_CONSTRAINT_MATCH: 44638 zOp = ts + 28380 44639 break 44640 case SQLITE_INDEX_CONSTRAINT_LIKE: 44641 zOp = ts + 27587 44642 break 44643 case SQLITE_INDEX_CONSTRAINT_GLOB: 44644 zOp = ts + 27592 44645 break 44646 case SQLITE_INDEX_CONSTRAINT_REGEXP: 44647 zOp = ts + 6831 44648 break 44649 case SQLITE_INDEX_CONSTRAINT_NE: 44650 zOp = ts + 28386 44651 break 44652 case SQLITE_INDEX_CONSTRAINT_ISNOT: 44653 zOp = ts + 28389 44654 break 44655 case SQLITE_INDEX_CONSTRAINT_ISNOTNULL: 44656 zOp = ts + 28395 44657 break 44658 case SQLITE_INDEX_CONSTRAINT_ISNULL: 44659 zOp = ts + 28405 44660 break 44661 case SQLITE_INDEX_CONSTRAINT_IS: 44662 zOp = ts + 5851 44663 break 44664 case SQLITE_INDEX_CONSTRAINT_LIMIT: 44665 zOp = ts + 28412 44666 break 44667 case SQLITE_INDEX_CONSTRAINT_OFFSET: 44668 zOp = ts + 28418 44669 break 44670 } 44671 44672 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+6194, -1)) 44673 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, zOp, -1)) 44674 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 44675 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)) 44676 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28432, -1)) 44677 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable))) 44678 44679 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 44680 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44681 var _objPtr uintptr = pElem 44682 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44683 tcl.XTclFreeObj(tls, _objPtr) 44684 } 44685 } 44686 } 44687 44688 tcl.XTcl_SetObjResult(tls, interp, pRes) 44689 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 44690 var _objPtr uintptr = pRes 44691 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44692 tcl.XTclFreeObj(tls, _objPtr) 44693 } 44694 } 44695 } 44696 44697 func testBestIndexObjOrderby(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 44698 var ii int32 44699 var pRes uintptr = tcl.XTcl_NewObj(tls) 44700 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 44701 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; ii++ { 44702 var pOrder uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(ii)*8 44703 var pElem uintptr = tcl.XTcl_NewObj(tls) 44704 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 44705 44706 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 44707 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).FiColumn)) 44708 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28439, -1)) 44709 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).Fdesc))) 44710 44711 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 44712 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44713 var _objPtr uintptr = pElem 44714 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44715 tcl.XTclFreeObj(tls, _objPtr) 44716 } 44717 } 44718 } 44719 44720 tcl.XTcl_SetObjResult(tls, interp, pRes) 44721 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 44722 var _objPtr uintptr = pRes 44723 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44724 tcl.XTclFreeObj(tls, _objPtr) 44725 } 44726 } 44727 } 44728 44729 func testBestIndexObj(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44730 bp := tls.Alloc(80) 44731 defer tls.Free(80) 44732 44733 *(*[7]uintptr)(unsafe.Pointer(bp)) = [7]uintptr{ 44734 ts + 28444, 44735 ts + 28456, 44736 ts + 28464, 44737 ts + 28469, 44738 ts + 28478, 44739 ts + 28481, 44740 uintptr(0), 44741 } 44742 44743 var pIdxInfo uintptr = clientData 44744 44745 if objc < 2 { 44746 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 44747 return TCL_ERROR 44748 } 44749 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+56) != 0 { 44750 return TCL_ERROR 44751 } 44752 44753 if *(*int32)(unsafe.Pointer(bp + 56)) < 4 && objc != 2 { 44754 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 44755 return TCL_ERROR 44756 } 44757 if *(*int32)(unsafe.Pointer(bp + 56)) == 4 && objc != 4 { 44758 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28491) 44759 return TCL_ERROR 44760 } 44761 if *(*int32)(unsafe.Pointer(bp + 56)) == 5 && objc != 3 && objc != 4 { 44762 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28505) 44763 return TCL_ERROR 44764 } 44765 44766 switch *(*int32)(unsafe.Pointer(bp + 56)) { 44767 case 0: 44768 testBestIndexObjConstraints(tls, interp, pIdxInfo) 44769 break 44770 44771 case 1: 44772 testBestIndexObjOrderby(tls, interp, pIdxInfo) 44773 break 44774 44775 case 2: 44776 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 44777 break 44778 44779 case 3: 44780 { 44781 var bDistinct int32 = sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo) 44782 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bDistinct)) 44783 break 44784 44785 } 44786 44787 case 4: 44788 { 44789 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+60) != 0 || 44790 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 44791 return TCL_ERROR 44792 } 44793 tcl.XTcl_SetObjResult(tls, interp, 44794 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_vtab_in(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 60)), *(*int32)(unsafe.Pointer(bp + 64))))) 44795 break 44796 44797 } 44798 44799 case 5: 44800 { 44801 *(*int32)(unsafe.Pointer(bp + 68)) = 0 44802 var rc int32 44803 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 44804 var zVal uintptr = ts + 584 44805 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+68) != 0 { 44806 return TCL_ERROR 44807 } 44808 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 44809 if rc != SQLITE_OK && rc != SQLITE_NOTFOUND { 44810 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 44811 return TCL_ERROR 44812 } 44813 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 44814 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 44815 } else if objc == 4 { 44816 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 44817 } 44818 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zVal, -1)) 44819 break 44820 44821 } 44822 } 44823 44824 return TCL_OK 44825 } 44826 44827 func tclBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 44828 bp := tls.Alloc(108) 44829 defer tls.Free(108) 44830 44831 var pTab uintptr = tab 44832 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 44833 var rc int32 = SQLITE_OK 44834 44835 var pScript uintptr 44836 44837 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44838 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44839 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27495, -1)) 44840 44841 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([24]uint8{})), bp+56, ts+28521, libc.VaList(bp, libc.PostIncInt32(&iNext, 1))) 44842 tcl.XTcl_CreateObjCommand(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(&struct { 44843 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44844 }{testBestIndexObj})), pIdxInfo, uintptr(0)) 44845 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+56, -1)) 44846 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44847 tcl.XTcl_DeleteCommand(tls, interp, bp+56) 44848 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44849 var _objPtr uintptr = pScript 44850 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44851 tcl.XTclFreeObj(tls, _objPtr) 44852 } 44853 } 44854 44855 if rc != TCL_OK { 44856 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44857 rc = SQLITE_ERROR 44858 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44859 } else { 44860 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44861 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 44862 44863 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) 44864 if rc != TCL_OK { 44865 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44866 rc = SQLITE_ERROR 44867 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zErr)) 44868 } else { 44869 var ii int32 44870 var iArgv int32 = 1 44871 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 80)); ii = ii + 2 { 44872 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii)*8))) 44873 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii+1)*8)) 44874 if sqlite3.Xsqlite3_stricmp(tls, ts+28533, zCmd) == 0 { 44875 rc = tcl.XTcl_GetDoubleFromObj(tls, interp, p, pIdxInfo+64) 44876 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28456, zCmd) == 0 { 44877 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+60) 44878 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28538, zCmd) == 0 { 44879 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+40) 44880 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28545, zCmd) == 0 { 44881 sqlite3.Xsqlite3_free(tls, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr) 44882 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+24, tcl.XTcl_GetString(tls, p))) 44883 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 44884 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28552, zCmd) == 0 { 44885 *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) = int64(0) 44886 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, p, bp+96) 44887 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = sqlite3_int64(tRowcnt(*(*Tcl_WideInt)(unsafe.Pointer(bp + 96)))) 44888 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28557, zCmd) == 0 || 44889 sqlite3.Xsqlite3_stricmp(tls, ts+28561, zCmd) == 0 { 44890 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, bp+104) 44891 if rc == SQLITE_OK { 44892 if *(*int32)(unsafe.Pointer(bp + 104)) < 0 || *(*int32)(unsafe.Pointer(bp + 104)) >= (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint { 44893 rc = SQLITE_ERROR 44894 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28566, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 104)))) 44895 } else { 44896 var bOmit int32 = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(zCmd))) == 'o' || int32(*(*uint8)(unsafe.Pointer(zCmd))) == 'O') 44897 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).FargvIndex = libc.PostIncInt32(&iArgv, 1) 44898 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).Fomit = uint8(bOmit) 44899 } 44900 } 44901 } else { 44902 rc = SQLITE_ERROR 44903 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+40, zCmd)) 44904 } 44905 if rc != SQLITE_OK && (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg == uintptr(0) { 44906 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44907 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, zErr)) 44908 } 44909 } 44910 } 44911 } 44912 44913 return rc 44914 } 44915 44916 var iNext int32 = 43 44917 44918 var tclModule = sqlite3_module{ 44919 FxCreate: 0, 44920 FxConnect: 0, 44921 FxBestIndex: 0, 44922 FxDisconnect: 0, 44923 FxDestroy: 0, 44924 FxOpen: 0, 44925 FxClose: 0, 44926 FxFilter: 0, 44927 FxNext: 0, 44928 FxEof: 0, 44929 FxColumn: 0, 44930 FxRowid: 0, 44931 } 44932 44933 func register_tcl_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44934 bp := tls.Alloc(8) 44935 defer tls.Free(8) 44936 44937 if objc != 2 { 44938 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 44939 return TCL_ERROR 44940 } 44941 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 44942 return TCL_ERROR 44943 } 44944 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+28581, uintptr(unsafe.Pointer(&tclModule)), interp) 44945 return TCL_OK 44946 } 44947 44948 func Sqlitetesttcl_Init(tls *libc.TLS, interp uintptr) int32 { 44949 var i int32 44950 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd4))/uint64(unsafe.Sizeof(struct { 44951 FzName uintptr 44952 FxProc uintptr 44953 FclientData uintptr 44954 }{})); i++ { 44955 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd4[i].FzName, 44956 aObjCmd4[i].FxProc, aObjCmd4[i].FclientData, uintptr(0)) 44957 } 44958 return TCL_OK 44959 } 44960 44961 var aObjCmd4 = [1]struct { 44962 FzName uintptr 44963 FxProc uintptr 44964 FclientData uintptr 44965 }{ 44966 {FzName: ts + 28585, FxProc: 0}, 44967 } 44968 44969 func ptrToText(tls *libc.TLS, p uintptr) uintptr { 44970 bp := tls.Alloc(8) 44971 defer tls.Free(8) 44972 44973 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof(buf))-uint64(1)), uintptr(unsafe.Pointer(&buf)), ts+9889, libc.VaList(bp, p)) 44974 return uintptr(unsafe.Pointer(&buf)) 44975 } 44976 44977 var buf [100]uint8 44978 44979 func blobHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 44980 bp := tls.Alloc(8) 44981 defer tls.Free(8) 44982 44983 var z uintptr 44984 44985 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 44986 if *(*int32)(unsafe.Pointer(bp)) == 0 { 44987 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 44988 } else if *(*int32)(unsafe.Pointer(bp)) > 9 && 0 == libc.Xmemcmp(tls, ts+28605, z, uint64(9)) { 44989 var channel Tcl_Channel 44990 var instanceData ClientData 44991 44992 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 44993 if !(channel != 0) { 44994 return TCL_ERROR 44995 } 44996 44997 tcl.XTcl_Flush(tls, channel) 44998 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 44999 45000 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 45001 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 45002 } else { 45003 *(*uintptr)(unsafe.Pointer(ppBlob)) = sqlite3TestTextToPtr(tls, z) 45004 } 45005 45006 return TCL_OK 45007 } 45008 45009 func blobStringFromObj(tls *libc.TLS, pObj uintptr) uintptr { 45010 bp := tls.Alloc(4) 45011 defer tls.Free(4) 45012 45013 var z uintptr 45014 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 45015 return func() uintptr { 45016 if *(*int32)(unsafe.Pointer(bp)) != 0 { 45017 return z 45018 } 45019 return uintptr(0) 45020 }() 45021 } 45022 45023 func test_blob_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45024 bp := tls.Alloc(40) 45025 defer tls.Free(40) 45026 45027 var zDb uintptr 45028 var zTable uintptr 45029 var zColumn uintptr 45030 45031 var zVarname uintptr 45032 45033 *(*uintptr)(unsafe.Pointer(bp + 32)) = bp 45034 var rc int32 45035 45036 if objc != 8 { 45037 var zUsage uintptr = ts + 28615 45038 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zUsage) 45039 return TCL_ERROR 45040 } 45041 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 45042 return TCL_ERROR 45043 } 45044 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 45045 zTable = blobStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 45046 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 45047 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+16) != 0 { 45048 return TCL_ERROR 45049 } 45050 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp) != 0 { 45051 return TCL_ERROR 45052 } 45053 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 7*8)), bp+24) 45054 45055 if *(*int32)(unsafe.Pointer(bp + 24)) > 0 { 45056 rc = sqlite3.Xsqlite3_blob_open(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, zTable, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp)), bp+32) 45057 tcl.XTcl_SetVar2(tls, interp, zVarname, uintptr(0), ptrToText(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0) 45058 } else { 45059 rc = sqlite3.Xsqlite3_blob_open(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, zTable, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp)), uintptr(0)) 45060 } 45061 45062 if rc == SQLITE_OK { 45063 tcl.XTcl_ResetResult(tls, interp) 45064 } else { 45065 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45066 return TCL_ERROR 45067 } 45068 return TCL_OK 45069 } 45070 45071 func test_blob_close(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45072 bp := tls.Alloc(8) 45073 defer tls.Free(8) 45074 45075 var rc int32 45076 45077 if objc != 2 { 45078 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 45079 return TCL_ERROR 45080 } 45081 45082 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 45083 return TCL_ERROR 45084 } 45085 rc = sqlite3.Xsqlite3_blob_close(tls, *(*uintptr)(unsafe.Pointer(bp))) 45086 45087 if rc != 0 { 45088 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45089 } else { 45090 tcl.XTcl_ResetResult(tls, interp) 45091 } 45092 return TCL_OK 45093 } 45094 45095 func test_blob_bytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45096 bp := tls.Alloc(8) 45097 defer tls.Free(8) 45098 45099 var nByte int32 45100 45101 if objc != 2 { 45102 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 45103 return TCL_ERROR 45104 } 45105 45106 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 45107 return TCL_ERROR 45108 } 45109 nByte = sqlite3.Xsqlite3_blob_bytes(tls, *(*uintptr)(unsafe.Pointer(bp))) 45110 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nByte)) 45111 45112 return TCL_OK 45113 } 45114 45115 func test_blob_read(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45116 bp := tls.Alloc(32) 45117 defer tls.Free(32) 45118 45119 var zBuf uintptr = uintptr(0) 45120 var rc int32 45121 45122 if objc != 4 { 45123 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28667) 45124 return TCL_ERROR 45125 } 45126 45127 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 45128 return TCL_ERROR 45129 } 45130 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) || 45131 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) { 45132 return TCL_ERROR 45133 } 45134 45135 if *(*int32)(unsafe.Pointer(bp + 28)) > 0 { 45136 zBuf = tcl.XTcl_AttemptAlloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 45137 if zBuf == uintptr(0) { 45138 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28684, 0)) 45139 return TCL_ERROR 45140 } 45141 } 45142 rc = sqlite3.Xsqlite3_blob_read(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zBuf, *(*int32)(unsafe.Pointer(bp + 28)), *(*int32)(unsafe.Pointer(bp + 24))) 45143 if rc == SQLITE_OK { 45144 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zBuf, *(*int32)(unsafe.Pointer(bp + 28)))) 45145 } else { 45146 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45147 } 45148 tcl.XTcl_Free(tls, zBuf) 45149 45150 return func() int32 { 45151 if rc == SQLITE_OK { 45152 return TCL_OK 45153 } 45154 return TCL_ERROR 45155 }() 45156 } 45157 45158 func test_blob_write(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45159 bp := tls.Alloc(16) 45160 defer tls.Free(16) 45161 45162 var rc int32 45163 var zBuf uintptr 45164 45165 if objc != 4 && objc != 5 { 45166 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28745) 45167 return TCL_ERROR 45168 } 45169 45170 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 45171 return TCL_ERROR 45172 } 45173 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) { 45174 return TCL_ERROR 45175 } 45176 45177 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) 45178 if objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+12) != 0 { 45179 return TCL_ERROR 45180 } 45181 rc = sqlite3.Xsqlite3_blob_write(tls, *(*uintptr)(unsafe.Pointer(bp)), zBuf, *(*int32)(unsafe.Pointer(bp + 12)), *(*int32)(unsafe.Pointer(bp + 8))) 45182 if rc != SQLITE_OK { 45183 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45184 } 45185 45186 return func() int32 { 45187 if rc == SQLITE_OK { 45188 return TCL_OK 45189 } 45190 return TCL_ERROR 45191 }() 45192 } 45193 45194 func Sqlitetest_blob_Init(tls *libc.TLS, interp uintptr) int32 { 45195 var i int32 45196 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd5))/uint64(unsafe.Sizeof(struct { 45197 FzName uintptr 45198 FxProc uintptr 45199 }{})); i++ { 45200 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd5[i].FzName, aObjCmd5[i].FxProc, uintptr(0), uintptr(0)) 45201 } 45202 return TCL_OK 45203 } 45204 45205 var aObjCmd5 = [5]struct { 45206 FzName uintptr 45207 FxProc uintptr 45208 }{ 45209 {FzName: ts + 28772, FxProc: 0}, 45210 {FzName: ts + 28790, FxProc: 0}, 45211 {FzName: ts + 28809, FxProc: 0}, 45212 {FzName: ts + 28828, FxProc: 0}, 45213 {FzName: ts + 28846, FxProc: 0}, 45214 } 45215 45216 func sqlite3BtreeSharedCacheReport(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 45217 var pBt uintptr 45218 var pRet uintptr = tcl.XTcl_NewObj(tls) 45219 for pBt = sqlite3.Xsqlite3SharedCacheList; pBt != 0; pBt = (*BtShared)(unsafe.Pointer(pBt)).FpNext { 45220 var zFile uintptr = sqlite3.Xsqlite3PagerFilename(tls, (*BtShared)(unsafe.Pointer(pBt)).FpPager, 1) 45221 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, zFile, -1)) 45222 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, (*BtShared)(unsafe.Pointer(pBt)).FnRef)) 45223 } 45224 tcl.XTcl_SetObjResult(tls, interp, pRet) 45225 return TCL_OK 45226 } 45227 45228 func sqlite3BtreeCursorList(tls *libc.TLS, p uintptr) { 45229 } 45230 45231 func set_options(tls *libc.TLS, interp uintptr) { 45232 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28880, ts+28899, 45233 TCL_GLOBAL_ONLY) 45234 45235 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28901, ts+14193, TCL_GLOBAL_ONLY) 45236 45237 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28909, ts+14193, TCL_GLOBAL_ONLY) 45238 45239 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28927, ts+28940, TCL_GLOBAL_ONLY) 45240 45241 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28944, ts+28899, TCL_GLOBAL_ONLY) 45242 45243 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28951, ts+14193, TCL_GLOBAL_ONLY) 45244 45245 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28963, ts+14193, TCL_GLOBAL_ONLY) 45246 45247 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28969, ts+14193, TCL_GLOBAL_ONLY) 45248 45249 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28991, ts+14193, TCL_GLOBAL_ONLY) 45250 45251 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29003, ts+28899, TCL_GLOBAL_ONLY) 45252 45253 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29011, ts+28899, TCL_GLOBAL_ONLY) 45254 45255 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29015, ts+28899, TCL_GLOBAL_ONLY) 45256 45257 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29040, ts+28899, TCL_GLOBAL_ONLY) 45258 45259 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29045, 45260 ts+29060, TCL_GLOBAL_ONLY) 45261 45262 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29062, ts+14193, TCL_GLOBAL_ONLY) 45263 45264 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29071, ts+14193, TCL_GLOBAL_ONLY) 45265 45266 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29081, ts+14193, TCL_GLOBAL_ONLY) 45267 45268 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29093, ts+14193, TCL_GLOBAL_ONLY) 45269 45270 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13460, ts+28899, TCL_GLOBAL_ONLY) 45271 45272 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29107, ts+28899, TCL_GLOBAL_ONLY) 45273 45274 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29115, ts+14193, TCL_GLOBAL_ONLY) 45275 45276 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29120, ts+14193, TCL_GLOBAL_ONLY) 45277 45278 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29125, ts+28899, TCL_GLOBAL_ONLY) 45279 45280 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13580, ts+28899, TCL_GLOBAL_ONLY) 45281 45282 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29141, ts+28899, TCL_GLOBAL_ONLY) 45283 45284 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29150, ts+28899, TCL_GLOBAL_ONLY) 45285 45286 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29156, ts+28899, TCL_GLOBAL_ONLY) 45287 45288 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29167, ts+28899, TCL_GLOBAL_ONLY) 45289 45290 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+1957, ts+28899, TCL_GLOBAL_ONLY) 45291 45292 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29178, ts+14193, TCL_GLOBAL_ONLY) 45293 45294 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29188, ts+14193, TCL_GLOBAL_ONLY) 45295 45296 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29200, ts+28899, TCL_GLOBAL_ONLY) 45297 45298 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29208, ts+28899, TCL_GLOBAL_ONLY) 45299 45300 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29214, ts+14193, TCL_GLOBAL_ONLY) 45301 45302 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29224, ts+14193, TCL_GLOBAL_ONLY) 45303 45304 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10121, ts+28899, TCL_GLOBAL_ONLY) 45305 45306 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29241, ts+28899, TCL_GLOBAL_ONLY) 45307 45308 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29246, ts+28899, TCL_GLOBAL_ONLY) 45309 45310 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13044, ts+28899, TCL_GLOBAL_ONLY) 45311 45312 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29254, ts+28899, TCL_GLOBAL_ONLY) 45313 45314 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29264, ts+28899, TCL_GLOBAL_ONLY) 45315 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29275, 45316 ts+14193, TCL_GLOBAL_ONLY) 45317 45318 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29294, ts+28899, TCL_GLOBAL_ONLY) 45319 45320 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29306, ts+28899, TCL_GLOBAL_ONLY) 45321 45322 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29319, ts+28899, TCL_GLOBAL_ONLY) 45323 45324 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29327, ts+28899, TCL_GLOBAL_ONLY) 45325 45326 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29332, ts+28899, TCL_GLOBAL_ONLY) 45327 45328 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29338, ts+28899, TCL_GLOBAL_ONLY) 45329 45330 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29342, ts+28899, TCL_GLOBAL_ONLY) 45331 45332 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29357, ts+14193, 45333 TCL_GLOBAL_ONLY) 45334 45335 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29377, ts+28899, TCL_GLOBAL_ONLY) 45336 45337 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13439, ts+28899, TCL_GLOBAL_ONLY) 45338 45339 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29397, ts+28899, TCL_GLOBAL_ONLY) 45340 45341 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29406, ts+28899, TCL_GLOBAL_ONLY) 45342 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29415, ts+28899, TCL_GLOBAL_ONLY) 45343 45344 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29425, ts+28899, TCL_GLOBAL_ONLY) 45345 45346 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29434, ts+28899, TCL_GLOBAL_ONLY) 45347 45348 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29443, ts+28899, TCL_GLOBAL_ONLY) 45349 45350 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29454, ts+28899, TCL_GLOBAL_ONLY) 45351 45352 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+4974, ts+28899, TCL_GLOBAL_ONLY) 45353 45354 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29461, ts+28899, TCL_GLOBAL_ONLY) 45355 45356 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29475, ts+28899, TCL_GLOBAL_ONLY) 45357 45358 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29486, ts+14193, TCL_GLOBAL_ONLY) 45359 45360 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29491, ts+14193, TCL_GLOBAL_ONLY) 45361 45362 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29496, ts+14193, TCL_GLOBAL_ONLY) 45363 45364 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29501, ts+28899, TCL_GLOBAL_ONLY) 45365 45366 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29506, ts+14193, TCL_GLOBAL_ONLY) 45367 45368 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29519, ts+28899, TCL_GLOBAL_ONLY) 45369 45370 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29533, ts+28899, TCL_GLOBAL_ONLY) 45371 45372 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29542, ts+14193, TCL_GLOBAL_ONLY) 45373 45374 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29546, ts+14193, TCL_GLOBAL_ONLY) 45375 45376 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10868, ts+28899, TCL_GLOBAL_ONLY) 45377 45378 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29561, ts+28899, TCL_GLOBAL_ONLY) 45379 45380 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29573, ts+14193, TCL_GLOBAL_ONLY) 45381 45382 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29586, ts+28899, TCL_GLOBAL_ONLY) 45383 45384 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29595, ts+14193, TCL_GLOBAL_ONLY) 45385 45386 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29604, ts+28899, TCL_GLOBAL_ONLY) 45387 45388 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29614, ts+28899, TCL_GLOBAL_ONLY) 45389 45390 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29624, 45391 func() uintptr { 45392 if uint64(unsafe.Sizeof(float64(0))) > uint64(unsafe.Sizeof(float64(0))) { 45393 return ts + 28899 45394 } 45395 return ts + 14193 45396 }(), 45397 TCL_GLOBAL_ONLY) 45398 45399 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29636, ts+28899, TCL_GLOBAL_ONLY) 45400 45401 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29645, ts+28899, TCL_GLOBAL_ONLY) 45402 45403 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29658, ts+28899, TCL_GLOBAL_ONLY) 45404 45405 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29668, ts+14193, TCL_GLOBAL_ONLY) 45406 45407 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29678, ts+28899, TCL_GLOBAL_ONLY) 45408 45409 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29685, ts+28899, TCL_GLOBAL_ONLY) 45410 45411 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29689, ts+28899, TCL_GLOBAL_ONLY) 45412 45413 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29703, ts+28899, TCL_GLOBAL_ONLY) 45414 45415 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+9564, ts+28899, TCL_GLOBAL_ONLY) 45416 45417 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29710, ts+28899, TCL_GLOBAL_ONLY) 45418 45419 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29718, ts+28899, TCL_GLOBAL_ONLY) 45420 45421 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29724, ts+14193, TCL_GLOBAL_ONLY) 45422 45423 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29739, ts+28899, TCL_GLOBAL_ONLY) 45424 45425 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29754, ts+28899, TCL_GLOBAL_ONLY) 45426 45427 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29769, ts+28899, TCL_GLOBAL_ONLY) 45428 45429 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+18810, ts+28899, TCL_GLOBAL_ONLY) 45430 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29777, ts+28899, TCL_GLOBAL_ONLY) 45431 45432 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29786, ts+14193, TCL_GLOBAL_ONLY) 45433 45434 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29797, ts+14193, TCL_GLOBAL_ONLY) 45435 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29816, ts+14193, TCL_GLOBAL_ONLY) 45436 45437 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29837, ts+28899, TCL_GLOBAL_ONLY) 45438 45439 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29850, ts+28899, TCL_GLOBAL_ONLY) 45440 45441 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29859, ts+28899, TCL_GLOBAL_ONLY) 45442 45443 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29866, 45444 func() uintptr { 45445 if 1 != 0 { 45446 return ts + 28899 45447 } 45448 return ts + 14193 45449 }(), TCL_GLOBAL_ONLY) 45450 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29877, 45451 func() uintptr { 45452 if SQLITE_THREADSAFE == 1 { 45453 return ts + 28899 45454 } 45455 return ts + 14193 45456 }(), TCL_GLOBAL_ONLY) 45457 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29889, 45458 func() uintptr { 45459 if SQLITE_THREADSAFE == 2 { 45460 return ts + 28899 45461 } 45462 return ts + 14193 45463 }(), TCL_GLOBAL_ONLY) 45464 45465 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29901, ts+28899, TCL_GLOBAL_ONLY) 45466 45467 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13665, ts+28899, TCL_GLOBAL_ONLY) 45468 45469 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29908, ts+28899, TCL_GLOBAL_ONLY) 45470 45471 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29916, ts+28899, TCL_GLOBAL_ONLY) 45472 45473 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+15733, ts+28899, TCL_GLOBAL_ONLY) 45474 45475 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29929, ts+28899, TCL_GLOBAL_ONLY) 45476 45477 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29936, ts+28899, TCL_GLOBAL_ONLY) 45478 45479 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29941, ts+28899, TCL_GLOBAL_ONLY) 45480 45481 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29946, ts+28899, TCL_GLOBAL_ONLY) 45482 45483 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29950, ts+28899, TCL_GLOBAL_ONLY) 45484 45485 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29954, ts+14193, TCL_GLOBAL_ONLY) 45486 45487 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13692, ts+28899, TCL_GLOBAL_ONLY) 45488 45489 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29974, ts+14193, TCL_GLOBAL_ONLY) 45490 45491 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29993, ts+14193, TCL_GLOBAL_ONLY) 45492 45493 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30007, ts+14193, TCL_GLOBAL_ONLY) 45494 45495 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30016, ts+14193, TCL_GLOBAL_ONLY) 45496 45497 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30040, ts+14193, TCL_GLOBAL_ONLY) 45498 45499 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30061, ts+14193, TCL_GLOBAL_ONLY) 45500 45501 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30068, ts+14193, TCL_GLOBAL_ONLY) 45502 45503 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30081, ts+14193, TCL_GLOBAL_ONLY) 45504 45505 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30091, ts+28899, TCL_GLOBAL_ONLY) 45506 45507 { 45508 tcl.XTcl_LinkVar(tls, interp, ts+30102, uintptr(unsafe.Pointer(&cv_MAX_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45509 } 45510 45511 { 45512 tcl.XTcl_LinkVar(tls, interp, ts+30120, uintptr(unsafe.Pointer(&cv_MAX_COLUMN)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45513 } 45514 45515 { 45516 tcl.XTcl_LinkVar(tls, interp, ts+30138, uintptr(unsafe.Pointer(&cv_MAX_SQL_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45517 } 45518 45519 { 45520 tcl.XTcl_LinkVar(tls, interp, ts+30160, uintptr(unsafe.Pointer(&cv_MAX_EXPR_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45521 } 45522 45523 { 45524 tcl.XTcl_LinkVar(tls, interp, ts+30182, uintptr(unsafe.Pointer(&cv_MAX_COMPOUND_SELECT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45525 } 45526 45527 { 45528 tcl.XTcl_LinkVar(tls, interp, ts+30209, uintptr(unsafe.Pointer(&cv_MAX_VDBE_OP)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45529 } 45530 45531 { 45532 tcl.XTcl_LinkVar(tls, interp, ts+30228, uintptr(unsafe.Pointer(&cv_MAX_FUNCTION_ARG)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45533 } 45534 45535 { 45536 tcl.XTcl_LinkVar(tls, interp, ts+30252, uintptr(unsafe.Pointer(&cv_MAX_VARIABLE_NUMBER)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45537 } 45538 45539 { 45540 tcl.XTcl_LinkVar(tls, interp, ts+30279, uintptr(unsafe.Pointer(&cv_MAX_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45541 } 45542 45543 { 45544 tcl.XTcl_LinkVar(tls, interp, ts+30300, uintptr(unsafe.Pointer(&cv_MAX_PAGE_COUNT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45545 } 45546 45547 { 45548 tcl.XTcl_LinkVar(tls, interp, ts+30322, uintptr(unsafe.Pointer(&cv_MAX_LIKE_PATTERN_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45549 } 45550 45551 { 45552 tcl.XTcl_LinkVar(tls, interp, ts+30353, uintptr(unsafe.Pointer(&cv_MAX_TRIGGER_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45553 } 45554 45555 { 45556 tcl.XTcl_LinkVar(tls, interp, ts+30378, uintptr(unsafe.Pointer(&cv_DEFAULT_CACHE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45557 } 45558 45559 { 45560 tcl.XTcl_LinkVar(tls, interp, ts+30404, uintptr(unsafe.Pointer(&cv_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45561 } 45562 45563 { 45564 tcl.XTcl_LinkVar(tls, interp, ts+30429, uintptr(unsafe.Pointer(&cv_DEFAULT_FILE_FORMAT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45565 } 45566 45567 { 45568 tcl.XTcl_LinkVar(tls, interp, ts+30456, uintptr(unsafe.Pointer(&cv_DEFAULT_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45569 } 45570 45571 { 45572 tcl.XTcl_LinkVar(tls, interp, ts+30483, uintptr(unsafe.Pointer(&cv_DEFAULT_WAL_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45573 } 45574 45575 { 45576 tcl.XTcl_LinkVar(tls, interp, ts+30514, uintptr(unsafe.Pointer(&cv_MAX_ATTACHED)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45577 } 45578 45579 { 45580 tcl.XTcl_LinkVar(tls, interp, ts+30534, uintptr(unsafe.Pointer(&cv_MAX_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45581 } 45582 45583 { 45584 tcl.XTcl_LinkVar(tls, interp, ts+30563, uintptr(unsafe.Pointer(&cv_MAX_WORKER_THREADS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45585 } 45586 45587 { 45588 tcl.XTcl_LinkVar(tls, interp, ts+30589, uintptr(unsafe.Pointer(&cv_TEMP_STORE)), 45589 TCL_LINK_INT|TCL_LINK_READ_ONLY) 45590 45591 } 45592 45593 { 45594 tcl.XTcl_LinkVar(tls, interp, ts+30600, uintptr(unsafe.Pointer(&cv___GNUC__)), 45595 TCL_LINK_INT|TCL_LINK_READ_ONLY) 45596 45597 } 45598 } 45599 45600 var cv_MAX_LENGTH int32 = SQLITE_MAX_LENGTH 45601 var cv_MAX_COLUMN int32 = SQLITE_MAX_COLUMN 45602 var cv_MAX_SQL_LENGTH int32 = SQLITE_MAX_SQL_LENGTH 45603 var cv_MAX_EXPR_DEPTH int32 = SQLITE_MAX_EXPR_DEPTH 45604 var cv_MAX_COMPOUND_SELECT int32 = SQLITE_MAX_COMPOUND_SELECT 45605 var cv_MAX_VDBE_OP int32 = SQLITE_MAX_VDBE_OP 45606 var cv_MAX_FUNCTION_ARG int32 = SQLITE_MAX_FUNCTION_ARG 45607 var cv_MAX_VARIABLE_NUMBER int32 = SQLITE_MAX_VARIABLE_NUMBER 45608 var cv_MAX_PAGE_SIZE int32 = SQLITE_MAX_PAGE_SIZE 45609 var cv_MAX_PAGE_COUNT int32 = SQLITE_MAX_PAGE_COUNT 45610 var cv_MAX_LIKE_PATTERN_LENGTH int32 = SQLITE_MAX_LIKE_PATTERN_LENGTH 45611 var cv_MAX_TRIGGER_DEPTH int32 = SQLITE_MAX_TRIGGER_DEPTH 45612 var cv_DEFAULT_CACHE_SIZE int32 = -2000 45613 var cv_DEFAULT_PAGE_SIZE int32 = SQLITE_DEFAULT_PAGE_SIZE 45614 var cv_DEFAULT_FILE_FORMAT int32 = SQLITE_DEFAULT_FILE_FORMAT 45615 var cv_DEFAULT_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 45616 var cv_DEFAULT_WAL_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 45617 var cv_MAX_ATTACHED int32 = SQLITE_MAX_ATTACHED 45618 var cv_MAX_DEFAULT_PAGE_SIZE int32 = SQLITE_MAX_DEFAULT_PAGE_SIZE 45619 var cv_MAX_WORKER_THREADS int32 = SQLITE_MAX_WORKER_THREADS 45620 var cv_TEMP_STORE int32 = SQLITE_TEMP_STORE 45621 var cv___GNUC__ int32 = 1 45622 45623 func Sqliteconfig_Init(tls *libc.TLS, interp uintptr) int32 { 45624 set_options(tls, interp) 45625 return TCL_OK 45626 } 45627 45628 func sqlite3Delete83Name(tls *libc.TLS, z uintptr) { 45629 var i int32 45630 var sz int32 45631 sz = int32(libc.Xstrlen(tls, z)) 45632 for i = sz - 1; i > 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '.'; i-- { 45633 } 45634 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' && sz > i+4 { 45635 libc.Xmemmove(tls, z+uintptr(i+1), z+uintptr(sz-3), uint64(4)) 45636 } 45637 } 45638 45639 func sqlite3DeleteUnlinkIfExists(tls *libc.TLS, pVfs uintptr, zFile uintptr, pbExists uintptr) int32 { 45640 var rc int32 = SQLITE_ERROR 45641 45642 rc = libc.Xaccess(tls, zFile, F_OK) 45643 if rc != 0 { 45644 if *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) == ENOENT { 45645 if pbExists != 0 { 45646 *(*int32)(unsafe.Pointer(pbExists)) = 0 45647 } 45648 rc = SQLITE_OK 45649 } 45650 } else { 45651 if pbExists != 0 { 45652 *(*int32)(unsafe.Pointer(pbExists)) = 1 45653 } 45654 rc = libc.Xunlink(tls, zFile) 45655 } 45656 return rc 45657 } 45658 45659 func sqlite3_delete_database(tls *libc.TLS, zFile uintptr) int32 { 45660 bp := tls.Alloc(156) 45661 defer tls.Free(156) 45662 45663 var zBuf uintptr 45664 var nBuf int32 45665 var rc int32 = 0 45666 var i int32 45667 45668 *(*[4]uintptr)(unsafe.Pointer(bp + 24)) = [4]uintptr{ts, ts + 30609, ts + 30620, ts + 30627} 45669 45670 *(*[6]MFile)(unsafe.Pointer(bp + 56)) = [6]MFile{ 45671 {FzFmt: ts + 30634}, 45672 {FzFmt: ts + 30641}, 45673 {FzFmt: ts + 30656}, 45674 {FzFmt: ts + 30634, Fb83: 1}, 45675 {FzFmt: ts + 30641, FiOffset: SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET, Fb83: 1}, 45676 {FzFmt: ts + 30656, FiOffset: SQLITE_MULTIPLEX_WAL_8_3_OFFSET, Fb83: 1}, 45677 } 45678 45679 var pVfs uintptr = uintptr(0) 45680 45681 nBuf = int32(libc.Xstrlen(tls, zFile)) + 100 45682 zBuf = sqlite3.Xsqlite3_malloc(tls, nBuf) 45683 if zBuf == uintptr(0) { 45684 return SQLITE_NOMEM 45685 } 45686 45687 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([4]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 45688 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, *(*uintptr)(unsafe.Pointer(bp + 24 + uintptr(i)*8)), libc.VaList(bp, zFile)) 45689 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 45690 if rc == 0 && i != 0 { 45691 sqlite3Delete83Name(tls, zBuf) 45692 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 45693 } 45694 } 45695 45696 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([6]MFile{}))/uint64(unsafe.Sizeof(MFile{})); i++ { 45697 var p uintptr = bp + 56 + uintptr(i)*16 45698 var iChunk int32 45699 for iChunk = 1; iChunk <= MX_CHUNK_NUMBER; iChunk++ { 45700 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, (*MFile)(unsafe.Pointer(p)).FzFmt, libc.VaList(bp+8, zFile, iChunk+(*MFile)(unsafe.Pointer(p)).FiOffset)) 45701 if (*MFile)(unsafe.Pointer(p)).Fb83 != 0 { 45702 sqlite3Delete83Name(tls, zBuf) 45703 } 45704 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, bp+152) 45705 if *(*int32)(unsafe.Pointer(bp + 152)) == 0 || rc != 0 { 45706 break 45707 } 45708 } 45709 } 45710 45711 sqlite3.Xsqlite3_free(tls, zBuf) 45712 return func() int32 { 45713 if rc != 0 { 45714 return SQLITE_ERROR 45715 } 45716 return SQLITE_OK 45717 }() 45718 } 45719 45720 type MFile = struct { 45721 FzFmt uintptr 45722 FiOffset int32 45723 Fb83 int32 45724 } 45725 45726 func Sqlitetest_demovfs_Init(tls *libc.TLS, interp uintptr) int32 { 45727 return TCL_OK 45728 } 45729 45730 type devsym_file1 = struct { 45731 Fbase sqlite3_file 45732 FpReal uintptr 45733 } 45734 45735 type devsym_file = devsym_file1 45736 45737 type DevsymGlobal = struct { 45738 FpVfs uintptr 45739 FiDeviceChar int32 45740 FiSectorSize int32 45741 FnWriteCrash int32 45742 F__ccgo_pad1 [4]byte 45743 } 45744 45745 var g1 = DevsymGlobal{FiSectorSize: 512} 45746 45747 func devsymClose(tls *libc.TLS, pFile uintptr) int32 { 45748 var p uintptr = pFile 45749 sqlite3.Xsqlite3OsClose(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45750 return SQLITE_OK 45751 } 45752 45753 func devsymRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45754 var p uintptr = pFile 45755 return sqlite3.Xsqlite3OsRead(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45756 } 45757 45758 func devsymWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45759 var p uintptr = pFile 45760 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45761 } 45762 45763 func devsymTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 45764 var p uintptr = pFile 45765 return sqlite3.Xsqlite3OsTruncate(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, size) 45766 } 45767 45768 func devsymSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 45769 var p uintptr = pFile 45770 return sqlite3.Xsqlite3OsSync(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags) 45771 } 45772 45773 func devsymFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 45774 var p uintptr = pFile 45775 return sqlite3.Xsqlite3OsFileSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pSize) 45776 } 45777 45778 func devsymLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 45779 var p uintptr = pFile 45780 return sqlite3.Xsqlite3OsLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 45781 } 45782 45783 func devsymUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 45784 var p uintptr = pFile 45785 return sqlite3.Xsqlite3OsUnlock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 45786 } 45787 45788 func devsymCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 45789 var p uintptr = pFile 45790 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pResOut) 45791 } 45792 45793 func devsymFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 45794 var p uintptr = pFile 45795 return sqlite3.Xsqlite3OsFileControl(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, op, pArg) 45796 } 45797 45798 func devsymSectorSize(tls *libc.TLS, pFile uintptr) int32 { 45799 return g1.FiSectorSize 45800 } 45801 45802 func devsymDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 45803 return g1.FiDeviceChar 45804 } 45805 45806 func devsymShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 45807 var p uintptr = pFile 45808 return (*struct { 45809 f func(*libc.TLS, uintptr, int32, int32, int32) int32 45810 })(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) 45811 } 45812 45813 func devsymShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 45814 var p uintptr = pFile 45815 return (*struct { 45816 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 45817 })(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) 45818 } 45819 45820 func devsymShmBarrier(tls *libc.TLS, pFile uintptr) { 45821 var p uintptr = pFile 45822 (*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) 45823 } 45824 45825 func devsymShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 45826 var p uintptr = pFile 45827 return (*struct { 45828 f func(*libc.TLS, uintptr, int32) int32 45829 })(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) 45830 } 45831 45832 func devsymOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45833 var rc int32 45834 var p uintptr = pFile 45835 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 45836 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45837 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45838 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&devsym_io_methods)) 45839 } 45840 return rc 45841 } 45842 45843 var devsym_io_methods = sqlite3_io_methods{ 45844 FiVersion: 2, 45845 FxClose: 0, 45846 FxRead: 0, 45847 FxWrite: 0, 45848 FxTruncate: 0, 45849 FxSync: 0, 45850 FxFileSize: 0, 45851 FxLock: 0, 45852 FxUnlock: 0, 45853 FxCheckReservedLock: 0, 45854 FxFileControl: 0, 45855 FxSectorSize: 0, 45856 FxDeviceCharacteristics: 0, 45857 FxShmMap: 0, 45858 FxShmLock: 0, 45859 FxShmBarrier: 0, 45860 FxShmUnmap: 0, 45861 } 45862 45863 func devsymDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 45864 return sqlite3.Xsqlite3OsDelete(tls, g1.FpVfs, zPath, dirSync) 45865 } 45866 45867 func devsymAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 45868 return sqlite3.Xsqlite3OsAccess(tls, g1.FpVfs, zPath, flags, pResOut) 45869 } 45870 45871 func devsymFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 45872 return sqlite3.Xsqlite3OsFullPathname(tls, g1.FpVfs, zPath, nOut, zOut) 45873 } 45874 45875 func devsymRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 45876 return sqlite3.Xsqlite3OsRandomness(tls, g1.FpVfs, nByte, zBufOut) 45877 } 45878 45879 func devsymSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 45880 return sqlite3.Xsqlite3OsSleep(tls, g1.FpVfs, nMicro) 45881 } 45882 45883 func devsymCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 45884 return (*struct { 45885 f func(*libc.TLS, uintptr, uintptr) int32 45886 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FxCurrentTime})).f(tls, g1.FpVfs, pTimeOut) 45887 } 45888 45889 func writecrashSectorSize(tls *libc.TLS, pFile uintptr) int32 { 45890 var p uintptr = pFile 45891 return sqlite3.Xsqlite3OsSectorSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45892 } 45893 45894 func writecrashDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 45895 var p uintptr = pFile 45896 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 45897 } 45898 45899 func writecrashWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 45900 var p uintptr = pFile 45901 if g1.FnWriteCrash > 0 { 45902 g1.FnWriteCrash-- 45903 if g1.FnWriteCrash == 0 { 45904 libc.Xabort(tls) 45905 } 45906 } 45907 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 45908 } 45909 45910 func writecrashOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 45911 var rc int32 45912 var p uintptr = pFile 45913 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 45914 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 45915 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 45916 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&writecrash_io_methods)) 45917 } 45918 return rc 45919 } 45920 45921 var writecrash_io_methods = sqlite3_io_methods{ 45922 FiVersion: 2, 45923 FxClose: 0, 45924 FxRead: 0, 45925 FxWrite: 0, 45926 FxTruncate: 0, 45927 FxSync: 0, 45928 FxFileSize: 0, 45929 FxLock: 0, 45930 FxUnlock: 0, 45931 FxCheckReservedLock: 0, 45932 FxFileControl: 0, 45933 FxSectorSize: 0, 45934 FxDeviceCharacteristics: 0, 45935 FxShmMap: 0, 45936 FxShmLock: 0, 45937 FxShmBarrier: 0, 45938 FxShmUnmap: 0, 45939 } 45940 45941 var devsym_vfs = sqlite3_vfs{ 45942 FiVersion: 2, 45943 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45944 FmxPathname: DEVSYM_MAX_PATHNAME, 45945 FzName: ts + 30667, 45946 FxOpen: 0, 45947 FxDelete: 0, 45948 FxAccess: 0, 45949 FxFullPathname: 0, 45950 FxRandomness: 0, 45951 FxSleep: 0, 45952 FxCurrentTime: 0, 45953 } 45954 45955 var writecrash_vfs = sqlite3_vfs{ 45956 FiVersion: 2, 45957 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 45958 FmxPathname: DEVSYM_MAX_PATHNAME, 45959 FzName: ts + 30674, 45960 FxOpen: 0, 45961 FxDelete: 0, 45962 FxAccess: 0, 45963 FxFullPathname: 0, 45964 FxRandomness: 0, 45965 FxSleep: 0, 45966 FxCurrentTime: 0, 45967 } 45968 45969 func devsym_register(tls *libc.TLS, iDeviceChar int32, iSectorSize int32) { 45970 if g1.FpVfs == uintptr(0) { 45971 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 45972 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45973 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 45974 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 45975 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 45976 } 45977 if iDeviceChar >= 0 { 45978 g1.FiDeviceChar = iDeviceChar 45979 } else { 45980 g1.FiDeviceChar = 0 45981 } 45982 if iSectorSize >= 0 { 45983 g1.FiSectorSize = iSectorSize 45984 } else { 45985 g1.FiSectorSize = 512 45986 } 45987 } 45988 45989 func devsym_unregister(tls *libc.TLS) { 45990 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&devsym_vfs))) 45991 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&writecrash_vfs))) 45992 g1.FpVfs = uintptr(0) 45993 g1.FiDeviceChar = 0 45994 g1.FiSectorSize = 0 45995 } 45996 45997 func devsym_crash_on_write(tls *libc.TLS, nWrite int32) { 45998 if g1.FpVfs == uintptr(0) { 45999 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 46000 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 46001 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 46002 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 46003 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 46004 } 46005 g1.FnWriteCrash = nWrite 46006 } 46007 46008 type Tcl_StatBuf = stat 46009 46010 type stat64 = struct { 46011 Fst_dev uint64 46012 Fst_ino uint64 46013 Fst_mode uint32 46014 Fst_nlink uint32 46015 Fst_uid uint32 46016 Fst_gid uint32 46017 Fst_rdev uint64 46018 F__pad1 uint64 46019 Fst_size int64 46020 Fst_blksize int32 46021 F__pad2 int32 46022 Fst_blocks int64 46023 Fst_atim struct { 46024 Ftv_sec int64 46025 Ftv_nsec int64 46026 } 46027 Fst_mtim struct { 46028 Ftv_sec int64 46029 Ftv_nsec int64 46030 } 46031 Fst_ctim struct { 46032 Ftv_sec int64 46033 Ftv_nsec int64 46034 } 46035 F__glibc_reserved [2]int32 46036 } 46037 46038 type statx_timestamp = struct { 46039 Ftv_sec int64 46040 Ftv_nsec uint32 46041 F__reserved int32 46042 } 46043 46044 type statx = struct { 46045 Fstx_mask uint32 46046 Fstx_blksize uint32 46047 Fstx_attributes uint64 46048 Fstx_nlink uint32 46049 Fstx_uid uint32 46050 Fstx_gid uint32 46051 Fstx_mode uint16 46052 F__spare0 [1]uint16 46053 Fstx_ino uint64 46054 Fstx_size uint64 46055 Fstx_blocks uint64 46056 Fstx_attributes_mask uint64 46057 Fstx_atime struct { 46058 Ftv_sec int64 46059 Ftv_nsec uint32 46060 F__reserved int32 46061 } 46062 Fstx_btime struct { 46063 Ftv_sec int64 46064 Ftv_nsec uint32 46065 F__reserved int32 46066 } 46067 Fstx_ctime struct { 46068 Ftv_sec int64 46069 Ftv_nsec uint32 46070 F__reserved int32 46071 } 46072 Fstx_mtime struct { 46073 Ftv_sec int64 46074 Ftv_nsec uint32 46075 F__reserved int32 46076 } 46077 Fstx_rdev_major uint32 46078 Fstx_rdev_minor uint32 46079 Fstx_dev_major uint32 46080 Fstx_dev_minor uint32 46081 Fstx_mnt_id uint64 46082 F__spare2 uint64 46083 F__spare3 [12]uint64 46084 } 46085 46086 type flock64 = struct { 46087 Fl_type int16 46088 Fl_whence int16 46089 F__ccgo_pad1 [4]byte 46090 Fl_start int64 46091 Fl_len int64 46092 Fl_pid int32 46093 F__ccgo_pad2 [4]byte 46094 } 46095 46096 type iovec = struct { 46097 Fiov_base uintptr 46098 Fiov_len size_t 46099 } 46100 46101 type f_owner_ex = struct { 46102 Ftype uint32 46103 Fpid int32 46104 } 46105 46106 type file_handle = struct { 46107 F__ccgo_pad1 [0]uint32 46108 Fhandle_bytes uint32 46109 Fhandle_type int32 46110 } 46111 46112 type dirent64 = struct { 46113 Fd_ino uint64 46114 Fd_off int64 46115 Fd_reclen uint16 46116 Fd_type uint8 46117 Fd_name [256]uint8 46118 F__ccgo_pad1 [5]byte 46119 } 46120 46121 type fs_vtab1 = struct { 46122 Fbase sqlite3_vtab 46123 Fdb uintptr 46124 FzDb uintptr 46125 FzTbl uintptr 46126 } 46127 46128 type fs_vtab = fs_vtab1 46129 type fs_cursor1 = struct { 46130 Fbase sqlite3_vtab_cursor 46131 FpStmt uintptr 46132 FzBuf uintptr 46133 FnBuf int32 46134 FnAlloc int32 46135 } 46136 46137 type fs_cursor = fs_cursor1 46138 46139 type FsdirVtab1 = struct{ Fbase sqlite3_vtab } 46140 46141 type FsdirVtab = FsdirVtab1 46142 type FsdirCsr1 = struct { 46143 Fbase sqlite3_vtab_cursor 46144 FzDir uintptr 46145 FpDir uintptr 46146 FiRowid sqlite3_int64 46147 FpEntry uintptr 46148 } 46149 46150 type FsdirCsr = FsdirCsr1 46151 46152 func fsdirConnect1(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46153 var pTab uintptr 46154 46155 if argc != 3 { 46156 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46157 return SQLITE_ERROR 46158 } 46159 46160 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FsdirVtab{}))) 46161 if !(pTab != 0) { 46162 return SQLITE_NOMEM 46163 } 46164 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FsdirVtab{}))) 46165 46166 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 46167 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30685) 46168 46169 return SQLITE_OK 46170 } 46171 46172 func fsdirDisconnect1(tls *libc.TLS, pVtab uintptr) int32 { 46173 sqlite3.Xsqlite3_free(tls, pVtab) 46174 return SQLITE_OK 46175 } 46176 46177 func fsdirBestIndex1(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46178 var ii int32 46179 46180 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 46181 46182 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46183 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46184 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 { 46185 var pUsage uintptr 46186 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46187 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 46188 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46189 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 46190 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 46191 break 46192 } 46193 } 46194 46195 return SQLITE_OK 46196 } 46197 46198 func fsdirOpen1(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46199 var pCur uintptr 46200 46201 pCur = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(FsdirCsr{}))+uint64(256))) 46202 if pCur == uintptr(0) { 46203 return SQLITE_NOMEM 46204 } 46205 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FsdirCsr{}))) 46206 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46207 return SQLITE_OK 46208 } 46209 46210 func fsdirClose1(tls *libc.TLS, cur uintptr) int32 { 46211 var pCur uintptr = cur 46212 if (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir != 0 { 46213 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir) 46214 } 46215 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FzDir) 46216 sqlite3.Xsqlite3_free(tls, pCur) 46217 return SQLITE_OK 46218 } 46219 46220 func fsdirNext1(tls *libc.TLS, cur uintptr) int32 { 46221 var pCsr uintptr = cur 46222 46223 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 46224 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry = libc.Xreaddir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46225 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry == uintptr(0) { 46226 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46227 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 46228 } 46229 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid++ 46230 } 46231 46232 return SQLITE_OK 46233 } 46234 46235 func fsdirFilter1(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46236 var pCsr uintptr = pVtabCursor 46237 var zDir uintptr 46238 var nDir int32 46239 46240 if idxNum != 1 || argc != 1 { 46241 return SQLITE_ERROR 46242 } 46243 46244 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 46245 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 46246 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 46247 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46248 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 46249 } 46250 46251 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46252 nDir = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46253 (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir = sqlite3.Xsqlite3_malloc(tls, nDir+1) 46254 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir == uintptr(0) { 46255 return SQLITE_NOMEM 46256 } 46257 libc.Xmemcpy(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, zDir, uint64(nDir+1)) 46258 46259 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = libc.Xopendir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 46260 return fsdirNext1(tls, pVtabCursor) 46261 } 46262 46263 func fsdirEof1(tls *libc.TLS, cur uintptr) int32 { 46264 var pCsr uintptr = cur 46265 return libc.Bool32((*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir == uintptr(0)) 46266 } 46267 46268 func fsdirColumn1(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46269 var pCsr uintptr = cur 46270 switch i { 46271 case 0: 46272 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, -1, uintptr(0)) 46273 break 46274 46275 case 1: 46276 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry+19, -1, libc.UintptrFromInt32(-1)) 46277 break 46278 46279 default: 46280 } 46281 46282 return SQLITE_OK 46283 } 46284 46285 func fsdirRowid1(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46286 var pCsr uintptr = cur 46287 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid 46288 return SQLITE_OK 46289 } 46290 46291 type FstreeVtab1 = struct { 46292 Fbase sqlite3_vtab 46293 Fdb uintptr 46294 } 46295 46296 type FstreeVtab = FstreeVtab1 46297 type FstreeCsr1 = struct { 46298 Fbase sqlite3_vtab_cursor 46299 FpStmt uintptr 46300 Ffd int32 46301 F__ccgo_pad1 [4]byte 46302 } 46303 46304 type FstreeCsr = FstreeCsr1 46305 46306 func fstreeConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46307 var pTab uintptr 46308 46309 if argc != 3 { 46310 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46311 return SQLITE_ERROR 46312 } 46313 46314 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeVtab{}))) 46315 if !(pTab != 0) { 46316 return SQLITE_NOMEM 46317 } 46318 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FstreeVtab{}))) 46319 (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb = db 46320 46321 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 46322 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30714) 46323 46324 return SQLITE_OK 46325 } 46326 46327 func fstreeDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 46328 sqlite3.Xsqlite3_free(tls, pVtab) 46329 return SQLITE_OK 46330 } 46331 46332 func fstreeBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46333 var ii int32 46334 46335 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46336 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46337 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 || 46338 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE || 46339 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 46340 var pUsage uintptr 46341 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46342 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) 46343 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46344 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100000.0 46345 return SQLITE_OK 46346 } 46347 } 46348 46349 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 46350 return SQLITE_OK 46351 } 46352 46353 func fstreeOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46354 var pCur uintptr 46355 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeCsr{}))) 46356 if pCur == uintptr(0) { 46357 return SQLITE_NOMEM 46358 } 46359 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FstreeCsr{}))) 46360 (*FstreeCsr)(unsafe.Pointer(pCur)).Ffd = -1 46361 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46362 return SQLITE_OK 46363 } 46364 46365 func fstreeCloseFd(tls *libc.TLS, pCsr uintptr) { 46366 if (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd >= 0 { 46367 libc.Xclose(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd) 46368 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = -1 46369 } 46370 } 46371 46372 func fstreeClose(tls *libc.TLS, cur uintptr) int32 { 46373 var pCsr uintptr = cur 46374 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46375 fstreeCloseFd(tls, pCsr) 46376 sqlite3.Xsqlite3_free(tls, pCsr) 46377 return SQLITE_OK 46378 } 46379 46380 func fstreeNext(tls *libc.TLS, cur uintptr) int32 { 46381 var pCsr uintptr = cur 46382 var rc int32 46383 46384 fstreeCloseFd(tls, pCsr) 46385 rc = sqlite3.Xsqlite3_step(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46386 if rc != SQLITE_ROW { 46387 rc = sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46388 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46389 } else { 46390 rc = SQLITE_OK 46391 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = libc.Xopen(tls, sqlite3.Xsqlite3_column_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0), O_RDONLY, 0) 46392 } 46393 46394 return rc 46395 } 46396 46397 func fstreeFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46398 bp := tls.Alloc(2) 46399 defer tls.Free(2) 46400 46401 var pCsr uintptr = pVtabCursor 46402 var pTab uintptr = (*FstreeCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 46403 var rc int32 46404 var zSql uintptr = ts + 30750 46405 var zRoot uintptr 46406 var nRoot int32 46407 var zPrefix uintptr 46408 var nPrefix int32 46409 var zDir uintptr 46410 var nDir int32 46411 *(*[2]uint8)(unsafe.Pointer(bp)) = [2]uint8{uint8(0), uint8(0)} 46412 46413 zRoot = ts + 30982 46414 nRoot = 1 46415 zPrefix = ts + 584 46416 nPrefix = 0 46417 46418 zDir = zRoot 46419 nDir = nRoot 46420 46421 fstreeCloseFd(tls, pCsr) 46422 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46423 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46424 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 46425 if rc != SQLITE_OK { 46426 return rc 46427 } 46428 46429 if idxNum != 0 { 46430 var zQuery uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46431 switch idxNum { 46432 case SQLITE_INDEX_CONSTRAINT_GLOB: 46433 *(*uint8)(unsafe.Pointer(bp)) = uint8('*') 46434 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8('?') 46435 break 46436 fallthrough 46437 case SQLITE_INDEX_CONSTRAINT_LIKE: 46438 *(*uint8)(unsafe.Pointer(bp)) = uint8('_') 46439 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8('%') 46440 break 46441 } 46442 46443 if sqlite3.Xsqlite3_strnicmp(tls, zQuery, zPrefix, nPrefix) == 0 { 46444 var i int32 46445 for i = nPrefix; *(*uint8)(unsafe.Pointer(zQuery + uintptr(i))) != 0; i++ { 46446 if int32(*(*uint8)(unsafe.Pointer(zQuery + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(bp))) || int32(*(*uint8)(unsafe.Pointer(zQuery + uintptr(i)))) == int32(*(*uint8)(unsafe.Pointer(bp + 1))) { 46447 break 46448 } 46449 if int32(*(*uint8)(unsafe.Pointer(zQuery + uintptr(i)))) == '/' { 46450 nDir = i 46451 } 46452 } 46453 zDir = zQuery 46454 } 46455 } 46456 if nDir == 0 { 46457 nDir = 1 46458 } 46459 46460 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 1, zDir, nDir, libc.UintptrFromInt32(-1)) 46461 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 2, zRoot, nRoot, libc.UintptrFromInt32(-1)) 46462 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 3, zPrefix, nPrefix, libc.UintptrFromInt32(-1)) 46463 46464 return fstreeNext(tls, pVtabCursor) 46465 } 46466 46467 func fstreeEof(tls *libc.TLS, cur uintptr) int32 { 46468 var pCsr uintptr = cur 46469 return libc.Bool32((*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 46470 } 46471 46472 func fstreeColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46473 bp := tls.Alloc(128) 46474 defer tls.Free(128) 46475 46476 var pCsr uintptr = cur 46477 if i == 0 { 46478 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0)) 46479 } else { 46480 libc.Xfstat(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, bp) 46481 46482 if (*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0170000) == uint32(0100000) { 46483 if i == 1 { 46484 sqlite3.Xsqlite3_result_int64(tls, ctx, (*stat)(unsafe.Pointer(bp)).Fst_size) 46485 } else { 46486 var nRead int32 46487 var aBuf uintptr = sqlite3.Xsqlite3_malloc(tls, int32((*stat)(unsafe.Pointer(bp)).Fst_mode+uint32(1))) 46488 if !(aBuf != 0) { 46489 return SQLITE_NOMEM 46490 } 46491 nRead = int32(libc.Xread(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, aBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_mode))) 46492 if uint32(nRead) != (*stat)(unsafe.Pointer(bp)).Fst_mode { 46493 return SQLITE_IOERR 46494 } 46495 sqlite3.Xsqlite3_result_blob(tls, ctx, aBuf, nRead, libc.UintptrFromInt32(-1)) 46496 sqlite3.Xsqlite3_free(tls, aBuf) 46497 } 46498 } 46499 } 46500 46501 return SQLITE_OK 46502 } 46503 46504 func fstreeRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46505 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 46506 return SQLITE_OK 46507 } 46508 46509 func fsConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46510 var pVtab uintptr 46511 var nByte int32 46512 var zTbl uintptr 46513 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 46514 46515 if argc != 4 { 46516 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46517 return SQLITE_ERROR 46518 } 46519 zTbl = *(*uintptr)(unsafe.Pointer(argv + 3*8)) 46520 46521 nByte = int32(uint64(unsafe.Sizeof(fs_vtab{})) + uint64(int32(libc.Xstrlen(tls, zTbl))) + uint64(1) + uint64(int32(libc.Xstrlen(tls, zDb))) + uint64(1)) 46522 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(nByte)) 46523 if !(pVtab != 0) { 46524 return SQLITE_NOMEM 46525 } 46526 46527 (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl = pVtab + 1*48 46528 (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb = (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl + uintptr(libc.Xstrlen(tls, zTbl)+uint64(1)) 46529 (*fs_vtab)(unsafe.Pointer(pVtab)).Fdb = db 46530 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl, zTbl, libc.Xstrlen(tls, zTbl)) 46531 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb, zDb, libc.Xstrlen(tls, zDb)) 46532 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 46533 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30984) 46534 46535 return SQLITE_OK 46536 } 46537 46538 func fsDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 46539 sqlite3.Xsqlite3_free(tls, pVtab) 46540 return SQLITE_OK 46541 } 46542 46543 func fsOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46544 var pCur uintptr 46545 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(fs_cursor{}))) 46546 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46547 return SQLITE_OK 46548 } 46549 46550 func fsClose(tls *libc.TLS, cur uintptr) int32 { 46551 var pCur uintptr = cur 46552 sqlite3.Xsqlite3_finalize(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 46553 sqlite3.Xsqlite3_free(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf) 46554 sqlite3.Xsqlite3_free(tls, pCur) 46555 return SQLITE_OK 46556 } 46557 46558 func fsNext(tls *libc.TLS, cur uintptr) int32 { 46559 var pCur uintptr = cur 46560 var rc int32 46561 46562 rc = sqlite3.Xsqlite3_step(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 46563 if rc == SQLITE_ROW || rc == SQLITE_DONE { 46564 rc = SQLITE_OK 46565 } 46566 46567 return rc 46568 } 46569 46570 func fsFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46571 bp := tls.Alloc(32) 46572 defer tls.Free(32) 46573 46574 var rc int32 46575 var pCur uintptr = pVtabCursor 46576 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 46577 46578 if idxNum == 1 { 46579 var zStmt uintptr = sqlite3.Xsqlite3_mprintf(tls, 46580 ts+31021, libc.VaList(bp, (*fs_vtab)(unsafe.Pointer(p)).FzDb, (*fs_vtab)(unsafe.Pointer(p)).FzTbl)) 46581 if !(zStmt != 0) { 46582 return SQLITE_NOMEM 46583 } 46584 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 46585 sqlite3.Xsqlite3_free(tls, zStmt) 46586 if rc == SQLITE_OK { 46587 sqlite3.Xsqlite3_bind_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1, *(*uintptr)(unsafe.Pointer(argv))) 46588 } 46589 } else { 46590 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)) 46591 if !(zStmt != 0) { 46592 return SQLITE_NOMEM 46593 } 46594 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 46595 sqlite3.Xsqlite3_free(tls, zStmt) 46596 } 46597 46598 if rc == SQLITE_OK { 46599 rc = fsNext(tls, pVtabCursor) 46600 } 46601 return rc 46602 } 46603 46604 func fsColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46605 bp := tls.Alloc(128) 46606 defer tls.Free(128) 46607 46608 var pCur uintptr = cur 46609 46610 if i == 0 { 46611 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0)) 46612 } else { 46613 var zFile uintptr = sqlite3.Xsqlite3_column_text(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1) 46614 46615 var fd int32 46616 var n int32 46617 fd = libc.Xopen(tls, zFile, O_RDONLY, 0) 46618 if fd < 0 { 46619 return SQLITE_IOERR 46620 } 46621 libc.Xfstat(tls, fd, bp) 46622 46623 if (*stat)(unsafe.Pointer(bp)).Fst_size >= int64((*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc) { 46624 var nNew sqlite3_int64 = (*stat)(unsafe.Pointer(bp)).Fst_size * int64(2) 46625 var zNew uintptr 46626 if nNew < int64(1024) { 46627 nNew = int64(1024) 46628 } 46629 46630 zNew = sqlite3.Xsqlite3Realloc(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64(nNew)) 46631 if zNew == uintptr(0) { 46632 libc.Xclose(tls, fd) 46633 return SQLITE_NOMEM 46634 } 46635 (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf = zNew 46636 (*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc = int32(nNew) 46637 } 46638 46639 n = int32(libc.Xread(tls, fd, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_size))) 46640 libc.Xclose(tls, fd) 46641 if int64(n) != (*stat)(unsafe.Pointer(bp)).Fst_size { 46642 return SQLITE_ERROR 46643 } 46644 (*fs_cursor)(unsafe.Pointer(pCur)).FnBuf = int32((*stat)(unsafe.Pointer(bp)).Fst_size) 46645 *(*uint8)(unsafe.Pointer((*fs_cursor)(unsafe.Pointer(pCur)).FzBuf + uintptr((*fs_cursor)(unsafe.Pointer(pCur)).FnBuf))) = uint8(0) 46646 46647 sqlite3.Xsqlite3_result_text(tls, ctx, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 46648 } 46649 return SQLITE_OK 46650 } 46651 46652 func fsRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46653 var pCur uintptr = cur 46654 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0) 46655 return SQLITE_OK 46656 } 46657 46658 func fsEof(tls *libc.TLS, cur uintptr) int32 { 46659 var pCur uintptr = cur 46660 return libc.Bool32(sqlite3.Xsqlite3_data_count(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) == 0) 46661 } 46662 46663 func fsBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46664 var ii int32 46665 46666 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46667 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46668 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn < 0 && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 46669 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 46670 var pUsage uintptr 46671 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46672 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 46673 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46674 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 46675 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 46676 break 46677 } 46678 } 46679 46680 return SQLITE_OK 46681 } 46682 46683 var fsModule = sqlite3_module{ 46684 FxCreate: 0, 46685 FxConnect: 0, 46686 FxBestIndex: 0, 46687 FxDisconnect: 0, 46688 FxDestroy: 0, 46689 FxOpen: 0, 46690 FxClose: 0, 46691 FxFilter: 0, 46692 FxNext: 0, 46693 FxEof: 0, 46694 FxColumn: 0, 46695 FxRowid: 0, 46696 } 46697 46698 var fsdirModule = sqlite3_module{ 46699 FxCreate: 0, 46700 FxConnect: 0, 46701 FxBestIndex: 0, 46702 FxDisconnect: 0, 46703 FxDestroy: 0, 46704 FxOpen: 0, 46705 FxClose: 0, 46706 FxFilter: 0, 46707 FxNext: 0, 46708 FxEof: 0, 46709 FxColumn: 0, 46710 FxRowid: 0, 46711 } 46712 46713 var fstreeModule = sqlite3_module{ 46714 FxCreate: 0, 46715 FxConnect: 0, 46716 FxBestIndex: 0, 46717 FxDisconnect: 0, 46718 FxDestroy: 0, 46719 FxOpen: 0, 46720 FxClose: 0, 46721 FxFilter: 0, 46722 FxNext: 0, 46723 FxEof: 0, 46724 FxColumn: 0, 46725 FxRowid: 0, 46726 } 46727 46728 func register_fs_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46729 bp := tls.Alloc(8) 46730 defer tls.Free(8) 46731 46732 if objc != 2 { 46733 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 46734 return TCL_ERROR 46735 } 46736 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 46737 return TCL_ERROR 46738 } 46739 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31055, uintptr(unsafe.Pointer(&fsModule)), interp) 46740 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+5325, uintptr(unsafe.Pointer(&fsdirModule)), uintptr(0)) 46741 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31058, uintptr(unsafe.Pointer(&fstreeModule)), uintptr(0)) 46742 return TCL_OK 46743 } 46744 46745 func Sqlitetestfs_Init(tls *libc.TLS, interp uintptr) int32 { 46746 var i int32 46747 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd6))/uint64(unsafe.Sizeof(struct { 46748 FzName uintptr 46749 FxProc uintptr 46750 FclientData uintptr 46751 }{})); i++ { 46752 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd6[i].FzName, 46753 aObjCmd6[i].FxProc, aObjCmd6[i].FclientData, uintptr(0)) 46754 } 46755 return TCL_OK 46756 } 46757 46758 var aObjCmd6 = [1]struct { 46759 FzName uintptr 46760 FxProc uintptr 46761 FclientData uintptr 46762 }{ 46763 {FzName: ts + 31065, FxProc: 0}, 46764 } 46765 46766 type fd_set2 = struct{ F__fds_bits [16]int64 } 46767 46768 func testContextMalloc(tls *libc.TLS, context uintptr, nByte int32) uintptr { 46769 var z uintptr = sqlite3.Xsqlite3_malloc(tls, nByte) 46770 if !(z != 0) && nByte > 0 { 46771 sqlite3.Xsqlite3_result_error_nomem(tls, context) 46772 } 46773 return z 46774 } 46775 46776 func randStr(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 46777 bp := tls.Alloc(1004) 46778 defer tls.Free(1004) 46779 46780 var iMin int32 46781 var iMax int32 46782 var n int32 46783 46784 var i int32 46785 46786 iMin = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46787 if iMin < 0 { 46788 iMin = 0 46789 } 46790 if uint64(iMin) >= uint64(unsafe.Sizeof([1000]uint8{})) { 46791 iMin = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 46792 } 46793 iMax = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 46794 if iMax < iMin { 46795 iMax = iMin 46796 } 46797 if uint64(iMax) >= uint64(unsafe.Sizeof([1000]uint8{})) { 46798 iMax = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 46799 } 46800 n = iMin 46801 if iMax > iMin { 46802 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 46803 *(*int32)(unsafe.Pointer(bp)) &= 0x7fffffff 46804 n = n + *(*int32)(unsafe.Pointer(bp))%(iMax+1-iMin) 46805 } 46806 46807 sqlite3.Xsqlite3_randomness(tls, n, bp+4) 46808 for i = 0; i < n; i++ { 46809 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))) = zSrc[uint64(*(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))))%(uint64(unsafe.Sizeof(zSrc))-uint64(1))] 46810 } 46811 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(n))) = uint8(0) 46812 sqlite3.Xsqlite3_result_text(tls, context, bp+4, n, libc.UintptrFromInt32(-1)) 46813 } 46814 46815 var zSrc = *(*[79]uint8)(unsafe.Pointer(ts + 31084)) 46816 46817 var test_destructor_count_var int32 = 0 46818 46819 func destructor(tls *libc.TLS, p uintptr) { 46820 var zVal uintptr = p 46821 46822 zVal-- 46823 sqlite3.Xsqlite3_free(tls, zVal) 46824 test_destructor_count_var-- 46825 } 46826 46827 func test_destructor(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46828 var zVal uintptr 46829 var len int32 46830 46831 test_destructor_count_var++ 46832 46833 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 46834 return 46835 } 46836 len = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46837 zVal = testContextMalloc(tls, pCtx, len+3) 46838 if !(zVal != 0) { 46839 return 46840 } 46841 *(*uint8)(unsafe.Pointer(zVal + uintptr(len+1))) = uint8(0) 46842 *(*uint8)(unsafe.Pointer(zVal + uintptr(len+2))) = uint8(0) 46843 zVal++ 46844 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 46845 sqlite3.Xsqlite3_result_text(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 46846 } 46847 46848 func test_destructor16(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46849 var zVal uintptr 46850 var len int32 46851 46852 test_destructor_count_var++ 46853 46854 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 46855 return 46856 } 46857 len = sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46858 zVal = testContextMalloc(tls, pCtx, len+3) 46859 if !(zVal != 0) { 46860 return 46861 } 46862 *(*uint8)(unsafe.Pointer(zVal + uintptr(len+1))) = uint8(0) 46863 *(*uint8)(unsafe.Pointer(zVal + uintptr(len+2))) = uint8(0) 46864 zVal++ 46865 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 46866 sqlite3.Xsqlite3_result_text16(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 46867 } 46868 46869 func test_destructor_count(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46870 sqlite3.Xsqlite3_result_int(tls, pCtx, test_destructor_count_var) 46871 } 46872 46873 func test_agg_errmsg16_step(tls *libc.TLS, a uintptr, b int32, c uintptr) { 46874 } 46875 46876 func test_agg_errmsg16_final(tls *libc.TLS, ctx uintptr) { 46877 var z uintptr 46878 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 46879 sqlite3.Xsqlite3_aggregate_context(tls, ctx, 2048) 46880 z = sqlite3.Xsqlite3_errmsg16(tls, db) 46881 sqlite3.Xsqlite3_result_text16(tls, ctx, z, -1, libc.UintptrFromInt32(-1)) 46882 } 46883 46884 func free_test_auxdata(tls *libc.TLS, p uintptr) { 46885 sqlite3.Xsqlite3_free(tls, p) 46886 } 46887 46888 func test_auxdata(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46889 var i int32 46890 var zRet uintptr = testContextMalloc(tls, pCtx, nArg*2) 46891 if !(zRet != 0) { 46892 return 46893 } 46894 libc.Xmemset(tls, zRet, 0, uint64(nArg*2)) 46895 for i = 0; i < nArg; i++ { 46896 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 46897 if z != 0 { 46898 var n int32 46899 var zAux uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, i) 46900 if zAux != 0 { 46901 *(*uint8)(unsafe.Pointer(zRet + uintptr(i*2))) = uint8('1') 46902 46903 } else { 46904 *(*uint8)(unsafe.Pointer(zRet + uintptr(i*2))) = uint8('0') 46905 } 46906 n = int32(libc.Xstrlen(tls, z)) + 1 46907 zAux = testContextMalloc(tls, pCtx, n) 46908 if zAux != 0 { 46909 libc.Xmemcpy(tls, zAux, z, uint64(n)) 46910 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, i, zAux, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 46911 } 46912 *(*uint8)(unsafe.Pointer(zRet + uintptr(i*2+1))) = uint8(' ') 46913 } 46914 } 46915 sqlite3.Xsqlite3_result_text(tls, pCtx, zRet, 2*nArg-1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 46916 } 46917 46918 func test_error(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46919 sqlite3.Xsqlite3_result_error(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1) 46920 if nArg == 2 { 46921 sqlite3.Xsqlite3_result_error_code(tls, pCtx, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 46922 } 46923 } 46924 46925 func counterFunc(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46926 var pCounter uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, 0) 46927 if pCounter == uintptr(0) { 46928 pCounter = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(int32(0)))) 46929 if pCounter == uintptr(0) { 46930 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 46931 return 46932 } 46933 *(*int32)(unsafe.Pointer(pCounter)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 46934 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, 0, pCounter, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46935 } else { 46936 *(*int32)(unsafe.Pointer(pCounter))++ 46937 } 46938 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(pCounter))) 46939 } 46940 46941 func test_isolation(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46942 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46943 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46944 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 46945 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46946 sqlite3.Xsqlite3_result_value(tls, pCtx, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 46947 } 46948 46949 func test_eval(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46950 bp := tls.Alloc(16) 46951 defer tls.Free(16) 46952 46953 var rc int32 46954 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, pCtx) 46955 var zSql uintptr 46956 46957 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46958 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 46959 if rc == SQLITE_OK { 46960 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46961 if rc == SQLITE_ROW { 46962 sqlite3.Xsqlite3_result_value(tls, pCtx, sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0)) 46963 } 46964 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 46965 } 46966 if rc != 0 { 46967 var zErr uintptr 46968 46969 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+31163, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 46970 sqlite3.Xsqlite3_result_text(tls, pCtx, zErr, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 46971 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 46972 } 46973 } 46974 46975 func testHexChar(tls *libc.TLS, c uint8) int32 { 46976 if int32(c) >= '0' && int32(c) <= '9' { 46977 return int32(c) - '0' 46978 } else if int32(c) >= 'a' && int32(c) <= 'f' { 46979 return int32(c) - 'a' + 10 46980 } else if int32(c) >= 'A' && int32(c) <= 'F' { 46981 return int32(c) - 'A' + 10 46982 } 46983 return 0 46984 } 46985 46986 func testHexToBin(tls *libc.TLS, zIn uintptr, zOut uintptr) { 46987 for *(*uint8)(unsafe.Pointer(zIn)) != 0 && *(*uint8)(unsafe.Pointer(zIn + 1)) != 0 { 46988 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zOut, 1))) = uint8(testHexChar(tls, *(*uint8)(unsafe.Pointer(zIn)))<<4 + testHexChar(tls, *(*uint8)(unsafe.Pointer(zIn + 1)))) 46989 zIn += uintptr(2) 46990 } 46991 } 46992 46993 func testHexToUtf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 46994 var n int32 46995 var zIn uintptr 46996 var zOut uintptr 46997 46998 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46999 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47000 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 47001 if zOut == uintptr(0) { 47002 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 47003 } else { 47004 testHexToBin(tls, zIn, zOut) 47005 sqlite3.Xsqlite3_result_text16be(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47006 } 47007 } 47008 47009 func testHexToUtf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47010 var n int32 47011 var zIn uintptr 47012 var zOut uintptr 47013 47014 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 47015 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47016 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 47017 if zOut == uintptr(0) { 47018 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 47019 } else { 47020 testHexToBin(tls, zIn, zOut) 47021 sqlite3.Xsqlite3_result_text(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47022 } 47023 } 47024 47025 func testHexToUtf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47026 var n int32 47027 var zIn uintptr 47028 var zOut uintptr 47029 47030 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 47031 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47032 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 47033 if zOut == uintptr(0) { 47034 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 47035 } else { 47036 testHexToBin(tls, zIn, zOut) 47037 sqlite3.Xsqlite3_result_text16le(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47038 } 47039 } 47040 47041 func real2hex(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47042 bp := tls.Alloc(28) 47043 defer tls.Free(28) 47044 47045 var i int32 47046 var bigEndian int32 47047 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(1) 47048 bigEndian = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(bp))) == 0) 47049 *(*float64)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 47050 for i = 0; i < 8; i++ { 47051 if bigEndian != 0 { 47052 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = *(*uint8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 47053 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i*2+1))) = *(*uint8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 47054 } else { 47055 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2))) = *(*uint8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 47056 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2+1))) = *(*uint8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 47057 } 47058 } 47059 *(*uint8)(unsafe.Pointer(bp + 8 + 16)) = uint8(0) 47060 sqlite3.Xsqlite3_result_text(tls, context, bp+8, -1, libc.UintptrFromInt32(-1)) 47061 } 47062 47063 func test_extract(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47064 bp := tls.Alloc(72) 47065 defer tls.Free(72) 47066 47067 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 47068 var pRec uintptr 47069 var pEndHdr uintptr 47070 var pHdr uintptr 47071 var pBody uintptr 47072 47073 var iIdx int32 47074 var iCurrent int32 = 0 47075 47076 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 47077 iIdx = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 47078 47079 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp)) 47080 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp)))) 47081 47082 for iCurrent = 0; pHdr < pEndHdr && iCurrent <= iIdx; iCurrent++ { 47083 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(Mem{}))) 47084 (*Mem)(unsafe.Pointer(bp + 8)).Fdb = db 47085 (*Mem)(unsafe.Pointer(bp + 8)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 47086 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+64)) 47087 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 64))), bp+8) 47088 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 64))))) 47089 47090 if iCurrent == iIdx { 47091 sqlite3.Xsqlite3_result_value(tls, context, bp+8) 47092 } 47093 47094 if (*Mem)(unsafe.Pointer(bp+8)).FszMalloc != 0 { 47095 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+8)).FzMalloc) 47096 } 47097 } 47098 } 47099 47100 func test_decode(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47101 bp := tls.Alloc(123) 47102 defer tls.Free(123) 47103 47104 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 47105 var pRec uintptr 47106 var pEndHdr uintptr 47107 var pHdr uintptr 47108 var pBody uintptr 47109 47110 var pRet uintptr 47111 47112 pRet = tcl.XTcl_NewObj(tls) 47113 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 47114 47115 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 47116 47117 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp+32)) 47118 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp + 32)))) 47119 for pHdr < pEndHdr { 47120 var pVal uintptr = uintptr(0) 47121 47122 libc.Xmemset(tls, bp+40, 0, uint64(unsafe.Sizeof(Mem{}))) 47123 (*Mem)(unsafe.Pointer(bp + 40)).Fdb = db 47124 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 47125 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+96)) 47126 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 96))), bp+40) 47127 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 96))))) 47128 47129 switch sqlite3.Xsqlite3_value_type(tls, bp+40) { 47130 case SQLITE_TEXT: 47131 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, bp+40), -1) 47132 break 47133 47134 case SQLITE_BLOB: 47135 { 47136 *(*[16]uint8)(unsafe.Pointer(bp + 107)) = [16]uint8{ 47137 uint8('0'), uint8('1'), uint8('2'), uint8('3'), uint8('4'), uint8('5'), uint8('6'), uint8('7'), 47138 uint8('8'), uint8('9'), uint8('a'), uint8('b'), uint8('c'), uint8('d'), uint8('e'), uint8('f'), 47139 } 47140 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, bp+40) 47141 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, bp+40) 47142 var i int32 47143 pVal = tcl.XTcl_NewStringObj(tls, ts+6334, -1) 47144 for i = 0; i < n; i++ { 47145 *(*uint8)(unsafe.Pointer(bp + 104)) = *(*uint8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))>>4&0x0F))) 47146 *(*uint8)(unsafe.Pointer(bp + 104 + 1)) = *(*uint8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))&0x0F))) 47147 *(*uint8)(unsafe.Pointer(bp + 104 + 2)) = uint8(0) 47148 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp, bp+104, 0)) 47149 } 47150 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp+16, ts+5624, 0)) 47151 break 47152 47153 } 47154 47155 case SQLITE_FLOAT: 47156 pVal = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, bp+40)) 47157 break 47158 47159 case SQLITE_INTEGER: 47160 pVal = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, bp+40)) 47161 break 47162 47163 case SQLITE_NULL: 47164 pVal = tcl.XTcl_NewStringObj(tls, ts+5846, -1) 47165 break 47166 47167 default: 47168 } 47169 47170 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, pVal) 47171 47172 if (*Mem)(unsafe.Pointer(bp+40)).FszMalloc != 0 { 47173 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+40)).FzMalloc) 47174 } 47175 } 47176 47177 sqlite3.Xsqlite3_result_text(tls, context, tcl.XTcl_GetString(tls, pRet), -1, libc.UintptrFromInt32(-1)) 47178 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 47179 var _objPtr uintptr = pRet 47180 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 47181 tcl.XTclFreeObj(tls, _objPtr) 47182 } 47183 } 47184 } 47185 47186 func test_zeroblob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47187 var nZero int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 47188 sqlite3.Xsqlite3_result_zeroblob(tls, context, nZero) 47189 } 47190 47191 func test_getsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47192 sqlite3.Xsqlite3_result_int(tls, context, int32(sqlite3.Xsqlite3_value_subtype(tls, *(*uintptr)(unsafe.Pointer(argv))))) 47193 } 47194 47195 func test_frombind(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47196 var m sqlite3_uint64 = uint64(0) 47197 var i int32 47198 for i = 0; i < argc && i < 63; i++ { 47199 if sqlite3.Xsqlite3_value_frombind(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) != 0 { 47200 m = m | uint64(1)<<i 47201 } 47202 } 47203 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3_int64(m)) 47204 } 47205 47206 func test_setsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47207 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv))) 47208 sqlite3.Xsqlite3_result_subtype(tls, context, uint32(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 47209 } 47210 47211 func registerTestFunctions(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 47212 var i int32 47213 47214 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aFuncs))/uint64(unsafe.Sizeof(struct { 47215 FzName uintptr 47216 FnArg int8 47217 F__ccgo_pad1 [3]byte 47218 FeTextRep uint32 47219 FxFunc uintptr 47220 }{})); i++ { 47221 sqlite3.Xsqlite3_create_function(tls, db, aFuncs[i].FzName, int32(aFuncs[i].FnArg), 47222 int32(aFuncs[i].FeTextRep), uintptr(0), aFuncs[i].FxFunc, uintptr(0), uintptr(0)) 47223 } 47224 47225 sqlite3.Xsqlite3_create_function(tls, db, ts+31211, 0, SQLITE_ANY, uintptr(0), uintptr(0), 47226 *(*uintptr)(unsafe.Pointer(&struct { 47227 f func(*libc.TLS, uintptr, int32, uintptr) 47228 }{test_agg_errmsg16_step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_agg_errmsg16_final}))) 47229 47230 return SQLITE_OK 47231 } 47232 47233 var aFuncs = [20]struct { 47234 FzName uintptr 47235 FnArg int8 47236 F__ccgo_pad1 [3]byte 47237 FeTextRep uint32 47238 FxFunc uintptr 47239 }{ 47240 {FzName: ts + 31229, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47241 {FzName: ts + 31237, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47242 {FzName: ts + 31253, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47243 {FzName: ts + 31271, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47244 {FzName: ts + 31286, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47245 {FzName: ts + 31301, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47246 {FzName: ts + 31313, FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47247 {FzName: ts + 31335, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47248 {FzName: ts + 31348, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47249 {FzName: ts + 31348, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47250 {FzName: ts + 31359, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47251 {FzName: ts + 31369, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47252 {FzName: ts + 31384, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47253 {FzName: ts + 31397, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47254 {FzName: ts + 31406, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47255 {FzName: ts + 31418, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47256 {FzName: ts + 31431, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8 | SQLITE_DETERMINISTIC), FxFunc: 0}, 47257 {FzName: ts + 31445, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47258 {FzName: ts + 31461, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47259 {FzName: ts + 31477, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47260 } 47261 47262 func autoinstall_test_funcs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47263 var rc int32 = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47264 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47265 }{registerTestFunctions}))) 47266 if rc == SQLITE_OK { 47267 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47268 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47269 }{Md5_Register}))) 47270 } 47271 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 47272 return TCL_OK 47273 } 47274 47275 func tStep(tls *libc.TLS, a uintptr, b int32, c uintptr) { 47276 } 47277 47278 func tFinal(tls *libc.TLS, a uintptr) { 47279 } 47280 47281 func abuse_create_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47282 bp := tls.Alloc(24) 47283 defer tls.Free(24) 47284 47285 var rc int32 47286 var mxArg int32 47287 47288 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0) { 47289 goto __1 47290 } 47291 return TCL_ERROR 47292 __1: 47293 ; 47294 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47295 f func(*libc.TLS, uintptr, int32, uintptr) 47296 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 47297 f func(*libc.TLS, uintptr, int32, uintptr) 47298 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 47299 if !(rc != SQLITE_MISUSE) { 47300 goto __2 47301 } 47302 goto abuse_err 47303 __2: 47304 ; 47305 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47306 f func(*libc.TLS, uintptr, int32, uintptr) 47307 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 47308 f func(*libc.TLS, uintptr, int32, uintptr) 47309 }{tStep})), uintptr(0)) 47310 if !(rc != SQLITE_MISUSE) { 47311 goto __3 47312 } 47313 goto abuse_err 47314 __3: 47315 ; 47316 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47317 f func(*libc.TLS, uintptr, int32, uintptr) 47318 }{tStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 47319 if !(rc != SQLITE_MISUSE) { 47320 goto __4 47321 } 47322 goto abuse_err 47323 __4: 47324 ; 47325 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}))) 47326 if !(rc != SQLITE_MISUSE) { 47327 goto __5 47328 } 47329 goto abuse_err 47330 __5: 47331 ; 47332 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47333 f func(*libc.TLS, uintptr, int32, uintptr) 47334 }{tStep})), uintptr(0)) 47335 if !(rc != SQLITE_MISUSE) { 47336 goto __6 47337 } 47338 goto abuse_err 47339 __6: 47340 ; 47341 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, -2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47342 f func(*libc.TLS, uintptr, int32, uintptr) 47343 }{tStep})), uintptr(0), uintptr(0)) 47344 if !(rc != SQLITE_MISUSE) { 47345 goto __7 47346 } 47347 goto abuse_err 47348 __7: 47349 ; 47350 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 128, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47351 f func(*libc.TLS, uintptr, int32, uintptr) 47352 }{tStep})), uintptr(0), uintptr(0)) 47353 if !(rc != SQLITE_MISUSE) { 47354 goto __8 47355 } 47356 goto abuse_err 47357 __8: 47358 ; 47359 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 47360 ts+31494, 47361 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47362 f func(*libc.TLS, uintptr, int32, uintptr) 47363 }{tStep})), uintptr(0), uintptr(0)) 47364 if !(rc != SQLITE_MISUSE) { 47365 goto __9 47366 } 47367 goto abuse_err 47368 __9: 47369 ; 47370 sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, 10000) 47371 mxArg = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, -1) 47372 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 47373 ts+31751, 47374 mxArg, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47375 f func(*libc.TLS, uintptr, int32, uintptr) 47376 }{tStep})), uintptr(0), uintptr(0)) 47377 if !(rc != SQLITE_OK) { 47378 goto __10 47379 } 47380 goto abuse_err 47381 __10: 47382 ; 47383 return TCL_OK 47384 47385 abuse_err: 47386 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32007, 47387 uintptr(0))) 47388 return TCL_ERROR 47389 } 47390 47391 func rankfunc(tls *libc.TLS, pCtx uintptr, nVal int32, apVal uintptr) { 47392 var aMatchinfo uintptr 47393 var nMatchinfo int32 47394 var nCol int32 47395 var nPhrase int32 47396 var iPhrase int32 47397 var score float64 47398 var nHitCount int32 47399 var nGlobalHitCount int32 47400 var weight float64 47401 var iCol int32 47402 47403 var aPhraseinfo uintptr 47404 nCol = 0 47405 nPhrase = 0 47406 score = 0.0 47407 47408 if !(nVal < 1) { 47409 goto __1 47410 } 47411 goto wrong_number_args 47412 __1: 47413 ; 47414 aMatchinfo = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal))) 47415 nMatchinfo = int32(uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal)))) / uint64(unsafe.Sizeof(int32(0)))) 47416 if !(nMatchinfo >= 2) { 47417 goto __2 47418 } 47419 nPhrase = *(*int32)(unsafe.Pointer(aMatchinfo)) 47420 nCol = *(*int32)(unsafe.Pointer(aMatchinfo + 1*4)) 47421 __2: 47422 ; 47423 if !(nMatchinfo != 2+3*nCol*nPhrase) { 47424 goto __3 47425 } 47426 sqlite3.Xsqlite3_result_error(tls, pCtx, 47427 ts+32050, -1) 47428 return 47429 __3: 47430 ; 47431 if !(nVal != 1+nCol) { 47432 goto __4 47433 } 47434 goto wrong_number_args 47435 __4: 47436 ; 47437 iPhrase = 0 47438 __5: 47439 if !(iPhrase < nPhrase) { 47440 goto __7 47441 } 47442 47443 aPhraseinfo = aMatchinfo + uintptr(2+iPhrase*nCol*3)*4 47444 iCol = 0 47445 __8: 47446 if !(iCol < nCol) { 47447 goto __10 47448 } 47449 nHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol)*4)) 47450 nGlobalHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol+1)*4)) 47451 weight = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(iCol+1)*8))) 47452 if !(nHitCount > 0) { 47453 goto __11 47454 } 47455 score = score + float64(nHitCount)/float64(nGlobalHitCount)*weight 47456 __11: 47457 ; 47458 goto __9 47459 __9: 47460 iCol++ 47461 goto __8 47462 goto __10 47463 __10: 47464 ; 47465 goto __6 47466 __6: 47467 iPhrase++ 47468 goto __5 47469 goto __7 47470 __7: 47471 ; 47472 sqlite3.Xsqlite3_result_double(tls, pCtx, score) 47473 return 47474 47475 wrong_number_args: 47476 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+32099, -1) 47477 } 47478 47479 func install_fts3_rank_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47480 bp := tls.Alloc(8) 47481 defer tls.Free(8) 47482 47483 if objc != 2 { 47484 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 47485 return TCL_ERROR 47486 } 47487 47488 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 47489 return TCL_ERROR 47490 } 47491 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+32144, -1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47492 f func(*libc.TLS, uintptr, int32, uintptr) 47493 }{rankfunc})), uintptr(0), uintptr(0)) 47494 return TCL_OK 47495 } 47496 47497 func Sqlitetest_func_Init(tls *libc.TLS, interp uintptr) int32 { 47498 var i int32 47499 47500 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd7))/uint64(unsafe.Sizeof(struct { 47501 FzName uintptr 47502 FxProc uintptr 47503 }{})); i++ { 47504 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd7[i].FzName, aObjCmd7[i].FxProc, uintptr(0), uintptr(0)) 47505 } 47506 sqlite3.Xsqlite3_initialize(tls) 47507 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47508 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47509 }{registerTestFunctions}))) 47510 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47511 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47512 }{Md5_Register}))) 47513 return TCL_OK 47514 } 47515 47516 var aObjCmd7 = [3]struct { 47517 FzName uintptr 47518 FxProc uintptr 47519 }{ 47520 {FzName: ts + 32149, FxProc: 0}, 47521 {FzName: ts + 32176, FxProc: 0}, 47522 {FzName: ts + 32198, FxProc: 0}, 47523 } 47524 47525 type fd_set3 = struct{ Ffds_bits [16]int64 } 47526 47527 func sqlite3TestBinToHex(tls *libc.TLS, zBuf uintptr, N int32) { 47528 bp := tls.Alloc(17) 47529 defer tls.Free(17) 47530 47531 *(*[17]uint8)(unsafe.Pointer(bp)) = *(*[17]uint8)(unsafe.Pointer(ts + 32225)) 47532 var i int32 47533 var j int32 47534 var c uint8 47535 i = N * 2 47536 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = uint8(0) 47537 for j = N - 1; j >= 0; j-- { 47538 c = *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) 47539 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)&0xf))) 47540 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)>>4))) 47541 } 47542 47543 } 47544 47545 func sqlite3TestHexToBin(tls *libc.TLS, zIn uintptr, N int32, aOut uintptr) int32 { 47546 bp := tls.Alloc(256) 47547 defer tls.Free(256) 47548 47549 *(*[256]uint8)(unsafe.Pointer(bp)) = [256]uint8{ 47550 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47551 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47552 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47553 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), 47554 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), 47555 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47556 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), 47557 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47558 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47559 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47560 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47561 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47562 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47563 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47564 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47565 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47566 } 47567 var i int32 47568 var j int32 47569 var hi int32 = 1 47570 var c uint8 47571 47572 for i = libc.AssignInt32(&j, 0); i < N; i++ { 47573 c = *(*uint8)(unsafe.Pointer(bp + uintptr(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))))) 47574 if int32(c) == 0 { 47575 continue 47576 } 47577 if hi != 0 { 47578 *(*uint8)(unsafe.Pointer(aOut + uintptr(j))) = uint8((int32(c) - 1) << 4) 47579 hi = 0 47580 } else { 47581 *(*uint8)(unsafe.Pointer(aOut + uintptr(libc.PostIncInt32(&j, 1)))) |= uint8(int32(c) - 1) 47582 hi = 1 47583 } 47584 } 47585 return j 47586 } 47587 47588 func hexio_read(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47589 bp := tls.Alloc(48) 47590 defer tls.Free(48) 47591 47592 var got int32 47593 var zFile uintptr 47594 var zBuf uintptr 47595 var in uintptr 47596 47597 if objc != 4 { 47598 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32242) 47599 return TCL_ERROR 47600 } 47601 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 47602 return TCL_ERROR 47603 } 47604 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 47605 return TCL_ERROR 47606 } 47607 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 47608 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 44))*2+1) 47609 if zBuf == uintptr(0) { 47610 return TCL_ERROR 47611 } 47612 in = libc.Xfopen(tls, zFile, ts+4402) 47613 if in == uintptr(0) { 47614 in = libc.Xfopen(tls, zFile, ts+32262) 47615 } 47616 if in == uintptr(0) { 47617 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32264, zFile, 0)) 47618 return TCL_ERROR 47619 } 47620 libc.Xfseek(tls, in, int64(*(*int32)(unsafe.Pointer(bp + 40))), SEEK_SET) 47621 got = int32(libc.Xfread(tls, zBuf, uint64(1), uint64(*(*int32)(unsafe.Pointer(bp + 44))), in)) 47622 libc.Xfclose(tls, in) 47623 if got < 0 { 47624 got = 0 47625 } 47626 sqlite3TestBinToHex(tls, zBuf, got) 47627 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zBuf, 0)) 47628 sqlite3.Xsqlite3_free(tls, zBuf) 47629 return TCL_OK 47630 } 47631 47632 func hexio_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47633 bp := tls.Alloc(32) 47634 defer tls.Free(32) 47635 47636 var nOut int32 47637 var written int32 47638 var zFile uintptr 47639 var zIn uintptr 47640 var aOut uintptr 47641 var out uintptr 47642 47643 if objc != 4 { 47644 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32288) 47645 return TCL_ERROR 47646 } 47647 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 47648 return TCL_ERROR 47649 } 47650 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 47651 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) 47652 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp + 28))/2) 47653 if aOut == uintptr(0) { 47654 return TCL_ERROR 47655 } 47656 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp + 28)), aOut) 47657 out = libc.Xfopen(tls, zFile, ts+32312) 47658 if out == uintptr(0) { 47659 out = libc.Xfopen(tls, zFile, ts+32316) 47660 } 47661 if out == uintptr(0) { 47662 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32319, zFile, 0)) 47663 return TCL_ERROR 47664 } 47665 libc.Xfseek(tls, out, int64(*(*int32)(unsafe.Pointer(bp + 24))), SEEK_SET) 47666 written = int32(libc.Xfwrite(tls, aOut, uint64(1), uint64(nOut), out)) 47667 sqlite3.Xsqlite3_free(tls, aOut) 47668 libc.Xfclose(tls, out) 47669 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, written)) 47670 return TCL_OK 47671 } 47672 47673 func hexio_get_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47674 bp := tls.Alloc(8) 47675 defer tls.Free(8) 47676 47677 var val int32 47678 47679 var nOut int32 47680 var zIn uintptr 47681 var aOut uintptr 47682 47683 if objc != 2 { 47684 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32344) 47685 return TCL_ERROR 47686 } 47687 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 47688 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp))/2) 47689 if aOut == uintptr(0) { 47690 return TCL_ERROR 47691 } 47692 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp)), aOut) 47693 if nOut >= 4 { 47694 libc.Xmemcpy(tls, bp+4, aOut, uint64(4)) 47695 } else { 47696 libc.Xmemset(tls, bp+4, 0, uint64(unsafe.Sizeof([4]uint8{}))) 47697 libc.Xmemcpy(tls, bp+4+uintptr(4-nOut), aOut, uint64(nOut)) 47698 } 47699 sqlite3.Xsqlite3_free(tls, aOut) 47700 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))) 47701 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, val)) 47702 return TCL_OK 47703 } 47704 47705 func hexio_render_int16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47706 bp := tls.Alloc(14) 47707 defer tls.Free(14) 47708 47709 if objc != 2 { 47710 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 47711 return TCL_ERROR 47712 } 47713 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 47714 return TCL_ERROR 47715 } 47716 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 47717 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp))) 47718 sqlite3TestBinToHex(tls, bp+4, 2) 47719 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 4)) 47720 return TCL_OK 47721 } 47722 47723 func hexio_render_int32(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47724 bp := tls.Alloc(14) 47725 defer tls.Free(14) 47726 47727 if objc != 2 { 47728 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 47729 return TCL_ERROR 47730 } 47731 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 47732 return TCL_ERROR 47733 } 47734 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 24) 47735 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 16) 47736 *(*uint8)(unsafe.Pointer(bp + 4 + 2)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 47737 *(*uint8)(unsafe.Pointer(bp + 4 + 3)) = uint8(*(*int32)(unsafe.Pointer(bp))) 47738 sqlite3TestBinToHex(tls, bp+4, 4) 47739 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 8)) 47740 return TCL_OK 47741 } 47742 47743 func utf8_to_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47744 bp := tls.Alloc(16) 47745 defer tls.Free(16) 47746 47747 tcl.XTcl_AppendResult(tls, interp, 47748 libc.VaList(bp, ts+32352, 0)) 47749 return TCL_ERROR 47750 } 47751 47752 func getFts3Varint(tls *libc.TLS, p uintptr, v uintptr) int32 { 47753 var q uintptr = p 47754 var x sqlite_uint64 = uint64(0) 47755 var y sqlite_uint64 = uint64(1) 47756 for int32(*(*uint8)(unsafe.Pointer(q)))&0x80 == 0x80 { 47757 x = x + y*sqlite_uint64(int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))))&0x7f) 47758 y <<= 7 47759 } 47760 x = x + y*sqlite_uint64(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1)))) 47761 *(*sqlite_int64)(unsafe.Pointer(v)) = sqlite_int64(x) 47762 return int32((int64(q) - int64(p)) / 1) 47763 } 47764 47765 func putFts3Varint(tls *libc.TLS, p uintptr, v sqlite_int64) int32 { 47766 var q uintptr = p 47767 var vu sqlite_uint64 = sqlite_uint64(v) 47768 for __ccgo := true; __ccgo; __ccgo = vu != uint64(0) { 47769 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))) = uint8(vu&uint64(0x7f) | uint64(0x80)) 47770 vu >>= 7 47771 } 47772 *(*uint8)(unsafe.Pointer(q + libc.UintptrFromInt32(-1))) &= uint8(0x7f) 47773 47774 return int32((int64(q) - int64(p)) / 1) 47775 } 47776 47777 func read_fts3varint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47778 bp := tls.Alloc(16) 47779 defer tls.Free(16) 47780 47781 var zBlob uintptr 47782 47783 var nVal int32 47784 47785 if objc != 3 { 47786 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32406) 47787 return TCL_ERROR 47788 } 47789 zBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 47790 47791 nVal = getFts3Varint(tls, zBlob, bp+8) 47792 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))), 0) 47793 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nVal)) 47794 return TCL_OK 47795 } 47796 47797 func make_fts3record(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47798 bp := tls.Alloc(28) 47799 defer tls.Free(28) 47800 47801 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 47802 *(*int32)(unsafe.Pointer(bp)) = 0 47803 var aOut uintptr = uintptr(0) 47804 var nOut int32 = 0 47805 var nAlloc int32 = 0 47806 var i int32 47807 47808 if objc != 2 { 47809 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32419) 47810 return TCL_ERROR 47811 } 47812 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 47813 return TCL_ERROR 47814 } 47815 47816 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 47817 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+16) { 47818 if nOut+10 > nAlloc { 47819 var nNew int32 47820 if nAlloc != 0 { 47821 nNew = nAlloc * 2 47822 } else { 47823 nNew = 128 47824 } 47825 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 47826 if aNew == uintptr(0) { 47827 sqlite3.Xsqlite3_free(tls, aOut) 47828 return TCL_ERROR 47829 } 47830 aOut = aNew 47831 nAlloc = nNew 47832 } 47833 nOut = nOut + putFts3Varint(tls, aOut+uintptr(nOut), *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 47834 } else { 47835 *(*int32)(unsafe.Pointer(bp + 24)) = 0 47836 var zVal uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+24) 47837 for nOut+*(*int32)(unsafe.Pointer(bp + 24)) > nAlloc { 47838 var nNew int32 47839 if nAlloc != 0 { 47840 nNew = nAlloc * 2 47841 } else { 47842 nNew = 128 47843 } 47844 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 47845 if aNew == uintptr(0) { 47846 sqlite3.Xsqlite3_free(tls, aOut) 47847 return TCL_ERROR 47848 } 47849 aOut = aNew 47850 nAlloc = nNew 47851 } 47852 libc.Xmemcpy(tls, aOut+uintptr(nOut), zVal, uint64(*(*int32)(unsafe.Pointer(bp + 24)))) 47853 nOut = nOut + *(*int32)(unsafe.Pointer(bp + 24)) 47854 } 47855 } 47856 47857 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, aOut, nOut)) 47858 sqlite3.Xsqlite3_free(tls, aOut) 47859 return TCL_OK 47860 } 47861 47862 func Sqlitetest_hexio_Init(tls *libc.TLS, interp uintptr) int32 { 47863 var i int32 47864 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd8))/uint64(unsafe.Sizeof(struct { 47865 FzName uintptr 47866 FxProc uintptr 47867 }{})); i++ { 47868 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd8[i].FzName, aObjCmd8[i].FxProc, uintptr(0), uintptr(0)) 47869 } 47870 return TCL_OK 47871 } 47872 47873 var aObjCmd8 = [8]struct { 47874 FzName uintptr 47875 FxProc uintptr 47876 }{ 47877 {FzName: ts + 32424, FxProc: 0}, 47878 {FzName: ts + 32435, FxProc: 0}, 47879 {FzName: ts + 32447, FxProc: 0}, 47880 {FzName: ts + 32461, FxProc: 0}, 47881 {FzName: ts + 32480, FxProc: 0}, 47882 {FzName: ts + 32499, FxProc: 0}, 47883 {FzName: ts + 32512, FxProc: 0}, 47884 {FzName: ts + 32528, FxProc: 0}, 47885 } 47886 47887 type Wrapped = struct { 47888 Fpcache sqlite3_pcache_methods2 47889 Fmem sqlite3_mem_methods 47890 Fmutex sqlite3_mutex_methods 47891 Fmem_init int32 47892 Fmem_fail int32 47893 Fmutex_init int32 47894 Fmutex_fail int32 47895 Fpcache_init int32 47896 Fpcache_fail int32 47897 } 47898 47899 var wrapped Wrapped 47900 47901 func wrMemInit(tls *libc.TLS, pAppData uintptr) int32 { 47902 var rc int32 47903 if wrapped.Fmem_fail != 0 { 47904 rc = SQLITE_ERROR 47905 } else { 47906 rc = (*struct { 47907 f func(*libc.TLS, uintptr) int32 47908 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxInit})).f(tls, wrapped.Fmem.FpAppData) 47909 } 47910 if rc == SQLITE_OK { 47911 wrapped.Fmem_init = 1 47912 } 47913 return rc 47914 } 47915 47916 func wrMemShutdown(tls *libc.TLS, pAppData uintptr) { 47917 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxShutdown})).f(tls, wrapped.Fmem.FpAppData) 47918 wrapped.Fmem_init = 0 47919 } 47920 47921 func wrMemMalloc(tls *libc.TLS, n int32) uintptr { 47922 return (*struct { 47923 f func(*libc.TLS, int32) uintptr 47924 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxMalloc})).f(tls, n) 47925 } 47926 47927 func wrMemFree(tls *libc.TLS, p uintptr) { 47928 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxFree})).f(tls, p) 47929 } 47930 47931 func wrMemRealloc(tls *libc.TLS, p uintptr, n int32) uintptr { 47932 return (*struct { 47933 f func(*libc.TLS, uintptr, int32) uintptr 47934 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRealloc})).f(tls, p, n) 47935 } 47936 47937 func wrMemSize(tls *libc.TLS, p uintptr) int32 { 47938 return (*struct { 47939 f func(*libc.TLS, uintptr) int32 47940 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxSize})).f(tls, p) 47941 } 47942 47943 func wrMemRoundup(tls *libc.TLS, n int32) int32 { 47944 return (*struct{ f func(*libc.TLS, int32) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRoundup})).f(tls, n) 47945 } 47946 47947 func wrMutexInit(tls *libc.TLS) int32 { 47948 var rc int32 47949 if wrapped.Fmutex_fail != 0 { 47950 rc = SQLITE_ERROR 47951 } else { 47952 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexInit})).f(tls) 47953 } 47954 if rc == SQLITE_OK { 47955 wrapped.Fmutex_init = 1 47956 } 47957 return rc 47958 } 47959 47960 func wrMutexEnd(tls *libc.TLS) int32 { 47961 (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnd})).f(tls) 47962 wrapped.Fmutex_init = 0 47963 return SQLITE_OK 47964 } 47965 47966 func wrMutexAlloc(tls *libc.TLS, e int32) uintptr { 47967 return (*struct { 47968 f func(*libc.TLS, int32) uintptr 47969 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexAlloc})).f(tls, e) 47970 } 47971 47972 func wrMutexFree(tls *libc.TLS, p uintptr) { 47973 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexFree})).f(tls, p) 47974 } 47975 47976 func wrMutexEnter(tls *libc.TLS, p uintptr) { 47977 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnter})).f(tls, p) 47978 } 47979 47980 func wrMutexTry(tls *libc.TLS, p uintptr) int32 { 47981 return (*struct { 47982 f func(*libc.TLS, uintptr) int32 47983 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexTry})).f(tls, p) 47984 } 47985 47986 func wrMutexLeave(tls *libc.TLS, p uintptr) { 47987 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexLeave})).f(tls, p) 47988 } 47989 47990 func wrMutexHeld(tls *libc.TLS, p uintptr) int32 { 47991 return (*struct { 47992 f func(*libc.TLS, uintptr) int32 47993 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexHeld})).f(tls, p) 47994 } 47995 47996 func wrMutexNotheld(tls *libc.TLS, p uintptr) int32 { 47997 return (*struct { 47998 f func(*libc.TLS, uintptr) int32 47999 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexNotheld})).f(tls, p) 48000 } 48001 48002 func wrPCacheInit(tls *libc.TLS, pArg uintptr) int32 { 48003 var rc int32 48004 if wrapped.Fpcache_fail != 0 { 48005 rc = SQLITE_ERROR 48006 } else { 48007 rc = (*struct { 48008 f func(*libc.TLS, uintptr) int32 48009 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxInit})).f(tls, wrapped.Fpcache.FpArg) 48010 } 48011 if rc == SQLITE_OK { 48012 wrapped.Fpcache_init = 1 48013 } 48014 return rc 48015 } 48016 48017 func wrPCacheShutdown(tls *libc.TLS, pArg uintptr) { 48018 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxShutdown})).f(tls, wrapped.Fpcache.FpArg) 48019 wrapped.Fpcache_init = 0 48020 } 48021 48022 func wrPCacheCreate(tls *libc.TLS, a int32, b int32, c int32) uintptr { 48023 return (*struct { 48024 f func(*libc.TLS, int32, int32, int32) uintptr 48025 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCreate})).f(tls, a, b, c) 48026 } 48027 48028 func wrPCacheCachesize(tls *libc.TLS, p uintptr, n int32) { 48029 (*struct { 48030 f func(*libc.TLS, uintptr, int32) 48031 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCachesize})).f(tls, p, n) 48032 } 48033 48034 func wrPCachePagecount(tls *libc.TLS, p uintptr) int32 { 48035 return (*struct { 48036 f func(*libc.TLS, uintptr) int32 48037 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxPagecount})).f(tls, p) 48038 } 48039 48040 func wrPCacheFetch(tls *libc.TLS, p uintptr, a uint32, b int32) uintptr { 48041 return (*struct { 48042 f func(*libc.TLS, uintptr, uint32, int32) uintptr 48043 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxFetch})).f(tls, p, a, b) 48044 } 48045 48046 func wrPCacheUnpin(tls *libc.TLS, p uintptr, a uintptr, b int32) { 48047 (*struct { 48048 f func(*libc.TLS, uintptr, uintptr, int32) 48049 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxUnpin})).f(tls, p, a, b) 48050 } 48051 48052 func wrPCacheRekey(tls *libc.TLS, p uintptr, a uintptr, b uint32, c uint32) { 48053 (*struct { 48054 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 48055 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxRekey})).f(tls, p, a, b, c) 48056 } 48057 48058 func wrPCacheTruncate(tls *libc.TLS, p uintptr, a uint32) { 48059 (*struct { 48060 f func(*libc.TLS, uintptr, uint32) 48061 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxTruncate})).f(tls, p, a) 48062 } 48063 48064 func wrPCacheDestroy(tls *libc.TLS, p uintptr) { 48065 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxDestroy})).f(tls, p) 48066 } 48067 48068 func installInitWrappers(tls *libc.TLS) { 48069 bp := tls.Alloc(288) 48070 defer tls.Free(288) 48071 48072 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 48)) = sqlite3_mutex_methods{ 48073 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 { 48074 f func(*libc.TLS, int32) uintptr 48075 }{wrMutexAlloc})), 48076 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 { 48077 f func(*libc.TLS, uintptr) int32 48078 }{wrMutexTry})), 48079 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexLeave})), FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 48080 f func(*libc.TLS, uintptr) int32 48081 }{wrMutexHeld})), FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 48082 f func(*libc.TLS, uintptr) int32 48083 }{wrMutexNotheld})), 48084 } 48085 *(*sqlite3_pcache_methods2)(unsafe.Pointer(bp + 184)) = sqlite3_pcache_methods2{ 48086 FiVersion: 1, 48087 FxInit: *(*uintptr)(unsafe.Pointer(&struct { 48088 f func(*libc.TLS, uintptr) int32 48089 }{wrPCacheInit})), FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheShutdown})), FxCreate: *(*uintptr)(unsafe.Pointer(&struct { 48090 f func(*libc.TLS, int32, int32, int32) uintptr 48091 }{wrPCacheCreate})), 48092 FxCachesize: *(*uintptr)(unsafe.Pointer(&struct { 48093 f func(*libc.TLS, uintptr, int32) 48094 }{wrPCacheCachesize})), FxPagecount: *(*uintptr)(unsafe.Pointer(&struct { 48095 f func(*libc.TLS, uintptr) int32 48096 }{wrPCachePagecount})), FxFetch: *(*uintptr)(unsafe.Pointer(&struct { 48097 f func(*libc.TLS, uintptr, uint32, int32) uintptr 48098 }{wrPCacheFetch})), 48099 FxUnpin: *(*uintptr)(unsafe.Pointer(&struct { 48100 f func(*libc.TLS, uintptr, uintptr, int32) 48101 }{wrPCacheUnpin})), FxRekey: *(*uintptr)(unsafe.Pointer(&struct { 48102 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 48103 }{wrPCacheRekey})), FxTruncate: *(*uintptr)(unsafe.Pointer(&struct { 48104 f func(*libc.TLS, uintptr, uint32) 48105 }{wrPCacheTruncate})), 48106 FxDestroy: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheDestroy})), 48107 } 48108 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 120)) = sqlite3_mem_methods{ 48109 FxMalloc: *(*uintptr)(unsafe.Pointer(&struct { 48110 f func(*libc.TLS, int32) uintptr 48111 }{wrMemMalloc})), FxFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemFree})), FxRealloc: *(*uintptr)(unsafe.Pointer(&struct { 48112 f func(*libc.TLS, uintptr, int32) uintptr 48113 }{wrMemRealloc})), 48114 FxSize: *(*uintptr)(unsafe.Pointer(&struct { 48115 f func(*libc.TLS, uintptr) int32 48116 }{wrMemSize})), FxRoundup: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{wrMemRoundup})), FxInit: *(*uintptr)(unsafe.Pointer(&struct { 48117 f func(*libc.TLS, uintptr) int32 48118 }{wrMemInit})), 48119 FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemShutdown})), 48120 } 48121 48122 libc.Xmemset(tls, uintptr(unsafe.Pointer(&wrapped)), 0, uint64(unsafe.Sizeof(wrapped))) 48123 48124 sqlite3.Xsqlite3_shutdown(tls) 48125 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 48126 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 48127 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 48128 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+24, bp+48)) 48129 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+120)) 48130 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+40, bp+184)) 48131 } 48132 48133 func init_wrapper_install(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48134 bp := tls.Alloc(24) 48135 defer tls.Free(24) 48136 48137 var i int32 48138 installInitWrappers(tls) 48139 for i = 1; i < objc; i++ { 48140 var z uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 48141 if libc.Xstrcmp(tls, z, ts+32544) == 0 { 48142 wrapped.Fmem_fail = 1 48143 } else if libc.Xstrcmp(tls, z, ts+29150) == 0 { 48144 wrapped.Fmutex_fail = 1 48145 } else if libc.Xstrcmp(tls, z, ts+32548) == 0 { 48146 wrapped.Fpcache_fail = 1 48147 } else { 48148 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32555, z, ts+11945)) 48149 return TCL_ERROR 48150 } 48151 } 48152 return TCL_OK 48153 } 48154 48155 func init_wrapper_uninstall(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48156 bp := tls.Alloc(24) 48157 defer tls.Free(24) 48158 48159 if objc != 1 { 48160 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48161 return TCL_ERROR 48162 } 48163 48164 sqlite3.Xsqlite3_shutdown(tls) 48165 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 48166 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 48167 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 48168 return TCL_OK 48169 } 48170 48171 func init_wrapper_clear(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48172 if objc != 1 { 48173 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48174 return TCL_ERROR 48175 } 48176 48177 wrapped.Fmem_fail = 0 48178 wrapped.Fmutex_fail = 0 48179 wrapped.Fpcache_fail = 0 48180 return TCL_OK 48181 } 48182 48183 func init_wrapper_query(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48184 var pRet uintptr 48185 48186 if objc != 1 { 48187 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48188 return TCL_ERROR 48189 } 48190 48191 pRet = tcl.XTcl_NewObj(tls) 48192 if wrapped.Fmutex_init != 0 { 48193 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+29150, -1)) 48194 } 48195 if wrapped.Fmem_init != 0 { 48196 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32544, -1)) 48197 } 48198 if wrapped.Fpcache_init != 0 { 48199 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32548, -1)) 48200 } 48201 48202 tcl.XTcl_SetObjResult(tls, interp, pRet) 48203 return TCL_OK 48204 } 48205 48206 func Sqlitetest_init_Init(tls *libc.TLS, interp uintptr) int32 { 48207 var i int32 48208 48209 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd9))/uint64(unsafe.Sizeof(struct { 48210 FzName uintptr 48211 FxProc uintptr 48212 }{})); i++ { 48213 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd9[i].FzName, aObjCmd9[i].FxProc, uintptr(0), uintptr(0)) 48214 } 48215 48216 return TCL_OK 48217 } 48218 48219 var aObjCmd9 = [4]struct { 48220 FzName uintptr 48221 FxProc uintptr 48222 }{ 48223 {FzName: ts + 32575, FxProc: 0}, 48224 {FzName: ts + 32596, FxProc: 0}, 48225 {FzName: ts + 32615, FxProc: 0}, 48226 {FzName: ts + 32638, FxProc: 0}, 48227 } 48228 48229 type sqlite3_intarray1 = struct { 48230 Fn int32 48231 F__ccgo_pad1 [4]byte 48232 Fa uintptr 48233 FxFree uintptr 48234 } 48235 48236 type sqlite3_intarray = sqlite3_intarray1 48237 48238 type intarray_vtab1 = struct { 48239 Fbase sqlite3_vtab 48240 FpContent uintptr 48241 } 48242 48243 type intarray_vtab = intarray_vtab1 48244 type intarray_cursor1 = struct { 48245 Fbase sqlite3_vtab_cursor 48246 Fi int32 48247 F__ccgo_pad1 [4]byte 48248 } 48249 48250 type intarray_cursor = intarray_cursor1 48251 48252 func intarrayFree(tls *libc.TLS, p uintptr) { 48253 if (*sqlite3_intarray)(unsafe.Pointer(p)).FxFree != 0 { 48254 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(p)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(p)).Fa) 48255 } 48256 sqlite3.Xsqlite3_free(tls, p) 48257 } 48258 48259 func intarrayDestroy(tls *libc.TLS, p uintptr) int32 { 48260 var pVtab uintptr = p 48261 sqlite3.Xsqlite3_free(tls, pVtab) 48262 return 0 48263 } 48264 48265 func intarrayCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 48266 var rc int32 = SQLITE_NOMEM 48267 var pVtab uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_vtab{}))) 48268 48269 if pVtab != 0 { 48270 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(intarray_vtab{}))) 48271 (*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent = pAux 48272 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+32657) 48273 } 48274 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 48275 return rc 48276 } 48277 48278 func intarrayOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 48279 var rc int32 = SQLITE_NOMEM 48280 var pCur uintptr 48281 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_cursor{}))) 48282 if pCur != 0 { 48283 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(intarray_cursor{}))) 48284 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 48285 rc = SQLITE_OK 48286 } 48287 return rc 48288 } 48289 48290 func intarrayClose(tls *libc.TLS, cur uintptr) int32 { 48291 var pCur uintptr = cur 48292 sqlite3.Xsqlite3_free(tls, pCur) 48293 return SQLITE_OK 48294 } 48295 48296 func intarrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 48297 var pCur uintptr = cur 48298 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 48299 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 { 48300 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))) 48301 } 48302 return SQLITE_OK 48303 } 48304 48305 func intarrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 48306 var pCur uintptr = cur 48307 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*intarray_cursor)(unsafe.Pointer(pCur)).Fi) 48308 return SQLITE_OK 48309 } 48310 48311 func intarrayEof(tls *libc.TLS, cur uintptr) int32 { 48312 var pCur uintptr = cur 48313 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 48314 return libc.Bool32((*intarray_cursor)(unsafe.Pointer(pCur)).Fi >= (*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fn) 48315 } 48316 48317 func intarrayNext(tls *libc.TLS, cur uintptr) int32 { 48318 var pCur uintptr = cur 48319 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi++ 48320 return SQLITE_OK 48321 } 48322 48323 func intarrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 48324 var pCur uintptr = pVtabCursor 48325 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi = 0 48326 return SQLITE_OK 48327 } 48328 48329 func intarrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 48330 return SQLITE_OK 48331 } 48332 48333 var intarrayModule = sqlite3_module{ 48334 FxCreate: 0, 48335 FxConnect: 0, 48336 FxBestIndex: 0, 48337 FxDisconnect: 0, 48338 FxDestroy: 0, 48339 FxOpen: 0, 48340 FxClose: 0, 48341 FxFilter: 0, 48342 FxNext: 0, 48343 FxEof: 0, 48344 FxColumn: 0, 48345 FxRowid: 0, 48346 } 48347 48348 func sqlite3_intarray_create(tls *libc.TLS, db uintptr, zName uintptr, ppReturn uintptr) int32 { 48349 bp := tls.Alloc(16) 48350 defer tls.Free(16) 48351 48352 var rc int32 = SQLITE_OK 48353 var p uintptr 48354 48355 *(*uintptr)(unsafe.Pointer(ppReturn)) = libc.AssignUintptr(&p, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_intarray{})))) 48356 if p == uintptr(0) { 48357 return SQLITE_NOMEM 48358 } 48359 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(sqlite3_intarray{}))) 48360 rc = sqlite3.Xsqlite3_create_module_v2(tls, db, zName, uintptr(unsafe.Pointer(&intarrayModule)), p, 48361 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{intarrayFree}))) 48362 if rc == SQLITE_OK { 48363 var zSql uintptr 48364 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+32699, 48365 libc.VaList(bp, zName, zName)) 48366 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 48367 sqlite3.Xsqlite3_free(tls, zSql) 48368 } 48369 return rc 48370 } 48371 48372 func sqlite3_intarray_bind(tls *libc.TLS, pIntArray uintptr, nElements int32, aElements uintptr, xFree uintptr) int32 { 48373 if (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree != 0 { 48374 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa) 48375 } 48376 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fn = nElements 48377 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa = aElements 48378 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree = xFree 48379 return SQLITE_OK 48380 } 48381 48382 func test_intarray_create(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48383 bp := tls.Alloc(148) 48384 defer tls.Free(148) 48385 48386 var zName uintptr 48387 48388 var rc int32 = SQLITE_OK 48389 48390 if objc != 3 { 48391 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 48392 return TCL_ERROR 48393 } 48394 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 48395 return TCL_ERROR 48396 } 48397 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 48398 rc = sqlite3_intarray_create(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, bp+40) 48399 if rc != SQLITE_OK { 48400 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 48401 return TCL_ERROR 48402 } 48403 sqlite3TestMakePointerStr(tls, interp, bp+48, *(*uintptr)(unsafe.Pointer(bp + 40))) 48404 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, bp+48, uintptr(0))) 48405 return TCL_OK 48406 } 48407 48408 func test_intarray_bind(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48409 bp := tls.Alloc(40) 48410 defer tls.Free(40) 48411 48412 var pArray uintptr 48413 var rc int32 = SQLITE_OK 48414 var i int32 48415 var n int32 48416 var a uintptr 48417 48418 if objc < 2 { 48419 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32737) 48420 return TCL_ERROR 48421 } 48422 pArray = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 48423 n = objc - 2 48424 a = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(n)) 48425 if a == uintptr(0) { 48426 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32746, uintptr(0))) 48427 return TCL_ERROR 48428 } 48429 for i = 0; i < n; i++ { 48430 *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) = int64(0) 48431 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + uintptr(i+2)*8)), bp+32) 48432 *(*sqlite3_int64)(unsafe.Pointer(a + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) 48433 } 48434 rc = sqlite3_intarray_bind(tls, pArray, n, a, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 48435 if rc != SQLITE_OK { 48436 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 48437 return TCL_ERROR 48438 } 48439 return TCL_OK 48440 } 48441 48442 func Sqlitetestintarray_Init(tls *libc.TLS, interp uintptr) int32 { 48443 var i int32 48444 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd10))/uint64(unsafe.Sizeof(struct { 48445 FzName uintptr 48446 FxProc uintptr 48447 FclientData uintptr 48448 }{})); i++ { 48449 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd10[i].FzName, 48450 aObjCmd10[i].FxProc, aObjCmd10[i].FclientData, uintptr(0)) 48451 } 48452 return TCL_OK 48453 } 48454 48455 var aObjCmd10 = [2]struct { 48456 FzName uintptr 48457 FxProc uintptr 48458 FclientData uintptr 48459 }{ 48460 {FzName: ts + 32759, FxProc: 0}, 48461 {FzName: ts + 32783, FxProc: 0}, 48462 } 48463 48464 type jt_file1 = struct { 48465 Fbase sqlite3_file 48466 FzName uintptr 48467 Fflags int32 48468 FeLock int32 48469 FnPage u32 48470 FnPagesize u32 48471 FpWritable uintptr 48472 FaCksum uintptr 48473 FnSync int32 48474 F__ccgo_pad1 [4]byte 48475 FiMaxOff sqlite3_int64 48476 FpNext uintptr 48477 FpReal uintptr 48478 } 48479 48480 type jt_file = jt_file1 48481 48482 var jt_vfs = sqlite3_vfs{ 48483 FiVersion: 2, 48484 FszOsFile: int32(unsafe.Sizeof(jt_file{})), 48485 FmxPathname: JT_MAX_PATHNAME, 48486 FzName: ts + 32805, 48487 FxOpen: 0, 48488 FxDelete: 0, 48489 FxAccess: 0, 48490 FxFullPathname: 0, 48491 FxDlOpen: 0, 48492 FxDlError: 0, 48493 FxDlSym: 0, 48494 FxDlClose: 0, 48495 FxRandomness: 0, 48496 FxSleep: 0, 48497 FxCurrentTime: 0, 48498 FxGetLastError: 0, 48499 FxCurrentTimeInt64: 0, 48500 } 48501 48502 var jt_io_methods = sqlite3_io_methods{ 48503 FiVersion: 1, 48504 FxClose: 0, 48505 FxRead: 0, 48506 FxWrite: 0, 48507 FxTruncate: 0, 48508 FxSync: 0, 48509 FxFileSize: 0, 48510 FxLock: 0, 48511 FxUnlock: 0, 48512 FxCheckReservedLock: 0, 48513 FxFileControl: 0, 48514 FxSectorSize: 0, 48515 FxDeviceCharacteristics: 0, 48516 } 48517 48518 type JtGlobal = struct { 48519 FpVfs uintptr 48520 FpList uintptr 48521 } 48522 48523 var g2 = JtGlobal{} 48524 48525 func enterJtMutex(tls *libc.TLS) { 48526 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 48527 } 48528 48529 func leaveJtMutex(tls *libc.TLS) { 48530 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 48531 } 48532 48533 func stop_ioerr_simulation(tls *libc.TLS, piSave uintptr, piSave2 uintptr) { 48534 *(*int32)(unsafe.Pointer(piSave)) = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 48535 *(*int32)(unsafe.Pointer(piSave2)) = sqlite3.Xsqlite3_io_error_hit 48536 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(-1)) 48537 sqlite3.Xsqlite3_io_error_hit = 0 48538 } 48539 48540 func start_ioerr_simulation(tls *libc.TLS, iSave int32, iSave2 int32) { 48541 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, iSave) 48542 sqlite3.Xsqlite3_io_error_hit = iSave2 48543 } 48544 48545 func closeTransaction(tls *libc.TLS, p uintptr) { 48546 sqlite3.Xsqlite3BitvecDestroy(tls, (*jt_file)(unsafe.Pointer(p)).FpWritable) 48547 sqlite3.Xsqlite3_free(tls, (*jt_file)(unsafe.Pointer(p)).FaCksum) 48548 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 48549 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 48550 (*jt_file)(unsafe.Pointer(p)).FnSync = 0 48551 } 48552 48553 func jtClose(tls *libc.TLS, pFile uintptr) int32 { 48554 var pp uintptr 48555 var p uintptr = pFile 48556 48557 closeTransaction(tls, p) 48558 enterJtMutex(tls) 48559 if (*jt_file)(unsafe.Pointer(p)).FzName != 0 { 48560 for pp = uintptr(unsafe.Pointer(&g2)) + 8; *(*uintptr)(unsafe.Pointer(pp)) != p; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 48561 } 48562 *(*uintptr)(unsafe.Pointer(pp)) = (*jt_file)(unsafe.Pointer(p)).FpNext 48563 } 48564 leaveJtMutex(tls) 48565 sqlite3.Xsqlite3OsClose(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48566 return SQLITE_OK 48567 } 48568 48569 func jtRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48570 var p uintptr = pFile 48571 return sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48572 } 48573 48574 func locateDatabaseHandle(tls *libc.TLS, zJournal uintptr, noLock int32) uintptr { 48575 var pMain uintptr = uintptr(0) 48576 enterJtMutex(tls) 48577 for pMain = g2.FpList; pMain != 0; pMain = (*jt_file)(unsafe.Pointer(pMain)).FpNext { 48578 var nName int32 = int32(libc.Xstrlen(tls, zJournal) - libc.Xstrlen(tls, ts+32808)) 48579 if (*jt_file)(unsafe.Pointer(pMain)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && 48580 int32(libc.Xstrlen(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName)) == nName && 48581 0 == libc.Xmemcmp(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName, zJournal, uint64(nName)) && 48582 ((*jt_file)(unsafe.Pointer(pMain)).FeLock >= SQLITE_LOCK_RESERVED || noLock != 0) { 48583 break 48584 } 48585 } 48586 leaveJtMutex(tls) 48587 return pMain 48588 } 48589 48590 func decodeUint32(tls *libc.TLS, z uintptr) u32 { 48591 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)))) 48592 } 48593 48594 func genCksum(tls *libc.TLS, z uintptr, n int32) u32 { 48595 var i int32 48596 var cksum u32 = u32(0) 48597 for i = 0; i < n; i++ { 48598 cksum = cksum + u32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) + cksum<<3 48599 } 48600 return cksum 48601 } 48602 48603 func decodeJournalHdr(tls *libc.TLS, zBuf uintptr, pnRec uintptr, pnPage uintptr, pnSector uintptr, pnPagesize uintptr) int32 { 48604 bp := tls.Alloc(8) 48605 defer tls.Free(8) 48606 48607 *(*[8]uint8)(unsafe.Pointer(bp)) = [8]uint8{uint8(0xd9), uint8(0xd5), uint8(0x05), uint8(0xf9), uint8(0x20), uint8(0xa1), uint8(0x63), uint8(0xd7)} 48608 if libc.Xmemcmp(tls, bp, zBuf, uint64(8)) != 0 { 48609 return SQLITE_ERROR 48610 } 48611 if pnRec != 0 { 48612 *(*u32)(unsafe.Pointer(pnRec)) = decodeUint32(tls, zBuf+8) 48613 } 48614 if pnPage != 0 { 48615 *(*u32)(unsafe.Pointer(pnPage)) = decodeUint32(tls, zBuf+16) 48616 } 48617 if pnSector != 0 { 48618 *(*u32)(unsafe.Pointer(pnSector)) = decodeUint32(tls, zBuf+20) 48619 } 48620 if pnPagesize != 0 { 48621 *(*u32)(unsafe.Pointer(pnPagesize)) = decodeUint32(tls, zBuf+24) 48622 } 48623 return SQLITE_OK 48624 } 48625 48626 func openTransaction(tls *libc.TLS, pMain uintptr, pJournal uintptr) int32 { 48627 bp := tls.Alloc(8) 48628 defer tls.Free(8) 48629 48630 var aData uintptr 48631 var p uintptr = (*jt_file)(unsafe.Pointer(pMain)).FpReal 48632 var rc int32 = SQLITE_OK 48633 48634 closeTransaction(tls, pMain) 48635 aData = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48636 (*jt_file)(unsafe.Pointer(pMain)).FpWritable = sqlite3.Xsqlite3BitvecCreate(tls, (*jt_file)(unsafe.Pointer(pMain)).FnPage) 48637 (*jt_file)(unsafe.Pointer(pMain)).FaCksum = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(u32(0)))*uint64((*jt_file)(unsafe.Pointer(pMain)).FnPage+u32(1)))) 48638 (*jt_file)(unsafe.Pointer(pJournal)).FiMaxOff = int64(0) 48639 48640 if !(int32((*jt_file)(unsafe.Pointer(pMain)).FpWritable) != 0) || !(int32((*jt_file)(unsafe.Pointer(pMain)).FaCksum) != 0) || !(aData != 0) { 48641 rc = SQLITE_IOERR | int32(12)<<8 48642 } else if (*jt_file)(unsafe.Pointer(pMain)).FnPage > u32(0) { 48643 var iTrunk u32 48644 48645 stop_ioerr_simulation(tls, bp, bp+4) 48646 48647 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), int64(0)) 48648 if rc == SQLITE_OK { 48649 var nDbsize u32 = decodeUint32(tls, aData+28) 48650 if nDbsize > u32(0) && libc.Xmemcmp(tls, aData+24, aData+92, uint64(4)) == 0 { 48651 var iPg u32 48652 for iPg = nDbsize + u32(1); iPg <= (*jt_file)(unsafe.Pointer(pMain)).FnPage; iPg++ { 48653 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, iPg) 48654 } 48655 } 48656 } 48657 iTrunk = decodeUint32(tls, aData+32) 48658 for rc == SQLITE_OK && iTrunk > u32(0) { 48659 var nLeaf u32 48660 var iLeaf u32 48661 var iOff sqlite3_int64 = i64(iTrunk-u32(1)) * i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 48662 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 48663 nLeaf = decodeUint32(tls, aData+4) 48664 for iLeaf = u32(0); rc == SQLITE_OK && iLeaf < nLeaf; iLeaf++ { 48665 var pgno u32 = decodeUint32(tls, aData+uintptr(u32(8)+u32(4)*iLeaf)) 48666 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 48667 } 48668 iTrunk = decodeUint32(tls, aData) 48669 } 48670 48671 if rc == SQLITE_OK { 48672 var ii int32 48673 for ii = 0; rc == SQLITE_OK && ii < int32((*jt_file)(unsafe.Pointer(pMain)).FnPage); ii++ { 48674 var iOff i64 = i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) * i64(ii) 48675 if iOff == i64(sqlite3.Xsqlite3PendingByte) { 48676 continue 48677 } 48678 rc = sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(pMain)).FpReal, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 48679 *(*u32)(unsafe.Pointer((*jt_file)(unsafe.Pointer(pMain)).FaCksum + uintptr(ii)*4)) = genCksum(tls, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48680 if ii+1 == int32((*jt_file)(unsafe.Pointer(pMain)).FnPage) && rc == SQLITE_IOERR|int32(2)<<8 { 48681 rc = SQLITE_OK 48682 } 48683 } 48684 } 48685 48686 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 48687 } 48688 48689 sqlite3.Xsqlite3_free(tls, aData) 48690 return rc 48691 } 48692 48693 func readJournalFile(tls *libc.TLS, p uintptr, pMain uintptr) int32 { 48694 bp := tls.Alloc(52) 48695 defer tls.Free(52) 48696 48697 var rc int32 48698 48699 var pReal uintptr 48700 var iOff sqlite3_int64 48701 var iSize sqlite3_int64 48702 var aPage uintptr 48703 48704 var cksum u32 48705 _ = cksum 48706 var pgno u32 48707 48708 var ii u32 48709 rc = SQLITE_OK 48710 pReal = (*jt_file)(unsafe.Pointer(p)).FpReal 48711 iOff = int64(0) 48712 iSize = (*jt_file)(unsafe.Pointer(p)).FiMaxOff 48713 48714 aPage = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48715 if !!(aPage != 0) { 48716 goto __1 48717 } 48718 return SQLITE_IOERR | int32(12)<<8 48719 __1: 48720 ; 48721 stop_ioerr_simulation(tls, bp, bp+4) 48722 48723 __2: 48724 if !(rc == SQLITE_OK && iOff < iSize) { 48725 goto __3 48726 } 48727 48728 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 48729 if !(rc != SQLITE_OK || 48730 decodeJournalHdr(tls, bp+8, bp+36, bp+40, bp+44, bp+48) != 0) { 48731 goto __4 48732 } 48733 goto finish_rjf 48734 __4: 48735 ; 48736 iOff = iOff + sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) 48737 48738 if !(*(*u32)(unsafe.Pointer(bp + 36)) == u32(0)) { 48739 goto __5 48740 } 48741 48742 if !(iSize >= iOff+sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44)))) { 48743 goto __6 48744 } 48745 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 48746 if !(rc != SQLITE_OK || 0 == decodeJournalHdr(tls, bp+8, uintptr(0), uintptr(0), uintptr(0), uintptr(0))) { 48747 goto __7 48748 } 48749 goto __2 48750 __7: 48751 ; 48752 __6: 48753 ; 48754 *(*u32)(unsafe.Pointer(bp + 36)) = u32((iSize - iOff) / sqlite3_int64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize+u32(8))) 48755 __5: 48756 ; 48757 ii = u32(0) 48758 __8: 48759 if !(rc == SQLITE_OK && ii < *(*u32)(unsafe.Pointer(bp + 36)) && iOff < iSize) { 48760 goto __10 48761 } 48762 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 4, iOff) 48763 if !(rc == SQLITE_OK) { 48764 goto __11 48765 } 48766 pgno = decodeUint32(tls, bp+8) 48767 if !(pgno > u32(0) && pgno <= (*jt_file)(unsafe.Pointer(pMain)).FnPage) { 48768 goto __12 48769 } 48770 if !(0 == sqlite3.Xsqlite3BitvecTest(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno)) { 48771 goto __13 48772 } 48773 rc = sqlite3.Xsqlite3OsRead(tls, pReal, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff+int64(4)) 48774 if !(rc == SQLITE_OK) { 48775 goto __14 48776 } 48777 cksum = genCksum(tls, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48778 48779 __14: 48780 ; 48781 __13: 48782 ; 48783 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 48784 __12: 48785 ; 48786 iOff = iOff + sqlite3_int64(u32(8)+(*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 48787 __11: 48788 ; 48789 goto __9 48790 __9: 48791 ii++ 48792 goto __8 48793 goto __10 48794 __10: 48795 ; 48796 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))) 48797 goto __2 48798 __3: 48799 ; 48800 finish_rjf: 48801 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 48802 sqlite3.Xsqlite3_free(tls, aPage) 48803 if !(rc == SQLITE_IOERR|int32(2)<<8) { 48804 goto __15 48805 } 48806 rc = SQLITE_OK 48807 __15: 48808 ; 48809 return rc 48810 } 48811 48812 func jtWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48813 var rc int32 48814 var p uintptr = pFile 48815 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 48816 if iOfst == int64(0) { 48817 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48818 48819 if iAmt == 28 { 48820 closeTransaction(tls, pMain) 48821 } else if iAmt != 12 { 48822 var z uintptr = zBuf 48823 (*jt_file)(unsafe.Pointer(pMain)).FnPage = decodeUint32(tls, z+16) 48824 (*jt_file)(unsafe.Pointer(pMain)).FnPagesize = decodeUint32(tls, z+24) 48825 if SQLITE_OK != libc.AssignInt32(&rc, openTransaction(tls, pMain, p)) { 48826 return rc 48827 } 48828 } 48829 } 48830 if (*jt_file)(unsafe.Pointer(p)).FiMaxOff < iOfst+sqlite_int64(iAmt) { 48831 (*jt_file)(unsafe.Pointer(p)).FiMaxOff = iOfst + sqlite_int64(iAmt) 48832 } 48833 } 48834 48835 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 48836 if iAmt < int32((*jt_file)(unsafe.Pointer(p)).FnPagesize) && 48837 (*jt_file)(unsafe.Pointer(p)).FnPagesize%u32(iAmt) == u32(0) && 48838 iOfst >= sqlite_int64(sqlite3.Xsqlite3PendingByte+512) && 48839 iOfst+sqlite_int64(iAmt) <= sqlite_int64(u32(sqlite3.Xsqlite3PendingByte)+(*jt_file)(unsafe.Pointer(p)).FnPagesize) { 48840 } else { 48841 var pgno u32 = u32(iOfst/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)) 48842 _ = pgno 48843 48844 } 48845 } 48846 48847 rc = sqlite3.Xsqlite3OsWrite(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48848 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && iAmt == 12 { 48849 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48850 var rc2 int32 = readJournalFile(tls, p, pMain) 48851 if rc == SQLITE_OK { 48852 rc = rc2 48853 } 48854 } 48855 return rc 48856 } 48857 48858 func jtTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 48859 var p uintptr = pFile 48860 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && size == int64(0) { 48861 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48862 closeTransaction(tls, pMain) 48863 } 48864 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 48865 var pgno u32 48866 var locking_page u32 = u32(sqlite3.Xsqlite3PendingByte)/(*jt_file)(unsafe.Pointer(p)).FnPagesize + u32(1) 48867 _ = locking_page 48868 for pgno = u32(size/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)); pgno <= (*jt_file)(unsafe.Pointer(p)).FnPage; pgno++ { 48869 } 48870 } 48871 return sqlite3.Xsqlite3OsTruncate(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, size) 48872 } 48873 48874 func jtSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 48875 var p uintptr = pFile 48876 48877 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 48878 var rc int32 48879 var pMain uintptr 48880 48881 pMain = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 48882 48883 if pMain != 0 && (*jt_file)(unsafe.Pointer(pMain)).FpWritable != 0 { 48884 (*jt_file)(unsafe.Pointer(pMain)).FnSync++ 48885 rc = readJournalFile(tls, p, pMain) 48886 if rc != SQLITE_OK { 48887 return rc 48888 } 48889 } 48890 } 48891 48892 return sqlite3.Xsqlite3OsSync(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, flags) 48893 } 48894 48895 func jtFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 48896 var p uintptr = pFile 48897 return sqlite3.Xsqlite3OsFileSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pSize) 48898 } 48899 48900 func jtLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48901 var rc int32 48902 var p uintptr = pFile 48903 rc = sqlite3.Xsqlite3OsLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 48904 if rc == SQLITE_OK && eLock > (*jt_file)(unsafe.Pointer(p)).FeLock { 48905 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 48906 } 48907 return rc 48908 } 48909 48910 func jtUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48911 var rc int32 48912 var p uintptr = pFile 48913 rc = sqlite3.Xsqlite3OsUnlock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 48914 if rc == SQLITE_OK && eLock < (*jt_file)(unsafe.Pointer(p)).FeLock { 48915 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 48916 } 48917 return rc 48918 } 48919 48920 func jtCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 48921 var p uintptr = pFile 48922 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pResOut) 48923 } 48924 48925 func jtFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 48926 var p uintptr = pFile 48927 return (*struct { 48928 f func(*libc.TLS, uintptr, int32, uintptr) int32 48929 })(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) 48930 } 48931 48932 func jtSectorSize(tls *libc.TLS, pFile uintptr) int32 { 48933 var p uintptr = pFile 48934 return sqlite3.Xsqlite3OsSectorSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48935 } 48936 48937 func jtDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 48938 var p uintptr = pFile 48939 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48940 } 48941 48942 func jtOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 48943 var rc int32 48944 var p uintptr = pFile 48945 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 48946 (*jt_file)(unsafe.Pointer(p)).FpReal = p + 1*80 48947 (*sqlite3_file)(unsafe.Pointer((*jt_file)(unsafe.Pointer(p)).FpReal)).FpMethods = uintptr(0) 48948 rc = sqlite3.Xsqlite3OsOpen(tls, g2.FpVfs, zName, (*jt_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 48949 48950 if rc == SQLITE_OK { 48951 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&jt_io_methods)) 48952 (*jt_file)(unsafe.Pointer(p)).FeLock = 0 48953 (*jt_file)(unsafe.Pointer(p)).FzName = zName 48954 (*jt_file)(unsafe.Pointer(p)).Fflags = flags 48955 (*jt_file)(unsafe.Pointer(p)).FpNext = uintptr(0) 48956 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 48957 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 48958 enterJtMutex(tls) 48959 if zName != 0 { 48960 (*jt_file)(unsafe.Pointer(p)).FpNext = g2.FpList 48961 g2.FpList = p 48962 } 48963 leaveJtMutex(tls) 48964 } 48965 return rc 48966 } 48967 48968 func jtDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 48969 var nPath int32 = int32(libc.Xstrlen(tls, zPath)) 48970 if nPath > 8 && 0 == libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nPath-8)) { 48971 var pMain uintptr = locateDatabaseHandle(tls, zPath, 0) 48972 if pMain != 0 { 48973 closeTransaction(tls, pMain) 48974 } 48975 } 48976 48977 return sqlite3.Xsqlite3OsDelete(tls, g2.FpVfs, zPath, dirSync) 48978 } 48979 48980 func jtAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 48981 return sqlite3.Xsqlite3OsAccess(tls, g2.FpVfs, zPath, flags, pResOut) 48982 } 48983 48984 func jtFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 48985 return sqlite3.Xsqlite3OsFullPathname(tls, g2.FpVfs, zPath, nOut, zOut) 48986 } 48987 48988 func jtDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 48989 return (*struct { 48990 f func(*libc.TLS, uintptr, uintptr) uintptr 48991 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlOpen})).f(tls, g2.FpVfs, zPath) 48992 } 48993 48994 func jtDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 48995 (*struct { 48996 f func(*libc.TLS, uintptr, int32, uintptr) 48997 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlError})).f(tls, g2.FpVfs, nByte, zErrMsg) 48998 } 48999 49000 func jtDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 49001 return (*struct { 49002 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 49003 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlSym})).f(tls, g2.FpVfs, p, zSym) 49004 } 49005 49006 func jtDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 49007 (*struct { 49008 f func(*libc.TLS, uintptr, uintptr) 49009 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlClose})).f(tls, g2.FpVfs, pHandle) 49010 } 49011 49012 func jtRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 49013 return sqlite3.Xsqlite3OsRandomness(tls, g2.FpVfs, nByte, zBufOut) 49014 } 49015 49016 func jtSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 49017 return sqlite3.Xsqlite3OsSleep(tls, g2.FpVfs, nMicro) 49018 } 49019 49020 func jtCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 49021 return (*struct { 49022 f func(*libc.TLS, uintptr, uintptr) int32 49023 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTime})).f(tls, g2.FpVfs, pTimeOut) 49024 } 49025 49026 func jtCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 49027 return (*struct { 49028 f func(*libc.TLS, uintptr, uintptr) int32 49029 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64})).f(tls, g2.FpVfs, pTimeOut) 49030 } 49031 49032 func jtGetLastError(tls *libc.TLS, pVfs uintptr, n int32, z uintptr) int32 { 49033 return (*struct { 49034 f func(*libc.TLS, uintptr, int32, uintptr) int32 49035 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxGetLastError})).f(tls, g2.FpVfs, n, z) 49036 } 49037 49038 func jt_register(tls *libc.TLS, zWrap uintptr, isDefault int32) int32 { 49039 g2.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, zWrap) 49040 if g2.FpVfs == uintptr(0) { 49041 return SQLITE_ERROR 49042 } 49043 jt_vfs.FszOsFile = int32(uint64(unsafe.Sizeof(jt_file{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FszOsFile)) 49044 if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FiVersion == 1 { 49045 jt_vfs.FiVersion = 1 49046 } else if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64 == uintptr(0) { 49047 jt_vfs.FxCurrentTimeInt64 = uintptr(0) 49048 } 49049 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&jt_vfs)), isDefault) 49050 return SQLITE_OK 49051 } 49052 49053 func jt_unregister(tls *libc.TLS) { 49054 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&jt_vfs))) 49055 } 49056 49057 type MemFault = struct { 49058 FiCountdown int32 49059 FnRepeat int32 49060 FnBenign int32 49061 FnFail int32 49062 FnOkBefore int32 49063 FnOkAfter int32 49064 Fenable u8 49065 F__ccgo_pad1 [3]byte 49066 FisInstalled int32 49067 FisBenignMode int32 49068 F__ccgo_pad2 [4]byte 49069 Fm sqlite3_mem_methods 49070 } 49071 49072 var memfault MemFault 49073 49074 func sqlite3Fault(tls *libc.TLS) { 49075 cnt1++ 49076 } 49077 49078 var cnt1 int32 = 0 49079 49080 func sqlite3FirstFault(tls *libc.TLS) { 49081 cnt2++ 49082 } 49083 49084 var cnt2 int32 = 0 49085 49086 func faultsimStep(tls *libc.TLS) int32 { 49087 if !(int32(memfault.Fenable) != 0) { 49088 memfault.FnOkAfter++ 49089 return 0 49090 } 49091 if memfault.FiCountdown > 0 { 49092 memfault.FiCountdown-- 49093 memfault.FnOkBefore++ 49094 return 0 49095 } 49096 if memfault.FnFail == 0 { 49097 sqlite3FirstFault(tls) 49098 } 49099 sqlite3Fault(tls) 49100 memfault.FnFail++ 49101 if memfault.FisBenignMode > 0 { 49102 memfault.FnBenign++ 49103 } 49104 memfault.FnRepeat-- 49105 if memfault.FnRepeat <= 0 { 49106 memfault.Fenable = u8(0) 49107 } 49108 return 1 49109 } 49110 49111 func faultsimMalloc(tls *libc.TLS, n int32) uintptr { 49112 var p uintptr = uintptr(0) 49113 if !(faultsimStep(tls) != 0) { 49114 p = (*struct { 49115 f func(*libc.TLS, int32) uintptr 49116 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxMalloc})).f(tls, n) 49117 } 49118 return p 49119 } 49120 49121 func faultsimRealloc(tls *libc.TLS, pOld uintptr, n int32) uintptr { 49122 var p uintptr = uintptr(0) 49123 if !(faultsimStep(tls) != 0) { 49124 p = (*struct { 49125 f func(*libc.TLS, uintptr, int32) uintptr 49126 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxRealloc})).f(tls, pOld, n) 49127 } 49128 return p 49129 } 49130 49131 func faultsimConfig(tls *libc.TLS, nDelay int32, nRepeat int32) { 49132 memfault.FiCountdown = nDelay 49133 memfault.FnRepeat = nRepeat 49134 memfault.FnBenign = 0 49135 memfault.FnFail = 0 49136 memfault.FnOkBefore = 0 49137 memfault.FnOkAfter = 0 49138 memfault.Fenable = u8(libc.Bool32(nDelay >= 0)) 49139 49140 memfault.FisBenignMode = 0 49141 } 49142 49143 func faultsimFailures(tls *libc.TLS) int32 { 49144 return memfault.FnFail 49145 } 49146 49147 func faultsimBenignFailures(tls *libc.TLS) int32 { 49148 return memfault.FnBenign 49149 } 49150 49151 func faultsimPending(tls *libc.TLS) int32 { 49152 if memfault.Fenable != 0 { 49153 return memfault.FiCountdown 49154 } else { 49155 return -1 49156 } 49157 return int32(0) 49158 } 49159 49160 func faultsimBeginBenign(tls *libc.TLS) { 49161 memfault.FisBenignMode++ 49162 } 49163 49164 func faultsimEndBenign(tls *libc.TLS) { 49165 memfault.FisBenignMode-- 49166 } 49167 49168 func faultsimInstall(tls *libc.TLS, install int32) int32 { 49169 bp := tls.Alloc(200) 49170 defer tls.Free(200) 49171 49172 var rc int32 49173 49174 install = func() int32 { 49175 if install != 0 { 49176 return 1 49177 } 49178 return 0 49179 }() 49180 49181 if install == memfault.FisInstalled { 49182 return SQLITE_ERROR 49183 } 49184 49185 if install != 0 { 49186 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp, uintptr(unsafe.Pointer(&memfault))+40)) 49187 49188 if rc == SQLITE_OK { 49189 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)) = memfault.Fm 49190 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxMalloc = *(*uintptr)(unsafe.Pointer(&struct { 49191 f func(*libc.TLS, int32) uintptr 49192 }{faultsimMalloc})) 49193 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxRealloc = *(*uintptr)(unsafe.Pointer(&struct { 49194 f func(*libc.TLS, uintptr, int32) uintptr 49195 }{faultsimRealloc})) 49196 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, bp+72)) 49197 } 49198 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 49199 libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimBeginBenign})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimEndBenign})))) 49200 } else { 49201 libc.Xmemset(tls, bp+136, 0, uint64(unsafe.Sizeof(sqlite3_mem_methods{}))) 49202 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+136)) 49203 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+40, bp+136)) 49204 49205 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+48, uintptr(unsafe.Pointer(&memfault))+40)) 49206 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 49207 libc.VaList(bp+56, uintptr(0), uintptr(0))) 49208 } 49209 49210 if rc == SQLITE_OK { 49211 memfault.FisInstalled = 1 49212 } 49213 return rc 49214 } 49215 49216 func pointerToText(tls *libc.TLS, p uintptr, z uintptr) { 49217 bp := tls.Alloc(20) 49218 defer tls.Free(20) 49219 *(*uintptr)(unsafe.Pointer(bp + 8)) = p 49220 49221 var i int32 49222 var k int32 49223 49224 if *(*uintptr)(unsafe.Pointer(bp + 8)) == uintptr(0) { 49225 libc.Xstrcpy(tls, z, ts+14193) 49226 return 49227 } 49228 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 49229 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 49230 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 49231 libc.Xmemcpy(tls, bp+16, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 49232 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = sqlite3_uint64(*(*uint32)(unsafe.Pointer(bp + 16))) 49233 } else { 49234 } 49235 i = 0 49236 k = int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) - uint64(1)) 49237 __1: 49238 if !(uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2)) { 49239 goto __3 49240 } 49241 { 49242 *(*uint8)(unsafe.Pointer(z + uintptr(k))) = zHex[*(*sqlite3_uint64)(unsafe.Pointer(bp))&uint64(0xf)] 49243 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 4 49244 49245 } 49246 goto __2 49247 __2: 49248 i++ 49249 k-- 49250 goto __1 49251 goto __3 49252 __3: 49253 ; 49254 *(*uint8)(unsafe.Pointer(z + 16)) = uint8(0) 49255 } 49256 49257 var zHex = *(*[17]uint8)(unsafe.Pointer(ts + 31194)) 49258 49259 func hexToInt(tls *libc.TLS, h int32) int32 { 49260 if h >= '0' && h <= '9' { 49261 return h - '0' 49262 } else if h >= 'a' && h <= 'f' { 49263 return h - 'a' + 10 49264 } else { 49265 return -1 49266 } 49267 return int32(0) 49268 } 49269 49270 func textToPointer(tls *libc.TLS, z uintptr, pp uintptr) int32 { 49271 bp := tls.Alloc(12) 49272 defer tls.Free(12) 49273 49274 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(0) 49275 var i int32 49276 49277 for i = 0; uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) && *(*uint8)(unsafe.Pointer(z)) != 0; i++ { 49278 var v int32 49279 v = hexToInt(tls, int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) 49280 if v < 0 { 49281 return TCL_ERROR 49282 } 49283 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = *(*sqlite3_uint64)(unsafe.Pointer(bp))*uint64(16) + sqlite3_uint64(v) 49284 } 49285 if int32(*(*uint8)(unsafe.Pointer(z))) != 0 { 49286 return TCL_ERROR 49287 } 49288 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 49289 libc.Xmemcpy(tls, pp, bp, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 49290 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 49291 *(*uint32)(unsafe.Pointer(bp + 8)) = uint32(*(*sqlite3_uint64)(unsafe.Pointer(bp))) 49292 libc.Xmemcpy(tls, pp, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 49293 } else { 49294 } 49295 return TCL_OK 49296 } 49297 49298 func test_malloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49299 bp := tls.Alloc(120) 49300 defer tls.Free(120) 49301 49302 var p uintptr 49303 49304 if objc != 2 { 49305 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32817) 49306 return TCL_ERROR 49307 } 49308 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 49309 return TCL_ERROR 49310 } 49311 p = sqlite3.Xsqlite3_malloc(tls, int32(uint32(*(*int32)(unsafe.Pointer(bp + 16))))) 49312 pointerToText(tls, p, bp+20) 49313 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+20, uintptr(0))) 49314 return TCL_OK 49315 } 49316 49317 func test_realloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49318 bp := tls.Alloc(156) 49319 defer tls.Free(156) 49320 49321 var p uintptr 49322 49323 if objc != 3 { 49324 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32824) 49325 return TCL_ERROR 49326 } 49327 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 49328 return TCL_ERROR 49329 } 49330 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 49331 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49332 return TCL_ERROR 49333 } 49334 p = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), int32(uint32(*(*int32)(unsafe.Pointer(bp + 40))))) 49335 pointerToText(tls, p, bp+56) 49336 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+56, uintptr(0))) 49337 return TCL_OK 49338 } 49339 49340 func test_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49341 bp := tls.Alloc(32) 49342 defer tls.Free(32) 49343 49344 if objc != 2 { 49345 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32851) 49346 return TCL_ERROR 49347 } 49348 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 49349 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49350 return TCL_ERROR 49351 } 49352 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 49353 return TCL_OK 49354 } 49355 49356 func test_memset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49357 bp := tls.Alloc(172) 49358 defer tls.Free(172) 49359 49360 var i int32 49361 var zHex uintptr 49362 var zOut uintptr 49363 49364 if objc != 4 { 49365 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32857) 49366 return TCL_ERROR 49367 } 49368 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 49369 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49370 return TCL_ERROR 49371 } 49372 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 49373 return TCL_ERROR 49374 } 49375 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 49376 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 49377 return TCL_ERROR 49378 } 49379 zHex = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+68) 49380 if uint64(*(*int32)(unsafe.Pointer(bp + 68))) > uint64(unsafe.Sizeof([100]uint8{}))*uint64(2) { 49381 *(*int32)(unsafe.Pointer(bp + 68)) = int32(uint64(unsafe.Sizeof([100]uint8{})) * uint64(2)) 49382 } 49383 *(*int32)(unsafe.Pointer(bp + 68)) = sqlite3TestHexToBin(tls, zHex, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 49384 if *(*int32)(unsafe.Pointer(bp + 68)) == 0 { 49385 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+32896, uintptr(0))) 49386 return TCL_ERROR 49387 } 49388 zOut = *(*uintptr)(unsafe.Pointer(bp + 56)) 49389 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 49390 *(*uint8)(unsafe.Pointer(zOut + uintptr(i))) = *(*uint8)(unsafe.Pointer(bp + 72 + uintptr(i%*(*int32)(unsafe.Pointer(bp + 68))))) 49391 } 49392 return TCL_OK 49393 } 49394 49395 func test_memget(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49396 bp := tls.Alloc(168) 49397 defer tls.Free(168) 49398 49399 var n int32 49400 var zBin uintptr 49401 49402 if objc != 3 { 49403 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32904) 49404 return TCL_ERROR 49405 } 49406 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 49407 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49408 return TCL_ERROR 49409 } 49410 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 49411 return TCL_ERROR 49412 } 49413 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 49414 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 49415 return TCL_ERROR 49416 } 49417 zBin = *(*uintptr)(unsafe.Pointer(bp + 56)) 49418 for *(*int32)(unsafe.Pointer(bp + 64)) > 0 { 49419 if uint64(*(*int32)(unsafe.Pointer(bp + 64))) > (uint64(unsafe.Sizeof([100]uint8{}))-uint64(1))/uint64(2) { 49420 n = int32((uint64(unsafe.Sizeof([100]uint8{})) - uint64(1)) / uint64(2)) 49421 } else { 49422 n = *(*int32)(unsafe.Pointer(bp + 64)) 49423 } 49424 libc.Xmemcpy(tls, bp+68, zBin, uint64(n)) 49425 zBin += uintptr(n) 49426 *(*int32)(unsafe.Pointer(bp + 64)) -= n 49427 sqlite3TestBinToHex(tls, bp+68, n) 49428 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+68, uintptr(0))) 49429 } 49430 return TCL_OK 49431 } 49432 49433 func test_memory_used(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49434 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_used(tls))) 49435 return TCL_OK 49436 } 49437 49438 func test_memory_highwater(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49439 bp := tls.Alloc(4) 49440 defer tls.Free(4) 49441 49442 *(*int32)(unsafe.Pointer(bp)) = 0 49443 if objc != 1 && objc != 2 { 49444 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32917) 49445 return TCL_ERROR 49446 } 49447 if objc == 2 { 49448 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49449 return TCL_ERROR 49450 } 49451 } 49452 tcl.XTcl_SetObjResult(tls, interp, 49453 tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_highwater(tls, *(*int32)(unsafe.Pointer(bp))))) 49454 return TCL_OK 49455 } 49456 49457 func test_memdebug_backtrace(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49458 bp := tls.Alloc(4) 49459 defer tls.Free(4) 49460 49461 if objc != 2 { 49462 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32925) 49463 return TCL_ERROR 49464 } 49465 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49466 return TCL_ERROR 49467 } 49468 return TCL_OK 49469 } 49470 49471 func test_memdebug_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49472 if objc != 2 { 49473 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49474 return TCL_ERROR 49475 } 49476 return TCL_OK 49477 } 49478 49479 func test_memdebug_malloc_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49480 var nMalloc int32 = -1 49481 if objc != 1 { 49482 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 49483 return TCL_ERROR 49484 } 49485 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nMalloc)) 49486 return TCL_OK 49487 } 49488 49489 func test_memdebug_fail(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49490 bp := tls.Alloc(36) 49491 defer tls.Free(36) 49492 49493 var ii int32 49494 49495 *(*int32)(unsafe.Pointer(bp + 32)) = 1 49496 var pBenignCnt uintptr = uintptr(0) 49497 var nBenign int32 49498 var nFail int32 = 0 49499 49500 if objc < 2 { 49501 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32939) 49502 return TCL_ERROR 49503 } 49504 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24) != 0 { 49505 return TCL_ERROR 49506 } 49507 49508 for ii = 2; ii < objc; ii = ii + 2 { 49509 var zOption uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii)*8)), bp+28) 49510 var zErr uintptr = uintptr(0) 49511 49512 if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32957, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 49513 if ii == objc-1 { 49514 zErr = ts + 12638 49515 } else { 49516 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)), bp+32) != 0 { 49517 return TCL_ERROR 49518 } 49519 } 49520 } else if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32965, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 49521 if ii == objc-1 { 49522 zErr = ts + 12638 49523 } else { 49524 pBenignCnt = *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)) 49525 } 49526 } else { 49527 zErr = ts + 12444 49528 } 49529 49530 if zErr != 0 { 49531 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErr, zOption, 0)) 49532 return TCL_ERROR 49533 } 49534 } 49535 49536 nBenign = faultsimBenignFailures(tls) 49537 nFail = faultsimFailures(tls) 49538 faultsimConfig(tls, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32))) 49539 49540 if pBenignCnt != 0 { 49541 tcl.XTcl_ObjSetVar2(tls, interp, pBenignCnt, uintptr(0), tcl.XTcl_NewIntObj(tls, nBenign), 0) 49542 } 49543 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nFail)) 49544 return TCL_OK 49545 } 49546 49547 func test_memdebug_pending(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49548 var nPending int32 49549 if objc != 1 { 49550 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 49551 return TCL_ERROR 49552 } 49553 nPending = faultsimPending(tls) 49554 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPending)) 49555 return TCL_OK 49556 } 49557 49558 var sqlite3_memdebug_title_count int32 = 0 49559 49560 func test_memdebug_settitle(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49561 sqlite3_memdebug_title_count++ 49562 if objc != 2 { 49563 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32976) 49564 return TCL_ERROR 49565 } 49566 return TCL_OK 49567 } 49568 49569 var aMallocLog Tcl_HashTable 49570 var mallocLogEnabled int32 = 0 49571 49572 type MallocLog1 = struct { 49573 FnCall int32 49574 FnByte int32 49575 } 49576 49577 type MallocLog = MallocLog1 49578 49579 func test_memdebug_log_clear(tls *libc.TLS) { 49580 bp := tls.Alloc(24) 49581 defer tls.Free(24) 49582 49583 var pEntry uintptr 49584 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp) { 49585 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 49586 tcl.XTcl_Free(tls, pLog) 49587 } 49588 tcl.XTcl_DeleteHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog))) 49589 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 49590 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 49591 return uint64(1) 49592 } 49593 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 49594 }())) 49595 } 49596 49597 func test_memdebug_log(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49598 bp := tls.Alloc(128) 49599 defer tls.Free(128) 49600 49601 if !(isInit != 0) { 49602 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 49603 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 49604 return uint64(1) 49605 } 49606 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 49607 }())) 49608 isInit = 1 49609 } 49610 49611 if objc < 2 { 49612 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 49613 } 49614 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&MB_strs)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp) != 0 { 49615 return TCL_ERROR 49616 } 49617 49618 switch uint32(*(*int32)(unsafe.Pointer(bp))) { 49619 case uint32(0): 49620 mallocLogEnabled = 1 49621 break 49622 case uint32(1): 49623 mallocLogEnabled = 0 49624 break 49625 case uint32(2): 49626 { 49627 var pEntry uintptr 49628 var pRet uintptr = tcl.XTcl_NewObj(tls) 49629 49630 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp+8); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp+8) { 49631 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 49632 var aKey uintptr = func() uintptr { 49633 if (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == 1 || (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == -1 { 49634 return *(*uintptr)(unsafe.Pointer(pEntry + 32)) 49635 } 49636 return pEntry + 32 49637 }() 49638 var ii int32 49639 49640 *(*uintptr)(unsafe.Pointer(bp + 32)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnCall) 49641 *(*uintptr)(unsafe.Pointer(bp + 32 + 1*8)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnByte) 49642 for ii = 0; ii < MALLOC_LOG_FRAMES; ii++ { 49643 *(*uintptr)(unsafe.Pointer(bp + 32 + uintptr(ii+2)*8)) = tcl.XTcl_NewWideIntObj(tls, *(*Tcl_WideInt)(unsafe.Pointer(aKey + uintptr(ii)*8))) 49644 } 49645 49646 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, 49647 tcl.XTcl_NewListObj(tls, MALLOC_LOG_FRAMES+2, bp+32)) 49648 } 49649 49650 tcl.XTcl_SetObjResult(tls, interp, pRet) 49651 break 49652 49653 } 49654 case uint32(3): 49655 { 49656 test_memdebug_log_clear(tls) 49657 break 49658 49659 } 49660 49661 case uint32(4): 49662 { 49663 break 49664 49665 } 49666 } 49667 49668 return TCL_OK 49669 } 49670 49671 var isInit int32 = 0 49672 var MB_strs = [5]uintptr{ts + 32998, ts + 33004, ts + 33009, ts + 33014, ts + 33020} 49673 49674 func test_config_pagecache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49675 bp := tls.Alloc(56) 49676 defer tls.Free(56) 49677 49678 var pRes uintptr 49679 if objc != 3 { 49680 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33025) 49681 return TCL_ERROR 49682 } 49683 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+48) != 0 { 49684 return TCL_ERROR 49685 } 49686 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+52) != 0 { 49687 return TCL_ERROR 49688 } 49689 libc.Xfree(tls, buf1) 49690 buf1 = uintptr(0) 49691 49692 pRes = tcl.XTcl_NewObj(tls) 49693 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszPage)) 49694 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnPage)) 49695 tcl.XTcl_SetObjResult(tls, interp, pRes) 49696 49697 if *(*int32)(unsafe.Pointer(bp + 48)) < 0 { 49698 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp, uintptr(0), 0, 0)) 49699 } else { 49700 buf1 = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 48))**(*int32)(unsafe.Pointer(bp + 52)))) 49701 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp+24, buf1, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 49702 } 49703 return TCL_OK 49704 } 49705 49706 var buf1 uintptr = uintptr(0) 49707 49708 func test_alt_pcache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49709 bp := tls.Alloc(32) 49710 defer tls.Free(32) 49711 49712 *(*int32)(unsafe.Pointer(bp + 20)) = 0 49713 *(*int32)(unsafe.Pointer(bp + 24)) = 0 49714 *(*int32)(unsafe.Pointer(bp + 28)) = 0 49715 if objc < 2 || objc > 5 { 49716 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 49717 ts+33032) 49718 return TCL_ERROR 49719 } 49720 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 49721 return TCL_ERROR 49722 } 49723 if objc >= 3 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 49724 return TCL_ERROR 49725 } 49726 if objc >= 4 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 49727 return TCL_ERROR 49728 } 49729 if objc >= 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 49730 return TCL_ERROR 49731 } 49732 if *(*int32)(unsafe.Pointer(bp + 20)) < 0 || *(*int32)(unsafe.Pointer(bp + 20)) > 100 { 49733 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33079, 49734 uintptr(0))) 49735 return TCL_ERROR 49736 } 49737 installTestPCache(tls, *(*int32)(unsafe.Pointer(bp + 16)), uint32(*(*int32)(unsafe.Pointer(bp + 20))), uint32(*(*int32)(unsafe.Pointer(bp + 24))), 49738 uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 49739 return TCL_OK 49740 } 49741 49742 func test_config_memstatus(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49743 bp := tls.Alloc(12) 49744 defer tls.Free(12) 49745 49746 var rc int32 49747 if objc != 2 { 49748 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 49749 return TCL_ERROR 49750 } 49751 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49752 return TCL_ERROR 49753 } 49754 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MEMSTATUS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49755 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 49756 return TCL_OK 49757 } 49758 49759 func test_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49760 bp := tls.Alloc(24) 49761 defer tls.Free(24) 49762 49763 var pRet uintptr 49764 if objc != 3 { 49765 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33122) 49766 return TCL_ERROR 49767 } 49768 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 49769 return TCL_ERROR 49770 } 49771 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 49772 return TCL_ERROR 49773 } 49774 pRet = tcl.XTcl_NewObj(tls) 49775 tcl.XTcl_ListObjAppendElement(tls, 49776 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszLookaside)) 49777 tcl.XTcl_ListObjAppendElement(tls, 49778 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnLookaside)) 49779 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOOKASIDE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 20)))) 49780 tcl.XTcl_SetObjResult(tls, interp, pRet) 49781 return TCL_OK 49782 } 49783 49784 func test_db_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49785 bp := tls.Alloc(84) 49786 defer tls.Free(84) 49787 49788 var rc int32 49789 49790 if objc != 5 { 49791 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33133) 49792 return TCL_ERROR 49793 } 49794 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 49795 return TCL_ERROR 49796 } 49797 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 49798 return TCL_ERROR 49799 } 49800 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) != 0 { 49801 return TCL_ERROR 49802 } 49803 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 49804 return TCL_ERROR 49805 } 49806 if *(*int32)(unsafe.Pointer(bp + 72)) == 0 { 49807 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), SQLITE_DBCONFIG_LOOKASIDE, libc.VaList(bp, uintptr(0), *(*int32)(unsafe.Pointer(bp + 76)), *(*int32)(unsafe.Pointer(bp + 80)))) 49808 } else if *(*int32)(unsafe.Pointer(bp + 72)) >= 1 && *(*int32)(unsafe.Pointer(bp + 72)) <= 2 && uint64(*(*int32)(unsafe.Pointer(bp + 76))**(*int32)(unsafe.Pointer(bp + 80))) <= uint64(unsafe.Sizeof([10000]uint8{})) { 49809 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), SQLITE_DBCONFIG_LOOKASIDE, libc.VaList(bp+24, uintptr(unsafe.Pointer(&azBuf))+uintptr(*(*int32)(unsafe.Pointer(bp + 72)))*10000, *(*int32)(unsafe.Pointer(bp + 76)), *(*int32)(unsafe.Pointer(bp + 80)))) 49810 } else { 49811 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+33150, uintptr(0))) 49812 return TCL_ERROR 49813 } 49814 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 49815 return TCL_OK 49816 } 49817 49818 var azBuf [2][10000]uint8 49819 49820 func test_config_heap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49821 bp := tls.Alloc(56) 49822 defer tls.Free(56) 49823 49824 var rc int32 49825 49826 var aArg uintptr = objv + 1*8 49827 var nArg int32 = objc - 1 49828 49829 if nArg != 2 { 49830 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33188) 49831 return TCL_ERROR 49832 } 49833 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+48) != 0 { 49834 return TCL_ERROR 49835 } 49836 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg + 1*8)), bp+52) != 0 { 49837 return TCL_ERROR 49838 } 49839 49840 if *(*int32)(unsafe.Pointer(bp + 48)) == 0 { 49841 libc.Xfree(tls, zBuf) 49842 zBuf = uintptr(0) 49843 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp, uintptr(0), 0, 0)) 49844 } else { 49845 zBuf = libc.Xrealloc(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp + 48)))) 49846 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp+24, zBuf, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 49847 } 49848 49849 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49850 return TCL_OK 49851 } 49852 49853 var zBuf uintptr 49854 49855 func test_config_heap_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49856 bp := tls.Alloc(12) 49857 defer tls.Free(12) 49858 49859 var rc int32 49860 49861 var aArg uintptr = objv + 1*8 49862 var nArg int32 = objc - 1 49863 49864 if nArg != 1 { 49865 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 49866 return TCL_ERROR 49867 } 49868 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+8) != 0 { 49869 return TCL_ERROR 49870 } 49871 49872 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_WIN32_HEAPSIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49873 49874 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49875 return TCL_OK 49876 } 49877 49878 func test_config_error(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49879 bp := tls.Alloc(40) 49880 defer tls.Free(40) 49881 49882 if objc != 2 && objc != 1 { 49883 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33204) 49884 return TCL_ERROR 49885 } 49886 if objc == 2 { 49887 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 49888 return TCL_ERROR 49889 } 49890 if sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 99999, 0) != SQLITE_ERROR { 49891 tcl.XTcl_AppendResult(tls, interp, 49892 libc.VaList(bp, ts+33209, 49893 uintptr(0))) 49894 return TCL_ERROR 49895 } 49896 } else { 49897 if sqlite3.Xsqlite3_config(tls, 99999, 0) != SQLITE_ERROR { 49898 tcl.XTcl_AppendResult(tls, interp, 49899 libc.VaList(bp+16, ts+33267, 49900 uintptr(0))) 49901 return TCL_ERROR 49902 } 49903 } 49904 return TCL_OK 49905 } 49906 49907 func test_config_uri(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49908 bp := tls.Alloc(12) 49909 defer tls.Free(12) 49910 49911 var rc int32 49912 49913 if objc != 2 { 49914 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49915 return TCL_ERROR 49916 } 49917 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49918 return TCL_ERROR 49919 } 49920 49921 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_URI, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49922 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49923 49924 return TCL_OK 49925 } 49926 49927 func test_config_cis(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49928 bp := tls.Alloc(12) 49929 defer tls.Free(12) 49930 49931 var rc int32 49932 49933 if objc != 2 { 49934 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49935 return TCL_ERROR 49936 } 49937 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49938 return TCL_ERROR 49939 } 49940 49941 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_COVERING_INDEX_SCAN, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49942 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49943 49944 return TCL_OK 49945 } 49946 49947 func test_config_pmasz(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49948 bp := tls.Alloc(12) 49949 defer tls.Free(12) 49950 49951 var rc int32 49952 49953 if objc != 2 { 49954 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 49955 return TCL_ERROR 49956 } 49957 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 49958 return TCL_ERROR 49959 } 49960 49961 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PMASZ, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 49962 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 49963 49964 return TCL_OK 49965 } 49966 49967 func test_dump_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49968 if objc != 2 { 49969 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49970 return TCL_ERROR 49971 } 49972 49973 switch int32(clientData) { 49974 case 3: 49975 { 49976 } 49977 fallthrough 49978 case 5: 49979 { 49980 } 49981 } 49982 return TCL_OK 49983 } 49984 49985 func test_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49986 bp := tls.Alloc(16) 49987 defer tls.Free(16) 49988 49989 var rc int32 49990 49991 var i int32 49992 *(*int32)(unsafe.Pointer(bp)) = 0 49993 49994 var zOpName uintptr 49995 var pResult uintptr 49996 if objc != 3 { 49997 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33318) 49998 return TCL_ERROR 49999 } 50000 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 50001 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 50002 FzName uintptr 50003 Fop int32 50004 F__ccgo_pad1 [4]byte 50005 }{}))); i++ { 50006 if libc.Xstrcmp(tls, aOp1[i].FzName, zOpName) == 0 { 50007 *(*int32)(unsafe.Pointer(bp)) = aOp1[i].Fop 50008 break 50009 } 50010 } 50011 if i >= int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 50012 FzName uintptr 50013 Fop int32 50014 F__ccgo_pad1 [4]byte 50015 }{}))) { 50016 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 50017 return TCL_ERROR 50018 } 50019 } 50020 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 50021 return TCL_ERROR 50022 } 50023 *(*int32)(unsafe.Pointer(bp + 8)) = 0 50024 *(*int32)(unsafe.Pointer(bp + 12)) = 0 50025 rc = sqlite3.Xsqlite3_status(tls, *(*int32)(unsafe.Pointer(bp)), bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 4))) 50026 pResult = tcl.XTcl_NewObj(tls) 50027 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 50028 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 50029 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 50030 tcl.XTcl_SetObjResult(tls, interp, pResult) 50031 return TCL_OK 50032 } 50033 50034 var aOp1 = [10]struct { 50035 FzName uintptr 50036 Fop int32 50037 F__ccgo_pad1 [4]byte 50038 }{ 50039 {FzName: ts + 33338}, 50040 {FzName: ts + 33364, Fop: SQLITE_STATUS_MALLOC_SIZE}, 50041 {FzName: ts + 33390, Fop: SQLITE_STATUS_PAGECACHE_USED}, 50042 {FzName: ts + 33419, Fop: SQLITE_STATUS_PAGECACHE_OVERFLOW}, 50043 {FzName: ts + 33452, Fop: SQLITE_STATUS_PAGECACHE_SIZE}, 50044 {FzName: ts + 33481, Fop: SQLITE_STATUS_SCRATCH_USED}, 50045 {FzName: ts + 33508, Fop: SQLITE_STATUS_SCRATCH_OVERFLOW}, 50046 {FzName: ts + 33539, Fop: SQLITE_STATUS_SCRATCH_SIZE}, 50047 {FzName: ts + 33566, Fop: SQLITE_STATUS_PARSER_STACK}, 50048 {FzName: ts + 33593, Fop: SQLITE_STATUS_MALLOC_COUNT}, 50049 } 50050 50051 func test_db_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50052 bp := tls.Alloc(24) 50053 defer tls.Free(24) 50054 50055 var rc int32 50056 50057 var i int32 50058 *(*int32)(unsafe.Pointer(bp + 8)) = 0 50059 50060 var zOpName uintptr 50061 50062 var pResult uintptr 50063 if objc != 4 { 50064 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33620) 50065 return TCL_ERROR 50066 } 50067 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 50068 return TCL_ERROR 50069 } 50070 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 50071 if libc.Xmemcmp(tls, zOpName, ts+33643, uint64(7)) == 0 { 50072 zOpName += uintptr(7) 50073 } 50074 if libc.Xmemcmp(tls, zOpName, ts+33651, uint64(9)) == 0 { 50075 zOpName += uintptr(9) 50076 } 50077 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 50078 FzName uintptr 50079 Fop int32 50080 F__ccgo_pad1 [4]byte 50081 }{}))); i++ { 50082 if libc.Xstrcmp(tls, aOp2[i].FzName, zOpName) == 0 { 50083 *(*int32)(unsafe.Pointer(bp + 8)) = aOp2[i].Fop 50084 break 50085 } 50086 } 50087 if i >= int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 50088 FzName uintptr 50089 Fop int32 50090 F__ccgo_pad1 [4]byte 50091 }{}))) { 50092 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 50093 return TCL_ERROR 50094 } 50095 } 50096 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 50097 return TCL_ERROR 50098 } 50099 *(*int32)(unsafe.Pointer(bp + 16)) = 0 50100 *(*int32)(unsafe.Pointer(bp + 20)) = 0 50101 rc = sqlite3.Xsqlite3_db_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+16, bp+20, *(*int32)(unsafe.Pointer(bp + 12))) 50102 pResult = tcl.XTcl_NewObj(tls) 50103 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 50104 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 50105 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 20)))) 50106 tcl.XTcl_SetObjResult(tls, interp, pResult) 50107 return TCL_OK 50108 } 50109 50110 var aOp2 = [13]struct { 50111 FzName uintptr 50112 Fop int32 50113 F__ccgo_pad1 [4]byte 50114 }{ 50115 {FzName: ts + 33661}, 50116 {FzName: ts + 33676, Fop: SQLITE_DBSTATUS_CACHE_USED}, 50117 {FzName: ts + 33687, Fop: SQLITE_DBSTATUS_SCHEMA_USED}, 50118 {FzName: ts + 33699, Fop: SQLITE_DBSTATUS_STMT_USED}, 50119 {FzName: ts + 33709, Fop: SQLITE_DBSTATUS_LOOKASIDE_HIT}, 50120 {FzName: ts + 33723, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE}, 50121 {FzName: ts + 33743, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL}, 50122 {FzName: ts + 33763, Fop: SQLITE_DBSTATUS_CACHE_HIT}, 50123 {FzName: ts + 33773, Fop: SQLITE_DBSTATUS_CACHE_MISS}, 50124 {FzName: ts + 33784, Fop: SQLITE_DBSTATUS_CACHE_WRITE}, 50125 {FzName: ts + 33796, Fop: SQLITE_DBSTATUS_DEFERRED_FKS}, 50126 {FzName: ts + 33809, Fop: SQLITE_DBSTATUS_CACHE_USED_SHARED}, 50127 {FzName: ts + 33827, Fop: SQLITE_DBSTATUS_CACHE_SPILL}, 50128 } 50129 50130 func test_install_malloc_faultsim(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50131 bp := tls.Alloc(4) 50132 defer tls.Free(4) 50133 50134 var rc int32 50135 50136 if objc != 2 { 50137 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 50138 return TCL_ERROR 50139 } 50140 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) { 50141 return TCL_ERROR 50142 } 50143 rc = faultsimInstall(tls, *(*int32)(unsafe.Pointer(bp))) 50144 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50145 return TCL_OK 50146 } 50147 50148 func test_install_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50149 var rc int32 = SQLITE_MISUSE 50150 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50151 return TCL_OK 50152 } 50153 50154 func test_vfs_oom_test(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50155 bp := tls.Alloc(4) 50156 defer tls.Free(4) 50157 50158 if objc > 2 { 50159 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33839) 50160 return TCL_ERROR 50161 } else if objc == 2 { 50162 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 50163 return TCL_ERROR 50164 } 50165 sqlite3.Xsqlite3_memdebug_vfs_oom_test = *(*int32)(unsafe.Pointer(bp)) 50166 } 50167 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_memdebug_vfs_oom_test)) 50168 return TCL_OK 50169 } 50170 50171 func Sqlitetest_malloc_Init(tls *libc.TLS, interp uintptr) int32 { 50172 var i int32 50173 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd11))/uint64(unsafe.Sizeof(struct { 50174 FzName uintptr 50175 FxProc uintptr 50176 FclientData int32 50177 F__ccgo_pad1 [4]byte 50178 }{})); i++ { 50179 var c ClientData = uintptr(intptr_t(aObjCmd11[i].FclientData)) 50180 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd11[i].FzName, aObjCmd11[i].FxProc, c, uintptr(0)) 50181 } 50182 return TCL_OK 50183 } 50184 50185 var aObjCmd11 = [32]struct { 50186 FzName uintptr 50187 FxProc uintptr 50188 FclientData int32 50189 F__ccgo_pad1 [4]byte 50190 }{ 50191 {FzName: ts + 28095, FxProc: 0}, 50192 {FzName: ts + 28110, FxProc: 0}, 50193 {FzName: ts + 33849, FxProc: 0}, 50194 {FzName: ts + 33862, FxProc: 0}, 50195 {FzName: ts + 33869, FxProc: 0}, 50196 {FzName: ts + 33876, FxProc: 0}, 50197 {FzName: ts + 33896, FxProc: 0}, 50198 {FzName: ts + 33921, FxProc: 0}, 50199 {FzName: ts + 33948, FxProc: 0}, 50200 {FzName: ts + 33970, FxProc: 0}, 50201 {FzName: ts + 33992, FxProc: 0}, 50202 {FzName: ts + 34017, FxProc: 0}, 50203 {FzName: ts + 34043, FxProc: 0}, 50204 {FzName: ts + 34073, FxProc: 0}, 50205 {FzName: ts + 34094, FxProc: 0}, 50206 {FzName: ts + 34119, FxProc: 0}, 50207 {FzName: ts + 34145, FxProc: 0}, 50208 {FzName: ts + 34160, FxProc: 0}, 50209 {FzName: ts + 34178, FxProc: 0}, 50210 {FzName: ts + 34202, FxProc: 0}, 50211 {FzName: ts + 34222, FxProc: 0}, 50212 {FzName: ts + 34247, FxProc: 0}, 50213 {FzName: ts + 34272, FxProc: 0}, 50214 {FzName: ts + 34297, FxProc: 0}, 50215 {FzName: ts + 34318, FxProc: 0}, 50216 {FzName: ts + 34337, FxProc: 0}, 50217 {FzName: ts + 34356, FxProc: 0}, 50218 {FzName: ts + 34377, FxProc: 0}, 50219 {FzName: ts + 34405, FxProc: 0, FclientData: 3}, 50220 {FzName: ts + 34426, FxProc: 0, FclientData: 5}, 50221 {FzName: ts + 34447, FxProc: 0}, 50222 {FzName: ts + 34471, FxProc: 0}, 50223 } 50224 50225 type fd_set4 = struct{ F__fds_bits [16]int64 } 50226 50227 type MD5Context1 = struct { 50228 FisInit int32 50229 Fbuf [4]uint32 50230 Fbits [2]uint32 50231 Fin [64]uint8 50232 } 50233 50234 type MD5Context = MD5Context1 50235 50236 func byteReverse(tls *libc.TLS, buf uintptr, longs uint32) { 50237 var t uint32 50238 for __ccgo := true; __ccgo; __ccgo = libc.PreDecUint32(&longs, 1) != 0 { 50239 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)))) 50240 *(*uint32)(unsafe.Pointer(buf)) = t 50241 buf += uintptr(4) 50242 } 50243 } 50244 50245 func MD5Transform(tls *libc.TLS, buf uintptr, in uintptr) { 50246 var a uint32 50247 var b uint32 50248 var c uint32 50249 var d uint32 50250 50251 a = *(*uint32)(unsafe.Pointer(buf)) 50252 b = *(*uint32)(unsafe.Pointer(buf + 1*4)) 50253 c = *(*uint32)(unsafe.Pointer(buf + 2*4)) 50254 d = *(*uint32)(unsafe.Pointer(buf + 3*4)) 50255 50256 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xd76aa478) 50257 a = a<<7 | a>>(32-7) 50258 a = a + b 50259 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xe8c7b756) 50260 d = d<<12 | d>>(32-12) 50261 d = d + a 50262 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x242070db)) 50263 c = c<<17 | c>>(32-17) 50264 c = c + d 50265 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xc1bdceee) 50266 b = b<<22 | b>>(32-22) 50267 b = b + c 50268 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf57c0faf) 50269 a = a<<7 | a>>(32-7) 50270 a = a + b 50271 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + uint32(0x4787c62a)) 50272 d = d<<12 | d>>(32-12) 50273 d = d + a 50274 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa8304613) 50275 c = c<<17 | c>>(32-17) 50276 c = c + d 50277 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xfd469501) 50278 b = b<<22 | b>>(32-22) 50279 b = b + c 50280 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x698098d8)) 50281 a = a<<7 | a>>(32-7) 50282 a = a + b 50283 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0x8b44f7af) 50284 d = d<<12 | d>>(32-12) 50285 d = d + a 50286 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffff5bb1) 50287 c = c<<17 | c>>(32-17) 50288 c = c + d 50289 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0x895cd7be) 50290 b = b<<22 | b>>(32-22) 50291 b = b + c 50292 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x6b901122)) 50293 a = a<<7 | a>>(32-7) 50294 a = a + b 50295 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xfd987193) 50296 d = d<<12 | d>>(32-12) 50297 d = d + a 50298 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xa679438e) 50299 c = c<<17 | c>>(32-17) 50300 c = c + d 50301 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x49b40821)) 50302 b = b<<22 | b>>(32-22) 50303 b = b + c 50304 50305 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xf61e2562) 50306 a = a<<5 | a>>(32-5) 50307 a = a + b 50308 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xc040b340) 50309 d = d<<9 | d>>(32-9) 50310 d = d + a 50311 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x265e5a51)) 50312 c = c<<14 | c>>(32-14) 50313 c = c + d 50314 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xe9b6c7aa) 50315 b = b<<20 | b>>(32-20) 50316 b = b + c 50317 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xd62f105d) 50318 a = a<<5 | a>>(32-5) 50319 a = a + b 50320 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + uint32(0x02441453)) 50321 d = d<<9 | d>>(32-9) 50322 d = d + a 50323 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xd8a1e681) 50324 c = c<<14 | c>>(32-14) 50325 c = c + d 50326 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xe7d3fbc8) 50327 b = b<<20 | b>>(32-20) 50328 b = b + c 50329 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + uint32(0x21e1cde6)) 50330 a = a<<5 | a>>(32-5) 50331 a = a + b 50332 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xc33707d6) 50333 d = d<<9 | d>>(32-9) 50334 d = d + a 50335 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xf4d50d87) 50336 c = c<<14 | c>>(32-14) 50337 c = c + d 50338 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x455a14ed)) 50339 b = b<<20 | b>>(32-20) 50340 b = b + c 50341 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xa9e3e905) 50342 a = a<<5 | a>>(32-5) 50343 a = a + b 50344 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xfcefa3f8) 50345 d = d<<9 | d>>(32-9) 50346 d = d + a 50347 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x676f02d9)) 50348 c = c<<14 | c>>(32-14) 50349 c = c + d 50350 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0x8d2a4c8a) 50351 b = b<<20 | b>>(32-20) 50352 b = b + c 50353 50354 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfffa3942) 50355 a = a<<4 | a>>(32-4) 50356 a = a + b 50357 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 8*4)) + 0x8771f681) 50358 d = d<<11 | d>>(32-11) 50359 d = d + a 50360 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x6d9d6122)) 50361 c = c<<16 | c>>(32-16) 50362 c = c + d 50363 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xfde5380c) 50364 b = b<<23 | b>>(32-23) 50365 b = b + c 50366 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xa4beea44) 50367 a = a<<4 | a>>(32-4) 50368 a = a + b 50369 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 4*4)) + uint32(0x4bdecfa9)) 50370 d = d<<11 | d>>(32-11) 50371 d = d + a 50372 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xf6bb4b60) 50373 c = c<<16 | c>>(32-16) 50374 c = c + d 50375 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xbebfbc70) 50376 b = b<<23 | b>>(32-23) 50377 b = b + c 50378 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x289b7ec6)) 50379 a = a<<4 | a>>(32-4) 50380 a = a + b 50381 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in)) + 0xeaa127fa) 50382 d = d<<11 | d>>(32-11) 50383 d = d + a 50384 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xd4ef3085) 50385 c = c<<16 | c>>(32-16) 50386 c = c + d 50387 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 6*4)) + uint32(0x04881d05)) 50388 b = b<<23 | b>>(32-23) 50389 b = b + c 50390 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xd9d4d039) 50391 a = a<<4 | a>>(32-4) 50392 a = a + b 50393 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0xe6db99e5) 50394 d = d<<11 | d>>(32-11) 50395 d = d + a 50396 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x1fa27cf8)) 50397 c = c<<16 | c>>(32-16) 50398 c = c + d 50399 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xc4ac5665) 50400 b = b<<23 | b>>(32-23) 50401 b = b + c 50402 50403 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in)) + 0xf4292244) 50404 a = a<<6 | a>>(32-6) 50405 a = a + b 50406 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x432aff97)) 50407 d = d<<10 | d>>(32-10) 50408 d = d + a 50409 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xab9423a7) 50410 c = c<<15 | c>>(32-15) 50411 c = c + d 50412 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfc93a039) 50413 b = b<<21 | b>>(32-21) 50414 b = b + c 50415 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x655b59c3)) 50416 a = a<<6 | a>>(32-6) 50417 a = a + b 50418 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0x8f0ccc92) 50419 d = d<<10 | d>>(32-10) 50420 d = d + a 50421 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffeff47d) 50422 c = c<<15 | c>>(32-15) 50423 c = c + d 50424 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0x85845dd1) 50425 b = b<<21 | b>>(32-21) 50426 b = b + c 50427 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x6fa87e4f)) 50428 a = a<<6 | a>>(32-6) 50429 a = a + b 50430 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xfe2ce6e0) 50431 d = d<<10 | d>>(32-10) 50432 d = d + a 50433 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa3014314) 50434 c = c<<15 | c>>(32-15) 50435 c = c + d 50436 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x4e0811a1)) 50437 b = b<<21 | b>>(32-21) 50438 b = b + c 50439 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf7537e82) 50440 a = a<<6 | a>>(32-6) 50441 a = a + b 50442 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0xbd3af235) 50443 d = d<<10 | d>>(32-10) 50444 d = d + a 50445 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x2ad7d2bb)) 50446 c = c<<15 | c>>(32-15) 50447 c = c + d 50448 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xeb86d391) 50449 b = b<<21 | b>>(32-21) 50450 b = b + c 50451 50452 *(*uint32)(unsafe.Pointer(buf)) += a 50453 *(*uint32)(unsafe.Pointer(buf + 1*4)) += b 50454 *(*uint32)(unsafe.Pointer(buf + 2*4)) += c 50455 *(*uint32)(unsafe.Pointer(buf + 3*4)) += d 50456 } 50457 50458 func MD5Init(tls *libc.TLS, ctx uintptr) { 50459 (*MD5Context)(unsafe.Pointer(ctx)).FisInit = 1 50460 *(*uint32)(unsafe.Pointer(ctx + 4)) = uint32(0x67452301) 50461 *(*uint32)(unsafe.Pointer(ctx + 4 + 1*4)) = 0xefcdab89 50462 *(*uint32)(unsafe.Pointer(ctx + 4 + 2*4)) = 0x98badcfe 50463 *(*uint32)(unsafe.Pointer(ctx + 4 + 3*4)) = uint32(0x10325476) 50464 *(*uint32)(unsafe.Pointer(ctx + 20)) = uint32(0) 50465 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) = uint32(0) 50466 } 50467 50468 func MD5Update(tls *libc.TLS, ctx uintptr, buf uintptr, len uint32) { 50469 var t uint32 50470 50471 t = *(*uint32)(unsafe.Pointer(ctx + 20)) 50472 if libc.AssignPtrUint32(ctx+20, t+len<<3) < t { 50473 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4))++ 50474 } 50475 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) += len >> 29 50476 50477 t = t >> 3 & uint32(0x3f) 50478 50479 if t != 0 { 50480 var p uintptr = ctx + 28 + uintptr(t) 50481 50482 t = uint32(64) - t 50483 if len < t { 50484 libc.Xmemcpy(tls, p, buf, uint64(len)) 50485 return 50486 } 50487 libc.Xmemcpy(tls, p, buf, uint64(t)) 50488 byteReverse(tls, ctx+28, uint32(16)) 50489 MD5Transform(tls, ctx+4, ctx+28) 50490 buf += uintptr(t) 50491 len = len - t 50492 } 50493 50494 for len >= uint32(64) { 50495 libc.Xmemcpy(tls, ctx+28, buf, uint64(64)) 50496 byteReverse(tls, ctx+28, uint32(16)) 50497 MD5Transform(tls, ctx+4, ctx+28) 50498 buf += uintptr(64) 50499 len = len - uint32(64) 50500 } 50501 50502 libc.Xmemcpy(tls, ctx+28, buf, uint64(len)) 50503 } 50504 50505 func MD5Final(tls *libc.TLS, digest uintptr, ctx uintptr) { 50506 var count uint32 50507 var p uintptr 50508 50509 count = *(*uint32)(unsafe.Pointer(ctx + 20)) >> 3 & uint32(0x3F) 50510 50511 p = ctx + 28 + uintptr(count) 50512 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&p, 1))) = uint8(0x80) 50513 50514 count = uint32(64-1) - count 50515 50516 if count < uint32(8) { 50517 libc.Xmemset(tls, p, 0, uint64(count)) 50518 byteReverse(tls, ctx+28, uint32(16)) 50519 MD5Transform(tls, ctx+4, ctx+28) 50520 50521 libc.Xmemset(tls, ctx+28, 0, uint64(56)) 50522 } else { 50523 libc.Xmemset(tls, p, 0, uint64(count-uint32(8))) 50524 } 50525 byteReverse(tls, ctx+28, uint32(14)) 50526 50527 libc.Xmemcpy(tls, ctx+28+uintptr(14*4), ctx+20, uint64(8)) 50528 50529 MD5Transform(tls, ctx+4, ctx+28) 50530 byteReverse(tls, ctx+4, uint32(4)) 50531 libc.Xmemcpy(tls, digest, ctx+4, uint64(16)) 50532 } 50533 50534 func MD5DigestToBase16(tls *libc.TLS, digest uintptr, zBuf uintptr) { 50535 var i int32 50536 var j int32 50537 50538 for j = libc.AssignInt32(&i, 0); i < 16; i++ { 50539 var a int32 = int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i)))) 50540 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a>>4&0xf] 50541 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a&0xf] 50542 } 50543 *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) = uint8(0) 50544 } 50545 50546 var zEncode = *(*[17]uint8)(unsafe.Pointer(ts + 31194)) 50547 50548 func MD5DigestToBase10x8(tls *libc.TLS, digest uintptr, zDigest uintptr) { 50549 bp := tls.Alloc(8) 50550 defer tls.Free(8) 50551 50552 var i int32 50553 var j int32 50554 var x uint32 50555 for i = libc.AssignInt32(&j, 0); i < 16; i = i + 2 { 50556 x = uint32(int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i))))*256 + int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i+1))))) 50557 if i > 0 { 50558 *(*uint8)(unsafe.Pointer(zDigest + uintptr(libc.PostIncInt32(&j, 1)))) = uint8('-') 50559 } 50560 sqlite3.Xsqlite3_snprintf(tls, 50-j, zDigest+uintptr(j), ts+34501, libc.VaList(bp, x)) 50561 j = j + 5 50562 } 50563 *(*uint8)(unsafe.Pointer(zDigest + uintptr(j))) = uint8(0) 50564 } 50565 50566 func md5_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 50567 bp := tls.Alloc(206) 50568 defer tls.Free(206) 50569 50570 var converter uintptr 50571 50572 if argc != 2 { 50573 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 50574 ts+15307, uintptr(0))) 50575 return TCL_ERROR 50576 } 50577 MD5Init(tls, bp+48) 50578 MD5Update(tls, bp+48, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 50579 MD5Final(tls, bp+140, bp+48) 50580 converter = cd 50581 (*struct { 50582 f func(*libc.TLS, uintptr, uintptr) 50583 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+140, bp+156) 50584 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+156, uintptr(0))) 50585 return TCL_OK 50586 } 50587 50588 func md5file_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 50589 bp := tls.Alloc(10428) 50590 defer tls.Free(10428) 50591 50592 var in uintptr 50593 var ofst int32 50594 var amt int32 50595 50596 var converter uintptr 50597 50598 if argc != 2 && argc != 4 { 50599 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 50600 ts+34506, uintptr(0))) 50601 return TCL_ERROR 50602 } 50603 if argc == 4 { 50604 ofst = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 50605 amt = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 50606 } else { 50607 ofst = 0 50608 amt = 2147483647 50609 } 50610 in = libc.Xfopen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4402) 50611 if in == uintptr(0) { 50612 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+34530, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 50613 ts+34552, uintptr(0))) 50614 return TCL_ERROR 50615 } 50616 libc.Xfseek(tls, in, int64(ofst), SEEK_SET) 50617 MD5Init(tls, bp+80) 50618 for amt > 0 { 50619 var n int32 50620 n = int32(libc.Xfread(tls, bp+172, uint64(1), func() uint64 { 50621 if uint64(unsafe.Sizeof([10240]uint8{})) <= uint64(amt) { 50622 return uint64(unsafe.Sizeof([10240]uint8{})) 50623 } 50624 return uint64(amt) 50625 }(), in)) 50626 if n <= 0 { 50627 break 50628 } 50629 MD5Update(tls, bp+80, bp+172, uint32(n)) 50630 amt = amt - n 50631 } 50632 libc.Xfclose(tls, in) 50633 MD5Final(tls, bp+10412, bp+80) 50634 converter = cd 50635 (*struct { 50636 f func(*libc.TLS, uintptr, uintptr) 50637 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+10412, bp+172) 50638 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+172, uintptr(0))) 50639 return TCL_OK 50640 } 50641 50642 func Md5_Init(tls *libc.TLS, interp uintptr) int32 { 50643 tcl.XTcl_CreateCommand(tls, interp, ts+34566, *(*uintptr)(unsafe.Pointer(&struct { 50644 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50645 }{md5_cmd})), 50646 *(*uintptr)(unsafe.Pointer(&struct { 50647 f func(*libc.TLS, uintptr, uintptr) 50648 }{MD5DigestToBase16})), uintptr(0)) 50649 tcl.XTcl_CreateCommand(tls, interp, ts+34570, *(*uintptr)(unsafe.Pointer(&struct { 50650 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50651 }{md5_cmd})), 50652 *(*uintptr)(unsafe.Pointer(&struct { 50653 f func(*libc.TLS, uintptr, uintptr) 50654 }{MD5DigestToBase10x8})), uintptr(0)) 50655 tcl.XTcl_CreateCommand(tls, interp, ts+34579, *(*uintptr)(unsafe.Pointer(&struct { 50656 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50657 }{md5file_cmd})), 50658 *(*uintptr)(unsafe.Pointer(&struct { 50659 f func(*libc.TLS, uintptr, uintptr) 50660 }{MD5DigestToBase16})), uintptr(0)) 50661 tcl.XTcl_CreateCommand(tls, interp, ts+34587, *(*uintptr)(unsafe.Pointer(&struct { 50662 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50663 }{md5file_cmd})), 50664 *(*uintptr)(unsafe.Pointer(&struct { 50665 f func(*libc.TLS, uintptr, uintptr) 50666 }{MD5DigestToBase10x8})), uintptr(0)) 50667 return TCL_OK 50668 } 50669 50670 func md5step(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 50671 var p uintptr 50672 var i int32 50673 if argc < 1 { 50674 return 50675 } 50676 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 50677 if p == uintptr(0) { 50678 return 50679 } 50680 if !((*MD5Context)(unsafe.Pointer(p)).FisInit != 0) { 50681 MD5Init(tls, p) 50682 } 50683 for i = 0; i < argc; i++ { 50684 var zData uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 50685 if zData != 0 { 50686 MD5Update(tls, p, zData, uint32(int32(libc.Xstrlen(tls, zData)))) 50687 } 50688 } 50689 } 50690 50691 func md5finalize(tls *libc.TLS, context uintptr) { 50692 bp := tls.Alloc(49) 50693 defer tls.Free(49) 50694 50695 var p uintptr 50696 50697 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 50698 MD5Final(tls, bp, p) 50699 MD5DigestToBase16(tls, bp, bp+16) 50700 sqlite3.Xsqlite3_result_text(tls, context, bp+16, -1, libc.UintptrFromInt32(-1)) 50701 } 50702 50703 func Md5_Register(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 50704 var rc int32 = sqlite3.Xsqlite3_create_function(tls, db, ts+34600, -1, SQLITE_UTF8, uintptr(0), uintptr(0), 50705 *(*uintptr)(unsafe.Pointer(&struct { 50706 f func(*libc.TLS, uintptr, int32, uintptr) 50707 }{md5step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{md5finalize}))) 50708 sqlite3.Xsqlite3_overload_function(tls, db, ts+34600, -1) 50709 return rc 50710 } 50711 50712 type multiplexGroup1 = struct { 50713 FaReal uintptr 50714 FnReal int32 50715 F__ccgo_pad1 [4]byte 50716 FzName uintptr 50717 FnName int32 50718 Fflags int32 50719 FszChunk uint32 50720 FbEnabled uint8 50721 FbTruncate uint8 50722 F__ccgo_pad2 [2]byte 50723 } 50724 50725 type multiplexGroup = multiplexGroup1 50726 type multiplexConn1 = struct { 50727 Fbase sqlite3_file 50728 FpGroup uintptr 50729 } 50730 50731 type multiplexConn = multiplexConn1 50732 50733 type multiplexReal = struct { 50734 Fp uintptr 50735 Fz uintptr 50736 } 50737 50738 var gMultiplex struct { 50739 FpOrigVfs uintptr 50740 FsThisVfs sqlite3_vfs 50741 FsIoMethodsV1 sqlite3_io_methods 50742 FsIoMethodsV2 sqlite3_io_methods 50743 FisInitialized int32 50744 F__ccgo_pad1 [4]byte 50745 } 50746 50747 func multiplexStrlen30(tls *libc.TLS, z uintptr) int32 { 50748 var z2 uintptr = z 50749 if z == uintptr(0) { 50750 return 0 50751 } 50752 for *(*uint8)(unsafe.Pointer(z2)) != 0 { 50753 z2++ 50754 } 50755 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 50756 } 50757 50758 func multiplexFilename(tls *libc.TLS, zBase uintptr, nBase int32, flags int32, iChunk int32, zOut uintptr) { 50759 bp := tls.Alloc(8) 50760 defer tls.Free(8) 50761 50762 var n int32 = nBase 50763 libc.Xmemcpy(tls, zOut, zBase, uint64(n+1)) 50764 if iChunk != 0 && iChunk <= MX_CHUNK_NUMBER { 50765 sqlite3.Xsqlite3_snprintf(tls, 4, zOut+uintptr(n), ts+34607, libc.VaList(bp, iChunk)) 50766 n = n + 3 50767 } 50768 50769 *(*uint8)(unsafe.Pointer(zOut + uintptr(n+1))) = uint8(0) 50770 } 50771 50772 func multiplexSubFilename(tls *libc.TLS, pGroup uintptr, iChunk int32) int32 { 50773 if iChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal { 50774 var p uintptr 50775 p = sqlite3.Xsqlite3_realloc64(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal, uint64(iChunk+1)*uint64(unsafe.Sizeof(multiplexReal{}))) 50776 if p == uintptr(0) { 50777 return SQLITE_NOMEM 50778 } 50779 libc.Xmemset(tls, p+uintptr((*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))*uint64(iChunk+1-(*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)) 50780 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = p 50781 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = iChunk + 1 50782 } 50783 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 50784 var z uintptr 50785 var n int32 = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName 50786 z = sqlite3.Xsqlite3_malloc64(tls, uint64(n+5)) 50787 if z == uintptr(0) { 50788 return SQLITE_NOMEM 50789 } 50790 multiplexFilename(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName, (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags, iChunk, z) 50791 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fz = sqlite3.Xsqlite3_create_filename(tls, z, ts+584, ts+584, 0, uintptr(0)) 50792 sqlite3.Xsqlite3_free(tls, z) 50793 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 50794 return SQLITE_NOMEM 50795 } 50796 } 50797 return SQLITE_OK 50798 } 50799 50800 func multiplexSubOpen(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr, pOutFlags uintptr, createFlag int32) uintptr { 50801 bp := tls.Alloc(20) 50802 defer tls.Free(20) 50803 50804 var pSubOpen uintptr = uintptr(0) 50805 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50806 50807 *(*int32)(unsafe.Pointer(rc)) = multiplexSubFilename(tls, pGroup, iChunk) 50808 if *(*int32)(unsafe.Pointer(rc)) == SQLITE_OK && libc.AssignUintptr(&pSubOpen, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) == uintptr(0) { 50809 var flags int32 50810 50811 flags = (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags 50812 if createFlag != 0 { 50813 flags = flags | SQLITE_OPEN_CREATE 50814 } else if iChunk == 0 { 50815 } else if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 50816 return uintptr(0) 50817 } else { 50818 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50819 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50820 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, 50821 SQLITE_ACCESS_EXISTS, bp+16) 50822 if *(*int32)(unsafe.Pointer(rc)) != 0 || !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) { 50823 if *(*int32)(unsafe.Pointer(rc)) != 0 { 50824 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34612, 50825 libc.VaList(bp, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 50826 } 50827 return uintptr(0) 50828 } 50829 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 50830 } 50831 pSubOpen = sqlite3.Xsqlite3_malloc64(tls, uint64((*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FszOsFile)) 50832 if pSubOpen == uintptr(0) { 50833 *(*int32)(unsafe.Pointer(rc)) = SQLITE_IOERR | int32(12)<<8 50834 return uintptr(0) 50835 } 50836 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = pSubOpen 50837 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50838 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 50839 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, pSubOpen, 50840 flags, pOutFlags) 50841 if *(*int32)(unsafe.Pointer(rc)) != SQLITE_OK { 50842 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34646, 50843 libc.VaList(bp+8, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 50844 sqlite3.Xsqlite3_free(tls, pSubOpen) 50845 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = uintptr(0) 50846 return uintptr(0) 50847 } 50848 } 50849 return pSubOpen 50850 } 50851 50852 func multiplexSubSize(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr) sqlite3_int64 { 50853 bp := tls.Alloc(8) 50854 defer tls.Free(8) 50855 50856 var pSub uintptr 50857 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 50858 50859 if *(*int32)(unsafe.Pointer(rc)) != 0 { 50860 return int64(0) 50861 } 50862 pSub = multiplexSubOpen(tls, pGroup, iChunk, rc, uintptr(0), 0) 50863 if pSub == uintptr(0) { 50864 return int64(0) 50865 } 50866 *(*int32)(unsafe.Pointer(rc)) = (*struct { 50867 f func(*libc.TLS, uintptr, uintptr) int32 50868 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSub)).FpMethods)).FxFileSize})).f(tls, pSub, bp) 50869 return *(*sqlite3_int64)(unsafe.Pointer(bp)) 50870 } 50871 50872 func multiplexControlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 50873 bp := tls.Alloc(4) 50874 defer tls.Free(4) 50875 50876 var rc int32 = SQLITE_OK 50877 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 50878 var op int32 = 0 50879 50880 if !(db != 0) || argc != 2 { 50881 rc = SQLITE_ERROR 50882 } else { 50883 op = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 50884 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 50885 50886 switch op { 50887 case 1: 50888 op = MULTIPLEX_CTRL_ENABLE 50889 break 50890 fallthrough 50891 case 2: 50892 op = MULTIPLEX_CTRL_SET_CHUNK_SIZE 50893 break 50894 fallthrough 50895 case 3: 50896 op = MULTIPLEX_CTRL_SET_MAX_CHUNKS 50897 break 50898 fallthrough 50899 default: 50900 rc = SQLITE_NOTFOUND 50901 break 50902 } 50903 } 50904 if rc == SQLITE_OK { 50905 rc = sqlite3.Xsqlite3_file_control(tls, db, uintptr(0), op, bp) 50906 } 50907 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 50908 } 50909 50910 func multiplexFuncInit(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 50911 var rc int32 50912 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+34678, 2, SQLITE_ANY, 50913 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 50914 f func(*libc.TLS, uintptr, int32, uintptr) 50915 }{multiplexControlFunc})), uintptr(0), uintptr(0)) 50916 return rc 50917 } 50918 50919 func multiplexSubClose(tls *libc.TLS, pGroup uintptr, iChunk int32, pOrigVfs uintptr) { 50920 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp 50921 if pSubOpen != 0 { 50922 (*struct { 50923 f func(*libc.TLS, uintptr) int32 50924 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 50925 if pOrigVfs != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz != 0 { 50926 (*struct { 50927 f func(*libc.TLS, uintptr, uintptr, int32) int32 50928 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, 0) 50929 } 50930 sqlite3.Xsqlite3_free(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) 50931 } 50932 sqlite3.Xsqlite3_free_filename(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz) 50933 libc.Xmemset(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))) 50934 } 50935 50936 func multiplexFreeComponents(tls *libc.TLS, pGroup uintptr) { 50937 var i int32 50938 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 50939 multiplexSubClose(tls, pGroup, i, uintptr(0)) 50940 } 50941 sqlite3.Xsqlite3_free(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal) 50942 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = uintptr(0) 50943 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = 0 50944 } 50945 50946 func multiplexOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 50947 bp := tls.Alloc(20) 50948 defer tls.Free(20) 50949 50950 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 50951 var pMultiplexOpen uintptr 50952 var pGroup uintptr = uintptr(0) 50953 var pSubOpen uintptr = uintptr(0) 50954 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 50955 var nName int32 = 0 50956 var sz int32 = 0 50957 var zToFree uintptr = uintptr(0) 50958 50959 _ = pVfs 50960 libc.Xmemset(tls, pConn, 0, uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile)) 50961 50962 pMultiplexOpen = pConn 50963 50964 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50965 if zName != 0 { 50966 nName = multiplexStrlen30(tls, zName) 50967 } else { 50968 nName = 0 50969 } 50970 sz = int32(uint64(unsafe.Sizeof(multiplexGroup{})) + 50971 uint64(nName) + uint64(1)) 50972 pGroup = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 50973 if pGroup == uintptr(0) { 50974 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 50975 } 50976 } 50977 50978 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 50979 var zUri uintptr 50980 if flags&SQLITE_OPEN_URI != 0 { 50981 zUri = zName 50982 } else { 50983 zUri = uintptr(0) 50984 } 50985 50986 libc.Xmemset(tls, pGroup, 0, uint64(sz)) 50987 (*multiplexConn)(unsafe.Pointer(pMultiplexOpen)).FpGroup = pGroup 50988 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = libc.Uint8(libc.Uint8FromInt32(-1)) 50989 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(sqlite3.Xsqlite3_uri_boolean(tls, zUri, ts+18304, 50990 libc.Bool32(flags&SQLITE_OPEN_MAIN_DB == 0))) 50991 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(sqlite3.Xsqlite3_uri_int64(tls, zUri, ts+34696, 50992 int64(SQLITE_MULTIPLEX_CHUNK_SIZE)))) 50993 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = ((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk + uint32(0xffff)) & libc.Uint32FromInt32(libc.CplInt32(0xffff)) 50994 if zName != 0 { 50995 var p uintptr = pGroup + 1*40 50996 (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName = p 50997 libc.Xmemcpy(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, zName, uint64(nName+1)) 50998 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName = nName 50999 } 51000 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 51001 for uint32(sqlite3.Xsqlite3PendingByte)%(*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk-uint32(65536) { 51002 *(*uint32)(unsafe.Pointer(pGroup + 32)) += uint32(65536) 51003 } 51004 } 51005 (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags = flags & libc.CplInt32(SQLITE_OPEN_URI) 51006 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, 1) 51007 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51008 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp, pOutFlags, 0) 51009 if pSubOpen == uintptr(0) && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51010 *(*int32)(unsafe.Pointer(bp)) = SQLITE_CANTOPEN 51011 } 51012 } 51013 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51014 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51015 f func(*libc.TLS, uintptr, uintptr) int32 51016 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp+8) 51017 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && zName != 0 { 51018 if flags&SQLITE_OPEN_SUPER_JOURNAL != 0 { 51019 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 51020 } else if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 51021 if flags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 51022 var iChunk int32 = 1 51023 for __ccgo := true; __ccgo; __ccgo = *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 51024 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51025 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51026 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, 51027 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, SQLITE_ACCESS_EXISTS, bp+16) 51028 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 51029 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51030 f func(*libc.TLS, uintptr, uintptr, int32) int32 51031 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, 0) 51032 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51033 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, libc.PreIncInt32(&iChunk, 1)) 51034 } 51035 } 51036 } 51037 } 51038 } else { 51039 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51040 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51041 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+1*16)).Fz, 51042 SQLITE_ACCESS_EXISTS, bp+16) 51043 *(*int32)(unsafe.Pointer(bp + 16)) = libc.Bool32(multiplexSubSize(tls, pGroup, 1, bp) > int64(0)) 51044 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 && *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == *(*sqlite3_int64)(unsafe.Pointer(bp + 8))&int64(0xffff0000) && *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) > int64(0) && 51045 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) != sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 51046 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)))) 51047 } else if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) && *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) > sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 51048 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 51049 } 51050 } 51051 } 51052 } 51053 51054 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51055 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 51056 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 176 51057 } else { 51058 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 328 51059 } 51060 } else { 51061 multiplexFreeComponents(tls, pGroup) 51062 sqlite3.Xsqlite3_free(tls, pGroup) 51063 } 51064 } 51065 sqlite3.Xsqlite3_free(tls, zToFree) 51066 return *(*int32)(unsafe.Pointer(bp)) 51067 } 51068 51069 func multiplexDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 51070 bp := tls.Alloc(4) 51071 defer tls.Free(4) 51072 51073 var rc int32 51074 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 51075 rc = (*struct { 51076 f func(*libc.TLS, uintptr, uintptr, int32) int32 51077 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 51078 if rc == SQLITE_OK { 51079 var nName int32 = int32(libc.Xstrlen(tls, zName)) 51080 var z uintptr 51081 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nName+5)) 51082 if z == uintptr(0) { 51083 rc = SQLITE_IOERR | int32(12)<<8 51084 } else { 51085 var iChunk int32 = 0 51086 51087 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 51088 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreIncInt32(&iChunk, 1), z) 51089 rc = (*struct { 51090 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51091 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 51092 } 51093 for rc == SQLITE_OK && iChunk > 1 { 51094 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreDecInt32(&iChunk, 1), z) 51095 rc = (*struct { 51096 f func(*libc.TLS, uintptr, uintptr, int32) int32 51097 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 51098 } 51099 if rc == SQLITE_OK { 51100 iChunk = 0 51101 for __ccgo1 := true; __ccgo1; __ccgo1 = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 51102 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreIncInt32(&iChunk, 1), z) 51103 rc = (*struct { 51104 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51105 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 51106 } 51107 for rc == SQLITE_OK && iChunk > 1 { 51108 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreDecInt32(&iChunk, 1), z) 51109 rc = (*struct { 51110 f func(*libc.TLS, uintptr, uintptr, int32) int32 51111 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 51112 } 51113 } 51114 } 51115 sqlite3.Xsqlite3_free(tls, z) 51116 } 51117 return rc 51118 } 51119 51120 func multiplexAccess(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 51121 return (*struct { 51122 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51123 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxAccess})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 51124 } 51125 51126 func multiplexFullPathname(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 51127 return (*struct { 51128 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51129 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxFullPathname})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 51130 } 51131 51132 func multiplexDlOpen(tls *libc.TLS, a uintptr, b uintptr) uintptr { 51133 return (*struct { 51134 f func(*libc.TLS, uintptr, uintptr) uintptr 51135 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlOpen})).f(tls, gMultiplex.FpOrigVfs, b) 51136 } 51137 51138 func multiplexDlError(tls *libc.TLS, a uintptr, b int32, c uintptr) { 51139 (*struct { 51140 f func(*libc.TLS, uintptr, int32, uintptr) 51141 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlError})).f(tls, gMultiplex.FpOrigVfs, b, c) 51142 } 51143 51144 func multiplexDlSym(tls *libc.TLS, a uintptr, b uintptr, c uintptr) uintptr { 51145 return (*struct { 51146 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51147 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlSym})).f(tls, gMultiplex.FpOrigVfs, b, c) 51148 } 51149 51150 func multiplexDlClose(tls *libc.TLS, a uintptr, b uintptr) { 51151 (*struct { 51152 f func(*libc.TLS, uintptr, uintptr) 51153 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlClose})).f(tls, gMultiplex.FpOrigVfs, b) 51154 } 51155 51156 func multiplexRandomness(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 51157 return (*struct { 51158 f func(*libc.TLS, uintptr, int32, uintptr) int32 51159 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxRandomness})).f(tls, gMultiplex.FpOrigVfs, b, c) 51160 } 51161 51162 func multiplexSleep(tls *libc.TLS, a uintptr, b int32) int32 { 51163 return (*struct { 51164 f func(*libc.TLS, uintptr, int32) int32 51165 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxSleep})).f(tls, gMultiplex.FpOrigVfs, b) 51166 } 51167 51168 func multiplexCurrentTime(tls *libc.TLS, a uintptr, b uintptr) int32 { 51169 return (*struct { 51170 f func(*libc.TLS, uintptr, uintptr) int32 51171 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTime})).f(tls, gMultiplex.FpOrigVfs, b) 51172 } 51173 51174 func multiplexGetLastError(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 51175 if (*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError != 0 { 51176 return (*struct { 51177 f func(*libc.TLS, uintptr, int32, uintptr) int32 51178 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError})).f(tls, gMultiplex.FpOrigVfs, b, c) 51179 } else { 51180 return 0 51181 } 51182 return int32(0) 51183 } 51184 51185 func multiplexCurrentTimeInt64(tls *libc.TLS, a uintptr, b uintptr) int32 { 51186 return (*struct { 51187 f func(*libc.TLS, uintptr, uintptr) int32 51188 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTimeInt64})).f(tls, gMultiplex.FpOrigVfs, b) 51189 } 51190 51191 func multiplexClose(tls *libc.TLS, pConn uintptr) int32 { 51192 var p uintptr = pConn 51193 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51194 var rc int32 = SQLITE_OK 51195 multiplexFreeComponents(tls, pGroup) 51196 sqlite3.Xsqlite3_free(tls, pGroup) 51197 return rc 51198 } 51199 51200 func multiplexRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 51201 bp := tls.Alloc(4) 51202 defer tls.Free(4) 51203 51204 var p uintptr = pConn 51205 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51206 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51207 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51208 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51209 if pSubOpen == uintptr(0) { 51210 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 51211 } else { 51212 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51213 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51214 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 51215 } 51216 } else { 51217 for iAmt > 0 { 51218 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51219 var pSubOpen uintptr 51220 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 51221 if pSubOpen != 0 { 51222 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 51223 if extra < 0 { 51224 extra = 0 51225 } 51226 iAmt = iAmt - extra 51227 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51228 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51229 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, 51230 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51231 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 51232 break 51233 } 51234 pBuf = pBuf + uintptr(iAmt) 51235 iOfst = iOfst + sqlite3_int64(iAmt) 51236 iAmt = extra 51237 } else { 51238 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 51239 break 51240 } 51241 } 51242 } 51243 51244 return *(*int32)(unsafe.Pointer(bp)) 51245 } 51246 51247 func multiplexWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 51248 bp := tls.Alloc(4) 51249 defer tls.Free(4) 51250 51251 var p uintptr = pConn 51252 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51253 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51254 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51255 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51256 if pSubOpen == uintptr(0) { 51257 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(3)<<8 51258 } else { 51259 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51260 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51261 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 51262 } 51263 } else { 51264 for *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && iAmt > 0 { 51265 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51266 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 51267 if pSubOpen != 0 { 51268 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 51269 if extra < 0 { 51270 extra = 0 51271 } 51272 iAmt = iAmt - extra 51273 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51274 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51275 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, 51276 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51277 pBuf = pBuf + uintptr(iAmt) 51278 iOfst = iOfst + sqlite3_int64(iAmt) 51279 iAmt = extra 51280 } 51281 } 51282 } 51283 return *(*int32)(unsafe.Pointer(bp)) 51284 } 51285 51286 func multiplexTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 51287 bp := tls.Alloc(4) 51288 defer tls.Free(4) 51289 51290 var p uintptr = pConn 51291 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51292 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51293 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51294 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51295 if pSubOpen == uintptr(0) { 51296 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 51297 } else { 51298 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51299 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51300 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 51301 } 51302 } else { 51303 var i int32 51304 var iBaseGroup int32 = int32(size / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51305 var pSubOpen uintptr 51306 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 51307 51308 for i = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal - 1; i > iBaseGroup && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i-- { 51309 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 51310 multiplexSubClose(tls, pGroup, i, pOrigVfs) 51311 } else { 51312 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 0) 51313 if pSubOpen != 0 { 51314 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51315 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51316 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, int64(0)) 51317 } 51318 } 51319 } 51320 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51321 pSubOpen = multiplexSubOpen(tls, pGroup, iBaseGroup, bp, uintptr(0), 0) 51322 if pSubOpen != 0 { 51323 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51324 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51325 })(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)) 51326 } 51327 } 51328 if *(*int32)(unsafe.Pointer(bp)) != 0 { 51329 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 51330 } 51331 } 51332 return *(*int32)(unsafe.Pointer(bp)) 51333 } 51334 51335 func multiplexSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 51336 var p uintptr = pConn 51337 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51338 var rc int32 = SQLITE_OK 51339 var i int32 51340 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 51341 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(i)*16)).Fp 51342 if pSubOpen != 0 { 51343 var rc2 int32 = (*struct { 51344 f func(*libc.TLS, uintptr, int32) int32 51345 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 51346 if rc2 != SQLITE_OK { 51347 rc = rc2 51348 } 51349 } 51350 } 51351 return rc 51352 } 51353 51354 func multiplexFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 51355 bp := tls.Alloc(4) 51356 defer tls.Free(4) 51357 51358 var p uintptr = pConn 51359 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51360 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51361 var i int32 51362 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51363 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51364 if pSubOpen == uintptr(0) { 51365 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(7)<<8 51366 } else { 51367 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51368 f func(*libc.TLS, uintptr, uintptr) int32 51369 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, pSize) 51370 } 51371 } else { 51372 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = int64(0) 51373 for i = 0; *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i++ { 51374 var sz sqlite3_int64 = multiplexSubSize(tls, pGroup, i, bp) 51375 if sz == int64(0) { 51376 break 51377 } 51378 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = sqlite3_int64(i)*sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) + sz 51379 } 51380 } 51381 return *(*int32)(unsafe.Pointer(bp)) 51382 } 51383 51384 func multiplexLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 51385 bp := tls.Alloc(4) 51386 defer tls.Free(4) 51387 51388 var p uintptr = pConn 51389 51390 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51391 if pSubOpen != 0 { 51392 return (*struct { 51393 f func(*libc.TLS, uintptr, int32) int32 51394 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 51395 } 51396 return SQLITE_BUSY 51397 } 51398 51399 func multiplexUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 51400 bp := tls.Alloc(4) 51401 defer tls.Free(4) 51402 51403 var p uintptr = pConn 51404 51405 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51406 if pSubOpen != 0 { 51407 return (*struct { 51408 f func(*libc.TLS, uintptr, int32) int32 51409 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 51410 } 51411 return SQLITE_IOERR | int32(8)<<8 51412 } 51413 51414 func multiplexCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 51415 bp := tls.Alloc(4) 51416 defer tls.Free(4) 51417 51418 var p uintptr = pConn 51419 51420 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51421 if pSubOpen != 0 { 51422 return (*struct { 51423 f func(*libc.TLS, uintptr, uintptr) int32 51424 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 51425 } 51426 return SQLITE_IOERR | int32(14)<<8 51427 } 51428 51429 func multiplexFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 51430 bp := tls.Alloc(44) 51431 defer tls.Free(44) 51432 51433 var p uintptr = pConn 51434 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51435 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 51436 var pSubOpen uintptr 51437 51438 if !(gMultiplex.FisInitialized != 0) { 51439 return SQLITE_MISUSE 51440 } 51441 switch op { 51442 case MULTIPLEX_CTRL_ENABLE: 51443 if pArg != 0 { 51444 var bEnabled int32 = *(*int32)(unsafe.Pointer(pArg)) 51445 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(bEnabled) 51446 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51447 } 51448 break 51449 case MULTIPLEX_CTRL_SET_CHUNK_SIZE: 51450 if pArg != 0 { 51451 var szChunk uint32 = *(*uint32)(unsafe.Pointer(pArg)) 51452 if szChunk < uint32(1) { 51453 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_MISUSE 51454 } else { 51455 szChunk = szChunk + uint32(MAX_PAGE_SIZE-1) 51456 szChunk = szChunk & libc.Uint32FromInt32(libc.CplInt32(MAX_PAGE_SIZE-1)) 51457 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = szChunk 51458 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51459 } 51460 } 51461 break 51462 case MULTIPLEX_CTRL_SET_MAX_CHUNKS: 51463 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51464 break 51465 case SQLITE_FCNTL_SIZE_HINT: 51466 fallthrough 51467 case SQLITE_FCNTL_CHUNK_SIZE: 51468 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51469 break 51470 case SQLITE_FCNTL_PRAGMA: 51471 { 51472 var aFcntl uintptr = pArg 51473 51474 if *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)) != 0 && sqlite3.Xsqlite3_strnicmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34706, 10) == 0 { 51475 *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) = int64(0) 51476 multiplexFileSize(tls, pConn, bp+32) 51477 51478 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34717) == 0 { 51479 if *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)) != 0 && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(aFcntl + 2*8)))) != 0 { 51480 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4178) == 0 || 51481 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+28899) == 0 { 51482 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(1) 51483 } else if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4542) == 0 || 51484 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+14193) == 0 { 51485 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(0) 51486 } 51487 } 51488 51489 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, func() uintptr { 51490 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 51491 return ts + 4178 51492 } 51493 return ts + 4542 51494 }(), 0) 51495 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51496 break 51497 } 51498 51499 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34736) == 0 { 51500 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, libc.Bool32(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0))) 51501 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51502 break 51503 } 51504 51505 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34754) == 0 && 51506 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 51507 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+17791, libc.VaList(bp+8, (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51508 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51509 break 51510 } 51511 51512 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34774) == 0 { 51513 var n int32 = 0 51514 var ii int32 51515 for ii = 0; ii < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; ii++ { 51516 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(ii)*16)).Fp != uintptr(0) { 51517 n++ 51518 } 51519 } 51520 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+16, n)) 51521 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51522 break 51523 } 51524 } 51525 51526 } 51527 fallthrough 51528 default: 51529 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp+40, uintptr(0), 0) 51530 if pSubOpen != 0 { 51531 *(*int32)(unsafe.Pointer(bp + 40)) = (*struct { 51532 f func(*libc.TLS, uintptr, int32, uintptr) int32 51533 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 51534 if op == SQLITE_FCNTL_VFSNAME && *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 51535 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+34794, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(pArg)))) 51536 } 51537 } 51538 break 51539 } 51540 return *(*int32)(unsafe.Pointer(bp + 40)) 51541 } 51542 51543 func multiplexSectorSize(tls *libc.TLS, pConn uintptr) int32 { 51544 bp := tls.Alloc(4) 51545 defer tls.Free(4) 51546 51547 var p uintptr = pConn 51548 51549 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51550 if pSubOpen != 0 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize != 0 { 51551 return (*struct { 51552 f func(*libc.TLS, uintptr) int32 51553 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 51554 } 51555 return DEFAULT_SECTOR_SIZE 51556 } 51557 51558 func multiplexDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 51559 bp := tls.Alloc(4) 51560 defer tls.Free(4) 51561 51562 var p uintptr = pConn 51563 51564 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51565 if pSubOpen != 0 { 51566 return (*struct { 51567 f func(*libc.TLS, uintptr) int32 51568 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 51569 } 51570 return 0 51571 } 51572 51573 func multiplexShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 51574 bp := tls.Alloc(4) 51575 defer tls.Free(4) 51576 51577 var p uintptr = pConn 51578 51579 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51580 if pSubOpen != 0 { 51581 return (*struct { 51582 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 51583 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 51584 } 51585 return SQLITE_IOERR 51586 } 51587 51588 func multiplexShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 51589 bp := tls.Alloc(4) 51590 defer tls.Free(4) 51591 51592 var p uintptr = pConn 51593 51594 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51595 if pSubOpen != 0 { 51596 return (*struct { 51597 f func(*libc.TLS, uintptr, int32, int32, int32) int32 51598 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 51599 } 51600 return SQLITE_BUSY 51601 } 51602 51603 func multiplexShmBarrier(tls *libc.TLS, pConn uintptr) { 51604 bp := tls.Alloc(4) 51605 defer tls.Free(4) 51606 51607 var p uintptr = pConn 51608 51609 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51610 if pSubOpen != 0 { 51611 (*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) 51612 } 51613 } 51614 51615 func multiplexShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 51616 bp := tls.Alloc(4) 51617 defer tls.Free(4) 51618 51619 var p uintptr = pConn 51620 51621 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51622 if pSubOpen != 0 { 51623 return (*struct { 51624 f func(*libc.TLS, uintptr, int32) int32 51625 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 51626 } 51627 return SQLITE_OK 51628 } 51629 51630 func sqlite3_multiplex_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 51631 var pOrigVfs uintptr 51632 if gMultiplex.FisInitialized != 0 { 51633 return SQLITE_MISUSE 51634 } 51635 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 51636 if pOrigVfs == uintptr(0) { 51637 return SQLITE_ERROR 51638 } 51639 51640 gMultiplex.FisInitialized = 1 51641 gMultiplex.FpOrigVfs = pOrigVfs 51642 gMultiplex.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 51643 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gMultiplex)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(multiplexConn{}))) 51644 gMultiplex.FsThisVfs.FzName = ts + 34807 51645 gMultiplex.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 51646 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 51647 }{multiplexOpen})) 51648 gMultiplex.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 51649 f func(*libc.TLS, uintptr, uintptr, int32) int32 51650 }{multiplexDelete})) 51651 gMultiplex.FsThisVfs.FxAccess = *(*uintptr)(unsafe.Pointer(&struct { 51652 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51653 }{multiplexAccess})) 51654 gMultiplex.FsThisVfs.FxFullPathname = *(*uintptr)(unsafe.Pointer(&struct { 51655 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51656 }{multiplexFullPathname})) 51657 gMultiplex.FsThisVfs.FxDlOpen = *(*uintptr)(unsafe.Pointer(&struct { 51658 f func(*libc.TLS, uintptr, uintptr) uintptr 51659 }{multiplexDlOpen})) 51660 gMultiplex.FsThisVfs.FxDlError = *(*uintptr)(unsafe.Pointer(&struct { 51661 f func(*libc.TLS, uintptr, int32, uintptr) 51662 }{multiplexDlError})) 51663 gMultiplex.FsThisVfs.FxDlSym = *(*uintptr)(unsafe.Pointer(&struct { 51664 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51665 }{multiplexDlSym})) 51666 gMultiplex.FsThisVfs.FxDlClose = *(*uintptr)(unsafe.Pointer(&struct { 51667 f func(*libc.TLS, uintptr, uintptr) 51668 }{multiplexDlClose})) 51669 gMultiplex.FsThisVfs.FxRandomness = *(*uintptr)(unsafe.Pointer(&struct { 51670 f func(*libc.TLS, uintptr, int32, uintptr) int32 51671 }{multiplexRandomness})) 51672 gMultiplex.FsThisVfs.FxSleep = *(*uintptr)(unsafe.Pointer(&struct { 51673 f func(*libc.TLS, uintptr, int32) int32 51674 }{multiplexSleep})) 51675 gMultiplex.FsThisVfs.FxCurrentTime = *(*uintptr)(unsafe.Pointer(&struct { 51676 f func(*libc.TLS, uintptr, uintptr) int32 51677 }{multiplexCurrentTime})) 51678 gMultiplex.FsThisVfs.FxGetLastError = *(*uintptr)(unsafe.Pointer(&struct { 51679 f func(*libc.TLS, uintptr, int32, uintptr) int32 51680 }{multiplexGetLastError})) 51681 gMultiplex.FsThisVfs.FxCurrentTimeInt64 = *(*uintptr)(unsafe.Pointer(&struct { 51682 f func(*libc.TLS, uintptr, uintptr) int32 51683 }{multiplexCurrentTimeInt64})) 51684 51685 gMultiplex.FsIoMethodsV1.FiVersion = 1 51686 gMultiplex.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 51687 f func(*libc.TLS, uintptr) int32 51688 }{multiplexClose})) 51689 gMultiplex.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 51690 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51691 }{multiplexRead})) 51692 gMultiplex.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 51693 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51694 }{multiplexWrite})) 51695 gMultiplex.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 51696 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51697 }{multiplexTruncate})) 51698 gMultiplex.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 51699 f func(*libc.TLS, uintptr, int32) int32 51700 }{multiplexSync})) 51701 gMultiplex.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 51702 f func(*libc.TLS, uintptr, uintptr) int32 51703 }{multiplexFileSize})) 51704 gMultiplex.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 51705 f func(*libc.TLS, uintptr, int32) int32 51706 }{multiplexLock})) 51707 gMultiplex.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 51708 f func(*libc.TLS, uintptr, int32) int32 51709 }{multiplexUnlock})) 51710 gMultiplex.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 51711 f func(*libc.TLS, uintptr, uintptr) int32 51712 }{multiplexCheckReservedLock})) 51713 gMultiplex.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 51714 f func(*libc.TLS, uintptr, int32, uintptr) int32 51715 }{multiplexFileControl})) 51716 gMultiplex.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 51717 f func(*libc.TLS, uintptr) int32 51718 }{multiplexSectorSize})) 51719 gMultiplex.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 51720 f func(*libc.TLS, uintptr) int32 51721 }{multiplexDeviceCharacteristics})) 51722 gMultiplex.FsIoMethodsV2 = gMultiplex.FsIoMethodsV1 51723 gMultiplex.FsIoMethodsV2.FiVersion = 2 51724 gMultiplex.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 51725 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 51726 }{multiplexShmMap})) 51727 gMultiplex.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 51728 f func(*libc.TLS, uintptr, int32, int32, int32) int32 51729 }{multiplexShmLock})) 51730 gMultiplex.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{multiplexShmBarrier})) 51731 gMultiplex.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 51732 f func(*libc.TLS, uintptr, int32) int32 51733 }{multiplexShmUnmap})) 51734 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gMultiplex))+8, makeDefault) 51735 51736 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 51737 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 51738 }{multiplexFuncInit}))) 51739 51740 return SQLITE_OK 51741 } 51742 51743 func sqlite3_multiplex_shutdown(tls *libc.TLS, eForce int32) int32 { 51744 var rc int32 = SQLITE_OK 51745 if gMultiplex.FisInitialized == 0 { 51746 return SQLITE_MISUSE 51747 } 51748 gMultiplex.FisInitialized = 0 51749 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gMultiplex))+8) 51750 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gMultiplex)), 0, uint64(unsafe.Sizeof(gMultiplex))) 51751 return rc 51752 } 51753 51754 func test_multiplex_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51755 bp := tls.Alloc(4) 51756 defer tls.Free(4) 51757 51758 var zName uintptr 51759 51760 var rc int32 51761 51762 _ = clientData 51763 51764 if objc != 3 { 51765 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 51766 return TCL_ERROR 51767 } 51768 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 51769 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 51770 return TCL_ERROR 51771 } 51772 if int32(*(*uint8)(unsafe.Pointer(zName))) == 0 { 51773 zName = uintptr(0) 51774 } 51775 51776 rc = sqlite3_multiplex_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 51777 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51778 51779 return TCL_OK 51780 } 51781 51782 func test_multiplex_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51783 var rc int32 51784 51785 _ = clientData 51786 51787 if objc == 2 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+34834) != 0 { 51788 objc = 3 51789 } 51790 if objc != 1 && objc != 2 { 51791 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34841) 51792 return TCL_ERROR 51793 } 51794 51795 rc = sqlite3_multiplex_shutdown(tls, libc.Bool32(objc == 2)) 51796 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51797 51798 return TCL_OK 51799 } 51800 51801 func test_multiplex_control(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 51802 bp := tls.Alloc(176) 51803 defer tls.Free(176) 51804 51805 var rc int32 51806 51807 var db uintptr 51808 *(*int32)(unsafe.Pointer(bp + 172)) = 0 51809 var pArg uintptr = uintptr(0) 51810 51811 *(*[4]struct { 51812 FzName uintptr 51813 Fop int32 51814 Fargtype int32 51815 })(unsafe.Pointer(bp + 104)) = [4]struct { 51816 FzName uintptr 51817 Fop int32 51818 Fargtype int32 51819 }{ 51820 {FzName: ts + 10145, Fop: MULTIPLEX_CTRL_ENABLE, Fargtype: 1}, 51821 {FzName: ts + 34850, Fop: MULTIPLEX_CTRL_SET_CHUNK_SIZE, Fargtype: 1}, 51822 {FzName: ts + 34861, Fop: MULTIPLEX_CTRL_SET_MAX_CHUNKS, Fargtype: 1}, 51823 {}, 51824 } 51825 51826 if objc != 5 { 51827 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34872) 51828 return TCL_ERROR 51829 } 51830 51831 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) { 51832 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+34908, 0)) 51833 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+11945, 0)) 51834 return TCL_ERROR 51835 } else { 51836 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 40)).FobjClientData)) 51837 } 51838 51839 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 51840 interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+104, int32(unsafe.Sizeof(struct { 51841 FzName uintptr 51842 Fop int32 51843 Fargtype int32 51844 }{})), ts+2014, 0, bp+168) 51845 if rc != TCL_OK { 51846 return rc 51847 } 51848 51849 switch (*struct { 51850 FzName uintptr 51851 Fop int32 51852 Fargtype int32 51853 })(unsafe.Pointer(bp + 104 + uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fargtype { 51854 case 1: 51855 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+172) != 0 { 51856 return TCL_ERROR 51857 } 51858 pArg = bp + 172 51859 break 51860 default: 51861 tcl.XTcl_WrongNumArgs(tls, interp, 4, objv, ts+2523) 51862 return TCL_ERROR 51863 } 51864 51865 rc = sqlite3.Xsqlite3_file_control(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), (*struct { 51866 FzName uintptr 51867 Fop int32 51868 Fargtype int32 51869 })(unsafe.Pointer(bp+104+uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fop, pArg) 51870 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 51871 if rc == SQLITE_OK { 51872 return TCL_OK 51873 } 51874 return TCL_ERROR 51875 } 51876 51877 func Sqlitemultiplex_Init(tls *libc.TLS, interp uintptr) int32 { 51878 var i int32 51879 51880 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd7))/uint64(unsafe.Sizeof(struct { 51881 FzName uintptr 51882 FxProc uintptr 51883 }{})); i++ { 51884 tcl.XTcl_CreateObjCommand(tls, interp, aCmd7[i].FzName, aCmd7[i].FxProc, uintptr(0), uintptr(0)) 51885 } 51886 51887 return TCL_OK 51888 } 51889 51890 var aCmd7 = [3]struct { 51891 FzName uintptr 51892 FxProc uintptr 51893 }{ 51894 {FzName: ts + 34940, FxProc: 0}, 51895 {FzName: ts + 34969, FxProc: 0}, 51896 {FzName: ts + 34996, FxProc: 0}, 51897 } 51898 51899 type sqlite3_mutex = sqlite3_mutex1 51900 51901 var aName = [15]uintptr{ 51902 ts + 35022, ts + 35027, ts + 35037, ts + 35049, 51903 ts + 35060, ts + 35072, ts + 35084, ts + 35095, 51904 ts + 35107, ts + 35119, ts + 35131, ts + 35143, 51905 ts + 35155, ts + 35167, uintptr(0), 51906 } 51907 51908 type test_mutex_globals = struct { 51909 FisInstalled int32 51910 FdisableInit int32 51911 FdisableTry int32 51912 FisInit int32 51913 Fm sqlite3_mutex_methods 51914 FaCounter [14]int32 51915 FaStatic [12]sqlite3_mutex 51916 } 51917 51918 var g3 = test_mutex_globals{} 51919 51920 func counterMutexHeld(tls *libc.TLS, p uintptr) int32 { 51921 return (*struct { 51922 f func(*libc.TLS, uintptr) int32 51923 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexHeld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51924 } 51925 51926 func counterMutexNotheld(tls *libc.TLS, p uintptr) int32 { 51927 return (*struct { 51928 f func(*libc.TLS, uintptr) int32 51929 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexNotheld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51930 } 51931 51932 func counterMutexInit(tls *libc.TLS) int32 { 51933 var rc int32 51934 if g3.FdisableInit != 0 { 51935 return g3.FdisableInit 51936 } 51937 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexInit})).f(tls) 51938 g3.FisInit = 1 51939 return rc 51940 } 51941 51942 func counterMutexEnd(tls *libc.TLS) int32 { 51943 g3.FisInit = 0 51944 return (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnd})).f(tls) 51945 } 51946 51947 func counterMutexAlloc(tls *libc.TLS, eType int32) uintptr { 51948 var pReal uintptr 51949 var pRet uintptr = uintptr(0) 51950 51951 pReal = (*struct { 51952 f func(*libc.TLS, int32) uintptr 51953 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexAlloc})).f(tls, eType) 51954 if !(pReal != 0) { 51955 return uintptr(0) 51956 } 51957 51958 if eType == SQLITE_MUTEX_FAST || eType == SQLITE_MUTEX_RECURSIVE { 51959 pRet = libc.Xmalloc(tls, uint64(unsafe.Sizeof(sqlite3_mutex{}))) 51960 } else { 51961 var eStaticType int32 = eType - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_RECURSIVE + 1))) 51962 51963 pRet = uintptr(unsafe.Pointer(&g3)) + 144 + uintptr(eStaticType)*16 51964 } 51965 51966 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FeType = eType 51967 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FpReal = pReal 51968 return pRet 51969 } 51970 51971 func counterMutexFree(tls *libc.TLS, p uintptr) { 51972 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexFree})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51973 if (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_FAST || (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_RECURSIVE { 51974 libc.Xfree(tls, p) 51975 } 51976 } 51977 51978 func counterMutexEnter(tls *libc.TLS, p uintptr) { 51979 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51980 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnter})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51981 } 51982 51983 func counterMutexTry(tls *libc.TLS, p uintptr) int32 { 51984 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 51985 if g3.FdisableTry != 0 { 51986 return SQLITE_BUSY 51987 } 51988 return (*struct { 51989 f func(*libc.TLS, uintptr) int32 51990 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexTry})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51991 } 51992 51993 func counterMutexLeave(tls *libc.TLS, p uintptr) { 51994 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexLeave})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 51995 } 51996 51997 func test_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51998 var rc int32 51999 52000 if objc != 1 { 52001 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52002 return TCL_ERROR 52003 } 52004 52005 rc = sqlite3.Xsqlite3_shutdown(tls) 52006 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52007 return TCL_OK 52008 } 52009 52010 func test_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52011 var rc int32 52012 52013 if objc != 1 { 52014 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52015 return TCL_ERROR 52016 } 52017 52018 rc = sqlite3.Xsqlite3_initialize(tls) 52019 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52020 return TCL_OK 52021 } 52022 52023 func test_install_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52024 bp := tls.Alloc(136) 52025 defer tls.Free(136) 52026 52027 var rc int32 = SQLITE_OK 52028 52029 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 64)) = sqlite3_mutex_methods{ 52030 FxMutexInit: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexInit})), 52031 FxMutexEnd: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexEnd})), 52032 FxMutexAlloc: *(*uintptr)(unsafe.Pointer(&struct { 52033 f func(*libc.TLS, int32) uintptr 52034 }{counterMutexAlloc})), 52035 FxMutexFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexFree})), 52036 FxMutexEnter: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexEnter})), 52037 FxMutexTry: *(*uintptr)(unsafe.Pointer(&struct { 52038 f func(*libc.TLS, uintptr) int32 52039 }{counterMutexTry})), 52040 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexLeave})), 52041 FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 52042 f func(*libc.TLS, uintptr) int32 52043 }{counterMutexHeld})), 52044 FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 52045 f func(*libc.TLS, uintptr) int32 52046 }{counterMutexNotheld})), 52047 } 52048 52049 if objc != 2 { 52050 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 52051 return TCL_ERROR 52052 } 52053 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+56) { 52054 return TCL_ERROR 52055 } 52056 52057 if *(*int32)(unsafe.Pointer(bp + 56)) == g3.FisInstalled { 52058 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35179, 0)) 52059 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, func() uintptr { 52060 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 52061 return ts + 35199 52062 } 52063 return ts + 35217 52064 }(), 0)) 52065 return TCL_ERROR 52066 } 52067 52068 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 52069 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp+32, uintptr(unsafe.Pointer(&g3))+16)) 52070 if rc == SQLITE_OK { 52071 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+40, bp+64)) 52072 } 52073 g3.FdisableTry = 0 52074 } else { 52075 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+48, uintptr(unsafe.Pointer(&g3))+16)) 52076 libc.Xmemset(tls, uintptr(unsafe.Pointer(&g3))+16, 0, uint64(unsafe.Sizeof(sqlite3_mutex_methods{}))) 52077 } 52078 52079 if rc == SQLITE_OK { 52080 g3.FisInstalled = *(*int32)(unsafe.Pointer(bp + 56)) 52081 } 52082 52083 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52084 return TCL_OK 52085 } 52086 52087 func test_read_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52088 var pRet uintptr 52089 var ii int32 52090 52091 if objc != 1 { 52092 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52093 return TCL_ERROR 52094 } 52095 52096 pRet = tcl.XTcl_NewObj(tls) 52097 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 52098 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 52099 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, aName[ii], -1)) 52100 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)))) 52101 } 52102 tcl.XTcl_SetObjResult(tls, interp, pRet) 52103 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 52104 var _objPtr uintptr = pRet 52105 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 52106 tcl.XTclFreeObj(tls, _objPtr) 52107 } 52108 } 52109 52110 return TCL_OK 52111 } 52112 52113 func test_clear_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52114 var ii int32 52115 52116 if objc != 1 { 52117 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52118 return TCL_ERROR 52119 } 52120 52121 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 52122 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)) = 0 52123 } 52124 return TCL_OK 52125 } 52126 52127 func test_alloc_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52128 bp := tls.Alloc(124) 52129 defer tls.Free(124) 52130 52131 var p uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 52132 52133 sqlite3.Xsqlite3_mutex_free(tls, p) 52134 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+24, ts+9889, libc.VaList(bp, p)) 52135 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, uintptr(0))) 52136 return TCL_OK 52137 } 52138 52139 func test_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52140 bp := tls.Alloc(68) 52141 defer tls.Free(68) 52142 52143 *(*[4]ConfigOption)(unsafe.Pointer(bp)) = [4]ConfigOption{ 52144 {FzName: ts + 35231, FiValue: SQLITE_CONFIG_SINGLETHREAD}, 52145 {FzName: ts + 35244, FiValue: SQLITE_CONFIG_MULTITHREAD}, 52146 {FzName: ts + 35256, FiValue: SQLITE_CONFIG_SERIALIZED}, 52147 {}, 52148 } 52149 var s int32 = int32(unsafe.Sizeof(ConfigOption{})) 52150 52151 var rc int32 52152 52153 if objc != 2 { 52154 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52155 return TCL_ERROR 52156 } 52157 52158 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, s, ts+17631, 0, bp+64) != 0 { 52159 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+64) != 0 { 52160 return TCL_ERROR 52161 } 52162 } else { 52163 *(*int32)(unsafe.Pointer(bp + 64)) = (*ConfigOption)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 64)))*16)).FiValue 52164 } 52165 52166 rc = sqlite3.Xsqlite3_config(tls, *(*int32)(unsafe.Pointer(bp + 64)), 0) 52167 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52168 return TCL_OK 52169 } 52170 52171 type ConfigOption = struct { 52172 FzName uintptr 52173 FiValue int32 52174 F__ccgo_pad1 [4]byte 52175 } 52176 52177 func getDbPointer1(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 52178 bp := tls.Alloc(64) 52179 defer tls.Free(64) 52180 52181 var db uintptr 52182 52183 var zCmd uintptr = tcl.XTcl_GetString(tls, pObj) 52184 if tcl.XTcl_GetCommandInfo(tls, pInterp, zCmd, bp) != 0 { 52185 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)) 52186 } else { 52187 db = sqlite3TestTextToPtr(tls, zCmd) 52188 } 52189 52190 return db 52191 } 52192 52193 func getStaticMutexPointer(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 52194 bp := tls.Alloc(4) 52195 defer tls.Free(4) 52196 52197 if tcl.XTcl_GetIndexFromObjStruct(tls, pInterp, pObj, uintptr(unsafe.Pointer(&aName)), int32(unsafe.Sizeof(uintptr(0))), ts+35267, 0, bp) != 0 { 52198 return uintptr(0) 52199 } 52200 52201 return counterMutexAlloc(tls, *(*int32)(unsafe.Pointer(bp))) 52202 } 52203 52204 func test_enter_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52205 var pMutex uintptr 52206 if objc != 2 { 52207 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 52208 return TCL_ERROR 52209 } 52210 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52211 if !(pMutex != 0) { 52212 return TCL_ERROR 52213 } 52214 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 52215 return TCL_OK 52216 } 52217 52218 func test_leave_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52219 var pMutex uintptr 52220 if objc != 2 { 52221 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 52222 return TCL_ERROR 52223 } 52224 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52225 if !(pMutex != 0) { 52226 return TCL_ERROR 52227 } 52228 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 52229 return TCL_OK 52230 } 52231 52232 func test_enter_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52233 var db uintptr 52234 if objc != 2 { 52235 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 52236 return TCL_ERROR 52237 } 52238 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52239 if !(db != 0) { 52240 return TCL_ERROR 52241 } 52242 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 52243 return TCL_OK 52244 } 52245 52246 func test_leave_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52247 var db uintptr 52248 if objc != 2 { 52249 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 52250 return TCL_ERROR 52251 } 52252 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52253 if !(db != 0) { 52254 return TCL_ERROR 52255 } 52256 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 52257 return TCL_OK 52258 } 52259 52260 func Sqlitetest_mutex_Init(tls *libc.TLS, interp uintptr) int32 { 52261 var i int32 52262 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd8))/uint64(unsafe.Sizeof(struct { 52263 FzName uintptr 52264 FxProc uintptr 52265 }{})); i++ { 52266 tcl.XTcl_CreateObjCommand(tls, interp, aCmd8[i].FzName, aCmd8[i].FxProc, uintptr(0), uintptr(0)) 52267 } 52268 52269 tcl.XTcl_LinkVar(tls, interp, ts+35278, 52270 uintptr(unsafe.Pointer(&g3))+4, TCL_LINK_INT) 52271 tcl.XTcl_LinkVar(tls, interp, ts+35297, 52272 uintptr(unsafe.Pointer(&g3))+8, TCL_LINK_INT) 52273 return SQLITE_OK 52274 } 52275 52276 var aCmd8 = [11]struct { 52277 FzName uintptr 52278 FxProc uintptr 52279 }{ 52280 {FzName: ts + 35315, FxProc: 0}, 52281 {FzName: ts + 35332, FxProc: 0}, 52282 {FzName: ts + 35351, FxProc: 0}, 52283 {FzName: ts + 35366, FxProc: 0}, 52284 {FzName: ts + 35385, FxProc: 0}, 52285 {FzName: ts + 35404, FxProc: 0}, 52286 {FzName: ts + 35419, FxProc: 0}, 52287 {FzName: ts + 35434, FxProc: 0}, 52288 {FzName: ts + 35454, FxProc: 0}, 52289 {FzName: ts + 35477, FxProc: 0}, 52290 {FzName: ts + 35497, FxProc: 0}, 52291 } 52292 52293 type fs_real_file1 = struct { 52294 FpFile uintptr 52295 FzName uintptr 52296 FnDatabase int32 52297 FnJournal int32 52298 FnBlob int32 52299 FnRef int32 52300 FpNext uintptr 52301 FppThis uintptr 52302 } 52303 52304 type fs_real_file = fs_real_file1 52305 52306 type fs_file1 = struct { 52307 Fbase sqlite3_file 52308 FeType int32 52309 F__ccgo_pad1 [4]byte 52310 FpReal uintptr 52311 } 52312 52313 type fs_file = fs_file1 52314 52315 type tmp_file1 = struct { 52316 Fbase sqlite3_file 52317 FnSize int32 52318 FnAlloc int32 52319 FzAlloc uintptr 52320 } 52321 52322 type tmp_file = tmp_file1 52323 52324 type fs_vfs_t1 = struct { 52325 Fbase sqlite3_vfs 52326 FpFileList uintptr 52327 FpParent uintptr 52328 } 52329 52330 type fs_vfs_t = fs_vfs_t1 52331 52332 var fs_vfs = fs_vfs_t{ 52333 Fbase: sqlite3_vfs{ 52334 FiVersion: 1, 52335 FzName: ts + 31055, 52336 FxOpen: 0, 52337 FxDelete: 0, 52338 FxAccess: 0, 52339 FxFullPathname: 0, 52340 FxDlOpen: 0, 52341 FxDlError: 0, 52342 FxDlSym: 0, 52343 FxDlClose: 0, 52344 FxRandomness: 0, 52345 FxSleep: 0, 52346 FxCurrentTime: 0, 52347 }, 52348 } 52349 52350 var fs_io_methods = sqlite3_io_methods{ 52351 FiVersion: 1, 52352 FxClose: 0, 52353 FxRead: 0, 52354 FxWrite: 0, 52355 FxTruncate: 0, 52356 FxSync: 0, 52357 FxFileSize: 0, 52358 FxLock: 0, 52359 FxUnlock: 0, 52360 FxCheckReservedLock: 0, 52361 FxFileControl: 0, 52362 FxSectorSize: 0, 52363 FxDeviceCharacteristics: 0, 52364 } 52365 52366 var tmp_io_methods = sqlite3_io_methods{ 52367 FiVersion: 1, 52368 FxClose: 0, 52369 FxRead: 0, 52370 FxWrite: 0, 52371 FxTruncate: 0, 52372 FxSync: 0, 52373 FxFileSize: 0, 52374 FxLock: 0, 52375 FxUnlock: 0, 52376 FxCheckReservedLock: 0, 52377 FxFileControl: 0, 52378 FxSectorSize: 0, 52379 FxDeviceCharacteristics: 0, 52380 } 52381 52382 func tmpClose(tls *libc.TLS, pFile uintptr) int32 { 52383 var pTmp uintptr = pFile 52384 sqlite3.Xsqlite3_free(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc) 52385 return SQLITE_OK 52386 } 52387 52388 func tmpRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52389 var pTmp uintptr = pFile 52390 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) { 52391 return SQLITE_IOERR | int32(2)<<8 52392 } 52393 libc.Xmemcpy(tls, zBuf, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), uint64(iAmt)) 52394 return SQLITE_OK 52395 } 52396 52397 func tmpWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52398 var pTmp uintptr = pFile 52399 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc) { 52400 var nNew int32 = int32(int64(2) * (sqlite_int64(iAmt) + iOfst + sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc))) 52401 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc, nNew) 52402 if !(zNew != 0) { 52403 return SQLITE_NOMEM 52404 } 52405 (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc = zNew 52406 (*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc = nNew 52407 } 52408 libc.Xmemcpy(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), zBuf, uint64(iAmt)) 52409 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 52410 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) > iOfst+sqlite_int64(iAmt) { 52411 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 52412 } 52413 return int32(iOfst + sqlite_int64(iAmt)) 52414 }() 52415 return SQLITE_OK 52416 } 52417 52418 func tmpTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52419 var pTmp uintptr = pFile 52420 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 52421 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) < size { 52422 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 52423 } 52424 return int32(size) 52425 }() 52426 return SQLITE_OK 52427 } 52428 52429 func tmpSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52430 return SQLITE_OK 52431 } 52432 52433 func tmpFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52434 var pTmp uintptr = pFile 52435 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) 52436 return SQLITE_OK 52437 } 52438 52439 func tmpLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52440 return SQLITE_OK 52441 } 52442 52443 func tmpUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52444 return SQLITE_OK 52445 } 52446 52447 func tmpCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52448 *(*int32)(unsafe.Pointer(pResOut)) = 0 52449 return SQLITE_OK 52450 } 52451 52452 func tmpFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52453 return SQLITE_OK 52454 } 52455 52456 func tmpSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52457 return 0 52458 } 52459 52460 func tmpDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52461 return 0 52462 } 52463 52464 func fsClose1(tls *libc.TLS, pFile uintptr) int32 { 52465 var rc int32 = SQLITE_OK 52466 var p uintptr = pFile 52467 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52468 52469 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef-- 52470 52471 if (*fs_real_file)(unsafe.Pointer(pReal)).FnRef == 0 { 52472 *(*uintptr)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FppThis)) = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 52473 if (*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0 { 52474 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = (*fs_real_file)(unsafe.Pointer(pReal)).FppThis 52475 } 52476 rc = (*struct { 52477 f func(*libc.TLS, uintptr) int32 52478 })(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) 52479 sqlite3.Xsqlite3_free(tls, pReal) 52480 } 52481 52482 return rc 52483 } 52484 52485 func fsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52486 var rc int32 = SQLITE_OK 52487 var p uintptr = pFile 52488 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52489 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52490 52491 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) || 52492 (*fs_file)(unsafe.Pointer(p)).FeType == JOURNAL_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 52493 rc = SQLITE_IOERR | int32(2)<<8 52494 } else if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52495 rc = (*struct { 52496 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52497 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxRead})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 52498 } else { 52499 var iRem int32 = iAmt 52500 var iBuf int32 = 0 52501 var ii int32 = int32(iOfst) 52502 for iRem > 0 && rc == SQLITE_OK { 52503 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 52504 var iRealAmt int32 = func() int32 { 52505 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 52506 return iRem 52507 } 52508 return BLOCKSIZE - iRealOff%BLOCKSIZE 52509 }() 52510 52511 rc = (*struct { 52512 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52513 })(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)) 52514 ii = ii + iRealAmt 52515 iBuf = iBuf + iRealAmt 52516 iRem = iRem - iRealAmt 52517 } 52518 } 52519 52520 return rc 52521 } 52522 52523 func fsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52524 var rc int32 = SQLITE_OK 52525 var p uintptr = pFile 52526 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52527 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52528 52529 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52530 if sqlite_int64(iAmt)+iOfst+int64(BLOCKSIZE) > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-(*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 52531 rc = SQLITE_FULL 52532 } else { 52533 rc = (*struct { 52534 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52535 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 52536 if rc == SQLITE_OK { 52537 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 52538 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) > sqlite_int64(iAmt)+iOfst { 52539 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 52540 } 52541 return int32(sqlite_int64(iAmt) + iOfst) 52542 }() 52543 } 52544 } 52545 } else { 52546 var iRem int32 = iAmt 52547 var iBuf int32 = 0 52548 var ii int32 = int32(iOfst) 52549 for iRem > 0 && rc == SQLITE_OK { 52550 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 52551 var iRealAmt int32 = func() int32 { 52552 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 52553 return iRem 52554 } 52555 return BLOCKSIZE - iRealOff%BLOCKSIZE 52556 }() 52557 52558 if iRealOff < (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase+BLOCKSIZE { 52559 rc = SQLITE_FULL 52560 } else { 52561 rc = (*struct { 52562 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52563 })(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)) 52564 ii = ii + iRealAmt 52565 iBuf = iBuf + iRealAmt 52566 iRem = iRem - iRealAmt 52567 } 52568 } 52569 if rc == SQLITE_OK { 52570 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 52571 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) > sqlite_int64(iAmt)+iOfst { 52572 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 52573 } 52574 return int32(sqlite_int64(iAmt) + iOfst) 52575 }() 52576 } 52577 } 52578 52579 return rc 52580 } 52581 52582 func fsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52583 var p uintptr = pFile 52584 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52585 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52586 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 52587 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) < size { 52588 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 52589 } 52590 return int32(size) 52591 }() 52592 } else { 52593 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 52594 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) < size { 52595 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 52596 } 52597 return int32(size) 52598 }() 52599 } 52600 return SQLITE_OK 52601 } 52602 52603 func fsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52604 bp := tls.Alloc(4) 52605 defer tls.Free(4) 52606 52607 var p uintptr = pFile 52608 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52609 var pRealFile uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52610 var rc int32 = SQLITE_OK 52611 52612 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52613 *(*uint8)(unsafe.Pointer(bp)) = uint8(uint32((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) & 0xFF000000 >> 24) 52614 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x00FF0000 >> 16) 52615 *(*uint8)(unsafe.Pointer(bp + 2)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x0000FF00 >> 8) 52616 *(*uint8)(unsafe.Pointer(bp + 3)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x000000FF) 52617 rc = (*struct { 52618 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52619 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, bp, 4, int64(0)) 52620 } 52621 if rc == SQLITE_OK { 52622 rc = (*struct { 52623 f func(*libc.TLS, uintptr, int32) int32 52624 })(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)) 52625 } 52626 52627 return rc 52628 } 52629 52630 func fsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52631 var p uintptr = pFile 52632 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52633 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52634 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) 52635 } else { 52636 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) 52637 } 52638 return SQLITE_OK 52639 } 52640 52641 func fsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52642 return SQLITE_OK 52643 } 52644 52645 func fsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52646 return SQLITE_OK 52647 } 52648 52649 func fsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52650 *(*int32)(unsafe.Pointer(pResOut)) = 0 52651 return SQLITE_OK 52652 } 52653 52654 func fsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52655 if op == SQLITE_FCNTL_PRAGMA { 52656 return SQLITE_NOTFOUND 52657 } 52658 return SQLITE_OK 52659 } 52660 52661 func fsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52662 return BLOCKSIZE 52663 } 52664 52665 func fsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52666 return 0 52667 } 52668 52669 func fsOpen1(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 52670 bp := tls.Alloc(12) 52671 defer tls.Free(12) 52672 52673 var pFsVfs uintptr 52674 var p uintptr 52675 var pReal uintptr 52676 var eType int32 52677 var nName int32 52678 var rc int32 52679 var p2 uintptr 52680 52681 var real_flags int32 52682 52683 var pRealFile uintptr 52684 var pParent uintptr 52685 pFsVfs = pVfs 52686 p = pFile 52687 pReal = uintptr(0) 52688 rc = SQLITE_OK 52689 52690 if !(0 == flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL)) { 52691 goto __1 52692 } 52693 p2 = pFile 52694 libc.Xmemset(tls, p2, 0, uint64(unsafe.Sizeof(tmp_file{}))) 52695 (*tmp_file)(unsafe.Pointer(p2)).Fbase.FpMethods = uintptr(unsafe.Pointer(&tmp_io_methods)) 52696 return SQLITE_OK 52697 __1: 52698 ; 52699 eType = func() int32 { 52700 if flags&SQLITE_OPEN_MAIN_DB != 0 { 52701 return DATABASE_FILE 52702 } 52703 return JOURNAL_FILE 52704 }() 52705 (*fs_file)(unsafe.Pointer(p)).Fbase.FpMethods = uintptr(unsafe.Pointer(&fs_io_methods)) 52706 (*fs_file)(unsafe.Pointer(p)).FeType = eType 52707 52708 nName = int32(libc.Xstrlen(tls, zName)) - func() int32 { 52709 if eType == JOURNAL_FILE { 52710 return 8 52711 } 52712 return 0 52713 }() 52714 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52715 __2: 52716 if !(pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zName, uint64(nName)) != 0) { 52717 goto __4 52718 } 52719 goto __3 52720 __3: 52721 pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 52722 goto __2 52723 goto __4 52724 __4: 52725 ; 52726 if !!(pReal != 0) { 52727 goto __5 52728 } 52729 real_flags = flags&libc.CplInt32(SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB 52730 pParent = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpParent 52731 52732 pReal = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile))) 52733 if !!(pReal != 0) { 52734 goto __6 52735 } 52736 rc = SQLITE_NOMEM 52737 goto open_out 52738 __6: 52739 ; 52740 libc.Xmemset(tls, pReal, 0, uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile)) 52741 (*fs_real_file)(unsafe.Pointer(pReal)).FzName = zName 52742 (*fs_real_file)(unsafe.Pointer(pReal)).FpFile = pReal + 1*48 52743 52744 rc = (*struct { 52745 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 52746 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zName, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile, real_flags, pOutFlags) 52747 if !(rc != SQLITE_OK) { 52748 goto __7 52749 } 52750 goto open_out 52751 __7: 52752 ; 52753 pRealFile = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52754 52755 rc = (*struct { 52756 f func(*libc.TLS, uintptr, uintptr) int32 52757 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxFileSize})).f(tls, pRealFile, bp) 52758 if !(rc != SQLITE_OK) { 52759 goto __8 52760 } 52761 goto open_out 52762 __8: 52763 ; 52764 if !(*(*sqlite3_int64)(unsafe.Pointer(bp)) == int64(0)) { 52765 goto __9 52766 } 52767 rc = (*struct { 52768 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52769 })(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)) 52770 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = BLOBSIZE 52771 goto __10 52772 __9: 52773 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = int32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 52774 rc = (*struct { 52775 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52776 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxRead})).f(tls, pRealFile, bp+8, 4, int64(0)) 52777 (*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))) 52778 if !(rc == SQLITE_OK) { 52779 goto __11 52780 } 52781 rc = (*struct { 52782 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52783 })(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)) 52784 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) { 52785 goto __12 52786 } 52787 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob 52788 __12: 52789 ; 52790 __11: 52791 ; 52792 __10: 52793 ; 52794 if !(rc == SQLITE_OK) { 52795 goto __13 52796 } 52797 (*fs_real_file)(unsafe.Pointer(pReal)).FpNext = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52798 if !((*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0) { 52799 goto __14 52800 } 52801 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = pReal + 32 52802 __14: 52803 ; 52804 (*fs_real_file)(unsafe.Pointer(pReal)).FppThis = pFsVfs + 168 52805 (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList = pReal 52806 __13: 52807 ; 52808 __5: 52809 ; 52810 open_out: 52811 if !(pReal != 0) { 52812 goto __15 52813 } 52814 if !(rc == SQLITE_OK) { 52815 goto __16 52816 } 52817 (*fs_file)(unsafe.Pointer(p)).FpReal = pReal 52818 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef++ 52819 goto __17 52820 __16: 52821 if !((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods != 0) { 52822 goto __18 52823 } 52824 (*struct { 52825 f func(*libc.TLS, uintptr) int32 52826 })(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) 52827 __18: 52828 ; 52829 sqlite3.Xsqlite3_free(tls, pReal) 52830 __17: 52831 ; 52832 __15: 52833 ; 52834 return rc 52835 } 52836 52837 func fsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 52838 var rc int32 = SQLITE_OK 52839 var pFsVfs uintptr = pVfs 52840 var pReal uintptr 52841 var pF uintptr 52842 var nName int32 = int32(libc.Xstrlen(tls, zPath)) - 8 52843 52844 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52845 for ; pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zPath, uint64(nName)) != 0; pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext { 52846 } 52847 if pReal != 0 { 52848 pF = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52849 rc = (*struct { 52850 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52851 })(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)) 52852 if rc == SQLITE_OK { 52853 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = 0 52854 } 52855 } 52856 return rc 52857 } 52858 52859 func fsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 52860 var pFsVfs uintptr = pVfs 52861 var pReal uintptr 52862 var isJournal int32 = 0 52863 var nName int32 = int32(libc.Xstrlen(tls, zPath)) 52864 52865 if flags != SQLITE_ACCESS_EXISTS { 52866 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52867 return (*struct { 52868 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52869 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxAccess})).f(tls, pParent, zPath, flags, pResOut) 52870 } 52871 52872 if nName > 8 && libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nName-8)) == 0 { 52873 nName = nName - 8 52874 isJournal = 1 52875 } 52876 52877 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 52878 for ; pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zPath, uint64(nName)) != 0; pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext { 52879 } 52880 52881 *(*int32)(unsafe.Pointer(pResOut)) = libc.Bool32(pReal != 0 && (!(isJournal != 0) || (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal > 0)) 52882 return SQLITE_OK 52883 } 52884 52885 func fsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 52886 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52887 return (*struct { 52888 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 52889 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zPath, nOut, zOut) 52890 } 52891 52892 func fsDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 52893 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52894 return (*struct { 52895 f func(*libc.TLS, uintptr, uintptr) uintptr 52896 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlOpen})).f(tls, pParent, zPath) 52897 } 52898 52899 func fsDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 52900 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52901 (*struct { 52902 f func(*libc.TLS, uintptr, int32, uintptr) 52903 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlError})).f(tls, pParent, nByte, zErrMsg) 52904 } 52905 52906 func fsDlSym(tls *libc.TLS, pVfs uintptr, pH uintptr, zSym uintptr) uintptr { 52907 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52908 return (*struct { 52909 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 52910 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlSym})).f(tls, pParent, pH, zSym) 52911 } 52912 52913 func fsDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 52914 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52915 (*struct { 52916 f func(*libc.TLS, uintptr, uintptr) 52917 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlClose})).f(tls, pParent, pHandle) 52918 } 52919 52920 func fsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 52921 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52922 return (*struct { 52923 f func(*libc.TLS, uintptr, int32, uintptr) int32 52924 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxRandomness})).f(tls, pParent, nByte, zBufOut) 52925 } 52926 52927 func fsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 52928 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52929 return (*struct { 52930 f func(*libc.TLS, uintptr, int32) int32 52931 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxSleep})).f(tls, pParent, nMicro) 52932 } 52933 52934 func fsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 52935 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 52936 return (*struct { 52937 f func(*libc.TLS, uintptr, uintptr) int32 52938 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxCurrentTime})).f(tls, pParent, pTimeOut) 52939 } 52940 52941 func fs_register(tls *libc.TLS) int32 { 52942 if fs_vfs.FpParent != 0 { 52943 return SQLITE_OK 52944 } 52945 fs_vfs.FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 52946 fs_vfs.Fbase.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(fs_vfs.FpParent)).FmxPathname 52947 fs_vfs.Fbase.FszOsFile = func() int32 { 52948 if uint64(unsafe.Sizeof(tmp_file{})) > uint64(unsafe.Sizeof(fs_file{})) { 52949 return int32(unsafe.Sizeof(tmp_file{})) 52950 } 52951 return int32(unsafe.Sizeof(fs_file{})) 52952 }() 52953 return sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&fs_vfs)), 0) 52954 } 52955 52956 func SqlitetestOnefile_Init(tls *libc.TLS) int32 { 52957 return fs_register(tls) 52958 } 52959 52960 type VfslogVfs1 = struct { 52961 Fbase sqlite3_vfs 52962 FpVfs uintptr 52963 FiNextFileId int32 52964 F__ccgo_pad1 [4]byte 52965 FpLog uintptr 52966 FiOffset sqlite3_int64 52967 FnBuf int32 52968 FaBuf [8192]uint8 52969 F__ccgo_pad2 [4]byte 52970 } 52971 52972 type VfslogVfs = VfslogVfs1 52973 type VfslogFile1 = struct { 52974 Fbase sqlite3_file 52975 FpReal uintptr 52976 FpVfslog uintptr 52977 FiFileId int32 52978 F__ccgo_pad1 [4]byte 52979 } 52980 52981 type VfslogFile = VfslogFile1 52982 52983 var vfslog_vfs = sqlite3_vfs{ 52984 FiVersion: 1, 52985 FszOsFile: int32(unsafe.Sizeof(VfslogFile{})), 52986 FmxPathname: INST_MAX_PATHNAME, 52987 FxOpen: 0, 52988 FxDelete: 0, 52989 FxAccess: 0, 52990 FxFullPathname: 0, 52991 FxDlOpen: 0, 52992 FxDlError: 0, 52993 FxDlSym: 0, 52994 FxDlClose: 0, 52995 FxRandomness: 0, 52996 FxSleep: 0, 52997 FxCurrentTime: 0, 52998 FxGetLastError: 0, 52999 FxCurrentTimeInt64: 0, 53000 } 53001 53002 var vfslog_io_methods = sqlite3_io_methods{ 53003 FiVersion: 2, 53004 FxClose: 0, 53005 FxRead: 0, 53006 FxWrite: 0, 53007 FxTruncate: 0, 53008 FxSync: 0, 53009 FxFileSize: 0, 53010 FxLock: 0, 53011 FxUnlock: 0, 53012 FxCheckReservedLock: 0, 53013 FxFileControl: 0, 53014 FxSectorSize: 0, 53015 FxDeviceCharacteristics: 0, 53016 FxShmMap: 0, 53017 FxShmLock: 0, 53018 FxShmBarrier: 0, 53019 FxShmUnmap: 0, 53020 } 53021 53022 func vfslog_time(tls *libc.TLS) sqlite3_uint64 { 53023 bp := tls.Alloc(16) 53024 defer tls.Free(16) 53025 53026 libc.Xgettimeofday(tls, bp, uintptr(0)) 53027 return sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_usec) + sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_sec)*uint64(1000000) 53028 } 53029 53030 func vfslogClose(tls *libc.TLS, pFile uintptr) int32 { 53031 var t sqlite3_uint64 53032 var rc int32 = SQLITE_OK 53033 var p uintptr = pFile 53034 53035 t = vfslog_time(tls) 53036 if (*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 53037 rc = (*struct { 53038 f func(*libc.TLS, uintptr) int32 53039 })(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) 53040 } 53041 t = vfslog_time(tls) - t 53042 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CLOSE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53043 return rc 53044 } 53045 53046 func vfslogRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 53047 var rc int32 53048 var t sqlite3_uint64 53049 var p uintptr = pFile 53050 t = vfslog_time(tls) 53051 rc = (*struct { 53052 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53053 })(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) 53054 t = vfslog_time(tls) - t 53055 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_READ, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 53056 return rc 53057 } 53058 53059 func vfslogWrite(tls *libc.TLS, pFile uintptr, z uintptr, iAmt int32, iOfst sqlite_int64) int32 { 53060 var rc int32 53061 var t sqlite3_uint64 53062 var p uintptr = pFile 53063 t = vfslog_time(tls) 53064 rc = (*struct { 53065 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53066 })(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) 53067 t = vfslog_time(tls) - t 53068 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_WRITE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 53069 return rc 53070 } 53071 53072 func vfslogTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 53073 var rc int32 53074 var t sqlite3_uint64 53075 var p uintptr = pFile 53076 t = vfslog_time(tls) 53077 rc = (*struct { 53078 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53079 })(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) 53080 t = vfslog_time(tls) - t 53081 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_TRUNCATE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, int32(size)) 53082 return rc 53083 } 53084 53085 func vfslogSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 53086 var rc int32 53087 var t sqlite3_uint64 53088 var p uintptr = pFile 53089 t = vfslog_time(tls) 53090 rc = (*struct { 53091 f func(*libc.TLS, uintptr, int32) int32 53092 })(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) 53093 t = vfslog_time(tls) - t 53094 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SYNC, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, flags, 0) 53095 return rc 53096 } 53097 53098 func vfslogFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 53099 var rc int32 53100 var t sqlite3_uint64 53101 var p uintptr = pFile 53102 t = vfslog_time(tls) 53103 rc = (*struct { 53104 f func(*libc.TLS, uintptr, uintptr) int32 53105 })(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) 53106 t = vfslog_time(tls) - t 53107 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)))) 53108 return rc 53109 } 53110 53111 func vfslogLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 53112 var rc int32 53113 var t sqlite3_uint64 53114 var p uintptr = pFile 53115 t = vfslog_time(tls) 53116 rc = (*struct { 53117 f func(*libc.TLS, uintptr, int32) int32 53118 })(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) 53119 t = vfslog_time(tls) - t 53120 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_LOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 53121 return rc 53122 } 53123 53124 func vfslogUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 53125 var rc int32 53126 var t sqlite3_uint64 53127 var p uintptr = pFile 53128 t = vfslog_time(tls) 53129 rc = (*struct { 53130 f func(*libc.TLS, uintptr, int32) int32 53131 })(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) 53132 t = vfslog_time(tls) - t 53133 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_UNLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 53134 return rc 53135 } 53136 53137 func vfslogCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 53138 var rc int32 53139 var t sqlite3_uint64 53140 var p uintptr = pFile 53141 t = vfslog_time(tls) 53142 rc = (*struct { 53143 f func(*libc.TLS, uintptr, uintptr) int32 53144 })(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) 53145 t = vfslog_time(tls) - t 53146 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CHECKRESERVEDLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, *(*int32)(unsafe.Pointer(pResOut)), 0) 53147 return rc 53148 } 53149 53150 func vfslogFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 53151 bp := tls.Alloc(8) 53152 defer tls.Free(8) 53153 53154 var p uintptr = pFile 53155 var rc int32 = (*struct { 53156 f func(*libc.TLS, uintptr, int32, uintptr) int32 53157 })(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) 53158 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 53159 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35525, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 53160 } 53161 return rc 53162 } 53163 53164 func vfslogSectorSize(tls *libc.TLS, pFile uintptr) int32 { 53165 var rc int32 53166 var t sqlite3_uint64 53167 var p uintptr = pFile 53168 t = vfslog_time(tls) 53169 rc = (*struct { 53170 f func(*libc.TLS, uintptr) int32 53171 })(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) 53172 t = vfslog_time(tls) - t 53173 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SECTORSIZE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53174 return rc 53175 } 53176 53177 func vfslogDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 53178 var rc int32 53179 var t sqlite3_uint64 53180 var p uintptr = pFile 53181 t = vfslog_time(tls) 53182 rc = (*struct { 53183 f func(*libc.TLS, uintptr) int32 53184 })(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) 53185 t = vfslog_time(tls) - t 53186 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_DEVCHAR, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53187 return rc 53188 } 53189 53190 func vfslogShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 53191 var rc int32 53192 var t sqlite3_uint64 53193 var p uintptr = pFile 53194 t = vfslog_time(tls) 53195 rc = (*struct { 53196 f func(*libc.TLS, uintptr, int32, int32, int32) int32 53197 })(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) 53198 t = vfslog_time(tls) - t 53199 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53200 return rc 53201 } 53202 53203 func vfslogShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 53204 var rc int32 53205 var t sqlite3_uint64 53206 var p uintptr = pFile 53207 t = vfslog_time(tls) 53208 rc = (*struct { 53209 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 53210 })(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) 53211 t = vfslog_time(tls) - t 53212 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53213 return rc 53214 } 53215 53216 func vfslogShmBarrier(tls *libc.TLS, pFile uintptr) { 53217 var t sqlite3_uint64 53218 var p uintptr = pFile 53219 t = vfslog_time(tls) 53220 (*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) 53221 t = vfslog_time(tls) - t 53222 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMBARRIER, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), SQLITE_OK, 0, 0) 53223 } 53224 53225 func vfslogShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 53226 var rc int32 53227 var t sqlite3_uint64 53228 var p uintptr = pFile 53229 t = vfslog_time(tls) 53230 rc = (*struct { 53231 f func(*libc.TLS, uintptr, int32) int32 53232 })(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) 53233 t = vfslog_time(tls) - t 53234 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMUNMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53235 return rc 53236 } 53237 53238 func vfslogOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 53239 var rc int32 53240 var t sqlite3_uint64 53241 var p uintptr = pFile 53242 var pLog uintptr = pVfs 53243 53244 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&vfslog_io_methods)) 53245 (*VfslogFile)(unsafe.Pointer(p)).FpReal = p + 1*32 53246 (*VfslogFile)(unsafe.Pointer(p)).FpVfslog = pVfs 53247 (*VfslogFile)(unsafe.Pointer(p)).FiFileId = libc.PreIncInt32(&(*VfslogVfs)(unsafe.Pointer(pLog)).FiNextFileId, 1) 53248 53249 t = vfslog_time(tls) 53250 rc = (*struct { 53251 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53252 })(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) 53253 t = vfslog_time(tls) - t 53254 53255 vfslog_call(tls, pVfs, OS_OPEN, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53256 vfslog_string(tls, pVfs, zName) 53257 return rc 53258 } 53259 53260 func vfslogDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 53261 var rc int32 53262 var t sqlite3_uint64 53263 t = vfslog_time(tls) 53264 rc = (*struct { 53265 f func(*libc.TLS, uintptr, uintptr, int32) int32 53266 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDelete})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, dirSync) 53267 t = vfslog_time(tls) - t 53268 vfslog_call(tls, pVfs, OS_DELETE, 0, int64(t), rc, dirSync, 0) 53269 vfslog_string(tls, pVfs, zPath) 53270 return rc 53271 } 53272 53273 func vfslogAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 53274 var rc int32 53275 var t sqlite3_uint64 53276 t = vfslog_time(tls) 53277 rc = (*struct { 53278 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53279 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxAccess})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, flags, pResOut) 53280 t = vfslog_time(tls) - t 53281 vfslog_call(tls, pVfs, OS_ACCESS, 0, int64(t), rc, flags, *(*int32)(unsafe.Pointer(pResOut))) 53282 vfslog_string(tls, pVfs, zPath) 53283 return rc 53284 } 53285 53286 func vfslogFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 53287 return (*struct { 53288 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53289 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxFullPathname})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, nOut, zOut) 53290 } 53291 53292 func vfslogDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 53293 return (*struct { 53294 f func(*libc.TLS, uintptr, uintptr) uintptr 53295 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlOpen})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath) 53296 } 53297 53298 func vfslogDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 53299 (*struct { 53300 f func(*libc.TLS, uintptr, int32, uintptr) 53301 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zErrMsg) 53302 } 53303 53304 func vfslogDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 53305 return (*struct { 53306 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 53307 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlSym})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p, zSym) 53308 } 53309 53310 func vfslogDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 53311 (*struct { 53312 f func(*libc.TLS, uintptr, uintptr) 53313 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlClose})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pHandle) 53314 } 53315 53316 func vfslogRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 53317 return (*struct { 53318 f func(*libc.TLS, uintptr, int32, uintptr) int32 53319 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxRandomness})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zBufOut) 53320 } 53321 53322 func vfslogSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 53323 return (*struct { 53324 f func(*libc.TLS, uintptr, int32) int32 53325 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxSleep})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nMicro) 53326 } 53327 53328 func vfslogCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 53329 return (*struct { 53330 f func(*libc.TLS, uintptr, uintptr) int32 53331 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTime})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pTimeOut) 53332 } 53333 53334 func vfslogGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 53335 return (*struct { 53336 f func(*libc.TLS, uintptr, int32, uintptr) int32 53337 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxGetLastError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, a, b) 53338 } 53339 53340 func vfslogCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 53341 return (*struct { 53342 f func(*libc.TLS, uintptr, uintptr) int32 53343 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTimeInt64})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p) 53344 } 53345 53346 func vfslog_flush(tls *libc.TLS, p uintptr) { 53347 var pending int32 = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 53348 var persist int32 = sqlite3.Xsqlite3_io_error_persist 53349 var diskfull int32 = sqlite3.Xsqlite3_diskfull_pending 53350 53351 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(0)) 53352 sqlite3.Xsqlite3_io_error_persist = 0 53353 sqlite3.Xsqlite3_diskfull_pending = 0 53354 53355 if (*VfslogVfs)(unsafe.Pointer(p)).FnBuf != 0 { 53356 (*struct { 53357 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53358 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods)).FxWrite})).f(tls, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, p+204, (*VfslogVfs)(unsafe.Pointer(p)).FnBuf, (*VfslogVfs)(unsafe.Pointer(p)).FiOffset) 53359 *(*sqlite3_int64)(unsafe.Pointer(p + 192)) += sqlite3_int64((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53360 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 0 53361 } 53362 53363 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, pending) 53364 sqlite3.Xsqlite3_io_error_persist = persist 53365 sqlite3.Xsqlite3_diskfull_pending = diskfull 53366 } 53367 53368 func put32bits(tls *libc.TLS, p uintptr, v uint32) { 53369 *(*uint8)(unsafe.Pointer(p)) = uint8(v >> 24) 53370 *(*uint8)(unsafe.Pointer(p + 1)) = uint8(v >> 16) 53371 *(*uint8)(unsafe.Pointer(p + 2)) = uint8(v >> 8) 53372 *(*uint8)(unsafe.Pointer(p + 3)) = uint8(v) 53373 } 53374 53375 func vfslog_call(tls *libc.TLS, pVfs uintptr, eEvent int32, iFileid int32, nClick sqlite3_int64, return_code int32, size int32, offset int32) { 53376 var p uintptr = pVfs 53377 var zRec uintptr 53378 if uint64(24+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]uint8{})) { 53379 vfslog_flush(tls, p) 53380 } 53381 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53382 put32bits(tls, zRec, uint32(eEvent)) 53383 put32bits(tls, zRec+4, uint32(iFileid)) 53384 put32bits(tls, zRec+8, uint32(nClick&int64(0xffff))) 53385 put32bits(tls, zRec+12, uint32(return_code)) 53386 put32bits(tls, zRec+16, uint32(size)) 53387 put32bits(tls, zRec+20, uint32(offset)) 53388 *(*int32)(unsafe.Pointer(p + 200)) += 24 53389 } 53390 53391 func vfslog_string(tls *libc.TLS, pVfs uintptr, zStr uintptr) { 53392 var p uintptr = pVfs 53393 var zRec uintptr 53394 var nStr int32 53395 if zStr != 0 { 53396 nStr = int32(libc.Xstrlen(tls, zStr)) 53397 } else { 53398 nStr = 0 53399 } 53400 if uint64(4+nStr+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]uint8{})) { 53401 vfslog_flush(tls, p) 53402 } 53403 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53404 put32bits(tls, zRec, uint32(nStr)) 53405 if zStr != 0 { 53406 libc.Xmemcpy(tls, zRec+4, zStr, uint64(nStr)) 53407 } 53408 *(*int32)(unsafe.Pointer(p + 200)) += 4 + nStr 53409 } 53410 53411 func vfslog_finalize(tls *libc.TLS, p uintptr) { 53412 if (*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods != 0 { 53413 vfslog_flush(tls, p) 53414 (*struct { 53415 f func(*libc.TLS, uintptr) int32 53416 })(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) 53417 } 53418 sqlite3.Xsqlite3_free(tls, p) 53419 } 53420 53421 func sqlite3_vfslog_finalize(tls *libc.TLS, zVfs uintptr) int32 { 53422 var pVfs uintptr 53423 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 53424 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 53425 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53426 }{vfslogOpen})) { 53427 return SQLITE_ERROR 53428 } 53429 sqlite3.Xsqlite3_vfs_unregister(tls, pVfs) 53430 vfslog_finalize(tls, pVfs) 53431 return SQLITE_OK 53432 } 53433 53434 func sqlite3_vfslog_new(tls *libc.TLS, zVfs uintptr, zParentVfs uintptr, zLog uintptr) int32 { 53435 bp := tls.Alloc(4) 53436 defer tls.Free(4) 53437 53438 var p uintptr 53439 var pParent uintptr 53440 var nByte int32 53441 53442 var rc int32 53443 var zFile uintptr 53444 var nVfs int32 53445 53446 pParent = sqlite3.Xsqlite3_vfs_find(tls, zParentVfs) 53447 if !(pParent != 0) { 53448 return SQLITE_ERROR 53449 } 53450 53451 nVfs = int32(libc.Xstrlen(tls, zVfs)) 53452 nByte = int32(uint64(unsafe.Sizeof(VfslogVfs{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) + uint64(nVfs) + uint64(1) + uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname) + uint64(1)) 53453 p = sqlite3.Xsqlite3_malloc(tls, nByte) 53454 libc.Xmemset(tls, p, 0, uint64(nByte)) 53455 53456 (*VfslogVfs)(unsafe.Pointer(p)).FpVfs = pParent 53457 (*VfslogVfs)(unsafe.Pointer(p)).FpLog = p + 1*8400 53458 libc.Xmemcpy(tls, p, uintptr(unsafe.Pointer(&vfslog_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 53459 (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName = (*VfslogVfs)(unsafe.Pointer(p)).FpLog + uintptr((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) 53460 *(*int32)(unsafe.Pointer(p + 4)) += (*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile 53461 libc.Xmemcpy(tls, (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName, zVfs, uint64(nVfs)) 53462 53463 zFile = (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName + uintptr(nVfs+1) 53464 (*struct { 53465 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53466 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zLog, (*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname, zFile) 53467 53468 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SUPER_JOURNAL 53469 (*struct { 53470 f func(*libc.TLS, uintptr, uintptr, int32) int32 53471 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDelete})).f(tls, pParent, zFile, 0) 53472 rc = (*struct { 53473 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53474 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zFile, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, *(*int32)(unsafe.Pointer(bp)), bp) 53475 if rc == SQLITE_OK { 53476 libc.Xmemcpy(tls, p+204, ts+35535, uint64(20)) 53477 (*VfslogVfs)(unsafe.Pointer(p)).FiOffset = int64(0) 53478 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 20 53479 rc = sqlite3.Xsqlite3_vfs_register(tls, p, 1) 53480 } 53481 if rc != 0 { 53482 vfslog_finalize(tls, p) 53483 } 53484 return rc 53485 } 53486 53487 func sqlite3_vfslog_annotate(tls *libc.TLS, zVfs uintptr, zMsg uintptr) int32 { 53488 var pVfs uintptr 53489 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 53490 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 53491 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53492 }{vfslogOpen})) { 53493 return SQLITE_ERROR 53494 } 53495 vfslog_call(tls, pVfs, OS_ANNOTATE, 0, int64(0), 0, 0, 0) 53496 vfslog_string(tls, pVfs, zMsg) 53497 return SQLITE_OK 53498 } 53499 53500 func vfslog_eventname(tls *libc.TLS, eEvent int32) uintptr { 53501 var zEvent uintptr = uintptr(0) 53502 53503 switch eEvent { 53504 case OS_CLOSE: 53505 zEvent = ts + 35556 53506 break 53507 case OS_READ: 53508 zEvent = ts + 35563 53509 break 53510 case OS_WRITE: 53511 zEvent = ts + 35569 53512 break 53513 case OS_TRUNCATE: 53514 zEvent = ts + 35576 53515 break 53516 case OS_SYNC: 53517 zEvent = ts + 27843 53518 break 53519 case OS_FILESIZE: 53520 zEvent = ts + 35586 53521 break 53522 case OS_LOCK: 53523 zEvent = ts + 35596 53524 break 53525 case OS_UNLOCK: 53526 zEvent = ts + 35602 53527 break 53528 case OS_CHECKRESERVEDLOCK: 53529 zEvent = ts + 35610 53530 break 53531 case OS_FILECONTROL: 53532 zEvent = ts + 35624 53533 break 53534 case OS_SECTORSIZE: 53535 zEvent = ts + 35637 53536 break 53537 case OS_DEVCHAR: 53538 zEvent = ts + 35649 53539 break 53540 case OS_OPEN: 53541 zEvent = ts + 27421 53542 break 53543 case OS_DELETE: 53544 zEvent = ts + 35661 53545 break 53546 case OS_ACCESS: 53547 zEvent = ts + 35669 53548 break 53549 case OS_FULLPATHNAME: 53550 zEvent = ts + 35677 53551 break 53552 case OS_RANDOMNESS: 53553 zEvent = ts + 35691 53554 break 53555 case OS_SLEEP: 53556 zEvent = ts + 35703 53557 break 53558 case OS_CURRENTTIME: 53559 zEvent = ts + 35710 53560 break 53561 53562 case OS_SHMUNMAP: 53563 zEvent = ts + 35723 53564 break 53565 case OS_SHMLOCK: 53566 zEvent = ts + 35733 53567 break 53568 case OS_SHMBARRIER: 53569 zEvent = ts + 35742 53570 break 53571 case OS_SHMMAP: 53572 zEvent = ts + 35754 53573 break 53574 53575 case OS_ANNOTATE: 53576 zEvent = ts + 35762 53577 break 53578 } 53579 53580 return zEvent 53581 } 53582 53583 type VfslogVtab1 = struct { 53584 Fbase sqlite3_vtab 53585 FpFd uintptr 53586 FnByte sqlite3_int64 53587 FzFile uintptr 53588 } 53589 53590 type VfslogVtab = VfslogVtab1 53591 type VfslogCsr1 = struct { 53592 Fbase sqlite3_vtab_cursor 53593 FiRowid sqlite3_int64 53594 FiOffset sqlite3_int64 53595 FzTransient uintptr 53596 FnFile int32 53597 F__ccgo_pad1 [4]byte 53598 FazFile uintptr 53599 FaBuf [1024]uint8 53600 } 53601 53602 type VfslogCsr = VfslogCsr1 53603 53604 func get32bits(tls *libc.TLS, p uintptr) uint32 { 53605 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)))) 53606 } 53607 53608 func dequote(tls *libc.TLS, z uintptr) { 53609 var quote uint8 53610 quote = *(*uint8)(unsafe.Pointer(z)) 53611 if int32(quote) == '[' || int32(quote) == '\'' || int32(quote) == '"' || int32(quote) == '`' { 53612 var iIn int32 = 1 53613 var iOut int32 = 0 53614 if int32(quote) == '[' { 53615 quote = uint8(']') 53616 } 53617 for *(*uint8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 53618 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(quote) { 53619 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(quote) { 53620 break 53621 } 53622 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = quote 53623 iIn = iIn + 2 53624 } else { 53625 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 53626 } 53627 } 53628 *(*uint8)(unsafe.Pointer(z + uintptr(iOut))) = uint8(0) 53629 } 53630 } 53631 53632 func vlogConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 53633 bp := tls.Alloc(12) 53634 defer tls.Free(12) 53635 53636 var pVfs uintptr 53637 53638 var p uintptr 53639 var rc int32 53640 var nByte int32 53641 var zFile uintptr 53642 53643 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 53644 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 53645 nByte = int32(uint64(unsafe.Sizeof(VfslogVtab{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname)) 53646 p = sqlite3.Xsqlite3_malloc(tls, nByte) 53647 if p == uintptr(0) { 53648 return SQLITE_NOMEM 53649 } 53650 libc.Xmemset(tls, p, 0, uint64(nByte)) 53651 53652 (*VfslogVtab)(unsafe.Pointer(p)).FpFd = p + 1*48 53653 (*VfslogVtab)(unsafe.Pointer(p)).FzFile = (*VfslogVtab)(unsafe.Pointer(p)).FpFd + uintptr((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) 53654 53655 zFile = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 53656 if !(zFile != 0) { 53657 sqlite3.Xsqlite3_free(tls, p) 53658 return SQLITE_NOMEM 53659 } 53660 dequote(tls, zFile) 53661 (*struct { 53662 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53663 })(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) 53664 sqlite3.Xsqlite3_free(tls, zFile) 53665 53666 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL 53667 rc = (*struct { 53668 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53669 })(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) 53670 53671 if rc == SQLITE_OK { 53672 (*struct { 53673 f func(*libc.TLS, uintptr, uintptr) int32 53674 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods)).FxFileSize})).f(tls, (*VfslogVtab)(unsafe.Pointer(p)).FpFd, p+32) 53675 sqlite3.Xsqlite3_declare_vtab(tls, db, 53676 ts+35773) 53677 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 53678 } else { 53679 sqlite3.Xsqlite3_free(tls, p) 53680 } 53681 53682 return rc 53683 } 53684 53685 func vlogBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 53686 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 53687 return SQLITE_OK 53688 } 53689 53690 func vlogDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 53691 var p uintptr = pVtab 53692 if (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods != 0 { 53693 (*struct { 53694 f func(*libc.TLS, uintptr) int32 53695 })(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) 53696 (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods = uintptr(0) 53697 } 53698 sqlite3.Xsqlite3_free(tls, p) 53699 return SQLITE_OK 53700 } 53701 53702 func vlogOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 53703 var pCsr uintptr 53704 53705 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(VfslogCsr{}))) 53706 if !(pCsr != 0) { 53707 return SQLITE_NOMEM 53708 } 53709 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(VfslogCsr{}))) 53710 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 53711 return SQLITE_OK 53712 } 53713 53714 func vlogClose(tls *libc.TLS, pCursor uintptr) int32 { 53715 var p uintptr = pCursor 53716 var i int32 53717 for i = 0; i < (*VfslogCsr)(unsafe.Pointer(p)).FnFile; i++ { 53718 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(p)).FazFile + uintptr(i)*8))) 53719 } 53720 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FazFile) 53721 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FzTransient) 53722 sqlite3.Xsqlite3_free(tls, p) 53723 return SQLITE_OK 53724 } 53725 53726 func vlogNext(tls *libc.TLS, pCursor uintptr) int32 { 53727 bp := tls.Alloc(4) 53728 defer tls.Free(4) 53729 53730 var pCsr uintptr = pCursor 53731 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 53732 var rc int32 = SQLITE_OK 53733 var nRead int32 53734 53735 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient) 53736 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = uintptr(0) 53737 53738 nRead = 24 53739 if (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead) <= (*VfslogVtab)(unsafe.Pointer(p)).FnByte { 53740 var eEvent int32 53741 rc = (*struct { 53742 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53743 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods)).FxRead})).f(tls, (*VfslogVtab)(unsafe.Pointer(p)).FpFd, pCsr+48, nRead, (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset) 53744 53745 eEvent = int32(get32bits(tls, pCsr+48)) 53746 if rc == SQLITE_OK && 53747 (eEvent == OS_OPEN || eEvent == OS_DELETE || eEvent == OS_ACCESS) { 53748 rc = (*struct { 53749 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53750 })(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)) 53751 nRead = nRead + 4 53752 if rc == SQLITE_OK { 53753 var nStr int32 = int32(get32bits(tls, bp)) 53754 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, nStr+1) 53755 rc = (*struct { 53756 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53757 })(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)) 53758 *(*uint8)(unsafe.Pointer(zStr + uintptr(nStr))) = uint8(0) 53759 nRead = nRead + nStr 53760 53761 if eEvent == OS_OPEN { 53762 var iFileid int32 = int32(get32bits(tls, pCsr+48+4)) 53763 if iFileid >= (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile { 53764 var nNew int32 = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(iFileid+1)) 53765 (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile = sqlite3.Xsqlite3_realloc(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile, nNew) 53766 nNew = int32(uint64(nNew) - uint64(unsafe.Sizeof(uintptr(0)))*uint64((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)) 53767 libc.Xmemset(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile+uintptr((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)*8, 0, uint64(nNew)) 53768 (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile = iFileid + 1 53769 } 53770 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8))) 53771 *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8)) = zStr 53772 } else { 53773 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = zStr 53774 } 53775 } 53776 } 53777 } 53778 53779 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 8)) += int64(1) 53780 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 16)) += sqlite3_int64(nRead) 53781 return rc 53782 } 53783 53784 func vlogEof(tls *libc.TLS, pCursor uintptr) int32 { 53785 var pCsr uintptr = pCursor 53786 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 53787 return libc.Bool32((*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset >= (*VfslogVtab)(unsafe.Pointer(p)).FnByte) 53788 } 53789 53790 func vlogFilter(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 53791 var pCsr uintptr = pCursor 53792 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 53793 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset = int64(20) 53794 return vlogNext(tls, pCursor) 53795 } 53796 53797 func vlogColumn(tls *libc.TLS, pCursor uintptr, ctx uintptr, i int32) int32 { 53798 var val uint32 53799 var pCsr uintptr = pCursor 53800 53801 val = get32bits(tls, pCsr+48+uintptr(4*i)) 53802 53803 switch i { 53804 case 0: 53805 { 53806 sqlite3.Xsqlite3_result_text(tls, ctx, vfslog_eventname(tls, int32(val)), -1, uintptr(0)) 53807 break 53808 53809 } 53810 case 1: 53811 { 53812 var zStr uintptr = (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient 53813 if val != uint32(0) && val < uint32((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile) { 53814 zStr = *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(val)*8)) 53815 } 53816 sqlite3.Xsqlite3_result_text(tls, ctx, zStr, -1, libc.UintptrFromInt32(-1)) 53817 break 53818 53819 } 53820 default: 53821 sqlite3.Xsqlite3_result_int(tls, ctx, int32(val)) 53822 break 53823 } 53824 53825 return SQLITE_OK 53826 } 53827 53828 func vlogRowid(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 53829 var pCsr uintptr = pCursor 53830 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid 53831 return SQLITE_OK 53832 } 53833 53834 func sqlite3_vfslog_register(tls *libc.TLS, db uintptr) int32 { 53835 sqlite3.Xsqlite3_create_module(tls, db, ts+35828, uintptr(unsafe.Pointer(&vfslog_module)), uintptr(0)) 53836 return SQLITE_OK 53837 } 53838 53839 var vfslog_module = sqlite3_module{ 53840 FxCreate: 0, 53841 FxConnect: 0, 53842 FxBestIndex: 0, 53843 FxDisconnect: 0, 53844 FxDestroy: 0, 53845 FxOpen: 0, 53846 FxClose: 0, 53847 FxFilter: 0, 53848 FxNext: 0, 53849 FxEof: 0, 53850 FxColumn: 0, 53851 FxRowid: 0, 53852 } 53853 53854 func test_vfslog(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 53855 bp := tls.Alloc(144) 53856 defer tls.Free(144) 53857 53858 var db uintptr 53859 53860 var rc int32 = SQLITE_ERROR 53861 53862 if objc < 2 { 53863 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 53864 return TCL_ERROR 53865 } 53866 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&strs)), int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+72) != 0 { 53867 return TCL_ERROR 53868 } 53869 53870 switch uint32(*(*int32)(unsafe.Pointer(bp + 72))) { 53871 case uint32(0): 53872 { 53873 var zVfs uintptr 53874 var zMsg uintptr 53875 if objc != 4 { 53876 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+35835) 53877 return TCL_ERROR 53878 } 53879 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 53880 zMsg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 53881 rc = sqlite3_vfslog_annotate(tls, zVfs, zMsg) 53882 if rc != SQLITE_OK { 53883 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35839, 0)) 53884 return TCL_ERROR 53885 } 53886 break 53887 53888 } 53889 case uint32(1): 53890 { 53891 var zVfs uintptr 53892 if objc != 3 { 53893 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35835) 53894 return TCL_ERROR 53895 } 53896 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 53897 rc = sqlite3_vfslog_finalize(tls, zVfs) 53898 if rc != SQLITE_OK { 53899 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+35839, 0)) 53900 return TCL_ERROR 53901 } 53902 break 53903 53904 } 53905 53906 case uint32(2): 53907 { 53908 var zVfs uintptr 53909 var zParent uintptr 53910 var zLog uintptr 53911 if objc != 5 { 53912 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35846) 53913 return TCL_ERROR 53914 } 53915 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 53916 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 53917 zLog = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 53918 if int32(*(*uint8)(unsafe.Pointer(zParent))) == 0 { 53919 zParent = uintptr(0) 53920 } 53921 rc = sqlite3_vfslog_new(tls, zVfs, zParent, zLog) 53922 if rc != SQLITE_OK { 53923 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+35839, 0)) 53924 return TCL_ERROR 53925 } 53926 break 53927 53928 } 53929 53930 case uint32(3): 53931 { 53932 var zDb uintptr 53933 if objc != 3 { 53934 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 53935 return TCL_ERROR 53936 } 53937 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 53938 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+80) != 0 { 53939 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 80)).FobjClientData)).Fdb 53940 rc = sqlite3_vfslog_register(tls, db) 53941 } 53942 if rc != SQLITE_OK { 53943 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+35865, zDb, uintptr(0))) 53944 return TCL_ERROR 53945 } 53946 break 53947 53948 } 53949 } 53950 53951 return TCL_OK 53952 } 53953 53954 var strs = [5]uintptr{ts + 35886, ts + 35895, ts + 14009, ts + 35904, uintptr(0)} 53955 53956 func SqlitetestOsinst_Init(tls *libc.TLS, interp uintptr) int32 { 53957 tcl.XTcl_CreateObjCommand(tls, interp, ts+35828, *(*uintptr)(unsafe.Pointer(&struct { 53958 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53959 }{test_vfslog})), uintptr(0), uintptr(0)) 53960 return TCL_OK 53961 } 53962 53963 type testpcacheGlobalType1 = struct { 53964 FpDummy uintptr 53965 FnInstance int32 53966 FdiscardChance uint32 53967 FprngSeed uint32 53968 FhighStress uint32 53969 } 53970 53971 type testpcacheGlobalType = testpcacheGlobalType1 53972 53973 var testpcacheGlobal testpcacheGlobalType 53974 53975 func testpcacheInit(tls *libc.TLS, pArg uintptr) int32 { 53976 testpcacheGlobal.FpDummy = sqlite3.Xsqlite3_malloc(tls, 10) 53977 if testpcacheGlobal.FpDummy == uintptr(0) { 53978 return SQLITE_NOMEM 53979 } 53980 return SQLITE_OK 53981 } 53982 53983 func testpcacheShutdown(tls *libc.TLS, pArg uintptr) { 53984 sqlite3.Xsqlite3_free(tls, testpcacheGlobal.FpDummy) 53985 testpcacheGlobal.FpDummy = uintptr(0) 53986 } 53987 53988 type testpcache1 = struct { 53989 FszPage int32 53990 FszExtra int32 53991 FbPurgeable int32 53992 FnFree int32 53993 FnPinned int32 53994 FiRand uint32 53995 FiMagic uint32 53996 F__ccgo_pad1 [4]byte 53997 Fa [217]struct { 53998 Fpage sqlite3_pcache_page 53999 Fkey uint32 54000 FisPinned int32 54001 } 54002 } 54003 54004 type testpcache = testpcache1 54005 type testpcachePage = struct { 54006 Fpage sqlite3_pcache_page 54007 Fkey uint32 54008 FisPinned int32 54009 } 54010 54011 func testpcacheRandom(tls *libc.TLS, p uintptr) uint32 { 54012 var x uint32 = uint32(0) 54013 var i int32 54014 for i = 0; i < 4; i++ { 54015 (*testpcache)(unsafe.Pointer(p)).FiRand = (*testpcache)(unsafe.Pointer(p)).FiRand*uint32(69069) + uint32(5) 54016 x = x<<8 | (*testpcache)(unsafe.Pointer(p)).FiRand>>16&uint32(0xff) 54017 } 54018 return x 54019 } 54020 54021 func testpcacheCreate(tls *libc.TLS, szPage int32, szExtra int32, bPurgeable int32) uintptr { 54022 var nMem int32 54023 var x uintptr 54024 var p uintptr 54025 var i int32 54026 54027 szPage = (szPage + 7) & libc.CplInt32(7) 54028 nMem = int32(uint64(unsafe.Sizeof(testpcache{})) + uint64(TESTPCACHE_NPAGE*(szPage+szExtra))) 54029 p = sqlite3.Xsqlite3_malloc(tls, nMem) 54030 if p == uintptr(0) { 54031 return uintptr(0) 54032 } 54033 x = p + 1*5240 54034 (*testpcache)(unsafe.Pointer(p)).FszPage = szPage 54035 (*testpcache)(unsafe.Pointer(p)).FszExtra = szExtra 54036 (*testpcache)(unsafe.Pointer(p)).FnFree = TESTPCACHE_NPAGE 54037 (*testpcache)(unsafe.Pointer(p)).FnPinned = 0 54038 (*testpcache)(unsafe.Pointer(p)).FiRand = testpcacheGlobal.FprngSeed 54039 (*testpcache)(unsafe.Pointer(p)).FbPurgeable = bPurgeable 54040 (*testpcache)(unsafe.Pointer(p)).FiMagic = uint32(TESTPCACHE_VALID) 54041 i = 0 54042 __1: 54043 if !(i < TESTPCACHE_NPAGE) { 54044 goto __3 54045 } 54046 { 54047 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 54048 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 54049 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpBuf = x 54050 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpExtra = x + uintptr(szPage) 54051 54052 } 54053 goto __2 54054 __2: 54055 i++ 54056 x += uintptr(szPage + szExtra) 54057 goto __1 54058 goto __3 54059 __3: 54060 ; 54061 testpcacheGlobal.FnInstance++ 54062 return p 54063 } 54064 54065 func testpcacheCachesize(tls *libc.TLS, pCache uintptr, newSize int32) { 54066 var p uintptr = pCache 54067 _ = p 54068 54069 } 54070 54071 func testpcachePagecount(tls *libc.TLS, pCache uintptr) int32 { 54072 var p uintptr = pCache 54073 54074 return TESTPCACHE_NPAGE - (*testpcache)(unsafe.Pointer(p)).FnFree 54075 } 54076 54077 func testpcacheFetch(tls *libc.TLS, pCache uintptr, key uint32, createFlag int32) uintptr { 54078 var p uintptr = pCache 54079 var i int32 54080 var j int32 54081 54082 for i = 0; i < TESTPCACHE_NPAGE; i++ { 54083 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == key { 54084 if !((*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0) { 54085 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 54086 54087 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 1 54088 } 54089 return p + 32 + uintptr(i)*24 54090 } 54091 } 54092 54093 if createFlag == 0 { 54094 return uintptr(0) 54095 } 54096 54097 if (*testpcache)(unsafe.Pointer(p)).FnPinned == TESTPCACHE_NPAGE { 54098 return uintptr(0) 54099 } 54100 54101 if (*testpcache)(unsafe.Pointer(p)).FnPinned >= TESTPCACHE_NPAGE-TESTPCACHE_RESERVE && createFlag < 2 { 54102 return uintptr(0) 54103 } 54104 54105 if testpcacheGlobal.FhighStress != 0 && createFlag < 2 { 54106 return uintptr(0) 54107 } 54108 54109 if (*testpcache)(unsafe.Pointer(p)).FnFree > TESTPCACHE_RESERVE || createFlag == 2 && (*testpcache)(unsafe.Pointer(p)).FnFree > 0 { 54110 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 54111 i = 0 54112 __1: 54113 if !(i < TESTPCACHE_NPAGE) { 54114 goto __3 54115 } 54116 { 54117 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey == uint32(0) { 54118 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 54119 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 54120 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 54121 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 54122 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 54123 (*testpcache)(unsafe.Pointer(p)).FnFree-- 54124 54125 return p + 32 + uintptr(j)*24 54126 } 54127 54128 } 54129 goto __2 54130 __2: 54131 i++ 54132 j = (j + 1) % TESTPCACHE_NPAGE 54133 goto __1 54134 goto __3 54135 __3: 54136 } 54137 54138 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable == 0 { 54139 return uintptr(0) 54140 } 54141 54142 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 54143 i = 0 54144 __4: 54145 if !(i < TESTPCACHE_NPAGE) { 54146 goto __6 54147 } 54148 { 54149 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey > uint32(0) && (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).FisPinned == 0 { 54150 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 54151 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 54152 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 54153 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 54154 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 54155 54156 return p + 32 + uintptr(j)*24 54157 } 54158 54159 } 54160 goto __5 54161 __5: 54162 i++ 54163 j = (j + 1) % TESTPCACHE_NPAGE 54164 goto __4 54165 goto __6 54166 __6: 54167 ; 54168 return uintptr(0) 54169 } 54170 54171 func testpcacheUnpin(tls *libc.TLS, pCache uintptr, pOldPage uintptr, discard int32) { 54172 var p uintptr = pCache 54173 var i int32 54174 54175 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable != 0 && 54176 uint32(100)-testpcacheGlobal.FdiscardChance <= testpcacheRandom(tls, p)%uint32(100) { 54177 discard = 1 54178 } 54179 54180 for i = 0; i < TESTPCACHE_NPAGE; i++ { 54181 if p+32+uintptr(i)*24 == pOldPage { 54182 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 54183 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 54184 54185 if discard != 0 { 54186 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 54187 (*testpcache)(unsafe.Pointer(p)).FnFree++ 54188 54189 } 54190 return 54191 } 54192 } 54193 54194 } 54195 54196 func testpcacheRekey(tls *libc.TLS, pCache uintptr, pOldPage uintptr, oldKey uint32, newKey uint32) { 54197 var p uintptr = pCache 54198 var i int32 54199 54200 for i = 0; i < TESTPCACHE_NPAGE; i++ { 54201 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == newKey { 54202 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 54203 (*testpcache)(unsafe.Pointer(p)).FnFree++ 54204 54205 break 54206 } 54207 } 54208 54209 for i = 0; i < TESTPCACHE_NPAGE; i++ { 54210 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == oldKey { 54211 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = newKey 54212 return 54213 } 54214 } 54215 54216 } 54217 54218 func testpcacheTruncate(tls *libc.TLS, pCache uintptr, iLimit uint32) { 54219 var p uintptr = pCache 54220 var i uint32 54221 54222 for i = uint32(0); i < uint32(TESTPCACHE_NPAGE); i++ { 54223 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey >= iLimit { 54224 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 54225 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0 { 54226 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 54227 54228 } 54229 (*testpcache)(unsafe.Pointer(p)).FnFree++ 54230 54231 } 54232 } 54233 } 54234 54235 func testpcacheDestroy(tls *libc.TLS, pCache uintptr) { 54236 var p uintptr = pCache 54237 54238 (*testpcache)(unsafe.Pointer(p)).FiMagic = TESTPCACHE_CLEAR 54239 sqlite3.Xsqlite3_free(tls, p) 54240 testpcacheGlobal.FnInstance-- 54241 } 54242 54243 func installTestPCache(tls *libc.TLS, installFlag int32, discardChance uint32, prngSeed uint32, highStress uint32) { 54244 bp := tls.Alloc(24) 54245 defer tls.Free(24) 54246 54247 testpcacheGlobal.FdiscardChance = discardChance 54248 testpcacheGlobal.FprngSeed = prngSeed ^ prngSeed<<16 54249 testpcacheGlobal.FhighStress = highStress 54250 if installFlag != isInstalled { 54251 if installFlag != 0 { 54252 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp, uintptr(unsafe.Pointer(&defaultPcache)))) 54253 54254 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+8, uintptr(unsafe.Pointer(&testPcache)))) 54255 } else { 54256 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&defaultPcache)))) 54257 } 54258 isInstalled = installFlag 54259 } 54260 } 54261 54262 var testPcache = sqlite3_pcache_methods2{ 54263 FiVersion: 1, 54264 FpArg: 0, 54265 FxInit: 0, 54266 FxShutdown: 0, 54267 FxCreate: 0, 54268 FxCachesize: 0, 54269 FxPagecount: 0, 54270 FxFetch: 0, 54271 FxUnpin: 0, 54272 FxRekey: 0, 54273 FxTruncate: 0, 54274 FxDestroy: 0, 54275 } 54276 var defaultPcache sqlite3_pcache_methods2 54277 var isInstalled int32 = 0 54278 54279 type quota_FILE1 = struct { 54280 Ff uintptr 54281 FiOfst sqlite3_int64 54282 FpFile uintptr 54283 } 54284 54285 type quota_FILE = quota_FILE1 54286 54287 type quotaGroup1 = struct { 54288 FzPattern uintptr 54289 FiLimit sqlite3_int64 54290 FiSize sqlite3_int64 54291 FxCallback uintptr 54292 FpArg uintptr 54293 FxDestroy uintptr 54294 FpNext uintptr 54295 FppPrev uintptr 54296 FpFiles uintptr 54297 } 54298 54299 type quotaGroup = quotaGroup1 54300 type quotaConn1 = struct { 54301 Fbase sqlite3_file 54302 FpFile uintptr 54303 } 54304 54305 type quotaConn = quotaConn1 54306 type quotaFile1 = struct { 54307 FzFilename uintptr 54308 FpGroup uintptr 54309 FiSize sqlite3_int64 54310 FnRef int32 54311 FdeleteOnClose int32 54312 FpNext uintptr 54313 FppPrev uintptr 54314 } 54315 54316 type quotaFile = quotaFile1 54317 54318 var gQuota struct { 54319 FpOrigVfs uintptr 54320 FsThisVfs sqlite3_vfs 54321 FsIoMethodsV1 sqlite3_io_methods 54322 FsIoMethodsV2 sqlite3_io_methods 54323 FisInitialized int32 54324 F__ccgo_pad1 [4]byte 54325 FpMutex uintptr 54326 FpGroup uintptr 54327 } 54328 54329 func quotaEnter(tls *libc.TLS) { 54330 sqlite3.Xsqlite3_mutex_enter(tls, gQuota.FpMutex) 54331 } 54332 54333 func quotaLeave(tls *libc.TLS) { 54334 sqlite3.Xsqlite3_mutex_leave(tls, gQuota.FpMutex) 54335 } 54336 54337 func quotaGroupOpenFileCount(tls *libc.TLS, pGroup uintptr) int32 { 54338 var N int32 = 0 54339 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54340 for pFile != 0 { 54341 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54342 N++ 54343 } 54344 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54345 } 54346 return N 54347 } 54348 54349 func quotaRemoveFile(tls *libc.TLS, pFile uintptr) { 54350 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54351 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54352 *(*uintptr)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FppPrev)) = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54353 if (*quotaFile)(unsafe.Pointer(pFile)).FpNext != 0 { 54354 (*quotaFile)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpNext)).FppPrev = (*quotaFile)(unsafe.Pointer(pFile)).FppPrev 54355 } 54356 sqlite3.Xsqlite3_free(tls, pFile) 54357 } 54358 54359 func quotaRemoveAllFiles(tls *libc.TLS, pGroup uintptr) { 54360 for (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 54361 quotaRemoveFile(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles) 54362 } 54363 } 54364 54365 func quotaGroupDeref(tls *libc.TLS, pGroup uintptr) { 54366 if (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit == int64(0) && quotaGroupOpenFileCount(tls, pGroup) == 0 { 54367 quotaRemoveAllFiles(tls, pGroup) 54368 *(*uintptr)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev)) = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54369 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext != 0 { 54370 (*quotaGroup)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpNext)).FppPrev = (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev 54371 } 54372 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 { 54373 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54374 } 54375 sqlite3.Xsqlite3_free(tls, pGroup) 54376 } 54377 } 54378 54379 func quotaStrglob(tls *libc.TLS, zGlob uintptr, z uintptr) int32 { 54380 var c int32 54381 var c2 int32 54382 var cx int32 54383 var invert int32 54384 var seen int32 54385 54386 for libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) != 0 { 54387 if c == '*' { 54388 for libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) == '*' || c == '?' { 54389 if c == '?' && int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 54390 return 0 54391 } 54392 } 54393 if c == 0 { 54394 return 1 54395 } else if c == '[' { 54396 for *(*uint8)(unsafe.Pointer(z)) != 0 && quotaStrglob(tls, zGlob-uintptr(1), z) == 0 { 54397 z++ 54398 } 54399 return libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z))) != 0) 54400 } 54401 if c == '/' { 54402 cx = '\\' 54403 } else { 54404 cx = c 54405 } 54406 for libc.AssignInt32(&c2, int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) != 0 { 54407 for c2 != c && c2 != cx { 54408 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 54409 if c2 == 0 { 54410 return 0 54411 } 54412 } 54413 if quotaStrglob(tls, zGlob, z) != 0 { 54414 return 1 54415 } 54416 } 54417 return 0 54418 } else if c == '?' { 54419 if int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 54420 return 0 54421 } 54422 } else if c == '[' { 54423 var prior_c int32 = 0 54424 seen = 0 54425 invert = 0 54426 c = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 54427 if c == 0 { 54428 return 0 54429 } 54430 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54431 if c2 == '^' { 54432 invert = 1 54433 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54434 } 54435 if c2 == ']' { 54436 if c == ']' { 54437 seen = 1 54438 } 54439 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54440 } 54441 for c2 != 0 && c2 != ']' { 54442 if c2 == '-' && int32(*(*uint8)(unsafe.Pointer(zGlob))) != ']' && int32(*(*uint8)(unsafe.Pointer(zGlob))) != 0 && prior_c > 0 { 54443 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54444 if c >= prior_c && c <= c2 { 54445 seen = 1 54446 } 54447 prior_c = 0 54448 } else { 54449 if c == c2 { 54450 seen = 1 54451 } 54452 prior_c = c2 54453 } 54454 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54455 } 54456 if c2 == 0 || seen^invert == 0 { 54457 return 0 54458 } 54459 } else if c == '/' { 54460 if int32(*(*uint8)(unsafe.Pointer(z))) != '/' && int32(*(*uint8)(unsafe.Pointer(z))) != '\\' { 54461 return 0 54462 } 54463 z++ 54464 } else { 54465 if c != int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) { 54466 return 0 54467 } 54468 } 54469 } 54470 return libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z))) == 0) 54471 } 54472 54473 func quotaGroupFind(tls *libc.TLS, zFilename uintptr) uintptr { 54474 var p uintptr 54475 for p = gQuota.FpGroup; p != 0 && quotaStrglob(tls, (*quotaGroup)(unsafe.Pointer(p)).FzPattern, zFilename) == 0; p = (*quotaGroup)(unsafe.Pointer(p)).FpNext { 54476 } 54477 return p 54478 } 54479 54480 func quotaSubOpen(tls *libc.TLS, pConn uintptr) uintptr { 54481 var p uintptr = pConn 54482 return p + 1*16 54483 } 54484 54485 func quotaFindFile(tls *libc.TLS, pGroup uintptr, zName uintptr, createFlag int32) uintptr { 54486 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54487 for pFile != 0 && libc.Xstrcmp(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName) != 0 { 54488 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54489 } 54490 if pFile == uintptr(0) && createFlag != 0 { 54491 var nName int32 = int32(libc.Xstrlen(tls, zName) & uint64(0x3fffffff)) 54492 pFile = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaFile{}))+uint64(nName)+uint64(1))) 54493 if pFile != 0 { 54494 libc.Xmemset(tls, pFile, 0, uint64(unsafe.Sizeof(quotaFile{}))) 54495 (*quotaFile)(unsafe.Pointer(pFile)).FzFilename = pFile + 1*48 54496 libc.Xmemcpy(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName, uint64(nName+1)) 54497 (*quotaFile)(unsafe.Pointer(pFile)).FpNext = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54498 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 54499 (*quotaFile)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles)).FppPrev = pFile + 32 54500 } 54501 (*quotaFile)(unsafe.Pointer(pFile)).FppPrev = pGroup + 64 54502 (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles = pFile 54503 (*quotaFile)(unsafe.Pointer(pFile)).FpGroup = pGroup 54504 } 54505 } 54506 return pFile 54507 } 54508 54509 func quota_utf8_to_mbcs(tls *libc.TLS, zUtf8 uintptr) uintptr { 54510 return zUtf8 54511 } 54512 54513 func quota_mbcs_free(tls *libc.TLS, zOld uintptr) { 54514 } 54515 54516 func quotaOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 54517 var rc int32 54518 var pQuotaOpen uintptr 54519 var pFile uintptr 54520 var pGroup uintptr 54521 var pSubOpen uintptr 54522 var pOrigVfs uintptr = gQuota.FpOrigVfs 54523 54524 if flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0 { 54525 return (*struct { 54526 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54527 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 54528 } 54529 54530 quotaEnter(tls) 54531 pGroup = quotaGroupFind(tls, zName) 54532 if pGroup == uintptr(0) { 54533 rc = (*struct { 54534 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54535 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 54536 } else { 54537 pQuotaOpen = pConn 54538 pSubOpen = quotaSubOpen(tls, pConn) 54539 rc = (*struct { 54540 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54541 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pSubOpen, flags, pOutFlags) 54542 if rc == SQLITE_OK { 54543 pFile = quotaFindFile(tls, pGroup, zName, 1) 54544 if pFile == uintptr(0) { 54545 quotaLeave(tls) 54546 (*struct { 54547 f func(*libc.TLS, uintptr) int32 54548 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 54549 return SQLITE_NOMEM 54550 } 54551 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = libc.Bool32(flags&SQLITE_OPEN_DELETEONCLOSE != 0) 54552 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 54553 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).FpFile = pFile 54554 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 54555 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 176 54556 } else { 54557 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 328 54558 } 54559 } 54560 } 54561 quotaLeave(tls) 54562 return rc 54563 } 54564 54565 func quotaDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 54566 var rc int32 54567 var pFile uintptr 54568 var pGroup uintptr 54569 var pOrigVfs uintptr = gQuota.FpOrigVfs 54570 54571 rc = (*struct { 54572 f func(*libc.TLS, uintptr, uintptr, int32) int32 54573 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 54574 54575 if rc == SQLITE_OK { 54576 quotaEnter(tls) 54577 pGroup = quotaGroupFind(tls, zName) 54578 if pGroup != 0 { 54579 pFile = quotaFindFile(tls, pGroup, zName, 0) 54580 if pFile != 0 { 54581 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54582 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 54583 } else { 54584 quotaRemoveFile(tls, pFile) 54585 quotaGroupDeref(tls, pGroup) 54586 } 54587 } 54588 } 54589 quotaLeave(tls) 54590 } 54591 return rc 54592 } 54593 54594 func quotaClose(tls *libc.TLS, pConn uintptr) int32 { 54595 var p uintptr = pConn 54596 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54597 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54598 var rc int32 54599 rc = (*struct { 54600 f func(*libc.TLS, uintptr) int32 54601 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 54602 quotaEnter(tls) 54603 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 54604 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 54605 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54606 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 54607 (*struct { 54608 f func(*libc.TLS, uintptr, uintptr, int32) int32 54609 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54610 quotaRemoveFile(tls, pFile) 54611 } 54612 quotaGroupDeref(tls, pGroup) 54613 } 54614 quotaLeave(tls) 54615 return rc 54616 } 54617 54618 func quotaRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 54619 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54620 return (*struct { 54621 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54622 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 54623 } 54624 54625 func quotaWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 54626 var p uintptr = pConn 54627 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54628 var iEnd sqlite3_int64 = iOfst + sqlite3_int64(iAmt) 54629 var pGroup uintptr 54630 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54631 var szNew sqlite3_int64 54632 54633 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 54634 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54635 quotaEnter(tls) 54636 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54637 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54638 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 54639 (*struct { 54640 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54641 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 54642 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54643 } 54644 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54645 quotaLeave(tls) 54646 return SQLITE_FULL 54647 } 54648 } 54649 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 54650 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 54651 quotaLeave(tls) 54652 } 54653 return (*struct { 54654 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54655 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 54656 } 54657 54658 func quotaTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 54659 var p uintptr = pConn 54660 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54661 var rc int32 = (*struct { 54662 f func(*libc.TLS, uintptr, sqlite3_int64) int32 54663 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 54664 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54665 var pGroup uintptr 54666 if rc == SQLITE_OK { 54667 quotaEnter(tls) 54668 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54669 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54670 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = size 54671 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += size 54672 quotaLeave(tls) 54673 } 54674 return rc 54675 } 54676 54677 func quotaSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 54678 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54679 return (*struct { 54680 f func(*libc.TLS, uintptr, int32) int32 54681 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 54682 } 54683 54684 func quotaFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 54685 bp := tls.Alloc(8) 54686 defer tls.Free(8) 54687 54688 var p uintptr = pConn 54689 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54690 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54691 var pGroup uintptr 54692 54693 var rc int32 54694 54695 rc = (*struct { 54696 f func(*libc.TLS, uintptr, uintptr) int32 54697 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp) 54698 if rc == SQLITE_OK { 54699 quotaEnter(tls) 54700 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54701 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54702 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = *(*sqlite3_int64)(unsafe.Pointer(bp)) 54703 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += *(*sqlite3_int64)(unsafe.Pointer(bp)) 54704 quotaLeave(tls) 54705 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = *(*sqlite3_int64)(unsafe.Pointer(bp)) 54706 } 54707 return rc 54708 } 54709 54710 func quotaLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 54711 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54712 return (*struct { 54713 f func(*libc.TLS, uintptr, int32) int32 54714 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 54715 } 54716 54717 func quotaUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 54718 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54719 return (*struct { 54720 f func(*libc.TLS, uintptr, int32) int32 54721 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 54722 } 54723 54724 func quotaCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 54725 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54726 return (*struct { 54727 f func(*libc.TLS, uintptr, uintptr) int32 54728 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 54729 } 54730 54731 func quotaFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 54732 bp := tls.Alloc(8) 54733 defer tls.Free(8) 54734 54735 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54736 var rc int32 = (*struct { 54737 f func(*libc.TLS, uintptr, int32, uintptr) int32 54738 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 54739 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 54740 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35913, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 54741 } 54742 return rc 54743 } 54744 54745 func quotaSectorSize(tls *libc.TLS, pConn uintptr) int32 { 54746 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54747 return (*struct { 54748 f func(*libc.TLS, uintptr) int32 54749 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 54750 } 54751 54752 func quotaDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 54753 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54754 return (*struct { 54755 f func(*libc.TLS, uintptr) int32 54756 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 54757 } 54758 54759 func quotaShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 54760 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54761 return (*struct { 54762 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 54763 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 54764 } 54765 54766 func quotaShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 54767 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54768 return (*struct { 54769 f func(*libc.TLS, uintptr, int32, int32, int32) int32 54770 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 54771 } 54772 54773 func quotaShmBarrier(tls *libc.TLS, pConn uintptr) { 54774 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54775 (*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) 54776 } 54777 54778 func quotaShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 54779 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54780 return (*struct { 54781 f func(*libc.TLS, uintptr, int32) int32 54782 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 54783 } 54784 54785 func sqlite3_quota_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 54786 var pOrigVfs uintptr 54787 if gQuota.FisInitialized != 0 { 54788 return SQLITE_MISUSE 54789 } 54790 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 54791 if pOrigVfs == uintptr(0) { 54792 return SQLITE_ERROR 54793 } 54794 54795 gQuota.FpMutex = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 54796 if !(int32(gQuota.FpMutex) != 0) { 54797 return SQLITE_NOMEM 54798 } 54799 gQuota.FisInitialized = 1 54800 gQuota.FpOrigVfs = pOrigVfs 54801 gQuota.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 54802 gQuota.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 54803 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54804 }{quotaOpen})) 54805 gQuota.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 54806 f func(*libc.TLS, uintptr, uintptr, int32) int32 54807 }{quotaDelete})) 54808 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gQuota)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(quotaConn{}))) 54809 gQuota.FsThisVfs.FzName = ts + 35922 54810 gQuota.FsIoMethodsV1.FiVersion = 1 54811 gQuota.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 54812 f func(*libc.TLS, uintptr) int32 54813 }{quotaClose})) 54814 gQuota.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 54815 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54816 }{quotaRead})) 54817 gQuota.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 54818 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54819 }{quotaWrite})) 54820 gQuota.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 54821 f func(*libc.TLS, uintptr, sqlite3_int64) int32 54822 }{quotaTruncate})) 54823 gQuota.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 54824 f func(*libc.TLS, uintptr, int32) int32 54825 }{quotaSync})) 54826 gQuota.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 54827 f func(*libc.TLS, uintptr, uintptr) int32 54828 }{quotaFileSize})) 54829 gQuota.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 54830 f func(*libc.TLS, uintptr, int32) int32 54831 }{quotaLock})) 54832 gQuota.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 54833 f func(*libc.TLS, uintptr, int32) int32 54834 }{quotaUnlock})) 54835 gQuota.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 54836 f func(*libc.TLS, uintptr, uintptr) int32 54837 }{quotaCheckReservedLock})) 54838 gQuota.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 54839 f func(*libc.TLS, uintptr, int32, uintptr) int32 54840 }{quotaFileControl})) 54841 gQuota.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 54842 f func(*libc.TLS, uintptr) int32 54843 }{quotaSectorSize})) 54844 gQuota.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 54845 f func(*libc.TLS, uintptr) int32 54846 }{quotaDeviceCharacteristics})) 54847 gQuota.FsIoMethodsV2 = gQuota.FsIoMethodsV1 54848 gQuota.FsIoMethodsV2.FiVersion = 2 54849 gQuota.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 54850 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 54851 }{quotaShmMap})) 54852 gQuota.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 54853 f func(*libc.TLS, uintptr, int32, int32, int32) int32 54854 }{quotaShmLock})) 54855 gQuota.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{quotaShmBarrier})) 54856 gQuota.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 54857 f func(*libc.TLS, uintptr, int32) int32 54858 }{quotaShmUnmap})) 54859 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gQuota))+8, makeDefault) 54860 return SQLITE_OK 54861 } 54862 54863 func sqlite3_quota_shutdown(tls *libc.TLS) int32 { 54864 var pGroup uintptr 54865 if gQuota.FisInitialized == 0 { 54866 return SQLITE_MISUSE 54867 } 54868 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 54869 if quotaGroupOpenFileCount(tls, pGroup) > 0 { 54870 return SQLITE_MISUSE 54871 } 54872 } 54873 for gQuota.FpGroup != 0 { 54874 pGroup = gQuota.FpGroup 54875 gQuota.FpGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54876 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = int64(0) 54877 54878 quotaGroupDeref(tls, pGroup) 54879 } 54880 gQuota.FisInitialized = 0 54881 sqlite3.Xsqlite3_mutex_free(tls, gQuota.FpMutex) 54882 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gQuota))+8) 54883 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gQuota)), 0, uint64(unsafe.Sizeof(gQuota))) 54884 return SQLITE_OK 54885 } 54886 54887 func sqlite3_quota_set(tls *libc.TLS, zPattern uintptr, iLimit sqlite3_int64, xCallback uintptr, pArg uintptr, xDestroy uintptr) int32 { 54888 var pGroup uintptr 54889 quotaEnter(tls) 54890 pGroup = gQuota.FpGroup 54891 for pGroup != 0 && libc.Xstrcmp(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern) != 0 { 54892 pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54893 } 54894 if pGroup == uintptr(0) { 54895 var nPattern int32 = int32(libc.Xstrlen(tls, zPattern) & uint64(0x3fffffff)) 54896 if iLimit <= int64(0) { 54897 quotaLeave(tls) 54898 return SQLITE_OK 54899 } 54900 pGroup = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaGroup{}))+uint64(nPattern)+uint64(1))) 54901 if pGroup == uintptr(0) { 54902 quotaLeave(tls) 54903 return SQLITE_NOMEM 54904 } 54905 libc.Xmemset(tls, pGroup, 0, uint64(unsafe.Sizeof(quotaGroup{}))) 54906 (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern = pGroup + 1*72 54907 libc.Xmemcpy(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern, uint64(nPattern+1)) 54908 if gQuota.FpGroup != 0 { 54909 (*quotaGroup)(unsafe.Pointer(gQuota.FpGroup)).FppPrev = pGroup + 48 54910 } 54911 (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext = gQuota.FpGroup 54912 (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev = uintptr(unsafe.Pointer(&gQuota)) + 496 54913 gQuota.FpGroup = pGroup 54914 } 54915 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = iLimit 54916 (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback = xCallback 54917 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 && (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg != pArg { 54918 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54919 } 54920 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg = pArg 54921 (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy = xDestroy 54922 quotaGroupDeref(tls, pGroup) 54923 quotaLeave(tls) 54924 return SQLITE_OK 54925 } 54926 54927 func sqlite3_quota_file(tls *libc.TLS, zFilename uintptr) int32 { 54928 bp := tls.Alloc(16) 54929 defer tls.Free(16) 54930 54931 var zFull uintptr = uintptr(0) 54932 var fd uintptr 54933 var rc int32 54934 *(*int32)(unsafe.Pointer(bp)) = 0 54935 54936 var nAlloc int32 = gQuota.FsThisVfs.FszOsFile + gQuota.FsThisVfs.FmxPathname + 2 54937 54938 fd = sqlite3.Xsqlite3_malloc(tls, nAlloc) 54939 if fd == uintptr(0) { 54940 rc = SQLITE_NOMEM 54941 } else { 54942 zFull = fd + uintptr(gQuota.FsThisVfs.FszOsFile) 54943 rc = (*struct { 54944 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54945 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 54946 gQuota.FsThisVfs.FmxPathname+1, zFull) 54947 } 54948 54949 if rc == SQLITE_OK { 54950 *(*uint8)(unsafe.Pointer(zFull + uintptr(libc.Xstrlen(tls, zFull)+uint64(1)))) = uint8(0) 54951 rc = quotaOpen(tls, uintptr(unsafe.Pointer(&gQuota))+8, zFull, fd, 54952 SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_DB, bp) 54953 if rc == SQLITE_OK { 54954 (*struct { 54955 f func(*libc.TLS, uintptr, uintptr) int32 54956 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxFileSize})).f(tls, fd, bp+8) 54957 (*struct { 54958 f func(*libc.TLS, uintptr) int32 54959 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxClose})).f(tls, fd) 54960 } else if rc == SQLITE_CANTOPEN { 54961 var pGroup uintptr 54962 var pFile uintptr 54963 quotaEnter(tls) 54964 pGroup = quotaGroupFind(tls, zFull) 54965 if pGroup != 0 { 54966 pFile = quotaFindFile(tls, pGroup, zFull, 0) 54967 if pFile != 0 { 54968 quotaRemoveFile(tls, pFile) 54969 } 54970 } 54971 quotaLeave(tls) 54972 } 54973 } 54974 54975 sqlite3.Xsqlite3_free(tls, fd) 54976 return rc 54977 } 54978 54979 func sqlite3_quota_fopen(tls *libc.TLS, zFilename uintptr, zMode uintptr) uintptr { 54980 var p uintptr 54981 var zFull uintptr 54982 var zFullTranslated uintptr 54983 var rc int32 54984 var pGroup uintptr 54985 var pFile uintptr 54986 p = uintptr(0) 54987 zFull = uintptr(0) 54988 zFullTranslated = uintptr(0) 54989 54990 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 54991 if !(zFull == uintptr(0)) { 54992 goto __1 54993 } 54994 return uintptr(0) 54995 __1: 54996 ; 54997 rc = (*struct { 54998 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54999 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 55000 gQuota.FsThisVfs.FmxPathname+1, zFull) 55001 if !(rc != 0) { 55002 goto __2 55003 } 55004 goto quota_fopen_error 55005 __2: 55006 ; 55007 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(quota_FILE{}))) 55008 if !(p == uintptr(0)) { 55009 goto __3 55010 } 55011 goto quota_fopen_error 55012 __3: 55013 ; 55014 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(quota_FILE{}))) 55015 zFullTranslated = quota_utf8_to_mbcs(tls, zFull) 55016 if !(zFullTranslated == uintptr(0)) { 55017 goto __4 55018 } 55019 goto quota_fopen_error 55020 __4: 55021 ; 55022 (*quota_FILE)(unsafe.Pointer(p)).Ff = libc.Xfopen(tls, zFullTranslated, zMode) 55023 if !((*quota_FILE)(unsafe.Pointer(p)).Ff == uintptr(0)) { 55024 goto __5 55025 } 55026 goto quota_fopen_error 55027 __5: 55028 ; 55029 quotaEnter(tls) 55030 pGroup = quotaGroupFind(tls, zFull) 55031 if !(pGroup != 0) { 55032 goto __6 55033 } 55034 pFile = quotaFindFile(tls, pGroup, zFull, 1) 55035 if !(pFile == uintptr(0)) { 55036 goto __7 55037 } 55038 quotaLeave(tls) 55039 goto quota_fopen_error 55040 __7: 55041 ; 55042 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 55043 (*quota_FILE)(unsafe.Pointer(p)).FpFile = pFile 55044 __6: 55045 ; 55046 quotaLeave(tls) 55047 sqlite3.Xsqlite3_free(tls, zFull) 55048 return p 55049 55050 quota_fopen_error: 55051 quota_mbcs_free(tls, zFullTranslated) 55052 sqlite3.Xsqlite3_free(tls, zFull) 55053 if !(p != 0 && (*quota_FILE)(unsafe.Pointer(p)).Ff != 0) { 55054 goto __8 55055 } 55056 libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55057 __8: 55058 ; 55059 sqlite3.Xsqlite3_free(tls, p) 55060 return uintptr(0) 55061 } 55062 55063 func sqlite3_quota_fread(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 55064 return libc.Xfread(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55065 } 55066 55067 func sqlite3_quota_fwrite(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 55068 var iOfst sqlite3_int64 55069 var iEnd sqlite3_int64 55070 var szNew sqlite3_int64 55071 var pFile uintptr 55072 var rc size_t 55073 55074 iOfst = libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55075 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 55076 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 55077 if pFile != 0 && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 55078 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55079 quotaEnter(tls) 55080 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 55081 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 55082 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 55083 (*struct { 55084 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 55085 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 55086 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 55087 } 55088 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 55089 iEnd = (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit - (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize + (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55090 nmemb = uint64(iEnd-iOfst) / size 55091 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 55092 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 55093 } 55094 } 55095 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 55096 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 55097 quotaLeave(tls) 55098 } else { 55099 pFile = uintptr(0) 55100 } 55101 rc = libc.Xfwrite(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55102 55103 if rc < nmemb && pFile != 0 { 55104 var nWritten size_t = rc 55105 var iNewEnd sqlite3_int64 = sqlite3_int64(uint64(iOfst) + size*nWritten) 55106 if iNewEnd < iEnd { 55107 iNewEnd = iEnd 55108 } 55109 quotaEnter(tls) 55110 *(*sqlite3_int64)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpGroup + 16)) += iNewEnd - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55111 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iNewEnd 55112 quotaLeave(tls) 55113 } 55114 return rc 55115 } 55116 55117 func sqlite3_quota_fclose(tls *libc.TLS, p uintptr) int32 { 55118 var rc int32 55119 var pFile uintptr 55120 rc = libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55121 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 55122 if pFile != 0 { 55123 quotaEnter(tls) 55124 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 55125 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 55126 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55127 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 55128 (*struct { 55129 f func(*libc.TLS, uintptr, uintptr, int32) int32 55130 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 55131 quotaRemoveFile(tls, pFile) 55132 } 55133 quotaGroupDeref(tls, pGroup) 55134 } 55135 quotaLeave(tls) 55136 } 55137 sqlite3.Xsqlite3_free(tls, p) 55138 return rc 55139 } 55140 55141 func sqlite3_quota_fflush(tls *libc.TLS, p uintptr, doFsync int32) int32 { 55142 var rc int32 55143 rc = libc.Xfflush(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55144 if rc == 0 && doFsync != 0 { 55145 rc = libc.Xfsync(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff)) 55146 } 55147 return libc.Bool32(rc != 0) 55148 } 55149 55150 func sqlite3_quota_fseek(tls *libc.TLS, p uintptr, offset int64, whence int32) int32 { 55151 return libc.Xfseek(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff, offset, whence) 55152 } 55153 55154 func sqlite3_quota_rewind(tls *libc.TLS, p uintptr) { 55155 libc.Xrewind(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55156 } 55157 55158 func sqlite3_quota_ftell(tls *libc.TLS, p uintptr) int64 { 55159 return libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55160 } 55161 55162 func sqlite3_quota_ferror(tls *libc.TLS, p uintptr) int32 { 55163 return libc.Xferror(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55164 } 55165 55166 func sqlite3_quota_ftruncate(tls *libc.TLS, p uintptr, szNew sqlite3_int64) int32 { 55167 var pFile uintptr = (*quota_FILE)(unsafe.Pointer(p)).FpFile 55168 var rc int32 55169 if libc.AssignUintptr(&pFile, (*quota_FILE)(unsafe.Pointer(p)).FpFile) != uintptr(0) && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 55170 var pGroup uintptr 55171 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 55172 return -1 55173 } 55174 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55175 quotaEnter(tls) 55176 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55177 quotaLeave(tls) 55178 } 55179 rc = libc.Xftruncate(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), szNew) 55180 if pFile != 0 && rc == 0 { 55181 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55182 quotaEnter(tls) 55183 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55184 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = szNew 55185 quotaLeave(tls) 55186 } 55187 return rc 55188 } 55189 55190 func sqlite3_quota_file_mtime(tls *libc.TLS, p uintptr, pTime uintptr) int32 { 55191 bp := tls.Alloc(128) 55192 defer tls.Free(128) 55193 55194 var rc int32 55195 55196 rc = libc.Xfstat(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), bp) 55197 if rc == 0 { 55198 *(*time_t)(unsafe.Pointer(pTime)) = (*stat)(unsafe.Pointer(bp)).Fst_mtim.Ftv_sec 55199 } 55200 return rc 55201 } 55202 55203 func sqlite3_quota_file_truesize(tls *libc.TLS, p uintptr) sqlite3_int64 { 55204 bp := tls.Alloc(128) 55205 defer tls.Free(128) 55206 55207 var rc int32 55208 55209 rc = libc.Xfstat(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), bp) 55210 if rc == 0 { 55211 return (*stat)(unsafe.Pointer(bp)).Fst_size 55212 } 55213 return int64(-1) 55214 } 55215 55216 func sqlite3_quota_file_size(tls *libc.TLS, p uintptr) sqlite3_int64 { 55217 if (*quota_FILE)(unsafe.Pointer(p)).FpFile != 0 { 55218 return (*quotaFile)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).FpFile)).FiSize 55219 } 55220 return int64(-1) 55221 } 55222 55223 func sqlite3_quota_file_available(tls *libc.TLS, p uintptr) int64 { 55224 var f uintptr = (*quota_FILE)(unsafe.Pointer(p)).Ff 55225 var pos1 int64 55226 var pos2 int64 55227 var rc int32 55228 pos1 = libc.Xftell(tls, f) 55229 if pos1 < int64(0) { 55230 return int64(-1) 55231 } 55232 rc = libc.Xfseek(tls, f, int64(0), SEEK_END) 55233 if rc != 0 { 55234 return int64(-1) 55235 } 55236 pos2 = libc.Xftell(tls, f) 55237 if pos2 < int64(0) { 55238 return int64(-1) 55239 } 55240 rc = libc.Xfseek(tls, f, pos1, SEEK_SET) 55241 if rc != 0 { 55242 return int64(-1) 55243 } 55244 return pos2 - pos1 55245 } 55246 55247 func sqlite3_quota_remove(tls *libc.TLS, zFilename uintptr) int32 { 55248 var zFull uintptr 55249 var nFull size_t 55250 var rc int32 55251 var pGroup uintptr 55252 var pFile uintptr 55253 var pNextFile uintptr 55254 var diff int32 55255 var c uint8 55256 55257 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 55258 if zFull == uintptr(0) { 55259 return SQLITE_NOMEM 55260 } 55261 rc = (*struct { 55262 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55263 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 55264 gQuota.FsThisVfs.FmxPathname+1, zFull) 55265 if rc != 0 { 55266 sqlite3.Xsqlite3_free(tls, zFull) 55267 return rc 55268 } 55269 55270 nFull = libc.Xstrlen(tls, zFull) 55271 if nFull > uint64(0) && (int32(*(*uint8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '/' || int32(*(*uint8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '\\') { 55272 nFull-- 55273 *(*uint8)(unsafe.Pointer(zFull + uintptr(nFull))) = uint8(0) 55274 } 55275 55276 quotaEnter(tls) 55277 pGroup = quotaGroupFind(tls, zFull) 55278 if pGroup != 0 { 55279 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0 && rc == SQLITE_OK; pFile = pNextFile { 55280 pNextFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 55281 diff = libc.Xstrncmp(tls, zFull, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, nFull) 55282 if diff == 0 && (int32(libc.AssignUint8(&c, *(*uint8)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FzFilename + uintptr(nFull))))) == 0 || int32(c) == '/' || int32(c) == '\\') { 55283 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 55284 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 55285 } else { 55286 rc = (*struct { 55287 f func(*libc.TLS, uintptr, uintptr, int32) int32 55288 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 55289 quotaRemoveFile(tls, pFile) 55290 quotaGroupDeref(tls, pGroup) 55291 } 55292 } 55293 } 55294 } 55295 quotaLeave(tls) 55296 sqlite3.Xsqlite3_free(tls, zFull) 55297 return rc 55298 } 55299 55300 type TclQuotaCallback1 = struct { 55301 Finterp uintptr 55302 FpScript uintptr 55303 } 55304 55305 type TclQuotaCallback = TclQuotaCallback1 55306 55307 func tclQuotaCallback(tls *libc.TLS, zFilename uintptr, piLimit uintptr, iSize sqlite3_int64, pArg uintptr) { 55308 bp := tls.Alloc(16) 55309 defer tls.Free(16) 55310 55311 var p uintptr 55312 var pEval uintptr 55313 var pVarname uintptr 55314 55315 var rc int32 55316 55317 p = pArg 55318 if p == uintptr(0) { 55319 return 55320 } 55321 55322 pVarname = tcl.XTcl_NewStringObj(tls, ts+35928, -1) 55323 (*Tcl_Obj)(unsafe.Pointer(pVarname)).FrefCount++ 55324 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(uint32(0))), bp) 55325 tcl.XTcl_AppendObjToObj(tls, pVarname, tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer(bp))&uint32(0x7FFFFFFF)))) 55326 tcl.XTcl_ObjSetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(piLimit))), 0) 55327 55328 pEval = tcl.XTcl_DuplicateObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript) 55329 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 55330 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zFilename, -1)) 55331 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pVarname) 55332 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewWideIntObj(tls, iSize)) 55333 rc = tcl.XTcl_EvalObjEx(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 55334 55335 if rc == TCL_OK { 55336 var pLimit uintptr = tcl.XTcl_ObjGetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), 0) 55337 rc = tcl.XTcl_GetWideIntFromObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pLimit, bp+8) 55338 *(*sqlite3_int64)(unsafe.Pointer(piLimit)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) 55339 tcl.XTcl_UnsetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetString(tls, pVarname), uintptr(0), 0) 55340 } 55341 55342 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 55343 var _objPtr uintptr = pEval 55344 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55345 tcl.XTclFreeObj(tls, _objPtr) 55346 } 55347 } 55348 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 55349 var _objPtr uintptr = pVarname 55350 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55351 tcl.XTclFreeObj(tls, _objPtr) 55352 } 55353 } 55354 if rc != TCL_OK { 55355 tcl.XTcl_BackgroundError(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp) 55356 } 55357 } 55358 55359 func tclCallbackDestructor(tls *libc.TLS, pObj uintptr) { 55360 var p uintptr = pObj 55361 if p != 0 { 55362 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 55363 var _objPtr uintptr = (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript 55364 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55365 tcl.XTclFreeObj(tls, _objPtr) 55366 } 55367 } 55368 sqlite3.Xsqlite3_free(tls, p) 55369 } 55370 } 55371 55372 func test_quota_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55373 bp := tls.Alloc(4) 55374 defer tls.Free(4) 55375 55376 var zName uintptr 55377 55378 var rc int32 55379 55380 if objc != 3 { 55381 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 55382 return TCL_ERROR 55383 } 55384 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55385 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55386 return TCL_ERROR 55387 } 55388 if int32(*(*uint8)(unsafe.Pointer(zName))) == 0 { 55389 zName = uintptr(0) 55390 } 55391 55392 rc = sqlite3_quota_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 55393 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55394 55395 return TCL_OK 55396 } 55397 55398 func test_quota_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55399 var rc int32 55400 55401 if objc != 1 { 55402 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 55403 return TCL_ERROR 55404 } 55405 55406 rc = sqlite3_quota_shutdown(tls) 55407 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55408 55409 return TCL_OK 55410 } 55411 55412 func test_quota_set(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55413 bp := tls.Alloc(12) 55414 defer tls.Free(12) 55415 55416 var zPattern uintptr 55417 55418 var pScript uintptr 55419 var rc int32 55420 var p uintptr 55421 55422 var xDestroy uintptr 55423 var xCallback uintptr 55424 55425 if objc != 4 { 55426 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35939) 55427 return TCL_ERROR 55428 } 55429 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55430 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55431 return TCL_ERROR 55432 } 55433 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 55434 tcl.XTcl_GetStringFromObj(tls, pScript, bp+8) 55435 55436 if *(*int32)(unsafe.Pointer(bp + 8)) > 0 { 55437 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TclQuotaCallback{}))) 55438 if !(p != 0) { 55439 tcl.XTcl_SetResult(tls, interp, ts+32746, uintptr(0)) 55440 return TCL_OK 55441 } 55442 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TclQuotaCallback{}))) 55443 (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp = interp 55444 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 55445 (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript = pScript 55446 xDestroy = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tclCallbackDestructor})) 55447 xCallback = *(*uintptr)(unsafe.Pointer(&struct { 55448 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 55449 }{tclQuotaCallback})) 55450 } else { 55451 p = uintptr(0) 55452 xDestroy = uintptr(0) 55453 xCallback = uintptr(0) 55454 } 55455 55456 rc = sqlite3_quota_set(tls, zPattern, *(*Tcl_WideInt)(unsafe.Pointer(bp)), xCallback, p, xDestroy) 55457 55458 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55459 return TCL_OK 55460 } 55461 55462 func test_quota_file(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55463 var zFilename uintptr 55464 var rc int32 55465 55466 if objc != 2 { 55467 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 55468 return TCL_ERROR 55469 } 55470 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55471 55472 rc = sqlite3_quota_file(tls, zFilename) 55473 55474 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55475 return TCL_OK 55476 } 55477 55478 func test_quota_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55479 bp := tls.Alloc(1008) 55480 defer tls.Free(1008) 55481 55482 var pResult uintptr 55483 var pGroupTerm uintptr 55484 var pFileTerm uintptr 55485 var pGroup uintptr 55486 var pFile uintptr 55487 55488 pResult = tcl.XTcl_NewObj(tls) 55489 quotaEnter(tls) 55490 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 55491 pGroupTerm = tcl.XTcl_NewObj(tls) 55492 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55493 tcl.XTcl_NewStringObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, -1)) 55494 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55495 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit)) 55496 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55497 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize)) 55498 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0; pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext { 55499 var i int32 55500 55501 pFileTerm = tcl.XTcl_NewObj(tls) 55502 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]uint8{})), bp+8, ts, libc.VaList(bp, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename)) 55503 for i = 0; *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i))) != 0; i++ { 55504 if int32(*(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i)))) == '\\' { 55505 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i))) = uint8('/') 55506 } 55507 } 55508 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55509 tcl.XTcl_NewStringObj(tls, bp+8, -1)) 55510 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55511 tcl.XTcl_NewWideIntObj(tls, (*quotaFile)(unsafe.Pointer(pFile)).FiSize)) 55512 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55513 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FnRef))) 55514 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55515 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose))) 55516 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, pFileTerm) 55517 } 55518 tcl.XTcl_ListObjAppendElement(tls, interp, pResult, pGroupTerm) 55519 } 55520 quotaLeave(tls) 55521 tcl.XTcl_SetObjResult(tls, interp, pResult) 55522 return TCL_OK 55523 } 55524 55525 func test_quota_fopen(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55526 bp := tls.Alloc(58) 55527 defer tls.Free(58) 55528 55529 var zFilename uintptr 55530 var zMode uintptr 55531 var p uintptr 55532 55533 if objc != 3 { 55534 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35960) 55535 return TCL_ERROR 55536 } 55537 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55538 zMode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 55539 p = sqlite3_quota_fopen(tls, zFilename, zMode) 55540 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+8, ts+9889, libc.VaList(bp, p)) 55541 tcl.XTcl_SetResult(tls, interp, bp+8, uintptr(1)) 55542 return TCL_OK 55543 } 55544 55545 func test_quota_fread(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55546 bp := tls.Alloc(8) 55547 defer tls.Free(8) 55548 55549 var p uintptr 55550 var zBuf uintptr 55551 55552 var got size_t 55553 55554 if objc != 4 { 55555 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35974) 55556 return TCL_ERROR 55557 } 55558 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55559 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55560 return TCL_ERROR 55561 } 55562 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 55563 return TCL_ERROR 55564 } 55565 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp))**(*int32)(unsafe.Pointer(bp + 4))+1) 55566 if zBuf == uintptr(0) { 55567 tcl.XTcl_SetResult(tls, interp, ts+2069, uintptr(0)) 55568 return TCL_ERROR 55569 } 55570 got = sqlite3_quota_fread(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 55571 *(*uint8)(unsafe.Pointer(zBuf + uintptr(got*size_t(*(*int32)(unsafe.Pointer(bp)))))) = uint8(0) 55572 tcl.XTcl_SetResult(tls, interp, zBuf, uintptr(1)) 55573 sqlite3.Xsqlite3_free(tls, zBuf) 55574 return TCL_OK 55575 } 55576 55577 func test_quota_fwrite(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55578 bp := tls.Alloc(8) 55579 defer tls.Free(8) 55580 55581 var p uintptr 55582 var zBuf uintptr 55583 55584 var got size_t 55585 55586 if objc != 5 { 55587 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35992) 55588 return TCL_ERROR 55589 } 55590 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55591 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55592 return TCL_ERROR 55593 } 55594 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 55595 return TCL_ERROR 55596 } 55597 zBuf = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 55598 got = sqlite3_quota_fwrite(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 55599 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(got))) 55600 return TCL_OK 55601 } 55602 55603 func test_quota_fclose(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55604 var p uintptr 55605 var rc int32 55606 55607 if objc != 2 { 55608 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55609 return TCL_ERROR 55610 } 55611 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55612 rc = sqlite3_quota_fclose(tls, p) 55613 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55614 return TCL_OK 55615 } 55616 55617 func test_quota_fflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55618 bp := tls.Alloc(4) 55619 defer tls.Free(4) 55620 55621 var p uintptr 55622 var rc int32 55623 *(*int32)(unsafe.Pointer(bp)) = 0 55624 55625 if objc != 2 && objc != 3 { 55626 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36018) 55627 return TCL_ERROR 55628 } 55629 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55630 if objc == 3 { 55631 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55632 return TCL_ERROR 55633 } 55634 } 55635 rc = sqlite3_quota_fflush(tls, p, *(*int32)(unsafe.Pointer(bp))) 55636 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55637 return TCL_OK 55638 } 55639 55640 func test_quota_fseek(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55641 bp := tls.Alloc(20) 55642 defer tls.Free(20) 55643 55644 var p uintptr 55645 55646 var zWhence uintptr 55647 var whence int32 55648 var rc int32 55649 55650 if objc != 4 { 55651 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36036) 55652 return TCL_ERROR 55653 } 55654 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55655 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 55656 return TCL_ERROR 55657 } 55658 zWhence = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 55659 if libc.Xstrcmp(tls, zWhence, ts+36057) == 0 { 55660 whence = SEEK_SET 55661 } else if libc.Xstrcmp(tls, zWhence, ts+36066) == 0 { 55662 whence = SEEK_CUR 55663 } else if libc.Xstrcmp(tls, zWhence, ts+36075) == 0 { 55664 whence = SEEK_END 55665 } else { 55666 tcl.XTcl_AppendResult(tls, interp, 55667 libc.VaList(bp, ts+36084, uintptr(0))) 55668 return TCL_ERROR 55669 } 55670 rc = sqlite3_quota_fseek(tls, p, int64(*(*int32)(unsafe.Pointer(bp + 16))), whence) 55671 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55672 return TCL_OK 55673 } 55674 55675 func test_quota_rewind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55676 var p uintptr 55677 if objc != 2 { 55678 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55679 return TCL_ERROR 55680 } 55681 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55682 sqlite3_quota_rewind(tls, p) 55683 return TCL_OK 55684 } 55685 55686 func test_quota_ftell(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55687 var p uintptr 55688 var x sqlite3_int64 55689 if objc != 2 { 55690 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55691 return TCL_ERROR 55692 } 55693 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55694 x = sqlite3_quota_ftell(tls, p) 55695 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55696 return TCL_OK 55697 } 55698 55699 func test_quota_ftruncate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55700 bp := tls.Alloc(8) 55701 defer tls.Free(8) 55702 55703 var p uintptr 55704 var x sqlite3_int64 55705 55706 var rc int32 55707 if objc != 3 { 55708 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36133) 55709 return TCL_ERROR 55710 } 55711 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55712 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55713 return TCL_ERROR 55714 } 55715 x = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 55716 rc = sqlite3_quota_ftruncate(tls, p, x) 55717 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55718 return TCL_OK 55719 } 55720 55721 func test_quota_file_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55722 var p uintptr 55723 var x sqlite3_int64 55724 if objc != 2 { 55725 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55726 return TCL_ERROR 55727 } 55728 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55729 x = sqlite3_quota_file_size(tls, p) 55730 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55731 return TCL_OK 55732 } 55733 55734 func test_quota_file_truesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55735 var p uintptr 55736 var x sqlite3_int64 55737 if objc != 2 { 55738 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55739 return TCL_ERROR 55740 } 55741 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55742 x = sqlite3_quota_file_truesize(tls, p) 55743 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55744 return TCL_OK 55745 } 55746 55747 func test_quota_file_mtime(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55748 bp := tls.Alloc(8) 55749 defer tls.Free(8) 55750 55751 var p uintptr 55752 55753 if objc != 2 { 55754 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55755 return TCL_ERROR 55756 } 55757 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55758 *(*time_t)(unsafe.Pointer(bp)) = int64(0) 55759 sqlite3_quota_file_mtime(tls, p, bp) 55760 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*time_t)(unsafe.Pointer(bp)))) 55761 return TCL_OK 55762 } 55763 55764 func test_quota_remove(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55765 var zFilename uintptr 55766 var rc int32 55767 if objc != 2 { 55768 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 55769 return TCL_ERROR 55770 } 55771 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55772 rc = sqlite3_quota_remove(tls, zFilename) 55773 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55774 return TCL_OK 55775 } 55776 55777 func test_quota_glob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55778 var zPattern uintptr 55779 var zText uintptr 55780 var rc int32 55781 if objc != 3 { 55782 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36145) 55783 return TCL_ERROR 55784 } 55785 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55786 zText = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 55787 rc = quotaStrglob(tls, zPattern, zText) 55788 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55789 return TCL_OK 55790 } 55791 55792 func test_quota_file_available(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55793 var p uintptr 55794 var x sqlite3_int64 55795 if objc != 2 { 55796 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55797 return TCL_ERROR 55798 } 55799 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55800 x = sqlite3_quota_file_available(tls, p) 55801 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 55802 return TCL_OK 55803 } 55804 55805 func test_quota_ferror(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55806 var p uintptr 55807 var x int32 55808 if objc != 2 { 55809 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55810 return TCL_ERROR 55811 } 55812 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55813 x = sqlite3_quota_ferror(tls, p) 55814 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, x)) 55815 return TCL_OK 55816 } 55817 55818 func Sqlitequota_Init(tls *libc.TLS, interp uintptr) int32 { 55819 var i int32 55820 55821 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd9))/uint64(unsafe.Sizeof(struct { 55822 FzName uintptr 55823 FxProc uintptr 55824 }{})); i++ { 55825 tcl.XTcl_CreateObjCommand(tls, interp, aCmd9[i].FzName, aCmd9[i].FxProc, uintptr(0), uintptr(0)) 55826 } 55827 55828 return TCL_OK 55829 } 55830 55831 var aCmd9 = [21]struct { 55832 FzName uintptr 55833 FxProc uintptr 55834 }{ 55835 {FzName: ts + 36158, FxProc: 0}, 55836 {FzName: ts + 36183, FxProc: 0}, 55837 {FzName: ts + 36206, FxProc: 0}, 55838 {FzName: ts + 36224, FxProc: 0}, 55839 {FzName: ts + 36243, FxProc: 0}, 55840 {FzName: ts + 36262, FxProc: 0}, 55841 {FzName: ts + 36282, FxProc: 0}, 55842 {FzName: ts + 36302, FxProc: 0}, 55843 {FzName: ts + 36323, FxProc: 0}, 55844 {FzName: ts + 36344, FxProc: 0}, 55845 {FzName: ts + 36365, FxProc: 0}, 55846 {FzName: ts + 36385, FxProc: 0}, 55847 {FzName: ts + 36406, FxProc: 0}, 55848 {FzName: ts + 36426, FxProc: 0}, 55849 {FzName: ts + 36450, FxProc: 0}, 55850 {FzName: ts + 36474, FxProc: 0}, 55851 {FzName: ts + 36502, FxProc: 0}, 55852 {FzName: ts + 36527, FxProc: 0}, 55853 {FzName: ts + 36548, FxProc: 0}, 55854 {FzName: ts + 36567, FxProc: 0}, 55855 {FzName: ts + 36596, FxProc: 0}, 55856 } 55857 55858 type Circle1 = struct { 55859 FaBox [2]struct { 55860 Fxmin float64 55861 Fxmax float64 55862 Fymin float64 55863 Fymax float64 55864 } 55865 Fcenterx float64 55866 Fcentery float64 55867 Fradius float64 55868 FmxArea float64 55869 FeScoreType int32 55870 F__ccgo_pad1 [4]byte 55871 } 55872 55873 type Circle = Circle1 55874 type Box = struct { 55875 Fxmin float64 55876 Fxmax float64 55877 Fymin float64 55878 Fymax float64 55879 } 55880 55881 func circle_del(tls *libc.TLS, p uintptr) { 55882 sqlite3.Xsqlite3_free(tls, p) 55883 } 55884 55885 func circle_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 55886 var i int32 55887 var pCircle uintptr 55888 var xmin float64 55889 var xmax float64 55890 var ymin float64 55891 var ymax float64 55892 55893 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) 55894 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) 55895 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) 55896 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) 55897 pCircle = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 55898 if pCircle == uintptr(0) { 55899 if nCoord != 4 { 55900 return SQLITE_ERROR 55901 } 55902 55903 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 { 55904 return SQLITE_ERROR 55905 } 55906 55907 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 55908 if !(pCircle != 0) { 55909 return SQLITE_NOMEM 55910 } 55911 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 55912 55913 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 55914 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 55915 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 55916 55917 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55918 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 55919 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55920 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55921 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 55922 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 55923 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55924 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 55925 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = (xmax-xmin)*(ymax-ymin) + 1.0 55926 } 55927 55928 for i = 0; i < 4; i++ { 55929 var x float64 55930 if i&0x01 != 0 { 55931 x = xmax 55932 } else { 55933 x = xmin 55934 } 55935 var y float64 55936 if i&0x02 != 0 { 55937 y = ymax 55938 } else { 55939 y = ymin 55940 } 55941 var d2 float64 55942 55943 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 55944 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 55945 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 55946 *(*int32)(unsafe.Pointer(pRes)) = 1 55947 return SQLITE_OK 55948 } 55949 } 55950 55951 for i = 0; i < 2; i++ { 55952 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 55953 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 55954 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 55955 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 55956 *(*int32)(unsafe.Pointer(pRes)) = 1 55957 return SQLITE_OK 55958 } 55959 } 55960 55961 *(*int32)(unsafe.Pointer(pRes)) = 0 55962 return SQLITE_OK 55963 } 55964 55965 func circle_query_func(tls *libc.TLS, p uintptr) int32 { 55966 var i int32 55967 var pCircle uintptr 55968 var xmin float64 55969 var xmax float64 55970 var ymin float64 55971 var ymax float64 55972 var nWithin int32 = 0 55973 55974 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 55975 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 55976 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 55977 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 55978 pCircle = (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FpUser 55979 if pCircle == uintptr(0) { 55980 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnCoord != 4 { 55981 return SQLITE_ERROR 55982 } 55983 55984 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 && (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 1 { 55985 return SQLITE_ERROR 55986 } 55987 55988 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 55989 if !(pCircle != 0) { 55990 return SQLITE_NOMEM 55991 } 55992 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 55993 55994 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam == 4 { 55995 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 55996 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 55997 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 55998 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(*(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8))) 55999 } else { 56000 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FapSqlParam))) 56001 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = 0.0 56002 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = 0.0 56003 (*Circle)(unsafe.Pointer(pCircle)).Fradius = 0.0 56004 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = 0 56005 for z != 0 && *(*uint8)(unsafe.Pointer(z)) != 0 { 56006 if int32(*(*uint8)(unsafe.Pointer(z))) == 'r' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == ':' { 56007 (*Circle)(unsafe.Pointer(pCircle)).Fradius = libc.Xatof(tls, z+2) 56008 } else if int32(*(*uint8)(unsafe.Pointer(z))) == 'x' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == ':' { 56009 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = libc.Xatof(tls, z+2) 56010 } else if int32(*(*uint8)(unsafe.Pointer(z))) == 'y' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == ':' { 56011 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = libc.Xatof(tls, z+2) 56012 } else if int32(*(*uint8)(unsafe.Pointer(z))) == 'e' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == ':' { 56013 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(libc.Xatof(tls, z+2)) 56014 } else if int32(*(*uint8)(unsafe.Pointer(z))) == ' ' { 56015 z++ 56016 continue 56017 } 56018 for int32(*(*uint8)(unsafe.Pointer(z))) != 0 && int32(*(*uint8)(unsafe.Pointer(z))) != ' ' { 56019 z++ 56020 } 56021 for int32(*(*uint8)(unsafe.Pointer(z))) == ' ' { 56022 z++ 56023 } 56024 } 56025 } 56026 if (*Circle)(unsafe.Pointer(pCircle)).Fradius < 0.0 { 56027 sqlite3.Xsqlite3_free(tls, pCircle) 56028 return SQLITE_NOMEM 56029 } 56030 56031 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 56032 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 56033 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 56034 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 56035 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 56036 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 56037 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 56038 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 56039 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = float64(200.0) * 200.0 56040 } 56041 56042 for i = 0; i < 4; i++ { 56043 var x float64 56044 if i&0x01 != 0 { 56045 x = xmax 56046 } else { 56047 x = xmin 56048 } 56049 var y float64 56050 if i&0x02 != 0 { 56051 y = ymax 56052 } else { 56053 y = ymin 56054 } 56055 var d2 float64 56056 56057 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 56058 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 56059 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 56060 nWithin++ 56061 } 56062 } 56063 56064 if nWithin == 0 { 56065 for i = 0; i < 2; i++ { 56066 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 56067 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 56068 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 56069 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 56070 nWithin = 1 56071 break 56072 } 56073 } 56074 } 56075 56076 if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 1 { 56077 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56078 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 2 { 56079 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56080 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 3 { 56081 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel == 1 { 56082 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 1.0 - (xmax-xmin)*(ymax-ymin)/(*Circle)(unsafe.Pointer(pCircle)).FmxArea 56083 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore < 0.01 { 56084 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.01 56085 } 56086 } else { 56087 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.0 56088 } 56089 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 4 { 56090 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56091 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 56092 nWithin = 0 56093 } 56094 } else { 56095 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56096 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 56097 nWithin = 0 56098 } 56099 } 56100 if nWithin == 0 { 56101 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 56102 } else if nWithin >= 4 { 56103 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 56104 } else { 56105 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 56106 } 56107 return SQLITE_OK 56108 } 56109 56110 func bfs_query_func(tls *libc.TLS, p uintptr) int32 { 56111 var x0 float64 56112 var x1 float64 56113 var y0 float64 56114 var y1 float64 56115 var bx0 float64 56116 var bx1 float64 56117 var by0 float64 56118 var by1 float64 56119 56120 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 { 56121 return SQLITE_ERROR 56122 } 56123 x0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 56124 x1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 56125 y0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 56126 y1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 56127 bx0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 56128 bx1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 56129 by0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 56130 by1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8)) 56131 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56132 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeParentWithin == FULLY_WITHIN { 56133 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 56134 } else if x0 >= bx0 && x1 <= bx1 && y0 >= by0 && y1 <= by1 { 56135 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 56136 } else if x1 >= bx0 && x0 <= bx1 && y1 >= by0 && y0 <= by1 { 56137 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 56138 } else { 56139 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 56140 } 56141 return SQLITE_OK 56142 } 56143 56144 type Cube1 = struct { 56145 Fx float64 56146 Fy float64 56147 Fz float64 56148 Fwidth float64 56149 Fheight float64 56150 Fdepth float64 56151 } 56152 56153 type Cube = Cube1 56154 56155 func cube_context_free(tls *libc.TLS, p uintptr) { 56156 sqlite3.Xsqlite3_free(tls, p) 56157 } 56158 56159 var gHere int32 = 42 56160 56161 func cube_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, piRes uintptr) int32 { 56162 var pCube uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 56163 56164 if pCube == uintptr(0) { 56165 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != 6 || nCoord != 6 || 56166 *(*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 { 56167 return SQLITE_ERROR 56168 } 56169 pCube = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Cube{}))) 56170 if !(pCube != 0) { 56171 return SQLITE_NOMEM 56172 } 56173 (*Cube)(unsafe.Pointer(pCube)).Fx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 56174 (*Cube)(unsafe.Pointer(pCube)).Fy = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 56175 (*Cube)(unsafe.Pointer(pCube)).Fz = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 56176 (*Cube)(unsafe.Pointer(pCube)).Fwidth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 3*8)) 56177 (*Cube)(unsafe.Pointer(pCube)).Fheight = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 4*8)) 56178 (*Cube)(unsafe.Pointer(pCube)).Fdepth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 5*8)) 56179 56180 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pCube 56181 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cube_context_free})) 56182 } 56183 56184 *(*int32)(unsafe.Pointer(piRes)) = 0 56185 if *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) <= (*Cube)(unsafe.Pointer(pCube)).Fx+(*Cube)(unsafe.Pointer(pCube)).Fwidth && 56186 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fx && 56187 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fy+(*Cube)(unsafe.Pointer(pCube)).Fheight && 56188 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fy && 56189 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 4*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fz+(*Cube)(unsafe.Pointer(pCube)).Fdepth && 56190 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 5*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fz { 56191 *(*int32)(unsafe.Pointer(piRes)) = 1 56192 } 56193 56194 return SQLITE_OK 56195 } 56196 56197 func register_cube_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56198 bp := tls.Alloc(8) 56199 defer tls.Free(8) 56200 56201 var rc int32 56202 56203 if objc != 2 { 56204 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 56205 return TCL_ERROR 56206 } 56207 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 56208 return TCL_ERROR 56209 } 56210 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36617, *(*uintptr)(unsafe.Pointer(&struct { 56211 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 56212 }{cube_geom})), uintptr(unsafe.Pointer(&gHere))) 56213 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 56214 return TCL_OK 56215 } 56216 56217 func register_circle_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56218 bp := tls.Alloc(8) 56219 defer tls.Free(8) 56220 56221 var rc int32 56222 56223 if objc != 2 { 56224 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 56225 return TCL_ERROR 56226 } 56227 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 56228 return TCL_ERROR 56229 } 56230 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36622, *(*uintptr)(unsafe.Pointer(&struct { 56231 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 56232 }{circle_geom})), uintptr(0)) 56233 if rc == SQLITE_OK { 56234 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36629, 56235 *(*uintptr)(unsafe.Pointer(&struct { 56236 f func(*libc.TLS, uintptr) int32 56237 }{circle_query_func})), uintptr(0), uintptr(0)) 56238 } 56239 if rc == SQLITE_OK { 56240 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36637, 56241 *(*uintptr)(unsafe.Pointer(&struct { 56242 f func(*libc.TLS, uintptr) int32 56243 }{bfs_query_func})), uintptr(0), uintptr(0)) 56244 } 56245 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 56246 return TCL_OK 56247 } 56248 56249 func Sqlitetestrtree_Init(tls *libc.TLS, interp uintptr) int32 { 56250 tcl.XTcl_CreateObjCommand(tls, interp, ts+36656, *(*uintptr)(unsafe.Pointer(&struct { 56251 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56252 }{register_cube_geom})), uintptr(0), uintptr(0)) 56253 tcl.XTcl_CreateObjCommand(tls, interp, ts+36675, *(*uintptr)(unsafe.Pointer(&struct { 56254 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56255 }{register_circle_geom})), uintptr(0), uintptr(0)) 56256 return TCL_OK 56257 } 56258 56259 type fd_set5 = struct{ Ffds_bits [16]int64 } 56260 56261 type schema_vtab1 = struct { 56262 Fbase sqlite3_vtab 56263 Fdb uintptr 56264 } 56265 56266 type schema_vtab = schema_vtab1 56267 type schema_cursor1 = struct { 56268 Fbase sqlite3_vtab_cursor 56269 FpDbList uintptr 56270 FpTableList uintptr 56271 FpColumnList uintptr 56272 Frowid int32 56273 F__ccgo_pad1 [4]byte 56274 } 56275 56276 type schema_cursor = schema_cursor1 56277 56278 func schemaDestroy(tls *libc.TLS, pVtab uintptr) int32 { 56279 sqlite3.Xsqlite3_free(tls, pVtab) 56280 return 0 56281 } 56282 56283 func schemaCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 56284 var rc int32 = SQLITE_NOMEM 56285 var pVtab uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_vtab{}))) 56286 if pVtab != 0 { 56287 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(schema_vtab{}))) 56288 (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb = db 56289 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+36696) 56290 } 56291 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 56292 return rc 56293 } 56294 56295 func schemaOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 56296 var rc int32 = SQLITE_NOMEM 56297 var pCur uintptr 56298 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_cursor{}))) 56299 if pCur != 0 { 56300 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(schema_cursor{}))) 56301 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 56302 rc = SQLITE_OK 56303 } 56304 return rc 56305 } 56306 56307 func schemaClose(tls *libc.TLS, cur uintptr) int32 { 56308 var pCur uintptr = cur 56309 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList) 56310 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) 56311 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) 56312 sqlite3.Xsqlite3_free(tls, pCur) 56313 return SQLITE_OK 56314 } 56315 56316 func schemaColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 56317 var pCur uintptr = cur 56318 switch i { 56319 case 0: 56320 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1)) 56321 break 56322 case 1: 56323 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0)) 56324 break 56325 default: 56326 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList, i-2)) 56327 break 56328 } 56329 return SQLITE_OK 56330 } 56331 56332 func schemaRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 56333 var pCur uintptr = cur 56334 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*schema_cursor)(unsafe.Pointer(pCur)).Frowid) 56335 return SQLITE_OK 56336 } 56337 56338 func finalize(tls *libc.TLS, ppStmt uintptr) int32 { 56339 var rc int32 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(ppStmt))) 56340 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 56341 return rc 56342 } 56343 56344 func schemaEof(tls *libc.TLS, cur uintptr) int32 { 56345 var pCur uintptr = cur 56346 return func() int32 { 56347 if (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList != 0 { 56348 return 0 56349 } 56350 return 1 56351 }() 56352 } 56353 56354 func schemaNext(tls *libc.TLS, cur uintptr) int32 { 56355 bp := tls.Alloc(24) 56356 defer tls.Free(24) 56357 56358 var rc int32 56359 var pCur uintptr 56360 var pVtab uintptr 56361 var zSql uintptr 56362 var pDbList uintptr 56363 rc = SQLITE_OK 56364 pCur = cur 56365 pVtab = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 56366 zSql = uintptr(0) 56367 56368 __1: 56369 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList)) { 56370 goto __2 56371 } 56372 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+24))) { 56373 goto __3 56374 } 56375 goto next_exit 56376 __3: 56377 ; 56378 __4: 56379 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList)) { 56380 goto __5 56381 } 56382 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+16))) { 56383 goto __6 56384 } 56385 goto next_exit 56386 __6: 56387 ; 56388 __7: 56389 if !(SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList)) { 56390 goto __8 56391 } 56392 rc = finalize(tls, pCur+8) 56393 goto next_exit 56394 goto __7 56395 __8: 56396 ; 56397 if !(sqlite3.Xsqlite3_column_int(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 0) == 1) { 56398 goto __9 56399 } 56400 zSql = sqlite3.Xsqlite3_mprintf(tls, 56401 ts+36768, 0) 56402 goto __10 56403 __9: 56404 pDbList = (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList 56405 zSql = sqlite3.Xsqlite3_mprintf(tls, 56406 ts+36823, 56407 libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pDbList, 1))) 56408 __10: 56409 ; 56410 if !!(zSql != 0) { 56411 goto __11 56412 } 56413 rc = SQLITE_NOMEM 56414 goto next_exit 56415 __11: 56416 ; 56417 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+16, uintptr(0)) 56418 sqlite3.Xsqlite3_free(tls, zSql) 56419 if !(rc != SQLITE_OK) { 56420 goto __12 56421 } 56422 goto next_exit 56423 __12: 56424 ; 56425 goto __4 56426 __5: 56427 ; 56428 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+36876, 56429 libc.VaList(bp+8, sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1), 56430 sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0))) 56431 56432 if !!(zSql != 0) { 56433 goto __13 56434 } 56435 rc = SQLITE_NOMEM 56436 goto next_exit 56437 __13: 56438 ; 56439 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+24, uintptr(0)) 56440 sqlite3.Xsqlite3_free(tls, zSql) 56441 if !(rc != SQLITE_OK) { 56442 goto __14 56443 } 56444 goto next_exit 56445 __14: 56446 ; 56447 goto __1 56448 __2: 56449 ; 56450 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid++ 56451 56452 next_exit: 56453 return rc 56454 } 56455 56456 func schemaFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 56457 var rc int32 56458 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 56459 var pCur uintptr = pVtabCursor 56460 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid = 0 56461 finalize(tls, pCur+16) 56462 finalize(tls, pCur+24) 56463 finalize(tls, pCur+8) 56464 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, ts+36901, -1, pCur+8, uintptr(0)) 56465 return func() int32 { 56466 if rc == SQLITE_OK { 56467 return schemaNext(tls, pVtabCursor) 56468 } 56469 return rc 56470 }() 56471 } 56472 56473 func schemaBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 56474 return SQLITE_OK 56475 } 56476 56477 var schemaModule = sqlite3_module{ 56478 FxCreate: 0, 56479 FxConnect: 0, 56480 FxBestIndex: 0, 56481 FxDisconnect: 0, 56482 FxDestroy: 0, 56483 FxOpen: 0, 56484 FxClose: 0, 56485 FxFilter: 0, 56486 FxNext: 0, 56487 FxEof: 0, 56488 FxColumn: 0, 56489 FxRowid: 0, 56490 } 56491 56492 func register_schema_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56493 bp := tls.Alloc(8) 56494 defer tls.Free(8) 56495 56496 if objc != 2 { 56497 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 56498 return TCL_ERROR 56499 } 56500 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 56501 return TCL_ERROR 56502 } 56503 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+4808, uintptr(unsafe.Pointer(&schemaModule)), uintptr(0)) 56504 return TCL_OK 56505 } 56506 56507 func Sqlitetestschema_Init(tls *libc.TLS, interp uintptr) int32 { 56508 var i int32 56509 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd12))/uint64(unsafe.Sizeof(struct { 56510 FzName uintptr 56511 FxProc uintptr 56512 FclientData uintptr 56513 }{})); i++ { 56514 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd12[i].FzName, 56515 aObjCmd12[i].FxProc, aObjCmd12[i].FclientData, uintptr(0)) 56516 } 56517 return TCL_OK 56518 } 56519 56520 var aObjCmd12 = [1]struct { 56521 FzName uintptr 56522 FxProc uintptr 56523 FclientData uintptr 56524 }{ 56525 {FzName: ts + 36922, FxProc: 0}, 56526 } 56527 56528 type SqlMessage1 = struct { 56529 Fop int32 56530 F__ccgo_pad1 [4]byte 56531 FpDb uintptr 56532 FpStmt uintptr 56533 FerrCode int32 56534 F__ccgo_pad2 [4]byte 56535 FzIn uintptr 56536 FnByte int32 56537 F__ccgo_pad3 [4]byte 56538 FzOut uintptr 56539 FpNext uintptr 56540 FpPrev uintptr 56541 FclientMutex pthread_mutex_t 56542 FclientWakeup pthread_cond_t 56543 } 56544 56545 type SqlMessage = SqlMessage1 56546 56547 type ServerState = struct { 56548 FqueueMutex pthread_mutex_t 56549 FserverMutex pthread_mutex_t 56550 FserverWakeup pthread_cond_t 56551 FserverHalt int32 56552 F__ccgo_pad1 [4]byte 56553 FpQueueHead uintptr 56554 FpQueueTail uintptr 56555 } 56556 56557 var g4 = ServerState{} 56558 56559 func sendToServer(tls *libc.TLS, pMsg uintptr) { 56560 libc.Xpthread_mutex_init(tls, pMsg+72, uintptr(0)) 56561 libc.Xpthread_cond_init(tls, pMsg+120, uintptr(0)) 56562 56563 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 56564 (*SqlMessage)(unsafe.Pointer(pMsg)).FpNext = g4.FpQueueHead 56565 if g4.FpQueueHead == uintptr(0) { 56566 g4.FpQueueTail = pMsg 56567 } else { 56568 (*SqlMessage)(unsafe.Pointer(g4.FpQueueHead)).FpPrev = pMsg 56569 } 56570 (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev = uintptr(0) 56571 g4.FpQueueHead = pMsg 56572 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 56573 56574 libc.Xpthread_mutex_lock(tls, pMsg+72) 56575 libc.Xpthread_cond_signal(tls, uintptr(unsafe.Pointer(&g4))+96) 56576 for (*SqlMessage)(unsafe.Pointer(pMsg)).Fop != MSG_Done { 56577 libc.Xpthread_cond_wait(tls, pMsg+120, pMsg+72) 56578 } 56579 libc.Xpthread_mutex_unlock(tls, pMsg+72) 56580 56581 libc.Xpthread_mutex_destroy(tls, pMsg+72) 56582 libc.Xpthread_cond_destroy(tls, pMsg+120) 56583 } 56584 56585 func sqlite3_client_open(tls *libc.TLS, zDatabaseName uintptr, ppDb uintptr) int32 { 56586 bp := tls.Alloc(168) 56587 defer tls.Free(168) 56588 56589 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Open 56590 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zDatabaseName 56591 sendToServer(tls, bp) 56592 *(*uintptr)(unsafe.Pointer(ppDb)) = (*SqlMessage)(unsafe.Pointer(bp)).FpDb 56593 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56594 } 56595 56596 func sqlite3_client_prepare(tls *libc.TLS, pDb uintptr, zSql uintptr, nByte int32, ppStmt uintptr, pzTail uintptr) int32 { 56597 bp := tls.Alloc(168) 56598 defer tls.Free(168) 56599 56600 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Prepare 56601 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 56602 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zSql 56603 (*SqlMessage)(unsafe.Pointer(bp)).FnByte = nByte 56604 sendToServer(tls, bp) 56605 *(*uintptr)(unsafe.Pointer(ppStmt)) = (*SqlMessage)(unsafe.Pointer(bp)).FpStmt 56606 if pzTail != 0 { 56607 *(*uintptr)(unsafe.Pointer(pzTail)) = (*SqlMessage)(unsafe.Pointer(bp)).FzOut 56608 } 56609 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56610 } 56611 56612 func sqlite3_client_step(tls *libc.TLS, pStmt uintptr) int32 { 56613 bp := tls.Alloc(168) 56614 defer tls.Free(168) 56615 56616 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Step 56617 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56618 sendToServer(tls, bp) 56619 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56620 } 56621 56622 func sqlite3_client_reset(tls *libc.TLS, pStmt uintptr) int32 { 56623 bp := tls.Alloc(168) 56624 defer tls.Free(168) 56625 56626 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Reset 56627 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56628 sendToServer(tls, bp) 56629 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56630 } 56631 56632 func sqlite3_client_finalize(tls *libc.TLS, pStmt uintptr) int32 { 56633 bp := tls.Alloc(168) 56634 defer tls.Free(168) 56635 56636 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Finalize 56637 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56638 sendToServer(tls, bp) 56639 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56640 } 56641 56642 func sqlite3_client_close(tls *libc.TLS, pDb uintptr) int32 { 56643 bp := tls.Alloc(168) 56644 defer tls.Free(168) 56645 56646 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Close 56647 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 56648 sendToServer(tls, bp) 56649 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56650 } 56651 56652 func sqlite3_server(tls *libc.TLS, NotUsed uintptr) uintptr { 56653 if libc.Xpthread_mutex_trylock(tls, uintptr(unsafe.Pointer(&g4))+48) != 0 { 56654 return uintptr(0) 56655 } 56656 sqlite3.Xsqlite3_enable_shared_cache(tls, 1) 56657 for !(g4.FserverHalt != 0) { 56658 var pMsg uintptr 56659 56660 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 56661 for g4.FpQueueTail == uintptr(0) && g4.FserverHalt == 0 { 56662 libc.Xpthread_cond_wait(tls, uintptr(unsafe.Pointer(&g4))+96, uintptr(unsafe.Pointer(&g4))) 56663 } 56664 pMsg = g4.FpQueueTail 56665 if pMsg != 0 { 56666 if (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev != 0 { 56667 (*SqlMessage)(unsafe.Pointer((*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev)).FpNext = uintptr(0) 56668 } else { 56669 g4.FpQueueHead = uintptr(0) 56670 } 56671 g4.FpQueueTail = (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev 56672 } 56673 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 56674 if pMsg == uintptr(0) { 56675 break 56676 } 56677 56678 libc.Xpthread_mutex_lock(tls, pMsg+72) 56679 switch (*SqlMessage)(unsafe.Pointer(pMsg)).Fop { 56680 case MSG_Open: 56681 { 56682 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_open(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, pMsg+8) 56683 break 56684 56685 } 56686 case MSG_Prepare: 56687 { 56688 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_prepare(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, (*SqlMessage)(unsafe.Pointer(pMsg)).FnByte, 56689 pMsg+16, pMsg+48) 56690 break 56691 56692 } 56693 case MSG_Step: 56694 { 56695 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_step(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56696 break 56697 56698 } 56699 case MSG_Reset: 56700 { 56701 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_reset(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56702 break 56703 56704 } 56705 case MSG_Finalize: 56706 { 56707 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_finalize(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 56708 break 56709 56710 } 56711 case MSG_Close: 56712 { 56713 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_close(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb) 56714 break 56715 56716 } 56717 } 56718 56719 (*SqlMessage)(unsafe.Pointer(pMsg)).Fop = MSG_Done 56720 libc.Xpthread_mutex_unlock(tls, pMsg+72) 56721 libc.Xpthread_cond_signal(tls, pMsg+120) 56722 } 56723 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+48) 56724 return uintptr(0) 56725 } 56726 56727 func sqlite3_server_start(tls *libc.TLS) { 56728 bp := tls.Alloc(8) 56729 defer tls.Free(8) 56730 56731 var rc int32 56732 g4.FserverHalt = 0 56733 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 56734 f func(*libc.TLS, uintptr) uintptr 56735 }{sqlite3_server})), uintptr(0)) 56736 if rc == 0 { 56737 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 56738 } 56739 } 56740 56741 func serverWrapper(tls *libc.TLS, pnDecr uintptr) uintptr { 56742 var p uintptr = sqlite3_server(tls, uintptr(0)) 56743 *(*int32)(unsafe.Pointer(pnDecr))-- 56744 return p 56745 } 56746 56747 func sqlite3_server_start2(tls *libc.TLS, pnDecr uintptr) { 56748 bp := tls.Alloc(8) 56749 defer tls.Free(8) 56750 56751 var rc int32 56752 g4.FserverHalt = 0 56753 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 56754 f func(*libc.TLS, uintptr) uintptr 56755 }{serverWrapper})), pnDecr) 56756 if rc == 0 { 56757 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 56758 } 56759 } 56760 56761 func sqlite3_server_stop(tls *libc.TLS) { 56762 g4.FserverHalt = 1 56763 libc.Xpthread_cond_broadcast(tls, uintptr(unsafe.Pointer(&g4))+96) 56764 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))+48) 56765 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+48) 56766 } 56767 56768 type SuperlockBusy1 = struct { 56769 FxBusy uintptr 56770 FpBusyArg uintptr 56771 FnBusy int32 56772 F__ccgo_pad1 [4]byte 56773 } 56774 56775 type SuperlockBusy = SuperlockBusy1 56776 56777 type Superlock1 = struct { 56778 Fdb uintptr 56779 FbWal int32 56780 F__ccgo_pad1 [4]byte 56781 } 56782 56783 type Superlock = Superlock1 56784 56785 func superlockBusyHandler(tls *libc.TLS, pCtx uintptr, UNUSED int32) int32 { 56786 var pBusy uintptr = pCtx 56787 if (*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy == uintptr(0) { 56788 return 0 56789 } 56790 return (*struct { 56791 f func(*libc.TLS, uintptr, int32) int32 56792 })(unsafe.Pointer(&struct{ uintptr }{(*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy})).f(tls, (*SuperlockBusy)(unsafe.Pointer(pBusy)).FpBusyArg, libc.PostIncInt32(&(*SuperlockBusy)(unsafe.Pointer(pBusy)).FnBusy, 1)) 56793 } 56794 56795 func superlockIsWal(tls *libc.TLS, pLock uintptr) int32 { 56796 bp := tls.Alloc(8) 56797 defer tls.Free(8) 56798 56799 var rc int32 56800 56801 rc = sqlite3.Xsqlite3_prepare(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+36945, -1, bp, uintptr(0)) 56802 if rc != SQLITE_OK { 56803 return rc 56804 } 56805 56806 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 0 56807 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 56808 var zMode uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 56809 if zMode != 0 && libc.Xstrlen(tls, zMode) == uint64(3) && sqlite3.Xsqlite3_strnicmp(tls, ts+29946, zMode, 3) == 0 { 56810 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 1 56811 } 56812 } 56813 56814 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 56815 } 56816 56817 func superlockShmLock(tls *libc.TLS, fd uintptr, idx int32, nByte int32, pBusy uintptr) int32 { 56818 var rc int32 56819 var xShmLock uintptr = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxShmLock 56820 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_BUSY && superlockBusyHandler(tls, pBusy, 0) != 0 { 56821 rc = (*struct { 56822 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56823 })(unsafe.Pointer(&struct{ uintptr }{xShmLock})).f(tls, fd, idx, nByte, SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) 56824 } 56825 return rc 56826 } 56827 56828 func superlockWalLock(tls *libc.TLS, db uintptr, pBusy uintptr) int32 { 56829 bp := tls.Alloc(16) 56830 defer tls.Free(16) 56831 56832 var rc int32 56833 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 56834 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 56835 56836 rc = sqlite3.Xsqlite3_file_control(tls, db, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 56837 if rc != SQLITE_OK { 56838 return rc 56839 } 56840 56841 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 2, 1, pBusy) 56842 if rc != SQLITE_OK { 56843 return rc 56844 } 56845 56846 rc = (*struct { 56847 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 56848 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpMethods)).FxShmMap})).f(tls, *(*uintptr)(unsafe.Pointer(bp)), 0, 32*1024, 1, bp+8) 56849 if rc != SQLITE_OK { 56850 return rc 56851 } 56852 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, uint64(32)) 56853 56854 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 3, SQLITE_SHM_NLOCK-3, pBusy) 56855 return rc 56856 } 56857 56858 func sqlite3demo_superunlock(tls *libc.TLS, pLock uintptr) { 56859 bp := tls.Alloc(8) 56860 defer tls.Free(8) 56861 56862 var p uintptr = pLock 56863 if (*Superlock)(unsafe.Pointer(p)).FbWal != 0 { 56864 var rc int32 56865 var flags int32 = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE 56866 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 56867 rc = sqlite3.Xsqlite3_file_control(tls, (*Superlock)(unsafe.Pointer(p)).Fdb, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 56868 if rc == SQLITE_OK { 56869 (*struct { 56870 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56871 })(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) 56872 (*struct { 56873 f func(*libc.TLS, uintptr, int32, int32, int32) int32 56874 })(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) 56875 } 56876 } 56877 sqlite3.Xsqlite3_close(tls, (*Superlock)(unsafe.Pointer(p)).Fdb) 56878 sqlite3.Xsqlite3_free(tls, p) 56879 } 56880 56881 func sqlite3demo_superlock(tls *libc.TLS, zPath uintptr, zVfs uintptr, xBusy uintptr, pBusyArg uintptr, ppLock uintptr) int32 { 56882 bp := tls.Alloc(24) 56883 defer tls.Free(24) 56884 56885 *(*SuperlockBusy)(unsafe.Pointer(bp)) = SuperlockBusy{} 56886 var rc int32 56887 var pLock uintptr 56888 56889 pLock = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Superlock{}))) 56890 if !(pLock != 0) { 56891 return SQLITE_NOMEM 56892 } 56893 libc.Xmemset(tls, pLock, 0, uint64(unsafe.Sizeof(Superlock{}))) 56894 56895 rc = sqlite3.Xsqlite3_open_v2(tls, 56896 zPath, pLock, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs) 56897 56898 if rc == SQLITE_OK { 56899 (*SuperlockBusy)(unsafe.Pointer(bp)).FxBusy = xBusy 56900 (*SuperlockBusy)(unsafe.Pointer(bp)).FpBusyArg = pBusyArg 56901 sqlite3.Xsqlite3_busy_handler(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 56902 f func(*libc.TLS, uintptr, int32) int32 56903 }{superlockBusyHandler})), bp) 56904 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+13217, uintptr(0), uintptr(0), uintptr(0)) 56905 } 56906 56907 if rc == SQLITE_OK { 56908 if SQLITE_OK == libc.AssignInt32(&rc, superlockIsWal(tls, pLock)) && (*Superlock)(unsafe.Pointer(pLock)).FbWal != 0 { 56909 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+11628, uintptr(0), uintptr(0), uintptr(0)) 56910 if rc == SQLITE_OK { 56911 rc = superlockWalLock(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, bp) 56912 } 56913 } 56914 } 56915 56916 if rc != SQLITE_OK { 56917 sqlite3demo_superunlock(tls, pLock) 56918 *(*uintptr)(unsafe.Pointer(ppLock)) = uintptr(0) 56919 } else { 56920 *(*uintptr)(unsafe.Pointer(ppLock)) = pLock 56921 } 56922 56923 return rc 56924 } 56925 56926 type InterpAndScript1 = struct { 56927 Finterp uintptr 56928 FpScript uintptr 56929 } 56930 56931 type InterpAndScript = InterpAndScript1 56932 56933 func superunlock_del(tls *libc.TLS, cd ClientData) { 56934 sqlite3demo_superunlock(tls, cd) 56935 } 56936 56937 func superunlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56938 if objc != 1 { 56939 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 56940 return TCL_ERROR 56941 } 56942 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 56943 return TCL_OK 56944 } 56945 56946 func superlock_busy(tls *libc.TLS, pCtx uintptr, nBusy int32) int32 { 56947 bp := tls.Alloc(4) 56948 defer tls.Free(4) 56949 56950 var p uintptr = pCtx 56951 var pEval uintptr 56952 *(*int32)(unsafe.Pointer(bp)) = 0 56953 56954 pEval = tcl.XTcl_DuplicateObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).FpScript) 56955 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 56956 tcl.XTcl_ListObjAppendElement(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, nBusy)) 56957 tcl.XTcl_EvalObjEx(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 56958 tcl.XTcl_GetIntFromObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp), bp) 56959 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 56960 var _objPtr uintptr = pEval 56961 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 56962 tcl.XTclFreeObj(tls, _objPtr) 56963 } 56964 } 56965 56966 return *(*int32)(unsafe.Pointer(bp)) 56967 } 56968 56969 func superlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56970 bp := tls.Alloc(40) 56971 defer tls.Free(40) 56972 56973 var zPath uintptr 56974 var zVfs uintptr = uintptr(0) 56975 *(*InterpAndScript)(unsafe.Pointer(bp + 16)) = InterpAndScript{} 56976 var xBusy uintptr = uintptr(0) 56977 var rc int32 56978 56979 if objc < 3 || objc > 5 { 56980 tcl.XTcl_WrongNumArgs(tls, 56981 interp, 1, objv, ts+36970) 56982 return TCL_ERROR 56983 } 56984 56985 zPath = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56986 56987 if objc > 3 { 56988 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 56989 if libc.Xstrlen(tls, zVfs) == uint64(0) { 56990 zVfs = uintptr(0) 56991 } 56992 } 56993 if objc > 4 { 56994 (*InterpAndScript)(unsafe.Pointer(bp + 16)).Finterp = interp 56995 (*InterpAndScript)(unsafe.Pointer(bp + 16)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 56996 xBusy = *(*uintptr)(unsafe.Pointer(&struct { 56997 f func(*libc.TLS, uintptr, int32) int32 56998 }{superlock_busy})) 56999 } 57000 57001 rc = sqlite3demo_superlock(tls, zPath, zVfs, xBusy, bp+16, bp+32) 57002 57003 if rc != SQLITE_OK { 57004 tcl.XTcl_ResetResult(tls, interp) 57005 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 57006 return TCL_ERROR 57007 } 57008 57009 tcl.XTcl_CreateObjCommand(tls, 57010 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 57011 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57012 }{superunlock_cmd})), *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{superunlock_del}))) 57013 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 57014 return TCL_OK 57015 } 57016 57017 func SqliteSuperlock_Init(tls *libc.TLS, interp uintptr) int32 { 57018 tcl.XTcl_CreateObjCommand(tls, interp, ts+37011, *(*uintptr)(unsafe.Pointer(&struct { 57019 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57020 }{superlock_cmd})), uintptr(0), uintptr(0)) 57021 return TCL_OK 57022 } 57023 57024 type error_t = int32 57025 57026 type TestSyscallGlobal = struct { 57027 FbPersist int32 57028 FnCount int32 57029 FnFail int32 57030 Fpgsz int32 57031 Forig_getpagesize sqlite3_syscall_ptr 57032 } 57033 57034 var gSyscall = TestSyscallGlobal{} 57035 57036 type TestSyscallArray = struct { 57037 FzName uintptr 57038 FxTest sqlite3_syscall_ptr 57039 FxOrig sqlite3_syscall_ptr 57040 Fdefault_errno int32 57041 Fcustom_errno int32 57042 } 57043 57044 var aSyscall = [19]TestSyscallArray{ 57045 {FzName: ts + 37033, FxTest: 0, Fdefault_errno: EACCES}, 57046 {FzName: ts + 9490, FxTest: 0}, 57047 {FzName: ts + 37038, FxTest: 0}, 57048 {FzName: ts + 37045, FxTest: 0}, 57049 {FzName: ts + 37052, FxTest: 0}, 57050 {FzName: ts + 37057, FxTest: 0}, 57051 {FzName: ts + 37063, FxTest: 0, Fdefault_errno: EIO}, 57052 {FzName: ts + 37073, FxTest: 0, Fdefault_errno: EACCES}, 57053 {FzName: ts + 25126, FxTest: 0}, 57054 {FzName: ts + 37079, FxTest: 0}, 57055 {FzName: ts + 37085, FxTest: 0}, 57056 {FzName: ts + 25131, FxTest: 0}, 57057 {FzName: ts + 37093, FxTest: 0}, 57058 {FzName: ts + 37100, FxTest: 0}, 57059 {FzName: ts + 37109, FxTest: 0}, 57060 {FzName: ts + 37116, FxTest: 0}, 57061 {FzName: ts + 29040, FxTest: 0}, 57062 {FzName: ts + 37126, FxTest: 0}, 57063 {}, 57064 } 57065 57066 func tsIsFail(tls *libc.TLS) int32 { 57067 gSyscall.FnCount-- 57068 if gSyscall.FnCount == 0 || gSyscall.FnFail != 0 && gSyscall.FbPersist != 0 { 57069 gSyscall.FnFail++ 57070 return 1 57071 } 57072 return 0 57073 } 57074 57075 func tsErrno(tls *libc.TLS, zFunc uintptr) int32 { 57076 var i int32 57077 var nFunc int32 = int32(libc.Xstrlen(tls, zFunc)) 57078 for i = 0; aSyscall[i].FzName != 0; i++ { 57079 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(nFunc) { 57080 continue 57081 } 57082 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(nFunc)) != 0 { 57083 continue 57084 } 57085 return aSyscall[i].Fcustom_errno 57086 } 57087 57088 return 0 57089 } 57090 57091 func tsIsFailErrno(tls *libc.TLS, zFunc uintptr) int32 { 57092 if tsIsFail(tls) != 0 { 57093 *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) = tsErrno(tls, zFunc) 57094 return 1 57095 } 57096 return 0 57097 } 57098 57099 func ts_open(tls *libc.TLS, zFile uintptr, flags int32, mode int32) int32 { 57100 if tsIsFailErrno(tls, ts+37033) != 0 { 57101 return -1 57102 } 57103 return (*(*func(*libc.TLS, uintptr, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16)))(tls, zFile, flags, mode) 57104 } 57105 57106 func ts_close(tls *libc.TLS, fd int32) int32 { 57107 if tsIsFail(tls) != 0 { 57108 (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 57109 return -1 57110 } 57111 return (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 57112 } 57113 57114 func ts_access(tls *libc.TLS, zPath uintptr, mode int32) int32 { 57115 if tsIsFail(tls) != 0 { 57116 return -1 57117 } 57118 return (*(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 2*32 + 16)))(tls, zPath, mode) 57119 } 57120 57121 func ts_getcwd(tls *libc.TLS, zPath uintptr, nPath size_t) uintptr { 57122 if tsIsFail(tls) != 0 { 57123 return uintptr(0) 57124 } 57125 return (*(*func(*libc.TLS, uintptr, size_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 3*32 + 16)))(tls, zPath, nPath) 57126 } 57127 57128 func ts_stat(tls *libc.TLS, zPath uintptr, p uintptr) int32 { 57129 if tsIsFail(tls) != 0 { 57130 return -1 57131 } 57132 return (*(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 4*32 + 16)))(tls, zPath, p) 57133 } 57134 57135 func ts_fstat(tls *libc.TLS, fd int32, p uintptr) int32 { 57136 if tsIsFailErrno(tls, ts+37057) != 0 { 57137 return -1 57138 } 57139 return (*(*func(*libc.TLS, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 5*32 + 16)))(tls, fd, p) 57140 } 57141 57142 func ts_ftruncate(tls *libc.TLS, fd int32, n off_t) int32 { 57143 if tsIsFailErrno(tls, ts+37063) != 0 { 57144 return -1 57145 } 57146 return (*(*func(*libc.TLS, int32, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 6*32 + 16)))(tls, fd, n) 57147 } 57148 57149 func ts_fcntl(tls *libc.TLS, fd int32, cmd int32, va uintptr) int32 { 57150 bp := tls.Alloc(8) 57151 defer tls.Free(8) 57152 57153 var ap va_list 57154 _ = ap 57155 var pArg uintptr 57156 if tsIsFailErrno(tls, ts+37073) != 0 { 57157 return -1 57158 } 57159 ap = va 57160 pArg = libc.VaUintptr(&ap) 57161 return (*(*func(*libc.TLS, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 7*32 + 16)))(tls, fd, cmd, libc.VaList(bp, pArg)) 57162 } 57163 57164 func ts_read(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 57165 if tsIsFailErrno(tls, ts+25126) != 0 { 57166 return -1 57167 } 57168 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8*32 + 16)))(tls, fd, aBuf, nBuf)) 57169 } 57170 57171 func ts_pread(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 57172 if tsIsFailErrno(tls, ts+37079) != 0 { 57173 return -1 57174 } 57175 return int32((*(*func(*libc.TLS, int32, uintptr, size_t, off_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 9*32 + 16)))(tls, fd, aBuf, nBuf, off)) 57176 } 57177 57178 func ts_pread64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 57179 if tsIsFailErrno(tls, ts+37085) != 0 { 57180 return -1 57181 } 57182 return int32((*(*func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 10*32 + 16)))(tls, fd, aBuf, nBuf, off)) 57183 } 57184 57185 func ts_write(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 57186 if tsIsFailErrno(tls, ts+25131) != 0 { 57187 if tsErrno(tls, ts+25131) == EINTR { 57188 (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf/uint64(2)) 57189 } 57190 return -1 57191 } 57192 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf)) 57193 } 57194 57195 func ts_pwrite(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 57196 if tsIsFailErrno(tls, ts+37093) != 0 { 57197 return -1 57198 } 57199 return int32((*(*func(*libc.TLS, int32, uintptr, size_t, off_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 12*32 + 16)))(tls, fd, aBuf, nBuf, off)) 57200 } 57201 57202 func ts_pwrite64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 57203 if tsIsFailErrno(tls, ts+37100) != 0 { 57204 return -1 57205 } 57206 return int32((*(*func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 13*32 + 16)))(tls, fd, aBuf, nBuf, off)) 57207 } 57208 57209 func ts_fchmod(tls *libc.TLS, fd int32, mode mode_t) int32 { 57210 if tsIsFail(tls) != 0 { 57211 return -1 57212 } 57213 return (*(*func(*libc.TLS, int32, mode_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 14*32 + 16)))(tls, fd, mode) 57214 } 57215 57216 func ts_fallocate(tls *libc.TLS, fd int32, off off_t, len off_t) int32 { 57217 if tsIsFail(tls) != 0 { 57218 return tsErrno(tls, ts+37116) 57219 } 57220 return (*(*func(*libc.TLS, int32, off_t, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 15*32 + 16)))(tls, fd, off, len) 57221 } 57222 57223 func ts_mmap(tls *libc.TLS, pAddr uintptr, nByte size_t, prot int32, flags int32, fd int32, iOff off_t) uintptr { 57224 if tsIsFailErrno(tls, ts+29040) != 0 { 57225 return libc.UintptrFromInt32(-1) 57226 } 57227 return (*(*func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16*32 + 16)))(tls, pAddr, nByte, prot, flags, fd, iOff) 57228 } 57229 57230 func ts_mremap(tls *libc.TLS, a uintptr, b size_t, c size_t, d int32, va uintptr) uintptr { 57231 bp := tls.Alloc(8) 57232 defer tls.Free(8) 57233 57234 var ap va_list 57235 _ = ap 57236 var pArg uintptr 57237 if tsIsFailErrno(tls, ts+37126) != 0 { 57238 return libc.UintptrFromInt32(-1) 57239 } 57240 ap = va 57241 pArg = libc.VaUintptr(&ap) 57242 return (*(*func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 17*32 + 16)))(tls, a, b, c, d, libc.VaList(bp, pArg)) 57243 } 57244 57245 func test_syscall_install(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57246 bp := tls.Alloc(20) 57247 defer tls.Free(20) 57248 57249 var pVfs uintptr 57250 57251 var i int32 57252 57253 if objc != 3 { 57254 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37133) 57255 return TCL_ERROR 57256 } 57257 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp, bp+8) != 0 { 57258 return TCL_ERROR 57259 } 57260 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57261 57262 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 57263 var rc int32 = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57264 *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp+16) 57265 if rc != 0 { 57266 return rc 57267 } 57268 if aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig == uintptr(0) { 57269 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig = (*struct { 57270 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57271 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FzName) 57272 (*struct { 57273 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57274 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FzName, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxTest) 57275 } 57276 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fcustom_errno = aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fdefault_errno 57277 } 57278 57279 return TCL_OK 57280 } 57281 57282 func test_syscall_uninstall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57283 var pVfs uintptr 57284 var i int32 57285 57286 if objc != 2 { 57287 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57288 return TCL_ERROR 57289 } 57290 57291 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57292 for i = 0; aSyscall[i].FzName != 0; i++ { 57293 if aSyscall[i].FxOrig != 0 { 57294 (*struct { 57295 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57296 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[i].FzName, uintptr(0)) 57297 aSyscall[i].FxOrig = uintptr(0) 57298 } 57299 } 57300 return TCL_OK 57301 } 57302 57303 func test_syscall_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57304 bp := tls.Alloc(4) 57305 defer tls.Free(4) 57306 57307 var pVfs uintptr 57308 var i int32 57309 var rc int32 57310 57311 if objc != 2 && objc != 3 { 57312 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57313 return TCL_ERROR 57314 } 57315 57316 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57317 if objc == 2 { 57318 rc = (*struct { 57319 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57320 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, uintptr(0), uintptr(0)) 57321 for i = 0; aSyscall[i].FzName != 0; i++ { 57322 aSyscall[i].FxOrig = uintptr(0) 57323 } 57324 } else { 57325 var zFunc uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) 57326 rc = (*struct { 57327 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57328 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), uintptr(0)) 57329 for i = 0; rc == SQLITE_OK && aSyscall[i].FzName != 0; i++ { 57330 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(*(*int32)(unsafe.Pointer(bp))) { 57331 continue 57332 } 57333 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(*(*int32)(unsafe.Pointer(bp)))) != 0 { 57334 continue 57335 } 57336 aSyscall[i].FxOrig = uintptr(0) 57337 } 57338 } 57339 if rc != SQLITE_OK { 57340 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 57341 return TCL_ERROR 57342 } 57343 57344 tcl.XTcl_ResetResult(tls, interp) 57345 return TCL_OK 57346 } 57347 57348 func test_syscall_exists(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57349 var pVfs uintptr 57350 var x sqlite3_syscall_ptr 57351 57352 if objc != 3 { 57353 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57354 return TCL_ERROR 57355 } 57356 57357 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57358 x = (*struct { 57359 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57360 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 57361 57362 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(x != uintptr(0)) != 0))) 57363 return TCL_OK 57364 } 57365 57366 func test_syscall_fault(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57367 bp := tls.Alloc(8) 57368 defer tls.Free(8) 57369 57370 *(*int32)(unsafe.Pointer(bp)) = 0 57371 *(*int32)(unsafe.Pointer(bp + 4)) = 0 57372 57373 if objc != 2 && objc != 4 { 57374 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37158) 57375 return TCL_ERROR 57376 } 57377 57378 if objc == 4 { 57379 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 || 57380 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 57381 return TCL_ERROR 57382 } 57383 } 57384 57385 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, gSyscall.FnFail)) 57386 gSyscall.FnCount = *(*int32)(unsafe.Pointer(bp)) 57387 gSyscall.FbPersist = *(*int32)(unsafe.Pointer(bp + 4)) 57388 gSyscall.FnFail = 0 57389 return TCL_OK 57390 } 57391 57392 func test_syscall_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57393 bp := tls.Alloc(204) 57394 defer tls.Free(204) 57395 57396 var rc int32 57397 57398 *(*[12]Errno)(unsafe.Pointer(bp + 8)) = [12]Errno{ 57399 {Fz: ts + 37174, Fi: EACCES}, 57400 {Fz: ts + 37181, Fi: EINTR}, 57401 {Fz: ts + 37187, Fi: EIO}, 57402 {Fz: ts + 37191, Fi: EOVERFLOW}, 57403 {Fz: ts + 37201, Fi: ENOMEM}, 57404 {Fz: ts + 37208, Fi: EAGAIN}, 57405 {Fz: ts + 37215, Fi: ETIMEDOUT}, 57406 {Fz: ts + 37225, Fi: EBUSY}, 57407 {Fz: ts + 37231, Fi: EPERM}, 57408 {Fz: ts + 37237, Fi: EDEADLK}, 57409 {Fz: ts + 37245, Fi: ENOLCK}, 57410 {}, 57411 } 57412 57413 if objc != 4 { 57414 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37252) 57415 return TCL_ERROR 57416 } 57417 57418 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57419 *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp) 57420 if rc != TCL_OK { 57421 return rc 57422 } 57423 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57424 *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(Errno{})), ts+37266, 0, bp+200) 57425 if rc != TCL_OK { 57426 return rc 57427 } 57428 57429 aSyscall[*(*int32)(unsafe.Pointer(bp))].Fcustom_errno = (*Errno)(unsafe.Pointer(bp + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 200)))*16)).Fi 57430 return TCL_OK 57431 } 57432 57433 type Errno = struct { 57434 Fz uintptr 57435 Fi int32 57436 F__ccgo_pad1 [4]byte 57437 } 57438 57439 func test_syscall_list(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57440 var zSys uintptr 57441 var pVfs uintptr 57442 var pList uintptr 57443 57444 if objc != 2 { 57445 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57446 return TCL_ERROR 57447 } 57448 57449 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57450 pList = tcl.XTcl_NewObj(tls) 57451 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 57452 for zSys = (*struct { 57453 f func(*libc.TLS, uintptr, uintptr) uintptr 57454 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, uintptr(0)); zSys != uintptr(0); zSys = (*struct { 57455 f func(*libc.TLS, uintptr, uintptr) uintptr 57456 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, zSys) { 57457 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, zSys, -1)) 57458 } 57459 57460 tcl.XTcl_SetObjResult(tls, interp, pList) 57461 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57462 var _objPtr uintptr = pList 57463 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57464 tcl.XTclFreeObj(tls, _objPtr) 57465 } 57466 } 57467 return TCL_OK 57468 } 57469 57470 func test_syscall_defaultvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57471 var pVfs uintptr 57472 57473 if objc != 2 { 57474 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57475 return TCL_ERROR 57476 } 57477 57478 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57479 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 57480 return TCL_OK 57481 } 57482 57483 func ts_getpagesize(tls *libc.TLS) int32 { 57484 return gSyscall.Fpgsz 57485 } 57486 57487 func test_syscall_pagesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57488 bp := tls.Alloc(20) 57489 defer tls.Free(20) 57490 57491 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57492 57493 if objc != 3 { 57494 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37272) 57495 return TCL_ERROR 57496 } 57497 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 57498 return TCL_ERROR 57499 } 57500 57501 if *(*int32)(unsafe.Pointer(bp + 16)) < 0 { 57502 if gSyscall.Forig_getpagesize != 0 { 57503 (*struct { 57504 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57505 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, ts+37277, gSyscall.Forig_getpagesize) 57506 } 57507 } else { 57508 if *(*int32)(unsafe.Pointer(bp + 16)) < 512 || *(*int32)(unsafe.Pointer(bp + 16))&(*(*int32)(unsafe.Pointer(bp + 16))-1) != 0 { 57509 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37289, 0)) 57510 return TCL_ERROR 57511 } 57512 gSyscall.Forig_getpagesize = (*struct { 57513 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57514 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, ts+37277) 57515 gSyscall.Fpgsz = *(*int32)(unsafe.Pointer(bp + 16)) 57516 (*struct { 57517 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57518 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, 57519 pVfs, ts+37277, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{ts_getpagesize}))) 57520 } 57521 57522 return TCL_OK 57523 } 57524 57525 func test_syscall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57526 bp := tls.Alloc(180) 57527 defer tls.Free(180) 57528 57529 *(*[10]SyscallCmd)(unsafe.Pointer(bp + 16)) = [10]SyscallCmd{ 57530 {FzName: ts + 37307, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57531 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57532 }{test_syscall_fault}))}, 57533 {FzName: ts + 37313, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57534 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57535 }{test_syscall_install}))}, 57536 {FzName: ts + 37321, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57537 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57538 }{test_syscall_uninstall}))}, 57539 {FzName: ts + 7933, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57540 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57541 }{test_syscall_reset}))}, 57542 {FzName: ts + 37266, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57543 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57544 }{test_syscall_errno}))}, 57545 {FzName: ts + 13516, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57546 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57547 }{test_syscall_exists}))}, 57548 {FzName: ts + 37331, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57549 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57550 }{test_syscall_list}))}, 57551 {FzName: ts + 37336, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57552 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57553 }{test_syscall_defaultvfs}))}, 57554 {FzName: ts + 37347, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57555 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57556 }{test_syscall_pagesize}))}, 57557 {}, 57558 } 57559 57560 var rc int32 57561 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57562 57563 if objc < 2 { 57564 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 57565 return TCL_ERROR 57566 } 57567 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion < 3 || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall == uintptr(0) { 57568 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37356, 0)) 57569 rc = TCL_ERROR 57570 } else { 57571 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57572 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, int32(unsafe.Sizeof(SyscallCmd{})), ts+2014, 0, bp+176) 57573 } 57574 if rc != TCL_OK { 57575 return rc 57576 } 57577 return (*struct { 57578 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57579 })(unsafe.Pointer(&struct{ uintptr }{(*SyscallCmd)(unsafe.Pointer(bp + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*16)).FxCmd})).f(tls, clientData, interp, objc, objv) 57580 } 57581 57582 type SyscallCmd = struct { 57583 FzName uintptr 57584 FxCmd uintptr 57585 } 57586 57587 func SqlitetestSyscall_Init(tls *libc.TLS, interp uintptr) int32 { 57588 bp := tls.Alloc(16) 57589 defer tls.Free(16) 57590 57591 *(*[1]SyscallCmd)(unsafe.Pointer(bp)) = [1]SyscallCmd{ 57592 {FzName: ts + 37392, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57593 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57594 }{test_syscall}))}, 57595 } 57596 var i int32 57597 57598 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]SyscallCmd{}))/uint64(unsafe.Sizeof(SyscallCmd{})); i++ { 57599 tcl.XTcl_CreateObjCommand(tls, interp, (*SyscallCmd)(unsafe.Pointer(bp+uintptr(i)*16)).FzName, (*SyscallCmd)(unsafe.Pointer(bp+uintptr(i)*16)).FxCmd, uintptr(0), uintptr(0)) 57600 } 57601 return TCL_OK 57602 } 57603 57604 func sqlite3TestInit(tls *libc.TLS, interp uintptr) uintptr { 57605 bp := tls.Alloc(80) 57606 defer tls.Free(80) 57607 57608 { 57609 libc.Xgetrlimit(tls, RLIMIT_CORE, bp) 57610 (*rlimit)(unsafe.Pointer(bp)).Frlim_cur = (*rlimit)(unsafe.Pointer(bp)).Frlim_max 57611 libc.Xsetrlimit(tls, RLIMIT_CORE, bp) 57612 57613 } 57614 57615 if tcl.XTcl_GetCommandInfo(tls, interp, ts+14267, bp+16) == 0 { 57616 Sqlite3_Init(tls, interp) 57617 } 57618 Md5_Init(tls, interp) 57619 Sqliteconfig_Init(tls, interp) 57620 Sqlitetest1_Init(tls, interp) 57621 Sqlitetest2_Init(tls, interp) 57622 Sqlitetest3_Init(tls, interp) 57623 Sqlitetest4_Init(tls, interp) 57624 Sqlitetest5_Init(tls, interp) 57625 Sqlitetest6_Init(tls, interp) 57626 Sqlitetest7_Init(tls, interp) 57627 Sqlitetest8_Init(tls, interp) 57628 Sqlitetest9_Init(tls, interp) 57629 Sqlitetestasync_Init(tls, interp) 57630 Sqlitetest_autoext_Init(tls, interp) 57631 Sqlitetest_blob_Init(tls, interp) 57632 Sqlitetest_demovfs_Init(tls, interp) 57633 Sqlitetest_func_Init(tls, interp) 57634 Sqlitetest_hexio_Init(tls, interp) 57635 Sqlitetest_init_Init(tls, interp) 57636 Sqlitetest_malloc_Init(tls, interp) 57637 Sqlitetest_mutex_Init(tls, interp) 57638 Sqlitetestschema_Init(tls, interp) 57639 Sqlitetesttclvar_Init(tls, interp) 57640 Sqlitetestfs_Init(tls, interp) 57641 SqlitetestThread_Init(tls, interp) 57642 SqlitetestOnefile_Init(tls) 57643 SqlitetestOsinst_Init(tls, interp) 57644 Sqlitetestbackup_Init(tls, interp) 57645 Sqlitetestintarray_Init(tls, interp) 57646 Sqlitetestvfs_Init(tls, interp) 57647 Sqlitetestrtree_Init(tls, interp) 57648 Sqlitetestrtreedoc_Init(tls, interp) 57649 Sqlitequota_Init(tls, interp) 57650 Sqlitemultiplex_Init(tls, interp) 57651 SqliteSuperlock_Init(tls, interp) 57652 SqlitetestSyscall_Init(tls, interp) 57653 TestSession_Init(tls, interp) 57654 Fts5tcl_Init(tls, interp) 57655 SqliteRbu_Init(tls, interp) 57656 Sqlitetesttcl_Init(tls, interp) 57657 57658 TestExpert_Init(tls, interp) 57659 Sqlitetest_window_Init(tls, interp) 57660 Sqlitetestvdbecov_Init(tls, interp) 57661 57662 tcl.XTcl_CreateObjCommand(tls, 57663 interp, ts+37405, *(*uintptr)(unsafe.Pointer(&struct { 57664 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57665 }{load_testfixture_extensions})), uintptr(0), uintptr(0)) 57666 return uintptr(0) 57667 } 57668 57669 func load_testfixture_extensions(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57670 var slave uintptr 57671 if objc != 2 { 57672 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+37433) 57673 return TCL_ERROR 57674 } 57675 57676 slave = tcl.XTcl_GetSlave(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 57677 if !(slave != 0) { 57678 return TCL_ERROR 57679 } 57680 57681 sqlite3TestInit(tls, slave) 57682 return TCL_OK 57683 } 57684 57685 type tclvar_vtab1 = struct { 57686 Fbase sqlite3_vtab 57687 Finterp uintptr 57688 } 57689 57690 type tclvar_vtab = tclvar_vtab1 57691 type tclvar_cursor1 = struct { 57692 Fbase sqlite3_vtab_cursor 57693 FpList1 uintptr 57694 FpList2 uintptr 57695 Fi1 int32 57696 Fi2 int32 57697 } 57698 57699 type tclvar_cursor = tclvar_cursor1 57700 57701 func tclvarConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 57702 var pVtab uintptr 57703 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_vtab{}))) 57704 if pVtab == uintptr(0) { 57705 return SQLITE_NOMEM 57706 } 57707 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 57708 (*tclvar_vtab)(unsafe.Pointer(pVtab)).Finterp = pAux 57709 sqlite3.Xsqlite3_declare_vtab(tls, db, uintptr(unsafe.Pointer(&zSchema))) 57710 return SQLITE_OK 57711 } 57712 57713 var zSchema = *(*[100]uint8)(unsafe.Pointer(ts + 37439)) 57714 57715 func tclvarDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 57716 sqlite3.Xsqlite3_free(tls, pVtab) 57717 return SQLITE_OK 57718 } 57719 57720 func tclvarOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 57721 var pCur uintptr 57722 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_cursor{}))) 57723 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 57724 return SQLITE_OK 57725 } 57726 57727 func tclvarClose(tls *libc.TLS, cur uintptr) int32 { 57728 var pCur uintptr = cur 57729 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 57730 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57731 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 57732 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57733 tcl.XTclFreeObj(tls, _objPtr) 57734 } 57735 } 57736 } 57737 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57738 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57739 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57740 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57741 tcl.XTclFreeObj(tls, _objPtr) 57742 } 57743 } 57744 } 57745 sqlite3.Xsqlite3_free(tls, pCur) 57746 return SQLITE_OK 57747 } 57748 57749 func next2(tls *libc.TLS, interp uintptr, pCur uintptr, pObj uintptr) int32 { 57750 bp := tls.Alloc(4) 57751 defer tls.Free(4) 57752 57753 var p uintptr 57754 57755 if pObj != 0 { 57756 if !(int32((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) != 0) { 57757 p = tcl.XTcl_NewStringObj(tls, ts+37539, -1) 57758 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 57759 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, pObj) 57760 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 57761 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57762 var _objPtr uintptr = p 57763 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57764 tcl.XTclFreeObj(tls, _objPtr) 57765 } 57766 } 57767 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = tcl.XTcl_GetObjResult(tls, interp) 57768 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount++ 57769 57770 } else { 57771 *(*int32)(unsafe.Pointer(bp)) = 0 57772 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2++ 57773 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, bp) 57774 if (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 >= *(*int32)(unsafe.Pointer(bp)) { 57775 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57776 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57777 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57778 tcl.XTclFreeObj(tls, _objPtr) 57779 } 57780 } 57781 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 57782 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 57783 return 0 57784 } 57785 } 57786 } 57787 57788 return 1 57789 } 57790 57791 func tclvarNext(tls *libc.TLS, cur uintptr) int32 { 57792 bp := tls.Alloc(16) 57793 defer tls.Free(16) 57794 57795 *(*int32)(unsafe.Pointer(bp)) = 0 57796 var ok int32 = 0 57797 57798 var pCur uintptr = cur 57799 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 57800 57801 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, bp) 57802 for !(ok != 0) && (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 < *(*int32)(unsafe.Pointer(bp)) { 57803 tcl.XTcl_ListObjIndex(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+8) 57804 ok = next2(tls, interp, pCur, *(*uintptr)(unsafe.Pointer(bp + 8))) 57805 if !(ok != 0) { 57806 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1++ 57807 } 57808 } 57809 57810 return 0 57811 } 57812 57813 func tclvarFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 57814 var pCur uintptr = pVtabCursor 57815 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).Finterp 57816 var p uintptr = tcl.XTcl_NewStringObj(tls, ts+37551, -1) 57817 57818 var zEq uintptr = ts + 584 57819 var zMatch uintptr = ts + 584 57820 var zGlob uintptr = ts + 584 57821 var zRegexp uintptr = ts + 584 57822 var zLike uintptr = ts + 584 57823 var i int32 57824 57825 for i = 0; *(*uint8)(unsafe.Pointer(idxStr + uintptr(i))) != 0; i++ { 57826 switch int32(*(*uint8)(unsafe.Pointer(idxStr + uintptr(i)))) { 57827 case 'e': 57828 zEq = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57829 break 57830 case 'm': 57831 zMatch = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57832 break 57833 case 'g': 57834 zGlob = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57835 break 57836 case 'r': 57837 zRegexp = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57838 break 57839 case 'l': 57840 zLike = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 57841 break 57842 default: 57843 } 57844 } 57845 57846 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 57847 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zEq, -1)) 57848 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zMatch, -1)) 57849 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zGlob, -1)) 57850 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zRegexp, -1)) 57851 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zLike, -1)) 57852 57853 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 57854 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 57855 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57856 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 57857 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57858 tcl.XTclFreeObj(tls, _objPtr) 57859 } 57860 } 57861 } 57862 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57863 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57864 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 57865 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57866 tcl.XTclFreeObj(tls, _objPtr) 57867 } 57868 } 57869 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 57870 } 57871 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 = 0 57872 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 57873 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 = tcl.XTcl_GetObjResult(tls, interp) 57874 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount++ 57875 57876 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 57877 var _objPtr uintptr = p 57878 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57879 tcl.XTclFreeObj(tls, _objPtr) 57880 } 57881 } 57882 return tclvarNext(tls, pVtabCursor) 57883 } 57884 57885 func tclvarColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 57886 bp := tls.Alloc(32) 57887 defer tls.Free(32) 57888 57889 var z1 uintptr 57890 var z2 uintptr = ts + 584 57891 var pCur uintptr = cur 57892 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 57893 57894 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+16) 57895 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2, bp+24) 57896 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 57897 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 57898 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 57899 } 57900 switch i { 57901 case 0: 57902 { 57903 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 57904 break 57905 57906 } 57907 case 1: 57908 { 57909 sqlite3.Xsqlite3_result_text(tls, ctx, z2, -1, libc.UintptrFromInt32(-1)) 57910 break 57911 57912 } 57913 case 2: 57914 { 57915 var pVal uintptr = tcl.XTcl_GetVar2Ex(tls, interp, z1, func() uintptr { 57916 if *(*uint8)(unsafe.Pointer(z2)) != 0 { 57917 return z2 57918 } 57919 return uintptr(0) 57920 }(), TCL_GLOBAL_ONLY) 57921 sqlite3.Xsqlite3_result_text(tls, ctx, tcl.XTcl_GetString(tls, pVal), -1, libc.UintptrFromInt32(-1)) 57922 break 57923 57924 } 57925 case 3: 57926 { 57927 var z3 uintptr 57928 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 57929 z3 = sqlite3.Xsqlite3_mprintf(tls, ts+37569, libc.VaList(bp, z1, z2)) 57930 sqlite3.Xsqlite3_result_text(tls, ctx, z3, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 57931 } else { 57932 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 57933 } 57934 break 57935 57936 } 57937 } 57938 return SQLITE_OK 57939 } 57940 57941 func tclvarRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 57942 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 57943 return SQLITE_OK 57944 } 57945 57946 func tclvarEof(tls *libc.TLS, cur uintptr) int32 { 57947 var pCur uintptr = cur 57948 return func() int32 { 57949 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 57950 return 0 57951 } 57952 return 1 57953 }() 57954 } 57955 57956 func tclvarAddToIdxstr(tls *libc.TLS, zStr uintptr, x uint8) int32 { 57957 var i int32 57958 for i = 0; *(*uint8)(unsafe.Pointer(zStr + uintptr(i))) != 0; i++ { 57959 if int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))) == int32(x) { 57960 return 1 57961 } 57962 } 57963 *(*uint8)(unsafe.Pointer(zStr + uintptr(i))) = x 57964 *(*uint8)(unsafe.Pointer(zStr + uintptr(i+1))) = uint8(0) 57965 return 0 57966 } 57967 57968 func tclvarSetOmit(tls *libc.TLS, interp uintptr) int32 { 57969 bp := tls.Alloc(4) 57970 defer tls.Free(4) 57971 57972 var rc int32 57973 *(*int32)(unsafe.Pointer(bp)) = 0 57974 var pRes uintptr 57975 rc = tcl.XTcl_Eval(tls, interp, 57976 ts+37576) 57977 if rc == TCL_OK { 57978 pRes = tcl.XTcl_GetObjResult(tls, interp) 57979 rc = tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), pRes, bp) 57980 } 57981 return libc.Bool32(rc == TCL_OK && *(*int32)(unsafe.Pointer(bp)) != 0) 57982 } 57983 57984 func tclvarBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 57985 var pTab uintptr = tab 57986 var ii int32 57987 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, 32) 57988 var iStr int32 = 0 57989 57990 if zStr == uintptr(0) { 57991 return SQLITE_NOMEM 57992 } 57993 *(*uint8)(unsafe.Pointer(zStr)) = uint8(0) 57994 57995 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 57996 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 57997 var pUsage uintptr 57998 57999 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 58000 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 { 58001 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 58002 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('e')) { 58003 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58004 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 58005 } 58006 } 58007 58008 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 58009 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('m')) { 58010 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58011 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 58012 } 58013 } 58014 58015 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_GLOB && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 58016 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('g')) { 58017 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58018 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 58019 } 58020 } 58021 58022 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_REGEXP && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 58023 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('r')) { 58024 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58025 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 58026 } 58027 } 58028 58029 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 58030 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('l')) { 58031 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58032 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 58033 } 58034 } 58035 } 58036 } 58037 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = zStr 58038 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 58039 58040 return SQLITE_OK 58041 } 58042 58043 func tclvarUpdate(tls *libc.TLS, tab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 58044 var pTab uintptr = tab 58045 if argc == 1 { 58046 var zVar uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 58047 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zVar, uintptr(0), TCL_GLOBAL_ONLY) 58048 return SQLITE_OK 58049 } 58050 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 58051 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 58052 var zName uintptr 58053 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) != SQLITE_TEXT { 58054 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37637, 0) 58055 return SQLITE_ERROR 58056 } 58057 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 58058 if zValue != 0 { 58059 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 58060 } else { 58061 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), TCL_GLOBAL_ONLY) 58062 } 58063 return SQLITE_OK 58064 } 58065 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_TEXT && 58066 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_TEXT { 58067 var zOldName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 58068 var zNewName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 58069 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 58070 58071 if libc.Xstrcmp(tls, zOldName, zNewName) != 0 || zValue == uintptr(0) { 58072 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zOldName, uintptr(0), TCL_GLOBAL_ONLY) 58073 } 58074 if zValue != uintptr(0) { 58075 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zNewName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 58076 } 58077 return SQLITE_OK 58078 } 58079 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37672, 0) 58080 return SQLITE_ERROR 58081 } 58082 58083 var tclvarModule = sqlite3_module{ 58084 FxCreate: 0, 58085 FxConnect: 0, 58086 FxBestIndex: 0, 58087 FxDisconnect: 0, 58088 FxDestroy: 0, 58089 FxOpen: 0, 58090 FxClose: 0, 58091 FxFilter: 0, 58092 FxNext: 0, 58093 FxEof: 0, 58094 FxColumn: 0, 58095 FxRowid: 0, 58096 FxUpdate: 0, 58097 } 58098 58099 func register_tclvar_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58100 bp := tls.Alloc(8) 58101 defer tls.Free(8) 58102 58103 var rc int32 = TCL_OK 58104 58105 if objc != 2 { 58106 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 58107 return TCL_ERROR 58108 } 58109 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 58110 return TCL_ERROR 58111 } 58112 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+29859, uintptr(unsafe.Pointer(&tclvarModule)), interp) 58113 rc = tcl.XTcl_Eval(tls, interp, 58114 ts+37703) 58115 return rc 58116 } 58117 58118 func Sqlitetesttclvar_Init(tls *libc.TLS, interp uintptr) int32 { 58119 var i int32 58120 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd13))/uint64(unsafe.Sizeof(struct { 58121 FzName uintptr 58122 FxProc uintptr 58123 FclientData uintptr 58124 }{})); i++ { 58125 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd13[i].FzName, 58126 aObjCmd13[i].FxProc, aObjCmd13[i].FclientData, uintptr(0)) 58127 } 58128 return TCL_OK 58129 } 58130 58131 var aObjCmd13 = [1]struct { 58132 FzName uintptr 58133 FxProc uintptr 58134 FclientData uintptr 58135 }{ 58136 {FzName: ts + 38239, FxProc: 0}, 58137 } 58138 58139 type SqlThread1 = struct { 58140 Fparent Tcl_ThreadId 58141 Finterp uintptr 58142 FzScript uintptr 58143 FzVarname uintptr 58144 } 58145 58146 type SqlThread = SqlThread1 58147 58148 type EvalEvent1 = struct { 58149 Fbase Tcl_Event 58150 FzScript uintptr 58151 Finterp uintptr 58152 } 58153 58154 type EvalEvent = EvalEvent1 58155 58156 func tclScriptEvent(tls *libc.TLS, evPtr uintptr, flags int32) int32 { 58157 var rc int32 58158 var p uintptr = evPtr 58159 rc = tcl.XTcl_Eval(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp, (*EvalEvent)(unsafe.Pointer(p)).FzScript) 58160 if rc != TCL_OK { 58161 tcl.XTcl_BackgroundError(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp) 58162 } 58163 _ = flags 58164 return 1 58165 } 58166 58167 func postToParent(tls *libc.TLS, p uintptr, pScript uintptr) { 58168 bp := tls.Alloc(4) 58169 defer tls.Free(4) 58170 58171 var pEvent uintptr 58172 var zMsg uintptr 58173 58174 zMsg = tcl.XTcl_GetStringFromObj(tls, pScript, bp) 58175 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp)))+uint64(1))) 58176 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 58177 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 58178 f func(*libc.TLS, uintptr, int32) int32 58179 }{tclScriptEvent})) 58180 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 58181 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp))+1)) 58182 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 58183 58184 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 58185 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 58186 } 58187 58188 func tclScriptThread(tls *libc.TLS, pSqlThread ClientData) { 58189 var interp uintptr 58190 var pRes uintptr 58191 var pList uintptr 58192 var rc int32 58193 var p uintptr = pSqlThread 58194 58195 interp = tcl.XTcl_CreateInterp(tls) 58196 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 58197 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58198 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 58199 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 58200 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58201 }{sqlthread_proc})), pSqlThread, uintptr(0)) 58202 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 58203 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58204 }{blocking_step_proc})), uintptr(0), uintptr(0)) 58205 tcl.XTcl_CreateObjCommand(tls, interp, 58206 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 58207 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58208 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 58209 tcl.XTcl_CreateObjCommand(tls, interp, 58210 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 58211 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58212 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 58213 Sqlitetest1_Init(tls, interp) 58214 Sqlitetest_mutex_Init(tls, interp) 58215 Sqlite3_Init(tls, interp) 58216 58217 rc = tcl.XTcl_Eval(tls, interp, (*SqlThread)(unsafe.Pointer(p)).FzScript) 58218 pRes = tcl.XTcl_GetObjResult(tls, interp) 58219 pList = tcl.XTcl_NewObj(tls) 58220 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 58221 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 58222 58223 if rc != TCL_OK { 58224 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+9674, -1)) 58225 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 58226 postToParent(tls, p, pList) 58227 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58228 var _objPtr uintptr = pList 58229 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58230 tcl.XTclFreeObj(tls, _objPtr) 58231 } 58232 } 58233 pList = tcl.XTcl_NewObj(tls) 58234 } 58235 58236 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+38367, -1)) 58237 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, (*SqlThread)(unsafe.Pointer(p)).FzVarname, -1)) 58238 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 58239 postToParent(tls, p, pList) 58240 58241 tcl.XTcl_Free(tls, p) 58242 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 58243 var _objPtr uintptr = pList 58244 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58245 tcl.XTclFreeObj(tls, _objPtr) 58246 } 58247 } 58248 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 58249 var _objPtr uintptr = pRes 58250 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58251 tcl.XTclFreeObj(tls, _objPtr) 58252 } 58253 } 58254 tcl.XTcl_DeleteInterp(tls, interp) 58255 for tcl.XTcl_DoOneEvent(tls, libc.CplInt32(int32(1)<<1)|int32(1)<<1) != 0 { 58256 } 58257 tcl.XTcl_ExitThread(tls, 0) 58258 58259 } 58260 58261 func sqlthread_spawn(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58262 bp := tls.Alloc(32) 58263 defer tls.Free(32) 58264 58265 var pNew uintptr 58266 var rc int32 58267 58268 var zVarname uintptr 58269 58270 var zScript uintptr 58271 58272 var nStack int32 = 0 58273 var flags int32 = 0000 58274 58275 _ = clientData 58276 _ = objc 58277 58278 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 58279 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+20) 58280 58281 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlThread{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(*(*int32)(unsafe.Pointer(bp + 20)))+uint64(2))) 58282 (*SqlThread)(unsafe.Pointer(pNew)).FzVarname = pNew + 1*32 58283 (*SqlThread)(unsafe.Pointer(pNew)).FzScript = (*SqlThread)(unsafe.Pointer(pNew)).FzVarname + uintptr(*(*int32)(unsafe.Pointer(bp + 16))+1) 58284 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzVarname, zVarname, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 58285 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 20))+1)) 58286 (*SqlThread)(unsafe.Pointer(pNew)).Fparent = tcl.XTcl_GetCurrentThread(tls) 58287 (*SqlThread)(unsafe.Pointer(pNew)).Finterp = interp 58288 58289 rc = tcl.XTcl_CreateThread(tls, bp+24, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{tclScriptThread})), pNew, nStack, flags) 58290 if rc != TCL_OK { 58291 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38371, 0)) 58292 tcl.XTcl_Free(tls, pNew) 58293 return TCL_ERROR 58294 } 58295 58296 return TCL_OK 58297 } 58298 58299 func sqlthread_parent(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58300 bp := tls.Alloc(20) 58301 defer tls.Free(20) 58302 58303 var pEvent uintptr 58304 var zMsg uintptr 58305 58306 var p uintptr = clientData 58307 58308 _ = objc 58309 58310 if p == uintptr(0) { 58311 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38399, 0)) 58312 return TCL_ERROR 58313 } 58314 58315 zMsg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 58316 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(1))) 58317 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 58318 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 58319 f func(*libc.TLS, uintptr, int32) int32 58320 }{tclScriptEvent})) 58321 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 58322 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 58323 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 58324 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 58325 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 58326 58327 return TCL_OK 58328 } 58329 58330 func xBusy(tls *libc.TLS, pArg uintptr, nBusy int32) int32 { 58331 _ = pArg 58332 _ = nBusy 58333 sqlite3.Xsqlite3_sleep(tls, 50) 58334 return 1 58335 } 58336 58337 func sqlthread_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58338 bp := tls.Alloc(124) 58339 defer tls.Free(124) 58340 58341 var zFilename uintptr 58342 58343 _ = clientData 58344 _ = objc 58345 58346 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58347 sqlite3.Xsqlite3_open(tls, zFilename, bp+16) 58348 Md5_Register(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), uintptr(0), uintptr(0)) 58349 sqlite3.Xsqlite3_busy_handler(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(&struct { 58350 f func(*libc.TLS, uintptr, int32) int32 58351 }{xBusy})), uintptr(0)) 58352 58353 if sqlite3TestMakePointerStr(tls, interp, bp+24, *(*uintptr)(unsafe.Pointer(bp + 16))) != 0 { 58354 return TCL_ERROR 58355 } 58356 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+24, 0)) 58357 58358 return TCL_OK 58359 } 58360 58361 func sqlthread_id(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58362 var id Tcl_ThreadId = tcl.XTcl_GetCurrentThread(tls) 58363 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(id))) 58364 _ = clientData 58365 _ = objc 58366 _ = objv 58367 return TCL_OK 58368 } 58369 58370 func sqlthread_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58371 bp := tls.Alloc(164) 58372 defer tls.Free(164) 58373 58374 *(*[5]struct { 58375 FzName uintptr 58376 FxProc uintptr 58377 FnArg int32 58378 F__ccgo_pad1 [4]byte 58379 FzUsage uintptr 58380 })(unsafe.Pointer(bp)) = [5]struct { 58381 FzName uintptr 58382 FxProc uintptr 58383 FnArg int32 58384 F__ccgo_pad1 [4]byte 58385 FzUsage uintptr 58386 }{ 58387 {FzName: ts + 38416, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58388 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58389 }{sqlthread_parent})), FnArg: 1, FzUsage: ts + 10187}, 58390 {FzName: ts + 38423, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58391 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58392 }{sqlthread_spawn})), FnArg: 2, FzUsage: ts + 38429}, 58393 {FzName: ts + 37033, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58394 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58395 }{sqlthread_open})), FnArg: 1, FzUsage: ts + 38444}, 58396 {FzName: ts + 38451, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58397 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58398 }{sqlthread_id})), FzUsage: ts + 584}, 58399 {}, 58400 } 58401 var pSub uintptr 58402 var rc int32 58403 58404 if objc < 2 { 58405 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 58406 return TCL_ERROR 58407 } 58408 58409 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 58410 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(struct { 58411 FzName uintptr 58412 FxProc uintptr 58413 FnArg int32 58414 F__ccgo_pad1 [4]byte 58415 FzUsage uintptr 58416 }{})), ts+2014, 0, bp+160) 58417 if rc != TCL_OK { 58418 return rc 58419 } 58420 pSub = bp + uintptr(*(*int32)(unsafe.Pointer(bp + 160)))*32 58421 58422 if objc < (*struct { 58423 FzName uintptr 58424 FxProc uintptr 58425 FnArg int32 58426 F__ccgo_pad1 [4]byte 58427 FzUsage uintptr 58428 })(unsafe.Pointer(pSub)).FnArg+2 { 58429 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*struct { 58430 FzName uintptr 58431 FxProc uintptr 58432 FnArg int32 58433 F__ccgo_pad1 [4]byte 58434 FzUsage uintptr 58435 })(unsafe.Pointer(pSub)).FzUsage) 58436 return TCL_ERROR 58437 } 58438 58439 return (*struct { 58440 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58441 })(unsafe.Pointer(&struct{ uintptr }{(*struct { 58442 FzName uintptr 58443 FxProc uintptr 58444 FnArg int32 58445 F__ccgo_pad1 [4]byte 58446 FzUsage uintptr 58447 })(unsafe.Pointer(pSub)).FxProc})).f(tls, clientData, interp, objc, objv) 58448 } 58449 58450 func clock_seconds_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58451 bp := tls.Alloc(16) 58452 defer tls.Free(16) 58453 58454 tcl.XTcl_GetTime(tls, bp) 58455 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32((*Tcl_Time)(unsafe.Pointer(bp)).Fsec))) 58456 _ = clientData 58457 _ = objc 58458 _ = objv 58459 return TCL_OK 58460 } 58461 58462 type UnlockNotification1 = struct { 58463 Ffired int32 58464 F__ccgo_pad1 [4]byte 58465 Fcond pthread_cond_t 58466 Fmutex pthread_mutex_t 58467 } 58468 58469 type UnlockNotification = UnlockNotification1 58470 58471 func unlock_notify_cb(tls *libc.TLS, apArg uintptr, nArg int32) { 58472 var i int32 58473 for i = 0; i < nArg; i++ { 58474 var p uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 58475 libc.Xpthread_mutex_lock(tls, p+56) 58476 (*UnlockNotification)(unsafe.Pointer(p)).Ffired = 1 58477 libc.Xpthread_cond_signal(tls, p+8) 58478 libc.Xpthread_mutex_unlock(tls, p+56) 58479 } 58480 } 58481 58482 func wait_for_unlock_notify(tls *libc.TLS, db uintptr) int32 { 58483 bp := tls.Alloc(104) 58484 defer tls.Free(104) 58485 58486 var rc int32 58487 58488 (*UnlockNotification)(unsafe.Pointer(bp)).Ffired = 0 58489 libc.Xpthread_mutex_init(tls, bp+56, uintptr(0)) 58490 libc.Xpthread_cond_init(tls, bp+8, uintptr(0)) 58491 58492 rc = sqlite3.Xsqlite3_unlock_notify(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 58493 f func(*libc.TLS, uintptr, int32) 58494 }{unlock_notify_cb})), bp) 58495 58496 if rc == SQLITE_OK { 58497 libc.Xpthread_mutex_lock(tls, bp+56) 58498 if !((*UnlockNotification)(unsafe.Pointer(bp)).Ffired != 0) { 58499 libc.Xpthread_cond_wait(tls, bp+8, bp+56) 58500 } 58501 libc.Xpthread_mutex_unlock(tls, bp+56) 58502 } 58503 58504 libc.Xpthread_cond_destroy(tls, bp+8) 58505 libc.Xpthread_mutex_destroy(tls, bp+56) 58506 58507 return rc 58508 } 58509 58510 func sqlite3_blocking_step(tls *libc.TLS, pStmt uintptr) int32 { 58511 var rc int32 58512 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt)) { 58513 rc = wait_for_unlock_notify(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt)) 58514 if rc != SQLITE_OK { 58515 break 58516 } 58517 sqlite3.Xsqlite3_reset(tls, pStmt) 58518 } 58519 return rc 58520 } 58521 58522 func sqlite3_blocking_prepare_v2(tls *libc.TLS, db uintptr, zSql uintptr, nSql int32, ppStmt uintptr, pz uintptr) int32 { 58523 var rc int32 58524 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, nSql, ppStmt, pz)) { 58525 rc = wait_for_unlock_notify(tls, db) 58526 if rc != SQLITE_OK { 58527 break 58528 } 58529 } 58530 return rc 58531 } 58532 58533 func blocking_step_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58534 var pStmt uintptr 58535 var rc int32 58536 58537 if objc != 2 { 58538 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 58539 return TCL_ERROR 58540 } 58541 58542 pStmt = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58543 rc = sqlite3_blocking_step(tls, pStmt) 58544 58545 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 58546 return TCL_OK 58547 } 58548 58549 func blocking_prepare_v2_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58550 bp := tls.Alloc(162) 58551 defer tls.Free(162) 58552 58553 var zSql uintptr 58554 58555 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 58556 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 58557 58558 var rc int32 58559 var isBlocking int32 = libc.BoolInt32(!(clientData == uintptr(0))) 58560 58561 if objc != 5 && objc != 4 { 58562 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 58563 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 58564 return TCL_ERROR 58565 } 58566 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 58567 return TCL_ERROR 58568 } 58569 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58570 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 58571 return TCL_ERROR 58572 } 58573 58574 if isBlocking != 0 { 58575 rc = sqlite3_blocking_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 58576 } else { 58577 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 58578 } 58579 58580 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 58581 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 58582 *(*int32)(unsafe.Pointer(bp + 88)) = int32(int64(*(*int32)(unsafe.Pointer(bp + 88))) - (int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 58583 } 58584 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 104)), *(*int32)(unsafe.Pointer(bp + 88))), 0) 58585 } 58586 if rc != SQLITE_OK { 58587 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+112, ts+38454, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc))) 58588 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 58589 return TCL_ERROR 58590 } 58591 58592 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 58593 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 58594 return TCL_ERROR 58595 } 58596 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 58597 } 58598 return TCL_OK 58599 } 58600 58601 func SqlitetestThread_Init(tls *libc.TLS, interp uintptr) int32 { 58602 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 58603 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58604 }{sqlthread_proc})), uintptr(0), uintptr(0)) 58605 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 58606 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58607 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 58608 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 58609 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58610 }{blocking_step_proc})), uintptr(0), uintptr(0)) 58611 tcl.XTcl_CreateObjCommand(tls, interp, 58612 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 58613 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58614 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 58615 tcl.XTcl_CreateObjCommand(tls, interp, 58616 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 58617 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58618 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 58619 return TCL_OK 58620 } 58621 58622 func Sqlitetestvdbecov_Init(tls *libc.TLS, interp uintptr) int32 { 58623 return TCL_OK 58624 } 58625 58626 type Testvfs1 = struct { 58627 FzName uintptr 58628 FpParent uintptr 58629 FpVfs uintptr 58630 Finterp uintptr 58631 FpScript uintptr 58632 FpBuffer uintptr 58633 FisNoshm int32 58634 FisFullshm int32 58635 Fmask int32 58636 Fioerr_err TestFaultInject 58637 Ffull_err TestFaultInject 58638 Fcantopen_err TestFaultInject 58639 FiDevchar int32 58640 FiSectorsize int32 58641 } 58642 58643 type Testvfs = Testvfs1 58644 type TestvfsBuffer1 = struct { 58645 FzFile uintptr 58646 Fpgsz int32 58647 F__ccgo_pad1 [4]byte 58648 FaPage [1024]uintptr 58649 FpFile uintptr 58650 FpNext uintptr 58651 } 58652 58653 type TestvfsBuffer = TestvfsBuffer1 58654 type TestvfsFile1 = struct { 58655 Fbase sqlite3_file 58656 FpFd uintptr 58657 } 58658 58659 type TestvfsFile = TestvfsFile1 58660 type TestvfsFd1 = struct { 58661 FpVfs uintptr 58662 FzFilename uintptr 58663 FpReal uintptr 58664 FpShmId uintptr 58665 FpShm uintptr 58666 Fexcllock u32 58667 Fsharedlock u32 58668 FpNext uintptr 58669 } 58670 58671 type TestvfsFd = TestvfsFd1 58672 58673 type TestFaultInject1 = struct { 58674 FiCnt int32 58675 FeFault int32 58676 FnFail int32 58677 } 58678 58679 type TestFaultInject = TestFaultInject1 58680 58681 var tvfs_io_methods = sqlite3_io_methods{ 58682 FiVersion: 3, 58683 FxClose: 0, 58684 FxRead: 0, 58685 FxWrite: 0, 58686 FxTruncate: 0, 58687 FxSync: 0, 58688 FxFileSize: 0, 58689 FxLock: 0, 58690 FxUnlock: 0, 58691 FxCheckReservedLock: 0, 58692 FxFileControl: 0, 58693 FxSectorSize: 0, 58694 FxDeviceCharacteristics: 0, 58695 FxShmMap: 0, 58696 FxShmLock: 0, 58697 FxShmBarrier: 0, 58698 FxShmUnmap: 0, 58699 FxFetch: 0, 58700 FxUnfetch: 0, 58701 } 58702 58703 func tvfsResultCode(tls *libc.TLS, p uintptr, pRc uintptr) int32 { 58704 bp := tls.Alloc(144) 58705 defer tls.Free(144) 58706 58707 *(*[9]errcode)(unsafe.Pointer(bp)) = [9]errcode{ 58708 {FzCode: ts + 2127}, 58709 {FeCode: SQLITE_ERROR, FzCode: ts + 2114}, 58710 {FeCode: SQLITE_IOERR, FzCode: ts + 38458}, 58711 {FeCode: SQLITE_LOCKED, FzCode: ts + 38471}, 58712 {FeCode: SQLITE_BUSY, FzCode: ts + 38485}, 58713 {FeCode: SQLITE_READONLY, FzCode: ts + 38497}, 58714 {FeCode: SQLITE_READONLY | int32(5)<<8, FzCode: ts + 38513}, 58715 {FeCode: SQLITE_NOTFOUND, FzCode: ts + 38538}, 58716 {FeCode: -1, FzCode: ts + 38554}, 58717 } 58718 var z uintptr 58719 var i int32 58720 58721 z = tcl.XTcl_GetStringResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58722 for i = 0; i < int32(uint64(unsafe.Sizeof([9]errcode{}))/uint64(unsafe.Sizeof(errcode{}))); i++ { 58723 if 0 == libc.Xstrcmp(tls, z, (*errcode)(unsafe.Pointer(bp+uintptr(i)*16)).FzCode) { 58724 *(*int32)(unsafe.Pointer(pRc)) = (*errcode)(unsafe.Pointer(bp + uintptr(i)*16)).FeCode 58725 return 1 58726 } 58727 } 58728 58729 return 0 58730 } 58731 58732 type errcode = struct { 58733 FeCode int32 58734 F__ccgo_pad1 [4]byte 58735 FzCode uintptr 58736 } 58737 58738 func tvfsInjectFault(tls *libc.TLS, p uintptr) int32 { 58739 var ret int32 = 0 58740 if (*TestFaultInject)(unsafe.Pointer(p)).FeFault != 0 { 58741 (*TestFaultInject)(unsafe.Pointer(p)).FiCnt-- 58742 if (*TestFaultInject)(unsafe.Pointer(p)).FiCnt == 0 || (*TestFaultInject)(unsafe.Pointer(p)).FiCnt < 0 && (*TestFaultInject)(unsafe.Pointer(p)).FeFault == FAULT_INJECT_PERSISTENT { 58743 ret = 1 58744 (*TestFaultInject)(unsafe.Pointer(p)).FnFail++ 58745 } 58746 } 58747 return ret 58748 } 58749 58750 func tvfsInjectIoerr(tls *libc.TLS, p uintptr) int32 { 58751 return tvfsInjectFault(tls, p+60) 58752 } 58753 58754 func tvfsInjectFullerr(tls *libc.TLS, p uintptr) int32 { 58755 return tvfsInjectFault(tls, p+72) 58756 } 58757 58758 func tvfsInjectCantopenerr(tls *libc.TLS, p uintptr) int32 { 58759 return tvfsInjectFault(tls, p+84) 58760 } 58761 58762 func tvfsExecTcl(tls *libc.TLS, p uintptr, zMethod uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr, arg4 uintptr) { 58763 var rc int32 58764 var pEval uintptr 58765 58766 pEval = tcl.XTcl_DuplicateObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 58767 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 58768 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zMethod, -1)) 58769 if arg1 != 0 { 58770 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg1) 58771 } 58772 if arg2 != 0 { 58773 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg2) 58774 } 58775 if arg3 != 0 { 58776 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg3) 58777 } 58778 if arg4 != 0 { 58779 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg4) 58780 } 58781 58782 rc = tcl.XTcl_EvalObjEx(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 58783 if rc != TCL_OK { 58784 tcl.XTcl_BackgroundError(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58785 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 58786 } 58787 } 58788 58789 func tvfsClose(tls *libc.TLS, pFile uintptr) int32 { 58790 var pTestfile uintptr = pFile 58791 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd 58792 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58793 58794 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CLOSE_MASK != 0 { 58795 tvfsExecTcl(tls, p, ts+35556, 58796 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58797 } 58798 58799 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId != 0 { 58800 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58801 var _objPtr uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId 58802 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58803 tcl.XTclFreeObj(tls, _objPtr) 58804 } 58805 } 58806 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 58807 } 58808 if (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods != 0 { 58809 tcl.XTcl_Free(tls, (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods) 58810 } 58811 sqlite3.Xsqlite3OsClose(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 58812 tcl.XTcl_Free(tls, pFd) 58813 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = uintptr(0) 58814 return SQLITE_OK 58815 } 58816 58817 func tvfsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 58818 bp := tls.Alloc(4) 58819 defer tls.Free(4) 58820 58821 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58822 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58823 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58824 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 { 58825 tvfsExecTcl(tls, p, ts+35563, 58826 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58827 tvfsResultCode(tls, p, bp) 58828 } 58829 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58830 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58831 } 58832 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58833 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsRead(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 58834 } 58835 return *(*int32)(unsafe.Pointer(bp)) 58836 } 58837 58838 func tvfsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 58839 bp := tls.Alloc(4) 58840 defer tls.Free(4) 58841 58842 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58843 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58844 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58845 58846 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 { 58847 tvfsExecTcl(tls, p, ts+35569, 58848 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58849 tcl.XTcl_NewWideIntObj(tls, iOfst), tcl.XTcl_NewIntObj(tls, iAmt)) 58850 tvfsResultCode(tls, p, bp) 58851 if *(*int32)(unsafe.Pointer(bp)) < 0 { 58852 return SQLITE_OK 58853 } 58854 } 58855 58856 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 58857 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 58858 } 58859 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58860 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 58861 } 58862 58863 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58864 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsWrite(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 58865 } 58866 return *(*int32)(unsafe.Pointer(bp)) 58867 } 58868 58869 func tvfsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 58870 bp := tls.Alloc(4) 58871 defer tls.Free(4) 58872 58873 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58874 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58875 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58876 58877 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_TRUNCATE_MASK != 0 { 58878 tvfsExecTcl(tls, p, ts+35576, 58879 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 58880 tvfsResultCode(tls, p, bp) 58881 } 58882 58883 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58884 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsTruncate(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, size) 58885 } 58886 return *(*int32)(unsafe.Pointer(bp)) 58887 } 58888 58889 func tvfsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 58890 bp := tls.Alloc(4) 58891 defer tls.Free(4) 58892 58893 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 58894 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58895 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58896 58897 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SYNC_MASK != 0 { 58898 var zFlags uintptr = uintptr(0) 58899 58900 switch flags { 58901 case SQLITE_SYNC_NORMAL: 58902 zFlags = ts + 16397 58903 break 58904 fallthrough 58905 case SQLITE_SYNC_FULL: 58906 zFlags = ts + 18291 58907 break 58908 fallthrough 58909 case SQLITE_SYNC_NORMAL | SQLITE_SYNC_DATAONLY: 58910 zFlags = ts + 38566 58911 break 58912 fallthrough 58913 case SQLITE_SYNC_FULL | SQLITE_SYNC_DATAONLY: 58914 zFlags = ts + 38582 58915 break 58916 fallthrough 58917 default: 58918 } 58919 58920 tvfsExecTcl(tls, p, ts+27843, 58921 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 58922 tcl.XTcl_NewStringObj(tls, zFlags, -1), uintptr(0)) 58923 tvfsResultCode(tls, p, bp) 58924 } 58925 58926 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 58927 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 58928 } 58929 58930 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 58931 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsSync(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, flags) 58932 } 58933 58934 return *(*int32)(unsafe.Pointer(bp)) 58935 } 58936 58937 func tvfsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 58938 var p uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58939 return sqlite3.Xsqlite3OsFileSize(tls, (*TestvfsFd)(unsafe.Pointer(p)).FpReal, pSize) 58940 } 58941 58942 func tvfsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58943 bp := tls.Alloc(38) 58944 defer tls.Free(38) 58945 58946 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58947 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58948 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_LOCK_MASK != 0 { 58949 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58950 tvfsExecTcl(tls, p, ts+35596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58951 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58952 } 58953 return sqlite3.Xsqlite3OsLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58954 } 58955 58956 func tvfsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 58957 bp := tls.Alloc(38) 58958 defer tls.Free(38) 58959 58960 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58961 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58962 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_UNLOCK_MASK != 0 { 58963 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 58964 tvfsExecTcl(tls, p, ts+35602, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58965 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 58966 } 58967 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 58968 return SQLITE_IOERR | int32(8)<<8 58969 } 58970 return sqlite3.Xsqlite3OsUnlock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 58971 } 58972 58973 func tvfsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 58974 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58975 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58976 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CKLOCK_MASK != 0 { 58977 tvfsExecTcl(tls, p, ts+38596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 58978 uintptr(0), uintptr(0), uintptr(0)) 58979 } 58980 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, pResOut) 58981 } 58982 58983 func tvfsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 58984 bp := tls.Alloc(68) 58985 defer tls.Free(68) 58986 58987 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 58988 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 58989 if op == SQLITE_FCNTL_PRAGMA { 58990 var argv uintptr = pArg 58991 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+9674) == 0 { 58992 var rc int32 = SQLITE_ERROR 58993 if *(*uintptr)(unsafe.Pointer(argv + 2*8)) != 0 { 58994 var z uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 58995 var x int32 = libc.Xatoi(tls, z) 58996 if x != 0 { 58997 rc = x 58998 for int32(sqlite3.Xsqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z))])&0x04 != 0 { 58999 z++ 59000 } 59001 for int32(sqlite3.Xsqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z))])&0x01 != 0 { 59002 z++ 59003 } 59004 } 59005 if *(*uint8)(unsafe.Pointer(z)) != 0 { 59006 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, z)) 59007 } 59008 } 59009 return rc 59010 } 59011 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4794) == 0 { 59012 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 59013 return SQLITE_OK 59014 } 59015 } 59016 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FCNTL_MASK != 0 { 59017 *(*[3]Fcntl)(unsafe.Pointer(bp + 16)) = [3]Fcntl{ 59018 {FiFnctl: SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, FzFnctl: ts + 38615}, 59019 {FiFnctl: SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, FzFnctl: ts + 38634}, 59020 {FiFnctl: SQLITE_FCNTL_ZIPVFS, FzFnctl: ts + 38654}, 59021 } 59022 var i int32 59023 for i = 0; uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})); i++ { 59024 if op == (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FiFnctl { 59025 break 59026 } 59027 } 59028 if uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})) { 59029 *(*int32)(unsafe.Pointer(bp + 64)) = 0 59030 tvfsExecTcl(tls, p, ts+35624, 59031 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 59032 tcl.XTcl_NewStringObj(tls, (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FzFnctl, -1), 59033 uintptr(0), uintptr(0)) 59034 tvfsResultCode(tls, p, bp+64) 59035 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 59036 return func() int32 { 59037 if *(*int32)(unsafe.Pointer(bp + 64)) < 0 { 59038 return SQLITE_OK 59039 } 59040 return *(*int32)(unsafe.Pointer(bp + 64)) 59041 }() 59042 } 59043 } 59044 } 59045 return sqlite3.Xsqlite3OsFileControl(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, op, pArg) 59046 } 59047 59048 type Fcntl = struct { 59049 FiFnctl int32 59050 F__ccgo_pad1 [4]byte 59051 FzFnctl uintptr 59052 } 59053 59054 func tvfsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 59055 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59056 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59057 if (*Testvfs)(unsafe.Pointer(p)).FiSectorsize >= 0 { 59058 return (*Testvfs)(unsafe.Pointer(p)).FiSectorsize 59059 } 59060 return sqlite3.Xsqlite3OsSectorSize(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 59061 } 59062 59063 func tvfsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 59064 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59065 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59066 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar >= 0 { 59067 return (*Testvfs)(unsafe.Pointer(p)).FiDevchar 59068 } 59069 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 59070 } 59071 59072 func tvfsOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 59073 bp := tls.Alloc(4) 59074 defer tls.Free(4) 59075 59076 var pTestfile uintptr = pFile 59077 var pFd uintptr 59078 var pId uintptr = uintptr(0) 59079 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 59080 59081 pFd = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(TestvfsFd{}))+uint64((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent)).FszOsFile))) 59082 libc.Xmemset(tls, pFd, 0, uint64(unsafe.Sizeof(TestvfsFd{}))+uint64((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent)).FszOsFile)) 59083 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 59084 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 59085 (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename = zName 59086 (*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs = pVfs 59087 (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal = pFd + 1*56 59088 libc.Xmemset(tls, pTestfile, 0, uint64(unsafe.Sizeof(TestvfsFile{}))) 59089 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = pFd 59090 59091 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59092 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 { 59093 var pArg uintptr = tcl.XTcl_NewObj(tls) 59094 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 59095 if flags&SQLITE_OPEN_MAIN_DB != 0 { 59096 var z uintptr = zName + uintptr(libc.Xstrlen(tls, zName)+uint64(1)) 59097 for *(*uint8)(unsafe.Pointer(z)) != 0 { 59098 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 59099 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 59100 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 59101 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 59102 } 59103 } 59104 tvfsExecTcl(tls, p, ts+27421, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), pArg, uintptr(0), uintptr(0)) 59105 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59106 var _objPtr uintptr = pArg 59107 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59108 tcl.XTclFreeObj(tls, _objPtr) 59109 } 59110 } 59111 if tvfsResultCode(tls, p, bp) != 0 { 59112 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59113 return *(*int32)(unsafe.Pointer(bp)) 59114 } 59115 } else { 59116 pId = tcl.XTcl_GetObjResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59117 } 59118 } 59119 59120 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59121 return SQLITE_IOERR 59122 } 59123 if tvfsInjectCantopenerr(tls, p) != 0 { 59124 return SQLITE_CANTOPEN 59125 } 59126 if tvfsInjectFullerr(tls, p) != 0 { 59127 return SQLITE_FULL 59128 } 59129 59130 if !(pId != 0) { 59131 pId = tcl.XTcl_NewStringObj(tls, ts+38661, -1) 59132 } 59133 (*Tcl_Obj)(unsafe.Pointer(pId)).FrefCount++ 59134 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = pId 59135 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59136 59137 *(*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) 59138 if (*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods != 0 { 59139 var pMethods uintptr 59140 var nByte int32 59141 59142 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 { 59143 nByte = int32(unsafe.Sizeof(sqlite3_io_methods{})) 59144 } else { 59145 nByte = int32(uintptr(0) + 104) 59146 } 59147 59148 pMethods = tcl.XTcl_Alloc(tls, uint32(nByte)) 59149 libc.Xmemcpy(tls, pMethods, uintptr(unsafe.Pointer(&tvfs_io_methods)), uint64(nByte)) 59150 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods)).FiVersion 59151 if (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion > (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion { 59152 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion 59153 } 59154 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 && (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FisNoshm != 0 { 59155 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmUnmap = uintptr(0) 59156 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmLock = uintptr(0) 59157 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmBarrier = uintptr(0) 59158 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmMap = uintptr(0) 59159 } 59160 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = pMethods 59161 } 59162 59163 return *(*int32)(unsafe.Pointer(bp)) 59164 } 59165 59166 func tvfsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 59167 bp := tls.Alloc(4) 59168 defer tls.Free(4) 59169 59170 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59171 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 59172 59173 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_DELETE_MASK != 0 { 59174 tvfsExecTcl(tls, p, ts+35661, 59175 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewIntObj(tls, dirSync), uintptr(0), uintptr(0)) 59176 tvfsResultCode(tls, p, bp) 59177 } 59178 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 59179 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsDelete(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, dirSync) 59180 } 59181 return *(*int32)(unsafe.Pointer(bp)) 59182 } 59183 59184 func tvfsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 59185 bp := tls.Alloc(4) 59186 defer tls.Free(4) 59187 59188 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 59189 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_ACCESS_MASK != 0 { 59190 var zArg uintptr = uintptr(0) 59191 if flags == SQLITE_ACCESS_EXISTS { 59192 zArg = ts + 38666 59193 } 59194 if flags == SQLITE_ACCESS_READWRITE { 59195 zArg = ts + 38687 59196 } 59197 if flags == SQLITE_ACCESS_READ { 59198 zArg = ts + 38711 59199 } 59200 tvfsExecTcl(tls, p, ts+35669, 59201 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewStringObj(tls, zArg, -1), uintptr(0), uintptr(0)) 59202 if tvfsResultCode(tls, p, bp) != 0 { 59203 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59204 return *(*int32)(unsafe.Pointer(bp)) 59205 } 59206 } else { 59207 var interp uintptr = (*Testvfs)(unsafe.Pointer(p)).Finterp 59208 if TCL_OK == tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, interp), pResOut) { 59209 return SQLITE_OK 59210 } 59211 } 59212 } 59213 return sqlite3.Xsqlite3OsAccess(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, flags, pResOut) 59214 } 59215 59216 func tvfsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 59217 bp := tls.Alloc(4) 59218 defer tls.Free(4) 59219 59220 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 59221 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FULLPATHNAME_MASK != 0 { 59222 tvfsExecTcl(tls, p, ts+35677, tcl.XTcl_NewStringObj(tls, zPath, -1), uintptr(0), uintptr(0), uintptr(0)) 59223 if tvfsResultCode(tls, p, bp) != 0 { 59224 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59225 return *(*int32)(unsafe.Pointer(bp)) 59226 } 59227 } 59228 } 59229 return sqlite3.Xsqlite3OsFullPathname(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, nOut, zOut) 59230 } 59231 59232 func tvfsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 59233 return sqlite3.Xsqlite3OsRandomness(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nByte, zBufOut) 59234 } 59235 59236 func tvfsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 59237 return sqlite3.Xsqlite3OsSleep(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nMicro) 59238 } 59239 59240 func tvfsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 59241 return (*struct { 59242 f func(*libc.TLS, uintptr, uintptr) int32 59243 })(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) 59244 } 59245 59246 func tvfsShmOpen(tls *libc.TLS, pFile uintptr) int32 { 59247 bp := tls.Alloc(4) 59248 defer tls.Free(4) 59249 59250 var p uintptr 59251 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59252 var pBuffer uintptr 59253 var pFd uintptr 59254 59255 pFd = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59256 p = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59257 59258 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59259 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 { 59260 tvfsExecTcl(tls, p, ts+38730, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), uintptr(0), uintptr(0), uintptr(0)) 59261 if tvfsResultCode(tls, p, bp) != 0 { 59262 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59263 return *(*int32)(unsafe.Pointer(bp)) 59264 } 59265 } 59266 } 59267 59268 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59269 return SQLITE_IOERR 59270 } 59271 59272 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 59273 if 0 == libc.Xstrcmp(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile) { 59274 break 59275 } 59276 } 59277 if !(pBuffer != 0) { 59278 var szName int32 = int32(libc.Xstrlen(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 59279 var nByte int32 = int32(uint64(unsafe.Sizeof(TestvfsBuffer{})) + uint64(szName) + uint64(1)) 59280 pBuffer = tcl.XTcl_Alloc(tls, uint32(nByte)) 59281 libc.Xmemset(tls, pBuffer, 0, uint64(nByte)) 59282 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile = pBuffer + 1*8224 59283 libc.Xmemcpy(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, uint64(szName+1)) 59284 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext = (*Testvfs)(unsafe.Pointer(p)).FpBuffer 59285 (*Testvfs)(unsafe.Pointer(p)).FpBuffer = pBuffer 59286 } 59287 59288 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile 59289 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile = pFd 59290 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = pBuffer 59291 return *(*int32)(unsafe.Pointer(bp)) 59292 } 59293 59294 func tvfsAllocPage(tls *libc.TLS, p uintptr, iPage int32, pgsz int32) { 59295 if *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) == uintptr(0) { 59296 *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) = tcl.XTcl_Alloc(tls, uint32(pgsz)) 59297 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)), 0, uint64(pgsz)) 59298 (*TestvfsBuffer)(unsafe.Pointer(p)).Fpgsz = pgsz 59299 } 59300 } 59301 59302 func tvfsShmMap(tls *libc.TLS, pFile uintptr, iPage int32, pgsz int32, isWrite int32, pp uintptr) int32 { 59303 bp := tls.Alloc(4) 59304 defer tls.Free(4) 59305 59306 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59307 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59308 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59309 59310 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59311 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59312 return (*struct { 59313 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 59314 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iPage, pgsz, isWrite, pp) 59315 } 59316 59317 if uintptr(0) == (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm { 59318 *(*int32)(unsafe.Pointer(bp)) = tvfsShmOpen(tls, pFile) 59319 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59320 return *(*int32)(unsafe.Pointer(bp)) 59321 } 59322 } 59323 59324 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 { 59325 var pArg uintptr = tcl.XTcl_NewObj(tls) 59326 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 59327 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, iPage)) 59328 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, pgsz)) 59329 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, isWrite)) 59330 tvfsExecTcl(tls, p, ts+35754, 59331 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, pArg, uintptr(0)) 59332 tvfsResultCode(tls, p, bp) 59333 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59334 var _objPtr uintptr = pArg 59335 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59336 tcl.XTclFreeObj(tls, _objPtr) 59337 } 59338 } 59339 } 59340 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59341 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 59342 } 59343 59344 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && isWrite != 0 && !(int32(*(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8))) != 0) { 59345 tvfsAllocPage(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm, iPage, pgsz) 59346 } 59347 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK || *(*int32)(unsafe.Pointer(bp)) == SQLITE_READONLY { 59348 *(*uintptr)(unsafe.Pointer(pp)) = *(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8)) 59349 } 59350 59351 return *(*int32)(unsafe.Pointer(bp)) 59352 } 59353 59354 func tvfsShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 59355 bp := tls.Alloc(100) 59356 defer tls.Free(100) 59357 59358 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 59359 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59360 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59361 var nLock int32 59362 59363 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59364 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59365 return (*struct { 59366 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59367 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 59368 } 59369 59370 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 { 59371 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]uint8{})), bp+16, ts+17826, libc.VaList(bp, ofst, n)) 59372 nLock = int32(libc.Xstrlen(tls, bp+16)) 59373 if flags&SQLITE_SHM_LOCK != 0 { 59374 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38739) 59375 } else { 59376 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38745) 59377 } 59378 nLock = nLock + int32(libc.Xstrlen(tls, bp+16+uintptr(nLock))) 59379 if flags&SQLITE_SHM_SHARED != 0 { 59380 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38753) 59381 } else { 59382 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38761) 59383 } 59384 tvfsExecTcl(tls, p, ts+35733, 59385 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 59386 tcl.XTcl_NewStringObj(tls, bp+16, -1), uintptr(0)) 59387 tvfsResultCode(tls, p, bp+96) 59388 } 59389 59390 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59391 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_IOERR 59392 } 59393 59394 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 59395 var isLock int32 = flags & SQLITE_SHM_LOCK 59396 var isExcl int32 = flags & SQLITE_SHM_EXCLUSIVE 59397 var mask u32 = u32((int32(1)<<n - 1) << ofst) 59398 if isLock != 0 { 59399 var p2 uintptr 59400 for p2 = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FpFile; p2 != 0; p2 = (*TestvfsFd)(unsafe.Pointer(p2)).FpNext { 59401 if p2 == pFd { 59402 continue 59403 } 59404 if (*TestvfsFd)(unsafe.Pointer(p2)).Fexcllock&mask != 0 || isExcl != 0 && (*TestvfsFd)(unsafe.Pointer(p2)).Fsharedlock&mask != 0 { 59405 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_BUSY 59406 break 59407 } 59408 } 59409 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 59410 if isExcl != 0 { 59411 *(*u32)(unsafe.Pointer(pFd + 40)) |= mask 59412 } 59413 if !(isExcl != 0) { 59414 *(*u32)(unsafe.Pointer(pFd + 44)) |= mask 59415 } 59416 } 59417 } else { 59418 if isExcl != 0 { 59419 *(*u32)(unsafe.Pointer(pFd + 40)) &= ^mask 59420 } 59421 if !(isExcl != 0) { 59422 *(*u32)(unsafe.Pointer(pFd + 44)) &= ^mask 59423 } 59424 } 59425 } 59426 59427 return *(*int32)(unsafe.Pointer(bp + 96)) 59428 } 59429 59430 func tvfsShmBarrier(tls *libc.TLS, pFile uintptr) { 59431 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59432 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59433 59434 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMBARRIER_MASK != 0 { 59435 var z uintptr 59436 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm != 0 { 59437 z = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile 59438 } else { 59439 z = ts + 584 59440 } 59441 tvfsExecTcl(tls, p, ts+35742, tcl.XTcl_NewStringObj(tls, z, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59442 } 59443 59444 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59445 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59446 (*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) 59447 return 59448 } 59449 } 59450 59451 func tvfsShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 59452 bp := tls.Alloc(4) 59453 defer tls.Free(4) 59454 59455 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59456 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59457 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59458 var pBuffer uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm 59459 var ppFd uintptr 59460 59461 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59462 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59463 return (*struct { 59464 f func(*libc.TLS, uintptr, int32) int32 59465 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, deleteFlag) 59466 } 59467 59468 if !(pBuffer != 0) { 59469 return SQLITE_OK 59470 } 59471 59472 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMCLOSE_MASK != 0 { 59473 tvfsExecTcl(tls, p, ts+35723, 59474 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59475 tvfsResultCode(tls, p, bp) 59476 } 59477 59478 for ppFd = pBuffer + 8208; *(*uintptr)(unsafe.Pointer(ppFd)) != pFd; ppFd = *(*uintptr)(unsafe.Pointer(ppFd)) + 48 { 59479 } 59480 59481 *(*uintptr)(unsafe.Pointer(ppFd)) = (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext 59482 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = uintptr(0) 59483 59484 if (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile == uintptr(0) { 59485 var i int32 59486 var pp uintptr 59487 for pp = p + 40; *(*uintptr)(unsafe.Pointer(pp)) != pBuffer; pp = *(*uintptr)(unsafe.Pointer(pp)) + 8216 { 59488 } 59489 *(*uintptr)(unsafe.Pointer(pp)) = (*TestvfsBuffer)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNext 59490 for i = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8)) != 0; i++ { 59491 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8))) 59492 } 59493 tcl.XTcl_Free(tls, pBuffer) 59494 } 59495 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 59496 59497 return *(*int32)(unsafe.Pointer(bp)) 59498 } 59499 59500 func tvfsFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 59501 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59502 return sqlite3.Xsqlite3OsFetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, iAmt, pp) 59503 } 59504 59505 func tvfsUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, p uintptr) int32 { 59506 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59507 return sqlite3.Xsqlite3OsUnfetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, p) 59508 } 59509 59510 func testvfs_obj_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59511 bp := tls.Alloc(568) 59512 defer tls.Free(568) 59513 59514 var p uintptr = cd 59515 *(*[10]TestvfsSubcmd)(unsafe.Pointer(bp + 96)) = [10]TestvfsSubcmd{ 59516 {FzName: ts + 38772}, 59517 {FzName: ts + 10138, FeCmd: uint32(1)}, 59518 {FzName: ts + 38776, FeCmd: uint32(2)}, 59519 {FzName: ts + 38783, FeCmd: uint32(3)}, 59520 {FzName: ts + 38789, FeCmd: uint32(7)}, 59521 {FzName: ts + 38797, FeCmd: uint32(8)}, 59522 {FzName: ts + 38809, FeCmd: uint32(4)}, 59523 {FzName: ts + 38816, FeCmd: uint32(5)}, 59524 {FzName: ts + 38824, FeCmd: uint32(6)}, 59525 {}, 59526 } 59527 59528 if objc < 2 { 59529 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 59530 return TCL_ERROR 59531 } 59532 if tcl.XTcl_GetIndexFromObjStruct(tls, 59533 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+96, int32(unsafe.Sizeof(TestvfsSubcmd{})), ts+38835, 0, bp+256) != 0 { 59534 return TCL_ERROR 59535 } 59536 tcl.XTcl_ResetResult(tls, interp) 59537 59538 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 59539 case uint32(0): 59540 { 59541 var pObj uintptr 59542 var rc int32 59543 var pBuffer uintptr 59544 var zName uintptr 59545 if objc != 3 && objc != 4 { 59546 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38846) 59547 return TCL_ERROR 59548 } 59549 zName = tcl.XTcl_Alloc(tls, uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname)) 59550 rc = (*struct { 59551 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59552 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FxFullPathname})).f(tls, 59553 (*Testvfs)(unsafe.Pointer(p)).FpParent, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 59554 (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname, zName) 59555 if rc != SQLITE_OK { 59556 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38859, 59557 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 59558 tcl.XTcl_Free(tls, zName) 59559 return TCL_ERROR 59560 } 59561 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 59562 if 0 == libc.Xstrcmp(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, zName) { 59563 break 59564 } 59565 } 59566 tcl.XTcl_Free(tls, zName) 59567 if !(pBuffer != 0) { 59568 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+38885, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 59569 return TCL_ERROR 59570 } 59571 if objc == 4 { 59572 var a uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+260) 59573 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 59574 if pgsz == 0 { 59575 pgsz = 65536 59576 } 59577 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256))*pgsz < *(*int32)(unsafe.Pointer(bp + 260)); *(*int32)(unsafe.Pointer(bp + 256))++ { 59578 var nByte int32 = pgsz 59579 tvfsAllocPage(tls, pBuffer, *(*int32)(unsafe.Pointer(bp + 256)), pgsz) 59580 if *(*int32)(unsafe.Pointer(bp + 260))-*(*int32)(unsafe.Pointer(bp + 256))*pgsz < pgsz { 59581 nByte = *(*int32)(unsafe.Pointer(bp + 260)) 59582 } 59583 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), a+uintptr(*(*int32)(unsafe.Pointer(bp + 256))*pgsz), uint64(nByte)) 59584 } 59585 } 59586 59587 pObj = tcl.XTcl_NewObj(tls) 59588 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)) != 0; *(*int32)(unsafe.Pointer(bp + 256))++ { 59589 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 59590 if pgsz == 0 { 59591 pgsz = 65536 59592 } 59593 tcl.XTcl_AppendObjToObj(tls, pObj, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), pgsz)) 59594 } 59595 tcl.XTcl_SetObjResult(tls, interp, pObj) 59596 break 59597 59598 } 59599 59600 case uint32(2): 59601 { 59602 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 59603 *(*int32)(unsafe.Pointer(bp + 264)) = 0 59604 var mask int32 = 0 59605 if objc != 3 { 59606 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+32419) 59607 return TCL_ERROR 59608 } 59609 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+264, bp+272) != 0 { 59610 return TCL_ERROR 59611 } 59612 tcl.XTcl_ResetResult(tls, interp) 59613 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256)) < *(*int32)(unsafe.Pointer(bp + 264)); *(*int32)(unsafe.Pointer(bp + 256))++ { 59614 var iMethod int32 59615 var zElem uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 272)) + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8))) 59616 for iMethod = 0; iMethod < int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))); iMethod++ { 59617 if libc.Xstrcmp(tls, zElem, vfsmethod[iMethod].FzName) == 0 { 59618 mask = mask | vfsmethod[iMethod].Fmask 59619 break 59620 } 59621 } 59622 if iMethod == int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))) { 59623 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+38900, zElem, 0)) 59624 return TCL_ERROR 59625 } 59626 } 59627 (*Testvfs)(unsafe.Pointer(p)).Fmask = mask 59628 break 59629 59630 } 59631 59632 case uint32(4): 59633 { 59634 if objc == 3 { 59635 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59636 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59637 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 59638 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59639 tcl.XTclFreeObj(tls, _objPtr) 59640 } 59641 } 59642 (*Testvfs)(unsafe.Pointer(p)).FpScript = uintptr(0) 59643 } 59644 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+280) 59645 if *(*int32)(unsafe.Pointer(bp + 280)) > 0 { 59646 (*Testvfs)(unsafe.Pointer(p)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59647 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 59648 } 59649 } else if objc != 2 { 59650 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 59651 return TCL_ERROR 59652 } 59653 59654 tcl.XTcl_ResetResult(tls, interp) 59655 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59656 tcl.XTcl_SetObjResult(tls, interp, (*Testvfs)(unsafe.Pointer(p)).FpScript) 59657 } 59658 59659 break 59660 59661 } 59662 59663 case uint32(8): 59664 fallthrough 59665 case uint32(3): 59666 fallthrough 59667 case uint32(7): 59668 { 59669 var pTest uintptr = uintptr(0) 59670 var iRet int32 59671 59672 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 59673 case uint32(3): 59674 pTest = p + 60 59675 break 59676 case uint32(7): 59677 pTest = p + 72 59678 break 59679 case uint32(8): 59680 pTest = p + 84 59681 break 59682 default: 59683 } 59684 iRet = (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail 59685 (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail = 0 59686 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = 0 59687 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = 0 59688 59689 if objc == 4 { 59690 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+284) || 59691 TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+288) { 59692 return TCL_ERROR 59693 } 59694 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = func() int32 { 59695 if *(*int32)(unsafe.Pointer(bp + 288)) != 0 { 59696 return FAULT_INJECT_PERSISTENT 59697 } 59698 return FAULT_INJECT_TRANSIENT 59699 }() 59700 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = *(*int32)(unsafe.Pointer(bp + 284)) 59701 } else if objc != 2 { 59702 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38917) 59703 return TCL_ERROR 59704 } 59705 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iRet)) 59706 break 59707 59708 } 59709 59710 case uint32(1): 59711 { 59712 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 59713 break 59714 59715 } 59716 59717 case uint32(5): 59718 { 59719 *(*[16]DeviceFlag)(unsafe.Pointer(bp + 304)) = [16]DeviceFlag{ 59720 {FzName: ts + 38931, FiValue: -1}, 59721 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 59722 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 59723 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 59724 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 59725 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 59726 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 59727 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 59728 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 59729 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 59730 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 59731 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 59732 {FzName: ts + 38939, FiValue: SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN}, 59733 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 59734 {FzName: ts + 38961, FiValue: SQLITE_IOCAP_IMMUTABLE}, 59735 {}, 59736 } 59737 var pRet uintptr 59738 var iFlag int32 59739 59740 if objc > 3 { 59741 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38971) 59742 return TCL_ERROR 59743 } 59744 if objc == 3 { 59745 var j int32 59746 var iNew int32 = 0 59747 *(*uintptr)(unsafe.Pointer(bp + 296)) = uintptr(0) 59748 *(*int32)(unsafe.Pointer(bp + 292)) = 0 59749 59750 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+292, bp+296) != 0 { 59751 return TCL_ERROR 59752 } 59753 59754 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 292)); j++ { 59755 *(*int32)(unsafe.Pointer(bp + 560)) = 0 59756 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(j)*8)), bp+304, 59757 int32(unsafe.Sizeof(DeviceFlag{})), ts+17631, 0, bp+560) != 0 { 59758 return TCL_ERROR 59759 } 59760 if (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue < 0 && *(*int32)(unsafe.Pointer(bp + 292)) > 1 { 59761 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+38983, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 59762 return TCL_ERROR 59763 } 59764 iNew = iNew | (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue 59765 } 59766 59767 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = iNew | 0x10000000 59768 } 59769 59770 pRet = tcl.XTcl_NewObj(tls) 59771 for iFlag = 0; uint64(iFlag) < uint64(unsafe.Sizeof([16]DeviceFlag{}))/uint64(unsafe.Sizeof(DeviceFlag{})); iFlag++ { 59772 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar&(*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FiValue != 0 { 59773 tcl.XTcl_ListObjAppendElement(tls, 59774 interp, pRet, tcl.XTcl_NewStringObj(tls, (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FzName, -1)) 59775 } 59776 } 59777 tcl.XTcl_SetObjResult(tls, interp, pRet) 59778 59779 break 59780 59781 } 59782 59783 case uint32(6): 59784 { 59785 if objc > 3 { 59786 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38995) 59787 return TCL_ERROR 59788 } 59789 if objc == 3 { 59790 *(*int32)(unsafe.Pointer(bp + 564)) = 0 59791 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+564) != 0 { 59792 return TCL_ERROR 59793 } 59794 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = *(*int32)(unsafe.Pointer(bp + 564)) 59795 } 59796 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*Testvfs)(unsafe.Pointer(p)).FiSectorsize)) 59797 break 59798 59799 } 59800 } 59801 59802 return TCL_OK 59803 } 59804 59805 type TestvfsSubcmd = struct { 59806 FzName uintptr 59807 FeCmd uint32 59808 F__ccgo_pad1 [4]byte 59809 } 59810 59811 type VfsMethod = struct { 59812 FzName uintptr 59813 Fmask int32 59814 F__ccgo_pad1 [4]byte 59815 } 59816 59817 var vfsmethod = [18]VfsMethod{ 59818 {FzName: ts + 38730, Fmask: TESTVFS_SHMOPEN_MASK}, 59819 {FzName: ts + 35733, Fmask: TESTVFS_SHMLOCK_MASK}, 59820 {FzName: ts + 35742, Fmask: TESTVFS_SHMBARRIER_MASK}, 59821 {FzName: ts + 35723, Fmask: TESTVFS_SHMCLOSE_MASK}, 59822 {FzName: ts + 35754, Fmask: TESTVFS_SHMMAP_MASK}, 59823 {FzName: ts + 27843, Fmask: TESTVFS_SYNC_MASK}, 59824 {FzName: ts + 35661, Fmask: TESTVFS_DELETE_MASK}, 59825 {FzName: ts + 35569, Fmask: TESTVFS_WRITE_MASK}, 59826 {FzName: ts + 35563, Fmask: TESTVFS_READ_MASK}, 59827 {FzName: ts + 35576, Fmask: TESTVFS_TRUNCATE_MASK}, 59828 {FzName: ts + 27421, Fmask: TESTVFS_OPEN_MASK}, 59829 {FzName: ts + 35556, Fmask: TESTVFS_CLOSE_MASK}, 59830 {FzName: ts + 35669, Fmask: TESTVFS_ACCESS_MASK}, 59831 {FzName: ts + 35677, Fmask: TESTVFS_FULLPATHNAME_MASK}, 59832 {FzName: ts + 35602, Fmask: TESTVFS_UNLOCK_MASK}, 59833 {FzName: ts + 35596, Fmask: TESTVFS_LOCK_MASK}, 59834 {FzName: ts + 38596, Fmask: TESTVFS_CKLOCK_MASK}, 59835 {FzName: ts + 35624, Fmask: TESTVFS_FCNTL_MASK}, 59836 } 59837 59838 func testvfs_obj_del(tls *libc.TLS, cd ClientData) { 59839 var p uintptr = cd 59840 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59841 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59842 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 59843 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59844 tcl.XTclFreeObj(tls, _objPtr) 59845 } 59846 } 59847 } 59848 sqlite3.Xsqlite3_vfs_unregister(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 59849 libc.Xmemset(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs, 0, uint64(unsafe.Sizeof(sqlite3_vfs{}))) 59850 tcl.XTcl_Free(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 59851 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Testvfs{}))) 59852 tcl.XTcl_Free(tls, p) 59853 } 59854 59855 func testvfs_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59856 bp := tls.Alloc(28) 59857 defer tls.Free(28) 59858 59859 var p uintptr 59860 var pVfs uintptr 59861 var zVfs uintptr 59862 var nByte int32 59863 59864 var i int32 59865 59866 var zSwitch uintptr 59867 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59868 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59869 *(*int32)(unsafe.Pointer(bp + 8)) = 0 59870 *(*int32)(unsafe.Pointer(bp + 12)) = 0 59871 *(*int32)(unsafe.Pointer(bp + 16)) = -1 59872 *(*int32)(unsafe.Pointer(bp + 20)) = 3 59873 59874 if !(objc < 2 || 0 != objc%2) { 59875 goto __1 59876 } 59877 goto bad_args 59878 __1: 59879 ; 59880 i = 2 59881 __2: 59882 if !(i < objc) { 59883 goto __4 59884 } 59885 zSwitch = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp) 59886 59887 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39003, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59888 goto __5 59889 } 59890 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+4) != 0) { 59891 goto __7 59892 } 59893 return TCL_ERROR 59894 __7: 59895 ; 59896 if !(*(*int32)(unsafe.Pointer(bp + 4)) != 0) { 59897 goto __8 59898 } 59899 *(*int32)(unsafe.Pointer(bp + 24)) = 0 59900 __8: 59901 ; 59902 goto __6 59903 __5: 59904 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+26779, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59905 goto __9 59906 } 59907 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+8) != 0) { 59908 goto __11 59909 } 59910 return TCL_ERROR 59911 __11: 59912 ; 59913 goto __10 59914 __9: 59915 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39010, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59916 goto __12 59917 } 59918 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+12) != 0) { 59919 goto __14 59920 } 59921 return TCL_ERROR 59922 __14: 59923 ; 59924 goto __13 59925 __12: 59926 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39020, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59927 goto __15 59928 } 59929 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+16) != 0) { 59930 goto __17 59931 } 59932 return TCL_ERROR 59933 __17: 59934 ; 59935 goto __16 59936 __15: 59937 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39032, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59938 goto __18 59939 } 59940 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+20) != 0) { 59941 goto __20 59942 } 59943 return TCL_ERROR 59944 __20: 59945 ; 59946 goto __19 59947 __18: 59948 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39042, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 59949 goto __21 59950 } 59951 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+24) != 0) { 59952 goto __23 59953 } 59954 return TCL_ERROR 59955 __23: 59956 ; 59957 if !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { 59958 goto __24 59959 } 59960 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59961 __24: 59962 ; 59963 goto __22 59964 __21: 59965 goto bad_args 59966 __22: 59967 ; 59968 __19: 59969 ; 59970 __16: 59971 ; 59972 __13: 59973 ; 59974 __10: 59975 ; 59976 __6: 59977 ; 59978 goto __3 59979 __3: 59980 i = i + 2 59981 goto __2 59982 goto __4 59983 __4: 59984 ; 59985 if !(uint64(*(*int32)(unsafe.Pointer(bp + 12))) < uint64(unsafe.Sizeof(TestvfsFile{}))) { 59986 goto __25 59987 } 59988 *(*int32)(unsafe.Pointer(bp + 12)) = int32(unsafe.Sizeof(TestvfsFile{})) 59989 __25: 59990 ; 59991 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 59992 nByte = int32(uint64(unsafe.Sizeof(Testvfs{})) + uint64(int32(libc.Xstrlen(tls, zVfs))) + uint64(1)) 59993 p = tcl.XTcl_Alloc(tls, uint32(nByte)) 59994 libc.Xmemset(tls, p, 0, uint64(nByte)) 59995 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = -1 59996 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = -1 59997 59998 tcl.XTcl_CreateObjCommand(tls, interp, zVfs, *(*uintptr)(unsafe.Pointer(&struct { 59999 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60000 }{testvfs_obj_cmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{testvfs_obj_del}))) 60001 (*Testvfs)(unsafe.Pointer(p)).FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 60002 (*Testvfs)(unsafe.Pointer(p)).Finterp = interp 60003 60004 (*Testvfs)(unsafe.Pointer(p)).FzName = p + 1*104 60005 libc.Xmemcpy(tls, (*Testvfs)(unsafe.Pointer(p)).FzName, zVfs, libc.Xstrlen(tls, zVfs)+uint64(1)) 60006 60007 pVfs = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(sqlite3_vfs{}))) 60008 libc.Xmemcpy(tls, pVfs, uintptr(unsafe.Pointer(&tvfs_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 60009 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData = p 60010 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion = *(*int32)(unsafe.Pointer(bp + 20)) 60011 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName = (*Testvfs)(unsafe.Pointer(p)).FzName 60012 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname 60013 if !(*(*int32)(unsafe.Pointer(bp + 16)) >= 0 && *(*int32)(unsafe.Pointer(bp + 16)) < (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname) { 60014 goto __26 60015 } 60016 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = *(*int32)(unsafe.Pointer(bp + 16)) 60017 __26: 60018 ; 60019 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile = *(*int32)(unsafe.Pointer(bp + 12)) 60020 (*Testvfs)(unsafe.Pointer(p)).FpVfs = pVfs 60021 (*Testvfs)(unsafe.Pointer(p)).FisNoshm = *(*int32)(unsafe.Pointer(bp + 4)) 60022 (*Testvfs)(unsafe.Pointer(p)).FisFullshm = *(*int32)(unsafe.Pointer(bp + 24)) 60023 (*Testvfs)(unsafe.Pointer(p)).Fmask = TESTVFS_ALL_MASK 60024 60025 sqlite3.Xsqlite3_vfs_register(tls, pVfs, *(*int32)(unsafe.Pointer(bp + 8))) 60026 60027 return TCL_OK 60028 60029 bad_args: 60030 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39051) 60031 return TCL_ERROR 60032 } 60033 60034 var tvfs_vfs = sqlite3_vfs{ 60035 FiVersion: 3, 60036 FxOpen: 0, 60037 FxDelete: 0, 60038 FxAccess: 0, 60039 FxFullPathname: 0, 60040 FxRandomness: 0, 60041 FxSleep: 0, 60042 FxCurrentTime: 0, 60043 } 60044 60045 func test_vfs_shmlock(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60046 bp := tls.Alloc(88) 60047 defer tls.Free(88) 60048 60049 *(*[3]uintptr)(unsafe.Pointer(bp + 8)) = [3]uintptr{ts + 39155, ts + 13978, uintptr(0)} 60050 *(*[3]uintptr)(unsafe.Pointer(bp + 40)) = [3]uintptr{ts + 39162, ts + 39167, uintptr(0)} 60051 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 60052 var rc int32 = SQLITE_OK 60053 var zDbname uintptr = uintptr(0) 60054 *(*int32)(unsafe.Pointer(bp + 32)) = 0 60055 *(*int32)(unsafe.Pointer(bp + 64)) = 0 60056 *(*int32)(unsafe.Pointer(bp + 68)) = 0 60057 *(*int32)(unsafe.Pointer(bp + 72)) = 0 60058 60059 if objc != 7 { 60060 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 60061 ts+39174) 60062 return TCL_ERROR 60063 } 60064 60065 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 60066 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 60067 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+32) != 0 || 60068 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+64) != 0 || 60069 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+68) != 0 || 60070 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp+72) != 0 { 60071 return TCL_ERROR 60072 } 60073 60074 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+80) 60075 if *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 60076 return TCL_ERROR 60077 } 60078 rc = (*struct { 60079 f func(*libc.TLS, uintptr, int32, int32, int32) int32 60080 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)))).FpMethods)).FxShmLock})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 68)), *(*int32)(unsafe.Pointer(bp + 72)), 60081 func() int32 { 60082 if *(*int32)(unsafe.Pointer(bp + 32)) == 0 { 60083 return SQLITE_SHM_SHARED 60084 } 60085 return SQLITE_SHM_EXCLUSIVE 60086 }()| 60087 func() int32 { 60088 if *(*int32)(unsafe.Pointer(bp + 64)) == 0 { 60089 return SQLITE_SHM_LOCK 60090 } 60091 return SQLITE_SHM_UNLOCK 60092 }()) 60093 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60094 return TCL_OK 60095 } 60096 60097 func test_vfs_set_readmark(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60098 bp := tls.Alloc(48) 60099 defer tls.Free(48) 60100 60101 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 60102 var rc int32 = SQLITE_OK 60103 var zDbname uintptr = uintptr(0) 60104 *(*int32)(unsafe.Pointer(bp + 24)) = 0 60105 *(*int32)(unsafe.Pointer(bp + 28)) = -1 60106 60107 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 60108 var aShm uintptr 60109 var iOff int32 60110 60111 if objc != 4 && objc != 5 { 60112 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39230) 60113 return TCL_ERROR 60114 } 60115 60116 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 60117 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 || 60118 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 || 60119 objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 60120 return TCL_ERROR 60121 } 60122 60123 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+32) 60124 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 60125 return TCL_ERROR 60126 } 60127 rc = (*struct { 60128 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 60129 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FpMethods)).FxShmMap})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 0, 32*1024, 0, bp+40) 60130 if rc != SQLITE_OK { 60131 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60132 return TCL_ERROR 60133 } 60134 if *(*uintptr)(unsafe.Pointer(bp + 40)) == uintptr(0) { 60135 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+39253, 0)) 60136 return TCL_ERROR 60137 } 60138 aShm = *(*uintptr)(unsafe.Pointer(bp + 40)) 60139 iOff = 12*2 + 1 + *(*int32)(unsafe.Pointer(bp + 24)) 60140 60141 if objc == 5 { 60142 *(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 28))) 60143 } 60144 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(*(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4))))) 60145 60146 return TCL_OK 60147 } 60148 60149 func Sqlitetestvfs_Init(tls *libc.TLS, interp uintptr) int32 { 60150 tcl.XTcl_CreateObjCommand(tls, interp, ts+39277, *(*uintptr)(unsafe.Pointer(&struct { 60151 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60152 }{testvfs_cmd})), uintptr(0), uintptr(0)) 60153 tcl.XTcl_CreateObjCommand(tls, interp, ts+39285, *(*uintptr)(unsafe.Pointer(&struct { 60154 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60155 }{test_vfs_shmlock})), uintptr(0), uintptr(0)) 60156 tcl.XTcl_CreateObjCommand(tls, interp, ts+39297, *(*uintptr)(unsafe.Pointer(&struct { 60157 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60158 }{test_vfs_set_readmark})), uintptr(0), uintptr(0)) 60159 return TCL_OK 60160 } 60161 60162 type TestWindow1 = struct { 60163 FxStep uintptr 60164 FxFinal uintptr 60165 FxValue uintptr 60166 FxInverse uintptr 60167 Finterp uintptr 60168 } 60169 60170 type TestWindow = TestWindow1 60171 60172 type TestWindowCtx1 = struct{ FpVal uintptr } 60173 60174 type TestWindowCtx = TestWindowCtx1 60175 60176 func doTestWindowStep(tls *libc.TLS, bInverse int32, ctx uintptr, nArg int32, apArg uintptr) { 60177 var i int32 60178 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 60179 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 60180 if bInverse != 0 { 60181 return (*TestWindow)(unsafe.Pointer(p)).FxInverse 60182 } 60183 return (*TestWindow)(unsafe.Pointer(p)).FxStep 60184 }()) 60185 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 60186 60187 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 60188 if pCtx != 0 { 60189 var zResult uintptr 60190 var rc int32 60191 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 60192 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 60193 } else { 60194 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 60195 } 60196 for i = 0; i < nArg; i++ { 60197 var pArg uintptr 60198 pArg = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8))), -1) 60199 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, pArg) 60200 } 60201 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 60202 if rc != TCL_OK { 60203 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 60204 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 60205 } else { 60206 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 60207 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60208 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 60209 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60210 tcl.XTclFreeObj(tls, _objPtr) 60211 } 60212 } 60213 } 60214 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp)) 60215 (*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount++ 60216 } 60217 } 60218 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60219 var _objPtr uintptr = pEval 60220 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60221 tcl.XTclFreeObj(tls, _objPtr) 60222 } 60223 } 60224 } 60225 60226 func doTestWindowFinalize(tls *libc.TLS, bValue int32, ctx uintptr) { 60227 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 60228 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 60229 if bValue != 0 { 60230 return (*TestWindow)(unsafe.Pointer(p)).FxValue 60231 } 60232 return (*TestWindow)(unsafe.Pointer(p)).FxFinal 60233 }()) 60234 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 60235 60236 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 60237 if pCtx != 0 { 60238 var zResult uintptr 60239 var rc int32 60240 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 60241 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 60242 } else { 60243 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 60244 } 60245 60246 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 60247 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 60248 if rc != TCL_OK { 60249 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 60250 } else { 60251 sqlite3.Xsqlite3_result_text(tls, ctx, zResult, -1, libc.UintptrFromInt32(-1)) 60252 } 60253 60254 if bValue == 0 { 60255 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 60256 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60257 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 60258 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60259 tcl.XTclFreeObj(tls, _objPtr) 60260 } 60261 } 60262 } 60263 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = uintptr(0) 60264 } 60265 } 60266 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60267 var _objPtr uintptr = pEval 60268 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60269 tcl.XTclFreeObj(tls, _objPtr) 60270 } 60271 } 60272 } 60273 60274 func testWindowStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60275 doTestWindowStep(tls, 0, ctx, nArg, apArg) 60276 } 60277 60278 func testWindowInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60279 doTestWindowStep(tls, 1, ctx, nArg, apArg) 60280 } 60281 60282 func testWindowFinal(tls *libc.TLS, ctx uintptr) { 60283 doTestWindowFinalize(tls, 0, ctx) 60284 } 60285 60286 func testWindowValue(tls *libc.TLS, ctx uintptr) { 60287 doTestWindowFinalize(tls, 1, ctx) 60288 } 60289 60290 func testWindowDestroy(tls *libc.TLS, pCtx uintptr) { 60291 tcl.XTcl_Free(tls, pCtx) 60292 } 60293 60294 func test_create_window(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60295 bp := tls.Alloc(8) 60296 defer tls.Free(8) 60297 60298 var pNew uintptr 60299 60300 var zName uintptr 60301 var rc int32 60302 60303 if objc != 7 { 60304 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39314) 60305 return TCL_ERROR 60306 } 60307 60308 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60309 return TCL_ERROR 60310 } 60311 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 60312 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestWindow{}))) 60313 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(TestWindow{}))) 60314 (*TestWindow)(unsafe.Pointer(pNew)).FxStep = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 60315 (*TestWindow)(unsafe.Pointer(pNew)).FxFinal = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 60316 (*TestWindow)(unsafe.Pointer(pNew)).FxValue = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 60317 (*TestWindow)(unsafe.Pointer(pNew)).FxInverse = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8))) 60318 (*TestWindow)(unsafe.Pointer(pNew)).Finterp = interp 60319 60320 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxStep)).FrefCount++ 60321 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxFinal)).FrefCount++ 60322 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxValue)).FrefCount++ 60323 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxInverse)).FrefCount++ 60324 60325 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, -1, SQLITE_UTF8, pNew, 60326 *(*uintptr)(unsafe.Pointer(&struct { 60327 f func(*libc.TLS, uintptr, int32, uintptr) 60328 }{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 { 60329 f func(*libc.TLS, uintptr, int32, uintptr) 60330 }{testWindowInverse})), 60331 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowDestroy}))) 60332 if rc != SQLITE_OK { 60333 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60334 return TCL_ERROR 60335 } 60336 60337 return TCL_OK 60338 } 60339 60340 func test_create_window_misuse(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60341 bp := tls.Alloc(8) 60342 defer tls.Free(8) 60343 60344 var rc int32 60345 60346 if !(objc != 2) { 60347 goto __1 60348 } 60349 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60350 return TCL_ERROR 60351 __1: 60352 ; 60353 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 60354 goto __2 60355 } 60356 return TCL_ERROR 60357 __2: 60358 ; 60359 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60360 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 { 60361 f func(*libc.TLS, uintptr, int32, uintptr) 60362 }{testWindowInverse})), 60363 uintptr(0)) 60364 if !(rc != SQLITE_MISUSE) { 60365 goto __3 60366 } 60367 goto error 60368 __3: 60369 ; 60370 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60371 *(*uintptr)(unsafe.Pointer(&struct { 60372 f func(*libc.TLS, uintptr, int32, uintptr) 60373 }{testWindowStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 60374 f func(*libc.TLS, uintptr, int32, uintptr) 60375 }{testWindowInverse})), 60376 uintptr(0)) 60377 if !(rc != SQLITE_MISUSE) { 60378 goto __4 60379 } 60380 goto error 60381 __4: 60382 ; 60383 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60384 *(*uintptr)(unsafe.Pointer(&struct { 60385 f func(*libc.TLS, uintptr, int32, uintptr) 60386 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 60387 f func(*libc.TLS, uintptr, int32, uintptr) 60388 }{testWindowInverse})), 60389 uintptr(0)) 60390 if !(rc != SQLITE_MISUSE) { 60391 goto __5 60392 } 60393 goto error 60394 __5: 60395 ; 60396 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60397 *(*uintptr)(unsafe.Pointer(&struct { 60398 f func(*libc.TLS, uintptr, int32, uintptr) 60399 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), uintptr(0), 60400 uintptr(0)) 60401 if !(rc != SQLITE_MISUSE) { 60402 goto __6 60403 } 60404 goto error 60405 __6: 60406 ; 60407 return TCL_OK 60408 60409 error: 60410 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, ts+39355, -1)) 60411 return TCL_ERROR 60412 } 60413 60414 func sumintStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60415 var pInt uintptr 60416 60417 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apArg))) != SQLITE_INTEGER { 60418 sqlite3.Xsqlite3_result_error(tls, ctx, ts+39373, -1) 60419 return 60420 } 60421 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 60422 if pInt != 0 { 60423 *(*sqlite3_int64)(unsafe.Pointer(pInt)) += sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 60424 } 60425 } 60426 60427 func sumintInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60428 var pInt uintptr 60429 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 60430 *(*sqlite3_int64)(unsafe.Pointer(pInt)) -= sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 60431 } 60432 60433 func sumintFinal(tls *libc.TLS, ctx uintptr) { 60434 var res sqlite3_int64 = int64(0) 60435 var pInt uintptr 60436 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 60437 if pInt != 0 { 60438 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 60439 } 60440 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 60441 } 60442 60443 func sumintValue(tls *libc.TLS, ctx uintptr) { 60444 var res sqlite3_int64 = int64(0) 60445 var pInt uintptr 60446 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 60447 if pInt != 0 { 60448 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 60449 } 60450 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 60451 } 60452 60453 func test_create_sumint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60454 bp := tls.Alloc(8) 60455 defer tls.Free(8) 60456 60457 var rc int32 60458 60459 if objc != 2 { 60460 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60461 return TCL_ERROR 60462 } 60463 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60464 return TCL_ERROR 60465 } 60466 60467 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39390, 1, SQLITE_UTF8, uintptr(0), 60468 *(*uintptr)(unsafe.Pointer(&struct { 60469 f func(*libc.TLS, uintptr, int32, uintptr) 60470 }{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 { 60471 f func(*libc.TLS, uintptr, int32, uintptr) 60472 }{sumintInverse})), 60473 uintptr(0)) 60474 60475 if rc != SQLITE_OK { 60476 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60477 return TCL_ERROR 60478 } 60479 return TCL_OK 60480 } 60481 60482 func test_override_sum(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60483 bp := tls.Alloc(8) 60484 defer tls.Free(8) 60485 60486 var rc int32 60487 60488 if objc != 2 { 60489 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60490 return TCL_ERROR 60491 } 60492 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60493 return TCL_ERROR 60494 } 60495 60496 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39397, -1, SQLITE_UTF8, uintptr(0), 60497 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 60498 f func(*libc.TLS, uintptr, int32, uintptr) 60499 }{sumintStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintFinal}))) 60500 60501 if rc != SQLITE_OK { 60502 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60503 return TCL_ERROR 60504 } 60505 return TCL_OK 60506 } 60507 60508 func Sqlitetest_window_Init(tls *libc.TLS, interp uintptr) int32 { 60509 var i int32 60510 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd14))/uint64(unsafe.Sizeof(struct { 60511 FzName uintptr 60512 FxProc uintptr 60513 FclientData int32 60514 F__ccgo_pad1 [4]byte 60515 }{})); i++ { 60516 var c ClientData = uintptr(intptr_t(aObjCmd14[i].FclientData)) 60517 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd14[i].FzName, aObjCmd14[i].FxProc, c, uintptr(0)) 60518 } 60519 return TCL_OK 60520 } 60521 60522 var aObjCmd14 = [4]struct { 60523 FzName uintptr 60524 FxProc uintptr 60525 FclientData int32 60526 F__ccgo_pad1 [4]byte 60527 }{ 60528 {FzName: ts + 39401, FxProc: 0}, 60529 {FzName: ts + 39432, FxProc: 0}, 60530 {FzName: ts + 39467, FxProc: 0}, 60531 {FzName: ts + 39486, FxProc: 0}, 60532 } 60533 60534 func init() { 60535 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 8)) = cfClose 60536 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 16)) = cfRead 60537 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 24)) = cfWrite 60538 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 32)) = cfTruncate 60539 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 40)) = cfSync 60540 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 48)) = cfFileSize 60541 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 56)) = cfLock 60542 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 64)) = cfUnlock 60543 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 72)) = cfCheckReservedLock 60544 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 80)) = cfFileControl 60545 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 88)) = cfSectorSize 60546 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 96)) = cfDeviceCharacteristics 60547 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 104)) = cfShmMap 60548 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 112)) = cfShmLock 60549 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 120)) = cfShmBarrier 60550 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 128)) = cfShmUnmap 60551 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 8)) = csvtabCreate 60552 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 16)) = csvtabConnect 60553 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 24)) = csvtabBestIndex 60554 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 32)) = csvtabDisconnect 60555 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 40)) = csvtabDisconnect 60556 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 48)) = csvtabOpen 60557 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 56)) = csvtabClose 60558 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 64)) = csvtabFilter 60559 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 72)) = csvtabNext 60560 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 80)) = csvtabEof 60561 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 88)) = csvtabColumn 60562 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 96)) = csvtabRowid 60563 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 8)) = csvtabCreate 60564 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 16)) = csvtabConnect 60565 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 24)) = csvtabBestIndex 60566 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 32)) = csvtabDisconnect 60567 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 40)) = csvtabDisconnect 60568 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 48)) = csvtabOpen 60569 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 56)) = csvtabClose 60570 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 64)) = csvtabFilter 60571 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 72)) = csvtabNext 60572 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 80)) = csvtabEof 60573 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 88)) = csvtabColumn 60574 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 96)) = csvtabRowid 60575 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 104)) = csvtabUpdate 60576 *(*func(*libc.TLS, ClientData, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 16)) = incrblobClose 60577 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 24)) = incrblobInput 60578 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 32)) = incrblobOutput 60579 *(*func(*libc.TLS, ClientData, int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 40)) = incrblobSeek 60580 *(*func(*libc.TLS, ClientData, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 64)) = incrblobWatch 60581 *(*func(*libc.TLS, ClientData, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 72)) = incrblobHandle 60582 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 8)) = f5tCreateTokenizer 60583 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 32)) = f5tTokenizerReturn 60584 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 56)) = f5tTokenize 60585 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 80)) = f5tCreateFunction 60586 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 104)) = f5tMayBeCorrupt 60587 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 128)) = f5tTokenHash 60588 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 152)) = f5tRegisterMatchinfo 60589 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 176)) = f5tRegisterTok 60590 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60591 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60592 }{db_enter})) 60593 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60594 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60595 }{db_leave})) 60596 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60597 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60598 }{sqlite3_mprintf_int})) 60599 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60600 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60601 }{sqlite3_mprintf_int64})) 60602 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60603 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60604 }{sqlite3_mprintf_long})) 60605 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60606 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60607 }{sqlite3_mprintf_str})) 60608 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60609 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60610 }{sqlite3_snprintf_str})) 60611 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60612 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60613 }{sqlite3_mprintf_stronly})) 60614 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60615 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60616 }{sqlite3_mprintf_double})) 60617 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60618 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60619 }{sqlite3_mprintf_scaled})) 60620 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60621 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60622 }{sqlite3_mprintf_hexdouble})) 60623 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60624 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60625 }{test_mprintf_z})) 60626 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60627 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60628 }{test_mprintf_n})) 60629 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60630 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60631 }{test_snprintf_int})) 60632 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60633 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60634 }{test_last_rowid})) 60635 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 60636 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60637 }{test_exec_printf})) 60638 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 60639 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60640 }{test_exec_hex})) 60641 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 60642 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60643 }{test_exec})) 60644 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 60645 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60646 }{test_exec_nr})) 60647 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 60648 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60649 }{test_get_table_printf})) 60650 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 60651 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60652 }{sqlite_test_close})) 60653 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 344)) = *(*uintptr)(unsafe.Pointer(&struct { 60654 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60655 }{sqlite_test_close_v2})) 60656 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 60657 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60658 }{test_create_function})) 60659 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 376)) = *(*uintptr)(unsafe.Pointer(&struct { 60660 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60661 }{test_create_aggregate})) 60662 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 60663 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60664 }{test_drop_modules})) 60665 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 408)) = *(*uintptr)(unsafe.Pointer(&struct { 60666 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60667 }{test_register_func})) 60668 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 60669 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60670 }{sqlite_abort})) 60671 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 440)) = *(*uintptr)(unsafe.Pointer(&struct { 60672 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60673 }{test_bind})) 60674 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 60675 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60676 }{test_breakpoint})) 60677 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 472)) = *(*uintptr)(unsafe.Pointer(&struct { 60678 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60679 }{test_key})) 60680 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 60681 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60682 }{test_rekey})) 60683 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 504)) = *(*uintptr)(unsafe.Pointer(&struct { 60684 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60685 }{test_interrupt})) 60686 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 60687 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60688 }{delete_function})) 60689 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 536)) = *(*uintptr)(unsafe.Pointer(&struct { 60690 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60691 }{delete_collation})) 60692 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 60693 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60694 }{get_autocommit})) 60695 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 568)) = *(*uintptr)(unsafe.Pointer(&struct { 60696 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60697 }{test_busy_timeout})) 60698 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 584)) = *(*uintptr)(unsafe.Pointer(&struct { 60699 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60700 }{test_printf})) 60701 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 600)) = *(*uintptr)(unsafe.Pointer(&struct { 60702 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60703 }{test_io_trace})) 60704 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 616)) = *(*uintptr)(unsafe.Pointer(&struct { 60705 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60706 }{clang_sanitize_address})) 60707 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60708 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60709 }{pager_open})) 60710 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60711 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60712 }{pager_close})) 60713 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60714 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60715 }{pager_commit})) 60716 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60717 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60718 }{pager_rollback})) 60719 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60720 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60721 }{pager_stmt_begin})) 60722 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60723 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60724 }{pager_stmt_commit})) 60725 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60726 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60727 }{pager_stmt_rollback})) 60728 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60729 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60730 }{pager_stats})) 60731 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60732 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60733 }{pager_pagecount})) 60734 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60735 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60736 }{page_get})) 60737 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60738 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60739 }{page_lookup})) 60740 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60741 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60742 }{page_unref})) 60743 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60744 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60745 }{page_read})) 60746 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60747 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60748 }{page_write})) 60749 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60750 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60751 }{page_number})) 60752 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 60753 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60754 }{pager_truncate})) 60755 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 60756 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60757 }{fake_big_file})) 60758 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 60759 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60760 }{testBitvecBuiltinTest})) 60761 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 60762 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60763 }{testPendingByte})) 60764 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 60765 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60766 }{faultInstallCmd})) 60767 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60768 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60769 }{btree_open})) 60770 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60771 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60772 }{btree_close})) 60773 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60774 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60775 }{btree_begin_transaction})) 60776 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60777 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60778 }{btree_pager_stats})) 60779 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60780 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60781 }{btree_cursor})) 60782 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60783 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60784 }{btree_close_cursor})) 60785 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60786 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60787 }{btree_next})) 60788 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60789 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60790 }{btree_eof})) 60791 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60792 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60793 }{btree_payload_size})) 60794 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60795 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60796 }{btree_first})) 60797 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60798 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60799 }{btree_varint_test})) 60800 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60801 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60802 }{btree_from_db})) 60803 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60804 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60805 }{btree_ismemdb})) 60806 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60807 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60808 }{btree_set_cache_size})) 60809 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60810 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60811 }{tcl_thread_create})) 60812 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60813 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60814 }{tcl_thread_wait})) 60815 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60816 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60817 }{tcl_thread_halt})) 60818 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60819 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60820 }{tcl_thread_argc})) 60821 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60822 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60823 }{tcl_thread_argv})) 60824 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60825 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60826 }{tcl_thread_colname})) 60827 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60828 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60829 }{tcl_thread_result})) 60830 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60831 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60832 }{tcl_thread_error})) 60833 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60834 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60835 }{tcl_thread_compile})) 60836 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60837 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60838 }{tcl_thread_step})) 60839 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60840 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60841 }{tcl_thread_finalize})) 60842 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60843 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60844 }{tcl_thread_swap})) 60845 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60846 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60847 }{tcl_thread_db_get})) 60848 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60849 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60850 }{tcl_thread_db_put})) 60851 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60852 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60853 }{tcl_thread_stmt_get})) 60854 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60855 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60856 }{binarize})) 60857 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60858 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60859 }{test_value_overhead})) 60860 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60861 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60862 }{test_translate})) 60863 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60864 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60865 }{test_translate_selftest})) 60866 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60867 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60868 }{tcl_client_create})) 60869 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60870 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60871 }{tcl_client_wait})) 60872 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60873 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60874 }{tcl_client_halt})) 60875 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60876 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60877 }{tcl_client_argc})) 60878 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60879 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60880 }{tcl_client_argv})) 60881 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60882 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60883 }{tcl_client_colname})) 60884 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60885 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60886 }{tcl_client_result})) 60887 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60888 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60889 }{tcl_client_error})) 60890 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60891 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60892 }{tcl_client_compile})) 60893 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60894 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60895 }{tcl_client_step})) 60896 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60897 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60898 }{tcl_client_reset})) 60899 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60900 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60901 }{tcl_client_finalize})) 60902 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60903 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60904 }{tcl_client_swap})) 60905 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 8)) = test_multiplex_initialize 60906 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 24)) = test_multiplex_shutdown 60907 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 40)) = test_multiplex_control 60908 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60909 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60910 }{test_shutdown})) 60911 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60912 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60913 }{test_initialize})) 60914 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60915 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60916 }{test_config})) 60917 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60918 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60919 }{test_enter_static_mutex})) 60920 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60921 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60922 }{test_leave_static_mutex})) 60923 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60924 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60925 }{test_enter_db_mutex})) 60926 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60927 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60928 }{test_leave_db_mutex})) 60929 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60930 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60931 }{test_alloc_mutex})) 60932 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60933 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60934 }{test_install_mutex_counters})) 60935 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60936 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60937 }{test_read_mutex_counters})) 60938 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60939 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60940 }{test_clear_mutex_counters})) 60941 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 8)) = test_quota_initialize 60942 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 24)) = test_quota_shutdown 60943 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 40)) = test_quota_set 60944 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 56)) = test_quota_file 60945 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 72)) = test_quota_dump 60946 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 88)) = test_quota_fopen 60947 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 104)) = test_quota_fread 60948 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 120)) = test_quota_fwrite 60949 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 136)) = test_quota_fclose 60950 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 152)) = test_quota_fflush 60951 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 168)) = test_quota_fseek 60952 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 184)) = test_quota_rewind 60953 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 200)) = test_quota_ftell 60954 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 216)) = test_quota_ftruncate 60955 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 232)) = test_quota_file_size 60956 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 248)) = test_quota_file_truesize 60957 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 264)) = test_quota_file_mtime 60958 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 280)) = test_quota_remove 60959 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 296)) = test_quota_glob 60960 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 312)) = test_quota_file_available 60961 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 328)) = test_quota_ferror 60962 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 8)) = sqlite3_amatch_init 60963 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 24)) = sqlite3_appendvfs_init 60964 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 40)) = sqlite3_carray_init 60965 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 56)) = sqlite3_closure_init 60966 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 72)) = sqlite3_csv_init 60967 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 88)) = sqlite3_decimal_init 60968 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 104)) = sqlite3_eval_init 60969 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 120)) = sqlite3_explain_init 60970 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 136)) = sqlite3_fileio_init 60971 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 152)) = sqlite3_fuzzer_init 60972 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 168)) = sqlite3_ieee_init 60973 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 184)) = sqlite3_nextchar_init 60974 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 200)) = sqlite3_percentile_init 60975 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 216)) = sqlite3_prefixes_init 60976 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 232)) = sqlite3_qpvtab_init 60977 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 248)) = sqlite3_regexp_init 60978 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 264)) = sqlite3_remember_init 60979 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 280)) = sqlite3_series_init 60980 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 296)) = sqlite3_spellfix_init 60981 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 312)) = sqlite3_totype_init 60982 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 328)) = sqlite3_unionvtab_init 60983 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 344)) = sqlite3_wholenumber_init 60984 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 16)) = decimalFunc 60985 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 40)) = decimalCmpFunc 60986 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 64)) = decimalAddFunc 60987 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 88)) = decimalSubFunc 60988 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 112)) = decimalMulFunc 60989 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 16)) = ieee754func 60990 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 40)) = ieee754func 60991 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 64)) = ieee754func 60992 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 88)) = ieee754func 60993 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 112)) = ieee754func_to_blob 60994 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 136)) = ieee754func_from_blob 60995 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 16)) = randStr 60996 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 40)) = test_destructor 60997 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 64)) = test_destructor16 60998 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 88)) = testHexToUtf16be 60999 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 112)) = testHexToUtf16le 61000 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 136)) = testHexToUtf8 61001 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 160)) = test_destructor_count 61002 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 184)) = test_auxdata 61003 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 208)) = test_error 61004 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 232)) = test_error 61005 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 256)) = test_eval 61006 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 280)) = test_isolation 61007 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 304)) = counterFunc 61008 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 328)) = real2hex 61009 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 352)) = test_decode 61010 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 376)) = test_extract 61011 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 400)) = test_zeroblob 61012 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 424)) = test_getsubtype 61013 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 448)) = test_setsubtype 61014 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 472)) = test_frombind 61015 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 8)) = test_sqlite3rbu 61016 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 24)) = test_sqlite3rbu_vacuum 61017 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 40)) = test_sqlite3rbu_create_vfs 61018 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 56)) = test_sqlite3rbu_destroy_vfs 61019 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 72)) = test_sqlite3rbu_internal_test 61020 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 8)) = test_sqlite3_db_config 61021 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 32)) = test_sqlite3_txn_state 61022 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 56)) = test_bad_behavior 61023 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 64)) = uintptr(unsafe.Pointer(&iZero)) 61024 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 80)) = test_register_dbstat_vtab 61025 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 104)) = get_sqlite_pointer 61026 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 128)) = test_intarray_addr 61027 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 152)) = test_int64array_addr 61028 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 176)) = test_doublearray_addr 61029 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 200)) = test_textarray_addr 61030 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 224)) = test_bind_int 61031 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 248)) = test_bind_zeroblob 61032 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 272)) = test_bind_zeroblob64 61033 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 296)) = test_bind_int64 61034 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 320)) = test_bind_double 61035 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 344)) = test_bind_null 61036 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 368)) = test_bind_text 61037 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 392)) = test_bind_text16 61038 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 416)) = test_bind_blob 61039 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 440)) = test_bind_value_from_select 61040 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 464)) = test_bind_value_from_preupdate 61041 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 488)) = test_carray_bind 61042 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 512)) = test_bind_parameter_count 61043 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 536)) = test_bind_parameter_name 61044 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 560)) = test_bind_parameter_index 61045 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 584)) = test_clear_bindings 61046 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 608)) = test_sleep 61047 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 632)) = test_errcode 61048 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 656)) = test_ex_errcode 61049 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 680)) = test_errmsg 61050 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 704)) = test_error_offset 61051 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 728)) = test_errmsg16 61052 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 752)) = test_open 61053 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 776)) = test_open16 61054 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 800)) = test_open_v2 61055 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 824)) = test_complete16 61056 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 848)) = test_normalize 61057 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 872)) = test_prepare 61058 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 896)) = test_prepare16 61059 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 920)) = test_prepare_v2 61060 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 944)) = test_prepare_v3 61061 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 968)) = test_prepare_tkt3134 61062 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 992)) = test_prepare16_v2 61063 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1016)) = test_finalize 61064 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1040)) = test_stmt_status 61065 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1064)) = test_reset 61066 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1088)) = test_expired 61067 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1112)) = test_transfer_bind 61068 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1136)) = test_changes 61069 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1160)) = test_step 61070 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1184)) = test_sql 61071 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1208)) = test_ex_sql 61072 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1232)) = test_next_stmt 61073 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1256)) = test_stmt_readonly 61074 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1280)) = test_stmt_isexplain 61075 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1304)) = test_stmt_busy 61076 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1328)) = uses_stmt_journal 61077 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1352)) = test_release_memory 61078 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1376)) = test_db_release_memory 61079 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1400)) = test_db_cacheflush 61080 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1424)) = test_system_errno 61081 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1448)) = test_db_filename 61082 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1472)) = test_db_readonly 61083 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1496)) = test_soft_heap_limit 61084 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1520)) = test_soft_heap_limit 61085 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1544)) = test_hard_heap_limit 61086 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1568)) = test_thread_cleanup 61087 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1592)) = test_pager_refcounts 61088 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1616)) = test_load_extension 61089 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1640)) = test_enable_load 61090 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1664)) = test_extended_result_codes 61091 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1688)) = test_limit 61092 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1712)) = test_dbconfig_maindbname_icecube 61093 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1736)) = save_prng_state 61094 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1760)) = restore_prng_state 61095 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1784)) = reset_prng_state 61096 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1808)) = prng_seed 61097 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1832)) = extra_schema_checks 61098 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1856)) = database_never_corrupt 61099 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1880)) = database_may_be_corrupt 61100 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1904)) = optimization_control 61101 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1928)) = runAsObjProc 61102 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1952)) = test_column_count 61103 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1976)) = test_data_count 61104 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2000)) = test_column_type 61105 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2024)) = test_column_blob 61106 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2048)) = test_column_double 61107 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2072)) = test_column_int64 61108 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2096)) = test_stmt_utf8 61109 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2104)) = *(*uintptr)(unsafe.Pointer(&struct { 61110 f func(*libc.TLS, uintptr, int32) uintptr 61111 }{sqlite3.Xsqlite3_column_text})) 61112 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2120)) = test_stmt_utf8 61113 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2128)) = *(*uintptr)(unsafe.Pointer(&struct { 61114 f func(*libc.TLS, uintptr, int32) uintptr 61115 }{sqlite3.Xsqlite3_column_name})) 61116 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2144)) = test_stmt_int 61117 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2152)) = *(*uintptr)(unsafe.Pointer(&struct { 61118 f func(*libc.TLS, uintptr, int32) int32 61119 }{sqlite3.Xsqlite3_column_int})) 61120 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2168)) = test_stmt_int 61121 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2176)) = *(*uintptr)(unsafe.Pointer(&struct { 61122 f func(*libc.TLS, uintptr, int32) int32 61123 }{sqlite3.Xsqlite3_column_bytes})) 61124 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2192)) = test_stmt_utf8 61125 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2200)) = *(*uintptr)(unsafe.Pointer(&struct { 61126 f func(*libc.TLS, uintptr, int32) uintptr 61127 }{sqlite3.Xsqlite3_column_decltype})) 61128 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2216)) = test_stmt_utf8 61129 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2224)) = *(*uintptr)(unsafe.Pointer(&struct { 61130 f func(*libc.TLS, uintptr, int32) uintptr 61131 }{sqlite3.Xsqlite3_column_database_name})) 61132 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2240)) = test_stmt_utf8 61133 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2248)) = *(*uintptr)(unsafe.Pointer(&struct { 61134 f func(*libc.TLS, uintptr, int32) uintptr 61135 }{sqlite3.Xsqlite3_column_table_name})) 61136 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2264)) = test_stmt_utf8 61137 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2272)) = *(*uintptr)(unsafe.Pointer(&struct { 61138 f func(*libc.TLS, uintptr, int32) uintptr 61139 }{sqlite3.Xsqlite3_column_origin_name})) 61140 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2288)) = test_stmt_int 61141 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2296)) = *(*uintptr)(unsafe.Pointer(&struct { 61142 f func(*libc.TLS, uintptr, int32) int32 61143 }{sqlite3.Xsqlite3_column_bytes16})) 61144 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2312)) = test_stmt_utf16 61145 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2320)) = *(*uintptr)(unsafe.Pointer(&struct { 61146 f func(*libc.TLS, uintptr, int32) uintptr 61147 }{sqlite3.Xsqlite3_column_text16})) 61148 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2336)) = test_stmt_utf16 61149 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2344)) = *(*uintptr)(unsafe.Pointer(&struct { 61150 f func(*libc.TLS, uintptr, int32) uintptr 61151 }{sqlite3.Xsqlite3_column_name16})) 61152 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2360)) = add_alignment_test_collations 61153 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2384)) = test_stmt_utf16 61154 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2392)) = *(*uintptr)(unsafe.Pointer(&struct { 61155 f func(*libc.TLS, uintptr, int32) uintptr 61156 }{sqlite3.Xsqlite3_column_decltype16})) 61157 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2408)) = test_stmt_utf16 61158 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2416)) = *(*uintptr)(unsafe.Pointer(&struct { 61159 f func(*libc.TLS, uintptr, int32) uintptr 61160 }{sqlite3.Xsqlite3_column_database_name16})) 61161 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2432)) = test_stmt_utf16 61162 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2440)) = *(*uintptr)(unsafe.Pointer(&struct { 61163 f func(*libc.TLS, uintptr, int32) uintptr 61164 }{sqlite3.Xsqlite3_column_table_name16})) 61165 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2456)) = test_stmt_utf16 61166 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2464)) = *(*uintptr)(unsafe.Pointer(&struct { 61167 f func(*libc.TLS, uintptr, int32) uintptr 61168 }{sqlite3.Xsqlite3_column_origin_name16})) 61169 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2480)) = test_create_collation_v2 61170 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2504)) = test_global_recover 61171 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2528)) = working_64bit_int 61172 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2552)) = vfs_unlink_test 61173 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2576)) = vfs_initfail_test 61174 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2600)) = vfs_unregister_all 61175 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2624)) = vfs_reregister_all 61176 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2648)) = file_control_test 61177 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2672)) = file_control_lasterrno_test 61178 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2696)) = file_control_lockproxy_test 61179 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2720)) = file_control_chunksize_test 61180 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2744)) = file_control_sizehint_test 61181 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2768)) = file_control_data_version 61182 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2792)) = file_control_persist_wal 61183 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2816)) = file_control_powersafe_overwrite 61184 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2840)) = file_control_vfsname 61185 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2864)) = file_control_reservebytes 61186 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2888)) = file_control_tempfilename 61187 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2912)) = file_control_external_reader 61188 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2936)) = vfs_list 61189 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2960)) = test_create_function_v2 61190 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2984)) = test_collate 61191 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3008)) = test_collate_needed 61192 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3032)) = test_function 61193 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3056)) = test_utf16bin_collate 61194 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3080)) = test_errstr 61195 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3104)) = tcl_variable_type 61196 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3128)) = test_enable_shared 61197 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3152)) = sqlite3BtreeSharedCacheReport 61198 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3176)) = test_libversion_number 61199 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3200)) = test_table_column_metadata 61200 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3224)) = test_blob_reopen 61201 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3248)) = test_pcache_stats 61202 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3272)) = test_unlock_notify 61203 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3296)) = test_wal_checkpoint 61204 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3320)) = test_wal_checkpoint_v2 61205 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3344)) = test_wal_autocheckpoint 61206 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3368)) = test_sqlite3_log 61207 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3392)) = test_print_eqp 61208 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3416)) = test_test_control 61209 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3440)) = test_getrusage 61210 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3464)) = tclLoadStaticExtensionCmd 61211 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3488)) = sorter_test_fakeheap 61212 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3512)) = sorter_test_sort4_helper 61213 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3536)) = vfsCurrentTimeInt64 61214 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3560)) = test_snapshot_get 61215 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3584)) = test_snapshot_open 61216 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3608)) = test_snapshot_free 61217 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3632)) = test_snapshot_cmp 61218 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3656)) = test_snapshot_recover 61219 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3680)) = test_snapshot_get_blob 61220 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3704)) = test_snapshot_open_blob 61221 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3728)) = test_snapshot_cmp_blob 61222 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3752)) = test_delete_database 61223 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3776)) = test_atomic_batch_write 61224 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3800)) = test_mmap_warm 61225 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3824)) = test_config_sorterref 61226 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3848)) = test_autovacuum_pages 61227 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3872)) = test_decode_hexdb 61228 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3896)) = test_write_db 61229 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3920)) = test_register_cksumvfs 61230 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3944)) = test_unregister_cksumvfs 61231 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 8)) = test_intarray_create 61232 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 32)) = test_intarray_bind 61233 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 8)) = test_malloc 61234 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 32)) = test_realloc 61235 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 56)) = test_free 61236 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 80)) = test_memset 61237 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 104)) = test_memget 61238 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 128)) = test_memory_used 61239 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 152)) = test_memory_highwater 61240 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 176)) = test_memdebug_backtrace 61241 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 200)) = test_memdebug_dump 61242 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 224)) = test_memdebug_fail 61243 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 248)) = test_memdebug_pending 61244 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 272)) = test_memdebug_settitle 61245 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 296)) = test_memdebug_malloc_count 61246 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 320)) = test_memdebug_log 61247 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 344)) = test_config_pagecache 61248 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 368)) = test_alt_pcache 61249 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 392)) = test_status 61250 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 416)) = test_db_status 61251 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 440)) = test_install_malloc_faultsim 61252 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 464)) = test_config_heap 61253 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 488)) = test_config_heap_size 61254 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 512)) = test_config_memstatus 61255 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 536)) = test_config_lookaside 61256 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 560)) = test_config_error 61257 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 584)) = test_config_uri 61258 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 608)) = test_config_cis 61259 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 632)) = test_config_pmasz 61260 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 656)) = test_db_config_lookaside 61261 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 680)) = test_dump_memsys3 61262 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 704)) = test_dump_memsys3 61263 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 728)) = test_install_memsys3 61264 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 752)) = test_vfs_oom_test 61265 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd12)) + 8)) = register_schema_module 61266 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd13)) + 8)) = register_tclvar_module 61267 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 8)) = test_create_window 61268 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 32)) = test_create_window_misuse 61269 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 56)) = test_create_sumint 61270 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 80)) = test_override_sum 61271 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 8)) = register_echo_module 61272 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 32)) = declare_vtab 61273 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 8)) = c_misuse_test 61274 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 32)) = c_realloc_test 61275 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 56)) = c_collation_test 61276 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd4)) + 8)) = register_tcl_module 61277 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 8)) = test_blob_open 61278 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 24)) = test_blob_close 61279 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 40)) = test_blob_bytes 61280 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 56)) = test_blob_read 61281 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 72)) = test_blob_write 61282 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd6)) + 8)) = register_fs_module 61283 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 8)) = autoinstall_test_funcs 61284 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 24)) = abuse_create_function 61285 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 40)) = install_fts3_rank_function 61286 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 8)) = hexio_read 61287 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 24)) = hexio_write 61288 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 40)) = hexio_get_int 61289 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 56)) = hexio_render_int16 61290 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 72)) = hexio_render_int32 61291 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 88)) = utf8_to_utf8 61292 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 104)) = read_fts3varint 61293 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 120)) = make_fts3record 61294 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 8)) = init_wrapper_install 61295 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 24)) = init_wrapper_query 61296 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 40)) = init_wrapper_uninstall 61297 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 56)) = init_wrapper_clear 61298 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 61299 f func(*libc.TLS, uintptr, int32, int32) int32 61300 }{ts_open})) 61301 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{ts_close})) 61302 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 61303 f func(*libc.TLS, uintptr, int32) int32 61304 }{ts_access})) 61305 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 61306 f func(*libc.TLS, uintptr, size_t) uintptr 61307 }{ts_getcwd})) 61308 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 61309 f func(*libc.TLS, uintptr, uintptr) int32 61310 }{ts_stat})) 61311 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 61312 f func(*libc.TLS, int32, uintptr) int32 61313 }{ts_fstat})) 61314 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 61315 f func(*libc.TLS, int32, off_t) int32 61316 }{ts_ftruncate})) 61317 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 61318 f func(*libc.TLS, int32, int32, uintptr) int32 61319 }{ts_fcntl})) 61320 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 61321 f func(*libc.TLS, int32, uintptr, size_t) int32 61322 }{ts_read})) 61323 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 61324 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 61325 }{ts_pread})) 61326 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 61327 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 61328 }{ts_pread64})) 61329 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 61330 f func(*libc.TLS, int32, uintptr, size_t) int32 61331 }{ts_write})) 61332 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 61333 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 61334 }{ts_pwrite})) 61335 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 61336 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 61337 }{ts_pwrite64})) 61338 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 61339 f func(*libc.TLS, int32, mode_t) int32 61340 }{ts_fchmod})) 61341 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 61342 f func(*libc.TLS, int32, off_t, off_t) int32 61343 }{ts_fallocate})) 61344 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 61345 f func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr 61346 }{ts_mmap})) 61347 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 61348 f func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr 61349 }{ts_mremap})) 61350 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 8)) = amatchConnect 61351 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 16)) = amatchConnect 61352 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 24)) = amatchBestIndex 61353 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 32)) = amatchDisconnect 61354 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 40)) = amatchDisconnect 61355 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 48)) = amatchOpen 61356 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 56)) = amatchClose 61357 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 64)) = amatchFilter 61358 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 72)) = amatchNext 61359 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 80)) = amatchEof 61360 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 88)) = amatchColumn 61361 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 96)) = amatchRowid 61362 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 104)) = amatchUpdate 61363 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 8)) = apndClose 61364 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 16)) = apndRead 61365 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 24)) = apndWrite 61366 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 32)) = apndTruncate 61367 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 40)) = apndSync 61368 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 48)) = apndFileSize 61369 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 56)) = apndLock 61370 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 64)) = apndUnlock 61371 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 72)) = apndCheckReservedLock 61372 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 80)) = apndFileControl 61373 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 88)) = apndSectorSize 61374 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 96)) = apndDeviceCharacteristics 61375 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 104)) = apndShmMap 61376 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 112)) = apndShmLock 61377 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 120)) = apndShmBarrier 61378 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 128)) = apndShmUnmap 61379 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 136)) = apndFetch 61380 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 144)) = apndUnfetch 61381 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 40)) = apndOpen 61382 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 48)) = apndDelete 61383 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 56)) = apndAccess 61384 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 64)) = apndFullPathname 61385 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 72)) = apndDlOpen 61386 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 80)) = apndDlError 61387 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 88)) = apndDlSym 61388 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 96)) = apndDlClose 61389 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 104)) = apndRandomness 61390 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 112)) = apndSleep 61391 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 120)) = apndCurrentTime 61392 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 128)) = apndGetLastError 61393 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 136)) = apndCurrentTimeInt64 61394 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 144)) = apndSetSystemCall 61395 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 152)) = apndGetSystemCall 61396 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 160)) = apndNextSystemCall 61397 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 16)) = carrayConnect 61398 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 24)) = carrayBestIndex 61399 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 32)) = carrayDisconnect 61400 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 48)) = carrayOpen 61401 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 56)) = carrayClose 61402 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 64)) = carrayFilter 61403 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 72)) = carrayNext 61404 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 80)) = carrayEof 61405 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 88)) = carrayColumn 61406 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 96)) = carrayRowid 61407 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 8)) = cksmClose 61408 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 16)) = cksmRead 61409 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 24)) = cksmWrite 61410 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 32)) = cksmTruncate 61411 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 40)) = cksmSync 61412 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 48)) = cksmFileSize 61413 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 56)) = cksmLock 61414 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 64)) = cksmUnlock 61415 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 72)) = cksmCheckReservedLock 61416 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 80)) = cksmFileControl 61417 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 88)) = cksmSectorSize 61418 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 96)) = cksmDeviceCharacteristics 61419 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 104)) = cksmShmMap 61420 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 112)) = cksmShmLock 61421 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 120)) = cksmShmBarrier 61422 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 128)) = cksmShmUnmap 61423 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 136)) = cksmFetch 61424 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 144)) = cksmUnfetch 61425 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 40)) = cksmOpen 61426 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 48)) = cksmDelete 61427 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 56)) = cksmAccess 61428 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 64)) = cksmFullPathname 61429 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 72)) = cksmDlOpen 61430 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 80)) = cksmDlError 61431 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 88)) = cksmDlSym 61432 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 96)) = cksmDlClose 61433 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 104)) = cksmRandomness 61434 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 112)) = cksmSleep 61435 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 120)) = cksmCurrentTime 61436 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 128)) = cksmGetLastError 61437 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 136)) = cksmCurrentTimeInt64 61438 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 144)) = cksmSetSystemCall 61439 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 152)) = cksmGetSystemCall 61440 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 160)) = cksmNextSystemCall 61441 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 8)) = closureConnect 61442 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 16)) = closureConnect 61443 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 24)) = closureBestIndex 61444 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 32)) = closureDisconnect 61445 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 40)) = closureDisconnect 61446 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 48)) = closureOpen 61447 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 56)) = closureClose 61448 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 64)) = closureFilter 61449 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 72)) = closureNext 61450 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 80)) = closureEof 61451 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 88)) = closureColumn 61452 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 96)) = closureRowid 61453 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 40)) = cfOpen 61454 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 48)) = cfDelete 61455 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 56)) = cfAccess 61456 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 64)) = cfFullPathname 61457 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 72)) = cfDlOpen 61458 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 80)) = cfDlError 61459 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 88)) = cfDlSym 61460 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 96)) = cfDlClose 61461 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 104)) = cfRandomness 61462 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 112)) = cfSleep 61463 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 120)) = cfCurrentTime 61464 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 128)) = cfGetLastError 61465 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 8)) = devsymClose 61466 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 16)) = devsymRead 61467 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 24)) = devsymWrite 61468 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 32)) = devsymTruncate 61469 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 40)) = devsymSync 61470 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 48)) = devsymFileSize 61471 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 56)) = devsymLock 61472 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 64)) = devsymUnlock 61473 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 72)) = devsymCheckReservedLock 61474 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 80)) = devsymFileControl 61475 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 88)) = devsymSectorSize 61476 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 96)) = devsymDeviceCharacteristics 61477 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 104)) = devsymShmMap 61478 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 112)) = devsymShmLock 61479 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 120)) = devsymShmBarrier 61480 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 128)) = devsymShmUnmap 61481 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 40)) = devsymOpen 61482 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 48)) = devsymDelete 61483 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 56)) = devsymAccess 61484 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 64)) = devsymFullPathname 61485 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 104)) = devsymRandomness 61486 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 112)) = devsymSleep 61487 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 120)) = devsymCurrentTime 61488 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 8)) = echoCreate 61489 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 16)) = echoConnect 61490 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 24)) = echoBestIndex 61491 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 32)) = echoDisconnect 61492 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 40)) = echoDestroy 61493 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 48)) = echoOpen 61494 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 56)) = echoClose 61495 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 64)) = echoFilter 61496 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 72)) = echoNext 61497 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 80)) = echoEof 61498 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 88)) = echoColumn 61499 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 96)) = echoRowid 61500 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 104)) = echoUpdate 61501 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 112)) = echoBegin 61502 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 120)) = echoSync 61503 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 128)) = echoCommit 61504 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 136)) = echoRollback 61505 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 144)) = echoFindFunction 61506 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 152)) = echoRename 61507 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 8)) = echoCreate 61508 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 16)) = echoConnect 61509 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 24)) = echoBestIndex 61510 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 32)) = echoDisconnect 61511 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 40)) = echoDestroy 61512 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 48)) = echoOpen 61513 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 56)) = echoClose 61514 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 64)) = echoFilter 61515 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 72)) = echoNext 61516 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 80)) = echoEof 61517 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 88)) = echoColumn 61518 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 96)) = echoRowid 61519 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 104)) = echoUpdate 61520 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 112)) = echoBegin 61521 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 120)) = echoSync 61522 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 128)) = echoCommit 61523 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 136)) = echoRollback 61524 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 144)) = echoFindFunction 61525 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 152)) = echoRename 61526 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 160)) = echoSavepoint 61527 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 168)) = echoRelease 61528 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 176)) = echoRollbackTo 61529 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 8)) = expertConnect 61530 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 16)) = expertConnect 61531 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 24)) = expertBestIndex 61532 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 32)) = expertDisconnect 61533 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 40)) = expertDisconnect 61534 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 48)) = expertOpen 61535 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 56)) = expertClose 61536 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 64)) = expertFilter 61537 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 72)) = expertNext 61538 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 80)) = expertEof 61539 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 88)) = expertColumn 61540 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 96)) = expertRowid 61541 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 104)) = expertUpdate 61542 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 16)) = explainConnect 61543 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 24)) = explainBestIndex 61544 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 32)) = explainDisconnect 61545 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 48)) = explainOpen 61546 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 56)) = explainClose 61547 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 64)) = explainFilter 61548 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 72)) = explainNext 61549 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 80)) = explainEof 61550 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 88)) = explainColumn 61551 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 96)) = explainRowid 61552 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 8)) = fsConnect 61553 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 16)) = fsConnect 61554 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 24)) = fsBestIndex 61555 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 32)) = fsDisconnect 61556 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 40)) = fsDisconnect 61557 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 48)) = fsOpen 61558 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 56)) = fsClose 61559 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 64)) = fsFilter 61560 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 72)) = fsNext 61561 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 80)) = fsEof 61562 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 88)) = fsColumn 61563 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 96)) = fsRowid 61564 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 8)) = fsClose1 61565 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 16)) = fsRead 61566 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 24)) = fsWrite 61567 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 32)) = fsTruncate 61568 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 40)) = fsSync 61569 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 48)) = fsFileSize 61570 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 56)) = fsLock 61571 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 64)) = fsUnlock 61572 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 72)) = fsCheckReservedLock 61573 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 80)) = fsFileControl 61574 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 88)) = fsSectorSize 61575 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 96)) = fsDeviceCharacteristics 61576 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 40)) = fsOpen1 61577 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 48)) = fsDelete 61578 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 56)) = fsAccess 61579 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 64)) = fsFullPathname 61580 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 72)) = fsDlOpen 61581 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 80)) = fsDlError 61582 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 88)) = fsDlSym 61583 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 96)) = fsDlClose 61584 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 104)) = fsRandomness 61585 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 112)) = fsSleep 61586 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 120)) = fsCurrentTime 61587 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 8)) = fsdirConnect1 61588 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 16)) = fsdirConnect1 61589 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 24)) = fsdirBestIndex1 61590 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 32)) = fsdirDisconnect1 61591 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 40)) = fsdirDisconnect1 61592 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 48)) = fsdirOpen1 61593 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 56)) = fsdirClose1 61594 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 64)) = fsdirFilter1 61595 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 72)) = fsdirNext1 61596 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 80)) = fsdirEof1 61597 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 88)) = fsdirColumn1 61598 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 96)) = fsdirRowid1 61599 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 16)) = fsdirConnect 61600 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 24)) = fsdirBestIndex 61601 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 32)) = fsdirDisconnect 61602 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 48)) = fsdirOpen 61603 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 56)) = fsdirClose 61604 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 64)) = fsdirFilter 61605 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 72)) = fsdirNext 61606 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 80)) = fsdirEof 61607 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 88)) = fsdirColumn 61608 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 96)) = fsdirRowid 61609 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 8)) = fstreeConnect 61610 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 16)) = fstreeConnect 61611 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 24)) = fstreeBestIndex 61612 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 32)) = fstreeDisconnect 61613 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 40)) = fstreeDisconnect 61614 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 48)) = fstreeOpen 61615 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 56)) = fstreeClose 61616 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 64)) = fstreeFilter 61617 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 72)) = fstreeNext 61618 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 80)) = fstreeEof 61619 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 88)) = fstreeColumn 61620 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 96)) = fstreeRowid 61621 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 8)) = fts5tokConnectMethod 61622 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 16)) = fts5tokConnectMethod 61623 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 24)) = fts5tokBestIndexMethod 61624 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 32)) = fts5tokDisconnectMethod 61625 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 40)) = fts5tokDisconnectMethod 61626 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 48)) = fts5tokOpenMethod 61627 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 56)) = fts5tokCloseMethod 61628 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 64)) = fts5tokFilterMethod 61629 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 72)) = fts5tokNextMethod 61630 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 80)) = fts5tokEofMethod 61631 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 88)) = fts5tokColumnMethod 61632 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 96)) = fts5tokRowidMethod 61633 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 8)) = fuzzerConnect 61634 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 16)) = fuzzerConnect 61635 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 24)) = fuzzerBestIndex 61636 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 32)) = fuzzerDisconnect 61637 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 40)) = fuzzerDisconnect 61638 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 48)) = fuzzerOpen 61639 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 56)) = fuzzerClose 61640 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 64)) = fuzzerFilter 61641 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 72)) = fuzzerNext 61642 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 80)) = fuzzerEof 61643 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 88)) = fuzzerColumn 61644 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 96)) = fuzzerRowid 61645 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 8)) = intarrayCreate 61646 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 16)) = intarrayCreate 61647 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 24)) = intarrayBestIndex 61648 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 32)) = intarrayDestroy 61649 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 40)) = intarrayDestroy 61650 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 48)) = intarrayOpen 61651 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 56)) = intarrayClose 61652 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 64)) = intarrayFilter 61653 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 72)) = intarrayNext 61654 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 80)) = intarrayEof 61655 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 88)) = intarrayColumn 61656 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 96)) = intarrayRowid 61657 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 8)) = jtClose 61658 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 16)) = jtRead 61659 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 24)) = jtWrite 61660 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 32)) = jtTruncate 61661 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 40)) = jtSync 61662 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 48)) = jtFileSize 61663 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 56)) = jtLock 61664 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 64)) = jtUnlock 61665 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 72)) = jtCheckReservedLock 61666 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 80)) = jtFileControl 61667 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 88)) = jtSectorSize 61668 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 96)) = jtDeviceCharacteristics 61669 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 40)) = jtOpen 61670 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 48)) = jtDelete 61671 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 56)) = jtAccess 61672 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 64)) = jtFullPathname 61673 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 72)) = jtDlOpen 61674 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 80)) = jtDlError 61675 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 88)) = jtDlSym 61676 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 96)) = jtDlClose 61677 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 104)) = jtRandomness 61678 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 112)) = jtSleep 61679 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 120)) = jtCurrentTime 61680 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 128)) = jtGetLastError 61681 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 136)) = jtCurrentTimeInt64 61682 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 16)) = prefixesConnect 61683 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 24)) = prefixesBestIndex 61684 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 32)) = prefixesDisconnect 61685 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 48)) = prefixesOpen 61686 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 56)) = prefixesClose 61687 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 64)) = prefixesFilter 61688 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 72)) = prefixesNext 61689 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 80)) = prefixesEof 61690 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 88)) = prefixesColumn 61691 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 96)) = prefixesRowid 61692 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&pzNeededCollation)) + 0)) = uintptr(unsafe.Pointer(&zNeededCollation)) 61693 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 16)) = qpvtabConnect 61694 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 24)) = qpvtabBestIndex 61695 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 32)) = qpvtabDisconnect 61696 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 48)) = qpvtabOpen 61697 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 56)) = qpvtabClose 61698 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 64)) = qpvtabFilter 61699 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 72)) = qpvtabNext 61700 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 80)) = qpvtabEof 61701 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 88)) = qpvtabColumn 61702 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 96)) = qpvtabRowid 61703 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 8)) = schemaCreate 61704 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 16)) = schemaCreate 61705 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 24)) = schemaBestIndex 61706 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 32)) = schemaDestroy 61707 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 40)) = schemaDestroy 61708 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 48)) = schemaOpen 61709 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 56)) = schemaClose 61710 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 64)) = schemaFilter 61711 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 72)) = schemaNext 61712 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 80)) = schemaEof 61713 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 88)) = schemaColumn 61714 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 96)) = schemaRowid 61715 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 16)) = seriesConnect 61716 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 24)) = seriesBestIndex 61717 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 32)) = seriesDisconnect 61718 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 48)) = seriesOpen 61719 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 56)) = seriesClose 61720 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 64)) = seriesFilter 61721 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 72)) = seriesNext 61722 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 80)) = seriesEof 61723 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 88)) = seriesColumn 61724 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 96)) = seriesRowid 61725 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 8)) = spellfix1Create 61726 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 16)) = spellfix1Connect 61727 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 24)) = spellfix1BestIndex 61728 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 32)) = spellfix1Disconnect 61729 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 40)) = spellfix1Destroy 61730 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 48)) = spellfix1Open 61731 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 56)) = spellfix1Close 61732 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 64)) = spellfix1Filter 61733 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 72)) = spellfix1Next 61734 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 80)) = spellfix1Eof 61735 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 88)) = spellfix1Column 61736 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 96)) = spellfix1Rowid 61737 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 104)) = spellfix1Update 61738 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 152)) = spellfix1Rename 61739 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 8)) = tclConnect 61740 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 16)) = tclConnect 61741 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 24)) = tclBestIndex 61742 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 32)) = tclDisconnect 61743 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 40)) = tclDisconnect 61744 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 48)) = tclOpen 61745 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 56)) = tclClose 61746 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 64)) = tclFilter 61747 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 72)) = tclNext 61748 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 80)) = tclEof 61749 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 88)) = tclColumn 61750 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 96)) = tclRowid 61751 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 8)) = tclvarConnect 61752 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 16)) = tclvarConnect 61753 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 24)) = tclvarBestIndex 61754 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 32)) = tclvarDisconnect 61755 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 40)) = tclvarDisconnect 61756 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 48)) = tclvarOpen 61757 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 56)) = tclvarClose 61758 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 64)) = tclvarFilter 61759 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 72)) = tclvarNext 61760 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 80)) = tclvarEof 61761 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 88)) = tclvarColumn 61762 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 96)) = tclvarRowid 61763 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 104)) = tclvarUpdate 61764 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 8)) = uintptr(unsafe.Pointer(&testpcacheGlobal)) 61765 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 16)) = testpcacheInit 61766 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 24)) = testpcacheShutdown 61767 *(*func(*libc.TLS, int32, int32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 32)) = testpcacheCreate 61768 *(*func(*libc.TLS, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 40)) = testpcacheCachesize 61769 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 48)) = testpcachePagecount 61770 *(*func(*libc.TLS, uintptr, uint32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 56)) = testpcacheFetch 61771 *(*func(*libc.TLS, uintptr, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 64)) = testpcacheUnpin 61772 *(*func(*libc.TLS, uintptr, uintptr, uint32, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 72)) = testpcacheRekey 61773 *(*func(*libc.TLS, uintptr, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 80)) = testpcacheTruncate 61774 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 88)) = testpcacheDestroy 61775 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 8)) = tmpClose 61776 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 16)) = tmpRead 61777 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 24)) = tmpWrite 61778 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 32)) = tmpTruncate 61779 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 40)) = tmpSync 61780 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 48)) = tmpFileSize 61781 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 56)) = tmpLock 61782 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 64)) = tmpUnlock 61783 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 72)) = tmpCheckReservedLock 61784 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 80)) = tmpFileControl 61785 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 88)) = tmpSectorSize 61786 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 96)) = tmpDeviceCharacteristics 61787 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 8)) = tvfsClose 61788 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 16)) = tvfsRead 61789 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 24)) = tvfsWrite 61790 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 32)) = tvfsTruncate 61791 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 40)) = tvfsSync 61792 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 48)) = tvfsFileSize 61793 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 56)) = tvfsLock 61794 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 64)) = tvfsUnlock 61795 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 72)) = tvfsCheckReservedLock 61796 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 80)) = tvfsFileControl 61797 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 88)) = tvfsSectorSize 61798 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 96)) = tvfsDeviceCharacteristics 61799 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 104)) = tvfsShmMap 61800 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 112)) = tvfsShmLock 61801 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 120)) = tvfsShmBarrier 61802 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 128)) = tvfsShmUnmap 61803 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 136)) = tvfsFetch 61804 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 144)) = tvfsUnfetch 61805 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 40)) = tvfsOpen 61806 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 48)) = tvfsDelete 61807 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 56)) = tvfsAccess 61808 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 64)) = tvfsFullPathname 61809 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 104)) = tvfsRandomness 61810 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 112)) = tvfsSleep 61811 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 120)) = tvfsCurrentTime 61812 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 8)) = unionConnect 61813 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 16)) = unionConnect 61814 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 24)) = unionBestIndex 61815 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 32)) = unionDisconnect 61816 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 40)) = unionDisconnect 61817 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 48)) = unionOpen 61818 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 56)) = unionClose 61819 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 64)) = unionFilter 61820 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 72)) = unionNext 61821 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 80)) = unionEof 61822 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 88)) = unionColumn 61823 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 96)) = unionRowid 61824 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 8)) = vfslogClose 61825 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 16)) = vfslogRead 61826 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 24)) = vfslogWrite 61827 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 32)) = vfslogTruncate 61828 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 40)) = vfslogSync 61829 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 48)) = vfslogFileSize 61830 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 56)) = vfslogLock 61831 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 64)) = vfslogUnlock 61832 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 72)) = vfslogCheckReservedLock 61833 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 80)) = vfslogFileControl 61834 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 88)) = vfslogSectorSize 61835 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 96)) = vfslogDeviceCharacteristics 61836 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 104)) = vfslogShmMap 61837 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 112)) = vfslogShmLock 61838 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 120)) = vfslogShmBarrier 61839 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 128)) = vfslogShmUnmap 61840 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 8)) = vlogConnect 61841 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 16)) = vlogConnect 61842 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 24)) = vlogBestIndex 61843 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 32)) = vlogDisconnect 61844 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 40)) = vlogDisconnect 61845 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 48)) = vlogOpen 61846 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 56)) = vlogClose 61847 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 64)) = vlogFilter 61848 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 72)) = vlogNext 61849 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 80)) = vlogEof 61850 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 88)) = vlogColumn 61851 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 96)) = vlogRowid 61852 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 40)) = vfslogOpen 61853 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 48)) = vfslogDelete 61854 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 56)) = vfslogAccess 61855 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 64)) = vfslogFullPathname 61856 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 72)) = vfslogDlOpen 61857 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 80)) = vfslogDlError 61858 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 88)) = vfslogDlSym 61859 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 96)) = vfslogDlClose 61860 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 104)) = vfslogRandomness 61861 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 112)) = vfslogSleep 61862 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 120)) = vfslogCurrentTime 61863 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 128)) = vfslogGetLastError 61864 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 136)) = vfslogCurrentTimeInt64 61865 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 8)) = wholenumberConnect 61866 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 16)) = wholenumberConnect 61867 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 24)) = wholenumberBestIndex 61868 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 32)) = wholenumberDisconnect 61869 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 40)) = wholenumberDisconnect 61870 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 48)) = wholenumberOpen 61871 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 56)) = wholenumberClose 61872 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 64)) = wholenumberFilter 61873 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 72)) = wholenumberNext 61874 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 80)) = wholenumberEof 61875 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 88)) = wholenumberColumn 61876 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 96)) = wholenumberRowid 61877 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 8)) = devsymClose 61878 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 16)) = devsymRead 61879 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 24)) = writecrashWrite 61880 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 32)) = devsymTruncate 61881 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 40)) = devsymSync 61882 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 48)) = devsymFileSize 61883 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 56)) = devsymLock 61884 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 64)) = devsymUnlock 61885 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 72)) = devsymCheckReservedLock 61886 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 80)) = devsymFileControl 61887 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 88)) = writecrashSectorSize 61888 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 96)) = writecrashDeviceCharacteristics 61889 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 104)) = devsymShmMap 61890 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 112)) = devsymShmLock 61891 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 120)) = devsymShmBarrier 61892 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 128)) = devsymShmUnmap 61893 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 40)) = writecrashOpen 61894 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 48)) = devsymDelete 61895 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 56)) = devsymAccess 61896 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 64)) = devsymFullPathname 61897 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 104)) = devsymRandomness 61898 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 112)) = devsymSleep 61899 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 120)) = devsymCurrentTime 61900 } 61901 61902 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" 61903 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data