gitlab.com/CoiaPrant/sqlite3@v1.19.1/internal/testfixture/testfixture_linux_ppc64le.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_ppc64le.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_ARCH_PPC = 1 563 X_ARCH_PPC64 = 1 564 X_ARCH_PPCGR = 1 565 X_ARCH_PPCSQ = 1 566 X_ARCH_PWR4 = 1 567 X_ARCH_PWR5 = 1 568 X_ARCH_PWR5X = 1 569 X_ARCH_PWR6 = 1 570 X_ARCH_PWR7 = 1 571 X_ARCH_PWR8 = 1 572 X_ASSERT_H = 1 573 X_ATFILE_SOURCE = 1 574 X_BITS_STDIO_LIM_H = 1 575 X_BITS_TIME64_H = 1 576 X_BITS_TYPESIZES_H = 1 577 X_BITS_TYPES_H = 1 578 X_BITS_TYPES_LOCALE_T_H = 1 579 X_BITS_TYPES___LOCALE_T_H = 1 580 X_BSD_SIZE_T_ = 0 581 X_BSD_SIZE_T_DEFINED_ = 0 582 X_CALL_ELF = 2 583 X_CALL_LINUX = 1 584 X_DEFAULT_SOURCE = 1 585 X_FEATURES_H = 1 586 X_FILE_OFFSET_BITS = 64 587 X_FTS5_H = 0 588 X_GCC_SIZE_T = 0 589 X_HAVE_SQLITE_CONFIG_H = 1 590 X_IOFBF = 0 591 X_IOLBF = 1 592 X_IONBF = 2 593 X_IO_EOF_SEEN = 0x0010 594 X_IO_ERR_SEEN = 0x0020 595 X_IO_USER_LOCK = 0x8000 596 X_LITTLE_ENDIAN = 1 597 X_LP64 = 1 598 X_POSIX_C_SOURCE = 200809 599 X_POSIX_SOURCE = 1 600 X_SIZET_ = 0 601 X_SIZE_T = 0 602 X_SIZE_T_ = 0 603 X_SIZE_T_DECLARED = 0 604 X_SIZE_T_DEFINED = 0 605 X_SIZE_T_DEFINED_ = 0 606 X_SQLITE3RTREE_H_ = 0 607 X_STDARG_H = 0 608 X_STDC_PREDEF_H = 1 609 X_STDIO_H = 1 610 X_STRINGS_H = 1 611 X_STRING_H = 1 612 X_SYS_CDEFS_H = 1 613 X_SYS_SIZE_T_H = 0 614 X_T_SIZE = 0 615 X_T_SIZE_ = 0 616 X_VA_LIST = 0 617 X_VA_LIST_ = 0 618 X_VA_LIST_DEFINED = 0 619 X_VA_LIST_T_H = 0 620 Linux = 1 621 Unix = 1 622 CRTIMPORT = 0 623 DLLIMPORT = 0 624 INLINE = 0 625 MP_DIGIT_DECLARED = 0 626 MP_INT_DECLARED = 0 627 NUM_STATIC_TOKENS = 20 628 SQLITE_TCLAPI = 0 629 TCL_ALLOW_INLINE_COMPILATION = 0x20000 630 TCL_ALL_EVENTS = -3 631 TCL_ALPHA_RELEASE = 0 632 TCL_APPEND_VALUE = 4 633 TCL_ARGV_CONSTANT = 15 634 TCL_ARGV_END = 23 635 TCL_ARGV_FLOAT = 19 636 TCL_ARGV_FUNC = 20 637 TCL_ARGV_GENFUNC = 21 638 TCL_ARGV_HELP = 22 639 TCL_ARGV_INT = 16 640 TCL_ARGV_REST = 18 641 TCL_ARGV_STRING = 17 642 TCL_BETA_RELEASE = 1 643 TCL_BREAK = 3 644 TCL_CANCEL_UNWIND = 0x100000 645 TCL_CHANNEL_THREAD_INSERT = 0 646 TCL_CHANNEL_THREAD_REMOVE = 1 647 TCL_CLOSE_READ = 2 648 TCL_CLOSE_WRITE = 4 649 TCL_CONTINUE = 4 650 TCL_CONVERT_MULTIBYTE = -1 651 TCL_CONVERT_NOSPACE = -4 652 TCL_CONVERT_SYNTAX = -2 653 TCL_CONVERT_UNKNOWN = -3 654 TCL_CREATE_HARD_LINK = 0x02 655 TCL_CREATE_SYMBOLIC_LINK = 0x01 656 TCL_CUSTOM_PTR_KEYS = -1 657 TCL_CUSTOM_TYPE_KEYS = -2 658 TCL_DONT_QUOTE_HASH = 8 659 TCL_DONT_USE_BRACES = 1 660 TCL_DONT_WAIT = 2 661 TCL_DOUBLE_SPACE = 27 662 TCL_DSTRING_STATIC_SIZE = 200 663 TCL_ENCODING_CHAR_LIMIT = 0x10 664 TCL_ENCODING_END = 0x02 665 TCL_ENCODING_NO_TERMINATE = 0x08 666 TCL_ENCODING_START = 0x01 667 TCL_ENCODING_STOPONERROR = 0x04 668 TCL_ENFORCE_MODE = 16 669 TCL_ENSEMBLE_PREFIX = 0x02 670 TCL_ERROR = 1 671 TCL_EVAL_DIRECT = 0x040000 672 TCL_EVAL_GLOBAL = 0x020000 673 TCL_EVAL_INVOKE = 0x080000 674 TCL_EVAL_NOERR = 0x200000 675 TCL_EXACT = 1 676 TCL_EXCEPTION = 8 677 TCL_FILE_EVENTS = 8 678 TCL_FINAL_RELEASE = 2 679 TCL_GLOBAL_ONLY = 1 680 TCL_GLOB_PERM_HIDDEN = 2 681 TCL_GLOB_PERM_R = 4 682 TCL_GLOB_PERM_RONLY = 1 683 TCL_GLOB_PERM_W = 8 684 TCL_GLOB_PERM_X = 16 685 TCL_GLOB_TYPE_BLOCK = 1 686 TCL_GLOB_TYPE_CHAR = 2 687 TCL_GLOB_TYPE_DIR = 4 688 TCL_GLOB_TYPE_FILE = 16 689 TCL_GLOB_TYPE_LINK = 32 690 TCL_GLOB_TYPE_MOUNT = 128 691 TCL_GLOB_TYPE_PIPE = 8 692 TCL_GLOB_TYPE_SOCK = 64 693 TCL_HASH_KEY_RANDOMIZE_HASH = 0x1 694 TCL_HASH_KEY_STORE_HASH = 1 695 TCL_HASH_KEY_SYSTEM_HASH = 0x2 696 TCL_HASH_KEY_TYPE_VERSION = 1 697 TCL_IDLE_EVENTS = 32 698 TCL_INTEGER_SPACE = 24 699 TCL_INTERP_DESTROYED = 0x100 700 TCL_LEAVE_ERR_MSG = 0x200 701 TCL_LIMIT_COMMANDS = 0x01 702 TCL_LIMIT_TIME = 0x02 703 TCL_LINK_BOOLEAN = 3 704 TCL_LINK_CHAR = 6 705 TCL_LINK_DOUBLE = 2 706 TCL_LINK_FLOAT = 13 707 TCL_LINK_INT = 1 708 TCL_LINK_LONG = 11 709 TCL_LINK_READ_ONLY = 0x80 710 TCL_LINK_SHORT = 8 711 TCL_LINK_STRING = 4 712 TCL_LINK_UCHAR = 7 713 TCL_LINK_UINT = 10 714 TCL_LINK_ULONG = 12 715 TCL_LINK_USHORT = 9 716 TCL_LINK_WIDE_INT = 5 717 TCL_LINK_WIDE_UINT = 14 718 TCL_LIST_ELEMENT = 8 719 TCL_LL_MODIFIER = "ll" 720 TCL_LOAD_GLOBAL = 1 721 TCL_LOAD_LAZY = 2 722 TCL_MAJOR_VERSION = 8 723 TCL_MATCH_NOCASE = 1 724 TCL_MAX_PREC = 17 725 TCL_MINOR_VERSION = 6 726 TCL_MODE_BLOCKING = 0 727 TCL_MODE_NONBLOCKING = 1 728 TCL_NAMESPACE_ONLY = 2 729 TCL_NORETURN1 = 0 730 TCL_NO_EVAL = 0x010000 731 TCL_OK = 0 732 TCL_ONE_WORD_KEYS = 1 733 TCL_PARSE_BAD_NUMBER = 9 734 TCL_PARSE_BRACE_EXTRA = 2 735 TCL_PARSE_MISSING_BRACE = 3 736 TCL_PARSE_MISSING_BRACKET = 4 737 TCL_PARSE_MISSING_PAREN = 5 738 TCL_PARSE_MISSING_QUOTE = 6 739 TCL_PARSE_MISSING_VAR_BRACE = 7 740 TCL_PARSE_PART1 = 0x400 741 TCL_PARSE_QUOTE_EXTRA = 1 742 TCL_PARSE_SUCCESS = 0 743 TCL_PARSE_SYNTAX = 8 744 TCL_PATCH_LEVEL = "8.6.11" 745 TCL_READABLE = 2 746 TCL_REG_ADVANCED = 000003 747 TCL_REG_ADVF = 000002 748 TCL_REG_BASIC = 000000 749 TCL_REG_CANMATCH = 001000 750 TCL_REG_EXPANDED = 000040 751 TCL_REG_EXTENDED = 000001 752 TCL_REG_NEWLINE = 000300 753 TCL_REG_NLANCH = 000200 754 TCL_REG_NLSTOP = 000100 755 TCL_REG_NOCASE = 000010 756 TCL_REG_NOSUB = 000020 757 TCL_REG_NOTBOL = 0001 758 TCL_REG_NOTEOL = 0002 759 TCL_REG_QUOTE = 000004 760 TCL_RELEASE_LEVEL = 2 761 TCL_RELEASE_SERIAL = 11 762 TCL_RESULT_SIZE = 200 763 TCL_RETURN = 2 764 TCL_SERVICE_ALL = 1 765 TCL_SERVICE_NONE = 0 766 TCL_SMALL_HASH_TABLE = 4 767 TCL_STDERR = 8 768 TCL_STDIN = 2 769 TCL_STDOUT = 4 770 TCL_STORAGE_CLASS = 0 771 TCL_STRING_KEYS = 0 772 TCL_SUBST_ALL = 007 773 TCL_SUBST_BACKSLASHES = 004 774 TCL_SUBST_COMMANDS = 001 775 TCL_SUBST_VARIABLES = 002 776 TCL_THREAD_CREATE_RETURN = 0 777 TCL_THREAD_JOINABLE = 1 778 TCL_THREAD_NOFLAGS = 0 779 TCL_THREAD_STACK_DEFAULT = 0 780 TCL_TIMER_EVENTS = 16 781 TCL_TOKEN_BS = 8 782 TCL_TOKEN_COMMAND = 16 783 TCL_TOKEN_EXPAND_WORD = 256 784 TCL_TOKEN_OPERATOR = 128 785 TCL_TOKEN_SIMPLE_WORD = 2 786 TCL_TOKEN_SUB_EXPR = 64 787 TCL_TOKEN_TEXT = 4 788 TCL_TOKEN_VARIABLE = 32 789 TCL_TOKEN_WORD = 1 790 TCL_TRACE_ARRAY = 0x800 791 TCL_TRACE_DELETE = 0x4000 792 TCL_TRACE_DESTROYED = 0x80 793 TCL_TRACE_OLD_STYLE = 0x1000 794 TCL_TRACE_READS = 0x10 795 TCL_TRACE_RENAME = 0x2000 796 TCL_TRACE_RESULT_DYNAMIC = 0x8000 797 TCL_TRACE_RESULT_OBJECT = 0x10000 798 TCL_TRACE_UNSETS = 0x40 799 TCL_TRACE_WRITES = 0x20 800 TCL_UNLOAD_DETACH_FROM_INTERPRETER = 1 801 TCL_UNLOAD_DETACH_FROM_PROCESS = 2 802 TCL_UTF_MAX = 3 803 TCL_VERSION = "8.6" 804 TCL_WINDOW_EVENTS = 4 805 TCL_WRITABLE = 4 806 TCL_ZLIB_COMPRESS_BEST = 9 807 TCL_ZLIB_COMPRESS_DEFAULT = -1 808 TCL_ZLIB_COMPRESS_FAST = 1 809 TCL_ZLIB_COMPRESS_NONE = 0 810 TCL_ZLIB_FINALIZE = 4 811 TCL_ZLIB_FLUSH = 2 812 TCL_ZLIB_FORMAT_AUTO = 8 813 TCL_ZLIB_FORMAT_GZIP = 4 814 TCL_ZLIB_FORMAT_RAW = 1 815 TCL_ZLIB_FORMAT_ZLIB = 2 816 TCL_ZLIB_FULLFLUSH = 3 817 TCL_ZLIB_NO_FLUSH = 0 818 TCL_ZLIB_STREAM_DEFLATE = 16 819 TCL_ZLIB_STREAM_INFLATE = 32 820 X_CLIENTDATA = 0 821 X_TCL = 0 822 X_TCLDECLS = 0 823 X_TCLPLATDECLS = 0 824 X_FTSINT_H = 0 825 FTS3_TOK_SCHEMA = "CREATE TABLE x(input HIDDEN, token, start, end, position)" 826 APND_MARK_FOS_SZ = 8 827 APND_MARK_PREFIX = "Start-Of-SQLite3-" 828 APND_MARK_PREFIX_SZ = 17 829 APND_MARK_SIZE = 25 830 APND_MAX_SIZE = 1073741824 831 APND_ROUNDUP = 4096 832 SQLITE3EXT_H = 0 833 SQLITE_EXTENSION_INIT1 = 0 834 SQLITE_EXTENSION_INIT3 = 0 835 AMATCH_COL_COMMAND = 3 836 AMATCH_COL_DISTANCE = 1 837 AMATCH_COL_LANGUAGE = 2 838 AMATCH_COL_NWORD = 4 839 AMATCH_COL_WORD = 0 840 AMATCH_MX_COST = 1000 841 AMATCH_MX_LANGID = 2147483647 842 AMATCH_MX_LENGTH = 50 843 BIG_ENDIAN = 4321 844 BYTE_ORDER = 1234 845 EXIT_FAILURE = 1 846 EXIT_SUCCESS = 0 847 FD_SETSIZE = 1024 848 LITTLE_ENDIAN = 1234 849 PDP_ENDIAN = 3412 850 RAND_MAX = 2147483647 851 WCONTINUED = 8 852 WEXITED = 4 853 WNOHANG = 1 854 WNOWAIT = 0x01000000 855 WSTOPPED = 2 856 WUNTRACED = 2 857 X_ALLOCA_H = 1 858 X_BITS_BYTESWAP_H = 1 859 X_BITS_ENDIANNESS_H = 1 860 X_BITS_ENDIAN_H = 1 861 X_BITS_FLOATN_COMMON_H = 0 862 X_BITS_FLOATN_H = 0 863 X_BITS_PTHREADTYPES_ARCH_H = 1 864 X_BITS_PTHREADTYPES_COMMON_H = 1 865 X_BITS_STDINT_INTN_H = 1 866 X_BITS_UINTN_IDENTITY_H = 1 867 X_CTYPE_H = 1 868 X_ENDIAN_H = 1 869 X_GCC_WCHAR_T = 0 870 X_RWLOCK_INTERNAL_H = 0 871 X_STDLIB_H = 1 872 X_STRUCT_TIMESPEC = 1 873 X_SYS_SELECT_H = 1 874 X_SYS_TYPES_H = 1 875 X_THREAD_MUTEX_INTERNAL_H = 1 876 X_THREAD_SHARED_TYPES_H = 1 877 X_T_WCHAR = 0 878 X_T_WCHAR_ = 0 879 X_WCHAR_T = 0 880 X_WCHAR_T_ = 0 881 X_WCHAR_T_DECLARED = 0 882 X_WCHAR_T_DEFINED = 0 883 X_WCHAR_T_DEFINED_ = 0 884 X_WCHAR_T_H = 0 885 CARRAY_COLUMN_COUNT = 2 886 CARRAY_COLUMN_CTYPE = 3 887 CARRAY_COLUMN_POINTER = 1 888 CARRAY_COLUMN_VALUE = 0 889 CARRAY_DOUBLE = 2 890 CARRAY_INT32 = 0 891 CARRAY_INT64 = 1 892 CARRAY_TEXT = 3 893 CLOSURE_COL_DEPTH = 1 894 CLOSURE_COL_ID = 0 895 CLOSURE_COL_IDCOLUMN = 4 896 CLOSURE_COL_PARENTCOLUMN = 5 897 CLOSURE_COL_ROOT = 2 898 CLOSURE_COL_TABLENAME = 3 899 CSVTEST_FIDX = 0x0001 900 CSV_INBUFSZ = 1024 901 CSV_MXERR = 200 902 EXPLN_COLUMN_ADDR = 0 903 EXPLN_COLUMN_COMMENT = 7 904 EXPLN_COLUMN_OPCODE = 1 905 EXPLN_COLUMN_P1 = 2 906 EXPLN_COLUMN_P2 = 3 907 EXPLN_COLUMN_P3 = 4 908 EXPLN_COLUMN_P4 = 5 909 EXPLN_COLUMN_P5 = 6 910 EXPLN_COLUMN_SQL = 8 911 ACCESSPERMS = 511 912 AIO_PRIO_DELTA_MAX = 20 913 ALLPERMS = 4095 914 AT_EACCESS = 0x200 915 AT_FDCWD = -100 916 AT_REMOVEDIR = 0x200 917 AT_SYMLINK_FOLLOW = 0x400 918 AT_SYMLINK_NOFOLLOW = 0x100 919 CLOCK_BOOTTIME = 7 920 CLOCK_BOOTTIME_ALARM = 9 921 CLOCK_MONOTONIC = 1 922 CLOCK_MONOTONIC_COARSE = 6 923 CLOCK_MONOTONIC_RAW = 4 924 CLOCK_PROCESS_CPUTIME_ID = 2 925 CLOCK_REALTIME = 0 926 CLOCK_REALTIME_ALARM = 8 927 CLOCK_REALTIME_COARSE = 5 928 CLOCK_TAI = 11 929 CLOCK_THREAD_CPUTIME_ID = 3 930 DEFFILEMODE = 438 931 DELAYTIMER_MAX = 2147483647 932 E2BIG = 7 933 EACCES = 13 934 EADDRINUSE = 98 935 EADDRNOTAVAIL = 99 936 EADV = 68 937 EAFNOSUPPORT = 97 938 EAGAIN = 11 939 EALREADY = 114 940 EBADE = 52 941 EBADF = 9 942 EBADFD = 77 943 EBADMSG = 74 944 EBADR = 53 945 EBADRQC = 56 946 EBADSLT = 57 947 EBFONT = 59 948 EBUSY = 16 949 ECANCELED = 125 950 ECHILD = 10 951 ECHRNG = 44 952 ECOMM = 70 953 ECONNABORTED = 103 954 ECONNREFUSED = 111 955 ECONNRESET = 104 956 EDEADLK = 35 957 EDEADLOCK = 58 958 EDESTADDRREQ = 89 959 EDOM = 33 960 EDOTDOT = 73 961 EDQUOT = 122 962 EEXIST = 17 963 EFAULT = 14 964 EFBIG = 27 965 EHOSTDOWN = 112 966 EHOSTUNREACH = 113 967 EHWPOISON = 133 968 EIDRM = 43 969 EILSEQ = 84 970 EINPROGRESS = 115 971 EINTR = 4 972 EINVAL = 22 973 EIO = 5 974 EISCONN = 106 975 EISDIR = 21 976 EISNAM = 120 977 EKEYEXPIRED = 127 978 EKEYREJECTED = 129 979 EKEYREVOKED = 128 980 EL2HLT = 51 981 EL2NSYNC = 45 982 EL3HLT = 46 983 EL3RST = 47 984 ELIBACC = 79 985 ELIBBAD = 80 986 ELIBEXEC = 83 987 ELIBMAX = 82 988 ELIBSCN = 81 989 ELNRNG = 48 990 ELOOP = 40 991 EMEDIUMTYPE = 124 992 EMFILE = 24 993 EMLINK = 31 994 EMSGSIZE = 90 995 EMULTIHOP = 72 996 ENAMETOOLONG = 36 997 ENAVAIL = 119 998 ENETDOWN = 100 999 ENETRESET = 102 1000 ENETUNREACH = 101 1001 ENFILE = 23 1002 ENOANO = 55 1003 ENOBUFS = 105 1004 ENOCSI = 50 1005 ENODATA = 61 1006 ENODEV = 19 1007 ENOENT = 2 1008 ENOEXEC = 8 1009 ENOKEY = 126 1010 ENOLCK = 37 1011 ENOLINK = 67 1012 ENOMEDIUM = 123 1013 ENOMEM = 12 1014 ENOMSG = 42 1015 ENONET = 64 1016 ENOPKG = 65 1017 ENOPROTOOPT = 92 1018 ENOSPC = 28 1019 ENOSR = 63 1020 ENOSTR = 60 1021 ENOSYS = 38 1022 ENOTBLK = 15 1023 ENOTCONN = 107 1024 ENOTDIR = 20 1025 ENOTEMPTY = 39 1026 ENOTNAM = 118 1027 ENOTRECOVERABLE = 131 1028 ENOTSOCK = 88 1029 ENOTSUP = 95 1030 ENOTTY = 25 1031 ENOTUNIQ = 76 1032 ENXIO = 6 1033 EOPNOTSUPP = 95 1034 EOVERFLOW = 75 1035 EOWNERDEAD = 130 1036 EPERM = 1 1037 EPFNOSUPPORT = 96 1038 EPIPE = 32 1039 EPROTO = 71 1040 EPROTONOSUPPORT = 93 1041 EPROTOTYPE = 91 1042 ERANGE = 34 1043 EREMCHG = 78 1044 EREMOTE = 66 1045 EREMOTEIO = 121 1046 ERESTART = 85 1047 ERFKILL = 132 1048 EROFS = 30 1049 ESHUTDOWN = 108 1050 ESOCKTNOSUPPORT = 94 1051 ESPIPE = 29 1052 ESRCH = 3 1053 ESRMNT = 69 1054 ESTALE = 116 1055 ESTRPIPE = 86 1056 ETIME = 62 1057 ETIMEDOUT = 110 1058 ETOOMANYREFS = 109 1059 ETXTBSY = 26 1060 EUCLEAN = 117 1061 EUNATCH = 49 1062 EUSERS = 87 1063 EWOULDBLOCK = 11 1064 EXDEV = 18 1065 EXFULL = 54 1066 FAPPEND = 1024 1067 FASYNC = 8192 1068 FD_CLOEXEC = 1 1069 FFSYNC = 1052672 1070 FNDELAY = 2048 1071 FNONBLOCK = 2048 1072 FSDIR_COLUMN_DATA = 3 1073 FSDIR_COLUMN_DIR = 5 1074 FSDIR_COLUMN_MODE = 1 1075 FSDIR_COLUMN_MTIME = 2 1076 FSDIR_COLUMN_NAME = 0 1077 FSDIR_COLUMN_PATH = 4 1078 FSDIR_SCHEMA = "(name,mode,mtime,data,path HIDDEN,dir HIDDEN)" 1079 F_DUPFD = 0 1080 F_DUPFD_CLOEXEC = 1030 1081 F_EXLCK = 4 1082 F_GETFD = 1 1083 F_GETFL = 3 1084 F_GETLK = 12 1085 F_GETLK64 = 12 1086 F_GETOWN = 9 1087 F_LOCK = 1 1088 F_OK = 0 1089 F_RDLCK = 0 1090 F_SETFD = 2 1091 F_SETFL = 4 1092 F_SETLK = 13 1093 F_SETLK64 = 13 1094 F_SETLKW = 14 1095 F_SETLKW64 = 14 1096 F_SETOWN = 8 1097 F_SHLCK = 8 1098 F_TEST = 3 1099 F_TLOCK = 2 1100 F_ULOCK = 0 1101 F_UNLCK = 2 1102 F_WRLCK = 1 1103 HOST_NAME_MAX = 64 1104 LOCK_EX = 2 1105 LOCK_NB = 4 1106 LOCK_SH = 1 1107 LOCK_UN = 8 1108 LOGIN_NAME_MAX = 256 1109 L_INCR = 1 1110 L_SET = 0 1111 L_XTND = 2 1112 MAXNAMLEN = 255 1113 MAX_CANON = 255 1114 MAX_INPUT = 255 1115 MQ_PRIO_MAX = 32768 1116 NAME_MAX = 255 1117 NGROUPS_MAX = 65536 1118 O_ACCMODE = 0003 1119 O_APPEND = 02000 1120 O_ASYNC = 020000 1121 O_CLOEXEC = 524288 1122 O_CREAT = 0100 1123 O_DIRECTORY = 16384 1124 O_DSYNC = 4096 1125 O_EXCL = 0200 1126 O_FSYNC = 1052672 1127 O_NDELAY = 2048 1128 O_NOCTTY = 0400 1129 O_NOFOLLOW = 32768 1130 O_NONBLOCK = 04000 1131 O_RDONLY = 00 1132 O_RDWR = 02 1133 O_RSYNC = 1052672 1134 O_SYNC = 04010000 1135 O_TRUNC = 01000 1136 O_WRONLY = 01 1137 PATH_MAX = 4096 1138 PIPE_BUF = 4096 1139 POSIX_FADV_DONTNEED = 4 1140 POSIX_FADV_NOREUSE = 5 1141 POSIX_FADV_NORMAL = 0 1142 POSIX_FADV_RANDOM = 1 1143 POSIX_FADV_SEQUENTIAL = 2 1144 POSIX_FADV_WILLNEED = 3 1145 PTHREAD_DESTRUCTOR_ITERATIONS = 4 1146 PTHREAD_KEYS_MAX = 1024 1147 PTHREAD_STACK_MIN = 131072 1148 RTSIG_MAX = 32 1149 R_OK = 4 1150 SEM_VALUE_MAX = 2147483647 1151 STDERR_FILENO = 2 1152 STDIN_FILENO = 0 1153 STDOUT_FILENO = 1 1154 S_BLKSIZE = 512 1155 S_IEXEC = 64 1156 S_IFBLK = 24576 1157 S_IFCHR = 8192 1158 S_IFDIR = 16384 1159 S_IFIFO = 4096 1160 S_IFLNK = 40960 1161 S_IFMT = 61440 1162 S_IFREG = 32768 1163 S_IFSOCK = 49152 1164 S_IREAD = 256 1165 S_IRGRP = 32 1166 S_IROTH = 4 1167 S_IRUSR = 256 1168 S_IRWXG = 56 1169 S_IRWXO = 7 1170 S_IRWXU = 448 1171 S_ISGID = 1024 1172 S_ISUID = 2048 1173 S_ISVTX = 512 1174 S_IWGRP = 16 1175 S_IWOTH = 2 1176 S_IWRITE = 128 1177 S_IWUSR = 128 1178 S_IXGRP = 8 1179 S_IXOTH = 1 1180 S_IXUSR = 64 1181 TIMER_ABSTIME = 1 1182 TIME_UTC = 1 1183 TTY_NAME_MAX = 32 1184 UTIME_NOW = 1073741823 1185 UTIME_OMIT = 1073741822 1186 W_OK = 2 1187 XATTR_LIST_MAX = 65536 1188 XATTR_NAME_MAX = 255 1189 XATTR_SIZE_MAX = 65536 1190 X_OK = 1 1191 X_ASM_GENERIC_ERRNO_BASE_H = 0 1192 X_ASM_GENERIC_ERRNO_H = 0 1193 X_ASM_POWERPC_ERRNO_H = 0 1194 X_BITS_ERRNO_H = 1 1195 X_BITS_POSIX1_LIM_H = 1 1196 X_BITS_POSIX_OPT_H = 1 1197 X_BITS_STAT_H = 1 1198 X_BITS_TIME_H = 1 1199 X_DIRENT_H = 1 1200 X_DIRENT_HAVE_D_OFF = 0 1201 X_DIRENT_HAVE_D_RECLEN = 0 1202 X_DIRENT_HAVE_D_TYPE = 0 1203 X_DIRENT_MATCHES_DIRENT64 = 1 1204 X_ERRNO_H = 1 1205 X_FCNTL_H = 1 1206 X_GETOPT_CORE_H = 1 1207 X_GETOPT_POSIX_H = 1 1208 X_LFS64_ASYNCHRONOUS_IO = 1 1209 X_LFS64_LARGEFILE = 1 1210 X_LFS64_STDIO = 1 1211 X_LFS_ASYNCHRONOUS_IO = 1 1212 X_LFS_LARGEFILE = 1 1213 X_LINUX_LIMITS_H = 0 1214 X_MKNOD_VER = 1 1215 X_MKNOD_VER_LINUX = 1 1216 X_MKNOD_VER_SVR4 = 2 1217 X_POSIX2_CHAR_TERM = 200809 1218 X_POSIX2_C_BIND = 200809 1219 X_POSIX2_C_DEV = 200809 1220 X_POSIX2_C_VERSION = 200809 1221 X_POSIX2_LOCALEDEF = 200809 1222 X_POSIX2_SW_DEV = 200809 1223 X_POSIX2_VERSION = 200809 1224 X_POSIX_ADVISORY_INFO = 200809 1225 X_POSIX_AIO_LISTIO_MAX = 2 1226 X_POSIX_AIO_MAX = 1 1227 X_POSIX_ARG_MAX = 4096 1228 X_POSIX_ASYNCHRONOUS_IO = 200809 1229 X_POSIX_ASYNC_IO = 1 1230 X_POSIX_BARRIERS = 200809 1231 X_POSIX_CHILD_MAX = 25 1232 X_POSIX_CHOWN_RESTRICTED = 0 1233 X_POSIX_CLOCKRES_MIN = 20000000 1234 X_POSIX_CLOCK_SELECTION = 200809 1235 X_POSIX_CPUTIME = 0 1236 X_POSIX_DELAYTIMER_MAX = 32 1237 X_POSIX_FSYNC = 200809 1238 X_POSIX_HOST_NAME_MAX = 255 1239 X_POSIX_IPV6 = 200809 1240 X_POSIX_JOB_CONTROL = 1 1241 X_POSIX_LINK_MAX = 8 1242 X_POSIX_LOGIN_NAME_MAX = 9 1243 X_POSIX_MAPPED_FILES = 200809 1244 X_POSIX_MAX_CANON = 255 1245 X_POSIX_MAX_INPUT = 255 1246 X_POSIX_MEMLOCK = 200809 1247 X_POSIX_MEMLOCK_RANGE = 200809 1248 X_POSIX_MEMORY_PROTECTION = 200809 1249 X_POSIX_MESSAGE_PASSING = 200809 1250 X_POSIX_MONOTONIC_CLOCK = 0 1251 X_POSIX_MQ_OPEN_MAX = 8 1252 X_POSIX_MQ_PRIO_MAX = 32 1253 X_POSIX_NAME_MAX = 14 1254 X_POSIX_NGROUPS_MAX = 8 1255 X_POSIX_NO_TRUNC = 1 1256 X_POSIX_OPEN_MAX = 20 1257 X_POSIX_PATH_MAX = 256 1258 X_POSIX_PIPE_BUF = 512 1259 X_POSIX_PRIORITIZED_IO = 200809 1260 X_POSIX_PRIORITY_SCHEDULING = 200809 1261 X_POSIX_RAW_SOCKETS = 200809 1262 X_POSIX_READER_WRITER_LOCKS = 200809 1263 X_POSIX_REALTIME_SIGNALS = 200809 1264 X_POSIX_REENTRANT_FUNCTIONS = 1 1265 X_POSIX_REGEXP = 1 1266 X_POSIX_RE_DUP_MAX = 255 1267 X_POSIX_RTSIG_MAX = 8 1268 X_POSIX_SAVED_IDS = 1 1269 X_POSIX_SEMAPHORES = 200809 1270 X_POSIX_SEM_NSEMS_MAX = 256 1271 X_POSIX_SEM_VALUE_MAX = 32767 1272 X_POSIX_SHARED_MEMORY_OBJECTS = 200809 1273 X_POSIX_SHELL = 1 1274 X_POSIX_SIGQUEUE_MAX = 32 1275 X_POSIX_SPAWN = 200809 1276 X_POSIX_SPIN_LOCKS = 200809 1277 X_POSIX_SPORADIC_SERVER = -1 1278 X_POSIX_SSIZE_MAX = 32767 1279 X_POSIX_STREAM_MAX = 8 1280 X_POSIX_SYMLINK_MAX = 255 1281 X_POSIX_SYMLOOP_MAX = 8 1282 X_POSIX_SYNCHRONIZED_IO = 200809 1283 X_POSIX_THREADS = 200809 1284 X_POSIX_THREAD_ATTR_STACKADDR = 200809 1285 X_POSIX_THREAD_ATTR_STACKSIZE = 200809 1286 X_POSIX_THREAD_CPUTIME = 0 1287 X_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 4 1288 X_POSIX_THREAD_KEYS_MAX = 128 1289 X_POSIX_THREAD_PRIORITY_SCHEDULING = 200809 1290 X_POSIX_THREAD_PRIO_INHERIT = 200809 1291 X_POSIX_THREAD_PRIO_PROTECT = 200809 1292 X_POSIX_THREAD_PROCESS_SHARED = 200809 1293 X_POSIX_THREAD_ROBUST_PRIO_INHERIT = 200809 1294 X_POSIX_THREAD_ROBUST_PRIO_PROTECT = -1 1295 X_POSIX_THREAD_SAFE_FUNCTIONS = 200809 1296 X_POSIX_THREAD_SPORADIC_SERVER = -1 1297 X_POSIX_THREAD_THREADS_MAX = 64 1298 X_POSIX_TIMEOUTS = 200809 1299 X_POSIX_TIMERS = 200809 1300 X_POSIX_TIMER_MAX = 32 1301 X_POSIX_TRACE = -1 1302 X_POSIX_TRACE_EVENT_FILTER = -1 1303 X_POSIX_TRACE_INHERIT = -1 1304 X_POSIX_TRACE_LOG = -1 1305 X_POSIX_TTY_NAME_MAX = 9 1306 X_POSIX_TYPED_MEMORY_OBJECTS = -1 1307 X_POSIX_TZNAME_MAX = 6 1308 X_POSIX_V6_LP64_OFF64 = 1 1309 X_POSIX_V6_LPBIG_OFFBIG = -1 1310 X_POSIX_V7_LP64_OFF64 = 1 1311 X_POSIX_V7_LPBIG_OFFBIG = -1 1312 X_POSIX_VDISABLE = 0 1313 X_POSIX_VERSION = 200809 1314 X_STATBUF_ST_BLKSIZE = 0 1315 X_STATBUF_ST_NSEC = 0 1316 X_STATBUF_ST_RDEV = 0 1317 X_STAT_VER = 1 1318 X_STAT_VER_KERNEL = 1 1319 X_STAT_VER_LINUX = 3 1320 X_STAT_VER_LINUX_OLD = 1 1321 X_STAT_VER_SVR4 = 2 1322 X_SYS_STAT_H = 1 1323 X_SYS_TIME_H = 1 1324 X_TIME_H = 1 1325 X_UNISTD_H = 1 1326 X_UTIME_H = 1 1327 X_XBS5_LP64_OFF64 = 1 1328 X_XBS5_LPBIG_OFFBIG = -1 1329 X_XOPEN_ENH_I18N = 1 1330 X_XOPEN_LEGACY = 1 1331 X_XOPEN_REALTIME = 1 1332 X_XOPEN_REALTIME_THREADS = 1 1333 X_XOPEN_SHM = 1 1334 X_XOPEN_UNIX = 1 1335 X_XOPEN_VERSION = 700 1336 X_XOPEN_XCU_VERSION = 4 1337 X_XOPEN_XPG2 = 1 1338 X_XOPEN_XPG3 = 1 1339 X_XOPEN_XPG4 = 1 1340 FUZZER_HASH = 4001 1341 FUZZER_MX_COST = 1000 1342 FUZZER_MX_LENGTH = 50 1343 FUZZER_MX_OUTPUT_LENGTH = 100 1344 FUZZER_MX_RULEID = 2147483647 1345 FUZZER_NQUEUE = 20 1346 CC_AND = 24 1347 CC_BANG = 15 1348 CC_COMMA = 23 1349 CC_DIGIT = 3 1350 CC_DOLLAR = 4 1351 CC_DOT = 26 1352 CC_EQ = 14 1353 CC_GT = 13 1354 CC_ID = 2 1355 CC_ILLEGAL = 27 1356 CC_KYWD = 1 1357 CC_LP = 17 1358 CC_LT = 12 1359 CC_MINUS = 11 1360 CC_PERCENT = 22 1361 CC_PIPE = 10 1362 CC_PLUS = 20 1363 CC_QUOTE = 8 1364 CC_QUOTE2 = 9 1365 CC_RP = 18 1366 CC_SEMI = 19 1367 CC_SLASH = 16 1368 CC_SPACE = 7 1369 CC_STAR = 21 1370 CC_TILDA = 25 1371 CC_VARALPHA = 5 1372 CC_VARNUM = 6 1373 CC_X = 0 1374 TK_BITAND = 3 1375 TK_BITNOT = 3 1376 TK_BITOR = 3 1377 TK_BLOB = 2 1378 TK_COMMA = 3 1379 TK_CONCAT = 3 1380 TK_DOT = 3 1381 TK_EQ = 3 1382 TK_ERROR = 4 1383 TK_FLOAT = 2 1384 TK_GE = 3 1385 TK_GT = 3 1386 TK_ID = 1 1387 TK_ILLEGAL = 4 1388 TK_INTEGER = 2 1389 TK_LE = 3 1390 TK_LITERAL = 2 1391 TK_LP = 3 1392 TK_LSHIFT = 3 1393 TK_LT = 3 1394 TK_MINUS = 3 1395 TK_NAME = 1 1396 TK_NE = 3 1397 TK_PLUS = 3 1398 TK_PUNCT = 3 1399 TK_REM = 3 1400 TK_RP = 3 1401 TK_RSHIFT = 3 1402 TK_SEMI = 3 1403 TK_SLASH = 3 1404 TK_SPACE = 0 1405 TK_STAR = 3 1406 TK_STRING = 2 1407 TK_VARIABLE = 2 1408 Deliberate_fall_through = 0 1409 QPVTAB_A = 6 1410 QPVTAB_B = 7 1411 QPVTAB_C = 8 1412 QPVTAB_CN = 2 1413 QPVTAB_D = 9 1414 QPVTAB_E = 10 1415 QPVTAB_FLAGS = 11 1416 QPVTAB_IX = 1 1417 QPVTAB_NONE = 12 1418 QPVTAB_OP = 3 1419 QPVTAB_RHS = 5 1420 QPVTAB_UX = 4 1421 QPVTAB_VN = 0 1422 RE_EOF = 0 1423 RE_OP_ACCEPT = 6 1424 RE_OP_ANY = 2 1425 RE_OP_ANYSTAR = 3 1426 RE_OP_BOUNDARY = 17 1427 RE_OP_CC_EXC = 8 1428 RE_OP_CC_INC = 7 1429 RE_OP_CC_RANGE = 10 1430 RE_OP_CC_VALUE = 9 1431 RE_OP_DIGIT = 13 1432 RE_OP_FORK = 4 1433 RE_OP_GOTO = 5 1434 RE_OP_MATCH = 1 1435 RE_OP_NOTDIGIT = 14 1436 RE_OP_NOTSPACE = 16 1437 RE_OP_NOTWORD = 12 1438 RE_OP_SPACE = 15 1439 RE_OP_WORD = 11 1440 SERIES_COLUMN_START = 1 1441 SERIES_COLUMN_STEP = 3 1442 SERIES_COLUMN_STOP = 2 1443 SERIES_COLUMN_VALUE = 0 1444 CCLASS_B = 2 1445 CCLASS_C = 3 1446 CCLASS_D = 4 1447 CCLASS_DIGIT = 10 1448 CCLASS_H = 5 1449 CCLASS_L = 6 1450 CCLASS_M = 8 1451 CCLASS_OTHER = 12 1452 CCLASS_R = 7 1453 CCLASS_SILENT = 0 1454 CCLASS_SPACE = 11 1455 CCLASS_VOWEL = 1 1456 CCLASS_Y = 9 1457 FINAL_INS_COST_DIV = 4 1458 SCRIPT_ARABIC = 0x0010 1459 SCRIPT_CYRILLIC = 0x0002 1460 SCRIPT_GREEK = 0x0004 1461 SCRIPT_HEBREW = 0x0008 1462 SCRIPT_LATIN = 0x0001 1463 SPELLFIX_COL_COMMAND = 11 1464 SPELLFIX_COL_DISTANCE = 2 1465 SPELLFIX_COL_LANGID = 3 1466 SPELLFIX_COL_MATCHLEN = 5 1467 SPELLFIX_COL_PHONEHASH = 6 1468 SPELLFIX_COL_RANK = 1 1469 SPELLFIX_COL_SCOPE = 8 1470 SPELLFIX_COL_SCORE = 4 1471 SPELLFIX_COL_SOUNDSLIKE = 10 1472 SPELLFIX_COL_SRCHCNT = 9 1473 SPELLFIX_COL_TOP = 7 1474 SPELLFIX_COL_WORD = 0 1475 SPELLFIX_IDXNUM_DIST = 48 1476 SPELLFIX_IDXNUM_DISTLE = 0x20 1477 SPELLFIX_IDXNUM_DISTLT = 0x10 1478 SPELLFIX_IDXNUM_LANGID = 0x02 1479 SPELLFIX_IDXNUM_MATCH = 0x01 1480 SPELLFIX_IDXNUM_ROWID = 0x40 1481 SPELLFIX_IDXNUM_SCOPE = 0x08 1482 SPELLFIX_IDXNUM_TOP = 0x04 1483 SPELLFIX_MX_HASH = 32 1484 SPELLFIX_MX_RUN = 1 1485 SQLITE_SPELLFIX_STACKALLOC_SZ = 1024 1486 SWARMVTAB_MAX_OPEN = 9 1487 SQLITE_RBU_STATE_CHECKPOINT = 3 1488 SQLITE_RBU_STATE_DONE = 4 1489 SQLITE_RBU_STATE_ERROR = 5 1490 SQLITE_RBU_STATE_MOVE = 2 1491 SQLITE_RBU_STATE_OAL = 1 1492 X_SQLITE3RBU_H = 0 1493 BTREE_APPEND = 0x08 1494 BTREE_APPLICATION_ID = 8 1495 BTREE_AUTOVACUUM_FULL = 1 1496 BTREE_AUTOVACUUM_INCR = 2 1497 BTREE_AUTOVACUUM_NONE = 0 1498 BTREE_AUXDELETE = 0x04 1499 BTREE_BLOBKEY = 2 1500 BTREE_BULKLOAD = 0x00000001 1501 BTREE_DATA_VERSION = 15 1502 BTREE_DEFAULT_CACHE_SIZE = 3 1503 BTREE_FILE_FORMAT = 2 1504 BTREE_FORDELETE = 0x00000008 1505 BTREE_FREE_PAGE_COUNT = 0 1506 BTREE_HINT_RANGE = 0 1507 BTREE_INCR_VACUUM = 7 1508 BTREE_INTKEY = 1 1509 BTREE_LARGEST_ROOT_PAGE = 4 1510 BTREE_MEMORY = 2 1511 BTREE_OMIT_JOURNAL = 1 1512 BTREE_PREFORMAT = 0x80 1513 BTREE_SAVEPOSITION = 0x02 1514 BTREE_SCHEMA_VERSION = 1 1515 BTREE_SEEK_EQ = 0x00000002 1516 BTREE_SINGLE = 4 1517 BTREE_TEXT_ENCODING = 5 1518 BTREE_UNORDERED = 8 1519 BTREE_USER_VERSION = 6 1520 BTREE_WRCSR = 0x00000004 1521 COLFLAG_BUSY = 0x0100 1522 COLFLAG_GENERATED = 0x0060 1523 COLFLAG_HASCOLL = 0x0200 1524 COLFLAG_HASTYPE = 0x0004 1525 COLFLAG_HIDDEN = 0x0002 1526 COLFLAG_NOEXPAND = 0x0400 1527 COLFLAG_NOINSERT = 0x0062 1528 COLFLAG_NOTAVAIL = 0x0080 1529 COLFLAG_PRIMKEY = 0x0001 1530 COLFLAG_SORTERREF = 0x0010 1531 COLFLAG_STORED = 0x0040 1532 COLFLAG_UNIQUE = 0x0008 1533 COLFLAG_VIRTUAL = 0x0020 1534 COLNAME_COLUMN = 4 1535 COLNAME_DATABASE = 2 1536 COLNAME_DECLTYPE = 1 1537 COLNAME_N = 5 1538 COLNAME_NAME = 0 1539 COLNAME_TABLE = 3 1540 COLTYPE_ANY = 1 1541 COLTYPE_BLOB = 2 1542 COLTYPE_CUSTOM = 0 1543 COLTYPE_INT = 3 1544 COLTYPE_INTEGER = 4 1545 COLTYPE_REAL = 5 1546 COLTYPE_TEXT = 6 1547 DBFLAG_EncodingFixed = 0x0040 1548 DBFLAG_InternalFunc = 0x0020 1549 DBFLAG_PreferBuiltin = 0x0002 1550 DBFLAG_SchemaChange = 0x0001 1551 DBFLAG_SchemaKnownOk = 0x0010 1552 DBFLAG_Vacuum = 0x0004 1553 DBFLAG_VacuumInto = 0x0008 1554 DB_ResetWanted = 0x0008 1555 DB_SchemaLoaded = 0x0001 1556 DB_UnresetViews = 0x0002 1557 ENAME_NAME = 0 1558 ENAME_SPAN = 1 1559 ENAME_TAB = 2 1560 EP_Agg = 0x000010 1561 EP_CanBeNull = 0x200000 1562 EP_Collate = 0x000200 1563 EP_Commuted = 0x000400 1564 EP_ConstFunc = 0x100000 1565 EP_DblQuoted = 0x000080 1566 EP_Distinct = 0x000004 1567 EP_FixedCol = 0x000020 1568 EP_FromDDL = 0x40000000 1569 EP_HasFunc = 0x000008 1570 EP_IfNullRow = 0x040000 1571 EP_Immutable = 0x02 1572 EP_InfixFunc = 0x000100 1573 EP_InnerON = 0x000002 1574 EP_IntValue = 0x000800 1575 EP_IsFalse = 0x20000000 1576 EP_IsTrue = 0x10000000 1577 EP_Leaf = 0x800000 1578 EP_MemToken = 0x020000 1579 EP_NoReduce = 0x01 1580 EP_OuterON = 0x000001 1581 EP_Propagate = 4194824 1582 EP_Quoted = 0x4000000 1583 EP_Reduced = 0x004000 1584 EP_Skip = 0x002000 1585 EP_Static = 0x8000000 1586 EP_Subquery = 0x400000 1587 EP_Subrtn = 0x2000000 1588 EP_TokenOnly = 0x010000 1589 EP_Unlikely = 0x080000 1590 EP_VarSelect = 0x000040 1591 EP_Win = 0x008000 1592 EP_WinFunc = 0x1000000 1593 EP_xIsSelect = 0x001000 1594 EU4_EXPR = 2 1595 EU4_IDX = 1 1596 EU4_NONE = 0 1597 EXCLUSIVE_LOCK = 4 1598 EXPRDUP_REDUCE = 0x0001 1599 GCC_VERSION = 10002001 1600 HAVE_DLFCN_H = 1 1601 HAVE_FCHOWN = 1 1602 HAVE_FDATASYNC = 1 1603 HAVE_GMTIME_R = 1 1604 HAVE_INT16_T = 1 1605 HAVE_INT32_T = 1 1606 HAVE_INT64_T = 1 1607 HAVE_INT8_T = 1 1608 HAVE_INTPTR_T = 1 1609 HAVE_INTTYPES_H = 1 1610 HAVE_ISNAN = 1 1611 HAVE_LOCALTIME_R = 1 1612 HAVE_LSTAT = 1 1613 HAVE_MALLOC_H = 1 1614 HAVE_MALLOC_USABLE_SIZE = 1 1615 HAVE_MEMORY_H = 1 1616 HAVE_PREAD = 1 1617 HAVE_PREAD64 = 1 1618 HAVE_PWRITE = 1 1619 HAVE_PWRITE64 = 1 1620 HAVE_READLINK = 1 1621 HAVE_STDINT_H = 1 1622 HAVE_STDLIB_H = 1 1623 HAVE_STRCHRNUL = 1 1624 HAVE_STRINGS_H = 1 1625 HAVE_STRING_H = 1 1626 HAVE_SYS_STAT_H = 1 1627 HAVE_SYS_TYPES_H = 1 1628 HAVE_UINT16_T = 1 1629 HAVE_UINT32_T = 1 1630 HAVE_UINT64_T = 1 1631 HAVE_UINT8_T = 1 1632 HAVE_UINTPTR_T = 1 1633 HAVE_UNISTD_H = 1 1634 HAVE_UTIME = 1 1635 INITFLAG_AlterAdd = 0x0003 1636 INITFLAG_AlterDrop = 0x0002 1637 INITFLAG_AlterMask = 0x0003 1638 INITFLAG_AlterRename = 0x0001 1639 INLINEFUNC_affinity = 4 1640 INLINEFUNC_coalesce = 0 1641 INLINEFUNC_expr_compare = 3 1642 INLINEFUNC_expr_implies_expr = 2 1643 INLINEFUNC_iif = 5 1644 INLINEFUNC_implies_nonnull_row = 1 1645 INLINEFUNC_sqlite_offset = 6 1646 INLINEFUNC_unlikely = 99 1647 INT16_MAX = 32767 1648 INT16_MIN = -32768 1649 INT32_MAX = 2147483647 1650 INT32_MIN = -2147483648 1651 INT64_MAX = 9223372036854775807 1652 INT64_MIN = -9223372036854775808 1653 INT8_MAX = 127 1654 INT8_MIN = -128 1655 INTMAX_MAX = 9223372036854775807 1656 INTMAX_MIN = -9223372036854775808 1657 INTPTR_MAX = 9223372036854775807 1658 INTPTR_MIN = -9223372036854775808 1659 INT_FAST16_MAX = 9223372036854775807 1660 INT_FAST16_MIN = -9223372036854775808 1661 INT_FAST32_MAX = 9223372036854775807 1662 INT_FAST32_MIN = -9223372036854775808 1663 INT_FAST64_MAX = 9223372036854775807 1664 INT_FAST64_MIN = -9223372036854775808 1665 INT_FAST8_MAX = 127 1666 INT_FAST8_MIN = -128 1667 INT_LEAST16_MAX = 32767 1668 INT_LEAST16_MIN = -32768 1669 INT_LEAST32_MAX = 2147483647 1670 INT_LEAST32_MIN = -2147483648 1671 INT_LEAST64_MAX = 9223372036854775807 1672 INT_LEAST64_MIN = -9223372036854775808 1673 INT_LEAST8_MAX = 127 1674 INT_LEAST8_MIN = -128 1675 IN_INDEX_EPH = 2 1676 IN_INDEX_INDEX_ASC = 3 1677 IN_INDEX_INDEX_DESC = 4 1678 IN_INDEX_LOOP = 0x0004 1679 IN_INDEX_MEMBERSHIP = 0x0002 1680 IN_INDEX_NOOP = 5 1681 IN_INDEX_NOOP_OK = 0x0001 1682 IN_INDEX_ROWID = 1 1683 JT_CROSS = 0x02 1684 JT_ERROR = 0x80 1685 JT_INNER = 0x01 1686 JT_LEFT = 0x08 1687 JT_LTORJ = 0x40 1688 JT_NATURAL = 0x04 1689 JT_OUTER = 0x20 1690 JT_RIGHT = 0x10 1691 KEYINFO_ORDER_BIGNULL = 0x02 1692 KEYINFO_ORDER_DESC = 0x01 1693 LEGACY_SCHEMA_TABLE = "sqlite_master" 1694 LEGACY_TEMP_SCHEMA_TABLE = "sqlite_temp_master" 1695 LOCATE_NOERR = 0x02 1696 LOCATE_VIEW = 0x01 1697 LOOKASIDE_SMALL = 128 1698 LT_OBJDIR = ".libs/" 1699 M10d_Any = 1 1700 M10d_No = 2 1701 M10d_Yes = 0 1702 MEMTYPE_HEAP = 0x01 1703 MEMTYPE_LOOKASIDE = 0x02 1704 MEMTYPE_PCACHE = 0x04 1705 MSVC_VERSION = 0 1706 NC_AllowAgg = 0x000001 1707 NC_AllowWin = 0x004000 1708 NC_Complex = 0x002000 1709 NC_FromDDL = 0x040000 1710 NC_GenCol = 0x000008 1711 NC_HasAgg = 0x000010 1712 NC_HasWin = 0x008000 1713 NC_IdxExpr = 0x000020 1714 NC_InAggFunc = 0x020000 1715 NC_IsCheck = 0x000004 1716 NC_IsDDL = 0x010000 1717 NC_MinMaxAgg = 0x001000 1718 NC_NoSelect = 0x080000 1719 NC_OrderAgg = 0x8000000 1720 NC_PartIdx = 0x000002 1721 NC_SelfRef = 0x00002e 1722 NC_UAggInfo = 0x000100 1723 NC_UBaseReg = 0x000400 1724 NC_UEList = 0x000080 1725 NC_UUpsert = 0x000200 1726 NC_VarSelect = 0x000040 1727 NO_LOCK = 0 1728 OE_Abort = 2 1729 OE_Cascade = 10 1730 OE_Default = 11 1731 OE_Fail = 3 1732 OE_Ignore = 4 1733 OE_None = 0 1734 OE_Replace = 5 1735 OE_Restrict = 7 1736 OE_Rollback = 1 1737 OE_SetDflt = 9 1738 OE_SetNull = 8 1739 OE_Update = 6 1740 OMIT_TEMPDB = 0 1741 ONEPASS_MULTI = 2 1742 ONEPASS_OFF = 0 1743 ONEPASS_SINGLE = 1 1744 OPFLAG_APPEND = 0x08 1745 OPFLAG_AUXDELETE = 0x04 1746 OPFLAG_BULKCSR = 0x01 1747 OPFLAG_EPHEM = 0x01 1748 OPFLAG_FORDELETE = 0x08 1749 OPFLAG_ISNOOP = 0x40 1750 OPFLAG_ISUPDATE = 0x04 1751 OPFLAG_LASTROWID = 0x20 1752 OPFLAG_LENGTHARG = 0x40 1753 OPFLAG_NCHANGE = 0x01 1754 OPFLAG_NOCHNG = 0x01 1755 OPFLAG_NOCHNG_MAGIC = 0x6d 1756 OPFLAG_P2ISREG = 0x10 1757 OPFLAG_PERMUTE = 0x01 1758 OPFLAG_PREFORMAT = 0x80 1759 OPFLAG_SAVEPOSITION = 0x02 1760 OPFLAG_SEEKEQ = 0x02 1761 OPFLAG_TYPEOFARG = 0x80 1762 OPFLAG_USESEEKRESULT = 0x10 1763 OPFLG_IN1 = 0x02 1764 OPFLG_IN2 = 0x04 1765 OPFLG_IN3 = 0x08 1766 OPFLG_JUMP = 0x01 1767 OPFLG_OUT2 = 0x10 1768 OPFLG_OUT3 = 0x20 1769 OP_Abortable = 186 1770 OP_Add = 106 1771 OP_AddImm = 86 1772 OP_Affinity = 96 1773 OP_AggFinal = 165 1774 OP_AggInverse = 161 1775 OP_AggStep = 162 1776 OP_AggStep1 = 163 1777 OP_AggValue = 164 1778 OP_And = 44 1779 OP_AutoCommit = 1 1780 OP_BeginSubrtn = 74 1781 OP_BitAnd = 102 1782 OP_BitNot = 114 1783 OP_BitOr = 103 1784 OP_Blob = 77 1785 OP_Cast = 88 1786 OP_Checkpoint = 3 1787 OP_Clear = 145 1788 OP_Close = 122 1789 OP_ClrSubtype = 179 1790 OP_CollSeq = 85 1791 OP_Column = 94 1792 OP_ColumnsUsed = 123 1793 OP_Compare = 90 1794 OP_Concat = 111 1795 OP_Copy = 80 1796 OP_Count = 98 1797 OP_CreateBtree = 147 1798 OP_CursorHint = 182 1799 OP_CursorLock = 167 1800 OP_CursorUnlock = 168 1801 OP_DecrJumpZero = 60 1802 OP_DeferredSeek = 141 1803 OP_Delete = 130 1804 OP_Destroy = 144 1805 OP_Divide = 109 1806 OP_DropIndex = 152 1807 OP_DropTable = 151 1808 OP_DropTrigger = 154 1809 OP_ElseEq = 58 1810 OP_EndCoroutine = 68 1811 OP_Eq = 53 1812 OP_Expire = 166 1813 OP_Explain = 185 1814 OP_Filter = 63 1815 OP_FilterAdd = 180 1816 OP_FinishSeek = 143 1817 OP_FkCheck = 83 1818 OP_FkCounter = 158 1819 OP_FkIfZero = 48 1820 OP_Found = 28 1821 OP_Function = 66 1822 OP_Ge = 57 1823 OP_Gosub = 9 1824 OP_Goto = 8 1825 OP_Gt = 54 1826 OP_Halt = 70 1827 OP_HaltIfNull = 69 1828 OP_IdxDelete = 140 1829 OP_IdxGE = 42 1830 OP_IdxGT = 40 1831 OP_IdxInsert = 138 1832 OP_IdxLE = 39 1833 OP_IdxLT = 41 1834 OP_IdxRowid = 142 1835 OP_If = 15 1836 OP_IfNoHope = 25 1837 OP_IfNot = 16 1838 OP_IfNotOpen = 24 1839 OP_IfNotZero = 59 1840 OP_IfNullRow = 18 1841 OP_IfPos = 49 1842 OP_IfSmaller = 32 1843 OP_IncrVacuum = 61 1844 OP_Init = 64 1845 OP_InitCoroutine = 10 1846 OP_Insert = 128 1847 OP_Int64 = 72 1848 OP_IntCopy = 82 1849 OP_Integer = 71 1850 OP_IntegrityCk = 155 1851 OP_IsNull = 50 1852 OP_IsNullOrType = 17 1853 OP_IsTrue = 91 1854 OP_JournalMode = 4 1855 OP_Jump = 13 1856 OP_Last = 31 1857 OP_Le = 55 1858 OP_LoadAnalysis = 150 1859 OP_Lt = 56 1860 OP_MakeRecord = 97 1861 OP_MaxPgcnt = 178 1862 OP_MemMax = 159 1863 OP_Move = 79 1864 OP_Multiply = 108 1865 OP_MustBeInt = 12 1866 OP_Ne = 52 1867 OP_NewRowid = 127 1868 OP_Next = 38 1869 OP_NoConflict = 26 1870 OP_Noop = 184 1871 OP_Not = 19 1872 OP_NotExists = 30 1873 OP_NotFound = 27 1874 OP_NotNull = 51 1875 OP_Null = 75 1876 OP_NullRow = 136 1877 OP_Offset = 93 1878 OP_OffsetLimit = 160 1879 OP_Once = 14 1880 OP_OpenAutoindex = 116 1881 OP_OpenDup = 115 1882 OP_OpenEphemeral = 118 1883 OP_OpenPseudo = 121 1884 OP_OpenRead = 112 1885 OP_OpenWrite = 113 1886 OP_Or = 43 1887 OP_Pagecount = 177 1888 OP_Param = 157 1889 OP_ParseSchema = 149 1890 OP_Permutation = 89 1891 OP_Prev = 37 1892 OP_Program = 47 1893 OP_PureFunc = 65 1894 OP_ReadCookie = 99 1895 OP_Real = 153 1896 OP_RealAffinity = 87 1897 OP_ReleaseReg = 183 1898 OP_Remainder = 110 1899 OP_ReopenIdx = 101 1900 OP_ResetCount = 131 1901 OP_ResetSorter = 146 1902 OP_ResultRow = 84 1903 OP_Return = 67 1904 OP_Rewind = 35 1905 OP_RowCell = 129 1906 OP_RowData = 134 1907 OP_RowSetAdd = 156 1908 OP_RowSetRead = 45 1909 OP_RowSetTest = 46 1910 OP_Rowid = 135 1911 OP_SCopy = 81 1912 OP_Savepoint = 0 1913 OP_SeekEnd = 137 1914 OP_SeekGE = 22 1915 OP_SeekGT = 23 1916 OP_SeekHit = 125 1917 OP_SeekLE = 21 1918 OP_SeekLT = 20 1919 OP_SeekRowid = 29 1920 OP_SeekScan = 124 1921 OP_Sequence = 126 1922 OP_SequenceTest = 120 1923 OP_SetCookie = 100 1924 OP_ShiftLeft = 104 1925 OP_ShiftRight = 105 1926 OP_SoftNull = 76 1927 OP_Sort = 34 1928 OP_SorterCompare = 132 1929 OP_SorterData = 133 1930 OP_SorterInsert = 139 1931 OP_SorterNext = 36 1932 OP_SorterOpen = 119 1933 OP_SorterSort = 33 1934 OP_SqlExec = 148 1935 OP_String = 73 1936 OP_String8 = 117 1937 OP_Subtract = 107 1938 OP_TableLock = 169 1939 OP_Trace = 181 1940 OP_Transaction = 2 1941 OP_TypeCheck = 95 1942 OP_VBegin = 170 1943 OP_VColumn = 175 1944 OP_VCreate = 171 1945 OP_VDestroy = 172 1946 OP_VFilter = 6 1947 OP_VInitIn = 174 1948 OP_VNext = 62 1949 OP_VOpen = 173 1950 OP_VRename = 176 1951 OP_VUpdate = 7 1952 OP_Vacuum = 5 1953 OP_Variable = 78 1954 OP_Yield = 11 1955 OP_ZeroOrNull = 92 1956 OS_VXWORKS = 0 1957 P4_COLLSEQ = -2 1958 P4_DYNAMIC = -6 1959 P4_EXPR = -9 1960 P4_FREE_IF_LE = -6 1961 P4_FUNCCTX = -15 1962 P4_FUNCDEF = -7 1963 P4_INT32 = -3 1964 P4_INT64 = -13 1965 P4_INTARRAY = -14 1966 P4_KEYINFO = -8 1967 P4_MEM = -10 1968 P4_NOTUSED = 0 1969 P4_REAL = -12 1970 P4_STATIC = -1 1971 P4_SUBPROGRAM = -4 1972 P4_TABLE = -5 1973 P4_TRANSIENT = 0 1974 P4_VTAB = -11 1975 P5_ConstraintCheck = 3 1976 P5_ConstraintFK = 4 1977 P5_ConstraintNotNull = 1 1978 P5_ConstraintUnique = 2 1979 PACKAGE_BUGREPORT = "" 1980 PACKAGE_NAME = "sqlite" 1981 PACKAGE_STRING = "sqlite 3.39.3" 1982 PACKAGE_TARNAME = "sqlite" 1983 PACKAGE_VERSION = "3.39.3" 1984 PAGER_CACHESPILL = 0x20 1985 PAGER_CKPT_FULLFSYNC = 0x10 1986 PAGER_FLAGS_MASK = 0x38 1987 PAGER_FULLFSYNC = 0x08 1988 PAGER_GET_NOCONTENT = 0x01 1989 PAGER_GET_READONLY = 0x02 1990 PAGER_JOURNALMODE_DELETE = 0 1991 PAGER_JOURNALMODE_MEMORY = 4 1992 PAGER_JOURNALMODE_OFF = 2 1993 PAGER_JOURNALMODE_PERSIST = 1 1994 PAGER_JOURNALMODE_QUERY = -1 1995 PAGER_JOURNALMODE_TRUNCATE = 3 1996 PAGER_JOURNALMODE_WAL = 5 1997 PAGER_LOCKINGMODE_EXCLUSIVE = 1 1998 PAGER_LOCKINGMODE_NORMAL = 0 1999 PAGER_LOCKINGMODE_QUERY = -1 2000 PAGER_MEMORY = 0x0002 2001 PAGER_OMIT_JOURNAL = 0x0001 2002 PAGER_SYNCHRONOUS_EXTRA = 0x04 2003 PAGER_SYNCHRONOUS_FULL = 0x03 2004 PAGER_SYNCHRONOUS_MASK = 0x07 2005 PAGER_SYNCHRONOUS_NORMAL = 0x02 2006 PAGER_SYNCHRONOUS_OFF = 0x01 2007 PARSE_MODE_DECLARE_VTAB = 1 2008 PARSE_MODE_NORMAL = 0 2009 PARSE_MODE_RENAME = 2 2010 PARSE_MODE_UNMAP = 3 2011 PENDING_LOCK = 3 2012 PGHDR_CLEAN = 0x001 2013 PGHDR_DIRTY = 0x002 2014 PGHDR_DONT_WRITE = 0x010 2015 PGHDR_MMAP = 0x020 2016 PGHDR_NEED_SYNC = 0x008 2017 PGHDR_WAL_APPEND = 0x040 2018 PGHDR_WRITEABLE = 0x004 2019 PREFERRED_SCHEMA_TABLE = "sqlite_schema" 2020 PREFERRED_TEMP_SCHEMA_TABLE = "sqlite_temp_schema" 2021 PRIX16 = "X" 2022 PRIX32 = "X" 2023 PRIX8 = "X" 2024 PRIXFAST8 = "X" 2025 PRIXLEAST16 = "X" 2026 PRIXLEAST32 = "X" 2027 PRIXLEAST8 = "X" 2028 PRId16 = "d" 2029 PRId32 = "d" 2030 PRId8 = "d" 2031 PRIdFAST8 = "d" 2032 PRIdLEAST16 = "d" 2033 PRIdLEAST32 = "d" 2034 PRIdLEAST8 = "d" 2035 PRIi16 = "i" 2036 PRIi32 = "i" 2037 PRIi8 = "i" 2038 PRIiFAST8 = "i" 2039 PRIiLEAST16 = "i" 2040 PRIiLEAST32 = "i" 2041 PRIiLEAST8 = "i" 2042 PRIo16 = "o" 2043 PRIo32 = "o" 2044 PRIo8 = "o" 2045 PRIoFAST8 = "o" 2046 PRIoLEAST16 = "o" 2047 PRIoLEAST32 = "o" 2048 PRIoLEAST8 = "o" 2049 PRIu16 = "u" 2050 PRIu32 = "u" 2051 PRIu8 = "u" 2052 PRIuFAST8 = "u" 2053 PRIuLEAST16 = "u" 2054 PRIuLEAST32 = "u" 2055 PRIuLEAST8 = "u" 2056 PRIx16 = "x" 2057 PRIx32 = "x" 2058 PRIx8 = "x" 2059 PRIxFAST8 = "x" 2060 PRIxLEAST16 = "x" 2061 PRIxLEAST32 = "x" 2062 PRIxLEAST8 = "x" 2063 PTRDIFF_MAX = 9223372036854775807 2064 PTRDIFF_MIN = -9223372036854775808 2065 RESERVED_LOCK = 2 2066 SAVEPOINT_BEGIN = 0 2067 SAVEPOINT_RELEASE = 1 2068 SAVEPOINT_ROLLBACK = 2 2069 SCHEMA_ROOT = 1 2070 SCNd16 = "hd" 2071 SCNd32 = "d" 2072 SCNd8 = "hhd" 2073 SCNdFAST8 = "hhd" 2074 SCNdLEAST16 = "hd" 2075 SCNdLEAST32 = "d" 2076 SCNdLEAST8 = "hhd" 2077 SCNi16 = "hi" 2078 SCNi32 = "i" 2079 SCNi8 = "hhi" 2080 SCNiFAST8 = "hhi" 2081 SCNiLEAST16 = "hi" 2082 SCNiLEAST32 = "i" 2083 SCNiLEAST8 = "hhi" 2084 SCNo16 = "ho" 2085 SCNo32 = "o" 2086 SCNo8 = "hho" 2087 SCNoFAST8 = "hho" 2088 SCNoLEAST16 = "ho" 2089 SCNoLEAST32 = "o" 2090 SCNoLEAST8 = "hho" 2091 SCNu16 = "hu" 2092 SCNu32 = "u" 2093 SCNu8 = "hhu" 2094 SCNuFAST8 = "hhu" 2095 SCNuLEAST16 = "hu" 2096 SCNuLEAST32 = "u" 2097 SCNuLEAST8 = "hhu" 2098 SCNx16 = "hx" 2099 SCNx32 = "x" 2100 SCNx8 = "hhx" 2101 SCNxFAST8 = "hhx" 2102 SCNxLEAST16 = "hx" 2103 SCNxLEAST32 = "x" 2104 SCNxLEAST8 = "hhx" 2105 SF_Aggregate = 0x0000008 2106 SF_All = 0x0000002 2107 SF_ComplexResult = 0x0040000 2108 SF_Compound = 0x0000100 2109 SF_Converted = 0x0010000 2110 SF_CopyCte = 0x4000000 2111 SF_Distinct = 0x0000001 2112 SF_Expanded = 0x0000040 2113 SF_FixedLimit = 0x0004000 2114 SF_HasAgg = 0x0000010 2115 SF_HasTypeInfo = 0x0000080 2116 SF_IncludeHidden = 0x0020000 2117 SF_MaybeConvert = 0x0008000 2118 SF_MinMaxAgg = 0x0001000 2119 SF_MultiPart = 0x2000000 2120 SF_MultiValue = 0x0000400 2121 SF_NestedFrom = 0x0000800 2122 SF_NoopOrderBy = 0x0400000 2123 SF_OrderByReqd = 0x8000000 2124 SF_PushDown = 0x1000000 2125 SF_Recursive = 0x0002000 2126 SF_Resolved = 0x0000004 2127 SF_UFSrcCheck = 0x0800000 2128 SF_UsesEphemeral = 0x0000020 2129 SF_Values = 0x0000200 2130 SF_View = 0x0200000 2131 SF_WhereBegin = 0x0080000 2132 SF_WinRewrite = 0x0100000 2133 SHARED_LOCK = 1 2134 SHARED_SIZE = 510 2135 SIG_ATOMIC_MAX = 2147483647 2136 SIG_ATOMIC_MIN = -2147483648 2137 SIZE_MAX = 18446744073709551615 2138 SQLITECONFIG_H = 1 2139 SQLITEINT_H = 0 2140 SQLITE_AFF_BLOB = 0x41 2141 SQLITE_AFF_INTEGER = 0x44 2142 SQLITE_AFF_MASK = 0x47 2143 SQLITE_AFF_NONE = 0x40 2144 SQLITE_AFF_NUMERIC = 0x43 2145 SQLITE_AFF_REAL = 0x45 2146 SQLITE_AFF_TEXT = 0x42 2147 SQLITE_ASCII = 1 2148 SQLITE_ATOMIC_INTRINSICS = 1 2149 SQLITE_AllOpts = 0xffffffff 2150 SQLITE_AutoIndex = 0x00008000 2151 SQLITE_BTREE_H = 0 2152 SQLITE_BYTEORDER = 0 2153 SQLITE_BalancedMerge = 0x00200000 2154 SQLITE_BloomFilter = 0x00080000 2155 SQLITE_BloomPulldown = 0x00100000 2156 SQLITE_CacheSpill = 0x00000020 2157 SQLITE_CellSizeCk = 0x00200000 2158 SQLITE_CkptFullFSync = 0x00000010 2159 SQLITE_CountOfView = 0x00000200 2160 SQLITE_CoverIdxScan = 0x00000020 2161 SQLITE_CursorHints = 0x00000400 2162 SQLITE_DEFAULT_AUTOVACUUM = 0 2163 SQLITE_DEFAULT_CACHE_SIZE = -2000 2164 SQLITE_DEFAULT_FILE_FORMAT = 4 2165 SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT = -1 2166 SQLITE_DEFAULT_MMAP_SIZE = 0 2167 SQLITE_DEFAULT_PCACHE_INITSZ = 20 2168 SQLITE_DEFAULT_RECURSIVE_TRIGGERS = 0 2169 SQLITE_DEFAULT_SECTOR_SIZE = 4096 2170 SQLITE_DEFAULT_SORTERREF_SIZE = 0x7fffffff 2171 SQLITE_DEFAULT_SYNCHRONOUS = 2 2172 SQLITE_DEFAULT_WAL_AUTOCHECKPOINT = 1000 2173 SQLITE_DEFAULT_WAL_SYNCHRONOUS = 2 2174 SQLITE_DEFAULT_WORKER_THREADS = 0 2175 SQLITE_Defensive = 0x10000000 2176 SQLITE_DeferFKs = 0x00080000 2177 SQLITE_DistinctOpt = 0x00000010 2178 SQLITE_DqsDDL = 0x20000000 2179 SQLITE_DqsDML = 0x40000000 2180 SQLITE_ECEL_DUP = 0x01 2181 SQLITE_ECEL_FACTOR = 0x02 2182 SQLITE_ECEL_OMITREF = 0x08 2183 SQLITE_ECEL_REF = 0x04 2184 SQLITE_EnableQPSG = 0x00800000 2185 SQLITE_EnableTrigger = 0x00040000 2186 SQLITE_EnableView = 0x80000000 2187 SQLITE_FAULTINJECTOR_COUNT = 1 2188 SQLITE_FAULTINJECTOR_MALLOC = 0 2189 SQLITE_FCNTL_DB_UNCHANGED = 0xca093fa0 2190 SQLITE_FUNC_ANYORDER = 0x08000000 2191 SQLITE_FUNC_BUILTIN = 0x00800000 2192 SQLITE_FUNC_CASE = 0x0008 2193 SQLITE_FUNC_CONSTANT = 0x0800 2194 SQLITE_FUNC_COUNT = 0x0100 2195 SQLITE_FUNC_DIRECT = 0x00080000 2196 SQLITE_FUNC_ENCMASK = 0x0003 2197 SQLITE_FUNC_EPHEM = 0x0010 2198 SQLITE_FUNC_HASH_SZ = 23 2199 SQLITE_FUNC_INLINE = 0x00400000 2200 SQLITE_FUNC_INTERNAL = 0x00040000 2201 SQLITE_FUNC_LENGTH = 0x0040 2202 SQLITE_FUNC_LIKE = 0x0004 2203 SQLITE_FUNC_MINMAX = 0x1000 2204 SQLITE_FUNC_NEEDCOLL = 0x0020 2205 SQLITE_FUNC_SLOCHNG = 0x2000 2206 SQLITE_FUNC_SUBTYPE = 0x00100000 2207 SQLITE_FUNC_TEST = 0x4000 2208 SQLITE_FUNC_TYPEOF = 0x0080 2209 SQLITE_FUNC_UNLIKELY = 0x0400 2210 SQLITE_FUNC_UNSAFE = 0x00200000 2211 SQLITE_FUNC_WINDOW = 0x00010000 2212 SQLITE_FactorOutConst = 0x00000008 2213 SQLITE_FlttnUnionAll = 0x00800000 2214 SQLITE_ForeignKeys = 0x00004000 2215 SQLITE_Fts3Tokenizer = 0x00400000 2216 SQLITE_FullColNames = 0x00000004 2217 SQLITE_FullFSync = 0x00000008 2218 SQLITE_GroupByOrder = 0x00000004 2219 SQLITE_HASH_H = 0 2220 SQLITE_HAVE_C99_MATH_FUNCS = 1 2221 SQLITE_HAVE_OS_TRACE = 0 2222 SQLITE_IDXTYPE_APPDEF = 0 2223 SQLITE_IDXTYPE_IPK = 3 2224 SQLITE_IDXTYPE_PRIMARYKEY = 2 2225 SQLITE_IDXTYPE_UNIQUE = 1 2226 SQLITE_IOERR_NOMEM_BKPT = 3082 2227 SQLITE_IgnoreChecks = 0x00000200 2228 SQLITE_JUMPIFNULL = 0x10 2229 SQLITE_LegacyAlter = 0x04000000 2230 SQLITE_LegacyFileFmt = 0x00000002 2231 SQLITE_LoadExtFunc = 0x00020000 2232 SQLITE_LoadExtension = 0x00010000 2233 SQLITE_MALLOC_SOFT_LIMIT = 1024 2234 SQLITE_MAX_ATTACHED = 10 2235 SQLITE_MAX_COLUMN = 2000 2236 SQLITE_MAX_COMPOUND_SELECT = 500 2237 SQLITE_MAX_DB = 12 2238 SQLITE_MAX_DEFAULT_PAGE_SIZE = 8192 2239 SQLITE_MAX_EXPR_DEPTH = 1000 2240 SQLITE_MAX_FILE_FORMAT = 4 2241 SQLITE_MAX_FUNCTION_ARG = 127 2242 SQLITE_MAX_LENGTH = 1000000000 2243 SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000 2244 SQLITE_MAX_MMAP_SIZE = 0x7fff0000 2245 SQLITE_MAX_PAGE_COUNT = 1073741823 2246 SQLITE_MAX_PAGE_SIZE = 65536 2247 SQLITE_MAX_PATHLEN = 4096 2248 SQLITE_MAX_SQL_LENGTH = 1000000000 2249 SQLITE_MAX_SYMLINK = 200 2250 SQLITE_MAX_TRIGGER_DEPTH = 1000 2251 SQLITE_MAX_VARIABLE_NUMBER = 32766 2252 SQLITE_MAX_VDBE_OP = 250000000 2253 SQLITE_MAX_WORKER_THREADS = 8 2254 SQLITE_MSVC_H = 0 2255 SQLITE_MUTEX_STATIC_TEMPDIR = 11 2256 SQLITE_MX_JUMP_OPCODE = 64 2257 SQLITE_MinMaxOpt = 0x00010000 2258 SQLITE_NEED_ERR_NAME = 0 2259 SQLITE_NOMEM_BKPT = 7 2260 SQLITE_NOTNULL = 0x90 2261 SQLITE_NTUNE = 6 2262 SQLITE_NULLEQ = 0x80 2263 SQLITE_N_BTREE_META = 16 2264 SQLITE_N_LIMIT = 12 2265 SQLITE_N_STDTYPE = 6 2266 SQLITE_NoCkptOnClose = 0x00000800 2267 SQLITE_NoSchemaError = 0x08000000 2268 SQLITE_NullCallback = 0x00000100 2269 SQLITE_OS_OTHER = 0 2270 SQLITE_OS_SETUP_H = 0 2271 SQLITE_OS_UNIX = 1 2272 SQLITE_OS_WIN = 0 2273 SQLITE_OmitNoopJoin = 0x00000100 2274 SQLITE_OmitOrderBy = 0x00040000 2275 SQLITE_OrderByIdxJoin = 0x00000040 2276 SQLITE_PAGER_H = 0 2277 SQLITE_POWERSAFE_OVERWRITE = 1 2278 SQLITE_PREPARE_MASK = 0x0f 2279 SQLITE_PREPARE_SAVESQL = 0x80 2280 SQLITE_PRINTF_INTERNAL = 0x01 2281 SQLITE_PRINTF_MALLOCED = 0x04 2282 SQLITE_PRINTF_SQLFUNC = 0x02 2283 SQLITE_PTRSIZE = 8 2284 SQLITE_PropagateConst = 0x00008000 2285 SQLITE_PushDown = 0x00001000 2286 SQLITE_QueryFlattener = 0x00000001 2287 SQLITE_QueryOnly = 0x00100000 2288 SQLITE_ReadUncommit = 0x00000400 2289 SQLITE_RecTriggers = 0x00002000 2290 SQLITE_ReleaseReg = 0x00400000 2291 SQLITE_ResetDatabase = 0x02000000 2292 SQLITE_ReverseOrder = 0x00001000 2293 SQLITE_SO_ASC = 0 2294 SQLITE_SO_DESC = 1 2295 SQLITE_SO_UNDEFINED = -1 2296 SQLITE_STATE_BUSY = 0x6d 2297 SQLITE_STATE_CLOSED = 0xce 2298 SQLITE_STATE_ERROR = 0xd5 2299 SQLITE_STATE_OPEN = 0x76 2300 SQLITE_STATE_SICK = 0xba 2301 SQLITE_STATE_ZOMBIE = 0xa7 2302 SQLITE_SYSTEM_MALLOC = 1 2303 SQLITE_SeekScan = 0x00020000 2304 SQLITE_ShortColNames = 0x00000040 2305 SQLITE_SimplifyJoin = 0x00002000 2306 SQLITE_SkipScan = 0x00004000 2307 SQLITE_Stat4 = 0x00000800 2308 SQLITE_TEMP_FILE_PREFIX = "etilqs_" 2309 SQLITE_TOKEN_KEYWORD = 0x2 2310 SQLITE_TOKEN_QUOTED = 0x1 2311 SQLITE_TRACE_LEGACY = 0x40 2312 SQLITE_TRACE_NONLEGACY_MASK = 0x0f 2313 SQLITE_TRACE_XPROFILE = 0x80 2314 SQLITE_Transitive = 0x00000080 2315 SQLITE_TriggerEQP = 0x01000000 2316 SQLITE_TrustedSchema = 0x00000080 2317 SQLITE_VDBE_H = 0 2318 SQLITE_VTABRISK_High = 2 2319 SQLITE_VTABRISK_Low = 0 2320 SQLITE_VTABRISK_Normal = 1 2321 SQLITE_WSD = 0 2322 SQLITE_WindowFunc = 0x00000002 2323 SQLITE_WriteSchema = 0x00000001 2324 SRT_Coroutine = 13 2325 SRT_Discard = 4 2326 SRT_DistFifo = 5 2327 SRT_DistQueue = 6 2328 SRT_EphemTab = 12 2329 SRT_Except = 2 2330 SRT_Exists = 3 2331 SRT_Fifo = 8 2332 SRT_Mem = 10 2333 SRT_Output = 9 2334 SRT_Queue = 7 2335 SRT_Set = 11 2336 SRT_Table = 14 2337 SRT_Union = 1 2338 SRT_Upfrom = 15 2339 STDC_HEADERS = 1 2340 TABTYP_NORM = 0 2341 TABTYP_VIEW = 2 2342 TABTYP_VTAB = 1 2343 TF_Autoincrement = 0x00000008 2344 TF_Ephemeral = 0x00004000 2345 TF_Eponymous = 0x00008000 2346 TF_HasGenerated = 0x00000060 2347 TF_HasHidden = 0x00000002 2348 TF_HasNotNull = 0x00000800 2349 TF_HasPrimaryKey = 0x00000004 2350 TF_HasStat1 = 0x00000010 2351 TF_HasStat4 = 0x00002000 2352 TF_HasStored = 0x00000040 2353 TF_HasVirtual = 0x00000020 2354 TF_NoVisibleRowid = 0x00000200 2355 TF_OOOHidden = 0x00000400 2356 TF_Readonly = 0x00000001 2357 TF_Shadow = 0x00001000 2358 TF_StatsUsed = 0x00000100 2359 TF_Strict = 0x00010000 2360 TF_WithoutRowid = 0x00000080 2361 TK_ABORT = 27 2362 TK_ACTION = 28 2363 TK_ADD = 163 2364 TK_AFTER = 29 2365 TK_AGG_COLUMN = 169 2366 TK_AGG_FUNCTION = 168 2367 TK_ALL = 135 2368 TK_ALTER = 162 2369 TK_ALWAYS = 96 2370 TK_ANALYZE = 30 2371 TK_AND = 44 2372 TK_ANY = 101 2373 TK_AS = 24 2374 TK_ASC = 31 2375 TK_ASTERISK = 180 2376 TK_ATTACH = 32 2377 TK_AUTOINCR = 126 2378 TK_BEFORE = 33 2379 TK_BEGIN = 5 2380 TK_BETWEEN = 48 2381 TK_BY = 34 2382 TK_CASCADE = 35 2383 TK_CASE = 157 2384 TK_CAST = 36 2385 TK_CHECK = 124 2386 TK_COLLATE = 113 2387 TK_COLUMN = 167 2388 TK_COLUMNKW = 60 2389 TK_COMMIT = 10 2390 TK_CONFLICT = 37 2391 TK_CONSTRAINT = 119 2392 TK_CREATE = 17 2393 TK_CTIME_KW = 100 2394 TK_CURRENT = 85 2395 TK_DATABASE = 38 2396 TK_DEFAULT = 120 2397 TK_DEFERRABLE = 131 2398 TK_DEFERRED = 7 2399 TK_DELETE = 128 2400 TK_DESC = 39 2401 TK_DETACH = 40 2402 TK_DISTINCT = 140 2403 TK_DO = 61 2404 TK_DROP = 133 2405 TK_EACH = 41 2406 TK_ELSE = 160 2407 TK_END = 11 2408 TK_ESCAPE = 58 2409 TK_EXCEPT = 136 2410 TK_EXCLUDE = 91 2411 TK_EXCLUSIVE = 9 2412 TK_EXISTS = 20 2413 TK_EXPLAIN = 2 2414 TK_FAIL = 42 2415 TK_FILTER = 166 2416 TK_FIRST = 83 2417 TK_FOLLOWING = 86 2418 TK_FOR = 62 2419 TK_FOREIGN = 132 2420 TK_FROM = 142 2421 TK_FUNCTION = 172 2422 TK_GENERATED = 95 2423 TK_GROUP = 146 2424 TK_GROUPS = 92 2425 TK_HAVING = 147 2426 TK_IF = 18 2427 TK_IF_NULL_ROW = 179 2428 TK_IGNORE = 63 2429 TK_IMMEDIATE = 8 2430 TK_IN = 49 2431 TK_INDEX = 161 2432 TK_INDEXED = 116 2433 TK_INITIALLY = 64 2434 TK_INSERT = 127 2435 TK_INSTEAD = 65 2436 TK_INTERSECT = 137 2437 TK_INTO = 151 2438 TK_IS = 45 2439 TK_ISNOT = 171 2440 TK_ISNULL = 50 2441 TK_JOIN = 143 2442 TK_JOIN_KW = 118 2443 TK_KEY = 67 2444 TK_LAST = 84 2445 TK_LIKE_KW = 47 2446 TK_LIMIT = 148 2447 TK_MATCH = 46 2448 TK_MATERIALIZED = 97 2449 TK_NO = 66 2450 TK_NOT = 19 2451 TK_NOTHING = 152 2452 TK_NOTNULL = 51 2453 TK_NULL = 121 2454 TK_NULLS = 82 2455 TK_OF = 68 2456 TK_OFFSET = 69 2457 TK_ON = 115 2458 TK_OR = 43 2459 TK_ORDER = 145 2460 TK_OTHERS = 93 2461 TK_OVER = 165 2462 TK_PARTITION = 87 2463 TK_PLAN = 4 2464 TK_PRAGMA = 70 2465 TK_PRECEDING = 88 2466 TK_PRIMARY = 122 2467 TK_PTR = 112 2468 TK_QUERY = 3 2469 TK_RAISE = 71 2470 TK_RANGE = 89 2471 TK_RECURSIVE = 72 2472 TK_REFERENCES = 125 2473 TK_REGISTER = 176 2474 TK_REINDEX = 98 2475 TK_RELEASE = 14 2476 TK_RENAME = 99 2477 TK_REPLACE = 73 2478 TK_RESTRICT = 74 2479 TK_RETURNING = 150 2480 TK_ROLLBACK = 12 2481 TK_ROW = 75 2482 TK_ROWS = 76 2483 TK_SAVEPOINT = 13 2484 TK_SELECT = 138 2485 TK_SELECT_COLUMN = 178 2486 TK_SET = 130 2487 TK_SPAN = 181 2488 TK_TABLE = 16 2489 TK_TEMP = 21 2490 TK_THEN = 159 2491 TK_TIES = 94 2492 TK_TO = 15 2493 TK_TRANSACTION = 6 2494 TK_TRIGGER = 77 2495 TK_TRUEFALSE = 170 2496 TK_TRUTH = 175 2497 TK_UMINUS = 173 2498 TK_UNBOUNDED = 90 2499 TK_UNION = 134 2500 TK_UNIQUE = 123 2501 TK_UPDATE = 129 2502 TK_UPLUS = 174 2503 TK_USING = 144 2504 TK_VACUUM = 78 2505 TK_VALUES = 139 2506 TK_VECTOR = 177 2507 TK_VIEW = 79 2508 TK_VIRTUAL = 80 2509 TK_WHEN = 158 2510 TK_WHERE = 149 2511 TK_WINDOW = 164 2512 TK_WITH = 81 2513 TK_WITHOUT = 26 2514 TREETRACE_ENABLED = 0 2515 TRIGGER_AFTER = 2 2516 TRIGGER_BEFORE = 1 2517 UINT16_MAX = 65535 2518 UINT32_MAX = 4294967295 2519 UINT64_MAX = 18446744073709551615 2520 UINT8_MAX = 255 2521 UINTMAX_MAX = 18446744073709551615 2522 UINTPTR_MAX = 18446744073709551615 2523 UINT_FAST16_MAX = 18446744073709551615 2524 UINT_FAST32_MAX = 18446744073709551615 2525 UINT_FAST64_MAX = 18446744073709551615 2526 UINT_FAST8_MAX = 255 2527 UINT_LEAST16_MAX = 65535 2528 UINT_LEAST32_MAX = 4294967295 2529 UINT_LEAST64_MAX = 18446744073709551615 2530 UINT_LEAST8_MAX = 255 2531 WCHAR_MAX = 2147483647 2532 WCHAR_MIN = -2147483648 2533 WHERE_AGG_DISTINCT = 0x0400 2534 WHERE_DISTINCTBY = 0x0080 2535 WHERE_DISTINCT_NOOP = 0 2536 WHERE_DISTINCT_ORDERED = 2 2537 WHERE_DISTINCT_UNIQUE = 1 2538 WHERE_DISTINCT_UNORDERED = 3 2539 WHERE_DUPLICATES_OK = 0x0010 2540 WHERE_GROUPBY = 0x0040 2541 WHERE_ONEPASS_DESIRED = 0x0004 2542 WHERE_ONEPASS_MULTIROW = 0x0008 2543 WHERE_ORDERBY_LIMIT = 0x0800 2544 WHERE_ORDERBY_MAX = 0x0002 2545 WHERE_ORDERBY_MIN = 0x0001 2546 WHERE_ORDERBY_NORMAL = 0x0000 2547 WHERE_OR_SUBCLAUSE = 0x0020 2548 WHERE_RIGHT_JOIN = 0x1000 2549 WHERE_SORTBYGROUP = 0x0200 2550 WHERE_USE_LIMIT = 0x4000 2551 WHERE_WANT_DISTINCT = 0x0100 2552 WINT_MAX = 4294967295 2553 WINT_MIN = 0 2554 WRC_Abort = 2 2555 WRC_Continue = 0 2556 WRC_Prune = 1 2557 XN_EXPR = -2 2558 XN_ROWID = -1 2559 X_ANSI_STDDEF_H = 0 2560 X_BITS_STDINT_UINTN_H = 1 2561 X_BITS_WCHAR_H = 1 2562 X_BSD_PTRDIFF_T_ = 0 2563 X_GCC_MAX_ALIGN_T = 0 2564 X_GCC_PTRDIFF_T = 0 2565 X_GCC_WRAP_STDINT_H = 0 2566 X_GNU_SOURCE = 0 2567 X_INTTYPES_H = 1 2568 X_LARGEFILE_SOURCE = 1 2569 X_LARGE_FILE = 1 2570 X_PTRDIFF_T = 0 2571 X_PTRDIFF_T_ = 0 2572 X_PTRDIFF_T_DECLARED = 0 2573 X_SQLITE_OS_H_ = 0 2574 X_STDDEF_H = 0 2575 X_STDDEF_H_ = 0 2576 X_STDINT_H = 1 2577 X_T_PTRDIFF = 0 2578 X_T_PTRDIFF_ = 0 2579 X_XOPEN_SOURCE = 600 2580 SESSION_STREAM_TCL_VAR = "sqlite3session_streams" 2581 AT_DCACHEBSIZE = 19 2582 AT_ICACHEBSIZE = 20 2583 AT_IGNOREPPC = 22 2584 AT_L1D_CACHEGEOMETRY = 43 2585 AT_L1D_CACHESIZE = 42 2586 AT_L1I_CACHEGEOMETRY = 41 2587 AT_L1I_CACHESIZE = 40 2588 AT_L2_CACHEGEOMETRY = 45 2589 AT_L2_CACHESIZE = 44 2590 AT_L3_CACHEGEOMETRY = 47 2591 AT_L3_CACHESIZE = 46 2592 AT_SYSINFO_EHDR = 33 2593 AT_UCACHEBSIZE = 21 2594 AT_VECTOR_SIZE_ARCH = 14 2595 ELF_NEBB = 3 2596 ELF_NFPREG = 33 2597 ELF_NGREG = 48 2598 ELF_NPKEY = 3 2599 ELF_NPMU = 5 2600 ELF_NTMSPRREG = 3 2601 ELF_NVMX = 34 2602 ELF_NVRREG = 34 2603 ELF_NVRREG32 = 33 2604 ELF_NVSRHALFREG = 32 2605 ELF_NVSX = 32 2606 MAX_PREPARED_STMTS = 100 2607 MINSIGSTKSZ = 4096 2608 NFPREG = 33 2609 NGREG = 48 2610 NSIG = 65 2611 NUM_PREPARED_STMTS = 10 2612 NVRREG = 34 2613 PPC_BREAKPOINT_CONDITION_AND = 0x00000001 2614 PPC_BREAKPOINT_CONDITION_AND_OR = 0x00000003 2615 PPC_BREAKPOINT_CONDITION_BE_ALL = 0x00ff0000 2616 PPC_BREAKPOINT_CONDITION_BE_SHIFT = 16 2617 PPC_BREAKPOINT_CONDITION_EXACT = 1 2618 PPC_BREAKPOINT_CONDITION_MODE = 0x00000003 2619 PPC_BREAKPOINT_CONDITION_NONE = 0x00000000 2620 PPC_BREAKPOINT_CONDITION_OR = 0x00000002 2621 PPC_BREAKPOINT_MODE_EXACT = 0x00000000 2622 PPC_BREAKPOINT_MODE_MASK = 0x00000003 2623 PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE = 0x00000002 2624 PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE = 0x00000001 2625 PPC_BREAKPOINT_TRIGGER_EXECUTE = 0x00000001 2626 PPC_BREAKPOINT_TRIGGER_READ = 0x00000002 2627 PPC_BREAKPOINT_TRIGGER_RW = 6 2628 PPC_BREAKPOINT_TRIGGER_WRITE = 0x00000004 2629 PPC_DEBUG_FEATURE_DATA_BP_ARCH_31 = 0x0000000000000020 2630 PPC_DEBUG_FEATURE_DATA_BP_DAWR = 0x0000000000000010 2631 PPC_DEBUG_FEATURE_DATA_BP_MASK = 0x0000000000000008 2632 PPC_DEBUG_FEATURE_DATA_BP_RANGE = 0x0000000000000004 2633 PPC_DEBUG_FEATURE_INSN_BP_MASK = 0x0000000000000002 2634 PPC_DEBUG_FEATURE_INSN_BP_RANGE = 0x0000000000000001 2635 PPC_FEATURE2_ARCH_2_07 = 0x80000000 2636 PPC_FEATURE2_ARCH_3_00 = 0x00800000 2637 PPC_FEATURE2_ARCH_3_1 = 0x00040000 2638 PPC_FEATURE2_DARN = 0x00200000 2639 PPC_FEATURE2_DSCR = 0x20000000 2640 PPC_FEATURE2_EBB = 0x10000000 2641 PPC_FEATURE2_HAS_IEEE128 = 0x00400000 2642 PPC_FEATURE2_HTM = 0x40000000 2643 PPC_FEATURE2_HTM_NOSC = 0x01000000 2644 PPC_FEATURE2_HTM_NO_SUSPEND = 0x00080000 2645 PPC_FEATURE2_ISEL = 0x08000000 2646 PPC_FEATURE2_MMA = 0x00020000 2647 PPC_FEATURE2_SCV = 0x00100000 2648 PPC_FEATURE2_TAR = 0x04000000 2649 PPC_FEATURE2_VEC_CRYPTO = 0x02000000 2650 PPC_FEATURE_32 = 0x80000000 2651 PPC_FEATURE_601_INSTR = 0x20000000 2652 PPC_FEATURE_64 = 0x40000000 2653 PPC_FEATURE_ARCH_2_05 = 0x00001000 2654 PPC_FEATURE_ARCH_2_06 = 0x00000100 2655 PPC_FEATURE_BOOKE = 0x00008000 2656 PPC_FEATURE_CELL = 0x00010000 2657 PPC_FEATURE_HAS_4xxMAC = 0x02000000 2658 PPC_FEATURE_HAS_ALTIVEC = 0x10000000 2659 PPC_FEATURE_HAS_DFP = 0x00000400 2660 PPC_FEATURE_HAS_EFP_DOUBLE = 0x00200000 2661 PPC_FEATURE_HAS_EFP_SINGLE = 0x00400000 2662 PPC_FEATURE_HAS_FPU = 0x08000000 2663 PPC_FEATURE_HAS_MMU = 0x04000000 2664 PPC_FEATURE_HAS_SPE = 0x00800000 2665 PPC_FEATURE_HAS_VSX = 0x00000080 2666 PPC_FEATURE_ICACHE_SNOOP = 0x00002000 2667 PPC_FEATURE_NO_TB = 0x00100000 2668 PPC_FEATURE_PA6T = 0x00000800 2669 PPC_FEATURE_POWER4 = 0x00080000 2670 PPC_FEATURE_POWER5 = 0x00040000 2671 PPC_FEATURE_POWER5_PLUS = 0x00020000 2672 PPC_FEATURE_POWER6_EXT = 0x00000200 2673 PPC_FEATURE_PPC_LE = 0x00000001 2674 PPC_FEATURE_PSERIES_PERFMON_COMPAT = 0x00000040 2675 PPC_FEATURE_SMT = 0x00004000 2676 PPC_FEATURE_TRUE_LE = 0x00000002 2677 PPC_FEATURE_UNIFIED_CACHE = 0x01000000 2678 PPC_PTRACE_DELHWDEBUG = 0x87 2679 PPC_PTRACE_GETHWDBGINFO = 0x89 2680 PPC_PTRACE_PEEKDATA_3264 = 0x94 2681 PPC_PTRACE_PEEKTEXT_3264 = 0x95 2682 PPC_PTRACE_PEEKUSR_3264 = 0x91 2683 PPC_PTRACE_POKEDATA_3264 = 0x92 2684 PPC_PTRACE_POKETEXT_3264 = 0x93 2685 PPC_PTRACE_POKEUSR_3264 = 0x90 2686 PPC_PTRACE_SETHWDEBUG = 0x88 2687 PTRACE_GETEVRREGS = 0x14 2688 PTRACE_GETFPREGS = 0xe 2689 PTRACE_GETREGS = 0xc 2690 PTRACE_GETREGS64 = 0x16 2691 PTRACE_GETVRREGS = 0x12 2692 PTRACE_GETVSRREGS = 0x1b 2693 PTRACE_GET_DEBUGREG = 0x19 2694 PTRACE_SETEVRREGS = 0x15 2695 PTRACE_SETFPREGS = 0xf 2696 PTRACE_SETREGS = 0xd 2697 PTRACE_SETREGS64 = 0x17 2698 PTRACE_SETVRREGS = 0x13 2699 PTRACE_SETVSRREGS = 0x1c 2700 PTRACE_SET_DEBUGREG = 0x1a 2701 PTRACE_SINGLEBLOCK = 0x100 2702 PTRACE_SYSEMU = 0x1d 2703 PTRACE_SYSEMU_SINGLESTEP = 0x1e 2704 PT_CCR = 38 2705 PT_CTR = 35 2706 PT_DAR = 41 2707 PT_DSCR = 44 2708 PT_DSISR = 42 2709 PT_FPR0 = 48 2710 PT_FPSCR = 80 2711 PT_LNK = 36 2712 PT_MSR = 33 2713 PT_NIP = 32 2714 PT_ORIG_R3 = 34 2715 PT_R0 = 0 2716 PT_R1 = 1 2717 PT_R10 = 10 2718 PT_R11 = 11 2719 PT_R12 = 12 2720 PT_R13 = 13 2721 PT_R14 = 14 2722 PT_R15 = 15 2723 PT_R16 = 16 2724 PT_R17 = 17 2725 PT_R18 = 18 2726 PT_R19 = 19 2727 PT_R2 = 2 2728 PT_R20 = 20 2729 PT_R21 = 21 2730 PT_R22 = 22 2731 PT_R23 = 23 2732 PT_R24 = 24 2733 PT_R25 = 25 2734 PT_R26 = 26 2735 PT_R27 = 27 2736 PT_R28 = 28 2737 PT_R29 = 29 2738 PT_R3 = 3 2739 PT_R30 = 30 2740 PT_R31 = 31 2741 PT_R4 = 4 2742 PT_R5 = 5 2743 PT_R6 = 6 2744 PT_R7 = 7 2745 PT_R8 = 8 2746 PT_R9 = 9 2747 PT_REGS_COUNT = 44 2748 PT_RESULT = 43 2749 PT_SOFTE = 39 2750 PT_TRAP = 40 2751 PT_VR0 = 82 2752 PT_VRSAVE = 148 2753 PT_VSCR = 147 2754 PT_VSR0 = 150 2755 PT_VSR31 = 212 2756 PT_XER = 37 2757 R_PPC64_ADDR14 = 7 2758 R_PPC64_ADDR14_BRNTAKEN = 9 2759 R_PPC64_ADDR14_BRTAKEN = 8 2760 R_PPC64_ADDR16 = 3 2761 R_PPC64_ADDR16_DS = 56 2762 R_PPC64_ADDR16_HA = 6 2763 R_PPC64_ADDR16_HI = 5 2764 R_PPC64_ADDR16_HIGHER = 39 2765 R_PPC64_ADDR16_HIGHERA = 40 2766 R_PPC64_ADDR16_HIGHEST = 41 2767 R_PPC64_ADDR16_HIGHESTA = 42 2768 R_PPC64_ADDR16_LO = 4 2769 R_PPC64_ADDR16_LO_DS = 57 2770 R_PPC64_ADDR24 = 2 2771 R_PPC64_ADDR30 = 37 2772 R_PPC64_ADDR32 = 1 2773 R_PPC64_ADDR64 = 38 2774 R_PPC64_COPY = 19 2775 R_PPC64_DTPMOD64 = 68 2776 R_PPC64_DTPREL16 = 74 2777 R_PPC64_DTPREL16_DS = 101 2778 R_PPC64_DTPREL16_HA = 77 2779 R_PPC64_DTPREL16_HI = 76 2780 R_PPC64_DTPREL16_HIGHER = 103 2781 R_PPC64_DTPREL16_HIGHERA = 104 2782 R_PPC64_DTPREL16_HIGHEST = 105 2783 R_PPC64_DTPREL16_HIGHESTA = 106 2784 R_PPC64_DTPREL16_LO = 75 2785 R_PPC64_DTPREL16_LO_DS = 102 2786 R_PPC64_DTPREL64 = 78 2787 R_PPC64_ENTRY = 118 2788 R_PPC64_GLOB_DAT = 20 2789 R_PPC64_GOT16 = 14 2790 R_PPC64_GOT16_DS = 58 2791 R_PPC64_GOT16_HA = 17 2792 R_PPC64_GOT16_HI = 16 2793 R_PPC64_GOT16_LO = 15 2794 R_PPC64_GOT16_LO_DS = 59 2795 R_PPC64_GOT_DTPREL16_DS = 91 2796 R_PPC64_GOT_DTPREL16_HA = 94 2797 R_PPC64_GOT_DTPREL16_HI = 93 2798 R_PPC64_GOT_DTPREL16_LO_DS = 92 2799 R_PPC64_GOT_TLSGD16 = 79 2800 R_PPC64_GOT_TLSGD16_HA = 82 2801 R_PPC64_GOT_TLSGD16_HI = 81 2802 R_PPC64_GOT_TLSGD16_LO = 80 2803 R_PPC64_GOT_TLSLD16 = 83 2804 R_PPC64_GOT_TLSLD16_HA = 86 2805 R_PPC64_GOT_TLSLD16_HI = 85 2806 R_PPC64_GOT_TLSLD16_LO = 84 2807 R_PPC64_GOT_TPREL16_DS = 87 2808 R_PPC64_GOT_TPREL16_HA = 90 2809 R_PPC64_GOT_TPREL16_HI = 89 2810 R_PPC64_GOT_TPREL16_LO_DS = 88 2811 R_PPC64_JMP_SLOT = 21 2812 R_PPC64_NONE = 0 2813 R_PPC64_NUM = 253 2814 R_PPC64_PLT16_HA = 31 2815 R_PPC64_PLT16_HI = 30 2816 R_PPC64_PLT16_LO = 29 2817 R_PPC64_PLT16_LO_DS = 60 2818 R_PPC64_PLT32 = 27 2819 R_PPC64_PLT64 = 45 2820 R_PPC64_PLTGOT16 = 52 2821 R_PPC64_PLTGOT16_DS = 65 2822 R_PPC64_PLTGOT16_HA = 55 2823 R_PPC64_PLTGOT16_HI = 54 2824 R_PPC64_PLTGOT16_LO = 53 2825 R_PPC64_PLTGOT16_LO_DS = 66 2826 R_PPC64_PLTREL32 = 28 2827 R_PPC64_PLTREL64 = 46 2828 R_PPC64_REL14 = 11 2829 R_PPC64_REL14_BRNTAKEN = 13 2830 R_PPC64_REL14_BRTAKEN = 12 2831 R_PPC64_REL16 = 249 2832 R_PPC64_REL16_HA = 252 2833 R_PPC64_REL16_HI = 251 2834 R_PPC64_REL16_LO = 250 2835 R_PPC64_REL24 = 10 2836 R_PPC64_REL32 = 26 2837 R_PPC64_REL64 = 44 2838 R_PPC64_RELATIVE = 22 2839 R_PPC64_SECTOFF = 33 2840 R_PPC64_SECTOFF_DS = 61 2841 R_PPC64_SECTOFF_HA = 36 2842 R_PPC64_SECTOFF_HI = 35 2843 R_PPC64_SECTOFF_LO = 34 2844 R_PPC64_SECTOFF_LO_DS = 62 2845 R_PPC64_TLS = 67 2846 R_PPC64_TLSGD = 107 2847 R_PPC64_TLSLD = 108 2848 R_PPC64_TOC = 51 2849 R_PPC64_TOC16 = 47 2850 R_PPC64_TOC16_DS = 63 2851 R_PPC64_TOC16_HA = 50 2852 R_PPC64_TOC16_HI = 49 2853 R_PPC64_TOC16_LO = 48 2854 R_PPC64_TOC16_LO_DS = 64 2855 R_PPC64_TOCSAVE = 109 2856 R_PPC64_TPREL16 = 69 2857 R_PPC64_TPREL16_DS = 95 2858 R_PPC64_TPREL16_HA = 72 2859 R_PPC64_TPREL16_HI = 71 2860 R_PPC64_TPREL16_HIGHER = 97 2861 R_PPC64_TPREL16_HIGHERA = 98 2862 R_PPC64_TPREL16_HIGHEST = 99 2863 R_PPC64_TPREL16_HIGHESTA = 100 2864 R_PPC64_TPREL16_LO = 70 2865 R_PPC64_TPREL16_LO_DS = 96 2866 R_PPC64_TPREL64 = 73 2867 R_PPC64_UADDR16 = 25 2868 R_PPC64_UADDR32 = 24 2869 R_PPC64_UADDR64 = 43 2870 R_PPC_ADDR14 = 7 2871 R_PPC_ADDR14_BRNTAKEN = 9 2872 R_PPC_ADDR14_BRTAKEN = 8 2873 R_PPC_ADDR16 = 3 2874 R_PPC_ADDR16_HA = 6 2875 R_PPC_ADDR16_HI = 5 2876 R_PPC_ADDR16_LO = 4 2877 R_PPC_ADDR24 = 2 2878 R_PPC_ADDR32 = 1 2879 R_PPC_COPY = 19 2880 R_PPC_DTPMOD32 = 68 2881 R_PPC_DTPREL16 = 74 2882 R_PPC_DTPREL16_HA = 77 2883 R_PPC_DTPREL16_HI = 76 2884 R_PPC_DTPREL16_LO = 75 2885 R_PPC_DTPREL32 = 78 2886 R_PPC_GLOB_DAT = 20 2887 R_PPC_GOT16 = 14 2888 R_PPC_GOT16_HA = 17 2889 R_PPC_GOT16_HI = 16 2890 R_PPC_GOT16_LO = 15 2891 R_PPC_GOT_DTPREL16 = 91 2892 R_PPC_GOT_DTPREL16_HA = 94 2893 R_PPC_GOT_DTPREL16_HI = 93 2894 R_PPC_GOT_DTPREL16_LO = 92 2895 R_PPC_GOT_TLSGD16 = 79 2896 R_PPC_GOT_TLSGD16_HA = 82 2897 R_PPC_GOT_TLSGD16_HI = 81 2898 R_PPC_GOT_TLSGD16_LO = 80 2899 R_PPC_GOT_TLSLD16 = 83 2900 R_PPC_GOT_TLSLD16_HA = 86 2901 R_PPC_GOT_TLSLD16_HI = 85 2902 R_PPC_GOT_TLSLD16_LO = 84 2903 R_PPC_GOT_TPREL16 = 87 2904 R_PPC_GOT_TPREL16_HA = 90 2905 R_PPC_GOT_TPREL16_HI = 89 2906 R_PPC_GOT_TPREL16_LO = 88 2907 R_PPC_JMP_SLOT = 21 2908 R_PPC_LOCAL24PC = 23 2909 R_PPC_NONE = 0 2910 R_PPC_NUM = 95 2911 R_PPC_PLT16_HA = 31 2912 R_PPC_PLT16_HI = 30 2913 R_PPC_PLT16_LO = 29 2914 R_PPC_PLT32 = 27 2915 R_PPC_PLTREL24 = 18 2916 R_PPC_PLTREL32 = 28 2917 R_PPC_REL14 = 11 2918 R_PPC_REL14_BRNTAKEN = 13 2919 R_PPC_REL14_BRTAKEN = 12 2920 R_PPC_REL24 = 10 2921 R_PPC_REL32 = 26 2922 R_PPC_RELATIVE = 22 2923 R_PPC_SDAREL16 = 32 2924 R_PPC_SECTOFF = 33 2925 R_PPC_SECTOFF_HA = 36 2926 R_PPC_SECTOFF_HI = 35 2927 R_PPC_SECTOFF_LO = 34 2928 R_PPC_TLS = 67 2929 R_PPC_TPREL16 = 69 2930 R_PPC_TPREL16_HA = 72 2931 R_PPC_TPREL16_HI = 71 2932 R_PPC_TPREL16_LO = 70 2933 R_PPC_TPREL32 = 73 2934 R_PPC_UADDR16 = 25 2935 R_PPC_UADDR32 = 24 2936 SA_INTERRUPT = 0x20000000 2937 SA_NOCLDSTOP = 1 2938 SA_NOCLDWAIT = 2 2939 SA_NODEFER = 0x40000000 2940 SA_NOMASK = 1073741824 2941 SA_ONESHOT = 2147483648 2942 SA_ONSTACK = 0x08000000 2943 SA_RESETHAND = 0x80000000 2944 SA_RESTART = 0x10000000 2945 SA_SIGINFO = 4 2946 SA_STACK = 134217728 2947 SIGABRT = 6 2948 SIGALRM = 14 2949 SIGBUS = 7 2950 SIGCHLD = 17 2951 SIGCLD = 17 2952 SIGCONT = 18 2953 SIGFPE = 8 2954 SIGHUP = 1 2955 SIGILL = 4 2956 SIGINT = 2 2957 SIGIO = 29 2958 SIGIOT = 6 2959 SIGKILL = 9 2960 SIGPIPE = 13 2961 SIGPOLL = 29 2962 SIGPROF = 27 2963 SIGPWR = 30 2964 SIGQUIT = 3 2965 SIGSEGV = 11 2966 SIGSTKFLT = 16 2967 SIGSTKSZ = 16384 2968 SIGSTOP = 19 2969 SIGSYS = 31 2970 SIGTERM = 15 2971 SIGTRAP = 5 2972 SIGTSTP = 20 2973 SIGTTIN = 21 2974 SIGTTOU = 22 2975 SIGURG = 23 2976 SIGUSR1 = 10 2977 SIGUSR2 = 12 2978 SIGVTALRM = 26 2979 SIGWINCH = 28 2980 SIGXCPU = 24 2981 SIGXFSZ = 25 2982 SIG_BLOCK = 0 2983 SIG_SETMASK = 2 2984 SIG_UNBLOCK = 1 2985 SQLITE_EVAL_WITHOUTNULLS = 0x00001 2986 SQLITE_TCL_NRE = 1 2987 TCLSH = 1 2988 X_ASM_GENERIC_INT_L64_H = 0 2989 X_ASM_POWERPC_AUXVEC_H = 0 2990 X_ASM_POWERPC_ELF_H = 0 2991 X_ASM_POWERPC_POSIX_TYPES_H = 0 2992 X_ASM_POWERPC_PTRACE_H = 0 2993 X_ASM_POWERPC_SIGCONTEXT_H = 0 2994 X_ASM_POWERPC_TYPES_H = 0 2995 X_BITS_SIGACTION_H = 1 2996 X_BITS_SIGCONTEXT_H = 1 2997 X_BITS_SIGEVENT_CONSTS_H = 1 2998 X_BITS_SIGINFO_ARCH_H = 1 2999 X_BITS_SIGINFO_CONSTS_H = 1 3000 X_BITS_SIGNUM_GENERIC_H = 1 3001 X_BITS_SIGNUM_H = 1 3002 X_BITS_SIGSTACK_H = 1 3003 X_BITS_SIGTHREAD_H = 1 3004 X_BITS_SS_FLAGS_H = 1 3005 X_LINUX_POSIX_TYPES_H = 0 3006 X_LINUX_TYPES_H = 0 3007 X_NSIG = 65 3008 X_SIGNAL_H = 0 3009 X_SYS_UCONTEXT_H = 1 3010 ADJ_ESTERROR = 0x0008 3011 ADJ_FREQUENCY = 0x0002 3012 ADJ_MAXERROR = 0x0004 3013 ADJ_MICRO = 0x1000 3014 ADJ_NANO = 0x2000 3015 ADJ_OFFSET = 0x0001 3016 ADJ_OFFSET_SINGLESHOT = 0x8001 3017 ADJ_OFFSET_SS_READ = 0xa001 3018 ADJ_SETOFFSET = 0x0100 3019 ADJ_STATUS = 0x0010 3020 ADJ_TAI = 0x0080 3021 ADJ_TICK = 0x4000 3022 ADJ_TIMECONST = 0x0020 3023 CACHE_STALE = 0 3024 CURTYPE_BTREE = 0 3025 CURTYPE_PSEUDO = 3 3026 CURTYPE_SORTER = 1 3027 CURTYPE_VTAB = 2 3028 INT16_WIDTH = 16 3029 INT32_WIDTH = 32 3030 INT64_WIDTH = 64 3031 INT8_WIDTH = 8 3032 INTMAX_WIDTH = 64 3033 INTPTR_WIDTH = 64 3034 INT_FAST16_WIDTH = 64 3035 INT_FAST32_WIDTH = 64 3036 INT_FAST64_WIDTH = 64 3037 INT_FAST8_WIDTH = 8 3038 INT_LEAST16_WIDTH = 16 3039 INT_LEAST32_WIDTH = 32 3040 INT_LEAST64_WIDTH = 64 3041 INT_LEAST8_WIDTH = 8 3042 L_cuserid = 9 3043 MEM_AffMask = 0x003f 3044 MEM_Agg = 0x8000 3045 MEM_Blob = 0x0010 3046 MEM_Cleared = 0x0100 3047 MEM_Dyn = 0x1000 3048 MEM_Ephem = 0x4000 3049 MEM_FromBind = 0x0040 3050 MEM_Int = 0x0004 3051 MEM_IntReal = 0x0020 3052 MEM_Null = 0x0001 3053 MEM_Real = 0x0008 3054 MEM_Static = 0x2000 3055 MEM_Str = 0x0002 3056 MEM_Subtype = 0x0800 3057 MEM_Term = 0x0200 3058 MEM_TypeMask = 0x0dbf 3059 MEM_Undefined = 0x0000 3060 MEM_Zero = 0x0400 3061 MOD_CLKA = 32769 3062 MOD_CLKB = 16384 3063 MOD_ESTERROR = 8 3064 MOD_FREQUENCY = 2 3065 MOD_MAXERROR = 4 3066 MOD_MICRO = 4096 3067 MOD_NANO = 8192 3068 MOD_OFFSET = 1 3069 MOD_STATUS = 16 3070 MOD_TAI = 128 3071 MOD_TIMECONST = 32 3072 PRIO_MAX = 20 3073 PRIO_MIN = -20 3074 PTRDIFF_WIDTH = 64 3075 RENAME_EXCHANGE = 2 3076 RENAME_NOREPLACE = 1 3077 RENAME_WHITEOUT = 4 3078 RLIM64_INFINITY = 0xffffffffffffffff 3079 RLIM_INFINITY = 0xffffffffffffffff 3080 RLIM_SAVED_CUR = 18446744073709551615 3081 RLIM_SAVED_MAX = 18446744073709551615 3082 SEEK_DATA = 3 3083 SEEK_HOLE = 4 3084 SIG_ATOMIC_WIDTH = 32 3085 SIZE_WIDTH = 64 3086 SQLITE_ENABLE_LOCKING_STYLE = 0 3087 SQLITE_FRAME_MAGIC = 0x879fb71e 3088 SQLITE_MAX_SCHEMA_RETRY = 50 3089 SQLITE_VDBEINT_H = 0 3090 STA_CLK = 0x8000 3091 STA_CLOCKERR = 0x1000 3092 STA_DEL = 0x0020 3093 STA_FLL = 0x0008 3094 STA_FREQHOLD = 0x0080 3095 STA_INS = 0x0010 3096 STA_MODE = 0x4000 3097 STA_NANO = 0x2000 3098 STA_PLL = 0x0001 3099 STA_PPSERROR = 0x0800 3100 STA_PPSFREQ = 0x0002 3101 STA_PPSJITTER = 0x0200 3102 STA_PPSSIGNAL = 0x0100 3103 STA_PPSTIME = 0x0004 3104 STA_PPSWANDER = 0x0400 3105 STA_RONLY = 65280 3106 STA_UNSYNC = 0x0040 3107 UINT16_WIDTH = 16 3108 UINT32_WIDTH = 32 3109 UINT64_WIDTH = 64 3110 UINT8_WIDTH = 8 3111 UINTMAX_WIDTH = 64 3112 UINTPTR_WIDTH = 64 3113 UINT_FAST16_WIDTH = 64 3114 UINT_FAST32_WIDTH = 64 3115 UINT_FAST64_WIDTH = 64 3116 UINT_FAST8_WIDTH = 8 3117 UINT_LEAST16_WIDTH = 16 3118 UINT_LEAST32_WIDTH = 32 3119 UINT_LEAST64_WIDTH = 64 3120 UINT_LEAST8_WIDTH = 8 3121 VDBE_DISPLAY_P4 = 1 3122 VDBE_HALT_STATE = 3 3123 VDBE_INIT_STATE = 0 3124 VDBE_READY_STATE = 1 3125 VDBE_RUN_STATE = 2 3126 WCHAR_WIDTH = 32 3127 WINT_WIDTH = 32 3128 X_BITS_TIMEX_H = 1 3129 X_ISOC11_SOURCE = 1 3130 X_ISOC2X_SOURCE = 1 3131 X_ISOC95_SOURCE = 1 3132 X_ISOC99_SOURCE = 1 3133 X_LARGEFILE64_SOURCE = 1 3134 X_SYS_RESOURCE_H = 1 3135 X_XOPEN_SOURCE_EXTENDED = 1 3136 BTCF_AtLast = 0x08 3137 BTCF_Incrblob = 0x10 3138 BTCF_Multiple = 0x20 3139 BTCF_Pinned = 0x40 3140 BTCF_ValidNKey = 0x02 3141 BTCF_ValidOvfl = 0x04 3142 BTCF_WriteFlag = 0x01 3143 BTCURSOR_MAX_DEPTH = 20 3144 BTS_EXCLUSIVE = 0x0040 3145 BTS_FAST_SECURE = 0x000c 3146 BTS_INITIALLY_EMPTY = 0x0010 3147 BTS_NO_WAL = 0x0020 3148 BTS_OVERWRITE = 0x0008 3149 BTS_PAGESIZE_FIXED = 0x0002 3150 BTS_PENDING = 0x0080 3151 BTS_READ_ONLY = 0x0001 3152 BTS_SECURE_DELETE = 0x0004 3153 CURSOR_FAULT = 4 3154 CURSOR_INVALID = 1 3155 CURSOR_REQUIRESEEK = 3 3156 CURSOR_SKIPNEXT = 2 3157 CURSOR_VALID = 0 3158 PTF_INTKEY = 0x01 3159 PTF_LEAF = 0x08 3160 PTF_LEAFDATA = 0x04 3161 PTF_ZERODATA = 0x02 3162 PTRMAP_BTREE = 5 3163 PTRMAP_FREEPAGE = 2 3164 PTRMAP_OVERFLOW1 = 3 3165 PTRMAP_OVERFLOW2 = 4 3166 PTRMAP_ROOTPAGE = 1 3167 READ_LOCK = 1 3168 SQLITE_FILE_HEADER = "SQLite format 3" 3169 TRANS_NONE = 0 3170 TRANS_READ = 1 3171 TRANS_WRITE = 2 3172 WRITE_LOCK = 2 3173 CLONE_CHILD_CLEARTID = 0x00200000 3174 CLONE_CHILD_SETTID = 0x01000000 3175 CLONE_DETACHED = 0x00400000 3176 CLONE_FILES = 0x00000400 3177 CLONE_FS = 0x00000200 3178 CLONE_IO = 0x80000000 3179 CLONE_NEWCGROUP = 0x02000000 3180 CLONE_NEWIPC = 0x08000000 3181 CLONE_NEWNET = 0x40000000 3182 CLONE_NEWNS = 0x00020000 3183 CLONE_NEWPID = 0x20000000 3184 CLONE_NEWUSER = 0x10000000 3185 CLONE_NEWUTS = 0x04000000 3186 CLONE_PARENT = 0x00008000 3187 CLONE_PARENT_SETTID = 0x00100000 3188 CLONE_PIDFD = 0x00001000 3189 CLONE_PTRACE = 0x00002000 3190 CLONE_SETTLS = 0x00080000 3191 CLONE_SIGHAND = 0x00000800 3192 CLONE_SYSVSEM = 0x00040000 3193 CLONE_THREAD = 0x00010000 3194 CLONE_UNTRACED = 0x00800000 3195 CLONE_VFORK = 0x00004000 3196 CLONE_VM = 0x00000100 3197 CPU_SETSIZE = 1024 3198 CSIGNAL = 0x000000ff 3199 N_THREAD = 26 3200 PTHREAD_BARRIER_SERIAL_THREAD = -1 3201 PTHREAD_ONCE_INIT = 0 3202 SCHED_BATCH = 3 3203 SCHED_DEADLINE = 6 3204 SCHED_FIFO = 1 3205 SCHED_IDLE = 5 3206 SCHED_ISO = 4 3207 SCHED_OTHER = 0 3208 SCHED_RESET_ON_FORK = 0x40000000 3209 SCHED_RR = 2 3210 X_BITS_CPU_SET_H = 1 3211 X_BITS_SCHED_H = 1 3212 X_BITS_SETJMP_H = 1 3213 X_BITS_TYPES_STRUCT_SCHED_PARAM = 1 3214 X_PTHREAD_H = 1 3215 X_SCHED_H = 1 3216 TCL_THREADS = 0 3217 MX_CHUNK_NUMBER = 299 3218 SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET = 400 3219 SQLITE_MULTIPLEX_WAL_8_3_OFFSET = 700 3220 DEVSYM_MAX_PATHNAME = 512 3221 DEVSYM_VFS_NAME = "devsym" 3222 WRITECRASH_NAME = "writecrash" 3223 AT_EMPTY_PATH = 0x1000 3224 AT_NO_AUTOMOUNT = 0x800 3225 AT_RECURSIVE = 0x8000 3226 AT_STATX_DONT_SYNC = 0x4000 3227 AT_STATX_FORCE_SYNC = 0x2000 3228 AT_STATX_SYNC_AS_STAT = 0x0000 3229 AT_STATX_SYNC_TYPE = 0x6000 3230 DN_ACCESS = 0x00000001 3231 DN_ATTRIB = 0x00000020 3232 DN_CREATE = 0x00000004 3233 DN_DELETE = 0x00000008 3234 DN_MODIFY = 0x00000002 3235 DN_MULTISHOT = 0x80000000 3236 DN_RENAME = 0x00000010 3237 FALLOC_FL_COLLAPSE_RANGE = 0x08 3238 FALLOC_FL_INSERT_RANGE = 0x20 3239 FALLOC_FL_KEEP_SIZE = 0x01 3240 FALLOC_FL_NO_HIDE_STALE = 0x04 3241 FALLOC_FL_PUNCH_HOLE = 0x02 3242 FALLOC_FL_UNSHARE_RANGE = 0x40 3243 FALLOC_FL_ZERO_RANGE = 0x10 3244 F_ADD_SEALS = 1033 3245 F_GETLEASE = 1025 3246 F_GETOWN_EX = 16 3247 F_GETPIPE_SZ = 1032 3248 F_GETSIG = 11 3249 F_GET_FILE_RW_HINT = 1037 3250 F_GET_RW_HINT = 1035 3251 F_GET_SEALS = 1034 3252 F_NOTIFY = 1026 3253 F_OFD_GETLK = 36 3254 F_OFD_SETLK = 37 3255 F_OFD_SETLKW = 38 3256 F_SEAL_FUTURE_WRITE = 0x0010 3257 F_SEAL_GROW = 0x0004 3258 F_SEAL_SEAL = 0x0001 3259 F_SEAL_SHRINK = 0x0002 3260 F_SEAL_WRITE = 0x0008 3261 F_SETLEASE = 1024 3262 F_SETOWN_EX = 15 3263 F_SETPIPE_SZ = 1031 3264 F_SETSIG = 10 3265 F_SET_FILE_RW_HINT = 1038 3266 F_SET_RW_HINT = 1036 3267 LOCK_MAND = 32 3268 LOCK_READ = 64 3269 LOCK_RW = 192 3270 LOCK_WRITE = 128 3271 MAX_HANDLE_SZ = 128 3272 O_DIRECT = 131072 3273 O_LARGEFILE = 0 3274 O_NOATIME = 262144 3275 O_PATH = 2097152 3276 O_TMPFILE = 4210688 3277 RWF_WRITE_LIFE_NOT_SET = 0 3278 RWH_WRITE_LIFE_EXTREME = 5 3279 RWH_WRITE_LIFE_LONG = 4 3280 RWH_WRITE_LIFE_MEDIUM = 3 3281 RWH_WRITE_LIFE_NONE = 1 3282 RWH_WRITE_LIFE_SHORT = 2 3283 SPLICE_F_GIFT = 8 3284 SPLICE_F_MORE = 4 3285 SPLICE_F_MOVE = 1 3286 SPLICE_F_NONBLOCK = 2 3287 STATX_ALL = 0x00000fff 3288 STATX_ATIME = 0x00000020 3289 STATX_ATTR_APPEND = 0x00000020 3290 STATX_ATTR_AUTOMOUNT = 0x00001000 3291 STATX_ATTR_COMPRESSED = 0x00000004 3292 STATX_ATTR_DAX = 0x00200000 3293 STATX_ATTR_ENCRYPTED = 0x00000800 3294 STATX_ATTR_IMMUTABLE = 0x00000010 3295 STATX_ATTR_MOUNT_ROOT = 0x00002000 3296 STATX_ATTR_NODUMP = 0x00000040 3297 STATX_ATTR_VERITY = 0x00100000 3298 STATX_BASIC_STATS = 0x000007ff 3299 STATX_BLOCKS = 0x00000400 3300 STATX_BTIME = 0x00000800 3301 STATX_CTIME = 0x00000080 3302 STATX_GID = 0x00000010 3303 STATX_INO = 0x00000100 3304 STATX_MNT_ID = 0x00001000 3305 STATX_MODE = 0x00000002 3306 STATX_MTIME = 0x00000040 3307 STATX_NLINK = 0x00000004 3308 STATX_SIZE = 0x00000200 3309 STATX_TYPE = 0x00000001 3310 STATX_UID = 0x00000008 3311 STATX__RESERVED = 0x80000000 3312 SYNC_FILE_RANGE_WAIT_AFTER = 4 3313 SYNC_FILE_RANGE_WAIT_BEFORE = 1 3314 SYNC_FILE_RANGE_WRITE = 2 3315 SYNC_FILE_RANGE_WRITE_AND_WAIT = 7 3316 X_FALLOC_H_ = 0 3317 X_LINUX_STAT_H = 0 3318 X_POSIX_FD_SETSIZE = 20 3319 X_POSIX_HIWAT = 512 3320 X_POSIX_QLIMIT = 1 3321 X_POSIX_UIO_MAXIOV = 16 3322 SQLITE_INTARRAY_H = 0 3323 JT_MAX_PATHNAME = 512 3324 JT_VFS_NAME = "jt" 3325 MALLOC_LOG_FRAMES = 10 3326 DEFAULT_SECTOR_SIZE = 0x1000 3327 MAX_PAGE_SIZE = 0x10000 3328 MULTIPLEX_CTRL_ENABLE = 214014 3329 MULTIPLEX_CTRL_SET_CHUNK_SIZE = 214015 3330 MULTIPLEX_CTRL_SET_MAX_CHUNKS = 214016 3331 SQLITE_MULTIPLEX_CHUNK_SIZE = 2147418112 3332 SQLITE_MULTIPLEX_MAX_CHUNKS = 12 3333 SQLITE_MULTIPLEX_VFS_NAME = "multiplex" 3334 SQLITE_TEST_MULTIPLEX_H = 0 3335 MAX_MUTEXES = 14 3336 STATIC_MUTEXES = 12 3337 BLOBSIZE = 10485760 3338 BLOCKSIZE = 512 3339 DATABASE_FILE = 1 3340 FS_VFS_NAME = "fs" 3341 JOURNAL_FILE = 2 3342 INST_MAX_PATHNAME = 512 3343 OS_ACCESS = 1 3344 OS_ANNOTATE = 28 3345 OS_CHECKRESERVEDLOCK = 2 3346 OS_CLOSE = 3 3347 OS_CURRENTTIME = 4 3348 OS_DELETE = 5 3349 OS_DEVCHAR = 6 3350 OS_FILECONTROL = 7 3351 OS_FILESIZE = 8 3352 OS_FULLPATHNAME = 9 3353 OS_LOCK = 11 3354 OS_NUMEVENTS = 29 3355 OS_OPEN = 12 3356 OS_RANDOMNESS = 13 3357 OS_READ = 14 3358 OS_SECTORSIZE = 15 3359 OS_SHMBARRIER = 26 3360 OS_SHMLOCK = 25 3361 OS_SHMMAP = 23 3362 OS_SHMUNMAP = 22 3363 OS_SLEEP = 16 3364 OS_SYNC = 17 3365 OS_TRUNCATE = 18 3366 OS_UNLOCK = 19 3367 OS_WRITE = 20 3368 VFSLOG_BUFFERSIZE = 8192 3369 TESTPCACHE_CLEAR = 0xd42670d4 3370 TESTPCACHE_NPAGE = 217 3371 TESTPCACHE_RESERVE = 17 3372 TESTPCACHE_VALID = 0x364585fd 3373 MSG_Close = 6 3374 MSG_Done = 7 3375 MSG_Finalize = 5 3376 MSG_Open = 1 3377 MSG_Prepare = 2 3378 MSG_Reset = 4 3379 MSG_Step = 3 3380 MADV_COLD = 20 3381 MADV_DODUMP = 17 3382 MADV_DOFORK = 11 3383 MADV_DONTDUMP = 16 3384 MADV_DONTFORK = 10 3385 MADV_DONTNEED = 4 3386 MADV_FREE = 8 3387 MADV_HUGEPAGE = 14 3388 MADV_HWPOISON = 100 3389 MADV_KEEPONFORK = 19 3390 MADV_MERGEABLE = 12 3391 MADV_NOHUGEPAGE = 15 3392 MADV_NORMAL = 0 3393 MADV_PAGEOUT = 21 3394 MADV_RANDOM = 1 3395 MADV_REMOVE = 9 3396 MADV_SEQUENTIAL = 2 3397 MADV_UNMERGEABLE = 13 3398 MADV_WILLNEED = 3 3399 MADV_WIPEONFORK = 18 3400 MAP_ANON = 32 3401 MAP_ANONYMOUS = 0x20 3402 MAP_DENYWRITE = 0x00800 3403 MAP_EXECUTABLE = 0x01000 3404 MAP_FILE = 0 3405 MAP_FIXED = 0x10 3406 MAP_FIXED_NOREPLACE = 0x100000 3407 MAP_GROWSDOWN = 0x00100 3408 MAP_HUGETLB = 0x40000 3409 MAP_HUGE_MASK = 0x3f 3410 MAP_HUGE_SHIFT = 26 3411 MAP_LOCKED = 0x00080 3412 MAP_NONBLOCK = 0x10000 3413 MAP_NORESERVE = 0x00040 3414 MAP_POPULATE = 0x08000 3415 MAP_PRIVATE = 0x02 3416 MAP_SHARED = 0x01 3417 MAP_SHARED_VALIDATE = 0x03 3418 MAP_STACK = 0x20000 3419 MAP_SYNC = 0x80000 3420 MAP_TYPE = 0x0f 3421 MCL_CURRENT = 0x2000 3422 MCL_FUTURE = 0x4000 3423 MCL_ONFAULT = 0x8000 3424 MFD_ALLOW_SEALING = 2 3425 MFD_CLOEXEC = 1 3426 MFD_HUGETLB = 4 3427 MLOCK_ONFAULT = 1 3428 MREMAP_FIXED = 2 3429 MREMAP_MAYMOVE = 1 3430 MS_ASYNC = 1 3431 MS_INVALIDATE = 2 3432 MS_SYNC = 4 3433 PKEY_DISABLE_ACCESS = 0x1 3434 PKEY_DISABLE_WRITE = 0x2 3435 POSIX_MADV_DONTNEED = 4 3436 POSIX_MADV_NORMAL = 0 3437 POSIX_MADV_RANDOM = 1 3438 POSIX_MADV_SEQUENTIAL = 2 3439 POSIX_MADV_WILLNEED = 3 3440 PROT_EXEC = 0x4 3441 PROT_GROWSDOWN = 0x01000000 3442 PROT_GROWSUP = 0x02000000 3443 PROT_NONE = 0x0 3444 PROT_READ = 0x1 3445 PROT_SAO = 0x10 3446 PROT_WRITE = 0x2 3447 X_SYS_MMAN_H = 1 3448 TCLVAR_NAME_EQ = 101 3449 TCLVAR_NAME_MATCH = 109 3450 TCLVAR_VALUE_GLOB = 103 3451 TCLVAR_VALUE_LIKE = 108 3452 TCLVAR_VALUE_REGEXP = 114 3453 FAULT_INJECT_NONE = 0 3454 FAULT_INJECT_PERSISTENT = 2 3455 FAULT_INJECT_TRANSIENT = 1 3456 TESTVFS_ACCESS_MASK = 0x00004000 3457 TESTVFS_ALL_MASK = 0x001FFFFF 3458 TESTVFS_CKLOCK_MASK = 0x00080000 3459 TESTVFS_CLOSE_MASK = 0x00000800 3460 TESTVFS_DELETE_MASK = 0x00000400 3461 TESTVFS_FCNTL_MASK = 0x00100000 3462 TESTVFS_FULLPATHNAME_MASK = 0x00008000 3463 TESTVFS_LOCK_MASK = 0x00040000 3464 TESTVFS_MAX_ARGS = 12 3465 TESTVFS_MAX_PAGES = 1024 3466 TESTVFS_OPEN_MASK = 0x00000100 3467 TESTVFS_READ_MASK = 0x00010000 3468 TESTVFS_SHMBARRIER_MASK = 0x00000040 3469 TESTVFS_SHMCLOSE_MASK = 0x00000080 3470 TESTVFS_SHMLOCK_MASK = 0x00000010 3471 TESTVFS_SHMMAP_MASK = 0x00000020 3472 TESTVFS_SHMOPEN_MASK = 0x00000001 3473 TESTVFS_SYNC_MASK = 0x00000200 3474 TESTVFS_TRUNCATE_MASK = 0x00002000 3475 TESTVFS_UNLOCK_MASK = 0x00020000 3476 TESTVFS_WRITE_MASK = 0x00001000 3477 ) 3478 3479 const ( 3480 TCL_QUEUE_TAIL = 0 3481 TCL_QUEUE_HEAD = 1 3482 TCL_QUEUE_MARK = 2 3483 ) 3484 3485 const ( 3486 TCL_PATH_ABSOLUTE = 0 3487 TCL_PATH_RELATIVE = 1 3488 TCL_PATH_VOLUME_RELATIVE = 2 3489 ) 3490 3491 const ( 3492 TCL_INT = 0 3493 TCL_DOUBLE = 1 3494 TCL_EITHER = 2 3495 TCL_WIDE_INT = 3 3496 ) 3497 3498 const ( 3499 _PC_LINK_MAX = 0 3500 _PC_MAX_CANON = 1 3501 _PC_MAX_INPUT = 2 3502 _PC_NAME_MAX = 3 3503 _PC_PATH_MAX = 4 3504 _PC_PIPE_BUF = 5 3505 _PC_CHOWN_RESTRICTED = 6 3506 _PC_NO_TRUNC = 7 3507 _PC_VDISABLE = 8 3508 _PC_SYNC_IO = 9 3509 _PC_ASYNC_IO = 10 3510 _PC_PRIO_IO = 11 3511 _PC_SOCK_MAXBUF = 12 3512 _PC_FILESIZEBITS = 13 3513 _PC_REC_INCR_XFER_SIZE = 14 3514 _PC_REC_MAX_XFER_SIZE = 15 3515 _PC_REC_MIN_XFER_SIZE = 16 3516 _PC_REC_XFER_ALIGN = 17 3517 _PC_ALLOC_SIZE_MIN = 18 3518 _PC_SYMLINK_MAX = 19 3519 _PC_2_SYMLINKS = 20 3520 ) 3521 3522 const ( 3523 _CS_PATH = 0 3524 3525 _CS_V6_WIDTH_RESTRICTED_ENVS = 1 3526 3527 _CS_GNU_LIBC_VERSION = 2 3528 _CS_GNU_LIBPTHREAD_VERSION = 3 3529 3530 _CS_V5_WIDTH_RESTRICTED_ENVS = 4 3531 3532 _CS_V7_WIDTH_RESTRICTED_ENVS = 5 3533 3534 _CS_LFS_CFLAGS = 1000 3535 _CS_LFS_LDFLAGS = 1001 3536 _CS_LFS_LIBS = 1002 3537 _CS_LFS_LINTFLAGS = 1003 3538 _CS_LFS64_CFLAGS = 1004 3539 _CS_LFS64_LDFLAGS = 1005 3540 _CS_LFS64_LIBS = 1006 3541 _CS_LFS64_LINTFLAGS = 1007 3542 3543 _CS_XBS5_ILP32_OFF32_CFLAGS = 1100 3544 _CS_XBS5_ILP32_OFF32_LDFLAGS = 1101 3545 _CS_XBS5_ILP32_OFF32_LIBS = 1102 3546 _CS_XBS5_ILP32_OFF32_LINTFLAGS = 1103 3547 _CS_XBS5_ILP32_OFFBIG_CFLAGS = 1104 3548 _CS_XBS5_ILP32_OFFBIG_LDFLAGS = 1105 3549 _CS_XBS5_ILP32_OFFBIG_LIBS = 1106 3550 _CS_XBS5_ILP32_OFFBIG_LINTFLAGS = 1107 3551 _CS_XBS5_LP64_OFF64_CFLAGS = 1108 3552 _CS_XBS5_LP64_OFF64_LDFLAGS = 1109 3553 _CS_XBS5_LP64_OFF64_LIBS = 1110 3554 _CS_XBS5_LP64_OFF64_LINTFLAGS = 1111 3555 _CS_XBS5_LPBIG_OFFBIG_CFLAGS = 1112 3556 _CS_XBS5_LPBIG_OFFBIG_LDFLAGS = 1113 3557 _CS_XBS5_LPBIG_OFFBIG_LIBS = 1114 3558 _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS = 1115 3559 3560 _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116 3561 _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117 3562 _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118 3563 _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119 3564 _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120 3565 _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121 3566 _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122 3567 _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123 3568 _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124 3569 _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125 3570 _CS_POSIX_V6_LP64_OFF64_LIBS = 1126 3571 _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127 3572 _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128 3573 _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129 3574 _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130 3575 _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131 3576 3577 _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132 3578 _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133 3579 _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134 3580 _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135 3581 _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136 3582 _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137 3583 _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138 3584 _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139 3585 _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140 3586 _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141 3587 _CS_POSIX_V7_LP64_OFF64_LIBS = 1142 3588 _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143 3589 _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144 3590 _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145 3591 _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146 3592 _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147 3593 3594 _CS_V6_ENV = 1148 3595 _CS_V7_ENV = 1149 3596 ) 3597 3598 const ( 3599 _SC_ARG_MAX = 0 3600 _SC_CHILD_MAX = 1 3601 _SC_CLK_TCK = 2 3602 _SC_NGROUPS_MAX = 3 3603 _SC_OPEN_MAX = 4 3604 _SC_STREAM_MAX = 5 3605 _SC_TZNAME_MAX = 6 3606 _SC_JOB_CONTROL = 7 3607 _SC_SAVED_IDS = 8 3608 _SC_REALTIME_SIGNALS = 9 3609 _SC_PRIORITY_SCHEDULING = 10 3610 _SC_TIMERS = 11 3611 _SC_ASYNCHRONOUS_IO = 12 3612 _SC_PRIORITIZED_IO = 13 3613 _SC_SYNCHRONIZED_IO = 14 3614 _SC_FSYNC = 15 3615 _SC_MAPPED_FILES = 16 3616 _SC_MEMLOCK = 17 3617 _SC_MEMLOCK_RANGE = 18 3618 _SC_MEMORY_PROTECTION = 19 3619 _SC_MESSAGE_PASSING = 20 3620 _SC_SEMAPHORES = 21 3621 _SC_SHARED_MEMORY_OBJECTS = 22 3622 _SC_AIO_LISTIO_MAX = 23 3623 _SC_AIO_MAX = 24 3624 _SC_AIO_PRIO_DELTA_MAX = 25 3625 _SC_DELAYTIMER_MAX = 26 3626 _SC_MQ_OPEN_MAX = 27 3627 _SC_MQ_PRIO_MAX = 28 3628 _SC_VERSION = 29 3629 _SC_PAGESIZE = 30 3630 _SC_RTSIG_MAX = 31 3631 _SC_SEM_NSEMS_MAX = 32 3632 _SC_SEM_VALUE_MAX = 33 3633 _SC_SIGQUEUE_MAX = 34 3634 _SC_TIMER_MAX = 35 3635 3636 _SC_BC_BASE_MAX = 36 3637 _SC_BC_DIM_MAX = 37 3638 _SC_BC_SCALE_MAX = 38 3639 _SC_BC_STRING_MAX = 39 3640 _SC_COLL_WEIGHTS_MAX = 40 3641 _SC_EQUIV_CLASS_MAX = 41 3642 _SC_EXPR_NEST_MAX = 42 3643 _SC_LINE_MAX = 43 3644 _SC_RE_DUP_MAX = 44 3645 _SC_CHARCLASS_NAME_MAX = 45 3646 3647 _SC_2_VERSION = 46 3648 _SC_2_C_BIND = 47 3649 _SC_2_C_DEV = 48 3650 _SC_2_FORT_DEV = 49 3651 _SC_2_FORT_RUN = 50 3652 _SC_2_SW_DEV = 51 3653 _SC_2_LOCALEDEF = 52 3654 3655 _SC_PII = 53 3656 _SC_PII_XTI = 54 3657 _SC_PII_SOCKET = 55 3658 _SC_PII_INTERNET = 56 3659 _SC_PII_OSI = 57 3660 _SC_POLL = 58 3661 _SC_SELECT = 59 3662 _SC_UIO_MAXIOV = 60 3663 _SC_IOV_MAX = 60 3664 _SC_PII_INTERNET_STREAM = 61 3665 _SC_PII_INTERNET_DGRAM = 62 3666 _SC_PII_OSI_COTS = 63 3667 _SC_PII_OSI_CLTS = 64 3668 _SC_PII_OSI_M = 65 3669 _SC_T_IOV_MAX = 66 3670 3671 _SC_THREADS = 67 3672 _SC_THREAD_SAFE_FUNCTIONS = 68 3673 _SC_GETGR_R_SIZE_MAX = 69 3674 _SC_GETPW_R_SIZE_MAX = 70 3675 _SC_LOGIN_NAME_MAX = 71 3676 _SC_TTY_NAME_MAX = 72 3677 _SC_THREAD_DESTRUCTOR_ITERATIONS = 73 3678 _SC_THREAD_KEYS_MAX = 74 3679 _SC_THREAD_STACK_MIN = 75 3680 _SC_THREAD_THREADS_MAX = 76 3681 _SC_THREAD_ATTR_STACKADDR = 77 3682 _SC_THREAD_ATTR_STACKSIZE = 78 3683 _SC_THREAD_PRIORITY_SCHEDULING = 79 3684 _SC_THREAD_PRIO_INHERIT = 80 3685 _SC_THREAD_PRIO_PROTECT = 81 3686 _SC_THREAD_PROCESS_SHARED = 82 3687 3688 _SC_NPROCESSORS_CONF = 83 3689 _SC_NPROCESSORS_ONLN = 84 3690 _SC_PHYS_PAGES = 85 3691 _SC_AVPHYS_PAGES = 86 3692 _SC_ATEXIT_MAX = 87 3693 _SC_PASS_MAX = 88 3694 3695 _SC_XOPEN_VERSION = 89 3696 _SC_XOPEN_XCU_VERSION = 90 3697 _SC_XOPEN_UNIX = 91 3698 _SC_XOPEN_CRYPT = 92 3699 _SC_XOPEN_ENH_I18N = 93 3700 _SC_XOPEN_SHM = 94 3701 3702 _SC_2_CHAR_TERM = 95 3703 _SC_2_C_VERSION = 96 3704 _SC_2_UPE = 97 3705 3706 _SC_XOPEN_XPG2 = 98 3707 _SC_XOPEN_XPG3 = 99 3708 _SC_XOPEN_XPG4 = 100 3709 3710 _SC_CHAR_BIT = 101 3711 _SC_CHAR_MAX = 102 3712 _SC_CHAR_MIN = 103 3713 _SC_INT_MAX = 104 3714 _SC_INT_MIN = 105 3715 _SC_LONG_BIT = 106 3716 _SC_WORD_BIT = 107 3717 _SC_MB_LEN_MAX = 108 3718 _SC_NZERO = 109 3719 _SC_SSIZE_MAX = 110 3720 _SC_SCHAR_MAX = 111 3721 _SC_SCHAR_MIN = 112 3722 _SC_SHRT_MAX = 113 3723 _SC_SHRT_MIN = 114 3724 _SC_UCHAR_MAX = 115 3725 _SC_UINT_MAX = 116 3726 _SC_ULONG_MAX = 117 3727 _SC_USHRT_MAX = 118 3728 3729 _SC_NL_ARGMAX = 119 3730 _SC_NL_LANGMAX = 120 3731 _SC_NL_MSGMAX = 121 3732 _SC_NL_NMAX = 122 3733 _SC_NL_SETMAX = 123 3734 _SC_NL_TEXTMAX = 124 3735 3736 _SC_XBS5_ILP32_OFF32 = 125 3737 _SC_XBS5_ILP32_OFFBIG = 126 3738 _SC_XBS5_LP64_OFF64 = 127 3739 _SC_XBS5_LPBIG_OFFBIG = 128 3740 3741 _SC_XOPEN_LEGACY = 129 3742 _SC_XOPEN_REALTIME = 130 3743 _SC_XOPEN_REALTIME_THREADS = 131 3744 3745 _SC_ADVISORY_INFO = 132 3746 _SC_BARRIERS = 133 3747 _SC_BASE = 134 3748 _SC_C_LANG_SUPPORT = 135 3749 _SC_C_LANG_SUPPORT_R = 136 3750 _SC_CLOCK_SELECTION = 137 3751 _SC_CPUTIME = 138 3752 _SC_THREAD_CPUTIME = 139 3753 _SC_DEVICE_IO = 140 3754 _SC_DEVICE_SPECIFIC = 141 3755 _SC_DEVICE_SPECIFIC_R = 142 3756 _SC_FD_MGMT = 143 3757 _SC_FIFO = 144 3758 _SC_PIPE = 145 3759 _SC_FILE_ATTRIBUTES = 146 3760 _SC_FILE_LOCKING = 147 3761 _SC_FILE_SYSTEM = 148 3762 _SC_MONOTONIC_CLOCK = 149 3763 _SC_MULTI_PROCESS = 150 3764 _SC_SINGLE_PROCESS = 151 3765 _SC_NETWORKING = 152 3766 _SC_READER_WRITER_LOCKS = 153 3767 _SC_SPIN_LOCKS = 154 3768 _SC_REGEXP = 155 3769 _SC_REGEX_VERSION = 156 3770 _SC_SHELL = 157 3771 _SC_SIGNALS = 158 3772 _SC_SPAWN = 159 3773 _SC_SPORADIC_SERVER = 160 3774 _SC_THREAD_SPORADIC_SERVER = 161 3775 _SC_SYSTEM_DATABASE = 162 3776 _SC_SYSTEM_DATABASE_R = 163 3777 _SC_TIMEOUTS = 164 3778 _SC_TYPED_MEMORY_OBJECTS = 165 3779 _SC_USER_GROUPS = 166 3780 _SC_USER_GROUPS_R = 167 3781 _SC_2_PBS = 168 3782 _SC_2_PBS_ACCOUNTING = 169 3783 _SC_2_PBS_LOCATE = 170 3784 _SC_2_PBS_MESSAGE = 171 3785 _SC_2_PBS_TRACK = 172 3786 _SC_SYMLOOP_MAX = 173 3787 _SC_STREAMS = 174 3788 _SC_2_PBS_CHECKPOINT = 175 3789 3790 _SC_V6_ILP32_OFF32 = 176 3791 _SC_V6_ILP32_OFFBIG = 177 3792 _SC_V6_LP64_OFF64 = 178 3793 _SC_V6_LPBIG_OFFBIG = 179 3794 3795 _SC_HOST_NAME_MAX = 180 3796 _SC_TRACE = 181 3797 _SC_TRACE_EVENT_FILTER = 182 3798 _SC_TRACE_INHERIT = 183 3799 _SC_TRACE_LOG = 184 3800 3801 _SC_LEVEL1_ICACHE_SIZE = 185 3802 _SC_LEVEL1_ICACHE_ASSOC = 186 3803 _SC_LEVEL1_ICACHE_LINESIZE = 187 3804 _SC_LEVEL1_DCACHE_SIZE = 188 3805 _SC_LEVEL1_DCACHE_ASSOC = 189 3806 _SC_LEVEL1_DCACHE_LINESIZE = 190 3807 _SC_LEVEL2_CACHE_SIZE = 191 3808 _SC_LEVEL2_CACHE_ASSOC = 192 3809 _SC_LEVEL2_CACHE_LINESIZE = 193 3810 _SC_LEVEL3_CACHE_SIZE = 194 3811 _SC_LEVEL3_CACHE_ASSOC = 195 3812 _SC_LEVEL3_CACHE_LINESIZE = 196 3813 _SC_LEVEL4_CACHE_SIZE = 197 3814 _SC_LEVEL4_CACHE_ASSOC = 198 3815 _SC_LEVEL4_CACHE_LINESIZE = 199 3816 3817 _SC_IPV6 = 235 3818 _SC_RAW_SOCKETS = 236 3819 3820 _SC_V7_ILP32_OFF32 = 237 3821 _SC_V7_ILP32_OFFBIG = 238 3822 _SC_V7_LP64_OFF64 = 239 3823 _SC_V7_LPBIG_OFFBIG = 240 3824 3825 _SC_SS_REPL_MAX = 241 3826 3827 _SC_TRACE_EVENT_NAME_MAX = 242 3828 _SC_TRACE_NAME_MAX = 243 3829 _SC_TRACE_SYS_MAX = 244 3830 _SC_TRACE_USER_EVENT_MAX = 245 3831 3832 _SC_XOPEN_STREAMS = 246 3833 3834 _SC_THREAD_ROBUST_PRIO_INHERIT = 247 3835 _SC_THREAD_ROBUST_PRIO_PROTECT = 248 3836 ) 3837 3838 const ( 3839 F_OWNER_TID = 0 3840 F_OWNER_PID = 1 3841 F_OWNER_PGRP = 2 3842 F_OWNER_GID = 2 3843 ) 3844 3845 const ( 3846 RUSAGE_SELF = 0 3847 3848 RUSAGE_CHILDREN = -1 3849 3850 RUSAGE_THREAD = 1 3851 ) 3852 3853 const ( 3854 PRIO_PROCESS = 0 3855 PRIO_PGRP = 1 3856 PRIO_USER = 2 3857 ) 3858 3859 const ( 3860 RLIMIT_CPU = 0 3861 3862 RLIMIT_FSIZE = 1 3863 3864 RLIMIT_DATA = 2 3865 3866 RLIMIT_STACK = 3 3867 3868 RLIMIT_CORE = 4 3869 3870 __RLIMIT_RSS = 5 3871 3872 RLIMIT_NOFILE = 7 3873 __RLIMIT_OFILE = 7 3874 3875 RLIMIT_AS = 9 3876 3877 __RLIMIT_NPROC = 6 3878 3879 __RLIMIT_MEMLOCK = 8 3880 3881 __RLIMIT_LOCKS = 10 3882 3883 __RLIMIT_SIGPENDING = 11 3884 3885 __RLIMIT_MSGQUEUE = 12 3886 3887 __RLIMIT_NICE = 13 3888 3889 __RLIMIT_RTPRIO = 14 3890 3891 __RLIMIT_RTTIME = 15 3892 3893 __RLIMIT_NLIMITS = 16 3894 __RLIM_NLIMITS = 16 3895 ) 3896 3897 const ( 3898 SIGEV_SIGNAL = 0 3899 SIGEV_NONE = 1 3900 SIGEV_THREAD = 2 3901 3902 SIGEV_THREAD_ID = 4 3903 ) 3904 3905 const ( 3906 SEGV_MAPERR = 1 3907 SEGV_ACCERR = 2 3908 SEGV_BNDERR = 3 3909 SEGV_PKUERR = 4 3910 SEGV_ACCADI = 5 3911 SEGV_ADIDERR = 6 3912 SEGV_ADIPERR = 7 3913 ) 3914 3915 const ( 3916 BUS_ADRALN = 1 3917 BUS_ADRERR = 2 3918 BUS_OBJERR = 3 3919 BUS_MCEERR_AR = 4 3920 BUS_MCEERR_AO = 5 3921 ) 3922 3923 const ( 3924 CLD_EXITED = 1 3925 CLD_KILLED = 2 3926 CLD_DUMPED = 3 3927 CLD_TRAPPED = 4 3928 CLD_STOPPED = 5 3929 CLD_CONTINUED = 6 3930 ) 3931 3932 const ( 3933 POLL_IN = 1 3934 POLL_OUT = 2 3935 POLL_MSG = 3 3936 POLL_ERR = 4 3937 POLL_PRI = 5 3938 POLL_HUP = 6 3939 ) 3940 3941 const ( 3942 SI_ASYNCNL = -60 3943 SI_DETHREAD = -7 3944 3945 SI_TKILL = -6 3946 SI_SIGIO = -5 3947 SI_ASYNCIO = -4 3948 SI_MESGQ = -3 3949 SI_TIMER = -2 3950 SI_QUEUE = -1 3951 SI_USER = 0 3952 SI_KERNEL = 128 3953 ) 3954 3955 const ( 3956 ILL_ILLOPC = 1 3957 ILL_ILLOPN = 2 3958 ILL_ILLADR = 3 3959 ILL_ILLTRP = 4 3960 ILL_PRVOPC = 5 3961 ILL_PRVREG = 6 3962 ILL_COPROC = 7 3963 ILL_BADSTK = 8 3964 ILL_BADIADDR = 9 3965 ) 3966 3967 const ( 3968 FPE_INTDIV = 1 3969 FPE_INTOVF = 2 3970 FPE_FLTDIV = 3 3971 FPE_FLTOVF = 4 3972 FPE_FLTUND = 5 3973 FPE_FLTRES = 6 3974 FPE_FLTINV = 7 3975 FPE_FLTSUB = 8 3976 FPE_FLTUNK = 14 3977 FPE_CONDTRAP = 15 3978 ) 3979 3980 const ( 3981 SS_ONSTACK = 1 3982 SS_DISABLE = 2 3983 ) 3984 3985 const ( 3986 P_ALL = 0 3987 P_PID = 1 3988 P_PGID = 2 3989 ) 3990 3991 const ( 3992 _ISupper = 256 3993 _ISlower = 512 3994 _ISalpha = 1024 3995 _ISdigit = 2048 3996 _ISxdigit = 4096 3997 _ISspace = 8192 3998 _ISprint = 16384 3999 _ISgraph = 32768 4000 _ISblank = 1 4001 _IScntrl = 2 4002 _ISpunct = 4 4003 _ISalnum = 8 4004 ) 4005 4006 const ( 4007 DT_UNKNOWN = 0 4008 DT_FIFO = 1 4009 DT_CHR = 2 4010 DT_DIR = 4 4011 DT_BLK = 6 4012 DT_REG = 8 4013 DT_LNK = 10 4014 DT_SOCK = 12 4015 DT_WHT = 14 4016 ) 4017 4018 const ( 4019 PTHREAD_RWLOCK_PREFER_READER_NP = 0 4020 PTHREAD_RWLOCK_PREFER_WRITER_NP = 1 4021 PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP = 2 4022 PTHREAD_RWLOCK_DEFAULT_NP = 0 4023 ) 4024 4025 const ( 4026 PTHREAD_INHERIT_SCHED = 0 4027 PTHREAD_EXPLICIT_SCHED = 1 4028 ) 4029 4030 const ( 4031 PTHREAD_SCOPE_SYSTEM = 0 4032 PTHREAD_SCOPE_PROCESS = 1 4033 ) 4034 4035 const ( 4036 PTHREAD_PROCESS_PRIVATE = 0 4037 PTHREAD_PROCESS_SHARED = 1 4038 ) 4039 4040 const ( 4041 PTHREAD_CANCEL_ENABLE = 0 4042 PTHREAD_CANCEL_DISABLE = 1 4043 ) 4044 const ( 4045 PTHREAD_CANCEL_DEFERRED = 0 4046 PTHREAD_CANCEL_ASYNCHRONOUS = 1 4047 ) 4048 4049 const ( 4050 PTHREAD_CREATE_JOINABLE = 0 4051 PTHREAD_CREATE_DETACHED = 1 4052 ) 4053 4054 const ( 4055 PTHREAD_MUTEX_TIMED_NP = 0 4056 PTHREAD_MUTEX_RECURSIVE_NP = 1 4057 PTHREAD_MUTEX_ERRORCHECK_NP = 2 4058 PTHREAD_MUTEX_ADAPTIVE_NP = 3 4059 PTHREAD_MUTEX_NORMAL = 0 4060 PTHREAD_MUTEX_RECURSIVE = 1 4061 PTHREAD_MUTEX_ERRORCHECK = 2 4062 PTHREAD_MUTEX_DEFAULT = 0 4063 PTHREAD_MUTEX_FAST_NP = 0 4064 ) 4065 4066 const ( 4067 PTHREAD_MUTEX_STALLED = 0 4068 PTHREAD_MUTEX_STALLED_NP = 0 4069 PTHREAD_MUTEX_ROBUST = 1 4070 PTHREAD_MUTEX_ROBUST_NP = 1 4071 ) 4072 4073 const ( 4074 PTHREAD_PRIO_NONE = 0 4075 PTHREAD_PRIO_INHERIT = 1 4076 PTHREAD_PRIO_PROTECT = 2 4077 ) 4078 4079 const ( 4080 ITIMER_REAL = 0 4081 4082 ITIMER_VIRTUAL = 1 4083 4084 ITIMER_PROF = 2 4085 ) 4086 4087 type ptrdiff_t = int64 4088 4089 type size_t = uint64 4090 4091 type wchar_t = int32 4092 4093 type va_list = uintptr 4094 4095 type sqlite32 = struct { 4096 FpVfs uintptr 4097 FpVdbe uintptr 4098 FpDfltColl uintptr 4099 Fmutex uintptr 4100 FaDb uintptr 4101 FnDb int32 4102 FmDbFlags u32 4103 Fflags u64 4104 FlastRowid i64 4105 FszMmap i64 4106 FnSchemaLock u32 4107 FopenFlags uint32 4108 FerrCode int32 4109 FerrByteOffset int32 4110 FerrMask int32 4111 FiSysErrno int32 4112 FdbOptFlags u32 4113 Fenc u8 4114 FautoCommit u8 4115 Ftemp_store u8 4116 FmallocFailed u8 4117 FbBenignMalloc u8 4118 FdfltLockMode u8 4119 FnextAutovac int8 4120 FsuppressErr u8 4121 FvtabOnConflict u8 4122 FisTransactionSavepoint u8 4123 FmTrace u8 4124 FnoSharedCache u8 4125 FnSqlExec u8 4126 FeOpenState u8 4127 F__ccgo_pad1 [2]byte 4128 FnextPagesize int32 4129 FnChange i64 4130 FnTotalChange i64 4131 FaLimit [12]int32 4132 FnMaxSorterMmap int32 4133 F__ccgo_pad2 [4]byte 4134 Finit struct { 4135 FnewTnum Pgno 4136 FiDb u8 4137 Fbusy u8 4138 F__ccgo_pad1 [2]byte 4139 ForphanTrigger uint8 4140 F__ccgo_pad2 [7]byte 4141 FazInit uintptr 4142 } 4143 FnVdbeActive int32 4144 FnVdbeRead int32 4145 FnVdbeWrite int32 4146 FnVdbeExec int32 4147 FnVDestroy int32 4148 FnExtension int32 4149 FaExtension uintptr 4150 Ftrace struct{ FxLegacy uintptr } 4151 FpTraceArg uintptr 4152 FxProfile uintptr 4153 FpProfileArg uintptr 4154 FpCommitArg uintptr 4155 FxCommitCallback uintptr 4156 FpRollbackArg uintptr 4157 FxRollbackCallback uintptr 4158 FpUpdateArg uintptr 4159 FxUpdateCallback uintptr 4160 FpAutovacPagesArg uintptr 4161 FxAutovacDestr uintptr 4162 FxAutovacPages uintptr 4163 FpParse uintptr 4164 FpPreUpdateArg uintptr 4165 FxPreUpdateCallback uintptr 4166 FpPreUpdate uintptr 4167 FxWalCallback uintptr 4168 FpWalArg uintptr 4169 FxCollNeeded uintptr 4170 FxCollNeeded16 uintptr 4171 FpCollNeededArg uintptr 4172 FpErr uintptr 4173 Fu1 struct { 4174 F__ccgo_pad1 [0]uint64 4175 FisInterrupted int32 4176 F__ccgo_pad2 [4]byte 4177 } 4178 Flookaside Lookaside 4179 FxAuth sqlite3_xauth 4180 FpAuthArg uintptr 4181 FxProgress uintptr 4182 FpProgressArg uintptr 4183 FnProgressOps uint32 4184 FnVTrans int32 4185 FaModule Hash 4186 FpVtabCtx uintptr 4187 FaVTrans uintptr 4188 FpDisconnect uintptr 4189 FaFunc Hash 4190 FaCollSeq Hash 4191 FbusyHandler BusyHandler 4192 FaDbStatic [2]Db 4193 FpSavepoint uintptr 4194 FnAnalysisLimit int32 4195 FbusyTimeout int32 4196 FnSavepoint int32 4197 FnStatement int32 4198 FnDeferredCons i64 4199 FnDeferredImmCons i64 4200 FpnBytesFreed uintptr 4201 FpBlockingConnection uintptr 4202 FpUnlockConnection uintptr 4203 FpUnlockArg uintptr 4204 FxUnlockNotify uintptr 4205 FpNextBlocked uintptr 4206 } 4207 4208 type sqlite_int64 = int64 4209 type sqlite_uint64 = uint64 4210 type sqlite3_int64 = sqlite_int64 4211 type sqlite3_uint64 = sqlite_uint64 4212 4213 type sqlite3_callback = uintptr 4214 4215 type sqlite3_file1 = struct{ FpMethods uintptr } 4216 4217 type sqlite3_file = sqlite3_file1 4218 type sqlite3_io_methods1 = struct { 4219 FiVersion int32 4220 F__ccgo_pad1 [4]byte 4221 FxClose uintptr 4222 FxRead uintptr 4223 FxWrite uintptr 4224 FxTruncate uintptr 4225 FxSync uintptr 4226 FxFileSize uintptr 4227 FxLock uintptr 4228 FxUnlock uintptr 4229 FxCheckReservedLock uintptr 4230 FxFileControl uintptr 4231 FxSectorSize uintptr 4232 FxDeviceCharacteristics uintptr 4233 FxShmMap uintptr 4234 FxShmLock uintptr 4235 FxShmBarrier uintptr 4236 FxShmUnmap uintptr 4237 FxFetch uintptr 4238 FxUnfetch uintptr 4239 } 4240 4241 type sqlite3_io_methods = sqlite3_io_methods1 4242 4243 type sqlite3_mutex1 = struct { 4244 FpReal uintptr 4245 FeType int32 4246 F__ccgo_pad1 [4]byte 4247 } 4248 4249 type sqlite3_api_routines1 = struct { 4250 Faggregate_context uintptr 4251 Faggregate_count uintptr 4252 Fbind_blob uintptr 4253 Fbind_double uintptr 4254 Fbind_int uintptr 4255 Fbind_int64 uintptr 4256 Fbind_null uintptr 4257 Fbind_parameter_count uintptr 4258 Fbind_parameter_index uintptr 4259 Fbind_parameter_name uintptr 4260 Fbind_text uintptr 4261 Fbind_text16 uintptr 4262 Fbind_value uintptr 4263 Fbusy_handler uintptr 4264 Fbusy_timeout uintptr 4265 Fchanges uintptr 4266 Fclose uintptr 4267 Fcollation_needed uintptr 4268 Fcollation_needed16 uintptr 4269 Fcolumn_blob uintptr 4270 Fcolumn_bytes uintptr 4271 Fcolumn_bytes16 uintptr 4272 Fcolumn_count uintptr 4273 Fcolumn_database_name uintptr 4274 Fcolumn_database_name16 uintptr 4275 Fcolumn_decltype uintptr 4276 Fcolumn_decltype16 uintptr 4277 Fcolumn_double uintptr 4278 Fcolumn_int uintptr 4279 Fcolumn_int64 uintptr 4280 Fcolumn_name uintptr 4281 Fcolumn_name16 uintptr 4282 Fcolumn_origin_name uintptr 4283 Fcolumn_origin_name16 uintptr 4284 Fcolumn_table_name uintptr 4285 Fcolumn_table_name16 uintptr 4286 Fcolumn_text uintptr 4287 Fcolumn_text16 uintptr 4288 Fcolumn_type uintptr 4289 Fcolumn_value uintptr 4290 Fcommit_hook uintptr 4291 Fcomplete uintptr 4292 Fcomplete16 uintptr 4293 Fcreate_collation uintptr 4294 Fcreate_collation16 uintptr 4295 Fcreate_function uintptr 4296 Fcreate_function16 uintptr 4297 Fcreate_module uintptr 4298 Fdata_count uintptr 4299 Fdb_handle uintptr 4300 Fdeclare_vtab uintptr 4301 Fenable_shared_cache uintptr 4302 Ferrcode uintptr 4303 Ferrmsg uintptr 4304 Ferrmsg16 uintptr 4305 Fexec uintptr 4306 Fexpired uintptr 4307 Ffinalize uintptr 4308 Ffree uintptr 4309 Ffree_table uintptr 4310 Fget_autocommit uintptr 4311 Fget_auxdata uintptr 4312 Fget_table uintptr 4313 Fglobal_recover uintptr 4314 Finterruptx uintptr 4315 Flast_insert_rowid uintptr 4316 Flibversion uintptr 4317 Flibversion_number uintptr 4318 Fmalloc uintptr 4319 Fmprintf uintptr 4320 Fopen uintptr 4321 Fopen16 uintptr 4322 Fprepare uintptr 4323 Fprepare16 uintptr 4324 Fprofile uintptr 4325 Fprogress_handler uintptr 4326 Frealloc uintptr 4327 Freset uintptr 4328 Fresult_blob uintptr 4329 Fresult_double uintptr 4330 Fresult_error uintptr 4331 Fresult_error16 uintptr 4332 Fresult_int uintptr 4333 Fresult_int64 uintptr 4334 Fresult_null uintptr 4335 Fresult_text uintptr 4336 Fresult_text16 uintptr 4337 Fresult_text16be uintptr 4338 Fresult_text16le uintptr 4339 Fresult_value uintptr 4340 Frollback_hook uintptr 4341 Fset_authorizer uintptr 4342 Fset_auxdata uintptr 4343 Fxsnprintf uintptr 4344 Fstep uintptr 4345 Ftable_column_metadata uintptr 4346 Fthread_cleanup uintptr 4347 Ftotal_changes uintptr 4348 Ftrace uintptr 4349 Ftransfer_bindings uintptr 4350 Fupdate_hook uintptr 4351 Fuser_data uintptr 4352 Fvalue_blob uintptr 4353 Fvalue_bytes uintptr 4354 Fvalue_bytes16 uintptr 4355 Fvalue_double uintptr 4356 Fvalue_int uintptr 4357 Fvalue_int64 uintptr 4358 Fvalue_numeric_type uintptr 4359 Fvalue_text uintptr 4360 Fvalue_text16 uintptr 4361 Fvalue_text16be uintptr 4362 Fvalue_text16le uintptr 4363 Fvalue_type uintptr 4364 Fvmprintf uintptr 4365 Foverload_function uintptr 4366 Fprepare_v2 uintptr 4367 Fprepare16_v2 uintptr 4368 Fclear_bindings uintptr 4369 Fcreate_module_v2 uintptr 4370 Fbind_zeroblob uintptr 4371 Fblob_bytes uintptr 4372 Fblob_close uintptr 4373 Fblob_open uintptr 4374 Fblob_read uintptr 4375 Fblob_write uintptr 4376 Fcreate_collation_v2 uintptr 4377 Ffile_control uintptr 4378 Fmemory_highwater uintptr 4379 Fmemory_used uintptr 4380 Fmutex_alloc uintptr 4381 Fmutex_enter uintptr 4382 Fmutex_free uintptr 4383 Fmutex_leave uintptr 4384 Fmutex_try uintptr 4385 Fopen_v2 uintptr 4386 Frelease_memory uintptr 4387 Fresult_error_nomem uintptr 4388 Fresult_error_toobig uintptr 4389 Fsleep uintptr 4390 Fsoft_heap_limit uintptr 4391 Fvfs_find uintptr 4392 Fvfs_register uintptr 4393 Fvfs_unregister uintptr 4394 Fxthreadsafe uintptr 4395 Fresult_zeroblob uintptr 4396 Fresult_error_code uintptr 4397 Ftest_control uintptr 4398 Frandomness uintptr 4399 Fcontext_db_handle uintptr 4400 Fextended_result_codes uintptr 4401 Flimit uintptr 4402 Fnext_stmt uintptr 4403 Fsql uintptr 4404 Fstatus uintptr 4405 Fbackup_finish uintptr 4406 Fbackup_init uintptr 4407 Fbackup_pagecount uintptr 4408 Fbackup_remaining uintptr 4409 Fbackup_step uintptr 4410 Fcompileoption_get uintptr 4411 Fcompileoption_used uintptr 4412 Fcreate_function_v2 uintptr 4413 Fdb_config uintptr 4414 Fdb_mutex uintptr 4415 Fdb_status uintptr 4416 Fextended_errcode uintptr 4417 Flog uintptr 4418 Fsoft_heap_limit64 uintptr 4419 Fsourceid uintptr 4420 Fstmt_status uintptr 4421 Fstrnicmp uintptr 4422 Funlock_notify uintptr 4423 Fwal_autocheckpoint uintptr 4424 Fwal_checkpoint uintptr 4425 Fwal_hook uintptr 4426 Fblob_reopen uintptr 4427 Fvtab_config uintptr 4428 Fvtab_on_conflict uintptr 4429 Fclose_v2 uintptr 4430 Fdb_filename uintptr 4431 Fdb_readonly uintptr 4432 Fdb_release_memory uintptr 4433 Ferrstr uintptr 4434 Fstmt_busy uintptr 4435 Fstmt_readonly uintptr 4436 Fstricmp uintptr 4437 Furi_boolean uintptr 4438 Furi_int64 uintptr 4439 Furi_parameter uintptr 4440 Fxvsnprintf uintptr 4441 Fwal_checkpoint_v2 uintptr 4442 Fauto_extension uintptr 4443 Fbind_blob64 uintptr 4444 Fbind_text64 uintptr 4445 Fcancel_auto_extension uintptr 4446 Fload_extension uintptr 4447 Fmalloc64 uintptr 4448 Fmsize uintptr 4449 Frealloc64 uintptr 4450 Freset_auto_extension uintptr 4451 Fresult_blob64 uintptr 4452 Fresult_text64 uintptr 4453 Fstrglob uintptr 4454 Fvalue_dup uintptr 4455 Fvalue_free uintptr 4456 Fresult_zeroblob64 uintptr 4457 Fbind_zeroblob64 uintptr 4458 Fvalue_subtype uintptr 4459 Fresult_subtype uintptr 4460 Fstatus64 uintptr 4461 Fstrlike uintptr 4462 Fdb_cacheflush uintptr 4463 Fsystem_errno uintptr 4464 Ftrace_v2 uintptr 4465 Fexpanded_sql uintptr 4466 Fset_last_insert_rowid uintptr 4467 Fprepare_v3 uintptr 4468 Fprepare16_v3 uintptr 4469 Fbind_pointer uintptr 4470 Fresult_pointer uintptr 4471 Fvalue_pointer uintptr 4472 Fvtab_nochange uintptr 4473 Fvalue_nochange uintptr 4474 Fvtab_collation uintptr 4475 Fkeyword_count uintptr 4476 Fkeyword_name uintptr 4477 Fkeyword_check uintptr 4478 Fstr_new uintptr 4479 Fstr_finish uintptr 4480 Fstr_appendf uintptr 4481 Fstr_vappendf uintptr 4482 Fstr_append uintptr 4483 Fstr_appendall uintptr 4484 Fstr_appendchar uintptr 4485 Fstr_reset uintptr 4486 Fstr_errcode uintptr 4487 Fstr_length uintptr 4488 Fstr_value uintptr 4489 Fcreate_window_function uintptr 4490 Fnormalized_sql uintptr 4491 Fstmt_isexplain uintptr 4492 Fvalue_frombind uintptr 4493 Fdrop_modules uintptr 4494 Fhard_heap_limit64 uintptr 4495 Furi_key uintptr 4496 Ffilename_database uintptr 4497 Ffilename_journal uintptr 4498 Ffilename_wal uintptr 4499 Fcreate_filename uintptr 4500 Ffree_filename uintptr 4501 Fdatabase_file_object uintptr 4502 Ftxn_state uintptr 4503 Fchanges64 uintptr 4504 Ftotal_changes64 uintptr 4505 Fautovacuum_pages uintptr 4506 Ferror_offset uintptr 4507 Fvtab_rhs_value uintptr 4508 Fvtab_distinct uintptr 4509 Fvtab_in uintptr 4510 Fvtab_in_first uintptr 4511 Fvtab_in_next uintptr 4512 Fdeserialize uintptr 4513 Fserialize uintptr 4514 Fdb_name uintptr 4515 } 4516 4517 type sqlite3_vfs1 = struct { 4518 FiVersion int32 4519 FszOsFile int32 4520 FmxPathname int32 4521 F__ccgo_pad1 [4]byte 4522 FpNext uintptr 4523 FzName uintptr 4524 FpAppData uintptr 4525 FxOpen uintptr 4526 FxDelete uintptr 4527 FxAccess uintptr 4528 FxFullPathname uintptr 4529 FxDlOpen uintptr 4530 FxDlError uintptr 4531 FxDlSym uintptr 4532 FxDlClose uintptr 4533 FxRandomness uintptr 4534 FxSleep uintptr 4535 FxCurrentTime uintptr 4536 FxGetLastError uintptr 4537 FxCurrentTimeInt64 uintptr 4538 FxSetSystemCall uintptr 4539 FxGetSystemCall uintptr 4540 FxNextSystemCall uintptr 4541 } 4542 4543 type sqlite3_vfs = sqlite3_vfs1 4544 type sqlite3_syscall_ptr = uintptr 4545 4546 type sqlite3_mem_methods1 = struct { 4547 FxMalloc uintptr 4548 FxFree uintptr 4549 FxRealloc uintptr 4550 FxSize uintptr 4551 FxRoundup uintptr 4552 FxInit uintptr 4553 FxShutdown uintptr 4554 FpAppData uintptr 4555 } 4556 4557 type sqlite3_mem_methods = sqlite3_mem_methods1 4558 4559 type sqlite3_value1 = struct { 4560 Fu struct{ Fr float64 } 4561 Fz uintptr 4562 Fn int32 4563 Fflags u16 4564 Fenc u8 4565 FeSubtype u8 4566 Fdb uintptr 4567 FszMalloc int32 4568 FuTemp u32 4569 FzMalloc uintptr 4570 FxDel uintptr 4571 } 4572 4573 type sqlite3_context1 = struct { 4574 FpOut uintptr 4575 FpFunc uintptr 4576 FpMem uintptr 4577 FpVdbe uintptr 4578 FiOp int32 4579 FisError int32 4580 Fenc u8 4581 FskipFlag u8 4582 Fargc u8 4583 F__ccgo_pad1 [5]byte 4584 Fargv [1]uintptr 4585 } 4586 4587 type sqlite3_destructor_type = uintptr 4588 4589 type sqlite3_vtab1 = struct { 4590 FpModule uintptr 4591 FnRef int32 4592 F__ccgo_pad1 [4]byte 4593 FzErrMsg uintptr 4594 } 4595 4596 type sqlite3_vtab = sqlite3_vtab1 4597 type sqlite3_index_info1 = struct { 4598 FnConstraint int32 4599 F__ccgo_pad1 [4]byte 4600 FaConstraint uintptr 4601 FnOrderBy int32 4602 F__ccgo_pad2 [4]byte 4603 FaOrderBy uintptr 4604 FaConstraintUsage uintptr 4605 FidxNum int32 4606 F__ccgo_pad3 [4]byte 4607 FidxStr uintptr 4608 FneedToFreeIdxStr int32 4609 ForderByConsumed int32 4610 FestimatedCost float64 4611 FestimatedRows sqlite3_int64 4612 FidxFlags int32 4613 F__ccgo_pad4 [4]byte 4614 FcolUsed sqlite3_uint64 4615 } 4616 4617 type sqlite3_index_info = sqlite3_index_info1 4618 type sqlite3_vtab_cursor1 = struct{ FpVtab uintptr } 4619 4620 type sqlite3_vtab_cursor = sqlite3_vtab_cursor1 4621 type sqlite3_module1 = struct { 4622 FiVersion int32 4623 F__ccgo_pad1 [4]byte 4624 FxCreate uintptr 4625 FxConnect uintptr 4626 FxBestIndex uintptr 4627 FxDisconnect uintptr 4628 FxDestroy uintptr 4629 FxOpen uintptr 4630 FxClose uintptr 4631 FxFilter uintptr 4632 FxNext uintptr 4633 FxEof uintptr 4634 FxColumn uintptr 4635 FxRowid uintptr 4636 FxUpdate uintptr 4637 FxBegin uintptr 4638 FxSync uintptr 4639 FxCommit uintptr 4640 FxRollback uintptr 4641 FxFindFunction uintptr 4642 FxRename uintptr 4643 FxSavepoint uintptr 4644 FxRelease uintptr 4645 FxRollbackTo uintptr 4646 FxShadowName uintptr 4647 } 4648 4649 type sqlite3_module = sqlite3_module1 4650 4651 type sqlite3_index_constraint = struct { 4652 FiColumn int32 4653 Fop uint8 4654 Fusable uint8 4655 F__ccgo_pad1 [2]byte 4656 FiTermOffset int32 4657 } 4658 4659 type sqlite3_index_orderby = struct { 4660 FiColumn int32 4661 Fdesc uint8 4662 F__ccgo_pad1 [3]byte 4663 } 4664 4665 type sqlite3_index_constraint_usage = struct { 4666 FargvIndex int32 4667 Fomit uint8 4668 F__ccgo_pad1 [3]byte 4669 } 4670 4671 type sqlite3_mutex_methods1 = struct { 4672 FxMutexInit uintptr 4673 FxMutexEnd uintptr 4674 FxMutexAlloc uintptr 4675 FxMutexFree uintptr 4676 FxMutexEnter uintptr 4677 FxMutexTry uintptr 4678 FxMutexLeave uintptr 4679 FxMutexHeld uintptr 4680 FxMutexNotheld uintptr 4681 } 4682 4683 type sqlite3_mutex_methods = sqlite3_mutex_methods1 4684 4685 type sqlite3_str1 = struct { 4686 Fdb uintptr 4687 FzText uintptr 4688 FnAlloc u32 4689 FmxAlloc u32 4690 FnChar u32 4691 FaccError u8 4692 FprintfFlags u8 4693 F__ccgo_pad1 [2]byte 4694 } 4695 4696 type sqlite3_pcache_page1 = struct { 4697 FpBuf uintptr 4698 FpExtra uintptr 4699 } 4700 4701 type sqlite3_pcache_page = sqlite3_pcache_page1 4702 4703 type sqlite3_pcache_methods21 = struct { 4704 FiVersion int32 4705 F__ccgo_pad1 [4]byte 4706 FpArg uintptr 4707 FxInit uintptr 4708 FxShutdown uintptr 4709 FxCreate uintptr 4710 FxCachesize uintptr 4711 FxPagecount uintptr 4712 FxFetch uintptr 4713 FxUnpin uintptr 4714 FxRekey uintptr 4715 FxTruncate uintptr 4716 FxDestroy uintptr 4717 FxShrink uintptr 4718 } 4719 4720 type sqlite3_pcache_methods2 = sqlite3_pcache_methods21 4721 4722 type sqlite3_pcache_methods1 = struct { 4723 FpArg uintptr 4724 FxInit uintptr 4725 FxShutdown uintptr 4726 FxCreate uintptr 4727 FxCachesize uintptr 4728 FxPagecount uintptr 4729 FxFetch uintptr 4730 FxUnpin uintptr 4731 FxRekey uintptr 4732 FxTruncate uintptr 4733 FxDestroy uintptr 4734 } 4735 4736 type sqlite3_pcache_methods = sqlite3_pcache_methods1 4737 4738 type sqlite3_snapshot1 = struct{ Fhidden [48]uint8 } 4739 4740 type sqlite3_snapshot = sqlite3_snapshot1 4741 4742 type sqlite3_rtree_geometry1 = struct { 4743 FpContext uintptr 4744 FnParam int32 4745 F__ccgo_pad1 [4]byte 4746 FaParam uintptr 4747 FpUser uintptr 4748 FxDelUser uintptr 4749 } 4750 4751 type sqlite3_rtree_geometry = sqlite3_rtree_geometry1 4752 type sqlite3_rtree_query_info1 = struct { 4753 FpContext uintptr 4754 FnParam int32 4755 F__ccgo_pad1 [4]byte 4756 FaParam uintptr 4757 FpUser uintptr 4758 FxDelUser uintptr 4759 FaCoord uintptr 4760 FanQueue uintptr 4761 FnCoord int32 4762 FiLevel int32 4763 FmxLevel int32 4764 F__ccgo_pad2 [4]byte 4765 FiRowid sqlite3_int64 4766 FrParentScore sqlite3_rtree_dbl 4767 FeParentWithin int32 4768 FeWithin int32 4769 FrScore sqlite3_rtree_dbl 4770 FapSqlParam uintptr 4771 } 4772 4773 type sqlite3_rtree_query_info = sqlite3_rtree_query_info1 4774 4775 type sqlite3_rtree_dbl = float64 4776 4777 type Fts5ExtensionApi1 = struct { 4778 FiVersion int32 4779 F__ccgo_pad1 [4]byte 4780 FxUserData uintptr 4781 FxColumnCount uintptr 4782 FxRowCount uintptr 4783 FxColumnTotalSize uintptr 4784 FxTokenize uintptr 4785 FxPhraseCount uintptr 4786 FxPhraseSize uintptr 4787 FxInstCount uintptr 4788 FxInst uintptr 4789 FxRowid uintptr 4790 FxColumnText uintptr 4791 FxColumnSize uintptr 4792 FxQueryPhrase uintptr 4793 FxSetAuxdata uintptr 4794 FxGetAuxdata uintptr 4795 FxPhraseFirst uintptr 4796 FxPhraseNext uintptr 4797 FxPhraseFirstColumn uintptr 4798 FxPhraseNextColumn uintptr 4799 } 4800 4801 type Fts5ExtensionApi = Fts5ExtensionApi1 4802 type Fts5PhraseIter1 = struct { 4803 Fa uintptr 4804 Fb uintptr 4805 } 4806 4807 type Fts5PhraseIter = Fts5PhraseIter1 4808 4809 type fts5_extension_function = uintptr 4810 type fts5_tokenizer1 = struct { 4811 FxCreate uintptr 4812 FxDelete uintptr 4813 FxTokenize uintptr 4814 } 4815 4816 type fts5_tokenizer = fts5_tokenizer1 4817 4818 type fts5_api1 = struct { 4819 FiVersion int32 4820 F__ccgo_pad1 [4]byte 4821 FxCreateTokenizer uintptr 4822 FxFindTokenizer uintptr 4823 FxCreateFunction uintptr 4824 } 4825 4826 type fts5_api = fts5_api1 4827 4828 type sqlite3expert1 = struct { 4829 FiSample int32 4830 F__ccgo_pad1 [4]byte 4831 Fdb uintptr 4832 Fdbm uintptr 4833 Fdbv uintptr 4834 FpTable uintptr 4835 FpScan uintptr 4836 FpWrite uintptr 4837 FpStatement uintptr 4838 FbRun int32 4839 F__ccgo_pad2 [4]byte 4840 FpzErrmsg uintptr 4841 Frc int32 4842 F__ccgo_pad3 [4]byte 4843 FhIdx IdxHash 4844 FzCandidates uintptr 4845 } 4846 4847 type sqlite3expert = sqlite3expert1 4848 4849 type __locale_struct = struct { 4850 F__locales [13]uintptr 4851 F__ctype_b uintptr 4852 F__ctype_tolower uintptr 4853 F__ctype_toupper uintptr 4854 F__names [13]uintptr 4855 } 4856 4857 type locale_t = uintptr 4858 4859 type _G_fpos_t = struct { 4860 F__pos int64 4861 F__state struct { 4862 F__count int32 4863 F__value struct{ F__wch uint32 } 4864 } 4865 } 4866 4867 type _G_fpos64_t = struct { 4868 F__pos int64 4869 F__state struct { 4870 F__count int32 4871 F__value struct{ F__wch uint32 } 4872 } 4873 } 4874 4875 type _IO_FILE = struct { 4876 F_flags int32 4877 F__ccgo_pad1 [4]byte 4878 F_IO_read_ptr uintptr 4879 F_IO_read_end uintptr 4880 F_IO_read_base uintptr 4881 F_IO_write_base uintptr 4882 F_IO_write_ptr uintptr 4883 F_IO_write_end uintptr 4884 F_IO_buf_base uintptr 4885 F_IO_buf_end uintptr 4886 F_IO_save_base uintptr 4887 F_IO_backup_base uintptr 4888 F_IO_save_end uintptr 4889 F_markers uintptr 4890 F_chain uintptr 4891 F_fileno int32 4892 F_flags2 int32 4893 F_old_offset int64 4894 F_cur_column uint16 4895 F_vtable_offset int8 4896 F_shortbuf [1]uint8 4897 F__ccgo_pad2 [4]byte 4898 F_lock uintptr 4899 F_offset int64 4900 F_codecvt uintptr 4901 F_wide_data uintptr 4902 F_freeres_list uintptr 4903 F_freeres_buf uintptr 4904 F__pad5 size_t 4905 F_mode int32 4906 F_unused2 [20]uint8 4907 } 4908 4909 type FILE = _IO_FILE 4910 4911 type off_t = int64 4912 4913 type ssize_t = int64 4914 4915 type fpos_t = _G_fpos64_t 4916 4917 type i64 = sqlite3_int64 4918 type u64 = sqlite3_uint64 4919 4920 type IdxColumn1 = struct { 4921 FzName uintptr 4922 FzColl uintptr 4923 FiPk int32 4924 F__ccgo_pad1 [4]byte 4925 } 4926 4927 type IdxColumn = IdxColumn1 4928 type IdxConstraint1 = struct { 4929 FzColl uintptr 4930 FbRange int32 4931 FiCol int32 4932 FbFlag int32 4933 FbDesc int32 4934 FpNext uintptr 4935 FpLink uintptr 4936 } 4937 4938 type IdxConstraint = IdxConstraint1 4939 type IdxScan1 = struct { 4940 FpTab uintptr 4941 FiDb int32 4942 F__ccgo_pad1 [4]byte 4943 Fcovering i64 4944 FpOrder uintptr 4945 FpEq uintptr 4946 FpRange uintptr 4947 FpNextScan uintptr 4948 } 4949 4950 type IdxScan = IdxScan1 4951 type IdxStatement1 = struct { 4952 FiId int32 4953 F__ccgo_pad1 [4]byte 4954 FzSql uintptr 4955 FzIdx uintptr 4956 FzEQP uintptr 4957 FpNext uintptr 4958 } 4959 4960 type IdxStatement = IdxStatement1 4961 type IdxTable1 = struct { 4962 FnCol int32 4963 F__ccgo_pad1 [4]byte 4964 FzName uintptr 4965 FaCol uintptr 4966 FpNext uintptr 4967 } 4968 4969 type IdxTable = IdxTable1 4970 type IdxWrite1 = struct { 4971 FpTab uintptr 4972 FeOp int32 4973 F__ccgo_pad1 [4]byte 4974 FpNext uintptr 4975 } 4976 4977 type IdxWrite = IdxWrite1 4978 4979 type IdxHashEntry1 = struct { 4980 FzKey uintptr 4981 FzVal uintptr 4982 FzVal2 uintptr 4983 FpHashNext uintptr 4984 FpNext uintptr 4985 } 4986 4987 type IdxHashEntry = IdxHashEntry1 4988 type IdxHash1 = struct { 4989 FpFirst uintptr 4990 FaHash [1023]uintptr 4991 } 4992 4993 type IdxHash = IdxHash1 4994 4995 func idxMalloc(tls *libc.TLS, pRc uintptr, nByte int32) uintptr { 4996 var pRet uintptr 4997 4998 pRet = sqlite3.Xsqlite3_malloc(tls, nByte) 4999 if pRet != 0 { 5000 libc.Xmemset(tls, pRet, 0, uint64(nByte)) 5001 } else { 5002 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 5003 } 5004 return pRet 5005 } 5006 5007 func idxHashInit(tls *libc.TLS, pHash uintptr) { 5008 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 5009 } 5010 5011 func idxHashClear(tls *libc.TLS, pHash uintptr) { 5012 var i int32 5013 for i = 0; i < IDX_HASH_SIZE; i++ { 5014 var pEntry uintptr 5015 var pNext uintptr 5016 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(i)*8)); pEntry != 0; pEntry = pNext { 5017 pNext = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext 5018 sqlite3.Xsqlite3_free(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2) 5019 sqlite3.Xsqlite3_free(tls, pEntry) 5020 } 5021 } 5022 libc.Xmemset(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{}))) 5023 } 5024 5025 func idxHashString(tls *libc.TLS, z uintptr, n int32) int32 { 5026 var ret uint32 = uint32(0) 5027 var i int32 5028 for i = 0; i < n; i++ { 5029 ret = ret + (ret<<3 + uint32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) 5030 } 5031 return int32(ret % uint32(IDX_HASH_SIZE)) 5032 } 5033 5034 func idxHashAdd(tls *libc.TLS, pRc uintptr, pHash uintptr, zKey uintptr, zVal uintptr) int32 { 5035 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 5036 var iHash int32 = idxHashString(tls, zKey, nKey) 5037 var nVal int32 = func() int32 { 5038 if zVal != 0 { 5039 return int32(libc.Xstrlen(tls, zVal)) 5040 } 5041 return 0 5042 }() 5043 var pEntry uintptr 5044 5045 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 5046 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 5047 return 1 5048 } 5049 } 5050 pEntry = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxHashEntry{}))+uint64(nKey)+uint64(1)+uint64(nVal)+uint64(1))) 5051 if pEntry != 0 { 5052 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey = pEntry + 1*40 5053 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) 5054 if zVal != 0 { 5055 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey + uintptr(nKey+1) 5056 libc.Xmemcpy(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, zVal, uint64(nVal)) 5057 } 5058 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) 5059 *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) = pEntry 5060 5061 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext = (*IdxHash)(unsafe.Pointer(pHash)).FpFirst 5062 (*IdxHash)(unsafe.Pointer(pHash)).FpFirst = pEntry 5063 } 5064 return 0 5065 } 5066 5067 func idxHashFind(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 5068 var iHash int32 5069 var pEntry uintptr 5070 if nKey < 0 { 5071 nKey = int32(libc.Xstrlen(tls, zKey)) 5072 } 5073 iHash = idxHashString(tls, zKey, nKey) 5074 5075 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 5076 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 5077 return pEntry 5078 } 5079 } 5080 return uintptr(0) 5081 } 5082 5083 func idxHashSearch(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 5084 var pEntry uintptr = idxHashFind(tls, pHash, zKey, nKey) 5085 if pEntry != 0 { 5086 return (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal 5087 } 5088 return uintptr(0) 5089 } 5090 5091 func idxNewConstraint(tls *libc.TLS, pRc uintptr, zColl uintptr) uintptr { 5092 var pNew uintptr 5093 var nColl int32 = int32(libc.Xstrlen(tls, zColl)) 5094 5095 pNew = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxConstraint{}))*uint64(nColl)+uint64(1))) 5096 if pNew != 0 { 5097 (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl = pNew + 1*40 5098 libc.Xmemcpy(tls, (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl, zColl, uint64(nColl+1)) 5099 } 5100 return pNew 5101 } 5102 5103 func idxDatabaseError(tls *libc.TLS, db uintptr, pzErrmsg uintptr) { 5104 bp := tls.Alloc(8) 5105 defer tls.Free(8) 5106 5107 *(*uintptr)(unsafe.Pointer(pzErrmsg)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 5108 } 5109 5110 func idxPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zSql uintptr) int32 { 5111 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, ppStmt, uintptr(0)) 5112 if rc != SQLITE_OK { 5113 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 5114 idxDatabaseError(tls, db, pzErrmsg) 5115 } 5116 return rc 5117 } 5118 5119 func idxPrintfPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zFmt uintptr, va uintptr) int32 { 5120 var ap va_list 5121 _ = ap 5122 var rc int32 5123 var zSql uintptr 5124 ap = va 5125 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 5126 if zSql == uintptr(0) { 5127 rc = SQLITE_NOMEM 5128 } else { 5129 rc = idxPrepareStmt(tls, db, ppStmt, pzErrmsg, zSql) 5130 sqlite3.Xsqlite3_free(tls, zSql) 5131 } 5132 _ = ap 5133 return rc 5134 } 5135 5136 type ExpertVtab1 = struct { 5137 Fbase sqlite3_vtab 5138 FpTab uintptr 5139 FpExpert uintptr 5140 } 5141 5142 type ExpertVtab = ExpertVtab1 5143 5144 type ExpertCsr1 = struct { 5145 Fbase sqlite3_vtab_cursor 5146 FpData uintptr 5147 } 5148 5149 type ExpertCsr = ExpertCsr1 5150 5151 func expertDequote(tls *libc.TLS, zIn uintptr) uintptr { 5152 var n int32 = int32(libc.Xstrlen(tls, zIn)) 5153 var zRet uintptr = sqlite3.Xsqlite3_malloc(tls, n) 5154 5155 if zRet != 0 { 5156 var iOut int32 = 0 5157 var iIn int32 = 0 5158 for iIn = 1; iIn < n-1; iIn++ { 5159 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iIn)))) == '\'' { 5160 iIn++ 5161 } 5162 *(*uint8)(unsafe.Pointer(zRet + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(zIn + uintptr(iIn))) 5163 } 5164 *(*uint8)(unsafe.Pointer(zRet + uintptr(iOut))) = uint8(0) 5165 } 5166 5167 return zRet 5168 } 5169 5170 func expertConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 5171 bp := tls.Alloc(4) 5172 defer tls.Free(4) 5173 5174 var pExpert uintptr = pAux 5175 var p uintptr = uintptr(0) 5176 5177 if argc != 4 { 5178 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3, 0) 5179 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 5180 } else { 5181 var zCreateTable uintptr = expertDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 5182 if zCreateTable != 0 { 5183 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 5184 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5185 p = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertVtab{}))) 5186 } 5187 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5188 (*ExpertVtab)(unsafe.Pointer(p)).FpExpert = pExpert 5189 (*ExpertVtab)(unsafe.Pointer(p)).FpTab = (*sqlite3expert)(unsafe.Pointer(pExpert)).FpTable 5190 5191 } 5192 sqlite3.Xsqlite3_free(tls, zCreateTable) 5193 } else { 5194 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 5195 } 5196 } 5197 5198 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 5199 return *(*int32)(unsafe.Pointer(bp)) 5200 } 5201 5202 func expertDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 5203 var p uintptr = pVtab 5204 sqlite3.Xsqlite3_free(tls, p) 5205 return SQLITE_OK 5206 } 5207 5208 func expertBestIndex(tls *libc.TLS, pVtab uintptr, pIdxInfo uintptr) int32 { 5209 bp := tls.Alloc(4) 5210 defer tls.Free(4) 5211 5212 var p uintptr = pVtab 5213 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5214 var n int32 = 0 5215 var pScan uintptr 5216 var opmask int32 = SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | SQLITE_INDEX_CONSTRAINT_LE 5217 5218 pScan = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxScan{}))) 5219 if pScan != 0 { 5220 var i int32 5221 5222 (*IdxScan)(unsafe.Pointer(pScan)).FpTab = (*ExpertVtab)(unsafe.Pointer(p)).FpTab 5223 (*IdxScan)(unsafe.Pointer(pScan)).FpNextScan = (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan 5224 (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan = pScan 5225 5226 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 5227 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 5228 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 5229 (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn >= 0 && 5230 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)*24)).FiPk == 0 && 5231 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop)&opmask != 0 { 5232 var pNew uintptr 5233 var zColl uintptr = sqlite3.Xsqlite3_vtab_collation(tls, pIdxInfo, i) 5234 pNew = idxNewConstraint(tls, bp, zColl) 5235 if pNew != 0 { 5236 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn 5237 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 5238 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpEq 5239 (*IdxScan)(unsafe.Pointer(pScan)).FpEq = pNew 5240 } else { 5241 (*IdxConstraint)(unsafe.Pointer(pNew)).FbRange = 1 5242 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpRange 5243 (*IdxScan)(unsafe.Pointer(pScan)).FpRange = pNew 5244 } 5245 } 5246 n++ 5247 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = n 5248 } 5249 } 5250 5251 for i = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy - 1; i >= 0; i-- { 5252 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 5253 if iCol >= 0 { 5254 var pNew uintptr = idxNewConstraint(tls, bp, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr(iCol)*24)).FzColl) 5255 if pNew != 0 { 5256 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = iCol 5257 (*IdxConstraint)(unsafe.Pointer(pNew)).FbDesc = int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).Fdesc) 5258 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 5259 (*IdxConstraint)(unsafe.Pointer(pNew)).FpLink = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 5260 (*IdxScan)(unsafe.Pointer(pScan)).FpOrder = pNew 5261 n++ 5262 } 5263 } 5264 } 5265 } 5266 5267 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000.0 / float64(n+1) 5268 return *(*int32)(unsafe.Pointer(bp)) 5269 } 5270 5271 func expertUpdate(tls *libc.TLS, pVtab uintptr, nData int32, azData uintptr, pRowid uintptr) int32 { 5272 _ = pVtab 5273 _ = nData 5274 _ = azData 5275 _ = pRowid 5276 return SQLITE_OK 5277 } 5278 5279 func expertOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 5280 bp := tls.Alloc(4) 5281 defer tls.Free(4) 5282 5283 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5284 var pCsr uintptr 5285 _ = pVTab 5286 pCsr = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertCsr{}))) 5287 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 5288 return *(*int32)(unsafe.Pointer(bp)) 5289 } 5290 5291 func expertClose(tls *libc.TLS, cur uintptr) int32 { 5292 var pCsr uintptr = cur 5293 sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 5294 sqlite3.Xsqlite3_free(tls, pCsr) 5295 return SQLITE_OK 5296 } 5297 5298 func expertEof(tls *libc.TLS, cur uintptr) int32 { 5299 var pCsr uintptr = cur 5300 return libc.Bool32((*ExpertCsr)(unsafe.Pointer(pCsr)).FpData == uintptr(0)) 5301 } 5302 5303 func expertNext(tls *libc.TLS, cur uintptr) int32 { 5304 var pCsr uintptr = cur 5305 var rc int32 = SQLITE_OK 5306 5307 rc = sqlite3.Xsqlite3_step(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 5308 if rc != SQLITE_ROW { 5309 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 5310 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 5311 } else { 5312 rc = SQLITE_OK 5313 } 5314 5315 return rc 5316 } 5317 5318 func expertRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 5319 _ = cur 5320 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 5321 return SQLITE_OK 5322 } 5323 5324 func expertColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 5325 var pCsr uintptr = cur 5326 var pVal uintptr 5327 pVal = sqlite3.Xsqlite3_column_value(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData, i) 5328 if pVal != 0 { 5329 sqlite3.Xsqlite3_result_value(tls, ctx, pVal) 5330 } 5331 return SQLITE_OK 5332 } 5333 5334 func expertFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 5335 bp := tls.Alloc(8) 5336 defer tls.Free(8) 5337 5338 var pCsr uintptr = cur 5339 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 5340 var pExpert uintptr = (*ExpertVtab)(unsafe.Pointer(pVtab)).FpExpert 5341 var rc int32 5342 5343 _ = idxNum 5344 _ = idxStr 5345 _ = argc 5346 _ = argv 5347 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 5348 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 5349 if rc == SQLITE_OK { 5350 rc = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pExpert)).Fdb, pCsr+8, pVtab+16, 5351 ts+19, libc.VaList(bp, (*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(pVtab)).FpTab)).FzName)) 5352 } 5353 5354 if rc == SQLITE_OK { 5355 rc = expertNext(tls, cur) 5356 } 5357 return rc 5358 } 5359 5360 func idxRegisterVtab(tls *libc.TLS, p uintptr) int32 { 5361 return sqlite3.Xsqlite3_create_module(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+56, uintptr(unsafe.Pointer(&expertModule)), p) 5362 } 5363 5364 var expertModule = sqlite3_module{ 5365 FiVersion: 2, 5366 FxCreate: 0, 5367 FxConnect: 0, 5368 FxBestIndex: 0, 5369 FxDisconnect: 0, 5370 FxDestroy: 0, 5371 FxOpen: 0, 5372 FxClose: 0, 5373 FxFilter: 0, 5374 FxNext: 0, 5375 FxEof: 0, 5376 FxColumn: 0, 5377 FxRowid: 0, 5378 FxUpdate: 0, 5379 } 5380 5381 func idxFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr) { 5382 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 5383 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 5384 *(*int32)(unsafe.Pointer(pRc)) = rc 5385 } 5386 } 5387 5388 func idxGetTableInfo(tls *libc.TLS, db uintptr, zTab uintptr, ppOut uintptr, pzErrmsg uintptr) int32 { 5389 bp := tls.Alloc(40) 5390 defer tls.Free(40) 5391 5392 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 5393 var nCol int32 = 0 5394 var nTab int32 5395 var nByte int32 5396 var pNew uintptr = uintptr(0) 5397 5398 var rc2 int32 5399 var pCsr uintptr = uintptr(0) 5400 var nPk int32 = 0 5401 5402 *(*uintptr)(unsafe.Pointer(ppOut)) = uintptr(0) 5403 if zTab == uintptr(0) { 5404 return SQLITE_ERROR 5405 } 5406 nTab = int32(libc.Xstrlen(tls, zTab)) 5407 nByte = int32(uint64(unsafe.Sizeof(IdxTable{})) + uint64(nTab) + uint64(1)) 5408 *(*int32)(unsafe.Pointer(bp + 24)) = idxPrintfPrepareStmt(tls, db, bp+8, pzErrmsg, ts+63, libc.VaList(bp, zTab)) 5409 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 5410 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 5411 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 5412 if zCol == uintptr(0) { 5413 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ERROR 5414 break 5415 } 5416 nByte = nByte + (1 + int32(libc.Xstrlen(tls, zCol))) 5417 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 5418 db, ts+85, zTab, zCol, uintptr(0), bp+16, uintptr(0), uintptr(0), uintptr(0)) 5419 if *(*uintptr)(unsafe.Pointer(bp + 16)) == uintptr(0) { 5420 *(*uintptr)(unsafe.Pointer(bp + 16)) = ts + 90 5421 } 5422 nByte = nByte + (1 + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 16))))) 5423 nCol++ 5424 nPk = nPk + libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) > 0) 5425 } 5426 rc2 = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 5427 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5428 *(*int32)(unsafe.Pointer(bp + 24)) = rc2 5429 } 5430 5431 nByte = int32(uint64(nByte) + uint64(unsafe.Sizeof(IdxColumn{}))*uint64(nCol)) 5432 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5433 pNew = idxMalloc(tls, bp+24, nByte) 5434 } 5435 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5436 (*IdxTable)(unsafe.Pointer(pNew)).FaCol = pNew + 1*32 5437 (*IdxTable)(unsafe.Pointer(pNew)).FnCol = nCol 5438 pCsr = (*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24 5439 } 5440 5441 nCol = 0 5442 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 5443 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 5444 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 5445 var nCopy int32 5446 if zCol == uintptr(0) { 5447 continue 5448 } 5449 nCopy = int32(libc.Xstrlen(tls, zCol)) + 1 5450 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzName = pCsr 5451 (*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) 5452 libc.Xmemcpy(tls, pCsr, zCol, uint64(nCopy)) 5453 pCsr += uintptr(nCopy) 5454 5455 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 5456 db, ts+85, zTab, zCol, uintptr(0), bp+32, uintptr(0), uintptr(0), uintptr(0)) 5457 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5458 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 5459 *(*uintptr)(unsafe.Pointer(bp + 32)) = ts + 90 5460 } 5461 nCopy = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 32)))) + 1 5462 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzColl = pCsr 5463 libc.Xmemcpy(tls, pCsr, *(*uintptr)(unsafe.Pointer(bp + 32)), uint64(nCopy)) 5464 pCsr += uintptr(nCopy) 5465 } 5466 5467 nCol++ 5468 } 5469 idxFinalize(tls, bp+24, *(*uintptr)(unsafe.Pointer(bp + 8))) 5470 5471 if *(*int32)(unsafe.Pointer(bp + 24)) != SQLITE_OK { 5472 sqlite3.Xsqlite3_free(tls, pNew) 5473 pNew = uintptr(0) 5474 } else if pNew != uintptr(0) { 5475 (*IdxTable)(unsafe.Pointer(pNew)).FzName = pCsr 5476 if (*IdxTable)(unsafe.Pointer(pNew)).FzName != uintptr(0) { 5477 libc.Xmemcpy(tls, (*IdxTable)(unsafe.Pointer(pNew)).FzName, zTab, uint64(nTab+1)) 5478 } 5479 } 5480 5481 *(*uintptr)(unsafe.Pointer(ppOut)) = pNew 5482 return *(*int32)(unsafe.Pointer(bp + 24)) 5483 } 5484 5485 func idxAppendText(tls *libc.TLS, pRc uintptr, zIn uintptr, zFmt uintptr, va uintptr) uintptr { 5486 var ap va_list 5487 _ = ap 5488 var zAppend uintptr = uintptr(0) 5489 var zRet uintptr = uintptr(0) 5490 var nIn int32 5491 if zIn != 0 { 5492 nIn = int32(libc.Xstrlen(tls, zIn)) 5493 } else { 5494 nIn = 0 5495 } 5496 var nAppend int32 = 0 5497 ap = va 5498 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 5499 zAppend = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 5500 if zAppend != 0 { 5501 nAppend = int32(libc.Xstrlen(tls, zAppend)) 5502 zRet = sqlite3.Xsqlite3_malloc(tls, nIn+nAppend+1) 5503 } 5504 if zAppend != 0 && zRet != 0 { 5505 if nIn != 0 { 5506 libc.Xmemcpy(tls, zRet, zIn, uint64(nIn)) 5507 } 5508 libc.Xmemcpy(tls, zRet+uintptr(nIn), zAppend, uint64(nAppend+1)) 5509 } else { 5510 sqlite3.Xsqlite3_free(tls, zRet) 5511 zRet = uintptr(0) 5512 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 5513 } 5514 sqlite3.Xsqlite3_free(tls, zAppend) 5515 sqlite3.Xsqlite3_free(tls, zIn) 5516 } 5517 _ = ap 5518 return zRet 5519 } 5520 5521 func idxIdentifierRequiresQuotes(tls *libc.TLS, zId uintptr) int32 { 5522 var i int32 5523 for i = 0; *(*uint8)(unsafe.Pointer(zId + uintptr(i))) != 0; i++ { 5524 if !(int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) == '_') && 5525 !(int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) <= '9') && 5526 !(int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) >= 'a' && int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) <= 'z') && 5527 !(int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) >= 'A' && int32(*(*uint8)(unsafe.Pointer(zId + uintptr(i)))) <= 'Z') { 5528 return 1 5529 } 5530 } 5531 return 0 5532 } 5533 5534 func idxAppendColDefn(tls *libc.TLS, pRc uintptr, zIn uintptr, pTab uintptr, pCons uintptr) uintptr { 5535 bp := tls.Alloc(32) 5536 defer tls.Free(32) 5537 5538 var zRet uintptr = zIn 5539 var p uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FaCol + uintptr((*IdxConstraint)(unsafe.Pointer(pCons)).FiCol)*24 5540 if zRet != 0 { 5541 zRet = idxAppendText(tls, pRc, zRet, ts+97, 0) 5542 } 5543 5544 if idxIdentifierRequiresQuotes(tls, (*IdxColumn)(unsafe.Pointer(p)).FzName) != 0 { 5545 zRet = idxAppendText(tls, pRc, zRet, ts+100, libc.VaList(bp, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 5546 } else { 5547 zRet = idxAppendText(tls, pRc, zRet, ts, libc.VaList(bp+8, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 5548 } 5549 5550 if sqlite3.Xsqlite3_stricmp(tls, (*IdxColumn)(unsafe.Pointer(p)).FzColl, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 5551 if idxIdentifierRequiresQuotes(tls, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 5552 zRet = idxAppendText(tls, pRc, zRet, ts+103, libc.VaList(bp+16, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 5553 } else { 5554 zRet = idxAppendText(tls, pRc, zRet, ts+115, libc.VaList(bp+24, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 5555 } 5556 } 5557 5558 if (*IdxConstraint)(unsafe.Pointer(pCons)).FbDesc != 0 { 5559 zRet = idxAppendText(tls, pRc, zRet, ts+127, 0) 5560 } 5561 return zRet 5562 } 5563 5564 func idxFindCompatible(tls *libc.TLS, pRc uintptr, dbm uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 5565 bp := tls.Alloc(36) 5566 defer tls.Free(36) 5567 5568 var zTbl uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 5569 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 5570 var pIter uintptr 5571 var nEq int32 = 0 5572 5573 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5574 nEq++ 5575 } 5576 5577 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+16, uintptr(0), ts+133, libc.VaList(bp, zTbl)) 5578 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW { 5579 var bMatch int32 = 1 5580 var pT uintptr = pTail 5581 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 5582 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 5583 if zIdx == uintptr(0) { 5584 continue 5585 } 5586 5587 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5588 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 0 5589 } 5590 5591 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+24, uintptr(0), ts+154, libc.VaList(bp+8, zIdx)) 5592 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW { 5593 var iIdx int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 5594 var iCol int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 5595 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 4) 5596 5597 if iIdx < nEq { 5598 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5599 if (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag != 0 { 5600 continue 5601 } 5602 if (*IdxConstraint)(unsafe.Pointer(pIter)).FiCol != iCol { 5603 continue 5604 } 5605 if sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pIter)).FzColl, zColl) != 0 { 5606 continue 5607 } 5608 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 1 5609 break 5610 } 5611 if pIter == uintptr(0) { 5612 bMatch = 0 5613 break 5614 } 5615 } else { 5616 if pT != 0 { 5617 if (*IdxConstraint)(unsafe.Pointer(pT)).FiCol != iCol || sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pT)).FzColl, zColl) != 0 { 5618 bMatch = 0 5619 break 5620 } 5621 pT = (*IdxConstraint)(unsafe.Pointer(pT)).FpLink 5622 } 5623 } 5624 } 5625 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 24))) 5626 5627 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && bMatch != 0 { 5628 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 5629 return 1 5630 } 5631 } 5632 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 16))) 5633 5634 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 32)) 5635 return 0 5636 } 5637 5638 func countNonzeros(tls *libc.TLS, pCount uintptr, nc int32, azResults uintptr, azColumns uintptr) int32 { 5639 _ = azColumns 5640 if nc > 0 && (int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults))))) != '0' || int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults)) + 1))) != 0) { 5641 *(*int32)(unsafe.Pointer(pCount)) += 1 5642 } 5643 return 0 5644 } 5645 5646 func idxCreateFromCons(tls *libc.TLS, p uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 5647 bp := tls.Alloc(56) 5648 defer tls.Free(56) 5649 5650 var dbm uintptr = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5651 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_OK 5652 if (pEq != 0 || pTail != 0) && 0 == idxFindCompatible(tls, bp+48, dbm, pScan, pEq, pTail) { 5653 var pTab uintptr = (*IdxScan)(unsafe.Pointer(pScan)).FpTab 5654 var zCols uintptr = uintptr(0) 5655 var zIdx uintptr = uintptr(0) 5656 var pCons uintptr 5657 var h uint32 = uint32(0) 5658 var zFmt uintptr 5659 5660 for pCons = pEq; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 5661 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 5662 } 5663 for pCons = pTail; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 5664 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 5665 } 5666 5667 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 5668 var zTable uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 5669 var quoteTable int32 = idxIdentifierRequiresQuotes(tls, zTable) 5670 var zName uintptr = uintptr(0) 5671 var collisions int32 = 0 5672 for __ccgo := true; __ccgo; __ccgo = collisions < 50 && zName != uintptr(0) { 5673 var zFind uintptr 5674 for *(*int32)(unsafe.Pointer(bp + 52)) = 0; *(*uint8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))) != 0; *(*int32)(unsafe.Pointer(bp + 52))++ { 5675 h = h + (h<<3 + uint32(*(*uint8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))))) 5676 } 5677 sqlite3.Xsqlite3_free(tls, zName) 5678 zName = sqlite3.Xsqlite3_mprintf(tls, ts+176, libc.VaList(bp, zTable, h)) 5679 if zName == uintptr(0) { 5680 break 5681 } 5682 5683 zFmt = ts + 188 5684 zFind = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+16, zName)) 5685 *(*int32)(unsafe.Pointer(bp + 52)) = 0 5686 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zFind, *(*uintptr)(unsafe.Pointer(&struct { 5687 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 5688 }{countNonzeros})), bp+52, uintptr(0)) 5689 5690 sqlite3.Xsqlite3_free(tls, zFind) 5691 if *(*int32)(unsafe.Pointer(bp + 52)) == 0 { 5692 collisions = 0 5693 break 5694 } 5695 collisions++ 5696 } 5697 if collisions != 0 { 5698 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 5699 } else if zName == uintptr(0) { 5700 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 5701 } else { 5702 if quoteTable != 0 { 5703 zFmt = ts + 274 5704 } else { 5705 zFmt = ts + 304 5706 } 5707 zIdx = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+24, zName, zTable, zCols)) 5708 if !(zIdx != 0) { 5709 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 5710 } else { 5711 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zIdx, uintptr(0), uintptr(0), (*sqlite3expert)(unsafe.Pointer(p)).FpzErrmsg) 5712 if *(*int32)(unsafe.Pointer(bp + 48)) != SQLITE_OK { 5713 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 5714 } else { 5715 idxHashAdd(tls, bp+48, p+88, zName, zIdx) 5716 } 5717 } 5718 sqlite3.Xsqlite3_free(tls, zName) 5719 sqlite3.Xsqlite3_free(tls, zIdx) 5720 } 5721 } 5722 5723 sqlite3.Xsqlite3_free(tls, zCols) 5724 } 5725 return *(*int32)(unsafe.Pointer(bp + 48)) 5726 } 5727 5728 func idxFindConstraint(tls *libc.TLS, pList uintptr, p uintptr) int32 { 5729 var pCmp uintptr 5730 for pCmp = pList; pCmp != 0; pCmp = (*IdxConstraint)(unsafe.Pointer(pCmp)).FpLink { 5731 if (*IdxConstraint)(unsafe.Pointer(p)).FiCol == (*IdxConstraint)(unsafe.Pointer(pCmp)).FiCol { 5732 return 1 5733 } 5734 } 5735 return 0 5736 } 5737 5738 func idxCreateFromWhere(tls *libc.TLS, p uintptr, pScan uintptr, pTail uintptr) int32 { 5739 var p1 uintptr = uintptr(0) 5740 var pCon uintptr 5741 var rc int32 5742 5743 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpEq; pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 5744 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 5745 (*IdxConstraint)(unsafe.Pointer(pCon)).FpLink = p1 5746 p1 = pCon 5747 } 5748 } 5749 5750 rc = idxCreateFromCons(tls, p, pScan, p1, pTail) 5751 5752 if pTail == uintptr(0) { 5753 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpRange; rc == SQLITE_OK && pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 5754 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 5755 rc = idxCreateFromCons(tls, p, pScan, p1, pCon) 5756 } 5757 } 5758 } 5759 5760 return rc 5761 } 5762 5763 func idxCreateCandidates(tls *libc.TLS, p uintptr) int32 { 5764 var rc int32 = SQLITE_OK 5765 var pIter uintptr 5766 5767 for pIter = (*sqlite3expert)(unsafe.Pointer(p)).FpScan; pIter != 0 && rc == SQLITE_OK; pIter = (*IdxScan)(unsafe.Pointer(pIter)).FpNextScan { 5768 rc = idxCreateFromWhere(tls, p, pIter, uintptr(0)) 5769 if rc == SQLITE_OK && (*IdxScan)(unsafe.Pointer(pIter)).FpOrder != 0 { 5770 rc = idxCreateFromWhere(tls, p, pIter, (*IdxScan)(unsafe.Pointer(pIter)).FpOrder) 5771 } 5772 } 5773 5774 return rc 5775 } 5776 5777 func idxConstraintFree(tls *libc.TLS, pConstraint uintptr) { 5778 var pNext uintptr 5779 var p uintptr 5780 5781 for p = pConstraint; p != 0; p = pNext { 5782 pNext = (*IdxConstraint)(unsafe.Pointer(p)).FpNext 5783 sqlite3.Xsqlite3_free(tls, p) 5784 } 5785 } 5786 5787 func idxScanFree(tls *libc.TLS, pScan uintptr, pLast uintptr) { 5788 var p uintptr 5789 var pNext uintptr 5790 for p = pScan; p != pLast; p = pNext { 5791 pNext = (*IdxScan)(unsafe.Pointer(p)).FpNextScan 5792 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpOrder) 5793 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpEq) 5794 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpRange) 5795 sqlite3.Xsqlite3_free(tls, p) 5796 } 5797 } 5798 5799 func idxStatementFree(tls *libc.TLS, pStatement uintptr, pLast uintptr) { 5800 var p uintptr 5801 var pNext uintptr 5802 for p = pStatement; p != pLast; p = pNext { 5803 pNext = (*IdxStatement)(unsafe.Pointer(p)).FpNext 5804 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzEQP) 5805 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzIdx) 5806 sqlite3.Xsqlite3_free(tls, p) 5807 } 5808 } 5809 5810 func idxTableFree(tls *libc.TLS, pTab uintptr) { 5811 var pIter uintptr 5812 var pNext uintptr 5813 for pIter = pTab; pIter != 0; pIter = pNext { 5814 pNext = (*IdxTable)(unsafe.Pointer(pIter)).FpNext 5815 sqlite3.Xsqlite3_free(tls, pIter) 5816 } 5817 } 5818 5819 func idxWriteFree(tls *libc.TLS, pTab uintptr) { 5820 var pIter uintptr 5821 var pNext uintptr 5822 for pIter = pTab; pIter != 0; pIter = pNext { 5823 pNext = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext 5824 sqlite3.Xsqlite3_free(tls, pIter) 5825 } 5826 } 5827 5828 func idxFindIndexes(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5829 bp := tls.Alloc(8228) 5830 defer tls.Free(8228) 5831 5832 var pStmt uintptr 5833 var dbm uintptr 5834 5835 var zSql uintptr 5836 var nIdx int32 5837 var zIdx uintptr 5838 5839 var zDetail uintptr 5840 var nDetail int32 5841 var i int32 5842 var pEntry uintptr 5843 5844 dbm = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5845 *(*int32)(unsafe.Pointer(bp + 8224)) = SQLITE_OK 5846 idxHashInit(tls, bp+24) 5847 5848 pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5849 __1: 5850 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && pStmt != 0) { 5851 goto __3 5852 } 5853 *(*uintptr)(unsafe.Pointer(bp + 8216)) = uintptr(0) 5854 idxHashClear(tls, bp+24) 5855 *(*int32)(unsafe.Pointer(bp + 8224)) = idxPrintfPrepareStmt(tls, dbm, bp+8216, pzErr, 5856 ts+330, libc.VaList(bp, (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql)) 5857 __4: 5858 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8216))) == SQLITE_ROW) { 5859 goto __5 5860 } 5861 5862 zDetail = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8216)), 3) 5863 5864 if !!(zDetail != 0) { 5865 goto __6 5866 } 5867 goto __4 5868 __6: 5869 ; 5870 nDetail = int32(libc.Xstrlen(tls, zDetail)) 5871 5872 i = 0 5873 __7: 5874 if !(i < nDetail) { 5875 goto __9 5876 } 5877 zIdx = uintptr(0) 5878 if !(i+13 < nDetail && libc.Xmemcmp(tls, zDetail+uintptr(i), ts+352, uint64(13)) == 0) { 5879 goto __10 5880 } 5881 zIdx = zDetail + uintptr(i+13) 5882 goto __11 5883 __10: 5884 if !(i+22 < nDetail && 5885 libc.Xmemcmp(tls, zDetail+uintptr(i), ts+366, uint64(22)) == 0) { 5886 goto __12 5887 } 5888 zIdx = zDetail + uintptr(i+22) 5889 __12: 5890 ; 5891 __11: 5892 ; 5893 if !(zIdx != 0) { 5894 goto __13 5895 } 5896 nIdx = 0 5897 __14: 5898 if !(int32(*(*uint8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != 0 && (int32(*(*uint8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != ' ' || int32(*(*uint8)(unsafe.Pointer(zIdx + uintptr(nIdx+1)))) != '(')) { 5899 goto __15 5900 } 5901 nIdx++ 5902 goto __14 5903 __15: 5904 ; 5905 zSql = idxHashSearch(tls, p+88, zIdx, nIdx) 5906 if !(zSql != 0) { 5907 goto __16 5908 } 5909 idxHashAdd(tls, bp+8224, bp+24, zSql, uintptr(0)) 5910 if !(*(*int32)(unsafe.Pointer(bp + 8224)) != 0) { 5911 goto __17 5912 } 5913 goto find_indexes_out 5914 __17: 5915 ; 5916 __16: 5917 ; 5918 goto __9 5919 __13: 5920 ; 5921 goto __8 5922 __8: 5923 i++ 5924 goto __7 5925 goto __9 5926 __9: 5927 ; 5928 if !(int32(*(*uint8)(unsafe.Pointer(zDetail))) != '-') { 5929 goto __18 5930 } 5931 (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP = idxAppendText(tls, bp+8224, (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP, ts+389, libc.VaList(bp+8, zDetail)) 5932 __18: 5933 ; 5934 goto __4 5935 __5: 5936 ; 5937 pEntry = (*IdxHash)(unsafe.Pointer(bp + 24)).FpFirst 5938 __19: 5939 if !(pEntry != 0) { 5940 goto __21 5941 } 5942 (*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)) 5943 goto __20 5944 __20: 5945 pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext 5946 goto __19 5947 goto __21 5948 __21: 5949 ; 5950 idxFinalize(tls, bp+8224, *(*uintptr)(unsafe.Pointer(bp + 8216))) 5951 goto __2 5952 __2: 5953 pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext 5954 goto __1 5955 goto __3 5956 __3: 5957 ; 5958 find_indexes_out: 5959 idxHashClear(tls, bp+24) 5960 return *(*int32)(unsafe.Pointer(bp + 8224)) 5961 } 5962 5963 func idxAuthCallback(tls *libc.TLS, pCtx uintptr, eOp int32, z3 uintptr, z4 uintptr, zDb uintptr, zTrigger uintptr) int32 { 5964 bp := tls.Alloc(4) 5965 defer tls.Free(4) 5966 5967 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5968 _ = z4 5969 _ = zTrigger 5970 if eOp == SQLITE_INSERT || eOp == SQLITE_UPDATE || eOp == SQLITE_DELETE { 5971 if sqlite3.Xsqlite3_stricmp(tls, zDb, ts+85) == 0 { 5972 var p uintptr = pCtx 5973 var pTab uintptr 5974 for pTab = (*sqlite3expert)(unsafe.Pointer(p)).FpTable; pTab != 0; pTab = (*IdxTable)(unsafe.Pointer(pTab)).FpNext { 5975 if 0 == sqlite3.Xsqlite3_stricmp(tls, z3, (*IdxTable)(unsafe.Pointer(pTab)).FzName) { 5976 break 5977 } 5978 } 5979 if pTab != 0 { 5980 var pWrite uintptr 5981 for pWrite = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite; pWrite != 0; pWrite = (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext { 5982 if (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab == pTab && (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp == eOp { 5983 break 5984 } 5985 } 5986 if pWrite == uintptr(0) { 5987 pWrite = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxWrite{}))) 5988 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5989 (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab = pTab 5990 (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp = eOp 5991 (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5992 (*sqlite3expert)(unsafe.Pointer(p)).FpWrite = pWrite 5993 } 5994 } 5995 } 5996 } 5997 } 5998 return *(*int32)(unsafe.Pointer(bp)) 5999 } 6000 6001 func idxProcessOneTrigger(tls *libc.TLS, p uintptr, pWrite uintptr, pzErr uintptr) int32 { 6002 bp := tls.Alloc(104) 6003 defer tls.Free(104) 6004 6005 var pTab uintptr = (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab 6006 var zTab uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FzName 6007 var zSql uintptr = ts + 398 6008 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 6009 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_OK 6010 var zWrite uintptr = uintptr(0) 6011 6012 *(*int32)(unsafe.Pointer(bp + 88)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+80, pzErr, zSql, libc.VaList(bp, zTab, zTab)) 6013 for *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) { 6014 var zCreate uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 6015 if zCreate == uintptr(0) { 6016 continue 6017 } 6018 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zCreate, uintptr(0), uintptr(0), pzErr) 6019 } 6020 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 80))) 6021 6022 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 6023 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+524, libc.VaList(bp+16, zTab, zInt)) 6024 if z == uintptr(0) { 6025 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 6026 } else { 6027 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, z, uintptr(0), uintptr(0), pzErr) 6028 sqlite3.Xsqlite3_free(tls, z) 6029 } 6030 } 6031 6032 switch (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp { 6033 case SQLITE_INSERT: 6034 { 6035 var i int32 6036 zWrite = idxAppendText(tls, bp+88, zWrite, ts+557, libc.VaList(bp+32, zInt)) 6037 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 6038 zWrite = idxAppendText(tls, bp+88, zWrite, ts+580, libc.VaList(bp+40, func() uintptr { 6039 if i == 0 { 6040 return ts + 584 6041 } 6042 return ts + 97 6043 }())) 6044 } 6045 zWrite = idxAppendText(tls, bp+88, zWrite, ts+585, 0) 6046 break 6047 6048 } 6049 case SQLITE_UPDATE: 6050 { 6051 var i int32 6052 zWrite = idxAppendText(tls, bp+88, zWrite, ts+587, libc.VaList(bp+48, zInt)) 6053 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 6054 zWrite = idxAppendText(tls, bp+88, zWrite, ts+602, libc.VaList(bp+56, func() uintptr { 6055 if i == 0 { 6056 return ts + 584 6057 } 6058 return ts + 97 6059 }(), 6060 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pTab)).FaCol+uintptr(i)*24)).FzName)) 6061 } 6062 break 6063 6064 } 6065 default: 6066 { 6067 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 6068 zWrite = sqlite3.Xsqlite3_mprintf(tls, ts+609, libc.VaList(bp+72, zInt)) 6069 if zWrite == uintptr(0) { 6070 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 6071 } 6072 } 6073 6074 } 6075 } 6076 6077 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 6078 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 6079 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zWrite, -1, bp+96, uintptr(0)) 6080 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 96))) 6081 if *(*int32)(unsafe.Pointer(bp + 88)) != SQLITE_OK { 6082 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 6083 } 6084 } 6085 sqlite3.Xsqlite3_free(tls, zWrite) 6086 6087 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 6088 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zDrop, uintptr(0), uintptr(0), pzErr) 6089 } 6090 6091 return *(*int32)(unsafe.Pointer(bp + 88)) 6092 } 6093 6094 var zInt uintptr = ts + 624 6095 var zDrop uintptr = ts + 662 6096 6097 func idxProcessTriggers(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6098 var rc int32 = SQLITE_OK 6099 var pEnd uintptr = uintptr(0) 6100 var pFirst uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 6101 6102 for rc == SQLITE_OK && pFirst != pEnd { 6103 var pIter uintptr 6104 for pIter = pFirst; rc == SQLITE_OK && pIter != pEnd; pIter = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext { 6105 rc = idxProcessOneTrigger(tls, p, pIter, pzErr) 6106 } 6107 pEnd = pFirst 6108 pFirst = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 6109 } 6110 6111 return rc 6112 } 6113 6114 func idxCreateVtabSchema(tls *libc.TLS, p uintptr, pzErrmsg uintptr) int32 { 6115 bp := tls.Alloc(60) 6116 defer tls.Free(60) 6117 6118 *(*int32)(unsafe.Pointer(bp + 56)) = idxRegisterVtab(tls, p) 6119 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 6120 6121 *(*int32)(unsafe.Pointer(bp + 56)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+40, pzErrmsg, 6122 ts+711) 6123 for *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 6124 var zType uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 6125 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 6126 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 6127 6128 if zType == uintptr(0) || zName == uintptr(0) { 6129 continue 6130 } 6131 if int32(*(*uint8)(unsafe.Pointer(zType))) == 'v' || int32(*(*uint8)(unsafe.Pointer(zType + 1))) == 'r' { 6132 if zSql != 0 { 6133 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), pzErrmsg) 6134 } 6135 } else { 6136 *(*int32)(unsafe.Pointer(bp + 56)) = idxGetTableInfo(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, zName, bp+48, pzErrmsg) 6137 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 6138 var i int32 6139 var zInner uintptr = uintptr(0) 6140 var zOuter uintptr = uintptr(0) 6141 (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpTable 6142 (*sqlite3expert)(unsafe.Pointer(p)).FpTable = *(*uintptr)(unsafe.Pointer(bp + 48)) 6143 6144 zInner = idxAppendText(tls, bp+56, uintptr(0), ts+979, 0) 6145 for i = 0; i < (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FnCol; i++ { 6146 zInner = idxAppendText(tls, bp+56, zInner, ts+995, 6147 libc.VaList(bp, func() uintptr { 6148 if i == 0 { 6149 return ts + 584 6150 } 6151 return ts + 97 6152 }(), (*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)) 6153 } 6154 zInner = idxAppendText(tls, bp+56, zInner, ts+585, 0) 6155 6156 zOuter = idxAppendText(tls, bp+56, uintptr(0), 6157 ts+1011, libc.VaList(bp+24, zName, zInner)) 6158 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 6159 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zOuter, uintptr(0), uintptr(0), pzErrmsg) 6160 } 6161 sqlite3.Xsqlite3_free(tls, zInner) 6162 sqlite3.Xsqlite3_free(tls, zOuter) 6163 } 6164 } 6165 } 6166 idxFinalize(tls, bp+56, *(*uintptr)(unsafe.Pointer(bp + 40))) 6167 return *(*int32)(unsafe.Pointer(bp + 56)) 6168 } 6169 6170 type IdxSampleCtx = struct { 6171 FiTarget int32 6172 F__ccgo_pad1 [4]byte 6173 Ftarget float64 6174 FnRow float64 6175 FnRet float64 6176 } 6177 6178 func idxSampleFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 6179 bp := tls.Alloc(2) 6180 defer tls.Free(2) 6181 6182 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 6183 var bRet int32 6184 6185 _ = argv 6186 6187 if (*IdxSampleCtx)(unsafe.Pointer(p)).FnRow == 0.0 { 6188 bRet = 1 6189 } else { 6190 bRet = libc.Bool32((*IdxSampleCtx)(unsafe.Pointer(p)).FnRet/(*IdxSampleCtx)(unsafe.Pointer(p)).FnRow <= (*IdxSampleCtx)(unsafe.Pointer(p)).Ftarget) 6191 if bRet == 0 { 6192 sqlite3.Xsqlite3_randomness(tls, 2, bp) 6193 bRet = libc.Bool32(int32(*(*uint16)(unsafe.Pointer(bp)))%100 <= (*IdxSampleCtx)(unsafe.Pointer(p)).FiTarget) 6194 } 6195 } 6196 6197 sqlite3.Xsqlite3_result_int(tls, pCtx, bRet) 6198 *(*float64)(unsafe.Pointer(p + 16)) += 1.0 6199 *(*float64)(unsafe.Pointer(p + 24)) += float64(bRet) 6200 } 6201 6202 type IdxRemCtx = struct { 6203 FnSlot int32 6204 F__ccgo_pad1 [4]byte 6205 FaSlot [1]struct { 6206 FeType int32 6207 F__ccgo_pad1 [4]byte 6208 FiVal i64 6209 FrVal float64 6210 FnByte int32 6211 Fn int32 6212 Fz uintptr 6213 } 6214 } 6215 6216 type IdxRemSlot = struct { 6217 FeType int32 6218 F__ccgo_pad1 [4]byte 6219 FiVal i64 6220 FrVal float64 6221 FnByte int32 6222 Fn int32 6223 Fz uintptr 6224 } 6225 6226 func idxRemFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 6227 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 6228 var pSlot uintptr 6229 var iSlot int32 6230 6231 iSlot = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 6232 6233 pSlot = p + 8 + uintptr(iSlot)*40 6234 6235 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 6236 case SQLITE_NULL: 6237 break 6238 6239 case SQLITE_INTEGER: 6240 sqlite3.Xsqlite3_result_int64(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal) 6241 break 6242 6243 case SQLITE_FLOAT: 6244 sqlite3.Xsqlite3_result_double(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal) 6245 break 6246 6247 case SQLITE_BLOB: 6248 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 6249 break 6250 6251 case SQLITE_TEXT: 6252 sqlite3.Xsqlite3_result_text(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 6253 break 6254 } 6255 6256 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6257 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 6258 case SQLITE_NULL: 6259 break 6260 6261 case SQLITE_INTEGER: 6262 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6263 break 6264 6265 case SQLITE_FLOAT: 6266 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6267 break 6268 6269 case SQLITE_BLOB: 6270 fallthrough 6271 case SQLITE_TEXT: 6272 { 6273 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6274 var pData uintptr = uintptr(0) 6275 if nByte > (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte { 6276 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, nByte*2) 6277 if zNew == uintptr(0) { 6278 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 6279 return 6280 } 6281 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte = nByte * 2 6282 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz = zNew 6283 } 6284 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn = nByte 6285 if (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType == SQLITE_BLOB { 6286 pData = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6287 if pData != 0 { 6288 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 6289 } 6290 } else { 6291 pData = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6292 libc.Xmemcpy(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte)) 6293 } 6294 break 6295 6296 } 6297 } 6298 } 6299 6300 func idxLargestIndex(tls *libc.TLS, db uintptr, pnMax uintptr, pzErr uintptr) int32 { 6301 bp := tls.Alloc(12) 6302 defer tls.Free(12) 6303 6304 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OK 6305 var zMax uintptr = ts + 1052 6306 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 6307 6308 *(*int32)(unsafe.Pointer(pnMax)) = 0 6309 *(*int32)(unsafe.Pointer(bp + 8)) = idxPrepareStmt(tls, db, bp, pzErr, zMax) 6310 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 6311 *(*int32)(unsafe.Pointer(pnMax)) = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) + 1 6312 } 6313 idxFinalize(tls, bp+8, *(*uintptr)(unsafe.Pointer(bp))) 6314 6315 return *(*int32)(unsafe.Pointer(bp + 8)) 6316 } 6317 6318 func idxPopulateOneStat1(tls *libc.TLS, p uintptr, pIndexXInfo uintptr, pWriteStat uintptr, zTab uintptr, zIdx uintptr, pzErr uintptr) int32 { 6319 bp := tls.Alloc(128) 6320 defer tls.Free(128) 6321 6322 var zCols uintptr = uintptr(0) 6323 var zOrder uintptr = uintptr(0) 6324 var zQuery uintptr = uintptr(0) 6325 var nCol int32 = 0 6326 var i int32 6327 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 6328 var aStat uintptr = uintptr(0) 6329 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_OK 6330 6331 sqlite3.Xsqlite3_bind_text(tls, pIndexXInfo, 1, zIdx, -1, uintptr(0)) 6332 for SQLITE_OK == *(*int32)(unsafe.Pointer(bp + 112)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pIndexXInfo) { 6333 var zComma uintptr 6334 if zCols == uintptr(0) { 6335 zComma = ts + 584 6336 } else { 6337 zComma = ts + 97 6338 } 6339 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 0) 6340 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 1) 6341 zCols = idxAppendText(tls, bp+112, zCols, 6342 ts+1189, libc.VaList(bp, zComma, zName, nCol, zName, zColl)) 6343 zOrder = idxAppendText(tls, bp+112, zOrder, ts+1224, libc.VaList(bp+40, zComma, libc.PreIncInt32(&nCol, 1))) 6344 } 6345 sqlite3.Xsqlite3_reset(tls, pIndexXInfo) 6346 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6347 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6348 zQuery = sqlite3.Xsqlite3_mprintf(tls, 6349 ts+1229, libc.VaList(bp+56, zCols, zTab, zOrder)) 6350 } else { 6351 zQuery = sqlite3.Xsqlite3_mprintf(tls, 6352 ts+1261, libc.VaList(bp+80, zCols, zOrder)) 6353 } 6354 } 6355 sqlite3.Xsqlite3_free(tls, zCols) 6356 sqlite3.Xsqlite3_free(tls, zOrder) 6357 6358 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6359 var dbrem uintptr = func() uintptr { 6360 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6361 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 6362 } 6363 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 6364 }() 6365 *(*int32)(unsafe.Pointer(bp + 112)) = idxPrepareStmt(tls, dbrem, bp+120, pzErr, zQuery) 6366 } 6367 sqlite3.Xsqlite3_free(tls, zQuery) 6368 6369 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6370 aStat = idxMalloc(tls, bp+112, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nCol+1))) 6371 } 6372 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 6373 var pEntry uintptr 6374 var zStat uintptr = uintptr(0) 6375 for i = 0; i <= nCol; i++ { 6376 *(*int32)(unsafe.Pointer(aStat + uintptr(i)*4)) = 1 6377 } 6378 for *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 6379 *(*int32)(unsafe.Pointer(aStat))++ 6380 for i = 0; i < nCol; i++ { 6381 if sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 120)), i) == 0 { 6382 break 6383 } 6384 } 6385 for ; i < nCol; i++ { 6386 *(*int32)(unsafe.Pointer(aStat + uintptr(i+1)*4))++ 6387 } 6388 } 6389 6390 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6391 var s0 int32 = *(*int32)(unsafe.Pointer(aStat)) 6392 zStat = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+96, s0)) 6393 if zStat == uintptr(0) { 6394 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_NOMEM 6395 } 6396 for i = 1; *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && i <= nCol; i++ { 6397 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)))) 6398 } 6399 } 6400 6401 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6402 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 1, zTab, -1, uintptr(0)) 6403 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 2, zIdx, -1, uintptr(0)) 6404 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 3, zStat, -1, uintptr(0)) 6405 sqlite3.Xsqlite3_step(tls, pWriteStat) 6406 *(*int32)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_reset(tls, pWriteStat) 6407 } 6408 6409 pEntry = idxHashFind(tls, p+88, zIdx, int32(libc.Xstrlen(tls, zIdx))) 6410 if pEntry != 0 { 6411 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 = zStat 6412 } else { 6413 sqlite3.Xsqlite3_free(tls, zStat) 6414 } 6415 } 6416 sqlite3.Xsqlite3_free(tls, aStat) 6417 idxFinalize(tls, bp+112, *(*uintptr)(unsafe.Pointer(bp + 120))) 6418 6419 return *(*int32)(unsafe.Pointer(bp + 112)) 6420 } 6421 6422 func idxBuildSampleTable(tls *libc.TLS, p uintptr, zTab uintptr) int32 { 6423 bp := tls.Alloc(8) 6424 defer tls.Free(8) 6425 6426 var rc int32 6427 var zSql uintptr 6428 6429 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6430 if rc != SQLITE_OK { 6431 return rc 6432 } 6433 6434 zSql = sqlite3.Xsqlite3_mprintf(tls, 6435 ts+1404, libc.VaList(bp, zTab)) 6436 if zSql == uintptr(0) { 6437 return SQLITE_NOMEM 6438 } 6439 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), uintptr(0)) 6440 sqlite3.Xsqlite3_free(tls, zSql) 6441 6442 return rc 6443 } 6444 6445 func idxPopulateStat1(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6446 bp := tls.Alloc(64) 6447 defer tls.Free(64) 6448 6449 *(*int32)(unsafe.Pointer(bp + 4)) = SQLITE_OK 6450 *(*int32)(unsafe.Pointer(bp)) = 0 6451 var pCtx uintptr = uintptr(0) 6452 6453 var i int32 6454 var iPrev i64 = int64(-100000) 6455 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 6456 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 6457 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 6458 6459 var zAllIndex uintptr = ts + 1480 6460 var zIndexXInfo uintptr = ts + 1594 6461 var zWrite uintptr = ts + 1649 6462 6463 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 0 { 6464 return SQLITE_OK 6465 } 6466 6467 *(*int32)(unsafe.Pointer(bp + 4)) = idxLargestIndex(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp, pzErr) 6468 if *(*int32)(unsafe.Pointer(bp)) <= 0 || *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 6469 return *(*int32)(unsafe.Pointer(bp + 4)) 6470 } 6471 6472 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1690, uintptr(0), uintptr(0), uintptr(0)) 6473 6474 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6475 var nByte int32 = int32(uint64(unsafe.Sizeof(IdxRemCtx{})) + uint64(unsafe.Sizeof(IdxRemSlot{}))*uint64(*(*int32)(unsafe.Pointer(bp)))) 6476 pCtx = idxMalloc(tls, bp+4, nByte) 6477 } 6478 6479 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6480 var dbrem uintptr = func() uintptr { 6481 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6482 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 6483 } 6484 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 6485 }() 6486 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 6487 dbrem, ts+1724, 2, SQLITE_UTF8, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 6488 f func(*libc.TLS, uintptr, int32, uintptr) 6489 }{idxRemFunc})), uintptr(0), uintptr(0)) 6490 } 6491 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6492 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 6493 (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1728, 0, SQLITE_UTF8, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 6494 f func(*libc.TLS, uintptr, int32, uintptr) 6495 }{idxSampleFunc})), uintptr(0), uintptr(0)) 6496 } 6497 6498 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6499 (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot = *(*int32)(unsafe.Pointer(bp)) + 1 6500 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+40, pzErr, zAllIndex) 6501 } 6502 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6503 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+48, pzErr, zIndexXInfo) 6504 } 6505 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6506 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+56, pzErr, zWrite) 6507 } 6508 6509 for *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 6510 var iRowid i64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 6511 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 6512 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 6513 if zTab == uintptr(0) || zIdx == uintptr(0) { 6514 continue 6515 } 6516 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 && iPrev != iRowid { 6517 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).Ftarget = float64((*sqlite3expert)(unsafe.Pointer(p)).FiSample) / 100.0 6518 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FiTarget = (*sqlite3expert)(unsafe.Pointer(p)).FiSample 6519 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRow = 0.0 6520 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRet = 0.0 6521 *(*int32)(unsafe.Pointer(bp + 4)) = idxBuildSampleTable(tls, p, zTab) 6522 if *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 6523 break 6524 } 6525 } 6526 *(*int32)(unsafe.Pointer(bp + 4)) = idxPopulateOneStat1(tls, p, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56)), zTab, zIdx, pzErr) 6527 iPrev = iRowid 6528 } 6529 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 { 6530 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, 6531 ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6532 } 6533 6534 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 40))) 6535 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 48))) 6536 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 56))) 6537 6538 if pCtx != 0 { 6539 for i = 0; i < (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot; i++ { 6540 sqlite3.Xsqlite3_free(tls, (*IdxRemSlot)(unsafe.Pointer(pCtx+8+uintptr(i)*40)).Fz) 6541 } 6542 sqlite3.Xsqlite3_free(tls, pCtx) 6543 } 6544 6545 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6546 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1735, uintptr(0), uintptr(0), uintptr(0)) 6547 } 6548 6549 sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6550 return *(*int32)(unsafe.Pointer(bp + 4)) 6551 } 6552 6553 func sqlite3_expert_new(tls *libc.TLS, db uintptr, pzErrmsg uintptr) uintptr { 6554 bp := tls.Alloc(32) 6555 defer tls.Free(32) 6556 6557 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 6558 var pNew uintptr 6559 6560 pNew = idxMalloc(tls, bp+16, int32(unsafe.Sizeof(sqlite3expert{}))) 6561 6562 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6563 (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb = db 6564 (*sqlite3expert)(unsafe.Pointer(pNew)).FiSample = 100 6565 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+24) 6566 } 6567 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6568 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+16) 6569 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6570 sqlite3.Xsqlite3_db_config(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, SQLITE_DBCONFIG_TRIGGER_EQP, libc.VaList(bp, 1, uintptr(0))) 6571 } 6572 } 6573 6574 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6575 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 6576 *(*int32)(unsafe.Pointer(bp + 16)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb, bp+24, pzErrmsg, 6577 ts+1766, 0) 6578 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) { 6579 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 6580 if zSql != 0 { 6581 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, zSql, uintptr(0), uintptr(0), pzErrmsg) 6582 } 6583 } 6584 idxFinalize(tls, bp+16, *(*uintptr)(unsafe.Pointer(bp + 24))) 6585 } 6586 6587 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6588 *(*int32)(unsafe.Pointer(bp + 16)) = idxCreateVtabSchema(tls, pNew, pzErrmsg) 6589 } 6590 6591 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6592 sqlite3.Xsqlite3_set_authorizer(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbv, *(*uintptr)(unsafe.Pointer(&struct { 6593 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 6594 }{idxAuthCallback})), pNew) 6595 } 6596 6597 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 6598 sqlite3_expert_destroy(tls, pNew) 6599 pNew = uintptr(0) 6600 } 6601 return pNew 6602 } 6603 6604 func sqlite3_expert_config(tls *libc.TLS, p uintptr, op int32, va uintptr) int32 { 6605 var rc int32 = SQLITE_OK 6606 var ap va_list 6607 _ = ap 6608 ap = va 6609 switch op { 6610 case EXPERT_CONFIG_SAMPLE: 6611 { 6612 var iVal int32 = libc.VaInt32(&ap) 6613 if iVal < 0 { 6614 iVal = 0 6615 } 6616 if iVal > 100 { 6617 iVal = 100 6618 } 6619 (*sqlite3expert)(unsafe.Pointer(p)).FiSample = iVal 6620 break 6621 6622 } 6623 default: 6624 rc = SQLITE_NOTFOUND 6625 break 6626 } 6627 6628 _ = ap 6629 return rc 6630 } 6631 6632 func sqlite3_expert_sql(tls *libc.TLS, p uintptr, zSql uintptr, pzErr uintptr) int32 { 6633 bp := tls.Alloc(20) 6634 defer tls.Free(20) 6635 6636 var pScanOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpScan 6637 var pStmtOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 6638 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 6639 *(*uintptr)(unsafe.Pointer(bp + 8)) = zSql 6640 6641 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun != 0 { 6642 return SQLITE_MISUSE 6643 } 6644 6645 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 { 6646 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 6647 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, *(*uintptr)(unsafe.Pointer(bp + 8)), -1, bp, bp+8) 6648 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6649 if *(*uintptr)(unsafe.Pointer(bp)) != 0 { 6650 var pNew uintptr 6651 var z uintptr = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 6652 var n int32 = int32(libc.Xstrlen(tls, z)) 6653 pNew = idxMalloc(tls, bp+16, int32(uint64(unsafe.Sizeof(IdxStatement{}))+uint64(n)+uint64(1))) 6654 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6655 (*IdxStatement)(unsafe.Pointer(pNew)).FzSql = pNew + 1*40 6656 libc.Xmemcpy(tls, (*IdxStatement)(unsafe.Pointer(pNew)).FzSql, z, uint64(n+1)) 6657 (*IdxStatement)(unsafe.Pointer(pNew)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 6658 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 6659 (*IdxStatement)(unsafe.Pointer(pNew)).FiId = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 6660 } 6661 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pNew 6662 } 6663 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 6664 } 6665 } else { 6666 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 6667 } 6668 } 6669 6670 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 6671 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, pScanOrig) 6672 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, pStmtOrig) 6673 (*sqlite3expert)(unsafe.Pointer(p)).FpScan = pScanOrig 6674 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pStmtOrig 6675 } 6676 6677 return *(*int32)(unsafe.Pointer(bp + 16)) 6678 } 6679 6680 func sqlite3_expert_analyze(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6681 bp := tls.Alloc(28) 6682 defer tls.Free(28) 6683 6684 var pEntry uintptr 6685 6686 *(*int32)(unsafe.Pointer(bp + 24)) = idxProcessTriggers(tls, p, pzErr) 6687 6688 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6689 *(*int32)(unsafe.Pointer(bp + 24)) = idxCreateCandidates(tls, p) 6690 } else if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_BUSY|int32(3)<<8 { 6691 if pzErr != 0 { 6692 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+1865, 0) 6693 } 6694 return *(*int32)(unsafe.Pointer(bp + 24)) 6695 } 6696 6697 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6698 *(*int32)(unsafe.Pointer(bp + 24)) = idxPopulateStat1(tls, p, pzErr) 6699 } 6700 6701 for pEntry = (*sqlite3expert)(unsafe.Pointer(p)).FhIdx.FpFirst; pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext { 6702 (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates = idxAppendText(tls, bp+24, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates, 6703 ts+1909, libc.VaList(bp, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, 6704 func() uintptr { 6705 if (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 != 0 { 6706 return ts + 1918 6707 } 6708 return ts + 584 6709 }(), (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2)) 6710 } 6711 6712 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6713 *(*int32)(unsafe.Pointer(bp + 24)) = idxFindIndexes(tls, p, pzErr) 6714 } 6715 6716 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6717 (*sqlite3expert)(unsafe.Pointer(p)).FbRun = 1 6718 } 6719 return *(*int32)(unsafe.Pointer(bp + 24)) 6720 } 6721 6722 func sqlite3_expert_count(tls *libc.TLS, p uintptr) int32 { 6723 var nRet int32 = 0 6724 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 6725 nRet = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 6726 } 6727 return nRet 6728 } 6729 6730 func sqlite3_expert_report(tls *libc.TLS, p uintptr, iStmt int32, eReport int32) uintptr { 6731 var zRet uintptr = uintptr(0) 6732 var pStmt uintptr 6733 6734 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun == 0 { 6735 return uintptr(0) 6736 } 6737 for pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement; pStmt != 0 && (*IdxStatement)(unsafe.Pointer(pStmt)).FiId != iStmt; pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext { 6738 } 6739 switch eReport { 6740 case EXPERT_REPORT_SQL: 6741 if pStmt != 0 { 6742 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql 6743 } 6744 break 6745 case EXPERT_REPORT_INDEXES: 6746 if pStmt != 0 { 6747 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx 6748 } 6749 break 6750 case EXPERT_REPORT_PLAN: 6751 if pStmt != 0 { 6752 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP 6753 } 6754 break 6755 case EXPERT_REPORT_CANDIDATES: 6756 zRet = (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates 6757 break 6758 } 6759 return zRet 6760 } 6761 6762 func sqlite3_expert_destroy(tls *libc.TLS, p uintptr) { 6763 if p != 0 { 6764 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm) 6765 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv) 6766 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, uintptr(0)) 6767 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, uintptr(0)) 6768 idxTableFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpTable) 6769 idxWriteFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpWrite) 6770 idxHashClear(tls, p+88) 6771 sqlite3.Xsqlite3_free(tls, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates) 6772 sqlite3.Xsqlite3_free(tls, p) 6773 } 6774 } 6775 6776 type ClientData = uintptr 6777 6778 type Tcl_WideInt = int64 6779 type Tcl_WideUInt = uint64 6780 6781 type stat = struct { 6782 Fst_dev uint64 6783 Fst_ino uint64 6784 Fst_nlink uint64 6785 Fst_mode uint32 6786 Fst_uid uint32 6787 Fst_gid uint32 6788 F__pad2 int32 6789 Fst_rdev uint64 6790 Fst_size int64 6791 Fst_blksize int64 6792 Fst_blocks int64 6793 Fst_atim struct { 6794 Ftv_sec int64 6795 Ftv_nsec int64 6796 } 6797 Fst_mtim struct { 6798 Ftv_sec int64 6799 Ftv_nsec int64 6800 } 6801 Fst_ctim struct { 6802 Ftv_sec int64 6803 Ftv_nsec int64 6804 } 6805 F__glibc_reserved4 uint64 6806 F__glibc_reserved5 uint64 6807 F__glibc_reserved6 uint64 6808 } 6809 6810 type Tcl_Interp1 = struct { 6811 FresultDontUse uintptr 6812 FfreeProcDontUse uintptr 6813 FerrorLineDontUse int32 6814 F__ccgo_pad1 [4]byte 6815 } 6816 6817 type Tcl_Interp = Tcl_Interp1 6818 6819 type Tcl_AsyncHandler = uintptr 6820 type Tcl_Channel = uintptr 6821 type Tcl_ChannelTypeVersion = uintptr 6822 type Tcl_Command = uintptr 6823 type Tcl_Condition = uintptr 6824 type Tcl_Dict = uintptr 6825 type Tcl_EncodingState = uintptr 6826 type Tcl_Encoding = uintptr 6827 type Tcl_Event1 = struct { 6828 Fproc uintptr 6829 FnextPtr uintptr 6830 } 6831 6832 type Tcl_Event = Tcl_Event1 6833 type Tcl_InterpState = uintptr 6834 type Tcl_LoadHandle = uintptr 6835 type Tcl_Mutex = uintptr 6836 type Tcl_Pid = uintptr 6837 type Tcl_RegExp = uintptr 6838 type Tcl_ThreadDataKey = uintptr 6839 type Tcl_ThreadId = uintptr 6840 type Tcl_TimerToken = uintptr 6841 type Tcl_Trace = uintptr 6842 type Tcl_Var = uintptr 6843 type Tcl_ZlibStream = uintptr 6844 6845 type Tcl_RegExpIndices1 = struct { 6846 Fstart int64 6847 Fend int64 6848 } 6849 6850 type Tcl_RegExpIndices = Tcl_RegExpIndices1 6851 6852 type Tcl_RegExpInfo1 = struct { 6853 Fnsubs int32 6854 F__ccgo_pad1 [4]byte 6855 Fmatches uintptr 6856 FextendStart int64 6857 Freserved int64 6858 } 6859 6860 type Tcl_RegExpInfo = Tcl_RegExpInfo1 6861 6862 type Tcl_Stat_ = uintptr 6863 type Tcl_OldStat_ = uintptr 6864 6865 type Tcl_ValueType = uint32 6866 6867 type Tcl_Value1 = struct { 6868 Ftype Tcl_ValueType 6869 F__ccgo_pad1 [4]byte 6870 FintValue int64 6871 FdoubleValue float64 6872 FwideValue Tcl_WideInt 6873 } 6874 6875 type Tcl_Value = Tcl_Value1 6876 6877 type Tcl_Obj1 = struct { 6878 FrefCount int32 6879 F__ccgo_pad1 [4]byte 6880 Fbytes uintptr 6881 Flength int32 6882 F__ccgo_pad2 [4]byte 6883 FtypePtr uintptr 6884 FinternalRep struct { 6885 FlongValue int64 6886 F__ccgo_pad1 [8]byte 6887 } 6888 } 6889 6890 type Tcl_ObjType1 = struct { 6891 Fname uintptr 6892 FfreeIntRepProc uintptr 6893 FdupIntRepProc uintptr 6894 FupdateStringProc uintptr 6895 FsetFromAnyProc uintptr 6896 } 6897 6898 type Tcl_ObjType = Tcl_ObjType1 6899 6900 type Tcl_Obj = Tcl_Obj1 6901 6902 type Tcl_SavedResult1 = struct { 6903 Fresult uintptr 6904 FfreeProc uintptr 6905 FobjResultPtr uintptr 6906 FappendResult uintptr 6907 FappendAvl int32 6908 FappendUsed int32 6909 FresultSpace [201]uint8 6910 F__ccgo_pad1 [7]byte 6911 } 6912 6913 type Tcl_SavedResult = Tcl_SavedResult1 6914 6915 type Tcl_Namespace1 = struct { 6916 Fname uintptr 6917 FfullName uintptr 6918 FclientData ClientData 6919 FdeleteProc uintptr 6920 FparentPtr uintptr 6921 } 6922 6923 type Tcl_Namespace = Tcl_Namespace1 6924 6925 type Tcl_CallFrame1 = struct { 6926 FnsPtr uintptr 6927 Fdummy1 int32 6928 Fdummy2 int32 6929 Fdummy3 uintptr 6930 Fdummy4 uintptr 6931 Fdummy5 uintptr 6932 Fdummy6 int32 6933 F__ccgo_pad1 [4]byte 6934 Fdummy7 uintptr 6935 Fdummy8 uintptr 6936 Fdummy9 int32 6937 F__ccgo_pad2 [4]byte 6938 Fdummy10 uintptr 6939 Fdummy11 uintptr 6940 Fdummy12 uintptr 6941 Fdummy13 uintptr 6942 } 6943 6944 type Tcl_CallFrame = Tcl_CallFrame1 6945 6946 type Tcl_CmdInfo1 = struct { 6947 FisNativeObjectProc int32 6948 F__ccgo_pad1 [4]byte 6949 FobjProc uintptr 6950 FobjClientData ClientData 6951 Fproc uintptr 6952 FclientData ClientData 6953 FdeleteProc uintptr 6954 FdeleteData ClientData 6955 FnamespacePtr uintptr 6956 } 6957 6958 type Tcl_CmdInfo = Tcl_CmdInfo1 6959 6960 type Tcl_DString1 = struct { 6961 Fstring uintptr 6962 Flength int32 6963 FspaceAvl int32 6964 FstaticSpace [200]uint8 6965 } 6966 6967 type Tcl_DString = Tcl_DString1 6968 6969 type Tcl_HashKeyType1 = struct { 6970 Fversion int32 6971 Fflags int32 6972 FhashKeyProc uintptr 6973 FcompareKeysProc uintptr 6974 FallocEntryProc uintptr 6975 FfreeEntryProc uintptr 6976 } 6977 6978 type Tcl_HashKeyType = Tcl_HashKeyType1 6979 type Tcl_HashTable1 = struct { 6980 Fbuckets uintptr 6981 FstaticBuckets [4]uintptr 6982 FnumBuckets int32 6983 FnumEntries int32 6984 FrebuildSize int32 6985 FdownShift int32 6986 Fmask int32 6987 FkeyType int32 6988 FfindProc uintptr 6989 FcreateProc uintptr 6990 FtypePtr uintptr 6991 } 6992 6993 type Tcl_HashTable = Tcl_HashTable1 6994 type Tcl_HashEntry1 = struct { 6995 FnextPtr uintptr 6996 FtablePtr uintptr 6997 Fhash uintptr 6998 FclientData ClientData 6999 Fkey struct{ FoneWordValue uintptr } 7000 } 7001 7002 type Tcl_HashEntry = Tcl_HashEntry1 7003 7004 type Tcl_HashSearch1 = struct { 7005 FtablePtr uintptr 7006 FnextIndex int32 7007 F__ccgo_pad1 [4]byte 7008 FnextEntryPtr uintptr 7009 } 7010 7011 type Tcl_HashSearch = Tcl_HashSearch1 7012 7013 type Tcl_DictSearch = struct { 7014 Fnext uintptr 7015 Fepoch int32 7016 F__ccgo_pad1 [4]byte 7017 FdictionaryPtr Tcl_Dict 7018 } 7019 7020 type Tcl_QueuePosition = uint32 7021 7022 type Tcl_Time1 = struct { 7023 Fsec int64 7024 Fusec int64 7025 } 7026 7027 type Tcl_Time = Tcl_Time1 7028 7029 type Tcl_ChannelType1 = struct { 7030 FtypeName uintptr 7031 Fversion Tcl_ChannelTypeVersion 7032 FcloseProc uintptr 7033 FinputProc uintptr 7034 FoutputProc uintptr 7035 FseekProc uintptr 7036 FsetOptionProc uintptr 7037 FgetOptionProc uintptr 7038 FwatchProc uintptr 7039 FgetHandleProc uintptr 7040 Fclose2Proc uintptr 7041 FblockModeProc uintptr 7042 FflushProc uintptr 7043 FhandlerProc uintptr 7044 FwideSeekProc uintptr 7045 FthreadActionProc uintptr 7046 FtruncateProc uintptr 7047 } 7048 7049 type Tcl_ChannelType = Tcl_ChannelType1 7050 7051 type Tcl_PathType = uint32 7052 7053 type Tcl_GlobTypeData1 = struct { 7054 Ftype int32 7055 Fperm int32 7056 FmacType uintptr 7057 FmacCreator uintptr 7058 } 7059 7060 type Tcl_GlobTypeData = Tcl_GlobTypeData1 7061 7062 type utimbuf = struct { 7063 Factime int64 7064 Fmodtime int64 7065 } 7066 7067 type Tcl_FSVersion = uintptr 7068 7069 type Tcl_Filesystem1 = struct { 7070 FtypeName uintptr 7071 FstructureLength int32 7072 F__ccgo_pad1 [4]byte 7073 Fversion Tcl_FSVersion 7074 FpathInFilesystemProc uintptr 7075 FdupInternalRepProc uintptr 7076 FfreeInternalRepProc uintptr 7077 FinternalToNormalizedProc uintptr 7078 FcreateInternalRepProc uintptr 7079 FnormalizePathProc uintptr 7080 FfilesystemPathTypeProc uintptr 7081 FfilesystemSeparatorProc uintptr 7082 FstatProc uintptr 7083 FaccessProc uintptr 7084 FopenFileChannelProc uintptr 7085 FmatchInDirectoryProc uintptr 7086 FutimeProc uintptr 7087 FlinkProc uintptr 7088 FlistVolumesProc uintptr 7089 FfileAttrStringsProc uintptr 7090 FfileAttrsGetProc uintptr 7091 FfileAttrsSetProc uintptr 7092 FcreateDirectoryProc uintptr 7093 FremoveDirectoryProc uintptr 7094 FdeleteFileProc uintptr 7095 FcopyFileProc uintptr 7096 FrenameFileProc uintptr 7097 FcopyDirectoryProc uintptr 7098 FlstatProc uintptr 7099 FloadFileProc uintptr 7100 FgetCwdProc uintptr 7101 FchdirProc uintptr 7102 } 7103 7104 type Tcl_Filesystem = Tcl_Filesystem1 7105 7106 type Tcl_NotifierProcs1 = struct { 7107 FsetTimerProc uintptr 7108 FwaitForEventProc uintptr 7109 FcreateFileHandlerProc uintptr 7110 FdeleteFileHandlerProc uintptr 7111 FinitNotifierProc uintptr 7112 FfinalizeNotifierProc uintptr 7113 FalertNotifierProc uintptr 7114 FserviceModeHookProc uintptr 7115 } 7116 7117 type Tcl_NotifierProcs = Tcl_NotifierProcs1 7118 7119 type Tcl_Token1 = struct { 7120 Ftype int32 7121 F__ccgo_pad1 [4]byte 7122 Fstart uintptr 7123 Fsize int32 7124 FnumComponents int32 7125 } 7126 7127 type Tcl_Token = Tcl_Token1 7128 7129 type Tcl_Parse1 = struct { 7130 FcommentStart uintptr 7131 FcommentSize int32 7132 F__ccgo_pad1 [4]byte 7133 FcommandStart uintptr 7134 FcommandSize int32 7135 FnumWords int32 7136 FtokenPtr uintptr 7137 FnumTokens int32 7138 FtokensAvailable int32 7139 FerrorType int32 7140 F__ccgo_pad2 [4]byte 7141 Fstring uintptr 7142 Fend uintptr 7143 Finterp uintptr 7144 Fterm uintptr 7145 Fincomplete int32 7146 F__ccgo_pad3 [4]byte 7147 FstaticTokens [20]Tcl_Token 7148 } 7149 7150 type Tcl_Parse = Tcl_Parse1 7151 7152 type Tcl_EncodingType1 = struct { 7153 FencodingName uintptr 7154 FtoUtfProc uintptr 7155 FfromUtfProc uintptr 7156 FfreeProc uintptr 7157 FclientData ClientData 7158 FnullSize int32 7159 F__ccgo_pad1 [4]byte 7160 } 7161 7162 type Tcl_EncodingType = Tcl_EncodingType1 7163 7164 type Tcl_UniChar = uint16 7165 7166 type Tcl_Config1 = struct { 7167 Fkey uintptr 7168 Fvalue uintptr 7169 } 7170 7171 type Tcl_Config = Tcl_Config1 7172 type mp_digit = uint32 7173 7174 type Tcl_ArgvInfo = struct { 7175 Ftype int32 7176 F__ccgo_pad1 [4]byte 7177 FkeyStr uintptr 7178 FsrcPtr uintptr 7179 FdstPtr uintptr 7180 FhelpStr uintptr 7181 FclientData ClientData 7182 } 7183 7184 type TclPlatStubs1 = struct { 7185 Fmagic int32 7186 F__ccgo_pad1 [4]byte 7187 Fhooks uintptr 7188 } 7189 7190 type TclStubHooks = struct { 7191 FtclPlatStubs uintptr 7192 FtclIntStubs uintptr 7193 FtclIntPlatStubs uintptr 7194 } 7195 7196 type TclStubs1 = struct { 7197 Fmagic int32 7198 F__ccgo_pad1 [4]byte 7199 Fhooks uintptr 7200 Ftcl_PkgProvideEx uintptr 7201 Ftcl_PkgRequireEx uintptr 7202 Ftcl_Panic uintptr 7203 Ftcl_Alloc uintptr 7204 Ftcl_Free uintptr 7205 Ftcl_Realloc uintptr 7206 Ftcl_DbCkalloc uintptr 7207 Ftcl_DbCkfree uintptr 7208 Ftcl_DbCkrealloc uintptr 7209 Ftcl_CreateFileHandler uintptr 7210 Ftcl_DeleteFileHandler uintptr 7211 Ftcl_SetTimer uintptr 7212 Ftcl_Sleep uintptr 7213 Ftcl_WaitForEvent uintptr 7214 Ftcl_AppendAllObjTypes uintptr 7215 Ftcl_AppendStringsToObj uintptr 7216 Ftcl_AppendToObj uintptr 7217 Ftcl_ConcatObj uintptr 7218 Ftcl_ConvertToType uintptr 7219 Ftcl_DbDecrRefCount uintptr 7220 Ftcl_DbIncrRefCount uintptr 7221 Ftcl_DbIsShared uintptr 7222 Ftcl_DbNewBooleanObj uintptr 7223 Ftcl_DbNewByteArrayObj uintptr 7224 Ftcl_DbNewDoubleObj uintptr 7225 Ftcl_DbNewListObj uintptr 7226 Ftcl_DbNewLongObj uintptr 7227 Ftcl_DbNewObj uintptr 7228 Ftcl_DbNewStringObj uintptr 7229 Ftcl_DuplicateObj uintptr 7230 FtclFreeObj uintptr 7231 Ftcl_GetBoolean uintptr 7232 Ftcl_GetBooleanFromObj uintptr 7233 Ftcl_GetByteArrayFromObj uintptr 7234 Ftcl_GetDouble uintptr 7235 Ftcl_GetDoubleFromObj uintptr 7236 Ftcl_GetIndexFromObj uintptr 7237 Ftcl_GetInt uintptr 7238 Ftcl_GetIntFromObj uintptr 7239 Ftcl_GetLongFromObj uintptr 7240 Ftcl_GetObjType uintptr 7241 Ftcl_GetStringFromObj uintptr 7242 Ftcl_InvalidateStringRep uintptr 7243 Ftcl_ListObjAppendList uintptr 7244 Ftcl_ListObjAppendElement uintptr 7245 Ftcl_ListObjGetElements uintptr 7246 Ftcl_ListObjIndex uintptr 7247 Ftcl_ListObjLength uintptr 7248 Ftcl_ListObjReplace uintptr 7249 Ftcl_NewBooleanObj uintptr 7250 Ftcl_NewByteArrayObj uintptr 7251 Ftcl_NewDoubleObj uintptr 7252 Ftcl_NewIntObj uintptr 7253 Ftcl_NewListObj uintptr 7254 Ftcl_NewLongObj uintptr 7255 Ftcl_NewObj uintptr 7256 Ftcl_NewStringObj uintptr 7257 Ftcl_SetBooleanObj uintptr 7258 Ftcl_SetByteArrayLength uintptr 7259 Ftcl_SetByteArrayObj uintptr 7260 Ftcl_SetDoubleObj uintptr 7261 Ftcl_SetIntObj uintptr 7262 Ftcl_SetListObj uintptr 7263 Ftcl_SetLongObj uintptr 7264 Ftcl_SetObjLength uintptr 7265 Ftcl_SetStringObj uintptr 7266 Ftcl_AddErrorInfo uintptr 7267 Ftcl_AddObjErrorInfo uintptr 7268 Ftcl_AllowExceptions uintptr 7269 Ftcl_AppendElement uintptr 7270 Ftcl_AppendResult uintptr 7271 Ftcl_AsyncCreate uintptr 7272 Ftcl_AsyncDelete uintptr 7273 Ftcl_AsyncInvoke uintptr 7274 Ftcl_AsyncMark uintptr 7275 Ftcl_AsyncReady uintptr 7276 Ftcl_BackgroundError uintptr 7277 Ftcl_Backslash uintptr 7278 Ftcl_BadChannelOption uintptr 7279 Ftcl_CallWhenDeleted uintptr 7280 Ftcl_CancelIdleCall uintptr 7281 Ftcl_Close uintptr 7282 Ftcl_CommandComplete uintptr 7283 Ftcl_Concat uintptr 7284 Ftcl_ConvertElement uintptr 7285 Ftcl_ConvertCountedElement uintptr 7286 Ftcl_CreateAlias uintptr 7287 Ftcl_CreateAliasObj uintptr 7288 Ftcl_CreateChannel uintptr 7289 Ftcl_CreateChannelHandler uintptr 7290 Ftcl_CreateCloseHandler uintptr 7291 Ftcl_CreateCommand uintptr 7292 Ftcl_CreateEventSource uintptr 7293 Ftcl_CreateExitHandler uintptr 7294 Ftcl_CreateInterp uintptr 7295 Ftcl_CreateMathFunc uintptr 7296 Ftcl_CreateObjCommand uintptr 7297 Ftcl_CreateSlave uintptr 7298 Ftcl_CreateTimerHandler uintptr 7299 Ftcl_CreateTrace uintptr 7300 Ftcl_DeleteAssocData uintptr 7301 Ftcl_DeleteChannelHandler uintptr 7302 Ftcl_DeleteCloseHandler uintptr 7303 Ftcl_DeleteCommand uintptr 7304 Ftcl_DeleteCommandFromToken uintptr 7305 Ftcl_DeleteEvents uintptr 7306 Ftcl_DeleteEventSource uintptr 7307 Ftcl_DeleteExitHandler uintptr 7308 Ftcl_DeleteHashEntry uintptr 7309 Ftcl_DeleteHashTable uintptr 7310 Ftcl_DeleteInterp uintptr 7311 Ftcl_DetachPids uintptr 7312 Ftcl_DeleteTimerHandler uintptr 7313 Ftcl_DeleteTrace uintptr 7314 Ftcl_DontCallWhenDeleted uintptr 7315 Ftcl_DoOneEvent uintptr 7316 Ftcl_DoWhenIdle uintptr 7317 Ftcl_DStringAppend uintptr 7318 Ftcl_DStringAppendElement uintptr 7319 Ftcl_DStringEndSublist uintptr 7320 Ftcl_DStringFree uintptr 7321 Ftcl_DStringGetResult uintptr 7322 Ftcl_DStringInit uintptr 7323 Ftcl_DStringResult uintptr 7324 Ftcl_DStringSetLength uintptr 7325 Ftcl_DStringStartSublist uintptr 7326 Ftcl_Eof uintptr 7327 Ftcl_ErrnoId uintptr 7328 Ftcl_ErrnoMsg uintptr 7329 Ftcl_Eval uintptr 7330 Ftcl_EvalFile uintptr 7331 Ftcl_EvalObj uintptr 7332 Ftcl_EventuallyFree uintptr 7333 Ftcl_Exit uintptr 7334 Ftcl_ExposeCommand uintptr 7335 Ftcl_ExprBoolean uintptr 7336 Ftcl_ExprBooleanObj uintptr 7337 Ftcl_ExprDouble uintptr 7338 Ftcl_ExprDoubleObj uintptr 7339 Ftcl_ExprLong uintptr 7340 Ftcl_ExprLongObj uintptr 7341 Ftcl_ExprObj uintptr 7342 Ftcl_ExprString uintptr 7343 Ftcl_Finalize uintptr 7344 Ftcl_FindExecutable uintptr 7345 Ftcl_FirstHashEntry uintptr 7346 Ftcl_Flush uintptr 7347 Ftcl_FreeResult uintptr 7348 Ftcl_GetAlias uintptr 7349 Ftcl_GetAliasObj uintptr 7350 Ftcl_GetAssocData uintptr 7351 Ftcl_GetChannel uintptr 7352 Ftcl_GetChannelBufferSize uintptr 7353 Ftcl_GetChannelHandle uintptr 7354 Ftcl_GetChannelInstanceData uintptr 7355 Ftcl_GetChannelMode uintptr 7356 Ftcl_GetChannelName uintptr 7357 Ftcl_GetChannelOption uintptr 7358 Ftcl_GetChannelType uintptr 7359 Ftcl_GetCommandInfo uintptr 7360 Ftcl_GetCommandName uintptr 7361 Ftcl_GetErrno uintptr 7362 Ftcl_GetHostName uintptr 7363 Ftcl_GetInterpPath uintptr 7364 Ftcl_GetMaster uintptr 7365 Ftcl_GetNameOfExecutable uintptr 7366 Ftcl_GetObjResult uintptr 7367 Ftcl_GetOpenFile uintptr 7368 Ftcl_GetPathType uintptr 7369 Ftcl_Gets uintptr 7370 Ftcl_GetsObj uintptr 7371 Ftcl_GetServiceMode uintptr 7372 Ftcl_GetSlave uintptr 7373 Ftcl_GetStdChannel uintptr 7374 Ftcl_GetStringResult uintptr 7375 Ftcl_GetVar uintptr 7376 Ftcl_GetVar2 uintptr 7377 Ftcl_GlobalEval uintptr 7378 Ftcl_GlobalEvalObj uintptr 7379 Ftcl_HideCommand uintptr 7380 Ftcl_Init uintptr 7381 Ftcl_InitHashTable uintptr 7382 Ftcl_InputBlocked uintptr 7383 Ftcl_InputBuffered uintptr 7384 Ftcl_InterpDeleted uintptr 7385 Ftcl_IsSafe uintptr 7386 Ftcl_JoinPath uintptr 7387 Ftcl_LinkVar uintptr 7388 Freserved188 uintptr 7389 Ftcl_MakeFileChannel uintptr 7390 Ftcl_MakeSafe uintptr 7391 Ftcl_MakeTcpClientChannel uintptr 7392 Ftcl_Merge uintptr 7393 Ftcl_NextHashEntry uintptr 7394 Ftcl_NotifyChannel uintptr 7395 Ftcl_ObjGetVar2 uintptr 7396 Ftcl_ObjSetVar2 uintptr 7397 Ftcl_OpenCommandChannel uintptr 7398 Ftcl_OpenFileChannel uintptr 7399 Ftcl_OpenTcpClient uintptr 7400 Ftcl_OpenTcpServer uintptr 7401 Ftcl_Preserve uintptr 7402 Ftcl_PrintDouble uintptr 7403 Ftcl_PutEnv uintptr 7404 Ftcl_PosixError uintptr 7405 Ftcl_QueueEvent uintptr 7406 Ftcl_Read uintptr 7407 Ftcl_ReapDetachedProcs uintptr 7408 Ftcl_RecordAndEval uintptr 7409 Ftcl_RecordAndEvalObj uintptr 7410 Ftcl_RegisterChannel uintptr 7411 Ftcl_RegisterObjType uintptr 7412 Ftcl_RegExpCompile uintptr 7413 Ftcl_RegExpExec uintptr 7414 Ftcl_RegExpMatch uintptr 7415 Ftcl_RegExpRange uintptr 7416 Ftcl_Release uintptr 7417 Ftcl_ResetResult uintptr 7418 Ftcl_ScanElement uintptr 7419 Ftcl_ScanCountedElement uintptr 7420 Ftcl_SeekOld uintptr 7421 Ftcl_ServiceAll uintptr 7422 Ftcl_ServiceEvent uintptr 7423 Ftcl_SetAssocData uintptr 7424 Ftcl_SetChannelBufferSize uintptr 7425 Ftcl_SetChannelOption uintptr 7426 Ftcl_SetCommandInfo uintptr 7427 Ftcl_SetErrno uintptr 7428 Ftcl_SetErrorCode uintptr 7429 Ftcl_SetMaxBlockTime uintptr 7430 Ftcl_SetPanicProc uintptr 7431 Ftcl_SetRecursionLimit uintptr 7432 Ftcl_SetResult uintptr 7433 Ftcl_SetServiceMode uintptr 7434 Ftcl_SetObjErrorCode uintptr 7435 Ftcl_SetObjResult uintptr 7436 Ftcl_SetStdChannel uintptr 7437 Ftcl_SetVar uintptr 7438 Ftcl_SetVar2 uintptr 7439 Ftcl_SignalId uintptr 7440 Ftcl_SignalMsg uintptr 7441 Ftcl_SourceRCFile uintptr 7442 Ftcl_SplitList uintptr 7443 Ftcl_SplitPath uintptr 7444 Ftcl_StaticPackage uintptr 7445 Ftcl_StringMatch uintptr 7446 Ftcl_TellOld uintptr 7447 Ftcl_TraceVar uintptr 7448 Ftcl_TraceVar2 uintptr 7449 Ftcl_TranslateFileName uintptr 7450 Ftcl_Ungets uintptr 7451 Ftcl_UnlinkVar uintptr 7452 Ftcl_UnregisterChannel uintptr 7453 Ftcl_UnsetVar uintptr 7454 Ftcl_UnsetVar2 uintptr 7455 Ftcl_UntraceVar uintptr 7456 Ftcl_UntraceVar2 uintptr 7457 Ftcl_UpdateLinkedVar uintptr 7458 Ftcl_UpVar uintptr 7459 Ftcl_UpVar2 uintptr 7460 Ftcl_VarEval uintptr 7461 Ftcl_VarTraceInfo uintptr 7462 Ftcl_VarTraceInfo2 uintptr 7463 Ftcl_Write uintptr 7464 Ftcl_WrongNumArgs uintptr 7465 Ftcl_DumpActiveMemory uintptr 7466 Ftcl_ValidateAllMemory uintptr 7467 Ftcl_AppendResultVA uintptr 7468 Ftcl_AppendStringsToObjVA uintptr 7469 Ftcl_HashStats uintptr 7470 Ftcl_ParseVar uintptr 7471 Ftcl_PkgPresent uintptr 7472 Ftcl_PkgPresentEx uintptr 7473 Ftcl_PkgProvide uintptr 7474 Ftcl_PkgRequire uintptr 7475 Ftcl_SetErrorCodeVA uintptr 7476 Ftcl_VarEvalVA uintptr 7477 Ftcl_WaitPid uintptr 7478 Ftcl_PanicVA uintptr 7479 Ftcl_GetVersion uintptr 7480 Ftcl_InitMemory uintptr 7481 Ftcl_StackChannel uintptr 7482 Ftcl_UnstackChannel uintptr 7483 Ftcl_GetStackedChannel uintptr 7484 Ftcl_SetMainLoop uintptr 7485 Freserved285 uintptr 7486 Ftcl_AppendObjToObj uintptr 7487 Ftcl_CreateEncoding uintptr 7488 Ftcl_CreateThreadExitHandler uintptr 7489 Ftcl_DeleteThreadExitHandler uintptr 7490 Ftcl_DiscardResult uintptr 7491 Ftcl_EvalEx uintptr 7492 Ftcl_EvalObjv uintptr 7493 Ftcl_EvalObjEx uintptr 7494 Ftcl_ExitThread uintptr 7495 Ftcl_ExternalToUtf uintptr 7496 Ftcl_ExternalToUtfDString uintptr 7497 Ftcl_FinalizeThread uintptr 7498 Ftcl_FinalizeNotifier uintptr 7499 Ftcl_FreeEncoding uintptr 7500 Ftcl_GetCurrentThread uintptr 7501 Ftcl_GetEncoding uintptr 7502 Ftcl_GetEncodingName uintptr 7503 Ftcl_GetEncodingNames uintptr 7504 Ftcl_GetIndexFromObjStruct uintptr 7505 Ftcl_GetThreadData uintptr 7506 Ftcl_GetVar2Ex uintptr 7507 Ftcl_InitNotifier uintptr 7508 Ftcl_MutexLock uintptr 7509 Ftcl_MutexUnlock uintptr 7510 Ftcl_ConditionNotify uintptr 7511 Ftcl_ConditionWait uintptr 7512 Ftcl_NumUtfChars uintptr 7513 Ftcl_ReadChars uintptr 7514 Ftcl_RestoreResult uintptr 7515 Ftcl_SaveResult uintptr 7516 Ftcl_SetSystemEncoding uintptr 7517 Ftcl_SetVar2Ex uintptr 7518 Ftcl_ThreadAlert uintptr 7519 Ftcl_ThreadQueueEvent uintptr 7520 Ftcl_UniCharAtIndex uintptr 7521 Ftcl_UniCharToLower uintptr 7522 Ftcl_UniCharToTitle uintptr 7523 Ftcl_UniCharToUpper uintptr 7524 Ftcl_UniCharToUtf uintptr 7525 Ftcl_UtfAtIndex uintptr 7526 Ftcl_UtfCharComplete uintptr 7527 Ftcl_UtfBackslash uintptr 7528 Ftcl_UtfFindFirst uintptr 7529 Ftcl_UtfFindLast uintptr 7530 Ftcl_UtfNext uintptr 7531 Ftcl_UtfPrev uintptr 7532 Ftcl_UtfToExternal uintptr 7533 Ftcl_UtfToExternalDString uintptr 7534 Ftcl_UtfToLower uintptr 7535 Ftcl_UtfToTitle uintptr 7536 Ftcl_UtfToUniChar uintptr 7537 Ftcl_UtfToUpper uintptr 7538 Ftcl_WriteChars uintptr 7539 Ftcl_WriteObj uintptr 7540 Ftcl_GetString uintptr 7541 Ftcl_GetDefaultEncodingDir uintptr 7542 Ftcl_SetDefaultEncodingDir uintptr 7543 Ftcl_AlertNotifier uintptr 7544 Ftcl_ServiceModeHook uintptr 7545 Ftcl_UniCharIsAlnum uintptr 7546 Ftcl_UniCharIsAlpha uintptr 7547 Ftcl_UniCharIsDigit uintptr 7548 Ftcl_UniCharIsLower uintptr 7549 Ftcl_UniCharIsSpace uintptr 7550 Ftcl_UniCharIsUpper uintptr 7551 Ftcl_UniCharIsWordChar uintptr 7552 Ftcl_UniCharLen uintptr 7553 Ftcl_UniCharNcmp uintptr 7554 Ftcl_UniCharToUtfDString uintptr 7555 Ftcl_UtfToUniCharDString uintptr 7556 Ftcl_GetRegExpFromObj uintptr 7557 Ftcl_EvalTokens uintptr 7558 Ftcl_FreeParse uintptr 7559 Ftcl_LogCommandInfo uintptr 7560 Ftcl_ParseBraces uintptr 7561 Ftcl_ParseCommand uintptr 7562 Ftcl_ParseExpr uintptr 7563 Ftcl_ParseQuotedString uintptr 7564 Ftcl_ParseVarName uintptr 7565 Ftcl_GetCwd uintptr 7566 Ftcl_Chdir uintptr 7567 Ftcl_Access uintptr 7568 Ftcl_Stat uintptr 7569 Ftcl_UtfNcmp uintptr 7570 Ftcl_UtfNcasecmp uintptr 7571 Ftcl_StringCaseMatch uintptr 7572 Ftcl_UniCharIsControl uintptr 7573 Ftcl_UniCharIsGraph uintptr 7574 Ftcl_UniCharIsPrint uintptr 7575 Ftcl_UniCharIsPunct uintptr 7576 Ftcl_RegExpExecObj uintptr 7577 Ftcl_RegExpGetInfo uintptr 7578 Ftcl_NewUnicodeObj uintptr 7579 Ftcl_SetUnicodeObj uintptr 7580 Ftcl_GetCharLength uintptr 7581 Ftcl_GetUniChar uintptr 7582 Ftcl_GetUnicode uintptr 7583 Ftcl_GetRange uintptr 7584 Ftcl_AppendUnicodeToObj uintptr 7585 Ftcl_RegExpMatchObj uintptr 7586 Ftcl_SetNotifier uintptr 7587 Ftcl_GetAllocMutex uintptr 7588 Ftcl_GetChannelNames uintptr 7589 Ftcl_GetChannelNamesEx uintptr 7590 Ftcl_ProcObjCmd uintptr 7591 Ftcl_ConditionFinalize uintptr 7592 Ftcl_MutexFinalize uintptr 7593 Ftcl_CreateThread uintptr 7594 Ftcl_ReadRaw uintptr 7595 Ftcl_WriteRaw uintptr 7596 Ftcl_GetTopChannel uintptr 7597 Ftcl_ChannelBuffered uintptr 7598 Ftcl_ChannelName uintptr 7599 Ftcl_ChannelVersion uintptr 7600 Ftcl_ChannelBlockModeProc uintptr 7601 Ftcl_ChannelCloseProc uintptr 7602 Ftcl_ChannelClose2Proc uintptr 7603 Ftcl_ChannelInputProc uintptr 7604 Ftcl_ChannelOutputProc uintptr 7605 Ftcl_ChannelSeekProc uintptr 7606 Ftcl_ChannelSetOptionProc uintptr 7607 Ftcl_ChannelGetOptionProc uintptr 7608 Ftcl_ChannelWatchProc uintptr 7609 Ftcl_ChannelGetHandleProc uintptr 7610 Ftcl_ChannelFlushProc uintptr 7611 Ftcl_ChannelHandlerProc uintptr 7612 Ftcl_JoinThread uintptr 7613 Ftcl_IsChannelShared uintptr 7614 Ftcl_IsChannelRegistered uintptr 7615 Ftcl_CutChannel uintptr 7616 Ftcl_SpliceChannel uintptr 7617 Ftcl_ClearChannelHandlers uintptr 7618 Ftcl_IsChannelExisting uintptr 7619 Ftcl_UniCharNcasecmp uintptr 7620 Ftcl_UniCharCaseMatch uintptr 7621 Ftcl_FindHashEntry uintptr 7622 Ftcl_CreateHashEntry uintptr 7623 Ftcl_InitCustomHashTable uintptr 7624 Ftcl_InitObjHashTable uintptr 7625 Ftcl_CommandTraceInfo uintptr 7626 Ftcl_TraceCommand uintptr 7627 Ftcl_UntraceCommand uintptr 7628 Ftcl_AttemptAlloc uintptr 7629 Ftcl_AttemptDbCkalloc uintptr 7630 Ftcl_AttemptRealloc uintptr 7631 Ftcl_AttemptDbCkrealloc uintptr 7632 Ftcl_AttemptSetObjLength uintptr 7633 Ftcl_GetChannelThread uintptr 7634 Ftcl_GetUnicodeFromObj uintptr 7635 Ftcl_GetMathFuncInfo uintptr 7636 Ftcl_ListMathFuncs uintptr 7637 Ftcl_SubstObj uintptr 7638 Ftcl_DetachChannel uintptr 7639 Ftcl_IsStandardChannel uintptr 7640 Ftcl_FSCopyFile uintptr 7641 Ftcl_FSCopyDirectory uintptr 7642 Ftcl_FSCreateDirectory uintptr 7643 Ftcl_FSDeleteFile uintptr 7644 Ftcl_FSLoadFile uintptr 7645 Ftcl_FSMatchInDirectory uintptr 7646 Ftcl_FSLink uintptr 7647 Ftcl_FSRemoveDirectory uintptr 7648 Ftcl_FSRenameFile uintptr 7649 Ftcl_FSLstat uintptr 7650 Ftcl_FSUtime uintptr 7651 Ftcl_FSFileAttrsGet uintptr 7652 Ftcl_FSFileAttrsSet uintptr 7653 Ftcl_FSFileAttrStrings uintptr 7654 Ftcl_FSStat uintptr 7655 Ftcl_FSAccess uintptr 7656 Ftcl_FSOpenFileChannel uintptr 7657 Ftcl_FSGetCwd uintptr 7658 Ftcl_FSChdir uintptr 7659 Ftcl_FSConvertToPathType uintptr 7660 Ftcl_FSJoinPath uintptr 7661 Ftcl_FSSplitPath uintptr 7662 Ftcl_FSEqualPaths uintptr 7663 Ftcl_FSGetNormalizedPath uintptr 7664 Ftcl_FSJoinToPath uintptr 7665 Ftcl_FSGetInternalRep uintptr 7666 Ftcl_FSGetTranslatedPath uintptr 7667 Ftcl_FSEvalFile uintptr 7668 Ftcl_FSNewNativePath uintptr 7669 Ftcl_FSGetNativePath uintptr 7670 Ftcl_FSFileSystemInfo uintptr 7671 Ftcl_FSPathSeparator uintptr 7672 Ftcl_FSListVolumes uintptr 7673 Ftcl_FSRegister uintptr 7674 Ftcl_FSUnregister uintptr 7675 Ftcl_FSData uintptr 7676 Ftcl_FSGetTranslatedStringPath uintptr 7677 Ftcl_FSGetFileSystemForPath uintptr 7678 Ftcl_FSGetPathType uintptr 7679 Ftcl_OutputBuffered uintptr 7680 Ftcl_FSMountsChanged uintptr 7681 Ftcl_EvalTokensStandard uintptr 7682 Ftcl_GetTime uintptr 7683 Ftcl_CreateObjTrace uintptr 7684 Ftcl_GetCommandInfoFromToken uintptr 7685 Ftcl_SetCommandInfoFromToken uintptr 7686 Ftcl_DbNewWideIntObj uintptr 7687 Ftcl_GetWideIntFromObj uintptr 7688 Ftcl_NewWideIntObj uintptr 7689 Ftcl_SetWideIntObj uintptr 7690 Ftcl_AllocStatBuf uintptr 7691 Ftcl_Seek uintptr 7692 Ftcl_Tell uintptr 7693 Ftcl_ChannelWideSeekProc uintptr 7694 Ftcl_DictObjPut uintptr 7695 Ftcl_DictObjGet uintptr 7696 Ftcl_DictObjRemove uintptr 7697 Ftcl_DictObjSize uintptr 7698 Ftcl_DictObjFirst uintptr 7699 Ftcl_DictObjNext uintptr 7700 Ftcl_DictObjDone uintptr 7701 Ftcl_DictObjPutKeyList uintptr 7702 Ftcl_DictObjRemoveKeyList uintptr 7703 Ftcl_NewDictObj uintptr 7704 Ftcl_DbNewDictObj uintptr 7705 Ftcl_RegisterConfig uintptr 7706 Ftcl_CreateNamespace uintptr 7707 Ftcl_DeleteNamespace uintptr 7708 Ftcl_AppendExportList uintptr 7709 Ftcl_Export uintptr 7710 Ftcl_Import uintptr 7711 Ftcl_ForgetImport uintptr 7712 Ftcl_GetCurrentNamespace uintptr 7713 Ftcl_GetGlobalNamespace uintptr 7714 Ftcl_FindNamespace uintptr 7715 Ftcl_FindCommand uintptr 7716 Ftcl_GetCommandFromObj uintptr 7717 Ftcl_GetCommandFullName uintptr 7718 Ftcl_FSEvalFileEx uintptr 7719 Ftcl_SetExitProc uintptr 7720 Ftcl_LimitAddHandler uintptr 7721 Ftcl_LimitRemoveHandler uintptr 7722 Ftcl_LimitReady uintptr 7723 Ftcl_LimitCheck uintptr 7724 Ftcl_LimitExceeded uintptr 7725 Ftcl_LimitSetCommands uintptr 7726 Ftcl_LimitSetTime uintptr 7727 Ftcl_LimitSetGranularity uintptr 7728 Ftcl_LimitTypeEnabled uintptr 7729 Ftcl_LimitTypeExceeded uintptr 7730 Ftcl_LimitTypeSet uintptr 7731 Ftcl_LimitTypeReset uintptr 7732 Ftcl_LimitGetCommands uintptr 7733 Ftcl_LimitGetTime uintptr 7734 Ftcl_LimitGetGranularity uintptr 7735 Ftcl_SaveInterpState uintptr 7736 Ftcl_RestoreInterpState uintptr 7737 Ftcl_DiscardInterpState uintptr 7738 Ftcl_SetReturnOptions uintptr 7739 Ftcl_GetReturnOptions uintptr 7740 Ftcl_IsEnsemble uintptr 7741 Ftcl_CreateEnsemble uintptr 7742 Ftcl_FindEnsemble uintptr 7743 Ftcl_SetEnsembleSubcommandList uintptr 7744 Ftcl_SetEnsembleMappingDict uintptr 7745 Ftcl_SetEnsembleUnknownHandler uintptr 7746 Ftcl_SetEnsembleFlags uintptr 7747 Ftcl_GetEnsembleSubcommandList uintptr 7748 Ftcl_GetEnsembleMappingDict uintptr 7749 Ftcl_GetEnsembleUnknownHandler uintptr 7750 Ftcl_GetEnsembleFlags uintptr 7751 Ftcl_GetEnsembleNamespace uintptr 7752 Ftcl_SetTimeProc uintptr 7753 Ftcl_QueryTimeProc uintptr 7754 Ftcl_ChannelThreadActionProc uintptr 7755 Ftcl_NewBignumObj uintptr 7756 Ftcl_DbNewBignumObj uintptr 7757 Ftcl_SetBignumObj uintptr 7758 Ftcl_GetBignumFromObj uintptr 7759 Ftcl_TakeBignumFromObj uintptr 7760 Ftcl_TruncateChannel uintptr 7761 Ftcl_ChannelTruncateProc uintptr 7762 Ftcl_SetChannelErrorInterp uintptr 7763 Ftcl_GetChannelErrorInterp uintptr 7764 Ftcl_SetChannelError uintptr 7765 Ftcl_GetChannelError uintptr 7766 Ftcl_InitBignumFromDouble uintptr 7767 Ftcl_GetNamespaceUnknownHandler uintptr 7768 Ftcl_SetNamespaceUnknownHandler uintptr 7769 Ftcl_GetEncodingFromObj uintptr 7770 Ftcl_GetEncodingSearchPath uintptr 7771 Ftcl_SetEncodingSearchPath uintptr 7772 Ftcl_GetEncodingNameFromEnvironment uintptr 7773 Ftcl_PkgRequireProc uintptr 7774 Ftcl_AppendObjToErrorInfo uintptr 7775 Ftcl_AppendLimitedToObj uintptr 7776 Ftcl_Format uintptr 7777 Ftcl_AppendFormatToObj uintptr 7778 Ftcl_ObjPrintf uintptr 7779 Ftcl_AppendPrintfToObj uintptr 7780 Ftcl_CancelEval uintptr 7781 Ftcl_Canceled uintptr 7782 Ftcl_CreatePipe uintptr 7783 Ftcl_NRCreateCommand uintptr 7784 Ftcl_NREvalObj uintptr 7785 Ftcl_NREvalObjv uintptr 7786 Ftcl_NRCmdSwap uintptr 7787 Ftcl_NRAddCallback uintptr 7788 Ftcl_NRCallObjProc uintptr 7789 Ftcl_GetFSDeviceFromStat uintptr 7790 Ftcl_GetFSInodeFromStat uintptr 7791 Ftcl_GetModeFromStat uintptr 7792 Ftcl_GetLinkCountFromStat uintptr 7793 Ftcl_GetUserIdFromStat uintptr 7794 Ftcl_GetGroupIdFromStat uintptr 7795 Ftcl_GetDeviceTypeFromStat uintptr 7796 Ftcl_GetAccessTimeFromStat uintptr 7797 Ftcl_GetModificationTimeFromStat uintptr 7798 Ftcl_GetChangeTimeFromStat uintptr 7799 Ftcl_GetSizeFromStat uintptr 7800 Ftcl_GetBlocksFromStat uintptr 7801 Ftcl_GetBlockSizeFromStat uintptr 7802 Ftcl_SetEnsembleParameterList uintptr 7803 Ftcl_GetEnsembleParameterList uintptr 7804 Ftcl_ParseArgsObjv uintptr 7805 Ftcl_GetErrorLine uintptr 7806 Ftcl_SetErrorLine uintptr 7807 Ftcl_TransferResult uintptr 7808 Ftcl_InterpActive uintptr 7809 Ftcl_BackgroundException uintptr 7810 Ftcl_ZlibDeflate uintptr 7811 Ftcl_ZlibInflate uintptr 7812 Ftcl_ZlibCRC32 uintptr 7813 Ftcl_ZlibAdler32 uintptr 7814 Ftcl_ZlibStreamInit uintptr 7815 Ftcl_ZlibStreamGetCommandName uintptr 7816 Ftcl_ZlibStreamEof uintptr 7817 Ftcl_ZlibStreamChecksum uintptr 7818 Ftcl_ZlibStreamPut uintptr 7819 Ftcl_ZlibStreamGet uintptr 7820 Ftcl_ZlibStreamClose uintptr 7821 Ftcl_ZlibStreamReset uintptr 7822 Ftcl_SetStartupScript uintptr 7823 Ftcl_GetStartupScript uintptr 7824 Ftcl_CloseEx uintptr 7825 Ftcl_NRExprObj uintptr 7826 Ftcl_NRSubstObj uintptr 7827 Ftcl_LoadFile uintptr 7828 Ftcl_FindSymbol uintptr 7829 Ftcl_FSUnloadFile uintptr 7830 Ftcl_ZlibStreamSetCompressionDictionary uintptr 7831 Freserved631 uintptr 7832 Freserved632 uintptr 7833 Freserved633 uintptr 7834 Freserved634 uintptr 7835 Freserved635 uintptr 7836 Freserved636 uintptr 7837 Freserved637 uintptr 7838 Freserved638 uintptr 7839 Freserved639 uintptr 7840 Freserved640 uintptr 7841 Freserved641 uintptr 7842 Freserved642 uintptr 7843 Freserved643 uintptr 7844 Freserved644 uintptr 7845 Freserved645 uintptr 7846 Freserved646 uintptr 7847 Freserved647 uintptr 7848 Freserved648 uintptr 7849 FtclUnusedStubEntry uintptr 7850 } 7851 7852 type TclStubs = TclStubs1 7853 7854 type TclPlatStubs = TclPlatStubs1 7855 7856 func dbHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 7857 bp := tls.Alloc(88) 7858 defer tls.Free(88) 7859 7860 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 7861 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 7862 return TCL_ERROR 7863 } 7864 7865 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 7866 return TCL_OK 7867 } 7868 7869 func testExpertCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7870 bp := tls.Alloc(212) 7871 defer tls.Free(212) 7872 7873 var pExpert uintptr = clientData 7874 *(*[6]Subcmd)(unsafe.Pointer(bp)) = [6]Subcmd{ 7875 {FzSub: ts + 1947, FnArg: 1, FzMsg: ts + 1951}, 7876 {FzSub: ts + 1957, FzMsg: ts + 584}, 7877 {FzSub: ts + 1965, FzMsg: ts + 584}, 7878 {FzSub: ts + 1971, FnArg: 2, FzMsg: ts + 1978}, 7879 {FzSub: ts + 1991, FzMsg: ts + 584}, 7880 {}, 7881 } 7882 7883 var rc int32 = TCL_OK 7884 *(*uintptr)(unsafe.Pointer(bp + 152)) = uintptr(0) 7885 7886 if objc < 2 { 7887 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 7888 return TCL_ERROR 7889 } 7890 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 7891 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(Subcmd{})), ts+2014, 0, bp+144) 7892 if rc != TCL_OK { 7893 return rc 7894 } 7895 if objc != 2+(*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FnArg { 7896 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FzMsg) 7897 return TCL_ERROR 7898 } 7899 7900 switch *(*int32)(unsafe.Pointer(bp + 144)) { 7901 case 0: 7902 { 7903 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7904 rc = sqlite3_expert_sql(tls, pExpert, zArg, bp+152) 7905 break 7906 7907 } 7908 7909 case 1: 7910 { 7911 rc = sqlite3_expert_analyze(tls, pExpert, bp+152) 7912 break 7913 7914 } 7915 7916 case 2: 7917 { 7918 var n int32 = sqlite3_expert_count(tls, pExpert) 7919 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, n)) 7920 break 7921 7922 } 7923 7924 case 3: 7925 { 7926 *(*[5]uintptr)(unsafe.Pointer(bp + 168)) = [5]uintptr{ 7927 ts + 1947, ts + 2026, ts + 2034, ts + 2039, uintptr(0), 7928 } 7929 7930 var zReport uintptr 7931 7932 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+160) != 0 || 7933 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168, int32(unsafe.Sizeof(uintptr(0))), ts+1971, 0, bp+208) != 0 { 7934 return TCL_ERROR 7935 } 7936 7937 zReport = sqlite3_expert_report(tls, pExpert, *(*int32)(unsafe.Pointer(bp + 160)), 1+*(*int32)(unsafe.Pointer(bp + 208))) 7938 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zReport, -1)) 7939 break 7940 7941 } 7942 7943 default: 7944 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 7945 break 7946 } 7947 7948 if rc != TCL_OK { 7949 if *(*uintptr)(unsafe.Pointer(bp + 152)) != 0 { 7950 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 152)), -1)) 7951 } else { 7952 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 7953 } 7954 } 7955 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 152))) 7956 return rc 7957 } 7958 7959 type Subcmd = struct { 7960 FzSub uintptr 7961 FnArg int32 7962 F__ccgo_pad1 [4]byte 7963 FzMsg uintptr 7964 } 7965 7966 func testExpertDel(tls *libc.TLS, clientData uintptr) { 7967 var pExpert uintptr = clientData 7968 sqlite3_expert_destroy(tls, pExpert) 7969 } 7970 7971 func test_sqlite3_expert_new(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7972 bp := tls.Alloc(56) 7973 defer tls.Free(56) 7974 7975 var zCmd uintptr = uintptr(0) 7976 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7977 var pExpert uintptr 7978 var rc int32 = TCL_OK 7979 7980 if objc != 2 { 7981 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 7982 return TCL_ERROR 7983 } 7984 if dbHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) != 0 { 7985 return TCL_ERROR 7986 } 7987 7988 zCmd = sqlite3.Xsqlite3_mprintf(tls, ts+2053, libc.VaList(bp, libc.PreIncInt32(&iCmd, 1))) 7989 if zCmd == uintptr(0) { 7990 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, ts+2069, uintptr(0))) 7991 return TCL_ERROR 7992 } 7993 7994 pExpert = sqlite3_expert_new(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48) 7995 if pExpert == uintptr(0) { 7996 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 48)), uintptr(0))) 7997 rc = TCL_ERROR 7998 } else { 7999 var p uintptr = pExpert 8000 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 8001 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8002 }{testExpertCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testExpertDel}))) 8003 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zCmd, -1)) 8004 } 8005 8006 sqlite3.Xsqlite3_free(tls, zCmd) 8007 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 8008 return rc 8009 } 8010 8011 var iCmd int32 = 0 8012 8013 func TestExpert_Init(tls *libc.TLS, interp uintptr) int32 { 8014 bp := tls.Alloc(16) 8015 defer tls.Free(16) 8016 8017 *(*[1]struct { 8018 FzCmd uintptr 8019 FxProc uintptr 8020 })(unsafe.Pointer(bp)) = [1]struct { 8021 FzCmd uintptr 8022 FxProc uintptr 8023 }{ 8024 {FzCmd: ts + 2083, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 8025 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8026 }{test_sqlite3_expert_new}))}, 8027 } 8028 var i int32 8029 8030 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]struct { 8031 FzCmd uintptr 8032 FxProc uintptr 8033 }{}))/uint64(unsafe.Sizeof(struct { 8034 FzCmd uintptr 8035 FxProc uintptr 8036 }{})); i++ { 8037 var p uintptr = bp + uintptr(i)*16 8038 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 8039 FzCmd uintptr 8040 FxProc uintptr 8041 })(unsafe.Pointer(p)).FzCmd, (*struct { 8042 FzCmd uintptr 8043 FxProc uintptr 8044 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 8045 } 8046 return TCL_OK 8047 } 8048 8049 func f5tDbPointer(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr) int32 { 8050 bp := tls.Alloc(64) 8051 defer tls.Free(64) 8052 8053 var p uintptr 8054 8055 var z uintptr = tcl.XTcl_GetString(tls, pObj) 8056 if tcl.XTcl_GetCommandInfo(tls, interp, z, bp) != 0 { 8057 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 8058 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 8059 return TCL_OK 8060 } 8061 return TCL_ERROR 8062 } 8063 8064 func f5tResultToErrorCode(tls *libc.TLS, zRes uintptr) int32 { 8065 bp := tls.Alloc(64) 8066 defer tls.Free(64) 8067 8068 *(*[4]ErrorCode)(unsafe.Pointer(bp)) = [4]ErrorCode{ 8069 {Frc: SQLITE_DONE, FzError: ts + 2102}, 8070 {Frc: SQLITE_ERROR, FzError: ts + 2114}, 8071 {FzError: ts + 2127}, 8072 {FzError: ts + 584}, 8073 } 8074 var i int32 8075 8076 for i = 0; uint64(i) < uint64(unsafe.Sizeof([4]ErrorCode{}))/uint64(unsafe.Sizeof(ErrorCode{})); i++ { 8077 if 0 == sqlite3.Xsqlite3_stricmp(tls, zRes, (*ErrorCode)(unsafe.Pointer(bp+uintptr(i)*16)).FzError) { 8078 return (*ErrorCode)(unsafe.Pointer(bp + uintptr(i)*16)).Frc 8079 } 8080 } 8081 8082 return SQLITE_ERROR 8083 } 8084 8085 type ErrorCode = struct { 8086 Frc int32 8087 F__ccgo_pad1 [4]byte 8088 FzError uintptr 8089 } 8090 8091 func f5tDbAndApi(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr, ppApi uintptr) int32 { 8092 bp := tls.Alloc(72) 8093 defer tls.Free(72) 8094 8095 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 8096 var rc int32 = f5tDbPointer(tls, interp, pObj, bp+48) 8097 if rc != TCL_OK { 8098 return TCL_ERROR 8099 } else { 8100 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 8101 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 8102 8103 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+2137, -1, bp+56, uintptr(0)) 8104 if rc != SQLITE_OK { 8105 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 8106 return TCL_ERROR 8107 } 8108 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), 1, bp+64, ts+2161, uintptr(0)) 8109 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 8110 8111 if sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != SQLITE_OK { 8112 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 8113 return TCL_ERROR 8114 } 8115 8116 *(*uintptr)(unsafe.Pointer(ppDb)) = *(*uintptr)(unsafe.Pointer(bp + 48)) 8117 *(*uintptr)(unsafe.Pointer(ppApi)) = *(*uintptr)(unsafe.Pointer(bp + 64)) 8118 } 8119 8120 return TCL_OK 8121 } 8122 8123 type F5tFunction1 = struct { 8124 Finterp uintptr 8125 FpScript uintptr 8126 } 8127 8128 type F5tFunction = F5tFunction1 8129 8130 type F5tApi1 = struct { 8131 FpApi uintptr 8132 FpFts uintptr 8133 } 8134 8135 type F5tApi = F5tApi1 8136 8137 type F5tAuxData1 = struct{ FpObj uintptr } 8138 8139 type F5tAuxData = F5tAuxData1 8140 8141 func xTokenizeCb(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 8142 var p uintptr = pCtx 8143 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8144 var rc int32 8145 8146 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8147 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8148 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iStart)) 8149 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iEnd)) 8150 8151 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 8152 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8153 var _objPtr uintptr = pEval 8154 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8155 tcl.XTclFreeObj(tls, _objPtr) 8156 } 8157 } 8158 if rc == TCL_OK { 8159 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 8160 } 8161 8162 return rc 8163 } 8164 8165 func xQueryPhraseCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr) int32 { 8166 bp := tls.Alloc(88) 8167 defer tls.Free(88) 8168 8169 var p uintptr = pCtx 8170 var pEval uintptr 8171 var rc int32 8172 8173 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 8174 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 8175 libc.Xsprintf(tls, bp+8, ts+2174, libc.VaList(bp, libc.PostIncInt64(&iCmd1, 1))) 8176 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 8177 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8178 }{xF5tApi})), bp+72, uintptr(0)) 8179 8180 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8181 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8182 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 8183 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 8184 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8185 var _objPtr uintptr = pEval 8186 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8187 tcl.XTclFreeObj(tls, _objPtr) 8188 } 8189 } 8190 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 8191 8192 if rc == TCL_OK { 8193 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 8194 } 8195 8196 return rc 8197 } 8198 8199 var iCmd1 sqlite3_int64 = int64(0) 8200 8201 func xSetAuxdataDestructor(tls *libc.TLS, p uintptr) { 8202 var pData uintptr = p 8203 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8204 var _objPtr uintptr = (*F5tAuxData)(unsafe.Pointer(pData)).FpObj 8205 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8206 tcl.XTclFreeObj(tls, _objPtr) 8207 } 8208 } 8209 sqlite3.Xsqlite3_free(tls, pData) 8210 } 8211 8212 func xF5tApi(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8213 bp := tls.Alloc(684) 8214 defer tls.Free(684) 8215 8216 *(*[19]Sub)(unsafe.Pointer(bp + 32)) = [19]Sub{ 8217 {FzName: ts + 2185, FzMsg: ts + 584}, 8218 {FzName: ts + 2198, FzMsg: ts + 584}, 8219 {FzName: ts + 2208, FnArg: 1, FzMsg: ts + 2225}, 8220 {FzName: ts + 2229, FnArg: 2, FzMsg: ts + 2239}, 8221 {FzName: ts + 2251, FzMsg: ts + 584}, 8222 {FzName: ts + 2264, FnArg: 1, FzMsg: ts + 2276}, 8223 {FzName: ts + 2283, FzMsg: ts + 584}, 8224 {FzName: ts + 2294, FnArg: 1, FzMsg: ts + 2300}, 8225 {FzName: ts + 2304, FzMsg: ts + 584}, 8226 {FzName: ts + 2311, FnArg: 1, FzMsg: ts + 2225}, 8227 {FzName: ts + 2323, FnArg: 1, FzMsg: ts + 2225}, 8228 {FzName: ts + 2335, FnArg: 2, FzMsg: ts + 2348}, 8229 {FzName: ts + 2362, FnArg: 1, FzMsg: ts + 2374}, 8230 {FzName: ts + 2380, FnArg: 1, FzMsg: ts + 2392}, 8231 {FzName: ts + 2398, FnArg: 1, FzMsg: ts + 2413}, 8232 {FzName: ts + 2421, FnArg: 1, FzMsg: ts + 2392}, 8233 {FzName: ts + 2436, FnArg: 4, FzMsg: ts + 2451}, 8234 {FzName: ts + 2480, FnArg: 3, FzMsg: ts + 2501}, 8235 {}, 8236 } 8237 var rc int32 8238 *(*int32)(unsafe.Pointer(bp + 488)) = 0 8239 var p uintptr = clientData 8240 8241 if objc < 2 { 8242 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 8243 return TCL_ERROR 8244 } 8245 8246 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 8247 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32, int32(unsafe.Sizeof(Sub{})), ts+2523, 0, bp+488) 8248 if rc != TCL_OK { 8249 return rc 8250 } 8251 if (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FnArg != objc-2 { 8252 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FzMsg) 8253 return TCL_ERROR 8254 } 8255 8256 switch *(*int32)(unsafe.Pointer(bp + 488)) { 8257 case 0: 8258 { 8259 var nCol int32 8260 nCol = (*struct { 8261 f func(*libc.TLS, uintptr) int32 8262 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 8263 if rc == SQLITE_OK { 8264 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol)) 8265 } 8266 break 8267 8268 } 8269 case 1: 8270 { 8271 rc = (*struct { 8272 f func(*libc.TLS, uintptr, uintptr) int32 8273 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+496) 8274 if rc == SQLITE_OK { 8275 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 496)))) 8276 } 8277 break 8278 8279 } 8280 case 2: 8281 { 8282 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+504) != 0 { 8283 return TCL_ERROR 8284 } 8285 rc = (*struct { 8286 f func(*libc.TLS, uintptr, int32, uintptr) int32 8287 })(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) 8288 if rc == SQLITE_OK { 8289 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 512)))) 8290 } 8291 break 8292 8293 } 8294 case 3: 8295 { 8296 var zText uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+520) 8297 8298 (*F5tFunction)(unsafe.Pointer(bp + 528)).Finterp = interp 8299 (*F5tFunction)(unsafe.Pointer(bp + 528)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8300 rc = (*struct { 8301 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr) int32 8302 })(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 { 8303 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8304 }{xTokenizeCb}))) 8305 if rc == SQLITE_OK { 8306 tcl.XTcl_ResetResult(tls, interp) 8307 } 8308 return rc 8309 8310 } 8311 case 4: 8312 { 8313 var nPhrase int32 8314 nPhrase = (*struct { 8315 f func(*libc.TLS, uintptr) int32 8316 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 8317 if rc == SQLITE_OK { 8318 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPhrase)) 8319 } 8320 break 8321 8322 } 8323 case 5: 8324 { 8325 var sz int32 8326 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+544) != 0 { 8327 return TCL_ERROR 8328 } 8329 sz = (*struct { 8330 f func(*libc.TLS, uintptr, int32) int32 8331 })(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))) 8332 if rc == SQLITE_OK { 8333 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sz)) 8334 } 8335 break 8336 8337 } 8338 case 6: 8339 { 8340 rc = (*struct { 8341 f func(*libc.TLS, uintptr, uintptr) int32 8342 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInstCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+548) 8343 if rc == SQLITE_OK { 8344 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 548)))) 8345 } 8346 break 8347 8348 } 8349 case 7: 8350 { 8351 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+552) != 0 { 8352 return TCL_ERROR 8353 } 8354 rc = (*struct { 8355 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8356 })(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) 8357 if rc == SQLITE_OK { 8358 var pList uintptr = tcl.XTcl_NewObj(tls) 8359 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 556)))) 8360 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 560)))) 8361 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 564)))) 8362 tcl.XTcl_SetObjResult(tls, interp, pList) 8363 } 8364 break 8365 8366 } 8367 case 8: 8368 { 8369 var iRowid sqlite3_int64 = (*struct { 8370 f func(*libc.TLS, uintptr) sqlite3_int64 8371 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowid})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 8372 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iRowid)) 8373 break 8374 8375 } 8376 case 9: 8377 { 8378 *(*uintptr)(unsafe.Pointer(bp + 576)) = uintptr(0) 8379 *(*int32)(unsafe.Pointer(bp + 584)) = 0 8380 8381 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+568) != 0 { 8382 return TCL_ERROR 8383 } 8384 rc = (*struct { 8385 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8386 })(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) 8387 if rc == SQLITE_OK { 8388 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 576)), *(*int32)(unsafe.Pointer(bp + 584)))) 8389 } 8390 break 8391 8392 } 8393 case 10: 8394 { 8395 *(*int32)(unsafe.Pointer(bp + 592)) = 0 8396 8397 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+588) != 0 { 8398 return TCL_ERROR 8399 } 8400 rc = (*struct { 8401 f func(*libc.TLS, uintptr, int32, uintptr) int32 8402 })(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) 8403 if rc == SQLITE_OK { 8404 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 592)))) 8405 } 8406 break 8407 8408 } 8409 case 11: 8410 { 8411 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+596) != 0 { 8412 return TCL_ERROR 8413 } 8414 (*F5tFunction)(unsafe.Pointer(bp + 600)).Finterp = interp 8415 (*F5tFunction)(unsafe.Pointer(bp + 600)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8416 rc = (*struct { 8417 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8418 })(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 { 8419 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8420 }{xQueryPhraseCb}))) 8421 if rc == SQLITE_OK { 8422 tcl.XTcl_ResetResult(tls, interp) 8423 } 8424 break 8425 8426 } 8427 case 12: 8428 { 8429 var pData uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(F5tAuxData{}))) 8430 if pData == uintptr(0) { 8431 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, 0)) 8432 return TCL_ERROR 8433 } 8434 (*F5tAuxData)(unsafe.Pointer(pData)).FpObj = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 8435 (*Tcl_Obj)(unsafe.Pointer((*F5tAuxData)(unsafe.Pointer(pData)).FpObj)).FrefCount++ 8436 rc = (*struct { 8437 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8438 })(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}))) 8439 break 8440 8441 } 8442 case 13: 8443 { 8444 var pData uintptr 8445 8446 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+616) != 0 { 8447 return TCL_ERROR 8448 } 8449 pData = (*struct { 8450 f func(*libc.TLS, uintptr, int32) uintptr 8451 })(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))) 8452 if pData == uintptr(0) { 8453 tcl.XTcl_ResetResult(tls, interp) 8454 } else { 8455 tcl.XTcl_SetObjResult(tls, interp, (*F5tAuxData)(unsafe.Pointer(pData)).FpObj) 8456 if *(*int32)(unsafe.Pointer(bp + 616)) != 0 { 8457 xSetAuxdataDestructor(tls, pData) 8458 } 8459 } 8460 break 8461 8462 } 8463 8464 case 14: 8465 { 8466 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+620) != 0 { 8467 return TCL_ERROR 8468 } 8469 rc = (*struct { 8470 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8471 })(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)) 8472 break 8473 8474 } 8475 case 15: 8476 { 8477 var iVal int32 8478 8479 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+624) != 0 { 8480 return TCL_ERROR 8481 } 8482 iVal = int32((int64((*struct { 8483 f func(*libc.TLS, uintptr, int32) uintptr 8484 })(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) 8485 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iVal)) 8486 break 8487 8488 } 8489 8490 case 16: 8491 { 8492 var zColvar uintptr 8493 var zOffvar uintptr 8494 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 5*8)) 8495 8496 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+628) != 0 { 8497 return TCL_ERROR 8498 } 8499 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 8500 zOffvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 8501 8502 rc = (*struct { 8503 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8504 })(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) 8505 if rc != SQLITE_OK { 8506 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 8507 return TCL_ERROR 8508 } 8509 for ; *(*int32)(unsafe.Pointer(bp + 648)) >= 0; (*struct { 8510 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8511 })(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) { 8512 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 648))), 0) 8513 tcl.XTcl_SetVar2Ex(tls, interp, zOffvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 652))), 0) 8514 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 8515 if rc == TCL_CONTINUE { 8516 rc = TCL_OK 8517 } 8518 if rc != TCL_OK { 8519 if rc == TCL_BREAK { 8520 rc = TCL_OK 8521 } 8522 break 8523 } 8524 } 8525 8526 break 8527 8528 } 8529 8530 case 17: 8531 { 8532 var zColvar uintptr 8533 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 8534 8535 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+656) != 0 { 8536 return TCL_ERROR 8537 } 8538 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 8539 8540 rc = (*struct { 8541 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8542 })(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) 8543 if rc != SQLITE_OK { 8544 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8545 return TCL_ERROR 8546 } 8547 for ; *(*int32)(unsafe.Pointer(bp + 680)) >= 0; (*struct { 8548 f func(*libc.TLS, uintptr, uintptr, uintptr) 8549 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNextColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+664, bp+680) { 8550 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 680))), 0) 8551 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 8552 if rc == TCL_CONTINUE { 8553 rc = TCL_OK 8554 } 8555 if rc != TCL_OK { 8556 if rc == TCL_BREAK { 8557 rc = TCL_OK 8558 } 8559 break 8560 } 8561 } 8562 8563 break 8564 8565 } 8566 8567 default: 8568 break 8569 } 8570 8571 if rc != SQLITE_OK { 8572 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8573 return TCL_ERROR 8574 } 8575 8576 return TCL_OK 8577 } 8578 8579 type Sub = struct { 8580 FzName uintptr 8581 FnArg int32 8582 F__ccgo_pad1 [4]byte 8583 FzMsg uintptr 8584 } 8585 8586 func xF5tFunction(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 8587 bp := tls.Alloc(112) 8588 defer tls.Free(112) 8589 8590 var p uintptr = (*struct { 8591 f func(*libc.TLS, uintptr) uintptr 8592 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxUserData})).f(tls, pFts) 8593 var pEval uintptr 8594 var i int32 8595 var rc int32 8596 8597 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 8598 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 8599 8600 libc.Xsprintf(tls, bp+8, ts+2535, libc.VaList(bp, libc.PostIncInt64(&iCmd2, 1))) 8601 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 8602 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8603 }{xF5tApi})), bp+72, uintptr(0)) 8604 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8605 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8606 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 8607 8608 for i = 0; i < nVal; i++ { 8609 var pObj uintptr = uintptr(0) 8610 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))) { 8611 case SQLITE_TEXT: 8612 pObj = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), -1) 8613 break 8614 case SQLITE_BLOB: 8615 pObj = tcl.XTcl_NewByteArrayObj(tls, 8616 sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8617 break 8618 case SQLITE_INTEGER: 8619 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8620 break 8621 case SQLITE_FLOAT: 8622 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8623 break 8624 default: 8625 pObj = tcl.XTcl_NewObj(tls) 8626 break 8627 } 8628 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, pObj) 8629 } 8630 8631 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, TCL_GLOBAL_ONLY) 8632 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8633 var _objPtr uintptr = pEval 8634 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8635 tcl.XTclFreeObj(tls, _objPtr) 8636 } 8637 } 8638 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 8639 8640 if rc != TCL_OK { 8641 sqlite3.Xsqlite3_result_error(tls, pCtx, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp), -1) 8642 } else { 8643 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp) 8644 8645 var zType uintptr = func() uintptr { 8646 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 8647 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 8648 } 8649 return ts + 584 8650 }() 8651 var c uint8 = *(*uint8)(unsafe.Pointer(zType)) 8652 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 8653 var data uintptr = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+88) 8654 sqlite3.Xsqlite3_result_blob(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 8655 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 8656 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pVar, bp+88) 8657 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(bp + 88))) 8658 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 8659 tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+96) 8660 sqlite3.Xsqlite3_result_double(tls, pCtx, *(*float64)(unsafe.Pointer(bp + 96))) 8661 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 8662 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+104) 8663 sqlite3.Xsqlite3_result_int64(tls, pCtx, *(*Tcl_WideInt)(unsafe.Pointer(bp + 104))) 8664 } else { 8665 var data uintptr = tcl.XTcl_GetStringFromObj(tls, pVar, bp+88) 8666 sqlite3.Xsqlite3_result_text(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 8667 } 8668 } 8669 } 8670 8671 var iCmd2 sqlite3_int64 = int64(0) 8672 8673 func xF5tDestroy(tls *libc.TLS, pCtx uintptr) { 8674 var p uintptr = pCtx 8675 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8676 var _objPtr uintptr = (*F5tFunction)(unsafe.Pointer(p)).FpScript 8677 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8678 tcl.XTclFreeObj(tls, _objPtr) 8679 } 8680 } 8681 tcl.XTcl_Free(tls, p) 8682 } 8683 8684 func f5tCreateFunction(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8685 bp := tls.Alloc(40) 8686 defer tls.Free(40) 8687 8688 var zName uintptr 8689 var pScript uintptr 8690 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 8691 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 8692 var pCtx uintptr = uintptr(0) 8693 var rc int32 8694 8695 if objc != 4 { 8696 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8697 return TCL_ERROR 8698 } 8699 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, bp+32) != 0 { 8700 return TCL_ERROR 8701 } 8702 8703 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 8704 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8705 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tFunction{}))) 8706 (*F5tFunction)(unsafe.Pointer(pCtx)).Finterp = interp 8707 (*F5tFunction)(unsafe.Pointer(pCtx)).FpScript = pScript 8708 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8709 8710 rc = (*struct { 8711 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 8712 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FxCreateFunction})).f(tls, 8713 *(*uintptr)(unsafe.Pointer(bp + 32)), zName, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 8714 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 8715 }{xF5tFunction})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{xF5tDestroy}))) 8716 if rc != SQLITE_OK { 8717 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 24))), 0)) 8718 return TCL_ERROR 8719 } 8720 8721 return TCL_OK 8722 } 8723 8724 type F5tTokenizeCtx1 = struct { 8725 FpRet uintptr 8726 FbSubst int32 8727 F__ccgo_pad1 [4]byte 8728 FzInput uintptr 8729 } 8730 8731 type F5tTokenizeCtx = F5tTokenizeCtx1 8732 8733 func xTokenizeCb2(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 8734 var p uintptr = pCtx 8735 if (*F5tTokenizeCtx)(unsafe.Pointer(p)).FbSubst != 0 { 8736 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8737 tcl.XTcl_ListObjAppendElement(tls, 8738 uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, (*F5tTokenizeCtx)(unsafe.Pointer(p)).FzInput+uintptr(iStart), iEnd-iStart)) 8739 } else { 8740 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8741 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iStart)) 8742 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iEnd)) 8743 } 8744 return SQLITE_OK 8745 } 8746 8747 func f5tTokenize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8748 bp := tls.Alloc(200) 8749 defer tls.Free(200) 8750 8751 var zText uintptr 8752 8753 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 8754 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 8755 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 8756 8757 var pRet uintptr = uintptr(0) 8758 8759 var rc int32 8760 8761 if objc != 4 && objc != 5 { 8762 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2596) 8763 return TCL_ERROR 8764 } 8765 if objc == 5 { 8766 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 8767 if libc.Xstrcmp(tls, ts+2618, zOpt) != 0 { 8768 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2625, zOpt, 0)) 8769 return TCL_ERROR 8770 } 8771 } 8772 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+96, bp+104) != 0 { 8773 return TCL_ERROR 8774 } 8775 if tcl.XTcl_SplitList(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))), bp+112, bp+120) != 0 { 8776 return TCL_ERROR 8777 } 8778 if *(*int32)(unsafe.Pointer(bp + 112)) == 0 { 8779 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2647, 0)) 8780 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8781 return TCL_ERROR 8782 } 8783 zText = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+128) 8784 8785 rc = (*struct { 8786 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 8787 })(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) 8788 if rc != SQLITE_OK { 8789 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2647, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 120)))), 0)) 8790 return TCL_ERROR 8791 } 8792 8793 rc = (*struct { 8794 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8795 })(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) 8796 if rc != SQLITE_OK { 8797 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+2667, 0)) 8798 return TCL_ERROR 8799 } 8800 8801 pRet = tcl.XTcl_NewObj(tls) 8802 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 8803 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FbSubst = libc.Bool32(objc == 5) 8804 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FpRet = pRet 8805 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FzInput = zText 8806 rc = (*struct { 8807 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8808 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxTokenize})).f(tls, 8809 *(*uintptr)(unsafe.Pointer(bp + 168)), bp+176, FTS5_TOKENIZE_DOCUMENT, zText, *(*int32)(unsafe.Pointer(bp + 128)), *(*uintptr)(unsafe.Pointer(&struct { 8810 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8811 }{xTokenizeCb2}))) 8812 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxDelete})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 8813 if rc != SQLITE_OK { 8814 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+80, ts+2696, 0)) 8815 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8816 var _objPtr uintptr = pRet 8817 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8818 tcl.XTclFreeObj(tls, _objPtr) 8819 } 8820 } 8821 return TCL_ERROR 8822 } 8823 8824 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8825 tcl.XTcl_SetObjResult(tls, interp, pRet) 8826 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 8827 var _objPtr uintptr = pRet 8828 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8829 tcl.XTclFreeObj(tls, _objPtr) 8830 } 8831 } 8832 return TCL_OK 8833 } 8834 8835 type F5tTokenizerContext1 = struct { 8836 FpCtx uintptr 8837 FxToken uintptr 8838 } 8839 8840 type F5tTokenizerContext = F5tTokenizerContext1 8841 type F5tTokenizerModule1 = struct { 8842 Finterp uintptr 8843 FpScript uintptr 8844 FpContext uintptr 8845 } 8846 8847 type F5tTokenizerModule = F5tTokenizerModule1 8848 type F5tTokenizerInstance1 = struct { 8849 Finterp uintptr 8850 FpScript uintptr 8851 FpContext uintptr 8852 } 8853 8854 type F5tTokenizerInstance = F5tTokenizerInstance1 8855 8856 func f5tTokenizerCreate(tls *libc.TLS, pCtx uintptr, azArg uintptr, nArg int32, ppOut uintptr) int32 { 8857 var pMod uintptr = pCtx 8858 var pEval uintptr 8859 var rc int32 = TCL_OK 8860 var i int32 8861 8862 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript) 8863 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8864 for i = 0; rc == TCL_OK && i < nArg; i++ { 8865 var pObj uintptr = tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)), -1) 8866 rc = tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, pObj) 8867 } 8868 8869 if rc == TCL_OK { 8870 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, TCL_GLOBAL_ONLY) 8871 } 8872 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8873 var _objPtr uintptr = pEval 8874 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8875 tcl.XTclFreeObj(tls, _objPtr) 8876 } 8877 } 8878 8879 if rc == TCL_OK { 8880 var pInst uintptr 8881 pInst = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerInstance{}))) 8882 libc.Xmemset(tls, pInst, 0, uint64(unsafe.Sizeof(F5tTokenizerInstance{}))) 8883 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp 8884 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript = tcl.XTcl_GetObjResult(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp) 8885 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext 8886 (*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript)).FrefCount++ 8887 *(*uintptr)(unsafe.Pointer(ppOut)) = pInst 8888 } 8889 8890 return rc 8891 } 8892 8893 func f5tTokenizerDelete(tls *libc.TLS, p uintptr) { 8894 var pInst uintptr = p 8895 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8896 var _objPtr uintptr = (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript 8897 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8898 tcl.XTclFreeObj(tls, _objPtr) 8899 } 8900 } 8901 tcl.XTcl_Free(tls, pInst) 8902 } 8903 8904 func f5tTokenizerTokenize(tls *libc.TLS, p uintptr, pCtx uintptr, flags int32, pText uintptr, nText int32, xToken uintptr) int32 { 8905 var pInst uintptr = p 8906 var pOldCtx uintptr 8907 var xOldToken uintptr 8908 var pEval uintptr 8909 var rc int32 8910 var zFlags uintptr 8911 8912 pOldCtx = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx 8913 xOldToken = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken 8914 8915 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pCtx 8916 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xToken 8917 8918 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript) 8919 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8920 switch flags { 8921 case FTS5_TOKENIZE_DOCUMENT: 8922 zFlags = ts + 2727 8923 break 8924 case FTS5_TOKENIZE_AUX: 8925 zFlags = ts + 2736 8926 break 8927 case FTS5_TOKENIZE_QUERY: 8928 zFlags = ts + 2740 8929 break 8930 case FTS5_TOKENIZE_PREFIX | FTS5_TOKENIZE_QUERY: 8931 zFlags = ts + 2746 8932 break 8933 default: 8934 zFlags = ts + 2758 8935 break 8936 } 8937 8938 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zFlags, -1)) 8939 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, pText, nText)) 8940 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, TCL_GLOBAL_ONLY) 8941 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8942 var _objPtr uintptr = pEval 8943 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 8944 tcl.XTclFreeObj(tls, _objPtr) 8945 } 8946 } 8947 8948 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pOldCtx 8949 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xOldToken 8950 return rc 8951 } 8952 8953 func f5tTokenizerReturn(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8954 bp := tls.Alloc(32) 8955 defer tls.Free(32) 8956 8957 var p uintptr 8958 8959 var tflags int32 8960 var zToken uintptr 8961 var rc int32 8962 8963 var zArg uintptr 8964 p = clientData 8965 tflags = 0 8966 8967 if !(objc == 5) { 8968 goto __1 8969 } 8970 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 8971 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) { 8972 goto __3 8973 } 8974 tflags = tflags | FTS5_TOKEN_COLOCATED 8975 goto __4 8976 __3: 8977 goto usage 8978 __4: 8979 ; 8980 goto __2 8981 __1: 8982 if !(objc != 4) { 8983 goto __5 8984 } 8985 goto usage 8986 __5: 8987 ; 8988 __2: 8989 ; 8990 zToken = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+20) 8991 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+24) != 0 || 8992 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+28) != 0) { 8993 goto __6 8994 } 8995 return TCL_ERROR 8996 __6: 8997 ; 8998 if !((*F5tTokenizerContext)(unsafe.Pointer(p)).FxToken == uintptr(0)) { 8999 goto __7 9000 } 9001 tcl.XTcl_AppendResult(tls, interp, 9002 libc.VaList(bp, ts+2777, 0)) 9003 return TCL_ERROR 9004 __7: 9005 ; 9006 rc = (*struct { 9007 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 9008 })(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))) 9009 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 9010 if rc == SQLITE_OK { 9011 return TCL_OK 9012 } 9013 return TCL_ERROR 9014 9015 usage: 9016 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2835) 9017 return TCL_ERROR 9018 } 9019 9020 func f5tDelTokenizer(tls *libc.TLS, pCtx uintptr) { 9021 var pMod uintptr = pCtx 9022 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 9023 var _objPtr uintptr = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript 9024 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 9025 tcl.XTclFreeObj(tls, _objPtr) 9026 } 9027 } 9028 tcl.XTcl_Free(tls, pMod) 9029 } 9030 9031 func f5tCreateTokenizer(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 9032 bp := tls.Alloc(56) 9033 defer tls.Free(56) 9034 9035 var pContext uintptr = clientData 9036 9037 var zName uintptr 9038 var pScript uintptr 9039 9040 var pMod uintptr 9041 var rc int32 9042 9043 if objc != 4 { 9044 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 9045 return TCL_ERROR 9046 } 9047 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, bp+24) != 0 { 9048 return TCL_ERROR 9049 } 9050 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 9051 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 9052 9053 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxCreate = *(*uintptr)(unsafe.Pointer(&struct { 9054 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9055 }{f5tTokenizerCreate})) 9056 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxTokenize = *(*uintptr)(unsafe.Pointer(&struct { 9057 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 9058 }{f5tTokenizerTokenize})) 9059 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxDelete = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tTokenizerDelete})) 9060 9061 pMod = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerModule{}))) 9062 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp = interp 9063 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript = pScript 9064 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext = pContext 9065 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 9066 rc = (*struct { 9067 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr, uintptr) int32 9068 })(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}))) 9069 if rc != SQLITE_OK { 9070 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2863, 0)) 9071 return TCL_ERROR 9072 } 9073 9074 return TCL_OK 9075 } 9076 9077 func xF5tFree(tls *libc.TLS, clientData ClientData) { 9078 tcl.XTcl_Free(tls, clientData) 9079 } 9080 9081 func f5tMayBeCorrupt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 9082 return TCL_OK 9083 } 9084 9085 func f5t_fts5HashKey(tls *libc.TLS, nSlot int32, p uintptr, n int32) uint32 { 9086 var i int32 9087 var h uint32 = uint32(13) 9088 for i = n - 1; i >= 0; i-- { 9089 h = h<<3 ^ h ^ uint32(*(*uint8)(unsafe.Pointer(p + uintptr(i)))) 9090 } 9091 return h % uint32(nSlot) 9092 } 9093 9094 func f5tTokenHash(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 9095 bp := tls.Alloc(8) 9096 defer tls.Free(8) 9097 9098 var z uintptr 9099 9100 var iVal uint32 9101 9102 if objc != 3 { 9103 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2900) 9104 return TCL_ERROR 9105 } 9106 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 9107 return TCL_ERROR 9108 } 9109 z = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 9110 9111 iVal = f5t_fts5HashKey(tls, *(*int32)(unsafe.Pointer(bp)), z, *(*int32)(unsafe.Pointer(bp + 4))) 9112 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(iVal))) 9113 return TCL_OK 9114 } 9115 9116 func f5tRegisterMatchinfo(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 9117 bp := tls.Alloc(8) 9118 defer tls.Free(8) 9119 9120 var rc int32 9121 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9122 9123 if objc != 2 { 9124 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 9125 return TCL_ERROR 9126 } 9127 if f5tDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 9128 return TCL_ERROR 9129 } 9130 9131 rc = sqlite3Fts5TestRegisterMatchinfo(tls, *(*uintptr)(unsafe.Pointer(bp))) 9132 if rc != SQLITE_OK { 9133 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 9134 return TCL_ERROR 9135 } 9136 return TCL_OK 9137 } 9138 9139 func f5tRegisterTok(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 9140 bp := tls.Alloc(16) 9141 defer tls.Free(16) 9142 9143 var rc int32 9144 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9145 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 9146 9147 if objc != 2 { 9148 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 9149 return TCL_ERROR 9150 } 9151 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 9152 return TCL_ERROR 9153 } 9154 9155 rc = sqlite3Fts5TestRegisterTok(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 9156 if rc != SQLITE_OK { 9157 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 9158 return TCL_ERROR 9159 } 9160 return TCL_OK 9161 } 9162 9163 func Fts5tcl_Init(tls *libc.TLS, interp uintptr) int32 { 9164 var i int32 9165 var pContext uintptr 9166 9167 pContext = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerContext{}))) 9168 libc.Xmemset(tls, pContext, 0, uint64(unsafe.Sizeof(F5tTokenizerContext{}))) 9169 9170 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd))/uint64(unsafe.Sizeof(struct { 9171 FzName uintptr 9172 FxProc uintptr 9173 FbTokenizeCtx int32 9174 F__ccgo_pad1 [4]byte 9175 }{})); i++ { 9176 var p uintptr = uintptr(unsafe.Pointer(&aCmd)) + uintptr(i)*24 9177 var pCtx uintptr = uintptr(0) 9178 if (*struct { 9179 FzName uintptr 9180 FxProc uintptr 9181 FbTokenizeCtx int32 9182 F__ccgo_pad1 [4]byte 9183 })(unsafe.Pointer(p)).FbTokenizeCtx != 0 { 9184 pCtx = pContext 9185 } 9186 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 9187 FzName uintptr 9188 FxProc uintptr 9189 FbTokenizeCtx int32 9190 F__ccgo_pad1 [4]byte 9191 })(unsafe.Pointer(p)).FzName, (*struct { 9192 FzName uintptr 9193 FxProc uintptr 9194 FbTokenizeCtx int32 9195 F__ccgo_pad1 [4]byte 9196 })(unsafe.Pointer(p)).FxProc, pCtx, func() uintptr { 9197 if i != 0 { 9198 return uintptr(0) 9199 } 9200 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{xF5tFree})) 9201 }()) 9202 } 9203 9204 return TCL_OK 9205 } 9206 9207 var aCmd = [8]struct { 9208 FzName uintptr 9209 FxProc uintptr 9210 FbTokenizeCtx int32 9211 F__ccgo_pad1 [4]byte 9212 }{ 9213 {FzName: ts + 2912, FxProc: 0, FbTokenizeCtx: 1}, 9214 {FzName: ts + 2942, FxProc: 0, FbTokenizeCtx: 1}, 9215 {FzName: ts + 2961, FxProc: 0}, 9216 {FzName: ts + 2983, FxProc: 0}, 9217 {FzName: ts + 3012, FxProc: 0}, 9218 {FzName: ts + 3040, FxProc: 0}, 9219 {FzName: ts + 3064, FxProc: 0}, 9220 {FzName: ts + 3096, FxProc: 0}, 9221 } 9222 9223 type Fts5MatchinfoCtx1 = struct { 9224 FnCol int32 9225 FnPhrase int32 9226 FzArg uintptr 9227 FnRet int32 9228 F__ccgo_pad1 [4]byte 9229 FaRet uintptr 9230 } 9231 9232 type Fts5MatchinfoCtx = Fts5MatchinfoCtx1 9233 9234 type u32 = uint32 9235 9236 func fts5_api_from_db(tls *libc.TLS, db uintptr, ppApi uintptr) int32 { 9237 bp := tls.Alloc(8) 9238 defer tls.Free(8) 9239 9240 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9241 var rc int32 9242 9243 *(*uintptr)(unsafe.Pointer(ppApi)) = uintptr(0) 9244 rc = sqlite3.Xsqlite3_prepare(tls, db, ts+2137, -1, bp, uintptr(0)) 9245 if rc == SQLITE_OK { 9246 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, ppApi, ts+2161, uintptr(0)) 9247 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) 9248 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 9249 } 9250 9251 return rc 9252 } 9253 9254 func fts5MatchinfoFlagsize(tls *libc.TLS, nCol int32, nPhrase int32, f uint8) int32 { 9255 var ret int32 = -1 9256 switch int32(f) { 9257 case 'p': 9258 ret = 1 9259 break 9260 case 'c': 9261 ret = 1 9262 break 9263 case 'x': 9264 ret = 3 * nCol * nPhrase 9265 break 9266 case 'y': 9267 ret = nCol * nPhrase 9268 break 9269 case 'b': 9270 ret = (nCol + 31) / 32 * nPhrase 9271 break 9272 case 'n': 9273 ret = 1 9274 break 9275 case 'a': 9276 ret = nCol 9277 break 9278 case 'l': 9279 ret = nCol 9280 break 9281 case 's': 9282 ret = nCol 9283 break 9284 } 9285 return ret 9286 } 9287 9288 func fts5MatchinfoIter(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, x uintptr) int32 { 9289 var i int32 9290 var n int32 = 0 9291 var rc int32 = SQLITE_OK 9292 var f uint8 9293 for i = 0; libc.AssignUint8(&f, *(*uint8)(unsafe.Pointer((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg + uintptr(i)))) != 0; i++ { 9294 rc = (*struct { 9295 f func(*libc.TLS, uintptr, uintptr, uintptr, uint8, uintptr) int32 9296 })(unsafe.Pointer(&struct{ uintptr }{x})).f(tls, pApi, pFts, p, f, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet+uintptr(n)*4) 9297 if rc != SQLITE_OK { 9298 break 9299 } 9300 n = n + fts5MatchinfoFlagsize(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase, f) 9301 } 9302 return rc 9303 } 9304 9305 func fts5MatchinfoXCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pUserData uintptr) int32 { 9306 bp := tls.Alloc(24) 9307 defer tls.Free(24) 9308 9309 var aOut uintptr = pUserData 9310 var iPrev int32 = -1 9311 9312 for (*struct { 9313 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9314 })(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 { 9315 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 9316 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp, bp+16, bp+20) { 9317 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+1)*4))++ 9318 if *(*int32)(unsafe.Pointer(bp + 16)) != iPrev { 9319 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+2)*4))++ 9320 } 9321 iPrev = *(*int32)(unsafe.Pointer(bp + 16)) 9322 } 9323 9324 return SQLITE_OK 9325 } 9326 9327 func fts5MatchinfoGlobalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f uint8, aOut uintptr) int32 { 9328 bp := tls.Alloc(24) 9329 defer tls.Free(24) 9330 9331 var rc int32 = SQLITE_OK 9332 switch int32(f) { 9333 case 'p': 9334 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase) 9335 break 9336 9337 case 'c': 9338 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol) 9339 break 9340 9341 case 'x': 9342 { 9343 var i int32 9344 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase && rc == SQLITE_OK; i++ { 9345 var pPtr uintptr = aOut + uintptr(i*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*3)*4 9346 rc = (*struct { 9347 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 9348 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxQueryPhrase})).f(tls, pFts, i, pPtr, *(*uintptr)(unsafe.Pointer(&struct { 9349 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 9350 }{fts5MatchinfoXCb}))) 9351 } 9352 break 9353 9354 } 9355 9356 case 'n': 9357 { 9358 rc = (*struct { 9359 f func(*libc.TLS, uintptr, uintptr) int32 9360 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp) 9361 *(*u32)(unsafe.Pointer(aOut)) = u32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 9362 break 9363 9364 } 9365 9366 case 'a': 9367 { 9368 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = int64(0) 9369 rc = (*struct { 9370 f func(*libc.TLS, uintptr, uintptr) int32 9371 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp+8) 9372 if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 9373 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 9374 } else { 9375 var i int32 9376 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 9377 rc = (*struct { 9378 f func(*libc.TLS, uintptr, int32, uintptr) int32 9379 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnTotalSize})).f(tls, pFts, i, bp+16) 9380 if rc == SQLITE_OK { 9381 *(*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)))) 9382 } 9383 } 9384 } 9385 break 9386 9387 } 9388 9389 } 9390 return rc 9391 } 9392 9393 func fts5MatchinfoLocalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f uint8, aOut uintptr) int32 { 9394 bp := tls.Alloc(80) 9395 defer tls.Free(80) 9396 9397 var i int32 9398 var rc int32 = SQLITE_OK 9399 9400 switch int32(f) { 9401 case 'b': 9402 { 9403 var iPhrase int32 9404 var nInt int32 = ((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol + 31) / 32 * (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase 9405 for i = 0; i < nInt; i++ { 9406 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(0) 9407 } 9408 9409 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 9410 for (*struct { 9411 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 9412 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirstColumn})).f(tls, pFts, iPhrase, bp, bp+16); *(*int32)(unsafe.Pointer(bp + 16)) >= 0; (*struct { 9413 f func(*libc.TLS, uintptr, uintptr, uintptr) 9414 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNextColumn})).f(tls, pFts, bp, bp+16) { 9415 *(*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) 9416 } 9417 } 9418 9419 break 9420 9421 } 9422 9423 case 'x': 9424 fallthrough 9425 case 'y': 9426 { 9427 var nMul int32 = func() int32 { 9428 if int32(f) == 'x' { 9429 return 3 9430 } 9431 return 1 9432 }() 9433 var iPhrase int32 9434 9435 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; i++ { 9436 *(*u32)(unsafe.Pointer(aOut + uintptr(i*nMul)*4)) = u32(0) 9437 } 9438 9439 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 9440 for (*struct { 9441 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9442 })(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 { 9443 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 9444 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp+24, bp+40, bp+44) { 9445 *(*u32)(unsafe.Pointer(aOut + uintptr(nMul*(*(*int32)(unsafe.Pointer(bp + 40))+iPhrase*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol))*4))++ 9446 } 9447 } 9448 9449 break 9450 9451 } 9452 9453 case 'l': 9454 { 9455 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 9456 rc = (*struct { 9457 f func(*libc.TLS, uintptr, int32, uintptr) int32 9458 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnSize})).f(tls, pFts, i, bp+48) 9459 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 48))) 9460 } 9461 break 9462 9463 } 9464 9465 case 's': 9466 { 9467 libc.Xmemset(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol)) 9468 9469 rc = (*struct { 9470 f func(*libc.TLS, uintptr, uintptr) int32 9471 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInstCount})).f(tls, pFts, bp+52) 9472 for i = 0; rc == SQLITE_OK && i < *(*int32)(unsafe.Pointer(bp + 52)); i++ { 9473 *(*int32)(unsafe.Pointer(bp + 60)) = 0 9474 var iNextPhrase int32 9475 var iNextOff int32 9476 var nSeq u32 = u32(1) 9477 var j int32 9478 9479 rc = (*struct { 9480 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9481 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, i, bp+56, bp+60, bp+64) 9482 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 56)) + 1 9483 iNextOff = *(*int32)(unsafe.Pointer(bp + 64)) + (*struct { 9484 f func(*libc.TLS, uintptr, int32) int32 9485 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, 0) 9486 for j = i + 1; rc == SQLITE_OK && j < *(*int32)(unsafe.Pointer(bp + 52)); j++ { 9487 rc = (*struct { 9488 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9489 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, j, bp+68, bp+72, bp+76) 9490 if *(*int32)(unsafe.Pointer(bp + 72)) != *(*int32)(unsafe.Pointer(bp + 60)) || *(*int32)(unsafe.Pointer(bp + 76)) > iNextOff { 9491 break 9492 } 9493 if *(*int32)(unsafe.Pointer(bp + 68)) == iNextPhrase && *(*int32)(unsafe.Pointer(bp + 76)) == iNextOff { 9494 nSeq++ 9495 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 68)) + 1 9496 iNextOff = *(*int32)(unsafe.Pointer(bp + 76)) + (*struct { 9497 f func(*libc.TLS, uintptr, int32) int32 9498 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, *(*int32)(unsafe.Pointer(bp + 68))) 9499 } 9500 } 9501 9502 if nSeq > *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) { 9503 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) = nSeq 9504 } 9505 } 9506 9507 break 9508 9509 } 9510 } 9511 return rc 9512 } 9513 9514 func fts5MatchinfoNew(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, zArg uintptr) uintptr { 9515 bp := tls.Alloc(8) 9516 defer tls.Free(8) 9517 9518 var p uintptr 9519 var nCol int32 9520 var nPhrase int32 9521 var i int32 9522 var nInt int32 9523 var nByte sqlite3_int64 9524 var rc int32 9525 9526 nCol = (*struct { 9527 f func(*libc.TLS, uintptr) int32 9528 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnCount})).f(tls, pFts) 9529 nPhrase = (*struct { 9530 f func(*libc.TLS, uintptr) int32 9531 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseCount})).f(tls, pFts) 9532 9533 nInt = 0 9534 for i = 0; *(*uint8)(unsafe.Pointer(zArg + uintptr(i))) != 0; i++ { 9535 var n int32 = fts5MatchinfoFlagsize(tls, nCol, nPhrase, *(*uint8)(unsafe.Pointer(zArg + uintptr(i)))) 9536 if n < 0 { 9537 var zErr uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+3131, libc.VaList(bp, int32(*(*uint8)(unsafe.Pointer(zArg + uintptr(i)))))) 9538 sqlite3.Xsqlite3_result_error(tls, pCtx, zErr, -1) 9539 sqlite3.Xsqlite3_free(tls, zErr) 9540 return uintptr(0) 9541 } 9542 nInt = nInt + n 9543 } 9544 9545 nByte = sqlite3_int64(uint64(unsafe.Sizeof(Fts5MatchinfoCtx{})) + 9546 uint64(unsafe.Sizeof(u32(0)))*uint64(nInt) + 9547 uint64(i+1)) 9548 p = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 9549 if p == uintptr(0) { 9550 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 9551 return uintptr(0) 9552 } 9553 libc.Xmemset(tls, p, 0, uint64(nByte)) 9554 9555 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol = nCol 9556 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase = nPhrase 9557 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet = p + 1*32 9558 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet = nInt 9559 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg = (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet + uintptr(nInt)*4 9560 libc.Xmemcpy(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg, zArg, uint64(i)) 9561 9562 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 9563 f func(*libc.TLS, uintptr, uintptr, uintptr, uint8, uintptr) int32 9564 }{fts5MatchinfoGlobalCb}))) 9565 if rc != SQLITE_OK { 9566 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 9567 sqlite3.Xsqlite3_free(tls, p) 9568 p = uintptr(0) 9569 } 9570 9571 return p 9572 } 9573 9574 func fts5MatchinfoFunc(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 9575 var zArg uintptr 9576 var p uintptr 9577 var rc int32 = SQLITE_OK 9578 9579 if nVal > 0 { 9580 zArg = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9581 } else { 9582 zArg = ts + 3163 9583 } 9584 9585 p = (*struct { 9586 f func(*libc.TLS, uintptr, int32) uintptr 9587 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxGetAuxdata})).f(tls, pFts, 0) 9588 if p == uintptr(0) || sqlite3.Xsqlite3_stricmp(tls, zArg, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg) != 0 { 9589 p = fts5MatchinfoNew(tls, pApi, pFts, pCtx, zArg) 9590 if p == uintptr(0) { 9591 rc = SQLITE_NOMEM 9592 } else { 9593 rc = (*struct { 9594 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 9595 })(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}))) 9596 } 9597 } 9598 9599 if rc == SQLITE_OK { 9600 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 9601 f func(*libc.TLS, uintptr, uintptr, uintptr, uint8, uintptr) int32 9602 }{fts5MatchinfoLocalCb}))) 9603 } 9604 if rc != SQLITE_OK { 9605 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 9606 } else { 9607 var nByte int32 = int32(uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet) * uint64(unsafe.Sizeof(u32(0)))) 9608 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet, nByte, libc.UintptrFromInt32(-1)) 9609 } 9610 } 9611 9612 func sqlite3Fts5TestRegisterMatchinfo(tls *libc.TLS, db uintptr) int32 { 9613 bp := tls.Alloc(8) 9614 defer tls.Free(8) 9615 9616 var rc int32 9617 9618 rc = fts5_api_from_db(tls, db, bp) 9619 if rc != SQLITE_OK { 9620 return rc 9621 } 9622 9623 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) || (*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FiVersion < 2 { 9624 return SQLITE_ERROR 9625 } 9626 9627 rc = (*struct { 9628 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 9629 })(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 { 9630 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 9631 }{fts5MatchinfoFunc})), uintptr(0)) 9632 9633 return rc 9634 } 9635 9636 type Fts5tokTable1 = struct { 9637 Fbase sqlite3_vtab 9638 Ftok fts5_tokenizer 9639 FpTok uintptr 9640 } 9641 9642 type Fts5tokTable = Fts5tokTable1 9643 type Fts5tokCursor1 = struct { 9644 Fbase sqlite3_vtab_cursor 9645 FiRowid int32 9646 F__ccgo_pad1 [4]byte 9647 FzInput uintptr 9648 FnRow int32 9649 F__ccgo_pad2 [4]byte 9650 FaRow uintptr 9651 } 9652 9653 type Fts5tokCursor = Fts5tokCursor1 9654 type Fts5tokRow1 = struct { 9655 FzToken uintptr 9656 FiStart int32 9657 FiEnd int32 9658 FiPos int32 9659 F__ccgo_pad1 [4]byte 9660 } 9661 9662 type Fts5tokRow = Fts5tokRow1 9663 9664 func fts5tokDequote(tls *libc.TLS, z uintptr) { 9665 var q uint8 = *(*uint8)(unsafe.Pointer(z)) 9666 9667 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 9668 var iIn int32 = 1 9669 var iOut int32 = 0 9670 if int32(q) == '[' { 9671 q = uint8(']') 9672 } 9673 9674 for *(*uint8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 9675 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 9676 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 9677 iIn++ 9678 break 9679 } else { 9680 iIn = iIn + 2 9681 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 9682 } 9683 } else { 9684 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 9685 } 9686 } 9687 9688 *(*uint8)(unsafe.Pointer(z + uintptr(iOut))) = uint8(0) 9689 } 9690 } 9691 9692 func fts5tokDequoteArray(tls *libc.TLS, argc int32, argv uintptr, pazDequote uintptr) int32 { 9693 var rc int32 = SQLITE_OK 9694 if argc == 0 { 9695 *(*uintptr)(unsafe.Pointer(pazDequote)) = uintptr(0) 9696 } else { 9697 var i int32 9698 var nByte int32 = 0 9699 var azDequote uintptr 9700 9701 for i = 0; i < argc; i++ { 9702 nByte = nByte + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))+uint64(1)) 9703 } 9704 9705 *(*uintptr)(unsafe.Pointer(pazDequote)) = libc.AssignUintptr(&azDequote, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(argc)+uint64(nByte))) 9706 if azDequote == uintptr(0) { 9707 rc = SQLITE_NOMEM 9708 } else { 9709 var pSpace uintptr = azDequote + uintptr(argc)*8 9710 for i = 0; i < argc; i++ { 9711 var n int32 = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 9712 *(*uintptr)(unsafe.Pointer(azDequote + uintptr(i)*8)) = pSpace 9713 libc.Xmemcpy(tls, pSpace, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), uint64(n+1)) 9714 fts5tokDequote(tls, pSpace) 9715 pSpace += uintptr(n + 1) 9716 } 9717 } 9718 } 9719 9720 return rc 9721 } 9722 9723 func fts5tokConnectMethod(tls *libc.TLS, db uintptr, pCtx uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 9724 bp := tls.Alloc(16) 9725 defer tls.Free(16) 9726 9727 var pApi uintptr = pCtx 9728 var pTab uintptr = uintptr(0) 9729 var rc int32 9730 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9731 var nDequote int32 = 0 9732 9733 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 9734 ts+3177) 9735 9736 if rc == SQLITE_OK { 9737 nDequote = argc - 3 9738 rc = fts5tokDequoteArray(tls, nDequote, argv+3*8, bp) 9739 } 9740 9741 if rc == SQLITE_OK { 9742 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokTable{}))) 9743 if pTab == uintptr(0) { 9744 rc = SQLITE_NOMEM 9745 } else { 9746 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(Fts5tokTable{}))) 9747 } 9748 } 9749 9750 if rc == SQLITE_OK { 9751 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 9752 var zModule uintptr = uintptr(0) 9753 if nDequote > 0 { 9754 zModule = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) 9755 } 9756 9757 rc = (*struct { 9758 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 9759 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(pApi)).FxFindTokenizer})).f(tls, pApi, zModule, bp+8, pTab+24) 9760 if rc == SQLITE_OK { 9761 var azArg uintptr = func() uintptr { 9762 if nDequote > 1 { 9763 return *(*uintptr)(unsafe.Pointer(bp)) + 1*8 9764 } 9765 return uintptr(0) 9766 }() 9767 var nArg int32 9768 if nDequote > 0 { 9769 nArg = nDequote - 1 9770 } else { 9771 nArg = 0 9772 } 9773 rc = (*struct { 9774 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9775 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), azArg, nArg, pTab+48) 9776 } 9777 } 9778 9779 if rc != SQLITE_OK { 9780 sqlite3.Xsqlite3_free(tls, pTab) 9781 pTab = uintptr(0) 9782 } 9783 9784 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 9785 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 9786 return rc 9787 } 9788 9789 func fts5tokDisconnectMethod(tls *libc.TLS, pVtab uintptr) int32 { 9790 var pTab uintptr = pVtab 9791 if (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok != 0 { 9792 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxDelete})).f(tls, (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok) 9793 } 9794 sqlite3.Xsqlite3_free(tls, pTab) 9795 return SQLITE_OK 9796 } 9797 9798 func fts5tokBestIndexMethod(tls *libc.TLS, pVTab uintptr, pInfo uintptr) int32 { 9799 var i int32 9800 9801 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FnConstraint; i++ { 9802 if (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 && 9803 (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).FiColumn == 0 && 9804 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 9805 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 1 9806 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 9807 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 9808 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FestimatedCost = float64(1) 9809 return SQLITE_OK 9810 } 9811 } 9812 9813 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 0 9814 9815 return SQLITE_OK 9816 } 9817 9818 func fts5tokOpenMethod(tls *libc.TLS, pVTab uintptr, ppCsr uintptr) int32 { 9819 var pCsr uintptr 9820 9821 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokCursor{}))) 9822 if pCsr == uintptr(0) { 9823 return SQLITE_NOMEM 9824 } 9825 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(Fts5tokCursor{}))) 9826 9827 *(*uintptr)(unsafe.Pointer(ppCsr)) = pCsr 9828 return SQLITE_OK 9829 } 9830 9831 func fts5tokResetCursor(tls *libc.TLS, pCsr uintptr) { 9832 var i int32 9833 for i = 0; i < (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow; i++ { 9834 sqlite3.Xsqlite3_free(tls, (*Fts5tokRow)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow+uintptr(i)*24)).FzToken) 9835 } 9836 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput) 9837 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow) 9838 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = uintptr(0) 9839 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = uintptr(0) 9840 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow = 0 9841 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid = 0 9842 } 9843 9844 func fts5tokCloseMethod(tls *libc.TLS, pCursor uintptr) int32 { 9845 var pCsr uintptr = pCursor 9846 fts5tokResetCursor(tls, pCsr) 9847 sqlite3.Xsqlite3_free(tls, pCsr) 9848 return SQLITE_OK 9849 } 9850 9851 func fts5tokNextMethod(tls *libc.TLS, pCursor uintptr) int32 { 9852 var pCsr uintptr = pCursor 9853 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid++ 9854 return SQLITE_OK 9855 } 9856 9857 func fts5tokCb(tls *libc.TLS, pCtx uintptr, tflags int32, pToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 9858 var pCsr uintptr = pCtx 9859 var pRow uintptr 9860 9861 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow&((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow-1) == 0 { 9862 var nNew int32 9863 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9864 nNew = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow * 2 9865 } else { 9866 nNew = 32 9867 } 9868 var aNew uintptr 9869 aNew = sqlite3.Xsqlite3_realloc64(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow, uint64(nNew)*uint64(unsafe.Sizeof(Fts5tokRow{}))) 9870 if aNew == uintptr(0) { 9871 return SQLITE_NOMEM 9872 } 9873 libc.Xmemset(tls, aNew+uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24, 0, uint64(unsafe.Sizeof(Fts5tokRow{}))*uint64(nNew-(*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)) 9874 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = aNew 9875 } 9876 9877 pRow = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24 9878 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart = iStart 9879 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd = iEnd 9880 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9881 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos = (*Fts5tokRow)(unsafe.Pointer(pRow+libc.UintptrFromInt32(-1)*24)).FiPos + func() int32 { 9882 if tflags&FTS5_TOKEN_COLOCATED != 0 { 9883 return 0 9884 } 9885 return 1 9886 }() 9887 } 9888 (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken = sqlite3.Xsqlite3_malloc(tls, nToken+1) 9889 if (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken == uintptr(0) { 9890 return SQLITE_NOMEM 9891 } 9892 libc.Xmemcpy(tls, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, pToken, uint64(nToken)) 9893 *(*uint8)(unsafe.Pointer((*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken + uintptr(nToken))) = uint8(0) 9894 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow++ 9895 9896 return SQLITE_OK 9897 } 9898 9899 func fts5tokFilterMethod(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, nVal int32, apVal uintptr) int32 { 9900 var rc int32 = SQLITE_ERROR 9901 var pCsr uintptr = pCursor 9902 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 9903 9904 fts5tokResetCursor(tls, pCsr) 9905 if idxNum == 1 { 9906 var zByte uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9907 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9908 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = sqlite3.Xsqlite3_malloc(tls, nByte+1) 9909 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput == uintptr(0) { 9910 rc = SQLITE_NOMEM 9911 } else { 9912 if nByte > 0 { 9913 libc.Xmemcpy(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, zByte, uint64(nByte)) 9914 } 9915 *(*uint8)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput + uintptr(nByte))) = uint8(0) 9916 rc = (*struct { 9917 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 9918 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxTokenize})).f(tls, 9919 (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok, pCsr, 0, zByte, nByte, *(*uintptr)(unsafe.Pointer(&struct { 9920 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 9921 }{fts5tokCb}))) 9922 } 9923 } 9924 9925 if rc != SQLITE_OK { 9926 return rc 9927 } 9928 return fts5tokNextMethod(tls, pCursor) 9929 } 9930 9931 func fts5tokEofMethod(tls *libc.TLS, pCursor uintptr) int32 { 9932 var pCsr uintptr = pCursor 9933 return libc.Bool32((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid > (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow) 9934 } 9935 9936 func fts5tokColumnMethod(tls *libc.TLS, pCursor uintptr, pCtx uintptr, iCol int32) int32 { 9937 var pCsr uintptr = pCursor 9938 var pRow uintptr = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid-1)*24 9939 9940 switch iCol { 9941 case 0: 9942 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, -1, libc.UintptrFromInt32(-1)) 9943 break 9944 case 1: 9945 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, -1, libc.UintptrFromInt32(-1)) 9946 break 9947 case 2: 9948 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart) 9949 break 9950 case 3: 9951 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd) 9952 break 9953 default: 9954 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos) 9955 break 9956 } 9957 return SQLITE_OK 9958 } 9959 9960 func fts5tokRowidMethod(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 9961 var pCsr uintptr = pCursor 9962 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3_int64((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid) 9963 return SQLITE_OK 9964 } 9965 9966 func sqlite3Fts5TestRegisterTok(tls *libc.TLS, db uintptr, pApi uintptr) int32 { 9967 var rc int32 9968 9969 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3235, uintptr(unsafe.Pointer(&fts5tok_module)), pApi) 9970 return rc 9971 } 9972 9973 var fts5tok_module = sqlite3_module{ 9974 FxCreate: 0, 9975 FxConnect: 0, 9976 FxBestIndex: 0, 9977 FxDisconnect: 0, 9978 FxDestroy: 0, 9979 FxOpen: 0, 9980 FxClose: 0, 9981 FxFilter: 0, 9982 FxNext: 0, 9983 FxEof: 0, 9984 FxColumn: 0, 9985 FxRowid: 0, 9986 } 9987 9988 type sqlite3_api_routines = sqlite3_api_routines1 9989 9990 type sqlite3_loadext_entry = uintptr 9991 9992 type ApndVfs = sqlite3_vfs1 9993 type ApndFile1 = struct { 9994 Fbase sqlite3_file 9995 FiPgOne sqlite3_int64 9996 FiMark sqlite3_int64 9997 } 9998 9999 type ApndFile = ApndFile1 10000 10001 var apnd_vfs = sqlite3_vfs{ 10002 FiVersion: 3, 10003 FmxPathname: 1024, 10004 FzName: ts + 3248, 10005 FxOpen: 0, 10006 FxDelete: 0, 10007 FxAccess: 0, 10008 FxFullPathname: 0, 10009 FxDlOpen: 0, 10010 FxDlError: 0, 10011 FxDlSym: 0, 10012 FxDlClose: 0, 10013 FxRandomness: 0, 10014 FxSleep: 0, 10015 FxCurrentTime: 0, 10016 FxGetLastError: 0, 10017 FxCurrentTimeInt64: 0, 10018 FxSetSystemCall: 0, 10019 FxGetSystemCall: 0, 10020 FxNextSystemCall: 0, 10021 } 10022 10023 var apnd_io_methods = sqlite3_io_methods{ 10024 FiVersion: 3, 10025 FxClose: 0, 10026 FxRead: 0, 10027 FxWrite: 0, 10028 FxTruncate: 0, 10029 FxSync: 0, 10030 FxFileSize: 0, 10031 FxLock: 0, 10032 FxUnlock: 0, 10033 FxCheckReservedLock: 0, 10034 FxFileControl: 0, 10035 FxSectorSize: 0, 10036 FxDeviceCharacteristics: 0, 10037 FxShmMap: 0, 10038 FxShmLock: 0, 10039 FxShmBarrier: 0, 10040 FxShmUnmap: 0, 10041 FxFetch: 0, 10042 FxUnfetch: 0, 10043 } 10044 10045 func apndClose(tls *libc.TLS, pFile uintptr) int32 { 10046 pFile = pFile + uintptr(1)*24 10047 return (*struct { 10048 f func(*libc.TLS, uintptr) int32 10049 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 10050 } 10051 10052 func apndRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 10053 var paf uintptr = pFile 10054 pFile = pFile + uintptr(1)*24 10055 return (*struct { 10056 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10057 })(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) 10058 } 10059 10060 func apndWriteMark(tls *libc.TLS, paf uintptr, pFile uintptr, iWriteEnd sqlite_int64) int32 { 10061 bp := tls.Alloc(25) 10062 defer tls.Free(25) 10063 10064 var iPgOne sqlite_int64 = (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 10065 10066 var i int32 = APND_MARK_FOS_SZ 10067 var rc int32 10068 10069 libc.Xmemcpy(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) 10070 for libc.PreDecInt32(&i, 1) >= 0 { 10071 *(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))) = uint8(iPgOne & int64(0xff)) 10072 iPgOne >>= 8 10073 } 10074 iWriteEnd = iWriteEnd + (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 10075 if SQLITE_OK == libc.AssignInt32(&rc, (*struct { 10076 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10077 })(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)) { 10078 (*ApndFile)(unsafe.Pointer(paf)).FiMark = iWriteEnd 10079 } 10080 return rc 10081 } 10082 10083 func apndWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 10084 var paf uintptr = pFile 10085 var iWriteEnd sqlite_int64 = iOfst + sqlite_int64(iAmt) 10086 if iWriteEnd >= int64(0x40000000) { 10087 return SQLITE_FULL 10088 } 10089 pFile = pFile + uintptr(1)*24 10090 10091 if (*ApndFile)(unsafe.Pointer(paf)).FiMark < int64(0) || (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iWriteEnd > (*ApndFile)(unsafe.Pointer(paf)).FiMark { 10092 var rc int32 = apndWriteMark(tls, paf, pFile, iWriteEnd) 10093 if SQLITE_OK != rc { 10094 return rc 10095 } 10096 } 10097 return (*struct { 10098 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10099 })(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) 10100 } 10101 10102 func apndTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 10103 var paf uintptr = pFile 10104 pFile = pFile + uintptr(1)*24 10105 10106 if SQLITE_OK != apndWriteMark(tls, paf, pFile, size) { 10107 return SQLITE_IOERR 10108 } 10109 10110 return (*struct { 10111 f func(*libc.TLS, uintptr, sqlite3_int64) int32 10112 })(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)) 10113 } 10114 10115 func apndSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 10116 pFile = pFile + uintptr(1)*24 10117 return (*struct { 10118 f func(*libc.TLS, uintptr, int32) int32 10119 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 10120 } 10121 10122 func apndFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 10123 var paf uintptr = pFile 10124 *(*sqlite_int64)(unsafe.Pointer(pSize)) = func() int64 { 10125 if (*ApndFile)(unsafe.Pointer(paf)).FiMark >= int64(0) { 10126 return (*ApndFile)(unsafe.Pointer(paf)).FiMark - (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 10127 } 10128 return int64(0) 10129 }() 10130 return SQLITE_OK 10131 } 10132 10133 func apndLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 10134 pFile = pFile + uintptr(1)*24 10135 return (*struct { 10136 f func(*libc.TLS, uintptr, int32) int32 10137 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 10138 } 10139 10140 func apndUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 10141 pFile = pFile + uintptr(1)*24 10142 return (*struct { 10143 f func(*libc.TLS, uintptr, int32) int32 10144 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 10145 } 10146 10147 func apndCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 10148 pFile = pFile + uintptr(1)*24 10149 return (*struct { 10150 f func(*libc.TLS, uintptr, uintptr) int32 10151 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 10152 } 10153 10154 func apndFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 10155 bp := tls.Alloc(16) 10156 defer tls.Free(16) 10157 10158 var paf uintptr = pFile 10159 var rc int32 10160 pFile = pFile + uintptr(1)*24 10161 if op == SQLITE_FCNTL_SIZE_HINT { 10162 *(*sqlite3_int64)(unsafe.Pointer(pArg)) += (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 10163 } 10164 rc = (*struct { 10165 f func(*libc.TLS, uintptr, int32, uintptr) int32 10166 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 10167 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 10168 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+3274, libc.VaList(bp, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne, *(*uintptr)(unsafe.Pointer(pArg)))) 10169 } 10170 return rc 10171 } 10172 10173 func apndSectorSize(tls *libc.TLS, pFile uintptr) int32 { 10174 pFile = pFile + uintptr(1)*24 10175 return (*struct { 10176 f func(*libc.TLS, uintptr) int32 10177 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 10178 } 10179 10180 func apndDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 10181 pFile = pFile + uintptr(1)*24 10182 return (*struct { 10183 f func(*libc.TLS, uintptr) int32 10184 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 10185 } 10186 10187 func apndShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 10188 pFile = pFile + uintptr(1)*24 10189 return (*struct { 10190 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 10191 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 10192 } 10193 10194 func apndShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 10195 pFile = pFile + uintptr(1)*24 10196 return (*struct { 10197 f func(*libc.TLS, uintptr, int32, int32, int32) int32 10198 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 10199 } 10200 10201 func apndShmBarrier(tls *libc.TLS, pFile uintptr) { 10202 pFile = pFile + uintptr(1)*24 10203 (*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) 10204 } 10205 10206 func apndShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 10207 pFile = pFile + uintptr(1)*24 10208 return (*struct { 10209 f func(*libc.TLS, uintptr, int32) int32 10210 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 10211 } 10212 10213 func apndFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 10214 var p uintptr = pFile 10215 if (*ApndFile)(unsafe.Pointer(p)).FiMark < int64(0) || iOfst+sqlite3_int64(iAmt) > (*ApndFile)(unsafe.Pointer(p)).FiMark { 10216 return SQLITE_IOERR 10217 } 10218 pFile = pFile + uintptr(1)*24 10219 return (*struct { 10220 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 10221 })(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) 10222 } 10223 10224 func apndUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 10225 var p uintptr = pFile 10226 pFile = pFile + uintptr(1)*24 10227 return (*struct { 10228 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 10229 })(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) 10230 } 10231 10232 func apndReadMark(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) sqlite3_int64 { 10233 bp := tls.Alloc(25) 10234 defer tls.Free(25) 10235 10236 var rc int32 10237 var i int32 10238 var iMark sqlite3_int64 10239 var msbs int32 = 8 * (APND_MARK_FOS_SZ - 1) 10240 10241 if int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) != sz&int64(0x1ff) { 10242 return int64(-1) 10243 } 10244 rc = (*struct { 10245 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10246 })(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)) 10247 if rc != 0 { 10248 return int64(-1) 10249 } 10250 if libc.Xmemcmp(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) != 0 { 10251 return int64(-1) 10252 } 10253 iMark = sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(bp + 17)))&0x7f) << msbs 10254 for i = 1; i < 8; i++ { 10255 msbs = msbs - 8 10256 iMark = iMark | sqlite3_int64(*(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))))<<msbs 10257 } 10258 if iMark > sz-int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)-int64(512) { 10259 return int64(-1) 10260 } 10261 if iMark&int64(0x1ff) != 0 { 10262 return int64(-1) 10263 } 10264 return iMark 10265 } 10266 10267 var apvfsSqliteHdr = *(*[16]uint8)(unsafe.Pointer(ts + 3288)) 10268 10269 func apndIsAppendvfsDatabase(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 10270 bp := tls.Alloc(16) 10271 defer tls.Free(16) 10272 10273 var rc int32 10274 10275 var iMark sqlite3_int64 = apndReadMark(tls, sz, pFile) 10276 if iMark >= int64(0) { 10277 rc = (*struct { 10278 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10279 })(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) 10280 if SQLITE_OK == rc && 10281 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]uint8{}))) == 0 && 10282 sz&int64(0x1ff) == int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) && 10283 sz >= int64(512+(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) { 10284 return 1 10285 } 10286 } 10287 return 0 10288 } 10289 10290 func apndIsOrdinaryDatabaseFile(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 10291 bp := tls.Alloc(16) 10292 defer tls.Free(16) 10293 10294 if apndIsAppendvfsDatabase(tls, sz, pFile) != 0 || 10295 sz&int64(0x1ff) != int64(0) || 10296 SQLITE_OK != (*struct { 10297 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10298 })(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)) || 10299 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]uint8{}))) != 0 { 10300 return 0 10301 } else { 10302 return 1 10303 } 10304 return int32(0) 10305 } 10306 10307 func apndOpen(tls *libc.TLS, pApndVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 10308 bp := tls.Alloc(8) 10309 defer tls.Free(8) 10310 10311 var pApndFile uintptr = pFile 10312 var pBaseFile uintptr = pFile + uintptr(1)*24 10313 var pBaseVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pApndVfs)).FpAppData 10314 var rc int32 10315 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 10316 if flags&SQLITE_OPEN_MAIN_DB == 0 { 10317 return (*struct { 10318 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 10319 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pFile, flags, pOutFlags) 10320 } 10321 libc.Xmemset(tls, pApndFile, 0, uint64(unsafe.Sizeof(ApndFile{}))) 10322 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&apnd_io_methods)) 10323 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = int64(-1) 10324 10325 rc = (*struct { 10326 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 10327 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pBaseFile, flags, pOutFlags) 10328 if rc == SQLITE_OK { 10329 rc = (*struct { 10330 f func(*libc.TLS, uintptr, uintptr) int32 10331 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxFileSize})).f(tls, pBaseFile, bp) 10332 if rc != 0 { 10333 (*struct { 10334 f func(*libc.TLS, uintptr) int32 10335 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 10336 } 10337 } 10338 if rc != 0 { 10339 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 10340 return rc 10341 } 10342 if apndIsOrdinaryDatabaseFile(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pBaseFile) != 0 { 10343 libc.Xmemmove(tls, pApndFile, pBaseFile, uint64((*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FszOsFile)) 10344 return SQLITE_OK 10345 } 10346 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = apndReadMark(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pFile) 10347 if (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne >= int64(0) { 10348 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = *(*sqlite3_int64)(unsafe.Pointer(bp)) - int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) 10349 return SQLITE_OK 10350 } 10351 if flags&SQLITE_OPEN_CREATE == 0 { 10352 (*struct { 10353 f func(*libc.TLS, uintptr) int32 10354 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 10355 rc = SQLITE_CANTOPEN 10356 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 10357 } else { 10358 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = (*(*sqlite3_int64)(unsafe.Pointer(bp)) + int64(APND_ROUNDUP-1)) & libc.CplInt64(int64(APND_ROUNDUP-1)) 10359 } 10360 return rc 10361 } 10362 10363 func apndDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 10364 return (*struct { 10365 f func(*libc.TLS, uintptr, uintptr, int32) int32 10366 })(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) 10367 } 10368 10369 func apndAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 10370 return (*struct { 10371 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 10372 })(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) 10373 } 10374 10375 func apndFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 10376 return (*struct { 10377 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 10378 })(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) 10379 } 10380 10381 func apndDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 10382 return (*struct { 10383 f func(*libc.TLS, uintptr, uintptr) uintptr 10384 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 10385 } 10386 10387 func apndDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 10388 (*struct { 10389 f func(*libc.TLS, uintptr, int32, uintptr) 10390 })(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) 10391 } 10392 10393 func apndDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 10394 return (*struct { 10395 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 10396 })(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) 10397 } 10398 10399 func apndDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 10400 (*struct { 10401 f func(*libc.TLS, uintptr, uintptr) 10402 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 10403 } 10404 10405 func apndRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 10406 return (*struct { 10407 f func(*libc.TLS, uintptr, int32, uintptr) int32 10408 })(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) 10409 } 10410 10411 func apndSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 10412 return (*struct { 10413 f func(*libc.TLS, uintptr, int32) int32 10414 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 10415 } 10416 10417 func apndCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 10418 return (*struct { 10419 f func(*libc.TLS, uintptr, uintptr) int32 10420 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 10421 } 10422 10423 func apndGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 10424 return (*struct { 10425 f func(*libc.TLS, uintptr, int32, uintptr) int32 10426 })(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) 10427 } 10428 10429 func apndCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 10430 return (*struct { 10431 f func(*libc.TLS, uintptr, uintptr) int32 10432 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTimeInt64})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p) 10433 } 10434 10435 func apndSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 10436 return (*struct { 10437 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 10438 })(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) 10439 } 10440 10441 func apndGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 10442 return (*struct { 10443 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 10444 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 10445 } 10446 10447 func apndNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 10448 return (*struct { 10449 f func(*libc.TLS, uintptr, uintptr) uintptr 10450 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 10451 } 10452 10453 func sqlite3_appendvfs_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 10454 var rc int32 = SQLITE_OK 10455 var pOrig uintptr 10456 _ = pApi 10457 10458 _ = pzErrMsg 10459 _ = db 10460 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 10461 if pOrig == uintptr(0) { 10462 return SQLITE_ERROR 10463 } 10464 apnd_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 10465 apnd_vfs.FpAppData = pOrig 10466 apnd_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(ApndFile{}))) 10467 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&apnd_vfs)), 0) 10468 if rc == SQLITE_OK { 10469 rc = SQLITE_OK | int32(1)<<8 10470 } 10471 return rc 10472 } 10473 10474 type idtype_t = uint32 10475 10476 type div_t = struct { 10477 Fquot int32 10478 Frem int32 10479 } 10480 10481 type ldiv_t = struct { 10482 Fquot int64 10483 Frem int64 10484 } 10485 10486 type lldiv_t = struct { 10487 Fquot int64 10488 Frem int64 10489 } 10490 10491 type u_char = uint8 10492 type u_short = uint16 10493 type u_int = uint32 10494 type u_long = uint64 10495 type quad_t = int64 10496 type u_quad_t = uint64 10497 type fsid_t = struct{ F__val [2]int32 } 10498 type loff_t = int64 10499 10500 type ino_t = uint64 10501 10502 type dev_t = uint64 10503 10504 type gid_t = uint32 10505 10506 type mode_t = uint32 10507 10508 type nlink_t = uint64 10509 10510 type uid_t = uint32 10511 10512 type pid_t = int32 10513 10514 type id_t = uint32 10515 10516 type daddr_t = int32 10517 type caddr_t = uintptr 10518 10519 type key_t = int32 10520 10521 type clock_t = int64 10522 10523 type clockid_t = int32 10524 10525 type time_t = int64 10526 10527 type timer_t = uintptr 10528 10529 type ulong = uint64 10530 type ushort = uint16 10531 type uint = uint32 10532 10533 type int8_t = int8 10534 type int16_t = int16 10535 type int32_t = int32 10536 type int64_t = int64 10537 10538 type u_int8_t = uint8 10539 type u_int16_t = uint16 10540 type u_int32_t = uint32 10541 type u_int64_t = uint64 10542 10543 type register_t = int32 10544 10545 type sigset_t = struct{ F__val [16]uint64 } 10546 10547 type timeval = struct { 10548 Ftv_sec int64 10549 Ftv_usec int64 10550 } 10551 10552 type timespec = struct { 10553 Ftv_sec int64 10554 Ftv_nsec int64 10555 } 10556 10557 type suseconds_t = int64 10558 10559 type fd_set = struct{ F__fds_bits [16]int64 } 10560 10561 type fd_mask = int64 10562 10563 type blksize_t = int64 10564 10565 type blkcnt_t = int64 10566 type fsblkcnt_t = uint64 10567 type fsfilcnt_t = uint64 10568 10569 type __pthread_internal_list = struct { 10570 F__prev uintptr 10571 F__next uintptr 10572 } 10573 10574 type __pthread_internal_slist = struct{ F__next uintptr } 10575 10576 type __pthread_mutex_s = struct { 10577 F__lock int32 10578 F__count uint32 10579 F__owner int32 10580 F__nusers uint32 10581 F__kind int32 10582 F__spins int16 10583 F__elision int16 10584 F__list struct { 10585 F__prev uintptr 10586 F__next uintptr 10587 } 10588 } 10589 10590 type __pthread_rwlock_arch_t = struct { 10591 F__readers uint32 10592 F__writers uint32 10593 F__wrphase_futex uint32 10594 F__writers_futex uint32 10595 F__pad3 uint32 10596 F__pad4 uint32 10597 F__cur_writer int32 10598 F__shared int32 10599 F__rwelision uint8 10600 F__pad1 [7]uint8 10601 F__pad2 uint64 10602 F__flags uint32 10603 F__ccgo_pad1 [4]byte 10604 } 10605 10606 type __pthread_cond_s = struct { 10607 F__0 struct{ F__wseq uint64 } 10608 F__8 struct{ F__g1_start uint64 } 10609 F__g_refs [2]uint32 10610 F__g_size [2]uint32 10611 F__g1_orig_size uint32 10612 F__wrefs uint32 10613 F__g_signals [2]uint32 10614 } 10615 10616 type pthread_t = uint64 10617 10618 type pthread_mutexattr_t = struct { 10619 F__ccgo_pad1 [0]uint32 10620 F__size [4]uint8 10621 } 10622 10623 type pthread_condattr_t = struct { 10624 F__ccgo_pad1 [0]uint32 10625 F__size [4]uint8 10626 } 10627 10628 type pthread_key_t = uint32 10629 10630 type pthread_once_t = int32 10631 10632 type pthread_attr_t1 = struct { 10633 F__ccgo_pad1 [0]uint64 10634 F__size [56]uint8 10635 } 10636 10637 type pthread_attr_t = pthread_attr_t1 10638 10639 type pthread_mutex_t = struct{ F__data __pthread_mutex_s } 10640 10641 type pthread_cond_t = struct{ F__data __pthread_cond_s } 10642 10643 type pthread_rwlock_t = struct{ F__data __pthread_rwlock_arch_t } 10644 10645 type pthread_rwlockattr_t = struct { 10646 F__ccgo_pad1 [0]uint64 10647 F__size [8]uint8 10648 } 10649 10650 type pthread_spinlock_t = int32 10651 10652 type pthread_barrier_t = struct { 10653 F__ccgo_pad1 [0]uint64 10654 F__size [32]uint8 10655 } 10656 10657 type pthread_barrierattr_t = struct { 10658 F__ccgo_pad1 [0]uint32 10659 F__size [4]uint8 10660 } 10661 10662 type random_data = struct { 10663 Ffptr uintptr 10664 Frptr uintptr 10665 Fstate uintptr 10666 Frand_type int32 10667 Frand_deg int32 10668 Frand_sep int32 10669 F__ccgo_pad1 [4]byte 10670 Fend_ptr uintptr 10671 } 10672 10673 type drand48_data = struct { 10674 F__x [3]uint16 10675 F__old_x [3]uint16 10676 F__c uint16 10677 F__init uint16 10678 F__a uint64 10679 } 10680 10681 type amatch_vtab1 = struct { 10682 Fbase sqlite3_vtab 10683 FzClassName uintptr 10684 FzDb uintptr 10685 FzSelf uintptr 10686 FzCostTab uintptr 10687 FzVocabTab uintptr 10688 FzVocabWord uintptr 10689 FzVocabLang uintptr 10690 FpRule uintptr 10691 FrIns amatch_cost 10692 FrDel amatch_cost 10693 FrSub amatch_cost 10694 F__ccgo_pad1 [4]byte 10695 Fdb uintptr 10696 FpVCheck uintptr 10697 FnCursor int32 10698 F__ccgo_pad2 [4]byte 10699 } 10700 10701 type amatch_vtab = amatch_vtab1 10702 type amatch_cursor1 = struct { 10703 Fbase sqlite3_vtab_cursor 10704 FiRowid sqlite3_int64 10705 FiLang amatch_langid 10706 FrLimit amatch_cost 10707 FnBuf int32 10708 FoomErr int32 10709 FnWord int32 10710 F__ccgo_pad1 [4]byte 10711 FzBuf uintptr 10712 FzInput uintptr 10713 FpVtab uintptr 10714 FpAllWords uintptr 10715 FpCurrent uintptr 10716 FpCost uintptr 10717 FpWord uintptr 10718 } 10719 10720 type amatch_cursor = amatch_cursor1 10721 type amatch_rule1 = struct { 10722 FpNext uintptr 10723 FzFrom uintptr 10724 FrCost amatch_cost 10725 FiLang amatch_langid 10726 FnFrom amatch_len 10727 FnTo amatch_len 10728 FzTo [4]uint8 10729 F__ccgo_pad1 [2]byte 10730 } 10731 10732 type amatch_rule = amatch_rule1 10733 type amatch_word1 = struct { 10734 FpNext uintptr 10735 FsCost amatch_avl 10736 FsWord amatch_avl 10737 FrCost amatch_cost 10738 FiSeq int32 10739 FzCost [10]uint8 10740 FnMatch int16 10741 FzWord [4]uint8 10742 } 10743 10744 type amatch_word = amatch_word1 10745 type amatch_avl1 = struct { 10746 FpWord uintptr 10747 FzKey uintptr 10748 FpBefore uintptr 10749 FpAfter uintptr 10750 FpUp uintptr 10751 Fheight int16 10752 Fimbalance int16 10753 F__ccgo_pad1 [4]byte 10754 } 10755 10756 type amatch_avl = amatch_avl1 10757 10758 func amatchAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 10759 var hBefore int16 10760 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10761 hBefore = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 10762 } else { 10763 hBefore = int16(0) 10764 } 10765 var hAfter int16 10766 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 10767 hAfter = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 10768 } else { 10769 hAfter = int16(0) 10770 } 10771 (*amatch_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 10772 (*amatch_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 10773 if int32(hBefore) > int32(hAfter) { 10774 return int32(hBefore) 10775 } 10776 return int32(hAfter) 10777 }() + 1) 10778 } 10779 10780 func amatchAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 10781 var pB uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpBefore 10782 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pB)).FpAfter 10783 (*amatch_avl)(unsafe.Pointer(pB)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 10784 (*amatch_avl)(unsafe.Pointer(pB)).FpAfter = pP 10785 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pB 10786 (*amatch_avl)(unsafe.Pointer(pP)).FpBefore = pY 10787 if pY != 0 { 10788 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 10789 } 10790 amatchAvlRecomputeHeight(tls, pP) 10791 amatchAvlRecomputeHeight(tls, pB) 10792 return pB 10793 } 10794 10795 func amatchAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 10796 var pA uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpAfter 10797 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pA)).FpBefore 10798 (*amatch_avl)(unsafe.Pointer(pA)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 10799 (*amatch_avl)(unsafe.Pointer(pA)).FpBefore = pP 10800 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pA 10801 (*amatch_avl)(unsafe.Pointer(pP)).FpAfter = pY 10802 if pY != 0 { 10803 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 10804 } 10805 amatchAvlRecomputeHeight(tls, pP) 10806 amatchAvlRecomputeHeight(tls, pA) 10807 return pA 10808 } 10809 10810 func amatchAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 10811 var pUp uintptr = (*amatch_avl)(unsafe.Pointer(p)).FpUp 10812 if pUp == uintptr(0) { 10813 return pp 10814 } 10815 if (*amatch_avl)(unsafe.Pointer(pUp)).FpAfter == p { 10816 return pUp + 24 10817 } 10818 return pUp + 16 10819 } 10820 10821 func amatchAvlBalance(tls *libc.TLS, p uintptr) uintptr { 10822 bp := tls.Alloc(8) 10823 defer tls.Free(8) 10824 *(*uintptr)(unsafe.Pointer(bp)) = p 10825 10826 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 10827 var pp uintptr 10828 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 10829 amatchAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 10830 if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 10831 var pB uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 10832 if int32((*amatch_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 10833 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = amatchAvlRotateAfter(tls, pB) 10834 } 10835 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 10836 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 10837 } else if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 10838 var pA uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 10839 if int32((*amatch_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 10840 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = amatchAvlRotateBefore(tls, pA) 10841 } 10842 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 10843 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 10844 } 10845 pTop = *(*uintptr)(unsafe.Pointer(bp)) 10846 *(*uintptr)(unsafe.Pointer(bp)) = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 10847 } 10848 return pTop 10849 } 10850 10851 func amatchAvlSearch(tls *libc.TLS, p uintptr, zKey uintptr) uintptr { 10852 var c int32 10853 for p != 0 && libc.AssignInt32(&c, libc.Xstrcmp(tls, zKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey)) != 0 { 10854 if c < 0 { 10855 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10856 } else { 10857 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 10858 } 10859 } 10860 return p 10861 } 10862 10863 func amatchAvlFirst(tls *libc.TLS, p uintptr) uintptr { 10864 if p != 0 { 10865 for (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10866 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10867 } 10868 } 10869 return p 10870 } 10871 10872 func amatchAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 10873 var c int32 10874 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 10875 if p == uintptr(0) { 10876 p = pNew 10877 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 10878 } else { 10879 for p != 0 { 10880 c = libc.Xstrcmp(tls, (*amatch_avl)(unsafe.Pointer(pNew)).FzKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey) 10881 if c < 0 { 10882 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 10883 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 10884 } else { 10885 (*amatch_avl)(unsafe.Pointer(p)).FpBefore = pNew 10886 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 10887 break 10888 } 10889 } else if c > 0 { 10890 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 10891 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 10892 } else { 10893 (*amatch_avl)(unsafe.Pointer(p)).FpAfter = pNew 10894 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 10895 break 10896 } 10897 } else { 10898 return p 10899 } 10900 } 10901 } 10902 (*amatch_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 10903 (*amatch_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 10904 (*amatch_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 10905 (*amatch_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 10906 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, p) 10907 10908 return uintptr(0) 10909 } 10910 10911 func amatchAvlRemove(tls *libc.TLS, ppHead uintptr, pOld uintptr) { 10912 var ppParent uintptr 10913 var pBalance uintptr = uintptr(0) 10914 10915 ppParent = amatchAvlFromPtr(tls, pOld, ppHead) 10916 if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 10917 *(*uintptr)(unsafe.Pointer(ppParent)) = uintptr(0) 10918 pBalance = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10919 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore != 0 && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter != 0 { 10920 var pX uintptr 10921 var pY uintptr 10922 pX = amatchAvlFirst(tls, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 10923 *(*uintptr)(unsafe.Pointer(amatchAvlFromPtr(tls, pX, uintptr(0)))) = (*amatch_avl)(unsafe.Pointer(pX)).FpAfter 10924 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 10925 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 10926 } 10927 pBalance = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 10928 (*amatch_avl)(unsafe.Pointer(pX)).FpAfter = (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter 10929 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 10930 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = pX 10931 } else { 10932 pBalance = pX 10933 } 10934 (*amatch_avl)(unsafe.Pointer(pX)).FpBefore = libc.AssignUintptr(&pY, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 10935 if pY != 0 { 10936 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pX 10937 } 10938 (*amatch_avl)(unsafe.Pointer(pX)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10939 *(*uintptr)(unsafe.Pointer(ppParent)) = pX 10940 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) { 10941 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 10942 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10943 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 10944 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 10945 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 10946 } 10947 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, pBalance) 10948 (*amatch_avl)(unsafe.Pointer(pOld)).FpUp = uintptr(0) 10949 (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore = uintptr(0) 10950 (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter = uintptr(0) 10951 10952 } 10953 10954 type amatch_cost = int32 10955 type amatch_len = int8 10956 type amatch_langid = int32 10957 10958 func amatchMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 10959 bp := tls.Alloc(32) 10960 defer tls.Free(32) 10961 10962 var pTail uintptr 10963 10964 pTail = bp 10965 for pA != 0 && pB != 0 { 10966 if (*amatch_rule)(unsafe.Pointer(pA)).FrCost <= (*amatch_rule)(unsafe.Pointer(pB)).FrCost { 10967 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 10968 pTail = pA 10969 pA = (*amatch_rule)(unsafe.Pointer(pA)).FpNext 10970 } else { 10971 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 10972 pTail = pB 10973 pB = (*amatch_rule)(unsafe.Pointer(pB)).FpNext 10974 } 10975 } 10976 if pA == uintptr(0) { 10977 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 10978 } else { 10979 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 10980 } 10981 return (*amatch_rule)(unsafe.Pointer(bp)).FpNext 10982 } 10983 10984 func amatchLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 10985 bp := tls.Alloc(48) 10986 defer tls.Free(48) 10987 10988 var iLang sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 10989 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 10990 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 10991 var rCost amatch_cost = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 10992 10993 var rc int32 = SQLITE_OK 10994 var nFrom int32 10995 var nTo int32 10996 var pRule uintptr = uintptr(0) 10997 10998 if zFrom == uintptr(0) { 10999 zFrom = ts + 584 11000 } 11001 if zTo == uintptr(0) { 11002 zTo = ts + 584 11003 } 11004 nFrom = int32(libc.Xstrlen(tls, zFrom)) 11005 nTo = int32(libc.Xstrlen(tls, zTo)) 11006 11007 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 11008 if int32(*(*uint8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*uint8)(unsafe.Pointer(zFrom + 1))) == 0 { 11009 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrSub > rCost { 11010 (*amatch_vtab)(unsafe.Pointer(p)).FrSub = rCost 11011 } 11012 } 11013 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 11014 return SQLITE_OK 11015 } 11016 11017 if rCost <= 0 || rCost > AMATCH_MX_COST { 11018 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 11019 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_COST)) 11020 rc = SQLITE_ERROR 11021 } else if nFrom > AMATCH_MX_LENGTH || nTo > AMATCH_MX_LENGTH { 11022 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 11023 libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LENGTH)) 11024 rc = SQLITE_ERROR 11025 } else if iLang < int64(0) || iLang > int64(AMATCH_MX_LANGID) { 11026 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3370, 11027 libc.VaList(bp+32, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LANGID)) 11028 rc = SQLITE_ERROR 11029 } else if libc.Xstrcmp(tls, zFrom, ts+584) == 0 && libc.Xstrcmp(tls, zTo, ts+3405) == 0 { 11030 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrIns > rCost { 11031 (*amatch_vtab)(unsafe.Pointer(p)).FrIns = rCost 11032 } 11033 } else if libc.Xstrcmp(tls, zFrom, ts+3405) == 0 && libc.Xstrcmp(tls, zTo, ts+584) == 0 { 11034 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrDel > rCost { 11035 (*amatch_vtab)(unsafe.Pointer(p)).FrDel = rCost 11036 } 11037 } else { 11038 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_rule{}))+uint64(nFrom)+uint64(nTo)) 11039 if pRule == uintptr(0) { 11040 rc = SQLITE_NOMEM 11041 } else { 11042 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(amatch_rule{}))) 11043 (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 26 + uintptr(nTo+1) 11044 (*amatch_rule)(unsafe.Pointer(pRule)).FnFrom = amatch_len(nFrom) 11045 libc.Xmemcpy(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 11046 libc.Xmemcpy(tls, pRule+26, zTo, uint64(nTo+1)) 11047 (*amatch_rule)(unsafe.Pointer(pRule)).FnTo = amatch_len(nTo) 11048 (*amatch_rule)(unsafe.Pointer(pRule)).FrCost = rCost 11049 (*amatch_rule)(unsafe.Pointer(pRule)).FiLang = int32(iLang) 11050 } 11051 } 11052 11053 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 11054 return rc 11055 } 11056 11057 func amatchFreeRules(tls *libc.TLS, p uintptr) { 11058 for (*amatch_vtab)(unsafe.Pointer(p)).FpRule != 0 { 11059 var pRule uintptr = (*amatch_vtab)(unsafe.Pointer(p)).FpRule 11060 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext 11061 sqlite3.Xsqlite3_free(tls, pRule) 11062 } 11063 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = uintptr(0) 11064 } 11065 11066 func amatchLoadRules(tls *libc.TLS, db uintptr, p uintptr, pzErr uintptr) int32 { 11067 bp := tls.Alloc(192) 11068 defer tls.Free(192) 11069 11070 var rc int32 = SQLITE_OK 11071 var zSql uintptr 11072 var pHead uintptr = uintptr(0) 11073 11074 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzDb, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab)) 11075 if zSql == uintptr(0) { 11076 rc = SQLITE_NOMEM 11077 } else { 11078 var rc2 int32 11079 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 11080 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 11081 if rc != SQLITE_OK { 11082 *(*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))) 11083 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 11084 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 11085 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))))) 11086 rc = SQLITE_ERROR 11087 } else { 11088 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 11089 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 11090 rc = amatchLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 11091 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 11092 (*amatch_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 11093 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 11094 } 11095 } 11096 } 11097 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 11098 if rc == SQLITE_OK { 11099 rc = rc2 11100 } 11101 } 11102 sqlite3.Xsqlite3_free(tls, zSql) 11103 11104 if rc == SQLITE_OK { 11105 var i uint32 11106 var pX uintptr 11107 11108 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 11109 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 11110 } 11111 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 11112 pHead = (*amatch_rule)(unsafe.Pointer(pX)).FpNext 11113 (*amatch_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 11114 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++ { 11115 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 11116 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 11117 } 11118 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 11119 } 11120 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 11121 i = uint32(1) 11122 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 11123 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 11124 } 11125 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = amatchMergeRules(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpRule, pX) 11126 } else { 11127 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = pHead 11128 } 11129 11130 return rc 11131 } 11132 11133 func amatchDequote(tls *libc.TLS, zIn uintptr) uintptr { 11134 var nIn sqlite3_int64 11135 var zOut uintptr 11136 11137 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 11138 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 11139 if zOut != 0 { 11140 var q uint8 = *(*uint8)(unsafe.Pointer(zIn)) 11141 11142 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 11143 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 11144 } else { 11145 var iOut int32 = 0 11146 var iIn int32 11147 11148 if int32(q) == '[' { 11149 q = uint8(']') 11150 } 11151 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 11152 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 11153 iIn++ 11154 } 11155 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(zIn + uintptr(iIn))) 11156 } 11157 } 11158 11159 } 11160 return zOut 11161 } 11162 11163 func amatchVCheckClear(tls *libc.TLS, p uintptr) { 11164 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck != 0 { 11165 sqlite3.Xsqlite3_finalize(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11166 (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck = uintptr(0) 11167 } 11168 } 11169 11170 func amatchFree(tls *libc.TLS, p uintptr) { 11171 if p != 0 { 11172 amatchFreeRules(tls, p) 11173 amatchVCheckClear(tls, p) 11174 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName) 11175 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzDb) 11176 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab) 11177 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab) 11178 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord) 11179 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang) 11180 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf) 11181 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 11182 sqlite3.Xsqlite3_free(tls, p) 11183 } 11184 } 11185 11186 func amatchDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 11187 var p uintptr = pVtab 11188 11189 amatchFree(tls, p) 11190 return SQLITE_OK 11191 } 11192 11193 func amatchValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 11194 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 11195 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 11196 var i int32 11197 if nStr < nKey+1 { 11198 return uintptr(0) 11199 } 11200 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 11201 return uintptr(0) 11202 } 11203 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++ { 11204 } 11205 if int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 11206 return uintptr(0) 11207 } 11208 i++ 11209 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 { 11210 i++ 11211 } 11212 return zStr + uintptr(i) 11213 } 11214 11215 func amatchConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 11216 bp := tls.Alloc(32) 11217 defer tls.Free(32) 11218 11219 var rc int32 11220 var pNew uintptr 11221 var zModule uintptr 11222 var zDb uintptr 11223 var zVal uintptr 11224 var i int32 11225 rc = SQLITE_OK 11226 pNew = uintptr(0) 11227 zModule = *(*uintptr)(unsafe.Pointer(argv)) 11228 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 11229 11230 _ = pAux 11231 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 11232 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_vtab{}))) 11233 if !(pNew == uintptr(0)) { 11234 goto __1 11235 } 11236 return SQLITE_NOMEM 11237 __1: 11238 ; 11239 rc = SQLITE_NOMEM 11240 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(amatch_vtab{}))) 11241 (*amatch_vtab)(unsafe.Pointer(pNew)).Fdb = db 11242 (*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zModule)) 11243 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName == uintptr(0)) { 11244 goto __2 11245 } 11246 goto amatchConnectError 11247 __2: 11248 ; 11249 (*amatch_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zDb)) 11250 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 11251 goto __3 11252 } 11253 goto amatchConnectError 11254 __3: 11255 ; 11256 (*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 11257 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 11258 goto __4 11259 } 11260 goto amatchConnectError 11261 __4: 11262 ; 11263 i = 3 11264 __5: 11265 if !(i < argc) { 11266 goto __7 11267 } 11268 zVal = amatchValueOfKey(tls, ts+3468, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 11269 if !(zVal != 0) { 11270 goto __8 11271 } 11272 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab) 11273 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab = amatchDequote(tls, zVal) 11274 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab == uintptr(0)) { 11275 goto __9 11276 } 11277 goto amatchConnectError 11278 __9: 11279 ; 11280 goto __6 11281 __8: 11282 ; 11283 zVal = amatchValueOfKey(tls, ts+3485, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 11284 if !(zVal != 0) { 11285 goto __10 11286 } 11287 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord) 11288 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord = amatchDequote(tls, zVal) 11289 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord == uintptr(0)) { 11290 goto __11 11291 } 11292 goto amatchConnectError 11293 __11: 11294 ; 11295 goto __6 11296 __10: 11297 ; 11298 zVal = amatchValueOfKey(tls, ts+3501, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 11299 if !(zVal != 0) { 11300 goto __12 11301 } 11302 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang) 11303 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang = amatchDequote(tls, zVal) 11304 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang == uintptr(0)) { 11305 goto __13 11306 } 11307 goto amatchConnectError 11308 __13: 11309 ; 11310 goto __6 11311 __12: 11312 ; 11313 zVal = amatchValueOfKey(tls, ts+3521, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 11314 if !(zVal != 0) { 11315 goto __14 11316 } 11317 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab) 11318 (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab = amatchDequote(tls, zVal) 11319 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 11320 goto __15 11321 } 11322 goto amatchConnectError 11323 __15: 11324 ; 11325 goto __6 11326 __14: 11327 ; 11328 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 11329 amatchFree(tls, pNew) 11330 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 11331 return SQLITE_ERROR 11332 goto __6 11333 __6: 11334 i++ 11335 goto __5 11336 goto __7 11337 __7: 11338 ; 11339 rc = SQLITE_OK 11340 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 11341 goto __16 11342 } 11343 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3565, 0) 11344 rc = SQLITE_ERROR 11345 goto __17 11346 __16: 11347 rc = amatchLoadRules(tls, db, pNew, pzErr) 11348 __17: 11349 ; 11350 if !(rc == SQLITE_OK) { 11351 goto __18 11352 } 11353 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 11354 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 11355 ts+3599) 11356 __18: 11357 ; 11358 if !(rc != SQLITE_OK) { 11359 goto __19 11360 } 11361 amatchFree(tls, pNew) 11362 __19: 11363 ; 11364 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 11365 return rc 11366 11367 amatchConnectError: 11368 amatchFree(tls, pNew) 11369 return rc 11370 } 11371 11372 func amatchOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 11373 var p uintptr = pVTab 11374 var pCur uintptr 11375 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_cursor{}))) 11376 if pCur == uintptr(0) { 11377 return SQLITE_NOMEM 11378 } 11379 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(amatch_cursor{}))) 11380 (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab = p 11381 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 11382 (*amatch_vtab)(unsafe.Pointer(p)).FnCursor++ 11383 return SQLITE_OK 11384 } 11385 11386 func amatchClearCursor(tls *libc.TLS, pCur uintptr) { 11387 var pWord uintptr 11388 var pNextWord uintptr 11389 for pWord = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords; pWord != 0; pWord = pNextWord { 11390 pNextWord = (*amatch_word)(unsafe.Pointer(pWord)).FpNext 11391 sqlite3.Xsqlite3_free(tls, pWord) 11392 } 11393 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = uintptr(0) 11394 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput) 11395 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = uintptr(0) 11396 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 11397 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = uintptr(0) 11398 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 11399 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost = uintptr(0) 11400 (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord = uintptr(0) 11401 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 11402 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = 1000000 11403 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = 0 11404 (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord = 0 11405 } 11406 11407 func amatchClose(tls *libc.TLS, cur uintptr) int32 { 11408 var pCur uintptr = cur 11409 amatchClearCursor(tls, pCur) 11410 (*amatch_vtab)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 11411 sqlite3.Xsqlite3_free(tls, pCur) 11412 return SQLITE_OK 11413 } 11414 11415 func amatchEncodeInt(tls *libc.TLS, x int32, z uintptr) { 11416 *(*uint8)(unsafe.Pointer(z)) = a[x>>18&0x3f] 11417 *(*uint8)(unsafe.Pointer(z + 1)) = a[x>>12&0x3f] 11418 *(*uint8)(unsafe.Pointer(z + 2)) = a[x>>6&0x3f] 11419 *(*uint8)(unsafe.Pointer(z + 3)) = a[x&0x3f] 11420 } 11421 11422 var a = *(*[65]uint8)(unsafe.Pointer(ts + 3666)) 11423 11424 func amatchWriteCost(tls *libc.TLS, pWord uintptr) { 11425 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, pWord+112) 11426 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FiSeq, pWord+112+uintptr(4)) 11427 *(*uint8)(unsafe.Pointer(pWord + 112 + 8)) = uint8(0) 11428 } 11429 11430 func amatchStrcpy(tls *libc.TLS, dest uintptr, src uintptr) { 11431 for int32(libc.AssignPtrUint8(libc.PostIncUintptr(&dest, 1), *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&src, 1))))) != 0 { 11432 } 11433 } 11434 11435 func amatchStrcat(tls *libc.TLS, dest uintptr, src uintptr) { 11436 for *(*uint8)(unsafe.Pointer(dest)) != 0 { 11437 dest++ 11438 } 11439 amatchStrcpy(tls, dest, src) 11440 } 11441 11442 func amatchAddWord(tls *libc.TLS, pCur uintptr, rCost amatch_cost, nMatch int32, zWordBase uintptr, zWordTail uintptr) { 11443 bp := tls.Alloc(4) 11444 defer tls.Free(4) 11445 11446 var pWord uintptr 11447 var pNode uintptr 11448 var pOther uintptr 11449 _ = pOther 11450 var nBase int32 11451 var nTail int32 11452 11453 if rCost > (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit { 11454 return 11455 } 11456 nBase = int32(libc.Xstrlen(tls, zWordBase)) 11457 nTail = int32(libc.Xstrlen(tls, zWordTail)) 11458 if nBase+nTail+3 > (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf { 11459 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = nBase + nTail + 100 11460 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = sqlite3.Xsqlite3_realloc(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf) 11461 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf == uintptr(0) { 11462 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 11463 return 11464 } 11465 } 11466 amatchEncodeInt(tls, nMatch, bp) 11467 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, bp+uintptr(2), uint64(2)) 11468 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2), zWordBase, uint64(nBase)) 11469 libc.Xmemcpy(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2)+uintptr(nBase), zWordTail, uint64(nTail+1)) 11470 pNode = amatchAvlSearch(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 11471 if pNode != 0 { 11472 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 11473 if (*amatch_word)(unsafe.Pointer(pWord)).FrCost > rCost { 11474 amatchAvlRemove(tls, pCur+80, pWord+8) 11475 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 11476 amatchWriteCost(tls, pWord) 11477 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 11478 _ = pOther 11479 } 11480 return 11481 } 11482 pWord = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_word{}))+uint64(nBase)+uint64(nTail)-uint64(1)) 11483 if pWord == uintptr(0) { 11484 return 11485 } 11486 libc.Xmemset(tls, pWord, 0, uint64(unsafe.Sizeof(amatch_word{}))) 11487 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 11488 (*amatch_word)(unsafe.Pointer(pWord)).FiSeq = libc.PostIncInt32(&(*amatch_cursor)(unsafe.Pointer(pCur)).FnWord, 1) 11489 amatchWriteCost(tls, pWord) 11490 (*amatch_word)(unsafe.Pointer(pWord)).FnMatch = int16(nMatch) 11491 (*amatch_word)(unsafe.Pointer(pWord)).FpNext = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords 11492 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = pWord 11493 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FzKey = pWord + 112 11494 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FpWord = pWord 11495 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 11496 _ = pOther 11497 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FzKey = pWord + 124 11498 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FpWord = pWord 11499 amatchStrcpy(tls, pWord+124, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 11500 pOther = amatchAvlInsert(tls, pCur+88, pWord+56) 11501 _ = pOther 11502 } 11503 11504 func amatchNext(tls *libc.TLS, cur uintptr) int32 { 11505 bp := tls.Alloc(80) 11506 defer tls.Free(80) 11507 11508 var pCur uintptr = cur 11509 var pWord uintptr = uintptr(0) 11510 var pNode uintptr 11511 var isMatch int32 = 0 11512 var p uintptr = (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab 11513 var nWord int32 11514 var rc int32 11515 var i int32 11516 var zW uintptr 11517 var pRule uintptr 11518 var zBuf uintptr = uintptr(0) 11519 var nBuf uint8 = uint8(0) 11520 11521 var nNextIn int32 11522 11523 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck == uintptr(0) { 11524 var zSql uintptr 11525 if (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang != 0 && *(*uint8)(unsafe.Pointer((*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) != 0 { 11526 zSql = sqlite3.Xsqlite3_mprintf(tls, 11527 ts+3731, 11528 libc.VaList(bp, ts+3753, 11529 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 11530 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) 11531 } else { 11532 zSql = sqlite3.Xsqlite3_mprintf(tls, 11533 ts+3792, 11534 libc.VaList(bp+40, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 11535 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord)) 11536 } 11537 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*amatch_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, p+112, uintptr(0)) 11538 sqlite3.Xsqlite3_free(tls, zSql) 11539 if rc != 0 { 11540 return rc 11541 } 11542 } 11543 sqlite3.Xsqlite3_bind_int(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 2, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 11544 11545 for __ccgo := true; __ccgo; __ccgo = !(isMatch != 0) { 11546 pNode = amatchAvlFirst(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost) 11547 if pNode == uintptr(0) { 11548 pWord = uintptr(0) 11549 break 11550 } 11551 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 11552 amatchAvlRemove(tls, pCur+80, pWord+8) 11553 11554 nWord = int32(libc.Xstrlen(tls, pWord+124+uintptr(2))) 11555 if nWord+20 > int32(nBuf) { 11556 nBuf = uint8(nWord + 100) 11557 zBuf = sqlite3.Xsqlite3_realloc(tls, zBuf, int32(nBuf)) 11558 if zBuf == uintptr(0) { 11559 return SQLITE_NOMEM 11560 } 11561 } 11562 amatchStrcpy(tls, zBuf, pWord+124+uintptr(2)) 11563 *(*uint8)(unsafe.Pointer(bp + 64)) = uint8(0) 11564 *(*uint8)(unsafe.Pointer(bp + 72)) = *(*uint8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch))) 11565 if *(*uint8)(unsafe.Pointer(bp + 72)) != 0 { 11566 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++ { 11567 *(*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))) 11568 } 11569 *(*uint8)(unsafe.Pointer(bp + 72 + uintptr(i))) = uint8(0) 11570 nNextIn = i 11571 } else { 11572 nNextIn = 0 11573 } 11574 11575 if *(*uint8)(unsafe.Pointer(bp + 72)) != 0 && int32(*(*uint8)(unsafe.Pointer(bp + 72))) != '*' { 11576 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11577 amatchStrcat(tls, zBuf, bp+72) 11578 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, nWord+nNextIn, uintptr(0)) 11579 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11580 if rc == SQLITE_ROW { 11581 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 11582 if libc.Xstrncmp(tls, zBuf, zW, uint64(nWord+nNextIn)) == 0 { 11583 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, zBuf, ts+584) 11584 } 11585 } 11586 *(*uint8)(unsafe.Pointer(zBuf + uintptr(nWord))) = uint8(0) 11587 } 11588 11589 for 1 != 0 { 11590 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 11591 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11592 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, -1, libc.UintptrFromInt32(-1)) 11593 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11594 if rc != SQLITE_ROW { 11595 break 11596 } 11597 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 11598 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 11599 if libc.Xstrncmp(tls, zW, zBuf, uint64(nWord)) != 0 { 11600 break 11601 } 11602 if int32(*(*uint8)(unsafe.Pointer(bp + 72))) == '*' && int32(*(*uint8)(unsafe.Pointer(bp + 72 + 1))) == 0 || 11603 int32(*(*uint8)(unsafe.Pointer(bp + 72))) == 0 && int32(*(*uint8)(unsafe.Pointer(zW + uintptr(nWord)))) == 0 { 11604 isMatch = 1 11605 *(*uint8)(unsafe.Pointer(bp + 72)) = uint8(0) 11606 nNextIn = 0 11607 break 11608 } 11609 *(*uint8)(unsafe.Pointer(bp + 64)) = *(*uint8)(unsafe.Pointer(zW + uintptr(nWord))) 11610 for i = 1; i <= 4 && int32(*(*uint8)(unsafe.Pointer(zW + uintptr(nWord+i))))&0xc0 == 0x80; i++ { 11611 *(*uint8)(unsafe.Pointer(bp + 64 + uintptr(i))) = *(*uint8)(unsafe.Pointer(zW + uintptr(nWord+i))) 11612 } 11613 *(*uint8)(unsafe.Pointer(bp + 64 + uintptr(i))) = uint8(0) 11614 *(*uint8)(unsafe.Pointer(zBuf + uintptr(nWord))) = uint8(0) 11615 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns > 0 { 11616 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrIns, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), 11617 zBuf, bp+64) 11618 } 11619 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub > 0 { 11620 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrSub, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 11621 zBuf, bp+64) 11622 } 11623 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns < 0 && (*amatch_vtab)(unsafe.Pointer(p)).FrSub < 0 { 11624 break 11625 } 11626 *(*uint8)(unsafe.Pointer(bp + 64 + uintptr(i-1)))++ 11627 } 11628 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 11629 11630 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel > 0 { 11631 *(*uint8)(unsafe.Pointer(zBuf + uintptr(nWord))) = uint8(0) 11632 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrDel, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 11633 zBuf, ts+584) 11634 } 11635 11636 for pRule = (*amatch_vtab)(unsafe.Pointer(p)).FpRule; pRule != 0; pRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext { 11637 if (*amatch_rule)(unsafe.Pointer(pRule)).FiLang != (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang { 11638 continue 11639 } 11640 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 { 11641 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_rule)(unsafe.Pointer(pRule)).FrCost, 11642 int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+int32((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom), pWord+124+uintptr(2), pRule+26) 11643 } 11644 } 11645 } 11646 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = pWord 11647 sqlite3.Xsqlite3_free(tls, zBuf) 11648 return SQLITE_OK 11649 } 11650 11651 func amatchFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 11652 bp := tls.Alloc(8) 11653 defer tls.Free(8) 11654 11655 var pCur uintptr = pVtabCursor 11656 var zWord uintptr = ts + 3840 11657 var idx int32 11658 11659 amatchClearCursor(tls, pCur) 11660 idx = 0 11661 if idxNum&1 != 0 { 11662 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 11663 idx++ 11664 } 11665 if idxNum&2 != 0 { 11666 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 11667 idx++ 11668 } 11669 if idxNum&4 != 0 { 11670 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 11671 idx++ 11672 } 11673 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zWord)) 11674 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput == uintptr(0) { 11675 return SQLITE_NOMEM 11676 } 11677 amatchAddWord(tls, pCur, 0, 0, ts+584, ts+584) 11678 amatchNext(tls, pVtabCursor) 11679 11680 return SQLITE_OK 11681 } 11682 11683 func amatchColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 11684 var pCur uintptr = cur 11685 switch i { 11686 case AMATCH_COL_WORD: 11687 { 11688 sqlite3.Xsqlite3_result_text(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent+124+uintptr(2), -1, uintptr(0)) 11689 break 11690 11691 } 11692 case AMATCH_COL_DISTANCE: 11693 { 11694 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_word)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FrCost) 11695 break 11696 11697 } 11698 case AMATCH_COL_LANGUAGE: 11699 { 11700 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 11701 break 11702 11703 } 11704 case AMATCH_COL_NWORD: 11705 { 11706 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord) 11707 break 11708 11709 } 11710 default: 11711 { 11712 sqlite3.Xsqlite3_result_null(tls, ctx) 11713 break 11714 11715 } 11716 } 11717 return SQLITE_OK 11718 } 11719 11720 func amatchRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 11721 var pCur uintptr = cur 11722 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*amatch_cursor)(unsafe.Pointer(pCur)).FiRowid 11723 return SQLITE_OK 11724 } 11725 11726 func amatchEof(tls *libc.TLS, cur uintptr) int32 { 11727 var pCur uintptr = cur 11728 return libc.Bool32((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 11729 } 11730 11731 func amatchBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 11732 var iPlan int32 = 0 11733 var iDistTerm int32 = -1 11734 var iLangTerm int32 = -1 11735 var i int32 11736 var pConstraint uintptr 11737 11738 _ = tab 11739 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 11740 i = 0 11741 __1: 11742 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 11743 goto __3 11744 } 11745 { 11746 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 11747 goto __2 11748 } 11749 if iPlan&1 == 0 && 11750 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 11751 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 11752 iPlan = iPlan | 1 11753 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 11754 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 11755 } 11756 if iPlan&2 == 0 && 11757 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 11758 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 11759 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 11760 iPlan = iPlan | 2 11761 iDistTerm = i 11762 } 11763 if iPlan&4 == 0 && 11764 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 11765 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 11766 iPlan = iPlan | 4 11767 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 11768 iLangTerm = i 11769 } 11770 11771 } 11772 goto __2 11773 __2: 11774 i++ 11775 pConstraint += 12 11776 goto __1 11777 goto __3 11778 __3: 11779 ; 11780 if iPlan&2 != 0 { 11781 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 11782 } 11783 if iPlan&4 != 0 { 11784 var idx int32 = 1 11785 if iPlan&1 != 0 { 11786 idx++ 11787 } 11788 if iPlan&2 != 0 { 11789 idx++ 11790 } 11791 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = idx 11792 } 11793 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 11794 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 11795 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 11796 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 11797 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 11798 } 11799 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10000) 11800 11801 return SQLITE_OK 11802 } 11803 11804 func amatchUpdate(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 11805 bp := tls.Alloc(24) 11806 defer tls.Free(24) 11807 11808 var p uintptr = pVTab 11809 var zCmd uintptr 11810 _ = pRowid 11811 if argc == 1 { 11812 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3842, 11813 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11814 return SQLITE_ERROR 11815 } 11816 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_NULL { 11817 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3872, 11818 libc.VaList(bp+8, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11819 return SQLITE_ERROR 11820 } 11821 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) != SQLITE_NULL || 11822 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) != SQLITE_NULL || 11823 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) != SQLITE_NULL { 11824 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 11825 ts+3900, libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 11826 return SQLITE_ERROR 11827 } 11828 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 11829 if zCmd == uintptr(0) { 11830 return SQLITE_OK 11831 } 11832 11833 return SQLITE_OK 11834 } 11835 11836 var amatchModule = sqlite3_module{ 11837 FxCreate: 0, 11838 FxConnect: 0, 11839 FxBestIndex: 0, 11840 FxDisconnect: 0, 11841 FxDestroy: 0, 11842 FxOpen: 0, 11843 FxClose: 0, 11844 FxFilter: 0, 11845 FxNext: 0, 11846 FxEof: 0, 11847 FxColumn: 0, 11848 FxRowid: 0, 11849 FxUpdate: 0, 11850 } 11851 11852 func sqlite3_amatch_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 11853 var rc int32 = SQLITE_OK 11854 _ = pApi 11855 11856 _ = pzErrMsg 11857 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3949, uintptr(unsafe.Pointer(&amatchModule)), uintptr(0)) 11858 return rc 11859 } 11860 11861 var azType = [4]uintptr{ts + 3967, ts + 3973, ts + 2562, ts + 3979} 11862 11863 type carray_bind1 = struct { 11864 FaData uintptr 11865 FnData int32 11866 FmFlags int32 11867 FxDel uintptr 11868 } 11869 11870 type carray_bind = carray_bind1 11871 11872 type carray_cursor1 = struct { 11873 Fbase sqlite3_vtab_cursor 11874 FiRowid sqlite3_int64 11875 FpPtr uintptr 11876 FiCnt sqlite3_int64 11877 FeType uint8 11878 F__ccgo_pad1 [7]byte 11879 } 11880 11881 type carray_cursor = carray_cursor1 11882 11883 func carrayConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 11884 var pNew uintptr 11885 var rc int32 11886 11887 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 11888 ts+3985) 11889 if rc == SQLITE_OK { 11890 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 11891 if pNew == uintptr(0) { 11892 return SQLITE_NOMEM 11893 } 11894 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 11895 } 11896 return rc 11897 } 11898 11899 func carrayDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 11900 sqlite3.Xsqlite3_free(tls, pVtab) 11901 return SQLITE_OK 11902 } 11903 11904 func carrayOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 11905 var pCur uintptr 11906 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(carray_cursor{}))) 11907 if pCur == uintptr(0) { 11908 return SQLITE_NOMEM 11909 } 11910 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(carray_cursor{}))) 11911 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 11912 return SQLITE_OK 11913 } 11914 11915 func carrayClose(tls *libc.TLS, cur uintptr) int32 { 11916 sqlite3.Xsqlite3_free(tls, cur) 11917 return SQLITE_OK 11918 } 11919 11920 func carrayNext(tls *libc.TLS, cur uintptr) int32 { 11921 var pCur uintptr = cur 11922 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid++ 11923 return SQLITE_OK 11924 } 11925 11926 func carrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 11927 var pCur uintptr = cur 11928 var x sqlite3_int64 = int64(0) 11929 switch i { 11930 case CARRAY_COLUMN_POINTER: 11931 return SQLITE_OK 11932 case CARRAY_COLUMN_COUNT: 11933 x = (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt 11934 break 11935 case CARRAY_COLUMN_CTYPE: 11936 { 11937 sqlite3.Xsqlite3_result_text(tls, ctx, azType[(*carray_cursor)(unsafe.Pointer(pCur)).FeType], -1, uintptr(0)) 11938 return SQLITE_OK 11939 11940 } 11941 default: 11942 { 11943 switch int32((*carray_cursor)(unsafe.Pointer(pCur)).FeType) { 11944 case CARRAY_INT32: 11945 { 11946 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11947 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*4))) 11948 return SQLITE_OK 11949 11950 } 11951 case CARRAY_INT64: 11952 { 11953 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11954 sqlite3.Xsqlite3_result_int64(tls, ctx, *(*sqlite3_int64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 11955 return SQLITE_OK 11956 11957 } 11958 case CARRAY_DOUBLE: 11959 { 11960 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11961 sqlite3.Xsqlite3_result_double(tls, ctx, *(*float64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 11962 return SQLITE_OK 11963 11964 } 11965 case CARRAY_TEXT: 11966 { 11967 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 11968 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8)), -1, libc.UintptrFromInt32(-1)) 11969 return SQLITE_OK 11970 11971 } 11972 } 11973 11974 } 11975 } 11976 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 11977 return SQLITE_OK 11978 } 11979 11980 func carrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 11981 var pCur uintptr = cur 11982 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid 11983 return SQLITE_OK 11984 } 11985 11986 func carrayEof(tls *libc.TLS, cur uintptr) int32 { 11987 var pCur uintptr = cur 11988 return libc.Bool32((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid > (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt) 11989 } 11990 11991 func carrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 11992 bp := tls.Alloc(8) 11993 defer tls.Free(8) 11994 11995 var pCur uintptr = pVtabCursor 11996 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = uintptr(0) 11997 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = int64(0) 11998 switch idxNum { 11999 case 1: 12000 { 12001 var pBind uintptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4048) 12002 if pBind == uintptr(0) { 12003 break 12004 } 12005 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = (*carray_bind)(unsafe.Pointer(pBind)).FaData 12006 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = sqlite3_int64((*carray_bind)(unsafe.Pointer(pBind)).FnData) 12007 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8((*carray_bind)(unsafe.Pointer(pBind)).FmFlags & 0x03) 12008 break 12009 12010 } 12011 case 2: 12012 fallthrough 12013 case 3: 12014 { 12015 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4060) 12016 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = func() int64 { 12017 if (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr != 0 { 12018 return sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 12019 } 12020 return int64(0) 12021 }() 12022 if idxNum < 3 { 12023 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8(CARRAY_INT32) 12024 } else { 12025 var i uint8 12026 var zType uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 12027 for i = uint8(0); uint64(i) < uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 12028 if sqlite3.Xsqlite3_stricmp(tls, zType, azType[i]) == 0 { 12029 break 12030 } 12031 } 12032 if uint64(i) >= uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))) { 12033 (*sqlite3_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 12034 ts+4067, libc.VaList(bp, zType)) 12035 return SQLITE_ERROR 12036 } else { 12037 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = i 12038 } 12039 } 12040 break 12041 12042 } 12043 } 12044 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 12045 return SQLITE_OK 12046 } 12047 12048 func carrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 12049 var i int32 12050 var ptrIdx int32 = -1 12051 var cntIdx int32 = -1 12052 var ctypeIdx int32 = -1 12053 12054 var pConstraint uintptr 12055 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 12056 i = 0 12057 __1: 12058 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 12059 goto __3 12060 } 12061 { 12062 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 12063 goto __2 12064 } 12065 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 12066 goto __2 12067 } 12068 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 12069 case CARRAY_COLUMN_POINTER: 12070 ptrIdx = i 12071 break 12072 case CARRAY_COLUMN_COUNT: 12073 cntIdx = i 12074 break 12075 case CARRAY_COLUMN_CTYPE: 12076 ctypeIdx = i 12077 break 12078 } 12079 12080 } 12081 goto __2 12082 __2: 12083 i++ 12084 pConstraint += 12 12085 goto __1 12086 goto __3 12087 __3: 12088 ; 12089 if ptrIdx >= 0 { 12090 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).FargvIndex = 1 12091 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).Fomit = uint8(1) 12092 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 12093 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(100) 12094 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 12095 if cntIdx >= 0 { 12096 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).FargvIndex = 2 12097 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).Fomit = uint8(1) 12098 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 12099 if ctypeIdx >= 0 { 12100 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).FargvIndex = 3 12101 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).Fomit = uint8(1) 12102 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 3 12103 } 12104 } 12105 } else { 12106 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2147483647) 12107 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 12108 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 12109 } 12110 return SQLITE_OK 12111 } 12112 12113 var carrayModule = sqlite3_module{ 12114 FxConnect: 0, 12115 FxBestIndex: 0, 12116 FxDisconnect: 0, 12117 FxOpen: 0, 12118 FxClose: 0, 12119 FxFilter: 0, 12120 FxNext: 0, 12121 FxEof: 0, 12122 FxColumn: 0, 12123 FxRowid: 0, 12124 } 12125 12126 func carrayBindDel(tls *libc.TLS, pPtr uintptr) { 12127 var p uintptr = pPtr 12128 if (*carray_bind)(unsafe.Pointer(p)).FxDel != uintptr(0) { 12129 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*carray_bind)(unsafe.Pointer(p)).FxDel})).f(tls, (*carray_bind)(unsafe.Pointer(p)).FaData) 12130 } 12131 sqlite3.Xsqlite3_free(tls, p) 12132 } 12133 12134 func sqlite3_carray_bind(tls *libc.TLS, pStmt uintptr, idx int32, aData uintptr, nData int32, mFlags int32, xDestroy uintptr) int32 { 12135 var pNew uintptr 12136 var i int32 12137 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(carray_bind{}))) 12138 if pNew == uintptr(0) { 12139 if xDestroy != uintptr(0) && xDestroy != libc.UintptrFromInt32(-1) { 12140 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, aData) 12141 } 12142 return SQLITE_NOMEM 12143 } 12144 (*carray_bind)(unsafe.Pointer(pNew)).FnData = nData 12145 (*carray_bind)(unsafe.Pointer(pNew)).FmFlags = mFlags 12146 if xDestroy == libc.UintptrFromInt32(-1) { 12147 var sz sqlite3_int64 = sqlite3_int64(nData) 12148 switch mFlags & 0x03 { 12149 case CARRAY_INT32: 12150 sz = sz * int64(4) 12151 break 12152 fallthrough 12153 case CARRAY_INT64: 12154 sz = sz * int64(8) 12155 break 12156 fallthrough 12157 case CARRAY_DOUBLE: 12158 sz = sz * int64(8) 12159 break 12160 fallthrough 12161 case CARRAY_TEXT: 12162 sz = int64(uint64(sz) * uint64(unsafe.Sizeof(uintptr(0)))) 12163 break 12164 } 12165 if mFlags&0x03 == CARRAY_TEXT { 12166 for i = 0; i < nData; i++ { 12167 var z uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 12168 if z != 0 { 12169 sz = sqlite3_int64(uint64(sz) + (libc.Xstrlen(tls, z) + uint64(1))) 12170 } 12171 } 12172 } 12173 (*carray_bind)(unsafe.Pointer(pNew)).FaData = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 12174 if (*carray_bind)(unsafe.Pointer(pNew)).FaData == uintptr(0) { 12175 sqlite3.Xsqlite3_free(tls, pNew) 12176 return SQLITE_NOMEM 12177 } 12178 if mFlags&0x03 == CARRAY_TEXT { 12179 var az uintptr = (*carray_bind)(unsafe.Pointer(pNew)).FaData 12180 var z uintptr = az + uintptr(nData)*8 12181 for i = 0; i < nData; i++ { 12182 var zData uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 12183 var n sqlite3_int64 12184 if zData == uintptr(0) { 12185 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = uintptr(0) 12186 continue 12187 } 12188 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = z 12189 n = sqlite3_int64(libc.Xstrlen(tls, zData)) 12190 libc.Xmemcpy(tls, z, zData, uint64(n+int64(1))) 12191 z += uintptr(n + int64(1)) 12192 } 12193 } else { 12194 libc.Xmemcpy(tls, (*carray_bind)(unsafe.Pointer(pNew)).FaData, aData, uint64(sz)) 12195 } 12196 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 12197 } else { 12198 (*carray_bind)(unsafe.Pointer(pNew)).FaData = aData 12199 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = xDestroy 12200 } 12201 return sqlite3.Xsqlite3_bind_pointer(tls, pStmt, idx, pNew, ts+4048, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{carrayBindDel}))) 12202 } 12203 12204 func inttoptrFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 12205 bp := tls.Alloc(20) 12206 defer tls.Free(20) 12207 12208 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 12209 if uint64(unsafe.Sizeof(sqlite3_int64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 12210 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 12211 } else { 12212 *(*int32)(unsafe.Pointer(bp + 16)) = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)) & int64(0xffffffff)) 12213 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 12214 } 12215 sqlite3.Xsqlite3_result_pointer(tls, context, *(*uintptr)(unsafe.Pointer(bp)), ts+4060, uintptr(0)) 12216 } 12217 12218 func sqlite3_carray_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 12219 var rc int32 = SQLITE_OK 12220 _ = pApi 12221 12222 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4060, uintptr(unsafe.Pointer(&carrayModule)), uintptr(0)) 12223 if rc == SQLITE_OK { 12224 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4088, 1, SQLITE_UTF8, uintptr(0), 12225 *(*uintptr)(unsafe.Pointer(&struct { 12226 f func(*libc.TLS, uintptr, int32, uintptr) 12227 }{inttoptrFunc})), uintptr(0), uintptr(0)) 12228 } 12229 return rc 12230 } 12231 12232 type CksmVfs = sqlite3_vfs1 12233 type CksmFile1 = struct { 12234 Fbase sqlite3_file 12235 FzFName uintptr 12236 FcomputeCksm uint8 12237 FverifyCksm uint8 12238 FisWal uint8 12239 FinCkpt uint8 12240 F__ccgo_pad1 [4]byte 12241 FpPartner uintptr 12242 } 12243 12244 type CksmFile = CksmFile1 12245 12246 type u8 = uint8 12247 12248 var cksm_vfs = sqlite3_vfs{ 12249 FiVersion: 3, 12250 FmxPathname: 1024, 12251 FzName: ts + 4097, 12252 FxOpen: 0, 12253 FxDelete: 0, 12254 FxAccess: 0, 12255 FxFullPathname: 0, 12256 FxDlOpen: 0, 12257 FxDlError: 0, 12258 FxDlSym: 0, 12259 FxDlClose: 0, 12260 FxRandomness: 0, 12261 FxSleep: 0, 12262 FxCurrentTime: 0, 12263 FxGetLastError: 0, 12264 FxCurrentTimeInt64: 0, 12265 FxSetSystemCall: 0, 12266 FxGetSystemCall: 0, 12267 FxNextSystemCall: 0, 12268 } 12269 12270 var cksm_io_methods = sqlite3_io_methods{ 12271 FiVersion: 3, 12272 FxClose: 0, 12273 FxRead: 0, 12274 FxWrite: 0, 12275 FxTruncate: 0, 12276 FxSync: 0, 12277 FxFileSize: 0, 12278 FxLock: 0, 12279 FxUnlock: 0, 12280 FxCheckReservedLock: 0, 12281 FxFileControl: 0, 12282 FxSectorSize: 0, 12283 FxDeviceCharacteristics: 0, 12284 FxShmMap: 0, 12285 FxShmLock: 0, 12286 FxShmBarrier: 0, 12287 FxShmUnmap: 0, 12288 FxFetch: 0, 12289 FxUnfetch: 0, 12290 } 12291 12292 func cksmCompute(tls *libc.TLS, a uintptr, nByte int32, aOut uintptr) { 12293 bp := tls.Alloc(12) 12294 defer tls.Free(12) 12295 12296 *(*u32)(unsafe.Pointer(bp + 4)) = u32(0) 12297 *(*u32)(unsafe.Pointer(bp + 8)) = u32(0) 12298 var aData uintptr = a 12299 var aEnd uintptr = a + uintptr(nByte) 12300 *(*u32)(unsafe.Pointer(bp)) = u32(1) 12301 12302 if 1 == int32(*(*u8)(unsafe.Pointer(bp))) { 12303 for __ccgo := true; __ccgo; __ccgo = aData < aEnd { 12304 *(*u32)(unsafe.Pointer(bp + 4)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 8)) 12305 *(*u32)(unsafe.Pointer(bp + 8)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 4)) 12306 } 12307 } else { 12308 for __ccgo1 := true; __ccgo1; __ccgo1 = aData < aEnd { 12309 *(*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)) 12310 *(*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)) 12311 aData += 4 * uintptr(2) 12312 } 12313 *(*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 12314 *(*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 12315 } 12316 libc.Xmemcpy(tls, aOut, bp+4, uint64(4)) 12317 libc.Xmemcpy(tls, aOut+uintptr(4), bp+8, uint64(4)) 12318 } 12319 12320 func cksmVerifyFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 12321 bp := tls.Alloc(8) 12322 defer tls.Free(8) 12323 12324 var nByte int32 12325 var data uintptr 12326 12327 data = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 12328 if data == uintptr(0) { 12329 return 12330 } 12331 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_BLOB { 12332 return 12333 } 12334 nByte = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 12335 if nByte < 512 || nByte > 65536 || nByte&(nByte-1) != 0 { 12336 return 12337 } 12338 cksmCompute(tls, data, nByte-8, bp) 12339 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(libc.Xmemcmp(tls, data+uintptr(nByte)-uintptr(8), bp, uint64(8)) == 0)) 12340 } 12341 12342 func cksmClose(tls *libc.TLS, pFile uintptr) int32 { 12343 var p uintptr = pFile 12344 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12345 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = uintptr(0) 12346 (*CksmFile)(unsafe.Pointer(p)).FpPartner = uintptr(0) 12347 } 12348 pFile = pFile + uintptr(1)*32 12349 return (*struct { 12350 f func(*libc.TLS, uintptr) int32 12351 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 12352 } 12353 12354 func cksmSetFlags(tls *libc.TLS, p uintptr, hasCorrectReserveSize int32) { 12355 if hasCorrectReserveSize != int32((*CksmFile)(unsafe.Pointer(p)).FcomputeCksm) { 12356 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = libc.AssignPtrUint8(p+17, uint8(hasCorrectReserveSize)) 12357 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12358 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = uint8(hasCorrectReserveSize) 12359 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm = uint8(hasCorrectReserveSize) 12360 } 12361 } 12362 } 12363 12364 func cksmRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 12365 bp := tls.Alloc(24) 12366 defer tls.Free(24) 12367 12368 var rc int32 12369 var p uintptr = pFile 12370 pFile = pFile + uintptr(1)*32 12371 rc = (*struct { 12372 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 12373 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, zBuf, iAmt, iOfst) 12374 if rc == SQLITE_OK { 12375 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 12376 var d uintptr = zBuf 12377 var hasCorrectReserveSize uint8 = uint8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 12378 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 12379 } 12380 12381 if iAmt >= 512 && 12382 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm != 0 && 12383 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 12384 cksmCompute(tls, zBuf, iAmt-8, bp+16) 12385 if libc.Xmemcmp(tls, zBuf+uintptr(iAmt)-uintptr(8), bp+16, uint64(8)) != 0 { 12386 sqlite3.Xsqlite3_log(tls, SQLITE_IOERR|int32(32)<<8, 12387 ts+4109, 12388 libc.VaList(bp, iOfst, (*CksmFile)(unsafe.Pointer(p)).FzFName)) 12389 rc = SQLITE_IOERR | int32(32)<<8 12390 } 12391 } 12392 } 12393 return rc 12394 } 12395 12396 func cksmWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 12397 var p uintptr = pFile 12398 pFile = pFile + uintptr(1)*32 12399 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 12400 var d uintptr = zBuf 12401 var hasCorrectReserveSize uint8 = uint8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 12402 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 12403 } 12404 12405 if iAmt >= 512 && 12406 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && 12407 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 12408 cksmCompute(tls, zBuf, iAmt-8, zBuf+uintptr(iAmt)-uintptr(8)) 12409 } 12410 return (*struct { 12411 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 12412 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, zBuf, iAmt, iOfst) 12413 } 12414 12415 func cksmTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 12416 pFile = pFile + uintptr(1)*32 12417 return (*struct { 12418 f func(*libc.TLS, uintptr, sqlite3_int64) int32 12419 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxTruncate})).f(tls, pFile, size) 12420 } 12421 12422 func cksmSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 12423 pFile = pFile + uintptr(1)*32 12424 return (*struct { 12425 f func(*libc.TLS, uintptr, int32) int32 12426 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 12427 } 12428 12429 func cksmFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 12430 var p uintptr = pFile 12431 pFile = p + uintptr(1)*32 12432 return (*struct { 12433 f func(*libc.TLS, uintptr, uintptr) int32 12434 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileSize})).f(tls, pFile, pSize) 12435 } 12436 12437 func cksmLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 12438 pFile = pFile + uintptr(1)*32 12439 return (*struct { 12440 f func(*libc.TLS, uintptr, int32) int32 12441 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 12442 } 12443 12444 func cksmUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 12445 pFile = pFile + uintptr(1)*32 12446 return (*struct { 12447 f func(*libc.TLS, uintptr, int32) int32 12448 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 12449 } 12450 12451 func cksmCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 12452 pFile = pFile + uintptr(1)*32 12453 return (*struct { 12454 f func(*libc.TLS, uintptr, uintptr) int32 12455 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 12456 } 12457 12458 func cksmFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 12459 bp := tls.Alloc(16) 12460 defer tls.Free(16) 12461 12462 var rc int32 12463 var p uintptr = pFile 12464 pFile = pFile + uintptr(1)*32 12465 if op == SQLITE_FCNTL_PRAGMA { 12466 var azArg uintptr = pArg 12467 12468 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4144) == 0 { 12469 var zArg uintptr = *(*uintptr)(unsafe.Pointer(azArg + 2*8)) 12470 if zArg != uintptr(0) { 12471 if int32(*(*uint8)(unsafe.Pointer(zArg))) >= '1' && int32(*(*uint8)(unsafe.Pointer(zArg))) <= '9' || 12472 sqlite3.Xsqlite3_strlike(tls, ts+4166, zArg, uint32(0)) == 0 || 12473 sqlite3.Xsqlite3_stricmp(tls, ts+4174, zArg) == 0 || 12474 sqlite3.Xsqlite3_stricmp(tls, ts+4178, zArg) == 0 { 12475 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm 12476 } else { 12477 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = uint8(0) 12478 } 12479 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12480 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FverifyCksm 12481 } 12482 } 12483 *(*uintptr)(unsafe.Pointer(azArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, int32((*CksmFile)(unsafe.Pointer(p)).FverifyCksm))) 12484 return SQLITE_OK 12485 } else if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && *(*uintptr)(unsafe.Pointer(azArg + 2*8)) != uintptr(0) && 12486 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4181) == 0 { 12487 return SQLITE_OK 12488 } 12489 } else if op == SQLITE_FCNTL_CKPT_START || op == SQLITE_FCNTL_CKPT_DONE { 12490 (*CksmFile)(unsafe.Pointer(p)).FinCkpt = uint8(libc.Bool32(op == SQLITE_FCNTL_CKPT_START)) 12491 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 12492 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FinCkpt = (*CksmFile)(unsafe.Pointer(p)).FinCkpt 12493 } 12494 } else if op == SQLITE_FCNTL_CKSM_FILE { 12495 var ppFile uintptr = pArg 12496 *(*uintptr)(unsafe.Pointer(ppFile)) = p 12497 return SQLITE_OK 12498 } 12499 rc = (*struct { 12500 f func(*libc.TLS, uintptr, int32, uintptr) int32 12501 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 12502 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 12503 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+4191, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(pArg)))) 12504 } 12505 return rc 12506 } 12507 12508 func cksmSectorSize(tls *libc.TLS, pFile uintptr) int32 { 12509 pFile = pFile + uintptr(1)*32 12510 return (*struct { 12511 f func(*libc.TLS, uintptr) int32 12512 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 12513 } 12514 12515 func cksmDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 12516 pFile = pFile + uintptr(1)*32 12517 return (*struct { 12518 f func(*libc.TLS, uintptr) int32 12519 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 12520 } 12521 12522 func cksmShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 12523 pFile = pFile + uintptr(1)*32 12524 return (*struct { 12525 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 12526 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 12527 } 12528 12529 func cksmShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 12530 pFile = pFile + uintptr(1)*32 12531 return (*struct { 12532 f func(*libc.TLS, uintptr, int32, int32, int32) int32 12533 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 12534 } 12535 12536 func cksmShmBarrier(tls *libc.TLS, pFile uintptr) { 12537 pFile = pFile + uintptr(1)*32 12538 (*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) 12539 } 12540 12541 func cksmShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 12542 pFile = pFile + uintptr(1)*32 12543 return (*struct { 12544 f func(*libc.TLS, uintptr, int32) int32 12545 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 12546 } 12547 12548 func cksmFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 12549 var p uintptr = pFile 12550 if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 { 12551 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 12552 return SQLITE_OK 12553 } 12554 pFile = pFile + uintptr(1)*32 12555 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 { 12556 return (*struct { 12557 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 12558 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch})).f(tls, pFile, iOfst, iAmt, pp) 12559 } 12560 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 12561 return SQLITE_OK 12562 } 12563 12564 func cksmUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 12565 pFile = pFile + uintptr(1)*32 12566 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 { 12567 return (*struct { 12568 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 12569 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch})).f(tls, pFile, iOfst, pPage) 12570 } 12571 return SQLITE_OK 12572 } 12573 12574 func cksmOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 12575 bp := tls.Alloc(8) 12576 defer tls.Free(8) 12577 12578 var p uintptr 12579 var pSubFile uintptr 12580 var pSubVfs uintptr 12581 var rc int32 12582 12583 pSubVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 12584 if !(flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0) { 12585 goto __1 12586 } 12587 return (*struct { 12588 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 12589 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pFile, flags, pOutFlags) 12590 __1: 12591 ; 12592 p = pFile 12593 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CksmFile{}))) 12594 pSubFile = pFile + uintptr(1)*32 12595 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&cksm_io_methods)) 12596 rc = (*struct { 12597 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 12598 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pSubFile, flags, pOutFlags) 12599 if !(rc != 0) { 12600 goto __2 12601 } 12602 goto cksm_open_done 12603 __2: 12604 ; 12605 if !(flags&SQLITE_OPEN_WAL != 0) { 12606 goto __3 12607 } 12608 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_database_file_object(tls, zName) 12609 rc = (*struct { 12610 f func(*libc.TLS, uintptr, int32, uintptr) int32 12611 })(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) 12612 12613 (*CksmFile)(unsafe.Pointer(p)).FpPartner = *(*uintptr)(unsafe.Pointer(bp)) 12614 12615 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = p 12616 (*CksmFile)(unsafe.Pointer(p)).FisWal = uint8(1) 12617 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm 12618 goto __4 12619 __3: 12620 (*CksmFile)(unsafe.Pointer(p)).FisWal = uint8(0) 12621 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = uint8(0) 12622 __4: 12623 ; 12624 (*CksmFile)(unsafe.Pointer(p)).FzFName = zName 12625 cksm_open_done: 12626 if !(rc != 0) { 12627 goto __5 12628 } 12629 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 12630 __5: 12631 ; 12632 return rc 12633 } 12634 12635 func cksmDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 12636 return (*struct { 12637 f func(*libc.TLS, uintptr, uintptr, int32) int32 12638 })(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) 12639 } 12640 12641 func cksmAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 12642 return (*struct { 12643 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 12644 })(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) 12645 } 12646 12647 func cksmFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 12648 return (*struct { 12649 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 12650 })(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) 12651 } 12652 12653 func cksmDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 12654 return (*struct { 12655 f func(*libc.TLS, uintptr, uintptr) uintptr 12656 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 12657 } 12658 12659 func cksmDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 12660 (*struct { 12661 f func(*libc.TLS, uintptr, int32, uintptr) 12662 })(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) 12663 } 12664 12665 func cksmDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 12666 return (*struct { 12667 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 12668 })(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) 12669 } 12670 12671 func cksmDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 12672 (*struct { 12673 f func(*libc.TLS, uintptr, uintptr) 12674 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 12675 } 12676 12677 func cksmRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 12678 return (*struct { 12679 f func(*libc.TLS, uintptr, int32, uintptr) int32 12680 })(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) 12681 } 12682 12683 func cksmSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 12684 return (*struct { 12685 f func(*libc.TLS, uintptr, int32) int32 12686 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 12687 } 12688 12689 func cksmCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 12690 return (*struct { 12691 f func(*libc.TLS, uintptr, uintptr) int32 12692 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 12693 } 12694 12695 func cksmGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 12696 return (*struct { 12697 f func(*libc.TLS, uintptr, int32, uintptr) int32 12698 })(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) 12699 } 12700 12701 func cksmCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 12702 bp := tls.Alloc(8) 12703 defer tls.Free(8) 12704 12705 var pOrig uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 12706 var rc int32 12707 12708 if (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64 != 0 { 12709 rc = (*struct { 12710 f func(*libc.TLS, uintptr, uintptr) int32 12711 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64})).f(tls, pOrig, p) 12712 } else { 12713 rc = (*struct { 12714 f func(*libc.TLS, uintptr, uintptr) int32 12715 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTime})).f(tls, pOrig, bp) 12716 *(*sqlite3_int64)(unsafe.Pointer(p)) = libc.Int64FromFloat64(*(*float64)(unsafe.Pointer(bp)) * 86400000.0) 12717 } 12718 return rc 12719 } 12720 12721 func cksmSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 12722 return (*struct { 12723 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 12724 })(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) 12725 } 12726 12727 func cksmGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 12728 return (*struct { 12729 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 12730 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 12731 } 12732 12733 func cksmNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 12734 return (*struct { 12735 f func(*libc.TLS, uintptr, uintptr) uintptr 12736 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 12737 } 12738 12739 func cksmRegisterFunc(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 12740 var rc int32 12741 if db == uintptr(0) { 12742 return SQLITE_OK 12743 } 12744 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4199, 1, 12745 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 12746 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 12747 f func(*libc.TLS, uintptr, int32, uintptr) 12748 }{cksmVerifyFunc})), uintptr(0), uintptr(0)) 12749 return rc 12750 } 12751 12752 func cksmRegisterVfs(tls *libc.TLS) int32 { 12753 var rc int32 = SQLITE_OK 12754 var pOrig uintptr 12755 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != uintptr(0) { 12756 return SQLITE_OK 12757 } 12758 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 12759 if pOrig == uintptr(0) { 12760 return SQLITE_ERROR 12761 } 12762 cksm_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 12763 cksm_vfs.FpAppData = pOrig 12764 cksm_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(CksmFile{}))) 12765 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&cksm_vfs)), 1) 12766 if rc == SQLITE_OK { 12767 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 12768 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 12769 }{cksmRegisterFunc}))) 12770 } 12771 return rc 12772 } 12773 12774 func sqlite3_register_cksumvfs(tls *libc.TLS, NotUsed uintptr) int32 { 12775 _ = NotUsed 12776 return cksmRegisterVfs(tls) 12777 } 12778 12779 func sqlite3_unregister_cksumvfs(tls *libc.TLS) int32 { 12780 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != 0 { 12781 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&cksm_vfs))) 12782 sqlite3.Xsqlite3_cancel_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 12783 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 12784 }{cksmRegisterFunc}))) 12785 } 12786 return SQLITE_OK 12787 } 12788 12789 type closure_vtab1 = struct { 12790 Fbase sqlite3_vtab 12791 FzDb uintptr 12792 FzSelf uintptr 12793 FzTableName uintptr 12794 FzIdColumn uintptr 12795 FzParentColumn uintptr 12796 Fdb uintptr 12797 FnCursor int32 12798 F__ccgo_pad1 [4]byte 12799 } 12800 12801 type closure_vtab = closure_vtab1 12802 type closure_cursor1 = struct { 12803 Fbase sqlite3_vtab_cursor 12804 FpVtab uintptr 12805 FzTableName uintptr 12806 FzIdColumn uintptr 12807 FzParentColumn uintptr 12808 FpCurrent uintptr 12809 FpClosure uintptr 12810 } 12811 12812 type closure_cursor = closure_cursor1 12813 type closure_queue1 = struct { 12814 FpFirst uintptr 12815 FpLast uintptr 12816 } 12817 12818 type closure_queue = closure_queue1 12819 type closure_avl1 = struct { 12820 Fid sqlite3_int64 12821 FiGeneration int32 12822 F__ccgo_pad1 [4]byte 12823 FpList uintptr 12824 FpBefore uintptr 12825 FpAfter uintptr 12826 FpUp uintptr 12827 Fheight int16 12828 Fimbalance int16 12829 F__ccgo_pad2 [4]byte 12830 } 12831 12832 type closure_avl = closure_avl1 12833 12834 func closureAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 12835 var hBefore int16 12836 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12837 hBefore = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 12838 } else { 12839 hBefore = int16(0) 12840 } 12841 var hAfter int16 12842 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12843 hAfter = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 12844 } else { 12845 hAfter = int16(0) 12846 } 12847 (*closure_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 12848 (*closure_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 12849 if int32(hBefore) > int32(hAfter) { 12850 return int32(hBefore) 12851 } 12852 return int32(hAfter) 12853 }() + 1) 12854 } 12855 12856 func closureAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 12857 var pB uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpBefore 12858 var pY uintptr = (*closure_avl)(unsafe.Pointer(pB)).FpAfter 12859 (*closure_avl)(unsafe.Pointer(pB)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 12860 (*closure_avl)(unsafe.Pointer(pB)).FpAfter = pP 12861 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pB 12862 (*closure_avl)(unsafe.Pointer(pP)).FpBefore = pY 12863 if pY != 0 { 12864 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 12865 } 12866 closureAvlRecomputeHeight(tls, pP) 12867 closureAvlRecomputeHeight(tls, pB) 12868 return pB 12869 } 12870 12871 func closureAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 12872 var pA uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpAfter 12873 var pY uintptr = (*closure_avl)(unsafe.Pointer(pA)).FpBefore 12874 (*closure_avl)(unsafe.Pointer(pA)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 12875 (*closure_avl)(unsafe.Pointer(pA)).FpBefore = pP 12876 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pA 12877 (*closure_avl)(unsafe.Pointer(pP)).FpAfter = pY 12878 if pY != 0 { 12879 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 12880 } 12881 closureAvlRecomputeHeight(tls, pP) 12882 closureAvlRecomputeHeight(tls, pA) 12883 return pA 12884 } 12885 12886 func closureAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 12887 var pUp uintptr = (*closure_avl)(unsafe.Pointer(p)).FpUp 12888 if pUp == uintptr(0) { 12889 return pp 12890 } 12891 if (*closure_avl)(unsafe.Pointer(pUp)).FpAfter == p { 12892 return pUp + 32 12893 } 12894 return pUp + 24 12895 } 12896 12897 func closureAvlBalance(tls *libc.TLS, p uintptr) uintptr { 12898 bp := tls.Alloc(8) 12899 defer tls.Free(8) 12900 *(*uintptr)(unsafe.Pointer(bp)) = p 12901 12902 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 12903 var pp uintptr 12904 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 12905 closureAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 12906 if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 12907 var pB uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 12908 if int32((*closure_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 12909 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = closureAvlRotateAfter(tls, pB) 12910 } 12911 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12912 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12913 } else if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 12914 var pA uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 12915 if int32((*closure_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 12916 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = closureAvlRotateBefore(tls, pA) 12917 } 12918 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12919 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12920 } 12921 pTop = *(*uintptr)(unsafe.Pointer(bp)) 12922 *(*uintptr)(unsafe.Pointer(bp)) = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 12923 } 12924 return pTop 12925 } 12926 12927 func closureAvlSearch(tls *libc.TLS, p uintptr, id sqlite3_int64) uintptr { 12928 for p != 0 && id != (*closure_avl)(unsafe.Pointer(p)).Fid { 12929 if id < (*closure_avl)(unsafe.Pointer(p)).Fid { 12930 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12931 } else { 12932 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 12933 } 12934 } 12935 return p 12936 } 12937 12938 func closureAvlFirst(tls *libc.TLS, p uintptr) uintptr { 12939 if p != 0 { 12940 for (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12941 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12942 } 12943 } 12944 return p 12945 } 12946 12947 func closureAvlNext(tls *libc.TLS, p uintptr) uintptr { 12948 var pPrev uintptr = uintptr(0) 12949 for p != 0 && (*closure_avl)(unsafe.Pointer(p)).FpAfter == pPrev { 12950 pPrev = p 12951 p = (*closure_avl)(unsafe.Pointer(p)).FpUp 12952 } 12953 if p != 0 && pPrev == uintptr(0) { 12954 p = closureAvlFirst(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter) 12955 } 12956 return p 12957 } 12958 12959 func closureAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 12960 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 12961 if p == uintptr(0) { 12962 p = pNew 12963 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 12964 } else { 12965 for p != 0 { 12966 if (*closure_avl)(unsafe.Pointer(pNew)).Fid < (*closure_avl)(unsafe.Pointer(p)).Fid { 12967 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12968 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 12969 } else { 12970 (*closure_avl)(unsafe.Pointer(p)).FpBefore = pNew 12971 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 12972 break 12973 } 12974 } else if (*closure_avl)(unsafe.Pointer(pNew)).Fid > (*closure_avl)(unsafe.Pointer(p)).Fid { 12975 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12976 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 12977 } else { 12978 (*closure_avl)(unsafe.Pointer(p)).FpAfter = pNew 12979 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 12980 break 12981 } 12982 } else { 12983 return p 12984 } 12985 } 12986 } 12987 (*closure_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 12988 (*closure_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 12989 (*closure_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 12990 (*closure_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 12991 *(*uintptr)(unsafe.Pointer(ppHead)) = closureAvlBalance(tls, p) 12992 return uintptr(0) 12993 } 12994 12995 func closureAvlDestroy(tls *libc.TLS, p uintptr, xDestroy uintptr) { 12996 if p != 0 { 12997 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpBefore, xDestroy) 12998 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter, xDestroy) 12999 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, p) 13000 } 13001 } 13002 13003 func queuePush(tls *libc.TLS, pQueue uintptr, pNode uintptr) { 13004 (*closure_avl)(unsafe.Pointer(pNode)).FpList = uintptr(0) 13005 if (*closure_queue)(unsafe.Pointer(pQueue)).FpLast != 0 { 13006 (*closure_avl)(unsafe.Pointer((*closure_queue)(unsafe.Pointer(pQueue)).FpLast)).FpList = pNode 13007 } else { 13008 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = pNode 13009 } 13010 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = pNode 13011 } 13012 13013 func queuePull(tls *libc.TLS, pQueue uintptr) uintptr { 13014 var p uintptr = (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst 13015 if p != 0 { 13016 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = (*closure_avl)(unsafe.Pointer(p)).FpList 13017 if (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst == uintptr(0) { 13018 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = uintptr(0) 13019 } 13020 } 13021 return p 13022 } 13023 13024 func closureDequote(tls *libc.TLS, zIn uintptr) uintptr { 13025 var nIn sqlite3_int64 13026 var zOut uintptr 13027 13028 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 13029 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 13030 if zOut != 0 { 13031 var q uint8 = *(*uint8)(unsafe.Pointer(zIn)) 13032 13033 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 13034 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 13035 } else { 13036 var iOut int32 = 0 13037 var iIn int32 13038 13039 if int32(q) == '[' { 13040 q = uint8(']') 13041 } 13042 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 13043 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 13044 iIn++ 13045 } 13046 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(zIn + uintptr(iIn))) 13047 } 13048 } 13049 13050 } 13051 return zOut 13052 } 13053 13054 func closureFree(tls *libc.TLS, p uintptr) { 13055 if p != 0 { 13056 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzDb) 13057 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzSelf) 13058 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzTableName) 13059 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzIdColumn) 13060 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzParentColumn) 13061 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 13062 sqlite3.Xsqlite3_free(tls, p) 13063 } 13064 } 13065 13066 func closureDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 13067 var p uintptr = pVtab 13068 13069 closureFree(tls, p) 13070 return SQLITE_OK 13071 } 13072 13073 func closureValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 13074 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 13075 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 13076 var i int32 13077 if nStr < nKey+1 { 13078 return uintptr(0) 13079 } 13080 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 13081 return uintptr(0) 13082 } 13083 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++ { 13084 } 13085 if int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 13086 return uintptr(0) 13087 } 13088 i++ 13089 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 { 13090 i++ 13091 } 13092 return zStr + uintptr(i) 13093 } 13094 13095 func closureConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13096 bp := tls.Alloc(24) 13097 defer tls.Free(24) 13098 13099 var rc int32 13100 var pNew uintptr 13101 var zDb uintptr 13102 var zVal uintptr 13103 var i int32 13104 rc = SQLITE_OK 13105 pNew = uintptr(0) 13106 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 13107 13108 _ = pAux 13109 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 13110 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_vtab{}))) 13111 if !(pNew == uintptr(0)) { 13112 goto __1 13113 } 13114 return SQLITE_NOMEM 13115 __1: 13116 ; 13117 rc = SQLITE_NOMEM 13118 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_vtab{}))) 13119 (*closure_vtab)(unsafe.Pointer(pNew)).Fdb = db 13120 (*closure_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zDb)) 13121 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 13122 goto __2 13123 } 13124 goto closureConnectError 13125 __2: 13126 ; 13127 (*closure_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 13128 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 13129 goto __3 13130 } 13131 goto closureConnectError 13132 __3: 13133 ; 13134 i = 3 13135 __4: 13136 if !(i < argc) { 13137 goto __6 13138 } 13139 zVal = closureValueOfKey(tls, ts+4215, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 13140 if !(zVal != 0) { 13141 goto __7 13142 } 13143 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName) 13144 (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName = closureDequote(tls, zVal) 13145 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0)) { 13146 goto __8 13147 } 13148 goto closureConnectError 13149 __8: 13150 ; 13151 goto __5 13152 __7: 13153 ; 13154 zVal = closureValueOfKey(tls, ts+4225, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 13155 if !(zVal != 0) { 13156 goto __9 13157 } 13158 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn) 13159 (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn = closureDequote(tls, zVal) 13160 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn == uintptr(0)) { 13161 goto __10 13162 } 13163 goto closureConnectError 13164 __10: 13165 ; 13166 goto __5 13167 __9: 13168 ; 13169 zVal = closureValueOfKey(tls, ts+4234, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 13170 if !(zVal != 0) { 13171 goto __11 13172 } 13173 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn) 13174 (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn = closureDequote(tls, zVal) 13175 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn == uintptr(0)) { 13176 goto __12 13177 } 13178 goto closureConnectError 13179 __12: 13180 ; 13181 goto __5 13182 __11: 13183 ; 13184 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 13185 closureFree(tls, pNew) 13186 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 13187 return SQLITE_ERROR 13188 goto __5 13189 __5: 13190 i++ 13191 goto __4 13192 goto __6 13193 __6: 13194 ; 13195 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 13196 ts+4247) 13197 if !(rc != SQLITE_OK) { 13198 goto __13 13199 } 13200 closureFree(tls, pNew) 13201 __13: 13202 ; 13203 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 13204 return rc 13205 13206 closureConnectError: 13207 closureFree(tls, pNew) 13208 return rc 13209 } 13210 13211 func closureOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 13212 var p uintptr = pVTab 13213 var pCur uintptr 13214 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_cursor{}))) 13215 if pCur == uintptr(0) { 13216 return SQLITE_NOMEM 13217 } 13218 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(closure_cursor{}))) 13219 (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab = p 13220 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 13221 (*closure_vtab)(unsafe.Pointer(p)).FnCursor++ 13222 return SQLITE_OK 13223 } 13224 13225 func closureClearCursor(tls *libc.TLS, pCur uintptr) { 13226 closureAvlDestroy(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 13227 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName) 13228 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn) 13229 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn) 13230 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = uintptr(0) 13231 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = uintptr(0) 13232 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = uintptr(0) 13233 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 13234 (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure = uintptr(0) 13235 } 13236 13237 func closureClose(tls *libc.TLS, cur uintptr) int32 { 13238 var pCur uintptr = cur 13239 closureClearCursor(tls, pCur) 13240 (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 13241 sqlite3.Xsqlite3_free(tls, pCur) 13242 return SQLITE_OK 13243 } 13244 13245 func closureNext(tls *libc.TLS, cur uintptr) int32 { 13246 var pCur uintptr = cur 13247 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlNext(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent) 13248 return SQLITE_OK 13249 } 13250 13251 func closureInsertNode(tls *libc.TLS, pQueue uintptr, pCur uintptr, id sqlite3_int64, iGeneration int32) int32 { 13252 var pNew uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_avl{}))) 13253 if pNew == uintptr(0) { 13254 return SQLITE_NOMEM 13255 } 13256 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(closure_avl{}))) 13257 (*closure_avl)(unsafe.Pointer(pNew)).Fid = id 13258 (*closure_avl)(unsafe.Pointer(pNew)).FiGeneration = iGeneration 13259 closureAvlInsert(tls, pCur+48, pNew) 13260 queuePush(tls, pQueue, pNew) 13261 return SQLITE_OK 13262 } 13263 13264 func closureFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 13265 bp := tls.Alloc(96) 13266 defer tls.Free(96) 13267 13268 var pCur uintptr = pVtabCursor 13269 var pVtab uintptr = (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab 13270 var iRoot sqlite3_int64 13271 var mxGen int32 = 999999999 13272 var zSql uintptr 13273 13274 var pAvl uintptr 13275 var rc int32 = SQLITE_OK 13276 var zTableName uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName 13277 var zIdColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn 13278 var zParentColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn 13279 13280 _ = idxStr 13281 _ = argc 13282 closureClearCursor(tls, pCur) 13283 libc.Xmemset(tls, bp+72, 0, uint64(unsafe.Sizeof(closure_queue{}))) 13284 if idxNum&1 == 0 { 13285 return SQLITE_OK 13286 } 13287 iRoot = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 13288 if idxNum&0x000f0 != 0 { 13289 mxGen = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>4&0x0f)*8))) 13290 if idxNum&0x00002 != 0 { 13291 mxGen-- 13292 } 13293 } 13294 if idxNum&0x00f00 != 0 { 13295 zTableName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>8&0x0f)*8))) 13296 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 13297 } 13298 if idxNum&0x0f000 != 0 { 13299 zIdColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>12&0x0f)*8))) 13300 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zIdColumn)) 13301 } 13302 if idxNum&0x0f0000 != 0 { 13303 zParentColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>16&0x0f)*8))) 13304 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zParentColumn)) 13305 } 13306 13307 zSql = sqlite3.Xsqlite3_mprintf(tls, 13308 ts+4337, 13309 libc.VaList(bp+24, zTableName, zIdColumn, zTableName, zTableName, zParentColumn)) 13310 if zSql == uintptr(0) { 13311 return SQLITE_NOMEM 13312 } else { 13313 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, bp+88, uintptr(0)) 13314 sqlite3.Xsqlite3_free(tls, zSql) 13315 if rc != 0 { 13316 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fbase.FzErrMsg) 13317 (*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))) 13318 return rc 13319 } 13320 } 13321 if rc == SQLITE_OK { 13322 rc = closureInsertNode(tls, bp+72, pCur, iRoot, 0) 13323 } 13324 for libc.AssignUintptr(&pAvl, queuePull(tls, bp+72)) != uintptr(0) { 13325 if (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration >= mxGen { 13326 continue 13327 } 13328 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 1, (*closure_avl)(unsafe.Pointer(pAvl)).Fid) 13329 for rc == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) == SQLITE_ROW { 13330 if sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) == SQLITE_INTEGER { 13331 var iNew sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) 13332 if closureAvlSearch(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, iNew) == uintptr(0) { 13333 rc = closureInsertNode(tls, bp+72, pCur, iNew, (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration+1) 13334 } 13335 } 13336 } 13337 sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 13338 } 13339 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 13340 if rc == SQLITE_OK { 13341 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlFirst(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure) 13342 } 13343 13344 return rc 13345 } 13346 13347 func closureColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 13348 var pCur uintptr = cur 13349 switch i { 13350 case CLOSURE_COL_ID: 13351 { 13352 sqlite3.Xsqlite3_result_int64(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid) 13353 break 13354 13355 } 13356 case CLOSURE_COL_DEPTH: 13357 { 13358 sqlite3.Xsqlite3_result_int(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FiGeneration) 13359 break 13360 13361 } 13362 case CLOSURE_COL_ROOT: 13363 { 13364 sqlite3.Xsqlite3_result_null(tls, ctx) 13365 break 13366 13367 } 13368 case CLOSURE_COL_TABLENAME: 13369 { 13370 sqlite3.Xsqlite3_result_text(tls, ctx, 13371 func() uintptr { 13372 if (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName != 0 { 13373 return (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName 13374 } 13375 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzTableName 13376 }(), 13377 -1, libc.UintptrFromInt32(-1)) 13378 break 13379 13380 } 13381 case CLOSURE_COL_IDCOLUMN: 13382 { 13383 sqlite3.Xsqlite3_result_text(tls, ctx, 13384 func() uintptr { 13385 if (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn != 0 { 13386 return (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn 13387 } 13388 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzIdColumn 13389 }(), 13390 -1, libc.UintptrFromInt32(-1)) 13391 break 13392 13393 } 13394 case CLOSURE_COL_PARENTCOLUMN: 13395 { 13396 sqlite3.Xsqlite3_result_text(tls, ctx, 13397 func() uintptr { 13398 if (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn != 0 { 13399 return (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn 13400 } 13401 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzParentColumn 13402 }(), 13403 -1, libc.UintptrFromInt32(-1)) 13404 break 13405 13406 } 13407 } 13408 return SQLITE_OK 13409 } 13410 13411 func closureRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13412 var pCur uintptr = cur 13413 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid 13414 return SQLITE_OK 13415 } 13416 13417 func closureEof(tls *libc.TLS, cur uintptr) int32 { 13418 var pCur uintptr = cur 13419 return libc.Bool32((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 13420 } 13421 13422 func closureBestIndex(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) int32 { 13423 var iPlan int32 = 0 13424 var i int32 13425 var idx int32 = 1 13426 var pConstraint uintptr 13427 var pVtab uintptr = pTab 13428 var rCost float64 = 10000000.0 13429 13430 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 13431 i = 0 13432 __1: 13433 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 13434 goto __3 13435 } 13436 { 13437 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 13438 goto __2 13439 } 13440 if iPlan&1 == 0 && 13441 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_ROOT && 13442 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13443 iPlan = iPlan | 1 13444 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 13445 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13446 rCost = rCost / 100.0 13447 } 13448 if iPlan&0x0000f0 == 0 && 13449 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_DEPTH && 13450 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 13451 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE || 13452 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 13453 iPlan = iPlan | idx<<4 13454 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13455 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 13456 iPlan = iPlan | 0x000002 13457 } 13458 rCost = rCost / 5.0 13459 } 13460 if iPlan&0x000f00 == 0 && 13461 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_TABLENAME && 13462 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13463 iPlan = iPlan | idx<<8 13464 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13465 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13466 rCost = rCost / 5.0 13467 } 13468 if iPlan&0x00f000 == 0 && 13469 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_IDCOLUMN && 13470 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13471 iPlan = iPlan | idx<<12 13472 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13473 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13474 } 13475 if iPlan&0x0f0000 == 0 && 13476 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_PARENTCOLUMN && 13477 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13478 iPlan = iPlan | idx<<16 13479 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 13480 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13481 } 13482 13483 } 13484 goto __2 13485 __2: 13486 i++ 13487 pConstraint += 12 13488 goto __1 13489 goto __3 13490 __3: 13491 ; 13492 if (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName == uintptr(0) && iPlan&0x000f00 == 0 || 13493 (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn == uintptr(0) && iPlan&0x00f000 == 0 || 13494 (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn == uintptr(0) && iPlan&0x0f0000 == 0 { 13495 iPlan = 0 13496 } 13497 if iPlan&1 == 0 { 13498 rCost = rCost * 1e30 13499 i = 0 13500 __4: 13501 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 13502 goto __6 13503 } 13504 { 13505 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 0 13506 13507 } 13508 goto __5 13509 __5: 13510 i++ 13511 pConstraint += 12 13512 goto __4 13513 goto __6 13514 __6: 13515 ; 13516 iPlan = 0 13517 } 13518 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 13519 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 13520 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == CLOSURE_COL_ID && 13521 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 13522 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 13523 } 13524 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 13525 13526 return SQLITE_OK 13527 } 13528 13529 var closureModule = sqlite3_module{ 13530 FxCreate: 0, 13531 FxConnect: 0, 13532 FxBestIndex: 0, 13533 FxDisconnect: 0, 13534 FxDestroy: 0, 13535 FxOpen: 0, 13536 FxClose: 0, 13537 FxFilter: 0, 13538 FxNext: 0, 13539 FxEof: 0, 13540 FxColumn: 0, 13541 FxRowid: 0, 13542 } 13543 13544 func sqlite3_closure_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 13545 var rc int32 = SQLITE_OK 13546 _ = pApi 13547 13548 _ = pzErrMsg 13549 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4383, uintptr(unsafe.Pointer(&closureModule)), uintptr(0)) 13550 return rc 13551 } 13552 13553 type CsvReader1 = struct { 13554 Fin uintptr 13555 Fz uintptr 13556 Fn int32 13557 FnAlloc int32 13558 FnLine int32 13559 FbNotFirst int32 13560 FcTerm int32 13561 F__ccgo_pad1 [4]byte 13562 FiIn size_t 13563 FnIn size_t 13564 FzIn uintptr 13565 FzErr [200]uint8 13566 } 13567 13568 type CsvReader = CsvReader1 13569 13570 func csv_reader_init(tls *libc.TLS, p uintptr) { 13571 (*CsvReader)(unsafe.Pointer(p)).Fin = uintptr(0) 13572 (*CsvReader)(unsafe.Pointer(p)).Fz = uintptr(0) 13573 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13574 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = 0 13575 (*CsvReader)(unsafe.Pointer(p)).FnLine = 0 13576 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 0 13577 (*CsvReader)(unsafe.Pointer(p)).FnIn = uint64(0) 13578 (*CsvReader)(unsafe.Pointer(p)).FzIn = uintptr(0) 13579 *(*uint8)(unsafe.Pointer(p + 64)) = uint8(0) 13580 } 13581 13582 func csv_reader_reset(tls *libc.TLS, p uintptr) { 13583 if (*CsvReader)(unsafe.Pointer(p)).Fin != 0 { 13584 libc.Xfclose(tls, (*CsvReader)(unsafe.Pointer(p)).Fin) 13585 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 13586 } 13587 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).Fz) 13588 csv_reader_init(tls, p) 13589 } 13590 13591 func csv_errmsg(tls *libc.TLS, p uintptr, zFormat uintptr, va uintptr) { 13592 var ap va_list 13593 _ = ap 13594 ap = va 13595 sqlite3.Xsqlite3_vsnprintf(tls, CSV_MXERR, p+64, zFormat, ap) 13596 _ = ap 13597 } 13598 13599 func csv_reader_open(tls *libc.TLS, p uintptr, zFilename uintptr, zData uintptr) int32 { 13600 bp := tls.Alloc(8) 13601 defer tls.Free(8) 13602 13603 if zFilename != 0 { 13604 (*CsvReader)(unsafe.Pointer(p)).FzIn = sqlite3.Xsqlite3_malloc(tls, CSV_INBUFSZ) 13605 if (*CsvReader)(unsafe.Pointer(p)).FzIn == uintptr(0) { 13606 csv_errmsg(tls, p, ts+2069, 0) 13607 return 1 13608 } 13609 (*CsvReader)(unsafe.Pointer(p)).Fin = libc.Xfopen(tls, zFilename, ts+4402) 13610 if (*CsvReader)(unsafe.Pointer(p)).Fin == uintptr(0) { 13611 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 13612 csv_reader_reset(tls, p) 13613 csv_errmsg(tls, p, ts+4405, libc.VaList(bp, zFilename)) 13614 return 1 13615 } 13616 } else { 13617 (*CsvReader)(unsafe.Pointer(p)).FzIn = zData 13618 (*CsvReader)(unsafe.Pointer(p)).FnIn = libc.Xstrlen(tls, zData) 13619 } 13620 return 0 13621 } 13622 13623 func csv_getc_refill(tls *libc.TLS, p uintptr) int32 { 13624 var got size_t 13625 13626 got = libc.Xfread(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn, uint64(1), uint64(CSV_INBUFSZ), (*CsvReader)(unsafe.Pointer(p)).Fin) 13627 if got == uint64(0) { 13628 return -1 13629 } 13630 (*CsvReader)(unsafe.Pointer(p)).FnIn = got 13631 (*CsvReader)(unsafe.Pointer(p)).FiIn = uint64(1) 13632 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn))) 13633 } 13634 13635 func csv_getc(tls *libc.TLS, p uintptr) int32 { 13636 if (*CsvReader)(unsafe.Pointer(p)).FiIn >= (*CsvReader)(unsafe.Pointer(p)).FnIn { 13637 if (*CsvReader)(unsafe.Pointer(p)).Fin != uintptr(0) { 13638 return csv_getc_refill(tls, p) 13639 } 13640 return -1 13641 } 13642 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn + uintptr(libc.PostIncUint64(&(*CsvReader)(unsafe.Pointer(p)).FiIn, 1))))) 13643 } 13644 13645 func csv_resize_and_append(tls *libc.TLS, p uintptr, c uint8) int32 { 13646 var zNew uintptr 13647 var nNew int32 = (*CsvReader)(unsafe.Pointer(p)).FnAlloc*2 + 100 13648 zNew = sqlite3.Xsqlite3_realloc64(tls, (*CsvReader)(unsafe.Pointer(p)).Fz, uint64(nNew)) 13649 if zNew != 0 { 13650 (*CsvReader)(unsafe.Pointer(p)).Fz = zNew 13651 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = nNew 13652 *(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 13653 return 0 13654 } else { 13655 csv_errmsg(tls, p, ts+2069, 0) 13656 return 1 13657 } 13658 return int32(0) 13659 } 13660 13661 func csv_append(tls *libc.TLS, p uintptr, c uint8) int32 { 13662 if (*CsvReader)(unsafe.Pointer(p)).Fn >= (*CsvReader)(unsafe.Pointer(p)).FnAlloc-1 { 13663 return csv_resize_and_append(tls, p, c) 13664 } 13665 *(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 13666 return 0 13667 } 13668 13669 func csv_read_one_field(tls *libc.TLS, p uintptr) uintptr { 13670 bp := tls.Alloc(32) 13671 defer tls.Free(32) 13672 13673 var c int32 13674 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13675 c = csv_getc(tls, p) 13676 if c == -1 { 13677 (*CsvReader)(unsafe.Pointer(p)).FcTerm = -1 13678 return uintptr(0) 13679 } 13680 if c == '"' { 13681 var pc int32 13682 var ppc int32 13683 var startLine int32 = (*CsvReader)(unsafe.Pointer(p)).FnLine 13684 pc = libc.AssignInt32(&ppc, 0) 13685 for 1 != 0 { 13686 c = csv_getc(tls, p) 13687 if c <= '"' || pc == '"' { 13688 if c == '\n' { 13689 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 13690 } 13691 if c == '"' { 13692 if pc == '"' { 13693 pc = 0 13694 continue 13695 } 13696 } 13697 if c == ',' && pc == '"' || 13698 c == '\n' && pc == '"' || 13699 c == '\n' && pc == '\r' && ppc == '"' || 13700 c == -1 && pc == '"' { 13701 for __ccgo := true; __ccgo; __ccgo = int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn)))) != '"' { 13702 (*CsvReader)(unsafe.Pointer(p)).Fn-- 13703 } 13704 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(uint8(c)) 13705 break 13706 } 13707 if pc == '"' && c != '\r' { 13708 csv_errmsg(tls, p, ts+4434, libc.VaList(bp, (*CsvReader)(unsafe.Pointer(p)).FnLine, '"')) 13709 break 13710 } 13711 if c == -1 { 13712 csv_errmsg(tls, p, ts+4466, 13713 libc.VaList(bp+16, startLine, '"')) 13714 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(uint8(c)) 13715 break 13716 } 13717 } 13718 if csv_append(tls, p, uint8(c)) != 0 { 13719 return uintptr(0) 13720 } 13721 ppc = pc 13722 pc = c 13723 } 13724 } else { 13725 if c&0xff == 0xef && (*CsvReader)(unsafe.Pointer(p)).FbNotFirst == 0 { 13726 csv_append(tls, p, uint8(c)) 13727 c = csv_getc(tls, p) 13728 if c&0xff == 0xbb { 13729 csv_append(tls, p, uint8(c)) 13730 c = csv_getc(tls, p) 13731 if c&0xff == 0xbf { 13732 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 13733 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 13734 return csv_read_one_field(tls, p) 13735 } 13736 } 13737 } 13738 for c > ',' || c != -1 && c != ',' && c != '\n' { 13739 if csv_append(tls, p, uint8(c)) != 0 { 13740 return uintptr(0) 13741 } 13742 c = csv_getc(tls, p) 13743 } 13744 if c == '\n' { 13745 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 13746 if (*CsvReader)(unsafe.Pointer(p)).Fn > 0 && int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn-1)))) == '\r' { 13747 (*CsvReader)(unsafe.Pointer(p)).Fn-- 13748 } 13749 } 13750 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(uint8(c)) 13751 } 13752 if (*CsvReader)(unsafe.Pointer(p)).Fz != 0 { 13753 *(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn))) = uint8(0) 13754 } 13755 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 13756 return (*CsvReader)(unsafe.Pointer(p)).Fz 13757 } 13758 13759 type CsvTable1 = struct { 13760 Fbase sqlite3_vtab 13761 FzFilename uintptr 13762 FzData uintptr 13763 FiStart int64 13764 FnCol int32 13765 FtstFlags uint32 13766 } 13767 13768 type CsvTable = CsvTable1 13769 13770 type CsvCursor1 = struct { 13771 Fbase sqlite3_vtab_cursor 13772 Frdr CsvReader 13773 FazVal uintptr 13774 FaLen uintptr 13775 FiRowid sqlite3_int64 13776 } 13777 13778 type CsvCursor = CsvCursor1 13779 13780 func csv_xfer_error(tls *libc.TLS, pTab uintptr, pRdr uintptr) { 13781 bp := tls.Alloc(8) 13782 defer tls.Free(8) 13783 13784 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg) 13785 (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, pRdr+64)) 13786 } 13787 13788 func csvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 13789 var p uintptr = pVtab 13790 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzFilename) 13791 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzData) 13792 sqlite3.Xsqlite3_free(tls, p) 13793 return SQLITE_OK 13794 } 13795 13796 func csv_skip_whitespace(tls *libc.TLS, z uintptr) uintptr { 13797 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(z))))*2)))&int32(_ISspace) != 0 { 13798 z++ 13799 } 13800 return z 13801 } 13802 13803 func csv_trim_whitespace(tls *libc.TLS, z uintptr) { 13804 var n size_t = libc.Xstrlen(tls, z) 13805 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 { 13806 n-- 13807 } 13808 *(*uint8)(unsafe.Pointer(z + uintptr(n))) = uint8(0) 13809 } 13810 13811 func csv_dequote(tls *libc.TLS, z uintptr) { 13812 var j int32 13813 var cQuote uint8 = *(*uint8)(unsafe.Pointer(z)) 13814 var i size_t 13815 var n size_t 13816 13817 if int32(cQuote) != '\'' && int32(cQuote) != '"' { 13818 return 13819 } 13820 n = libc.Xstrlen(tls, z) 13821 if n < uint64(2) || int32(*(*uint8)(unsafe.Pointer(z + uintptr(n-uint64(1))))) != int32(*(*uint8)(unsafe.Pointer(z))) { 13822 return 13823 } 13824 i = uint64(1) 13825 j = 0 13826 for ; i < n-uint64(1); i++ { 13827 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == int32(cQuote) && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+uint64(1))))) == int32(cQuote) { 13828 i++ 13829 } 13830 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(i))) 13831 } 13832 *(*uint8)(unsafe.Pointer(z + uintptr(j))) = uint8(0) 13833 } 13834 13835 func csv_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr) uintptr { 13836 z = csv_skip_whitespace(tls, z) 13837 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 13838 return uintptr(0) 13839 } 13840 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 13841 if int32(*(*uint8)(unsafe.Pointer(z))) != '=' { 13842 return uintptr(0) 13843 } 13844 return csv_skip_whitespace(tls, z+uintptr(1)) 13845 } 13846 13847 func csv_string_parameter(tls *libc.TLS, p uintptr, zParam uintptr, zArg uintptr, pzVal uintptr) int32 { 13848 bp := tls.Alloc(16) 13849 defer tls.Free(16) 13850 13851 var zValue uintptr 13852 zValue = csv_parameter(tls, zParam, int32(libc.Xstrlen(tls, zParam)), zArg) 13853 if zValue == uintptr(0) { 13854 return 0 13855 } 13856 *(*uint8)(unsafe.Pointer(p + 64)) = uint8(0) 13857 if *(*uintptr)(unsafe.Pointer(pzVal)) != 0 { 13858 csv_errmsg(tls, p, ts+4505, libc.VaList(bp, zParam)) 13859 return 1 13860 } 13861 *(*uintptr)(unsafe.Pointer(pzVal)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zValue)) 13862 if *(*uintptr)(unsafe.Pointer(pzVal)) == uintptr(0) { 13863 csv_errmsg(tls, p, ts+2069, 0) 13864 return 1 13865 } 13866 csv_trim_whitespace(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 13867 csv_dequote(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 13868 return 1 13869 } 13870 13871 func csv_boolean(tls *libc.TLS, z uintptr) int32 { 13872 if sqlite3.Xsqlite3_stricmp(tls, ts+4174, z) == 0 || 13873 sqlite3.Xsqlite3_stricmp(tls, ts+4178, z) == 0 || 13874 sqlite3.Xsqlite3_stricmp(tls, ts+4534, z) == 0 || 13875 int32(*(*uint8)(unsafe.Pointer(z))) == '1' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == 0 { 13876 return 1 13877 } 13878 if sqlite3.Xsqlite3_stricmp(tls, ts+4539, z) == 0 || 13879 sqlite3.Xsqlite3_stricmp(tls, ts+4542, z) == 0 || 13880 sqlite3.Xsqlite3_stricmp(tls, ts+4546, z) == 0 || 13881 int32(*(*uint8)(unsafe.Pointer(z))) == '0' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == 0 { 13882 return 0 13883 } 13884 return -1 13885 } 13886 13887 func csv_boolean_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr, pValue uintptr) int32 { 13888 var b int32 13889 z = csv_skip_whitespace(tls, z) 13890 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 13891 return 0 13892 } 13893 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 13894 if int32(*(*uint8)(unsafe.Pointer(z))) == 0 { 13895 *(*int32)(unsafe.Pointer(pValue)) = 1 13896 return 1 13897 } 13898 if int32(*(*uint8)(unsafe.Pointer(z))) != '=' { 13899 return 0 13900 } 13901 z = csv_skip_whitespace(tls, z+uintptr(1)) 13902 b = csv_boolean(tls, z) 13903 if b >= 0 { 13904 *(*int32)(unsafe.Pointer(pValue)) = b 13905 return 1 13906 } 13907 return 0 13908 } 13909 13910 func csvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13911 bp := tls.Alloc(372) 13912 defer tls.Free(372) 13913 13914 var pNew uintptr 13915 var bHeader int32 13916 var rc int32 13917 var i int32 13918 var j int32 13919 var tstFlags int32 13920 13921 var nCol int32 13922 13923 var z uintptr 13924 var zValue uintptr 13925 var z1 uintptr 13926 var pStr uintptr 13927 var zSep uintptr 13928 var iCol int32 13929 pNew = uintptr(0) 13930 bHeader = -1 13931 rc = SQLITE_OK 13932 tstFlags = 0 13933 nCol = -99 13934 13935 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(CsvReader{}))) 13936 libc.Xmemset(tls, bp+344, 0, uint64(unsafe.Sizeof([3]uintptr{}))) 13937 i = 3 13938 __1: 13939 if !(i < argc) { 13940 goto __3 13941 } 13942 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 13943 j = 0 13944 __4: 13945 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 13946 goto __6 13947 } 13948 if !(csv_string_parameter(tls, bp+80, azParam[j], z, bp+344+uintptr(j)*8) != 0) { 13949 goto __7 13950 } 13951 goto __6 13952 __7: 13953 ; 13954 goto __5 13955 __5: 13956 j++ 13957 goto __4 13958 goto __6 13959 __6: 13960 ; 13961 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 13962 goto __8 13963 } 13964 if !(*(*uint8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 13965 goto __10 13966 } 13967 goto csvtab_connect_error 13968 __10: 13969 ; 13970 goto __9 13971 __8: 13972 if !(csv_boolean_parameter(tls, ts+4552, 6, z, bp+368) != 0) { 13973 goto __11 13974 } 13975 if !(bHeader >= 0) { 13976 goto __13 13977 } 13978 csv_errmsg(tls, bp+80, ts+4559, 0) 13979 goto csvtab_connect_error 13980 __13: 13981 ; 13982 bHeader = *(*int32)(unsafe.Pointer(bp + 368)) 13983 goto __12 13984 __11: 13985 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4592, 9, z)) != uintptr(0)) { 13986 goto __14 13987 } 13988 tstFlags = int32(uint32(libc.Xatoi(tls, zValue))) 13989 goto __15 13990 __14: 13991 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4602, 7, z)) != uintptr(0)) { 13992 goto __16 13993 } 13994 if !(nCol > 0) { 13995 goto __18 13996 } 13997 csv_errmsg(tls, bp+80, ts+4610, 0) 13998 goto csvtab_connect_error 13999 __18: 14000 ; 14001 nCol = libc.Xatoi(tls, zValue) 14002 if !(nCol <= 0) { 14003 goto __19 14004 } 14005 csv_errmsg(tls, bp+80, ts+4644, 0) 14006 goto csvtab_connect_error 14007 __19: 14008 ; 14009 goto __17 14010 __16: 14011 csv_errmsg(tls, bp+80, ts+4675, libc.VaList(bp, z)) 14012 goto csvtab_connect_error 14013 __17: 14014 ; 14015 __15: 14016 ; 14017 __12: 14018 ; 14019 __9: 14020 ; 14021 goto __2 14022 __2: 14023 i++ 14024 goto __1 14025 goto __3 14026 __3: 14027 ; 14028 if !(libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344)) == uintptr(0)) == libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) == uintptr(0))) { 14029 goto __20 14030 } 14031 csv_errmsg(tls, bp+80, ts+4695, 0) 14032 goto csvtab_connect_error 14033 __20: 14034 ; 14035 if !((nCol <= 0 || bHeader == 1) && 14036 csv_reader_open(tls, bp+80, *(*uintptr)(unsafe.Pointer(bp + 344)), *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8))) != 0) { 14037 goto __21 14038 } 14039 goto csvtab_connect_error 14040 __21: 14041 ; 14042 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CsvTable{}))) 14043 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 14044 if !(pNew == uintptr(0)) { 14045 goto __22 14046 } 14047 goto csvtab_connect_oom 14048 __22: 14049 ; 14050 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(CsvTable{}))) 14051 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 14052 goto __23 14053 } 14054 pStr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 14055 zSep = ts + 584 14056 iCol = 0 14057 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+979, 0) 14058 if !(nCol < 0 && bHeader < 1) { 14059 goto __25 14060 } 14061 nCol = 0 14062 __26: 14063 csv_read_one_field(tls, bp+80) 14064 nCol++ 14065 goto __27 14066 __27: 14067 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 14068 goto __26 14069 } 14070 goto __28 14071 __28: 14072 ; 14073 __25: 14074 ; 14075 if !(nCol > 0 && bHeader < 1) { 14076 goto __29 14077 } 14078 iCol = 0 14079 __31: 14080 if !(iCol < nCol) { 14081 goto __33 14082 } 14083 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+8, zSep, iCol)) 14084 zSep = ts + 4758 14085 goto __32 14086 __32: 14087 iCol++ 14088 goto __31 14089 goto __33 14090 __33: 14091 ; 14092 goto __30 14093 __29: 14094 __34: 14095 z1 = csv_read_one_field(tls, bp+80) 14096 if !(nCol > 0 && iCol < nCol || nCol < 0 && bHeader != 0) { 14097 goto __37 14098 } 14099 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4760, libc.VaList(bp+24, zSep, z1)) 14100 zSep = ts + 4758 14101 iCol++ 14102 __37: 14103 ; 14104 goto __35 14105 __35: 14106 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 14107 goto __34 14108 } 14109 goto __36 14110 __36: 14111 ; 14112 if !(nCol < 0) { 14113 goto __38 14114 } 14115 nCol = iCol 14116 goto __39 14117 __38: 14118 __40: 14119 if !(iCol < nCol) { 14120 goto __41 14121 } 14122 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+40, zSep, libc.PreIncInt32(&iCol, 1))) 14123 zSep = ts + 4758 14124 goto __40 14125 __41: 14126 ; 14127 __39: 14128 ; 14129 __30: 14130 ; 14131 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 14132 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+585, 0) 14133 *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) = sqlite3.Xsqlite3_str_finish(tls, pStr) 14134 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 14135 goto __42 14136 } 14137 goto csvtab_connect_oom 14138 __42: 14139 ; 14140 goto __24 14141 __23: 14142 if !(nCol < 0) { 14143 goto __43 14144 } 14145 __45: 14146 csv_read_one_field(tls, bp+80) 14147 (*CsvTable)(unsafe.Pointer(pNew)).FnCol++ 14148 goto __46 14149 __46: 14150 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 14151 goto __45 14152 } 14153 goto __47 14154 __47: 14155 ; 14156 goto __44 14157 __43: 14158 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 14159 __44: 14160 ; 14161 __24: 14162 ; 14163 (*CsvTable)(unsafe.Pointer(pNew)).FzFilename = *(*uintptr)(unsafe.Pointer(bp + 344)) 14164 *(*uintptr)(unsafe.Pointer(bp + 344)) = uintptr(0) 14165 (*CsvTable)(unsafe.Pointer(pNew)).FzData = *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) 14166 *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) = uintptr(0) 14167 (*CsvTable)(unsafe.Pointer(pNew)).FtstFlags = uint32(tstFlags) 14168 if !(bHeader != 1) { 14169 goto __48 14170 } 14171 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(0) 14172 goto __49 14173 __48: 14174 if !((*CsvTable)(unsafe.Pointer(pNew)).FzData != 0) { 14175 goto __50 14176 } 14177 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(int32((*CsvReader)(unsafe.Pointer(bp + 80)).FiIn)) 14178 goto __51 14179 __50: 14180 (*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)) 14181 __51: 14182 ; 14183 __49: 14184 ; 14185 csv_reader_reset(tls, bp+80) 14186 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8))) 14187 if !(rc != 0) { 14188 goto __52 14189 } 14190 csv_errmsg(tls, bp+80, ts+4772, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)), sqlite3.Xsqlite3_errmsg(tls, db))) 14191 goto csvtab_connect_error 14192 __52: 14193 ; 14194 i = 0 14195 __53: 14196 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 14197 goto __55 14198 } 14199 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 14200 goto __54 14201 __54: 14202 i++ 14203 goto __53 14204 goto __55 14205 __55: 14206 ; 14207 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 14208 return SQLITE_OK 14209 14210 csvtab_connect_oom: 14211 rc = SQLITE_NOMEM 14212 csv_errmsg(tls, bp+80, ts+2069, 0) 14213 14214 csvtab_connect_error: 14215 if !(pNew != 0) { 14216 goto __56 14217 } 14218 csvtabDisconnect(tls, pNew) 14219 __56: 14220 ; 14221 i = 0 14222 __57: 14223 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 14224 goto __59 14225 } 14226 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 14227 goto __58 14228 __58: 14229 i++ 14230 goto __57 14231 goto __59 14232 __59: 14233 ; 14234 if !(*(*uint8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 14235 goto __60 14236 } 14237 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(pzErr))) 14238 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, bp+80+64)) 14239 __60: 14240 ; 14241 csv_reader_reset(tls, bp+80) 14242 if !(rc == SQLITE_OK) { 14243 goto __61 14244 } 14245 rc = SQLITE_ERROR 14246 __61: 14247 ; 14248 return rc 14249 } 14250 14251 var azParam = [3]uintptr{ 14252 ts + 4794, ts + 4803, ts + 4808, 14253 } 14254 14255 func csvtabCursorRowReset(tls *libc.TLS, pCur uintptr) { 14256 var pTab uintptr = (*CsvCursor)(unsafe.Pointer(pCur)).Fbase.FpVtab 14257 var i int32 14258 for i = 0; i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol; i++ { 14259 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 14260 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 14261 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 14262 } 14263 } 14264 14265 func csvtabCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 14266 return csvtabConnect(tls, db, pAux, argc, argv, ppVtab, pzErr) 14267 } 14268 14269 func csvtabClose(tls *libc.TLS, cur uintptr) int32 { 14270 var pCur uintptr = cur 14271 csvtabCursorRowReset(tls, pCur) 14272 csv_reader_reset(tls, pCur+8) 14273 sqlite3.Xsqlite3_free(tls, cur) 14274 return SQLITE_OK 14275 } 14276 14277 func csvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 14278 var pTab uintptr = p 14279 var pCur uintptr 14280 var nByte size_t 14281 nByte = uint64(unsafe.Sizeof(CsvCursor{})) + (uint64(unsafe.Sizeof(uintptr(0)))+uint64(unsafe.Sizeof(int32(0))))*uint64((*CsvTable)(unsafe.Pointer(pTab)).FnCol) 14282 pCur = sqlite3.Xsqlite3_malloc64(tls, nByte) 14283 if pCur == uintptr(0) { 14284 return SQLITE_NOMEM 14285 } 14286 libc.Xmemset(tls, pCur, 0, nByte) 14287 (*CsvCursor)(unsafe.Pointer(pCur)).FazVal = pCur + 1*296 14288 (*CsvCursor)(unsafe.Pointer(pCur)).FaLen = (*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr((*CsvTable)(unsafe.Pointer(pTab)).FnCol)*8 14289 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 14290 if csv_reader_open(tls, pCur+8, (*CsvTable)(unsafe.Pointer(pTab)).FzFilename, (*CsvTable)(unsafe.Pointer(pTab)).FzData) != 0 { 14291 csv_xfer_error(tls, pTab, pCur+8) 14292 return SQLITE_ERROR 14293 } 14294 return SQLITE_OK 14295 } 14296 14297 func csvtabNext(tls *libc.TLS, cur uintptr) int32 { 14298 var pCur uintptr = cur 14299 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 14300 var i int32 = 0 14301 var z uintptr 14302 for __ccgo := true; __ccgo; __ccgo = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == ',' { 14303 z = csv_read_one_field(tls, pCur+8) 14304 if z == uintptr(0) { 14305 break 14306 } 14307 if i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 14308 if *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) < (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1 { 14309 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)) 14310 if zNew == uintptr(0) { 14311 csv_errmsg(tls, pCur+8, ts+2069, 0) 14312 csv_xfer_error(tls, pTab, pCur+8) 14313 break 14314 } 14315 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = zNew 14316 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn + 1 14317 } 14318 libc.Xmemcpy(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), z, uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 14319 i++ 14320 } 14321 } 14322 if z == uintptr(0) || (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == -1 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 14323 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(-1) 14324 } else { 14325 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid++ 14326 for i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 14327 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 14328 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 14329 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 14330 i++ 14331 } 14332 } 14333 return SQLITE_OK 14334 } 14335 14336 func csvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 14337 var pCur uintptr = cur 14338 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 14339 if i >= 0 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol && *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) != uintptr(0) { 14340 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), -1, libc.UintptrFromInt32(-1)) 14341 } 14342 return SQLITE_OK 14343 } 14344 14345 func csvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 14346 var pCur uintptr = cur 14347 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid 14348 return SQLITE_OK 14349 } 14350 14351 func csvtabEof(tls *libc.TLS, cur uintptr) int32 { 14352 var pCur uintptr = cur 14353 return libc.Bool32((*CsvCursor)(unsafe.Pointer(pCur)).FiRowid < int64(0)) 14354 } 14355 14356 func csvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 14357 var pCur uintptr = pVtabCursor 14358 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 14359 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 14360 if (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin == uintptr(0) { 14361 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = size_t((*CsvTable)(unsafe.Pointer(pTab)).FiStart) 14362 } else { 14363 libc.Xfseek(tls, (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin, (*CsvTable)(unsafe.Pointer(pTab)).FiStart, SEEK_SET) 14364 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = uint64(0) 14365 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FnIn = uint64(0) 14366 } 14367 return csvtabNext(tls, pVtabCursor) 14368 } 14369 14370 func csvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 14371 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000) 14372 if (*CsvTable)(unsafe.Pointer(tab)).FtstFlags&uint32(CSVTEST_FIDX) != uint32(0) { 14373 var i int32 14374 var nConst int32 = 0 14375 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 14376 var op uint8 14377 if int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable) == 0 { 14378 continue 14379 } 14380 op = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop 14381 if int32(op) == SQLITE_INDEX_CONSTRAINT_EQ || 14382 int32(op) == SQLITE_INDEX_CONSTRAINT_LIKE || 14383 int32(op) == SQLITE_INDEX_CONSTRAINT_GLOB { 14384 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 14385 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(nConst)*8)).FargvIndex = nConst + 1 14386 nConst++ 14387 } 14388 } 14389 } 14390 return SQLITE_OK 14391 } 14392 14393 var CsvModule = sqlite3_module{ 14394 FxCreate: 0, 14395 FxConnect: 0, 14396 FxBestIndex: 0, 14397 FxDisconnect: 0, 14398 FxDestroy: 0, 14399 FxOpen: 0, 14400 FxClose: 0, 14401 FxFilter: 0, 14402 FxNext: 0, 14403 FxEof: 0, 14404 FxColumn: 0, 14405 FxRowid: 0, 14406 } 14407 14408 func csvtabUpdate(tls *libc.TLS, p uintptr, n int32, v uintptr, x uintptr) int32 { 14409 return SQLITE_READONLY 14410 } 14411 14412 var CsvModuleFauxWrite = sqlite3_module{ 14413 FxCreate: 0, 14414 FxConnect: 0, 14415 FxBestIndex: 0, 14416 FxDisconnect: 0, 14417 FxDestroy: 0, 14418 FxOpen: 0, 14419 FxClose: 0, 14420 FxFilter: 0, 14421 FxNext: 0, 14422 FxEof: 0, 14423 FxColumn: 0, 14424 FxRowid: 0, 14425 FxUpdate: 0, 14426 } 14427 14428 func sqlite3_csv_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14429 var rc int32 14430 _ = pApi 14431 14432 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4815, uintptr(unsafe.Pointer(&CsvModule)), uintptr(0)) 14433 if rc == SQLITE_OK { 14434 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4819, uintptr(unsafe.Pointer(&CsvModuleFauxWrite)), uintptr(0)) 14435 } 14436 return rc 14437 } 14438 14439 type Decimal1 = struct { 14440 Fsign uint8 14441 Foom uint8 14442 FisNull uint8 14443 FisInit uint8 14444 FnDigit int32 14445 FnFrac int32 14446 F__ccgo_pad1 [4]byte 14447 Fa uintptr 14448 } 14449 14450 type Decimal = Decimal1 14451 14452 func decimal_clear(tls *libc.TLS, p uintptr) { 14453 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(p)).Fa) 14454 } 14455 14456 func decimal_free(tls *libc.TLS, p uintptr) { 14457 if p != 0 { 14458 decimal_clear(tls, p) 14459 sqlite3.Xsqlite3_free(tls, p) 14460 } 14461 } 14462 14463 func decimal_new(tls *libc.TLS, pCtx uintptr, pIn uintptr, nAlt int32, zAlt uintptr) uintptr { 14464 var p uintptr 14465 var n int32 14466 var i int32 14467 var zIn uintptr 14468 var iExp int32 14469 var j int32 14470 var neg int32 14471 var c uint8 14472 var nExtra int32 14473 iExp = 0 14474 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Decimal{}))) 14475 if !(p == uintptr(0)) { 14476 goto __1 14477 } 14478 goto new_no_mem 14479 __1: 14480 ; 14481 (*Decimal)(unsafe.Pointer(p)).Fsign = uint8(0) 14482 (*Decimal)(unsafe.Pointer(p)).Foom = uint8(0) 14483 (*Decimal)(unsafe.Pointer(p)).FisInit = uint8(1) 14484 (*Decimal)(unsafe.Pointer(p)).FisNull = uint8(0) 14485 (*Decimal)(unsafe.Pointer(p)).FnDigit = 0 14486 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14487 if !(zAlt != 0) { 14488 goto __2 14489 } 14490 n = nAlt 14491 zIn = zAlt 14492 goto __3 14493 __2: 14494 if !(sqlite3.Xsqlite3_value_type(tls, pIn) == SQLITE_NULL) { 14495 goto __4 14496 } 14497 (*Decimal)(unsafe.Pointer(p)).Fa = uintptr(0) 14498 (*Decimal)(unsafe.Pointer(p)).FisNull = uint8(1) 14499 return p 14500 __4: 14501 ; 14502 n = sqlite3.Xsqlite3_value_bytes(tls, pIn) 14503 zIn = sqlite3.Xsqlite3_value_text(tls, pIn) 14504 __3: 14505 ; 14506 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc64(tls, uint64(n+1)) 14507 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14508 goto __5 14509 } 14510 goto new_no_mem 14511 __5: 14512 ; 14513 i = 0 14514 __6: 14515 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) { 14516 goto __8 14517 } 14518 goto __7 14519 __7: 14520 i++ 14521 goto __6 14522 goto __8 14523 __8: 14524 ; 14525 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '-') { 14526 goto __9 14527 } 14528 (*Decimal)(unsafe.Pointer(p)).Fsign = uint8(1) 14529 i++ 14530 goto __10 14531 __9: 14532 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '+') { 14533 goto __11 14534 } 14535 i++ 14536 __11: 14537 ; 14538 __10: 14539 ; 14540 __12: 14541 if !(i < n && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '0') { 14542 goto __13 14543 } 14544 i++ 14545 goto __12 14546 __13: 14547 ; 14548 __14: 14549 if !(i < n) { 14550 goto __15 14551 } 14552 c = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 14553 if !(int32(c) >= '0' && int32(c) <= '9') { 14554 goto __16 14555 } 14556 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncInt32(&(*Decimal)(unsafe.Pointer(p)).FnDigit, 1)))) = int8(int32(c) - '0') 14557 goto __17 14558 __16: 14559 if !(int32(c) == '.') { 14560 goto __18 14561 } 14562 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit + 1 14563 goto __19 14564 __18: 14565 if !(int32(c) == 'e' || int32(c) == 'E') { 14566 goto __20 14567 } 14568 j = i + 1 14569 neg = 0 14570 if !(j >= n) { 14571 goto __21 14572 } 14573 goto __15 14574 __21: 14575 ; 14576 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '-') { 14577 goto __22 14578 } 14579 neg = 1 14580 j++ 14581 goto __23 14582 __22: 14583 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '+') { 14584 goto __24 14585 } 14586 j++ 14587 __24: 14588 ; 14589 __23: 14590 ; 14591 __25: 14592 if !(j < n && iExp < 1000000) { 14593 goto __26 14594 } 14595 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) <= '9') { 14596 goto __27 14597 } 14598 iExp = iExp*10 + int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) - '0' 14599 __27: 14600 ; 14601 j++ 14602 goto __25 14603 __26: 14604 ; 14605 if !(neg != 0) { 14606 goto __28 14607 } 14608 iExp = -iExp 14609 __28: 14610 ; 14611 goto __15 14612 __20: 14613 ; 14614 __19: 14615 ; 14616 __17: 14617 ; 14618 i++ 14619 goto __14 14620 __15: 14621 ; 14622 if !((*Decimal)(unsafe.Pointer(p)).FnFrac != 0) { 14623 goto __29 14624 } 14625 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - ((*Decimal)(unsafe.Pointer(p)).FnFrac - 1) 14626 __29: 14627 ; 14628 if !(iExp > 0) { 14629 goto __30 14630 } 14631 if !((*Decimal)(unsafe.Pointer(p)).FnFrac > 0) { 14632 goto __32 14633 } 14634 if !(iExp <= (*Decimal)(unsafe.Pointer(p)).FnFrac) { 14635 goto __33 14636 } 14637 *(*int32)(unsafe.Pointer(p + 8)) -= iExp 14638 iExp = 0 14639 goto __34 14640 __33: 14641 iExp = iExp - (*Decimal)(unsafe.Pointer(p)).FnFrac 14642 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 14643 __34: 14644 ; 14645 __32: 14646 ; 14647 if !(iExp > 0) { 14648 goto __35 14649 } 14650 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 14651 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14652 goto __36 14653 } 14654 goto new_no_mem 14655 __36: 14656 ; 14657 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(iExp)) 14658 *(*int32)(unsafe.Pointer(p + 4)) += iExp 14659 __35: 14660 ; 14661 goto __31 14662 __30: 14663 if !(iExp < 0) { 14664 goto __37 14665 } 14666 iExp = -iExp 14667 nExtra = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac - 1 14668 if !(nExtra != 0) { 14669 goto __38 14670 } 14671 if !(nExtra >= iExp) { 14672 goto __39 14673 } 14674 *(*int32)(unsafe.Pointer(p + 8)) += iExp 14675 iExp = 0 14676 goto __40 14677 __39: 14678 iExp = iExp - nExtra 14679 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - 1 14680 __40: 14681 ; 14682 __38: 14683 ; 14684 if !(iExp > 0) { 14685 goto __41 14686 } 14687 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 14688 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 14689 goto __42 14690 } 14691 goto new_no_mem 14692 __42: 14693 ; 14694 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(iExp), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 14695 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(iExp)) 14696 *(*int32)(unsafe.Pointer(p + 4)) += iExp 14697 *(*int32)(unsafe.Pointer(p + 8)) += iExp 14698 __41: 14699 ; 14700 __37: 14701 ; 14702 __31: 14703 ; 14704 return p 14705 14706 new_no_mem: 14707 if !(pCtx != 0) { 14708 goto __43 14709 } 14710 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14711 __43: 14712 ; 14713 sqlite3.Xsqlite3_free(tls, p) 14714 return uintptr(0) 14715 } 14716 14717 func decimal_result(tls *libc.TLS, pCtx uintptr, p uintptr) { 14718 var z uintptr 14719 var i int32 14720 var j int32 14721 var n int32 14722 if p == uintptr(0) || (*Decimal)(unsafe.Pointer(p)).Foom != 0 { 14723 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14724 return 14725 } 14726 if (*Decimal)(unsafe.Pointer(p)).FisNull != 0 { 14727 sqlite3.Xsqlite3_result_null(tls, pCtx) 14728 return 14729 } 14730 z = sqlite3.Xsqlite3_malloc(tls, (*Decimal)(unsafe.Pointer(p)).FnDigit+4) 14731 if z == uintptr(0) { 14732 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 14733 return 14734 } 14735 i = 0 14736 if (*Decimal)(unsafe.Pointer(p)).FnDigit == 0 || (*Decimal)(unsafe.Pointer(p)).FnDigit == 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa))) == 0 { 14737 (*Decimal)(unsafe.Pointer(p)).Fsign = uint8(0) 14738 } 14739 if (*Decimal)(unsafe.Pointer(p)).Fsign != 0 { 14740 *(*uint8)(unsafe.Pointer(z)) = uint8('-') 14741 i = 1 14742 } 14743 n = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac 14744 if n <= 0 { 14745 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = uint8('0') 14746 } 14747 j = 0 14748 for n > 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) == 0 { 14749 j++ 14750 n-- 14751 } 14752 for n > 0 { 14753 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = uint8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 14754 j++ 14755 n-- 14756 } 14757 if (*Decimal)(unsafe.Pointer(p)).FnFrac != 0 { 14758 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = uint8('.') 14759 for __ccgo := true; __ccgo; __ccgo = j < (*Decimal)(unsafe.Pointer(p)).FnDigit { 14760 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = uint8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 14761 j++ 14762 } 14763 } 14764 *(*uint8)(unsafe.Pointer(z + uintptr(i))) = uint8(0) 14765 sqlite3.Xsqlite3_result_text(tls, pCtx, z, i, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 14766 } 14767 14768 func decimalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14769 var p uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14770 _ = argc 14771 decimal_result(tls, context, p) 14772 decimal_free(tls, p) 14773 } 14774 14775 func decimal_cmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 14776 var nASig int32 14777 var nBSig int32 14778 var rc int32 14779 var n int32 14780 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) != int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 14781 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 14782 return -1 14783 } 14784 return +1 14785 } 14786 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 14787 var pTemp uintptr = pA 14788 pA = pB 14789 pB = pTemp 14790 } 14791 nASig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 14792 nBSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 14793 if nASig != nBSig { 14794 return nASig - nBSig 14795 } 14796 n = (*Decimal)(unsafe.Pointer(pA)).FnDigit 14797 if n > (*Decimal)(unsafe.Pointer(pB)).FnDigit { 14798 n = (*Decimal)(unsafe.Pointer(pB)).FnDigit 14799 } 14800 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(n)) 14801 if rc == 0 { 14802 rc = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnDigit 14803 } 14804 return rc 14805 } 14806 14807 func decimalCmpFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14808 var pA uintptr 14809 var pB uintptr 14810 var rc int32 14811 pA = uintptr(0) 14812 pB = uintptr(0) 14813 14814 _ = argc 14815 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14816 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0) { 14817 goto __1 14818 } 14819 goto cmp_done 14820 __1: 14821 ; 14822 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14823 if !(pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 14824 goto __2 14825 } 14826 goto cmp_done 14827 __2: 14828 ; 14829 rc = decimal_cmp(tls, pA, pB) 14830 if !(rc < 0) { 14831 goto __3 14832 } 14833 rc = -1 14834 goto __4 14835 __3: 14836 if !(rc > 0) { 14837 goto __5 14838 } 14839 rc = +1 14840 __5: 14841 ; 14842 __4: 14843 ; 14844 sqlite3.Xsqlite3_result_int(tls, context, rc) 14845 cmp_done: 14846 decimal_free(tls, pA) 14847 decimal_free(tls, pB) 14848 } 14849 14850 func decimal_expand(tls *libc.TLS, p uintptr, nDigit int32, nFrac int32) { 14851 var nAddSig int32 14852 var nAddFrac int32 14853 if p == uintptr(0) { 14854 return 14855 } 14856 nAddFrac = nFrac - (*Decimal)(unsafe.Pointer(p)).FnFrac 14857 nAddSig = nDigit - (*Decimal)(unsafe.Pointer(p)).FnDigit - nAddFrac 14858 if nAddFrac == 0 && nAddSig == 0 { 14859 return 14860 } 14861 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64(nDigit+1)) 14862 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 14863 (*Decimal)(unsafe.Pointer(p)).Foom = uint8(1) 14864 return 14865 } 14866 if nAddSig != 0 { 14867 libc.Xmemmove(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(nAddSig), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit)) 14868 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(nAddSig)) 14869 *(*int32)(unsafe.Pointer(p + 4)) += nAddSig 14870 } 14871 if nAddFrac != 0 { 14872 libc.Xmemset(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(nAddFrac)) 14873 *(*int32)(unsafe.Pointer(p + 4)) += nAddFrac 14874 *(*int32)(unsafe.Pointer(p + 8)) += nAddFrac 14875 } 14876 } 14877 14878 func decimal_add(tls *libc.TLS, pA uintptr, pB uintptr) { 14879 var nSig int32 14880 var nFrac int32 14881 var nDigit int32 14882 var i int32 14883 var rc int32 14884 if pA == uintptr(0) { 14885 return 14886 } 14887 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 14888 (*Decimal)(unsafe.Pointer(pA)).Foom = uint8(1) 14889 return 14890 } 14891 if (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0 { 14892 (*Decimal)(unsafe.Pointer(pA)).FisNull = uint8(1) 14893 return 14894 } 14895 nSig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 14896 if nSig != 0 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa))) == 0 { 14897 nSig-- 14898 } 14899 if nSig < (*Decimal)(unsafe.Pointer(pB)).FnDigit-(*Decimal)(unsafe.Pointer(pB)).FnFrac { 14900 nSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 14901 } 14902 nFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 14903 if nFrac < (*Decimal)(unsafe.Pointer(pB)).FnFrac { 14904 nFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 14905 } 14906 nDigit = nSig + nFrac + 1 14907 decimal_expand(tls, pA, nDigit, nFrac) 14908 decimal_expand(tls, pB, nDigit, nFrac) 14909 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 14910 (*Decimal)(unsafe.Pointer(pA)).Foom = uint8(1) 14911 } else { 14912 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) == int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 14913 var carry int32 = 0 14914 for i = nDigit - 1; i >= 0; i-- { 14915 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 14916 if x >= 10 { 14917 carry = 1 14918 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x - 10) 14919 } else { 14920 carry = 0 14921 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 14922 } 14923 } 14924 } else { 14925 var aA uintptr 14926 var aB uintptr 14927 var borrow int32 = 0 14928 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(nDigit)) 14929 if rc < 0 { 14930 aA = (*Decimal)(unsafe.Pointer(pB)).Fa 14931 aB = (*Decimal)(unsafe.Pointer(pA)).Fa 14932 (*Decimal)(unsafe.Pointer(pA)).Fsign = libc.BoolUint8(!((*Decimal)(unsafe.Pointer(pA)).Fsign != 0)) 14933 } else { 14934 aA = (*Decimal)(unsafe.Pointer(pA)).Fa 14935 aB = (*Decimal)(unsafe.Pointer(pB)).Fa 14936 } 14937 for i = nDigit - 1; i >= 0; i-- { 14938 var x int32 = int32(*(*int8)(unsafe.Pointer(aA + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(aB + uintptr(i)))) - borrow 14939 if x < 0 { 14940 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x + 10) 14941 borrow = 1 14942 } else { 14943 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 14944 borrow = 0 14945 } 14946 } 14947 } 14948 } 14949 } 14950 14951 func decimalCollFunc(tls *libc.TLS, notUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 14952 var zA uintptr = pKey1 14953 var zB uintptr = pKey2 14954 var pA uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey1, zA) 14955 var pB uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey2, zB) 14956 var rc int32 14957 _ = notUsed 14958 if pA == uintptr(0) || pB == uintptr(0) { 14959 rc = 0 14960 } else { 14961 rc = decimal_cmp(tls, pA, pB) 14962 } 14963 decimal_free(tls, pA) 14964 decimal_free(tls, pB) 14965 return rc 14966 } 14967 14968 func decimalAddFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14969 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14970 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14971 _ = argc 14972 decimal_add(tls, pA, pB) 14973 decimal_result(tls, context, pA) 14974 decimal_free(tls, pA) 14975 decimal_free(tls, pB) 14976 } 14977 14978 func decimalSubFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14979 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 14980 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 14981 _ = argc 14982 if pB != 0 { 14983 (*Decimal)(unsafe.Pointer(pB)).Fsign = libc.BoolUint8(!((*Decimal)(unsafe.Pointer(pB)).Fsign != 0)) 14984 decimal_add(tls, pA, pB) 14985 decimal_result(tls, context, pA) 14986 } 14987 decimal_free(tls, pA) 14988 decimal_free(tls, pB) 14989 } 14990 14991 func decimalSumStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14992 var p uintptr 14993 var pArg uintptr 14994 _ = argc 14995 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 14996 if p == uintptr(0) { 14997 return 14998 } 14999 if !(int32((*Decimal)(unsafe.Pointer(p)).FisInit) != 0) { 15000 (*Decimal)(unsafe.Pointer(p)).FisInit = uint8(1) 15001 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc(tls, 2) 15002 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 15003 (*Decimal)(unsafe.Pointer(p)).Foom = uint8(1) 15004 } else { 15005 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa)) = int8(0) 15006 } 15007 (*Decimal)(unsafe.Pointer(p)).FnDigit = 1 15008 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 15009 } 15010 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 15011 return 15012 } 15013 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 15014 decimal_add(tls, p, pArg) 15015 decimal_free(tls, pArg) 15016 } 15017 15018 func decimalSumInverse(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15019 var p uintptr 15020 var pArg uintptr 15021 _ = argc 15022 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 15023 if p == uintptr(0) { 15024 return 15025 } 15026 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 15027 return 15028 } 15029 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 15030 if pArg != 0 { 15031 (*Decimal)(unsafe.Pointer(pArg)).Fsign = libc.BoolUint8(!((*Decimal)(unsafe.Pointer(pArg)).Fsign != 0)) 15032 } 15033 decimal_add(tls, p, pArg) 15034 decimal_free(tls, pArg) 15035 } 15036 15037 func decimalSumValue(tls *libc.TLS, context uintptr) { 15038 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 15039 if p == uintptr(0) { 15040 return 15041 } 15042 decimal_result(tls, context, p) 15043 } 15044 15045 func decimalSumFinalize(tls *libc.TLS, context uintptr) { 15046 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 15047 if p == uintptr(0) { 15048 return 15049 } 15050 decimal_result(tls, context, p) 15051 decimal_clear(tls, p) 15052 } 15053 15054 func decimalMulFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15055 var pA uintptr 15056 var pB uintptr 15057 var acc uintptr 15058 var i int32 15059 var j int32 15060 var k int32 15061 var minFrac int32 15062 var f int8 15063 var carry int32 15064 var x int32 15065 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 15066 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 15067 acc = uintptr(0) 15068 _ = argc 15069 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || 15070 pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 15071 goto __1 15072 } 15073 goto mul_end 15074 __1: 15075 ; 15076 acc = sqlite3.Xsqlite3_malloc64(tls, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 15077 if !(acc == uintptr(0)) { 15078 goto __2 15079 } 15080 sqlite3.Xsqlite3_result_error_nomem(tls, context) 15081 goto mul_end 15082 __2: 15083 ; 15084 libc.Xmemset(tls, acc, 0, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 15085 minFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 15086 if !((*Decimal)(unsafe.Pointer(pB)).FnFrac < minFrac) { 15087 goto __3 15088 } 15089 minFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 15090 __3: 15091 ; 15092 i = (*Decimal)(unsafe.Pointer(pA)).FnDigit - 1 15093 __4: 15094 if !(i >= 0) { 15095 goto __6 15096 } 15097 f = *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) 15098 carry = 0 15099 j = (*Decimal)(unsafe.Pointer(pB)).FnDigit - 1 15100 k = i + j + 3 15101 __7: 15102 if !(j >= 0) { 15103 goto __9 15104 } 15105 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + int32(f)*int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pB)).Fa + uintptr(j)))) + carry 15106 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 15107 carry = x / 10 15108 goto __8 15109 __8: 15110 j-- 15111 k-- 15112 goto __7 15113 goto __9 15114 __9: 15115 ; 15116 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + carry 15117 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 15118 *(*int8)(unsafe.Pointer(acc + uintptr(k-1))) += int8(x / 10) 15119 goto __5 15120 __5: 15121 i-- 15122 goto __4 15123 goto __6 15124 __6: 15125 ; 15126 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(pA)).Fa) 15127 (*Decimal)(unsafe.Pointer(pA)).Fa = acc 15128 acc = uintptr(0) 15129 *(*int32)(unsafe.Pointer(pA + 4)) += (*Decimal)(unsafe.Pointer(pB)).FnDigit + 2 15130 *(*int32)(unsafe.Pointer(pA + 8)) += (*Decimal)(unsafe.Pointer(pB)).FnFrac 15131 *(*uint8)(unsafe.Pointer(pA)) ^= uint8(int32((*Decimal)(unsafe.Pointer(pB)).Fsign)) 15132 __10: 15133 if !((*Decimal)(unsafe.Pointer(pA)).FnFrac > minFrac && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr((*Decimal)(unsafe.Pointer(pA)).FnDigit-1)))) == 0) { 15134 goto __11 15135 } 15136 (*Decimal)(unsafe.Pointer(pA)).FnFrac-- 15137 (*Decimal)(unsafe.Pointer(pA)).FnDigit-- 15138 goto __10 15139 __11: 15140 ; 15141 decimal_result(tls, context, pA) 15142 15143 mul_end: 15144 sqlite3.Xsqlite3_free(tls, acc) 15145 decimal_free(tls, pA) 15146 decimal_free(tls, pB) 15147 } 15148 15149 func sqlite3_decimal_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15150 var rc int32 = SQLITE_OK 15151 var i uint32 15152 _ = pzErrMsg 15153 15154 _ = pApi 15155 15156 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc))/uint64(unsafe.Sizeof(struct { 15157 FzFuncName uintptr 15158 FnArg int32 15159 F__ccgo_pad1 [4]byte 15160 FxFunc uintptr 15161 }{})) && rc == SQLITE_OK; i++ { 15162 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc[i].FzFuncName, aFunc[i].FnArg, 15163 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 15164 uintptr(0), aFunc[i].FxFunc, uintptr(0), uintptr(0)) 15165 } 15166 if rc == SQLITE_OK { 15167 rc = sqlite3.Xsqlite3_create_window_function(tls, db, ts+4826, 1, 15168 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, uintptr(0), 15169 *(*uintptr)(unsafe.Pointer(&struct { 15170 f func(*libc.TLS, uintptr, int32, uintptr) 15171 }{decimalSumStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumFinalize})), 15172 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumValue})), *(*uintptr)(unsafe.Pointer(&struct { 15173 f func(*libc.TLS, uintptr, int32, uintptr) 15174 }{decimalSumInverse})), uintptr(0)) 15175 } 15176 if rc == SQLITE_OK { 15177 rc = sqlite3.Xsqlite3_create_collation(tls, db, ts+4838, SQLITE_UTF8, 15178 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 15179 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 15180 }{decimalCollFunc}))) 15181 } 15182 return rc 15183 } 15184 15185 var aFunc = [5]struct { 15186 FzFuncName uintptr 15187 FnArg int32 15188 F__ccgo_pad1 [4]byte 15189 FxFunc uintptr 15190 }{ 15191 {FzFuncName: ts + 4838, FnArg: 1, FxFunc: 0}, 15192 {FzFuncName: ts + 4846, FnArg: 2, FxFunc: 0}, 15193 {FzFuncName: ts + 4858, FnArg: 2, FxFunc: 0}, 15194 {FzFuncName: ts + 4870, FnArg: 2, FxFunc: 0}, 15195 {FzFuncName: ts + 4882, FnArg: 2, FxFunc: 0}, 15196 } 15197 15198 type EvalResult = struct { 15199 Fz uintptr 15200 FzSep uintptr 15201 FszSep int32 15202 F__ccgo_pad1 [4]byte 15203 FnAlloc sqlite3_int64 15204 FnUsed sqlite3_int64 15205 } 15206 15207 func callback(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr, colnames uintptr) int32 { 15208 var p uintptr = pCtx 15209 var i int32 15210 if argv == uintptr(0) { 15211 return 0 15212 } 15213 for i = 0; i < argc; i++ { 15214 var z uintptr 15215 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 15216 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 15217 } else { 15218 z = ts + 584 15219 } 15220 var sz size_t = libc.Xstrlen(tls, z) 15221 if sqlite3_int64(sz)+(*EvalResult)(unsafe.Pointer(p)).FnUsed+sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep)+int64(1) > (*EvalResult)(unsafe.Pointer(p)).FnAlloc { 15222 var zNew uintptr 15223 (*EvalResult)(unsafe.Pointer(p)).FnAlloc = sqlite3_int64(uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc*int64(2)) + sz + uint64((*EvalResult)(unsafe.Pointer(p)).FszSep) + uint64(1)) 15224 15225 if (*EvalResult)(unsafe.Pointer(p)).FnAlloc <= int64(0x7fffffff) { 15226 zNew = sqlite3.Xsqlite3_realloc64(tls, (*EvalResult)(unsafe.Pointer(p)).Fz, uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc)) 15227 } else { 15228 zNew = uintptr(0) 15229 } 15230 if zNew == uintptr(0) { 15231 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(p)).Fz) 15232 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EvalResult{}))) 15233 return 1 15234 } 15235 (*EvalResult)(unsafe.Pointer(p)).Fz = zNew 15236 } 15237 if (*EvalResult)(unsafe.Pointer(p)).FnUsed > int64(0) { 15238 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)) 15239 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep) 15240 } 15241 libc.Xmemcpy(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), z, sz) 15242 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64(sz) 15243 } 15244 return 0 15245 } 15246 15247 func sqlEvalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15248 bp := tls.Alloc(48) 15249 defer tls.Free(48) 15250 15251 var zSql uintptr 15252 var db uintptr 15253 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 15254 var rc int32 15255 15256 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(EvalResult{}))) 15257 (*EvalResult)(unsafe.Pointer(bp)).FzSep = ts + 4894 15258 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15259 if zSql == uintptr(0) { 15260 return 15261 } 15262 if argc > 1 { 15263 (*EvalResult)(unsafe.Pointer(bp)).FzSep = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 15264 if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 15265 return 15266 } 15267 } 15268 (*EvalResult)(unsafe.Pointer(bp)).FszSep = int32(libc.Xstrlen(tls, (*EvalResult)(unsafe.Pointer(bp)).FzSep)) 15269 db = sqlite3.Xsqlite3_context_db_handle(tls, context) 15270 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, *(*uintptr)(unsafe.Pointer(&struct { 15271 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 15272 }{callback})), bp, bp+40) 15273 if rc != SQLITE_OK { 15274 sqlite3.Xsqlite3_result_error(tls, context, *(*uintptr)(unsafe.Pointer(bp + 40)), -1) 15275 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 15276 } else if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 15277 sqlite3.Xsqlite3_result_error_nomem(tls, context) 15278 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(bp)).Fz) 15279 } else { 15280 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}))) 15281 } 15282 } 15283 15284 func sqlite3_eval_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15285 var rc int32 = SQLITE_OK 15286 _ = pApi 15287 15288 _ = pzErrMsg 15289 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 1, 15290 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15291 *(*uintptr)(unsafe.Pointer(&struct { 15292 f func(*libc.TLS, uintptr, int32, uintptr) 15293 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 15294 if rc == SQLITE_OK { 15295 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 2, 15296 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 15297 *(*uintptr)(unsafe.Pointer(&struct { 15298 f func(*libc.TLS, uintptr, int32, uintptr) 15299 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 15300 } 15301 return rc 15302 } 15303 15304 type explain_vtab1 = struct { 15305 Fbase sqlite3_vtab 15306 Fdb uintptr 15307 } 15308 15309 type explain_vtab = explain_vtab1 15310 15311 type explain_cursor1 = struct { 15312 Fbase sqlite3_vtab_cursor 15313 Fdb uintptr 15314 FzSql uintptr 15315 FpExplain uintptr 15316 Frc int32 15317 F__ccgo_pad1 [4]byte 15318 } 15319 15320 type explain_cursor = explain_cursor1 15321 15322 func explainConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15323 var pNew uintptr 15324 var rc int32 15325 15326 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 15327 ts+4901) 15328 if rc == SQLITE_OK { 15329 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_vtab{}))) 15330 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 15331 if pNew == uintptr(0) { 15332 return SQLITE_NOMEM 15333 } 15334 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(explain_vtab{}))) 15335 (*explain_vtab)(unsafe.Pointer(pNew)).Fdb = db 15336 } 15337 return rc 15338 } 15339 15340 func explainDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15341 sqlite3.Xsqlite3_free(tls, pVtab) 15342 return SQLITE_OK 15343 } 15344 15345 func explainOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 15346 var pCur uintptr 15347 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_cursor{}))) 15348 if pCur == uintptr(0) { 15349 return SQLITE_NOMEM 15350 } 15351 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(explain_cursor{}))) 15352 (*explain_cursor)(unsafe.Pointer(pCur)).Fdb = (*explain_vtab)(unsafe.Pointer(p)).Fdb 15353 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15354 return SQLITE_OK 15355 } 15356 15357 func explainClose(tls *libc.TLS, cur uintptr) int32 { 15358 var pCur uintptr = cur 15359 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15360 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 15361 sqlite3.Xsqlite3_free(tls, pCur) 15362 return SQLITE_OK 15363 } 15364 15365 func explainNext(tls *libc.TLS, cur uintptr) int32 { 15366 var pCur uintptr = cur 15367 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15368 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_DONE && (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW { 15369 return (*explain_cursor)(unsafe.Pointer(pCur)).Frc 15370 } 15371 return SQLITE_OK 15372 } 15373 15374 func explainColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15375 var pCur uintptr = cur 15376 if i == EXPLN_COLUMN_SQL { 15377 sqlite3.Xsqlite3_result_text(tls, ctx, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql, -1, libc.UintptrFromInt32(-1)) 15378 } else { 15379 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, i)) 15380 } 15381 return SQLITE_OK 15382 } 15383 15384 func explainRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15385 var pCur uintptr = cur 15386 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, 0) 15387 return SQLITE_OK 15388 } 15389 15390 func explainEof(tls *libc.TLS, cur uintptr) int32 { 15391 var pCur uintptr = cur 15392 return libc.Bool32((*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW) 15393 } 15394 15395 func explainFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15396 bp := tls.Alloc(16) 15397 defer tls.Free(16) 15398 15399 var pCur uintptr = pVtabCursor 15400 var zSql uintptr = uintptr(0) 15401 var rc int32 15402 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15403 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 15404 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_TEXT { 15405 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = SQLITE_DONE 15406 return SQLITE_OK 15407 } 15408 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 15409 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 15410 if (*explain_cursor)(unsafe.Pointer(pCur)).FzSql != 0 { 15411 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+4963, libc.VaList(bp+8, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql)) 15412 } 15413 if zSql == uintptr(0) { 15414 rc = SQLITE_NOMEM 15415 } else { 15416 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*explain_cursor)(unsafe.Pointer(pCur)).Fdb, zSql, -1, pCur+24, uintptr(0)) 15417 sqlite3.Xsqlite3_free(tls, zSql) 15418 } 15419 if rc != 0 { 15420 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15421 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 15422 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 15423 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = uintptr(0) 15424 } else { 15425 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 15426 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_DONE || (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_ROW { 15427 rc = SQLITE_OK 15428 } else { 15429 rc = (*explain_cursor)(unsafe.Pointer(pCur)).Frc 15430 } 15431 } 15432 return rc 15433 } 15434 15435 func explainBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 15436 var i int32 15437 var idx int32 = -1 15438 var unusable int32 = 0 15439 15440 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(500) 15441 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 15442 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 15443 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != EXPLN_COLUMN_SQL { 15444 continue 15445 } 15446 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 15447 unusable = 1 15448 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 15449 idx = i 15450 } 15451 } 15452 if idx >= 0 { 15453 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 15454 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 15455 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).FargvIndex = 1 15456 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).Fomit = uint8(1) 15457 } else if unusable != 0 { 15458 return SQLITE_CONSTRAINT 15459 } 15460 return SQLITE_OK 15461 } 15462 15463 var explainModule = sqlite3_module{ 15464 FxConnect: 0, 15465 FxBestIndex: 0, 15466 FxDisconnect: 0, 15467 FxOpen: 0, 15468 FxClose: 0, 15469 FxFilter: 0, 15470 FxNext: 0, 15471 FxEof: 0, 15472 FxColumn: 0, 15473 FxRowid: 0, 15474 } 15475 15476 func sqlite3ExplainVtabInit(tls *libc.TLS, db uintptr) int32 { 15477 var rc int32 = SQLITE_OK 15478 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4974, uintptr(unsafe.Pointer(&explainModule)), uintptr(0)) 15479 return rc 15480 } 15481 15482 func sqlite3_explain_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15483 var rc int32 = SQLITE_OK 15484 _ = pApi 15485 15486 rc = sqlite3ExplainVtabInit(tls, db) 15487 return rc 15488 } 15489 15490 type flock = struct { 15491 Fl_type int16 15492 Fl_whence int16 15493 F__ccgo_pad1 [4]byte 15494 Fl_start int64 15495 Fl_len int64 15496 Fl_pid int32 15497 F__ccgo_pad2 [4]byte 15498 } 15499 15500 type useconds_t = uint32 15501 15502 type intptr_t = int64 15503 15504 type socklen_t = uint32 15505 15506 type dirent = struct { 15507 Fd_ino uint64 15508 Fd_off int64 15509 Fd_reclen uint16 15510 Fd_type uint8 15511 Fd_name [256]uint8 15512 F__ccgo_pad1 [5]byte 15513 } 15514 15515 type timezone = struct { 15516 Ftz_minuteswest int32 15517 Ftz_dsttime int32 15518 } 15519 15520 type itimerval = struct { 15521 Fit_interval struct { 15522 Ftv_sec int64 15523 Ftv_usec int64 15524 } 15525 Fit_value struct { 15526 Ftv_sec int64 15527 Ftv_usec int64 15528 } 15529 } 15530 15531 type tm = struct { 15532 Ftm_sec int32 15533 Ftm_min int32 15534 Ftm_hour int32 15535 Ftm_mday int32 15536 Ftm_mon int32 15537 Ftm_year int32 15538 Ftm_wday int32 15539 Ftm_yday int32 15540 Ftm_isdst int32 15541 F__ccgo_pad1 [4]byte 15542 Ftm_gmtoff int64 15543 Ftm_zone uintptr 15544 } 15545 15546 type itimerspec = struct { 15547 Fit_interval struct { 15548 Ftv_sec int64 15549 Ftv_nsec int64 15550 } 15551 Fit_value struct { 15552 Ftv_sec int64 15553 Ftv_nsec int64 15554 } 15555 } 15556 15557 type sigevent = struct { 15558 Fsigev_value struct { 15559 F__ccgo_pad1 [0]uint64 15560 Fsival_int int32 15561 F__ccgo_pad2 [4]byte 15562 } 15563 Fsigev_signo int32 15564 Fsigev_notify int32 15565 F_sigev_un struct { 15566 F__ccgo_pad1 [0]uint64 15567 F_pad [12]int32 15568 } 15569 } 15570 15571 func readFileContents(tls *libc.TLS, ctx uintptr, zName uintptr) { 15572 var in uintptr 15573 var nIn sqlite3_int64 15574 var pBuf uintptr 15575 var db uintptr 15576 var mxBlob int32 15577 15578 in = libc.Xfopen(tls, zName, ts+4402) 15579 if in == uintptr(0) { 15580 return 15581 } 15582 libc.Xfseek(tls, in, int64(0), SEEK_END) 15583 nIn = libc.Xftell(tls, in) 15584 libc.Xrewind(tls, in) 15585 db = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 15586 mxBlob = sqlite3.Xsqlite3_limit(tls, db, SQLITE_LIMIT_LENGTH, -1) 15587 if nIn > sqlite3_int64(mxBlob) { 15588 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_TOOBIG) 15589 libc.Xfclose(tls, in) 15590 return 15591 } 15592 pBuf = sqlite3.Xsqlite3_malloc64(tls, func() uint64 { 15593 if nIn != 0 { 15594 return uint64(nIn) 15595 } 15596 return uint64(1) 15597 }()) 15598 if pBuf == uintptr(0) { 15599 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 15600 libc.Xfclose(tls, in) 15601 return 15602 } 15603 if nIn == sqlite3_int64(libc.Xfread(tls, pBuf, uint64(1), size_t(nIn), in)) { 15604 sqlite3.Xsqlite3_result_blob64(tls, ctx, pBuf, uint64(nIn), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 15605 } else { 15606 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_IOERR) 15607 sqlite3.Xsqlite3_free(tls, pBuf) 15608 } 15609 libc.Xfclose(tls, in) 15610 } 15611 15612 func readfileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15613 var zName uintptr 15614 _ = argc 15615 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15616 if zName == uintptr(0) { 15617 return 15618 } 15619 readFileContents(tls, context, zName) 15620 } 15621 15622 func ctxErrorMsg(tls *libc.TLS, ctx uintptr, zFmt uintptr, va uintptr) { 15623 var zMsg uintptr = uintptr(0) 15624 var ap va_list 15625 _ = ap 15626 ap = va 15627 zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 15628 sqlite3.Xsqlite3_result_error(tls, ctx, zMsg, -1) 15629 sqlite3.Xsqlite3_free(tls, zMsg) 15630 _ = ap 15631 } 15632 15633 func fileStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 15634 return libc.Xstat(tls, zPath, pStatBuf) 15635 } 15636 15637 func fileLinkStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 15638 return libc.Xlstat(tls, zPath, pStatBuf) 15639 } 15640 15641 func makeDirectory(tls *libc.TLS, zFile uintptr) int32 { 15642 bp := tls.Alloc(152) 15643 defer tls.Free(152) 15644 15645 var zCopy uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zFile)) 15646 var rc int32 = SQLITE_OK 15647 15648 if zCopy == uintptr(0) { 15649 rc = SQLITE_NOMEM 15650 } else { 15651 var nCopy int32 = int32(libc.Xstrlen(tls, zCopy)) 15652 var i int32 = 1 15653 15654 for rc == SQLITE_OK { 15655 var rc2 int32 15656 15657 for ; int32(*(*uint8)(unsafe.Pointer(zCopy + uintptr(i)))) != '/' && i < nCopy; i++ { 15658 } 15659 if i == nCopy { 15660 break 15661 } 15662 *(*uint8)(unsafe.Pointer(zCopy + uintptr(i))) = uint8(0) 15663 15664 rc2 = fileStat(tls, zCopy, bp+8) 15665 if rc2 != 0 { 15666 if libc.Xmkdir(tls, zCopy, uint32(0777)) != 0 { 15667 rc = SQLITE_ERROR 15668 } 15669 } else { 15670 if !((*stat)(unsafe.Pointer(bp+8)).Fst_mode&uint32(0170000) == uint32(0040000)) { 15671 rc = SQLITE_ERROR 15672 } 15673 } 15674 *(*uint8)(unsafe.Pointer(zCopy + uintptr(i))) = uint8('/') 15675 i++ 15676 } 15677 15678 sqlite3.Xsqlite3_free(tls, zCopy) 15679 } 15680 15681 return rc 15682 } 15683 15684 func writeFile(tls *libc.TLS, pCtx uintptr, zFile uintptr, pData uintptr, mode mode_t, mtime sqlite3_int64) int32 { 15685 bp := tls.Alloc(176) 15686 defer tls.Free(176) 15687 15688 if zFile == uintptr(0) { 15689 return 1 15690 } 15691 if mode&mode_t(0170000) == mode_t(0120000) { 15692 var zTo uintptr = sqlite3.Xsqlite3_value_text(tls, pData) 15693 if zTo == uintptr(0) || libc.Xsymlink(tls, zTo, zFile) < 0 { 15694 return 1 15695 } 15696 } else { 15697 if mode&mode_t(0170000) == mode_t(0040000) { 15698 if libc.Xmkdir(tls, zFile, mode) != 0 { 15699 if *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) != EEXIST || 15700 0 != fileStat(tls, zFile, bp) || 15701 !((*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0170000) == uint32(0040000)) || 15702 (*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0777) != mode&mode_t(0777) && 0 != libc.Xchmod(tls, zFile, mode&mode_t(0777)) { 15703 return 1 15704 } 15705 } 15706 } else { 15707 var nWrite sqlite3_int64 = int64(0) 15708 var z uintptr 15709 var rc int32 = 0 15710 var out uintptr = libc.Xfopen(tls, zFile, ts+4982) 15711 if out == uintptr(0) { 15712 return 1 15713 } 15714 z = sqlite3.Xsqlite3_value_blob(tls, pData) 15715 if z != 0 { 15716 var n sqlite3_int64 = sqlite3_int64(libc.Xfwrite(tls, z, uint64(1), uint64(sqlite3.Xsqlite3_value_bytes(tls, pData)), out)) 15717 nWrite = sqlite3_int64(sqlite3.Xsqlite3_value_bytes(tls, pData)) 15718 if nWrite != n { 15719 rc = 1 15720 } 15721 } 15722 libc.Xfclose(tls, out) 15723 if rc == 0 && mode != 0 && libc.Xchmod(tls, zFile, mode&mode_t(0777)) != 0 { 15724 rc = 1 15725 } 15726 if rc != 0 { 15727 return 2 15728 } 15729 sqlite3.Xsqlite3_result_int64(tls, pCtx, nWrite) 15730 } 15731 } 15732 15733 if mtime >= int64(0) { 15734 (*timeval)(unsafe.Pointer(bp + 144)).Ftv_usec = libc.AssignPtrInt64(bp+144+1*16+8, int64(0)) 15735 (*timeval)(unsafe.Pointer(bp + 144)).Ftv_sec = libc.Xtime(tls, uintptr(0)) 15736 (*timeval)(unsafe.Pointer(bp + 144 + 1*16)).Ftv_sec = mtime 15737 if libc.Xutimes(tls, zFile, bp+144) != 0 { 15738 return 1 15739 } 15740 } 15741 15742 return 0 15743 } 15744 15745 func writefileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15746 bp := tls.Alloc(24) 15747 defer tls.Free(24) 15748 15749 var zFile uintptr 15750 var mode mode_t = mode_t(0) 15751 var res int32 15752 var mtime sqlite3_int64 = int64(-1) 15753 15754 if argc < 2 || argc > 4 { 15755 sqlite3.Xsqlite3_result_error(tls, context, 15756 ts+4985, -1) 15757 return 15758 } 15759 15760 zFile = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 15761 if zFile == uintptr(0) { 15762 return 15763 } 15764 if argc >= 3 { 15765 mode = mode_t(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 15766 } 15767 if argc == 4 { 15768 mtime = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 15769 } 15770 15771 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 15772 if res == 1 && *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) == ENOENT { 15773 if makeDirectory(tls, zFile) == SQLITE_OK { 15774 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 15775 } 15776 } 15777 15778 if argc > 2 && res != 0 { 15779 if mode&mode_t(0170000) == mode_t(0120000) { 15780 ctxErrorMsg(tls, context, ts+5035, libc.VaList(bp, zFile)) 15781 } else if mode&mode_t(0170000) == mode_t(0040000) { 15782 ctxErrorMsg(tls, context, ts+5064, libc.VaList(bp+8, zFile)) 15783 } else { 15784 ctxErrorMsg(tls, context, ts+5095, libc.VaList(bp+16, zFile)) 15785 } 15786 } 15787 } 15788 15789 func lsModeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 15790 bp := tls.Alloc(16) 15791 defer tls.Free(16) 15792 15793 var i int32 15794 var iMode int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 15795 15796 _ = argc 15797 if iMode&0170000 == 0120000 { 15798 *(*uint8)(unsafe.Pointer(bp)) = uint8('l') 15799 } else if iMode&0170000 == 0100000 { 15800 *(*uint8)(unsafe.Pointer(bp)) = uint8('-') 15801 } else if iMode&0170000 == 0040000 { 15802 *(*uint8)(unsafe.Pointer(bp)) = uint8('d') 15803 } else { 15804 *(*uint8)(unsafe.Pointer(bp)) = uint8('?') 15805 } 15806 for i = 0; i < 3; i++ { 15807 var m int32 = iMode >> ((2 - i) * 3) 15808 var a uintptr = bp + uintptr(1+i*3) 15809 *(*uint8)(unsafe.Pointer(a)) = func() uint8 { 15810 if m&0x4 != 0 { 15811 return uint8('r') 15812 } 15813 return uint8('-') 15814 }() 15815 *(*uint8)(unsafe.Pointer(a + 1)) = func() uint8 { 15816 if m&0x2 != 0 { 15817 return uint8('w') 15818 } 15819 return uint8('-') 15820 }() 15821 *(*uint8)(unsafe.Pointer(a + 2)) = func() uint8 { 15822 if m&0x1 != 0 { 15823 return uint8('x') 15824 } 15825 return uint8('-') 15826 }() 15827 } 15828 *(*uint8)(unsafe.Pointer(bp + 10)) = uint8(0) 15829 sqlite3.Xsqlite3_result_text(tls, context, bp, -1, libc.UintptrFromInt32(-1)) 15830 } 15831 15832 type fsdir_cursor1 = struct { 15833 Fbase sqlite3_vtab_cursor 15834 FnLvl int32 15835 FiLvl int32 15836 FaLvl uintptr 15837 FzBase uintptr 15838 FnBase int32 15839 F__ccgo_pad1 [4]byte 15840 FsStat struct { 15841 Fst_dev uint64 15842 Fst_ino uint64 15843 Fst_nlink uint64 15844 Fst_mode uint32 15845 Fst_uid uint32 15846 Fst_gid uint32 15847 F__pad2 int32 15848 Fst_rdev uint64 15849 Fst_size int64 15850 Fst_blksize int64 15851 Fst_blocks int64 15852 Fst_atim struct { 15853 Ftv_sec int64 15854 Ftv_nsec int64 15855 } 15856 Fst_mtim struct { 15857 Ftv_sec int64 15858 Ftv_nsec int64 15859 } 15860 Fst_ctim struct { 15861 Ftv_sec int64 15862 Ftv_nsec int64 15863 } 15864 F__glibc_reserved4 uint64 15865 F__glibc_reserved5 uint64 15866 F__glibc_reserved6 uint64 15867 } 15868 FzPath uintptr 15869 FiRowid sqlite3_int64 15870 } 15871 15872 type fsdir_cursor = fsdir_cursor1 15873 type FsdirLevel1 = struct { 15874 FpDir uintptr 15875 FzDir uintptr 15876 } 15877 15878 type FsdirLevel = FsdirLevel1 15879 15880 type fsdir_tab1 = struct{ Fbase sqlite3_vtab } 15881 15882 type fsdir_tab = fsdir_tab1 15883 15884 func fsdirConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15885 var pNew uintptr = uintptr(0) 15886 var rc int32 15887 _ = pAux 15888 _ = argc 15889 _ = argv 15890 _ = pzErr 15891 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5120) 15892 if rc == SQLITE_OK { 15893 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_tab{}))) 15894 if pNew == uintptr(0) { 15895 return SQLITE_NOMEM 15896 } 15897 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fsdir_tab{}))) 15898 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 15899 } 15900 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 15901 return rc 15902 } 15903 15904 func fsdirDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15905 sqlite3.Xsqlite3_free(tls, pVtab) 15906 return SQLITE_OK 15907 } 15908 15909 func fsdirOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 15910 var pCur uintptr 15911 _ = p 15912 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_cursor{}))) 15913 if pCur == uintptr(0) { 15914 return SQLITE_NOMEM 15915 } 15916 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fsdir_cursor{}))) 15917 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 15918 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15919 return SQLITE_OK 15920 } 15921 15922 func fsdirResetCursor(tls *libc.TLS, pCur uintptr) { 15923 var i int32 15924 for i = 0; i <= (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl; i++ { 15925 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(i)*16 15926 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir != 0 { 15927 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15928 } 15929 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15930 } 15931 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 15932 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl) 15933 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = uintptr(0) 15934 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15935 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = uintptr(0) 15936 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = 0 15937 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = 0 15938 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 15939 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 15940 } 15941 15942 func fsdirClose(tls *libc.TLS, cur uintptr) int32 { 15943 var pCur uintptr = cur 15944 15945 fsdirResetCursor(tls, pCur) 15946 sqlite3.Xsqlite3_free(tls, pCur) 15947 return SQLITE_OK 15948 } 15949 15950 func fsdirSetErrmsg(tls *libc.TLS, pCur uintptr, zFmt uintptr, va uintptr) { 15951 var ap va_list 15952 _ = ap 15953 ap = va 15954 (*sqlite3_vtab)(unsafe.Pointer((*fsdir_cursor)(unsafe.Pointer(pCur)).Fbase.FpVtab)).FzErrMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 15955 _ = ap 15956 } 15957 15958 func fsdirNext(tls *libc.TLS, cur uintptr) int32 { 15959 bp := tls.Alloc(32) 15960 defer tls.Free(32) 15961 15962 var pCur uintptr = cur 15963 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 15964 15965 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid++ 15966 if m&mode_t(0170000) == mode_t(0040000) { 15967 var iNew int32 = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl + 1 15968 var pLvl uintptr 15969 if iNew >= (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl { 15970 var nNew int32 = iNew + 1 15971 var nByte sqlite3_int64 = sqlite3_int64(uint64(nNew) * uint64(unsafe.Sizeof(FsdirLevel{}))) 15972 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl, uint64(nByte)) 15973 if aNew == uintptr(0) { 15974 return SQLITE_NOMEM 15975 } 15976 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)) 15977 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = aNew 15978 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = nNew 15979 } 15980 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = iNew 15981 pLvl = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(iNew)*16 15982 15983 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath 15984 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 15985 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = libc.Xopendir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 15986 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir == uintptr(0) { 15987 fsdirSetErrmsg(tls, pCur, ts+5180, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 15988 return SQLITE_ERROR 15989 } 15990 } 15991 15992 for (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl >= 0 { 15993 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl)*16 15994 var pEntry uintptr = libc.Xreaddir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 15995 if pEntry != 0 { 15996 if int32(*(*uint8)(unsafe.Pointer(pEntry + 19))) == '.' { 15997 if int32(*(*uint8)(unsafe.Pointer(pEntry + 19 + 1))) == '.' && int32(*(*uint8)(unsafe.Pointer(pEntry + 19 + 2))) == 0 { 15998 continue 15999 } 16000 if int32(*(*uint8)(unsafe.Pointer(pEntry + 19 + 1))) == 0 { 16001 continue 16002 } 16003 } 16004 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 16005 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp+8, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir, pEntry+19)) 16006 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 16007 return SQLITE_NOMEM 16008 } 16009 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 16010 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 16011 return SQLITE_ERROR 16012 } 16013 return SQLITE_OK 16014 } 16015 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 16016 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 16017 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = uintptr(0) 16018 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = uintptr(0) 16019 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl-- 16020 } 16021 16022 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 16023 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 16024 return SQLITE_OK 16025 } 16026 16027 func fsdirColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 16028 bp := tls.Alloc(64) 16029 defer tls.Free(64) 16030 16031 var pCur uintptr = cur 16032 switch i { 16033 case FSDIR_COLUMN_NAME: 16034 { 16035 sqlite3.Xsqlite3_result_text(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase), -1, libc.UintptrFromInt32(-1)) 16036 break 16037 16038 } 16039 16040 case FSDIR_COLUMN_MODE: 16041 sqlite3.Xsqlite3_result_int64(tls, ctx, int64((*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode)) 16042 break 16043 16044 case FSDIR_COLUMN_MTIME: 16045 sqlite3.Xsqlite3_result_int64(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mtim.Ftv_sec) 16046 break 16047 16048 case FSDIR_COLUMN_DATA: 16049 { 16050 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 16051 if m&mode_t(0170000) == mode_t(0040000) { 16052 sqlite3.Xsqlite3_result_null(tls, ctx) 16053 } else if m&mode_t(0170000) == mode_t(0120000) { 16054 var aBuf uintptr = bp 16055 var nBuf sqlite3_int64 = int64(64) 16056 var n int32 16057 16058 for 1 != 0 { 16059 n = int32(libc.Xreadlink(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, aBuf, uint64(nBuf))) 16060 if sqlite3_int64(n) < nBuf { 16061 break 16062 } 16063 if aBuf != bp { 16064 sqlite3.Xsqlite3_free(tls, aBuf) 16065 } 16066 nBuf = nBuf * int64(2) 16067 aBuf = sqlite3.Xsqlite3_malloc64(tls, uint64(nBuf)) 16068 if aBuf == uintptr(0) { 16069 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 16070 return SQLITE_NOMEM 16071 } 16072 } 16073 16074 sqlite3.Xsqlite3_result_text(tls, ctx, aBuf, n, libc.UintptrFromInt32(-1)) 16075 if aBuf != bp { 16076 sqlite3.Xsqlite3_free(tls, aBuf) 16077 } 16078 } else { 16079 readFileContents(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 16080 } 16081 16082 } 16083 fallthrough 16084 case FSDIR_COLUMN_PATH: 16085 fallthrough 16086 default: 16087 { 16088 break 16089 16090 } 16091 } 16092 return SQLITE_OK 16093 } 16094 16095 func fsdirRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 16096 var pCur uintptr = cur 16097 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid 16098 return SQLITE_OK 16099 } 16100 16101 func fsdirEof(tls *libc.TLS, cur uintptr) int32 { 16102 var pCur uintptr = cur 16103 return libc.Bool32((*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0)) 16104 } 16105 16106 func fsdirFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 16107 bp := tls.Alloc(32) 16108 defer tls.Free(32) 16109 16110 var zDir uintptr = uintptr(0) 16111 var pCur uintptr = cur 16112 _ = idxStr 16113 fsdirResetCursor(tls, pCur) 16114 16115 if idxNum == 0 { 16116 fsdirSetErrmsg(tls, pCur, ts+5233, 0) 16117 return SQLITE_ERROR 16118 } 16119 16120 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 16121 if zDir == uintptr(0) { 16122 fsdirSetErrmsg(tls, pCur, ts+5275, 0) 16123 return SQLITE_ERROR 16124 } 16125 if argc == 2 { 16126 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 16127 } 16128 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase != 0 { 16129 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = int32(libc.Xstrlen(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase)) + 1 16130 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase, zDir)) 16131 } else { 16132 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zDir)) 16133 } 16134 16135 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 16136 return SQLITE_NOMEM 16137 } 16138 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 16139 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 16140 return SQLITE_ERROR 16141 } 16142 16143 return SQLITE_OK 16144 } 16145 16146 func fsdirBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 16147 var i int32 16148 var idxPath int32 = -1 16149 var idxDir int32 = -1 16150 var seenPath int32 = 0 16151 var seenDir int32 = 0 16152 var pConstraint uintptr 16153 16154 _ = tab 16155 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 16156 i = 0 16157 __1: 16158 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 16159 goto __3 16160 } 16161 { 16162 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 16163 goto __2 16164 } 16165 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 16166 case FSDIR_COLUMN_PATH: 16167 { 16168 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 16169 idxPath = i 16170 seenPath = 0 16171 } else if idxPath < 0 { 16172 seenPath = 1 16173 } 16174 break 16175 16176 } 16177 case FSDIR_COLUMN_DIR: 16178 { 16179 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 16180 idxDir = i 16181 seenDir = 0 16182 } else if idxDir < 0 { 16183 seenDir = 1 16184 } 16185 break 16186 16187 } 16188 } 16189 16190 } 16191 goto __2 16192 __2: 16193 i++ 16194 pConstraint += 12 16195 goto __1 16196 goto __3 16197 __3: 16198 ; 16199 if seenPath != 0 || seenDir != 0 { 16200 return SQLITE_CONSTRAINT 16201 } 16202 16203 if idxPath < 0 { 16204 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 16205 16206 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(0x7fffffff) 16207 } else { 16208 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).Fomit = uint8(1) 16209 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).FargvIndex = 1 16210 if idxDir >= 0 { 16211 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).Fomit = uint8(1) 16212 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).FargvIndex = 2 16213 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 16214 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 16215 } else { 16216 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 16217 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100.0 16218 } 16219 } 16220 16221 return SQLITE_OK 16222 } 16223 16224 func fsdirRegister(tls *libc.TLS, db uintptr) int32 { 16225 var rc int32 = sqlite3.Xsqlite3_create_module(tls, db, ts+5325, uintptr(unsafe.Pointer(&fsdirModule1)), uintptr(0)) 16226 return rc 16227 } 16228 16229 var fsdirModule1 = sqlite3_module{ 16230 FxConnect: 0, 16231 FxBestIndex: 0, 16232 FxDisconnect: 0, 16233 FxOpen: 0, 16234 FxClose: 0, 16235 FxFilter: 0, 16236 FxNext: 0, 16237 FxEof: 0, 16238 FxColumn: 0, 16239 FxRowid: 0, 16240 } 16241 16242 func sqlite3_fileio_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16243 var rc int32 = SQLITE_OK 16244 _ = pApi 16245 16246 _ = pzErrMsg 16247 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5331, 1, 16248 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 16249 *(*uintptr)(unsafe.Pointer(&struct { 16250 f func(*libc.TLS, uintptr, int32, uintptr) 16251 }{readfileFunc})), uintptr(0), uintptr(0)) 16252 if rc == SQLITE_OK { 16253 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5340, -1, 16254 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 16255 *(*uintptr)(unsafe.Pointer(&struct { 16256 f func(*libc.TLS, uintptr, int32, uintptr) 16257 }{writefileFunc})), uintptr(0), uintptr(0)) 16258 } 16259 if rc == SQLITE_OK { 16260 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5350, 1, SQLITE_UTF8, uintptr(0), 16261 *(*uintptr)(unsafe.Pointer(&struct { 16262 f func(*libc.TLS, uintptr, int32, uintptr) 16263 }{lsModeFunc})), uintptr(0), uintptr(0)) 16264 } 16265 if rc == SQLITE_OK { 16266 rc = fsdirRegister(tls, db) 16267 } 16268 return rc 16269 } 16270 16271 type fuzzer_vtab1 = struct { 16272 Fbase sqlite3_vtab 16273 FzClassName uintptr 16274 FpRule uintptr 16275 FnCursor int32 16276 F__ccgo_pad1 [4]byte 16277 } 16278 16279 type fuzzer_vtab = fuzzer_vtab1 16280 type fuzzer_cursor1 = struct { 16281 Fbase sqlite3_vtab_cursor 16282 FiRowid sqlite3_int64 16283 FpVtab uintptr 16284 FrLimit fuzzer_cost 16285 F__ccgo_pad1 [4]byte 16286 FpStem uintptr 16287 FpDone uintptr 16288 FaQueue [20]uintptr 16289 FmxQueue int32 16290 F__ccgo_pad2 [4]byte 16291 FzBuf uintptr 16292 FnBuf int32 16293 FnStem int32 16294 FiRuleset int32 16295 F__ccgo_pad3 [4]byte 16296 FnullRule fuzzer_rule 16297 FapHash [4001]uintptr 16298 } 16299 16300 type fuzzer_cursor = fuzzer_cursor1 16301 type fuzzer_rule1 = struct { 16302 FpNext uintptr 16303 FzFrom uintptr 16304 FrCost fuzzer_cost 16305 FnFrom fuzzer_len 16306 FnTo fuzzer_len 16307 F__ccgo_pad1 [2]byte 16308 FiRuleset fuzzer_ruleid 16309 FzTo [4]uint8 16310 } 16311 16312 type fuzzer_rule = fuzzer_rule1 16313 type fuzzer_stem1 = struct { 16314 FzBasis uintptr 16315 FpRule uintptr 16316 FpNext uintptr 16317 FpHash uintptr 16318 FrBaseCost fuzzer_cost 16319 FrCostX fuzzer_cost 16320 FnBasis fuzzer_len 16321 Fn fuzzer_len 16322 F__ccgo_pad1 [6]byte 16323 } 16324 16325 type fuzzer_stem = fuzzer_stem1 16326 16327 type fuzzer_cost = int32 16328 type fuzzer_len = int8 16329 type fuzzer_ruleid = int32 16330 16331 func fuzzerMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 16332 bp := tls.Alloc(32) 16333 defer tls.Free(32) 16334 16335 var pTail uintptr 16336 16337 pTail = bp 16338 for pA != 0 && pB != 0 { 16339 if (*fuzzer_rule)(unsafe.Pointer(pA)).FrCost <= (*fuzzer_rule)(unsafe.Pointer(pB)).FrCost { 16340 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 16341 pTail = pA 16342 pA = (*fuzzer_rule)(unsafe.Pointer(pA)).FpNext 16343 } else { 16344 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 16345 pTail = pB 16346 pB = (*fuzzer_rule)(unsafe.Pointer(pB)).FpNext 16347 } 16348 } 16349 if pA == uintptr(0) { 16350 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 16351 } else { 16352 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 16353 } 16354 return (*fuzzer_rule)(unsafe.Pointer(bp)).FpNext 16355 } 16356 16357 func fuzzerLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 16358 bp := tls.Alloc(48) 16359 defer tls.Free(48) 16360 16361 var iRuleset sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 16362 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 16363 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 16364 var nCost int32 = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 16365 16366 var rc int32 = SQLITE_OK 16367 var nFrom int32 16368 var nTo int32 16369 var pRule uintptr = uintptr(0) 16370 16371 if zFrom == uintptr(0) { 16372 zFrom = ts + 584 16373 } 16374 if zTo == uintptr(0) { 16375 zTo = ts + 584 16376 } 16377 nFrom = int32(libc.Xstrlen(tls, zFrom)) 16378 nTo = int32(libc.Xstrlen(tls, zTo)) 16379 16380 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 16381 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 16382 return SQLITE_OK 16383 } 16384 16385 if nCost <= 0 || nCost > FUZZER_MX_COST { 16386 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 16387 libc.VaList(bp, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_COST)) 16388 rc = SQLITE_ERROR 16389 } else if nFrom > FUZZER_MX_LENGTH || nTo > FUZZER_MX_LENGTH { 16390 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 16391 libc.VaList(bp+16, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_LENGTH)) 16392 rc = SQLITE_ERROR 16393 } else if iRuleset < int64(0) || iRuleset > int64(FUZZER_MX_RULEID) { 16394 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+5357, 16395 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_RULEID)) 16396 rc = SQLITE_ERROR 16397 } else { 16398 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_rule{}))+uint64(nFrom)+uint64(nTo)) 16399 if pRule == uintptr(0) { 16400 rc = SQLITE_NOMEM 16401 } else { 16402 libc.Xmemset(tls, pRule, 0, uint64(unsafe.Sizeof(fuzzer_rule{}))) 16403 (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 28 16404 *(*uintptr)(unsafe.Pointer(pRule + 8)) += uintptr(nTo + 1) 16405 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom = fuzzer_len(nFrom) 16406 libc.Xmemcpy(tls, (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1)) 16407 libc.Xmemcpy(tls, pRule+28, zTo, uint64(nTo+1)) 16408 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo = fuzzer_len(nTo) 16409 (*fuzzer_rule)(unsafe.Pointer(pRule)).FrCost = nCost 16410 (*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset = int32(iRuleset) 16411 } 16412 } 16413 16414 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 16415 return rc 16416 } 16417 16418 func fuzzerLoadRules(tls *libc.TLS, db uintptr, p uintptr, zDb uintptr, zData uintptr, pzErr uintptr) int32 { 16419 bp := tls.Alloc(192) 16420 defer tls.Free(192) 16421 16422 var rc int32 = SQLITE_OK 16423 var zSql uintptr 16424 var pHead uintptr = uintptr(0) 16425 16426 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, zDb, zData)) 16427 if zSql == uintptr(0) { 16428 rc = SQLITE_NOMEM 16429 } else { 16430 var rc2 int32 16431 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 16432 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 16433 if rc != SQLITE_OK { 16434 *(*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))) 16435 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 16436 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 16437 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, zData, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 16438 rc = SQLITE_ERROR 16439 } else { 16440 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 16441 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 16442 rc = fuzzerLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 16443 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 16444 (*fuzzer_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 16445 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 16446 } 16447 } 16448 } 16449 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 16450 if rc == SQLITE_OK { 16451 rc = rc2 16452 } 16453 } 16454 sqlite3.Xsqlite3_free(tls, zSql) 16455 16456 if rc == SQLITE_OK { 16457 var i uint32 16458 var pX uintptr 16459 16460 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 16461 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 16462 } 16463 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 16464 pHead = (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext 16465 (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 16466 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++ { 16467 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 16468 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 16469 } 16470 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 16471 } 16472 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 16473 i = uint32(1) 16474 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 16475 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 16476 } 16477 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = fuzzerMergeRules(tls, (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule, pX) 16478 } else { 16479 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = pHead 16480 } 16481 16482 return rc 16483 } 16484 16485 func fuzzerDequote(tls *libc.TLS, zIn uintptr) uintptr { 16486 var nIn sqlite3_int64 16487 var zOut uintptr 16488 16489 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 16490 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 16491 if zOut != 0 { 16492 var q uint8 = *(*uint8)(unsafe.Pointer(zIn)) 16493 16494 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 16495 libc.Xmemcpy(tls, zOut, zIn, size_t(nIn+int64(1))) 16496 } else { 16497 var iOut int32 = 0 16498 var iIn int32 16499 16500 if int32(q) == '[' { 16501 q = uint8(']') 16502 } 16503 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 16504 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 16505 iIn++ 16506 } 16507 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(zIn + uintptr(iIn))) 16508 } 16509 } 16510 16511 } 16512 return zOut 16513 } 16514 16515 func fuzzerDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 16516 var p uintptr = pVtab 16517 16518 for (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule != 0 { 16519 var pRule uintptr = (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule 16520 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16521 sqlite3.Xsqlite3_free(tls, pRule) 16522 } 16523 sqlite3.Xsqlite3_free(tls, p) 16524 return SQLITE_OK 16525 } 16526 16527 func fuzzerConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 16528 bp := tls.Alloc(8) 16529 defer tls.Free(8) 16530 16531 var rc int32 = SQLITE_OK 16532 var pNew uintptr = uintptr(0) 16533 var zModule uintptr = *(*uintptr)(unsafe.Pointer(argv)) 16534 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 16535 16536 if argc != 4 { 16537 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 16538 ts+5394, libc.VaList(bp, zModule)) 16539 rc = SQLITE_ERROR 16540 } else { 16541 var nModule sqlite3_int64 16542 16543 nModule = sqlite3_int64(libc.Xstrlen(tls, zModule)) 16544 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_vtab{}))+uint64(nModule)+uint64(1)) 16545 if pNew == uintptr(0) { 16546 rc = SQLITE_NOMEM 16547 } else { 16548 var zTab uintptr 16549 16550 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_vtab{}))) 16551 (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName = pNew + 1*48 16552 libc.Xmemcpy(tls, (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName, zModule, size_t(nModule+int64(1))) 16553 16554 zTab = fuzzerDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 16555 if zTab == uintptr(0) { 16556 rc = SQLITE_NOMEM 16557 } else { 16558 rc = fuzzerLoadRules(tls, db, pNew, zDb, zTab, pzErr) 16559 sqlite3.Xsqlite3_free(tls, zTab) 16560 } 16561 16562 if rc == SQLITE_OK { 16563 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5445) 16564 } 16565 if rc != SQLITE_OK { 16566 fuzzerDisconnect(tls, pNew) 16567 pNew = uintptr(0) 16568 } else { 16569 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 16570 } 16571 } 16572 } 16573 16574 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 16575 return rc 16576 } 16577 16578 func fuzzerOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 16579 var p uintptr = pVTab 16580 var pCur uintptr 16581 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fuzzer_cursor{}))) 16582 if pCur == uintptr(0) { 16583 return SQLITE_NOMEM 16584 } 16585 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(fuzzer_cursor{}))) 16586 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab = p 16587 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 16588 (*fuzzer_vtab)(unsafe.Pointer(p)).FnCursor++ 16589 return SQLITE_OK 16590 } 16591 16592 func fuzzerClearStemList(tls *libc.TLS, pStem uintptr) { 16593 for pStem != 0 { 16594 var pNext uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext 16595 sqlite3.Xsqlite3_free(tls, pStem) 16596 pStem = pNext 16597 } 16598 } 16599 16600 func fuzzerClearCursor(tls *libc.TLS, pCur uintptr, clearHash int32) { 16601 var i int32 16602 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 16603 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone) 16604 for i = 0; i < FUZZER_NQUEUE; i++ { 16605 fuzzerClearStemList(tls, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 16606 } 16607 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16608 if clearHash != 0 && (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem != 0 { 16609 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = 0 16610 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16611 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = uintptr(0) 16612 libc.Xmemset(tls, pCur+48, 0, uint64(unsafe.Sizeof([20]uintptr{}))) 16613 libc.Xmemset(tls, pCur+272, 0, uint64(unsafe.Sizeof([4001]uintptr{}))) 16614 } 16615 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem = 0 16616 } 16617 16618 func fuzzerClose(tls *libc.TLS, cur uintptr) int32 { 16619 var pCur uintptr = cur 16620 fuzzerClearCursor(tls, pCur, 0) 16621 sqlite3.Xsqlite3_free(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 16622 (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 16623 sqlite3.Xsqlite3_free(tls, pCur) 16624 return SQLITE_OK 16625 } 16626 16627 func fuzzerRender(tls *libc.TLS, pStem uintptr, pzBuf uintptr, pnBuf uintptr) int32 { 16628 var pRule uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule 16629 var n int32 16630 var z uintptr 16631 16632 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis) + int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo) - int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) 16633 if *(*int32)(unsafe.Pointer(pnBuf)) < n+1 { 16634 *(*uintptr)(unsafe.Pointer(pzBuf)) = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(pzBuf)), n+100) 16635 if *(*uintptr)(unsafe.Pointer(pzBuf)) == uintptr(0) { 16636 return SQLITE_NOMEM 16637 } 16638 *(*int32)(unsafe.Pointer(pnBuf)) = n + 100 16639 } 16640 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) 16641 z = *(*uintptr)(unsafe.Pointer(pzBuf)) 16642 if n < 0 { 16643 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)+1)) 16644 } else { 16645 libc.Xmemcpy(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(n)) 16646 libc.Xmemcpy(tls, z+uintptr(n), pRule+28, uint64((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)) 16647 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)), 16648 uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-n-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)+1)) 16649 } 16650 16651 return SQLITE_OK 16652 } 16653 16654 func fuzzerHash(tls *libc.TLS, z uintptr) uint32 { 16655 var h uint32 = uint32(0) 16656 for *(*uint8)(unsafe.Pointer(z)) != 0 { 16657 h = h<<3 ^ h>>29 ^ uint32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 16658 } 16659 return h % uint32(FUZZER_HASH) 16660 } 16661 16662 func fuzzerCost(tls *libc.TLS, pStem uintptr) fuzzer_cost { 16663 return libc.AssignPtrInt32(pStem+36, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrBaseCost+(*fuzzer_rule)(unsafe.Pointer((*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule)).FrCost) 16664 } 16665 16666 func fuzzerSeen(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 16667 var h uint32 16668 var pLookup uintptr 16669 16670 if fuzzerRender(tls, pStem, pCur+216, pCur+224) == SQLITE_NOMEM { 16671 return -1 16672 } 16673 h = fuzzerHash(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 16674 pLookup = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 16675 for pLookup != 0 && libc.Xstrcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pLookup)).FzBasis, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) != 0 { 16676 pLookup = (*fuzzer_stem)(unsafe.Pointer(pLookup)).FpHash 16677 } 16678 return libc.Bool32(pLookup != uintptr(0)) 16679 } 16680 16681 func fuzzerSkipRule(tls *libc.TLS, pRule uintptr, pStem uintptr, iRuleset int32) int32 { 16682 return libc.Bool32(pRule != 0 && ((*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset != iRuleset || 16683 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)) 16684 } 16685 16686 func fuzzerAdvance(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 16687 var pRule uintptr 16688 for libc.AssignUintptr(&pRule, (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule) != uintptr(0) { 16689 for int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) < int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) { 16690 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn++ 16691 if int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) == 0 || 16692 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 { 16693 var rc int32 = fuzzerSeen(tls, pCur, pStem) 16694 if rc < 0 { 16695 return -1 16696 } 16697 if rc == 0 { 16698 fuzzerCost(tls, pStem) 16699 return 1 16700 } 16701 } 16702 } 16703 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = int8(-1) 16704 for __ccgo := true; __ccgo; __ccgo = fuzzerSkipRule(tls, pRule, pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 16705 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16706 } 16707 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pRule 16708 if pRule != 0 && fuzzerCost(tls, pStem) > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit { 16709 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = uintptr(0) 16710 } 16711 } 16712 return 0 16713 } 16714 16715 func fuzzerMergeStems(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 16716 bp := tls.Alloc(48) 16717 defer tls.Free(48) 16718 16719 var pTail uintptr 16720 16721 pTail = bp 16722 for pA != 0 && pB != 0 { 16723 if (*fuzzer_stem)(unsafe.Pointer(pA)).FrCostX <= (*fuzzer_stem)(unsafe.Pointer(pB)).FrCostX { 16724 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 16725 pTail = pA 16726 pA = (*fuzzer_stem)(unsafe.Pointer(pA)).FpNext 16727 } else { 16728 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 16729 pTail = pB 16730 pB = (*fuzzer_stem)(unsafe.Pointer(pB)).FpNext 16731 } 16732 } 16733 if pA == uintptr(0) { 16734 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 16735 } else { 16736 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 16737 } 16738 return (*fuzzer_stem)(unsafe.Pointer(bp)).FpNext 16739 } 16740 16741 func fuzzerLowestCostStem(tls *libc.TLS, pCur uintptr) uintptr { 16742 var pBest uintptr 16743 var pX uintptr 16744 var iBest int32 16745 var i int32 16746 16747 if (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem == uintptr(0) { 16748 iBest = -1 16749 pBest = uintptr(0) 16750 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 16751 pX = *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) 16752 if pX == uintptr(0) { 16753 continue 16754 } 16755 if pBest == uintptr(0) || (*fuzzer_stem)(unsafe.Pointer(pBest)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX { 16756 pBest = pX 16757 iBest = i 16758 } 16759 } 16760 if pBest != 0 { 16761 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(iBest)*8)) = (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext 16762 (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext = uintptr(0) 16763 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pBest 16764 } 16765 } 16766 return (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 16767 } 16768 16769 func fuzzerInsert(tls *libc.TLS, pCur uintptr, pNew uintptr) uintptr { 16770 var pX uintptr 16771 var i int32 16772 16773 if libc.AssignUintptr(&pX, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) && (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pNew)).FrCostX { 16774 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 16775 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pNew 16776 pNew = pX 16777 } 16778 16779 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 16780 pX = pNew 16781 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 16782 if *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) != 0 { 16783 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 16784 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = uintptr(0) 16785 } else { 16786 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 16787 break 16788 } 16789 } 16790 if i > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue { 16791 if i < FUZZER_NQUEUE { 16792 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = i 16793 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 16794 } else { 16795 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8))) 16796 *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8)) = pX 16797 } 16798 } 16799 16800 return fuzzerLowestCostStem(tls, pCur) 16801 } 16802 16803 func fuzzerNewStem(tls *libc.TLS, pCur uintptr, zWord uintptr, rBaseCost fuzzer_cost) uintptr { 16804 var pNew uintptr 16805 var pRule uintptr 16806 var h uint32 16807 16808 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_stem{}))+libc.Xstrlen(tls, zWord)+uint64(1)) 16809 if pNew == uintptr(0) { 16810 return uintptr(0) 16811 } 16812 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_stem{}))) 16813 (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis = pNew + 1*48 16814 (*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis = fuzzer_len(libc.Xstrlen(tls, zWord)) 16815 libc.Xmemcpy(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis, zWord, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis)+1)) 16816 pRule = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 16817 for fuzzerSkipRule(tls, pRule, pNew, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 16818 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 16819 } 16820 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpRule = pRule 16821 (*fuzzer_stem)(unsafe.Pointer(pNew)).Fn = int8(-1) 16822 (*fuzzer_stem)(unsafe.Pointer(pNew)).FrBaseCost = libc.AssignPtrInt32(pNew+36, rBaseCost) 16823 h = fuzzerHash(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis) 16824 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpHash = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 16825 *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) = pNew 16826 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem++ 16827 return pNew 16828 } 16829 16830 func fuzzerNext(tls *libc.TLS, cur uintptr) int32 { 16831 var pCur uintptr = cur 16832 var rc int32 16833 var pStem uintptr 16834 var pNew uintptr 16835 16836 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid++ 16837 16838 pStem = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 16839 if (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX > 0 { 16840 rc = fuzzerRender(tls, pStem, pCur+216, pCur+224) 16841 if rc == SQLITE_NOMEM { 16842 return SQLITE_NOMEM 16843 } 16844 pNew = fuzzerNewStem(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX) 16845 if pNew != 0 { 16846 if fuzzerAdvance(tls, pCur, pNew) == 0 { 16847 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 16848 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pNew 16849 } else { 16850 if fuzzerInsert(tls, pCur, pNew) == pNew { 16851 return SQLITE_OK 16852 } 16853 } 16854 } else { 16855 return SQLITE_NOMEM 16856 } 16857 } 16858 16859 for libc.AssignUintptr(&pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) { 16860 var res int32 = fuzzerAdvance(tls, pCur, pStem) 16861 if res < 0 { 16862 return SQLITE_NOMEM 16863 } else if res > 0 { 16864 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16865 pStem = fuzzerInsert(tls, pCur, pStem) 16866 if libc.AssignInt32(&rc, fuzzerSeen(tls, pCur, pStem)) != 0 { 16867 if rc < 0 { 16868 return SQLITE_NOMEM 16869 } 16870 continue 16871 } 16872 return SQLITE_OK 16873 } 16874 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 16875 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 16876 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pStem 16877 if fuzzerLowestCostStem(tls, pCur) != 0 { 16878 rc = fuzzerSeen(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 16879 if rc < 0 { 16880 return SQLITE_NOMEM 16881 } 16882 if rc == 0 { 16883 return SQLITE_OK 16884 } 16885 } 16886 } 16887 16888 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16889 return SQLITE_OK 16890 } 16891 16892 func fuzzerFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 16893 var pCur uintptr = pVtabCursor 16894 var zWord uintptr = ts + 584 16895 var pStem uintptr 16896 var idx int32 16897 16898 fuzzerClearCursor(tls, pCur, 1) 16899 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 2147483647 16900 idx = 0 16901 if idxNum&1 != 0 { 16902 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 16903 idx++ 16904 } 16905 if idxNum&2 != 0 { 16906 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 16907 idx++ 16908 } 16909 if idxNum&4 != 0 { 16910 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 16911 idx++ 16912 } 16913 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FpNext = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 16914 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FrCost = 0 16915 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnFrom = int8(0) 16916 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnTo = int8(0) 16917 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FzFrom = ts + 584 16918 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 16919 16920 if int32(libc.Xstrlen(tls, zWord)) < FUZZER_MX_OUTPUT_LENGTH { 16921 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = libc.AssignUintptr(&pStem, fuzzerNewStem(tls, pCur, zWord, 0)) 16922 if pStem == uintptr(0) { 16923 return SQLITE_NOMEM 16924 } 16925 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pCur + 240 16926 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = (*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis 16927 } else { 16928 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 16929 } 16930 16931 return SQLITE_OK 16932 } 16933 16934 func fuzzerColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 16935 var pCur uintptr = cur 16936 if i == 0 { 16937 if fuzzerRender(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem, pCur+216, pCur+224) == SQLITE_NOMEM { 16938 return SQLITE_NOMEM 16939 } 16940 sqlite3.Xsqlite3_result_text(tls, ctx, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 16941 } else if i == 1 { 16942 sqlite3.Xsqlite3_result_int(tls, ctx, (*fuzzer_stem)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem)).FrCostX) 16943 } else { 16944 sqlite3.Xsqlite3_result_null(tls, ctx) 16945 } 16946 return SQLITE_OK 16947 } 16948 16949 func fuzzerRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 16950 var pCur uintptr = cur 16951 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid 16952 return SQLITE_OK 16953 } 16954 16955 func fuzzerEof(tls *libc.TLS, cur uintptr) int32 { 16956 var pCur uintptr = cur 16957 return libc.Bool32((*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit <= 0) 16958 } 16959 16960 func fuzzerBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 16961 var iPlan int32 = 0 16962 var iDistTerm int32 = -1 16963 var iRulesetTerm int32 = -1 16964 var i int32 16965 var seenMatch int32 = 0 16966 var pConstraint uintptr 16967 var rCost float64 = 1e12 16968 16969 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 16970 i = 0 16971 __1: 16972 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 16973 goto __3 16974 } 16975 { 16976 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16977 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16978 seenMatch = 1 16979 } 16980 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 16981 goto __2 16982 } 16983 if iPlan&1 == 0 && 16984 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 16985 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 16986 iPlan = iPlan | 1 16987 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 16988 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 16989 rCost = rCost / 1e6 16990 } 16991 if iPlan&2 == 0 && 16992 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 16993 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 16994 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 16995 iPlan = iPlan | 2 16996 iDistTerm = i 16997 rCost = rCost / 10.0 16998 } 16999 if iPlan&4 == 0 && 17000 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 17001 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 17002 iPlan = iPlan | 4 17003 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 17004 iRulesetTerm = i 17005 rCost = rCost / 10.0 17006 } 17007 17008 } 17009 goto __2 17010 __2: 17011 i++ 17012 pConstraint += 12 17013 goto __1 17014 goto __3 17015 __3: 17016 ; 17017 if iPlan&2 != 0 { 17018 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 17019 } 17020 if iPlan&4 != 0 { 17021 var idx int32 = 1 17022 if iPlan&1 != 0 { 17023 idx++ 17024 } 17025 if iPlan&2 != 0 { 17026 idx++ 17027 } 17028 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRulesetTerm)*8)).FargvIndex = idx 17029 } 17030 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 17031 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 17032 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 17033 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 17034 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 17035 } 17036 if seenMatch != 0 && iPlan&1 == 0 { 17037 rCost = 1e99 17038 } 17039 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 17040 17041 return SQLITE_OK 17042 } 17043 17044 var fuzzerModule = sqlite3_module{ 17045 FxCreate: 0, 17046 FxConnect: 0, 17047 FxBestIndex: 0, 17048 FxDisconnect: 0, 17049 FxDestroy: 0, 17050 FxOpen: 0, 17051 FxClose: 0, 17052 FxFilter: 0, 17053 FxNext: 0, 17054 FxEof: 0, 17055 FxColumn: 0, 17056 FxRowid: 0, 17057 } 17058 17059 func sqlite3_fuzzer_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17060 var rc int32 = SQLITE_OK 17061 _ = pApi 17062 17063 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+5483, uintptr(unsafe.Pointer(&fuzzerModule)), uintptr(0)) 17064 return rc 17065 } 17066 17067 func ieee754func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17068 bp := tls.Alloc(160) 17069 defer tls.Free(160) 17070 17071 if argc == 1 { 17072 var m sqlite3_int64 17073 17074 var e int32 17075 var isNeg int32 17076 17077 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 17078 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 17079 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 17080 var i uint32 17081 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = uint64(0) 17082 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 17083 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 24))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 17084 } 17085 libc.Xmemcpy(tls, bp+16, bp+24, uint64(unsafe.Sizeof(float64(0)))) 17086 } else { 17087 *(*float64)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 17088 } 17089 if *(*float64)(unsafe.Pointer(bp + 16)) < 0.0 { 17090 isNeg = 1 17091 *(*float64)(unsafe.Pointer(bp + 16)) = -*(*float64)(unsafe.Pointer(bp + 16)) 17092 } else { 17093 isNeg = 0 17094 } 17095 libc.Xmemcpy(tls, bp+32, bp+16, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 17096 if *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) == int64(0) { 17097 e = 0 17098 m = int64(0) 17099 } else { 17100 e = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 32)) >> 52) 17101 m = *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) & (int64(1)<<52 - int64(1)) 17102 if e == 0 { 17103 m <<= 1 17104 } else { 17105 m = m | int64(1)<<52 17106 } 17107 for e < 1075 && m > int64(0) && m&int64(1) == int64(0) { 17108 m >>= 1 17109 e++ 17110 } 17111 if isNeg != 0 { 17112 m = -m 17113 } 17114 } 17115 switch *(*int32)(unsafe.Pointer(sqlite3.Xsqlite3_user_data(tls, context))) { 17116 case 0: 17117 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+40, ts+5490, 17118 libc.VaList(bp, m, e-1075)) 17119 sqlite3.Xsqlite3_result_text(tls, context, bp+40, -1, libc.UintptrFromInt32(-1)) 17120 break 17121 fallthrough 17122 case 1: 17123 sqlite3.Xsqlite3_result_int64(tls, context, m) 17124 break 17125 fallthrough 17126 case 2: 17127 sqlite3.Xsqlite3_result_int(tls, context, e-1075) 17128 break 17129 } 17130 } else { 17131 var m sqlite3_int64 17132 var e sqlite3_int64 17133 17134 var isNeg int32 = 0 17135 m = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 17136 e = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17137 17138 if e > int64(10000) { 17139 e = int64(10000) 17140 } else if e < int64(-10000) { 17141 e = int64(-10000) 17142 } 17143 17144 if m < int64(0) { 17145 isNeg = 1 17146 m = -m 17147 if m < int64(0) { 17148 return 17149 } 17150 } else if m == int64(0) && e > int64(-1000) && e < int64(1000) { 17151 sqlite3.Xsqlite3_result_double(tls, context, 0.0) 17152 return 17153 } 17154 for m>>32&int64(0xffe00000) != 0 { 17155 m >>= 1 17156 e++ 17157 } 17158 for m != int64(0) && m>>32&int64(0xfff00000) == int64(0) { 17159 m <<= 1 17160 e-- 17161 } 17162 e = e + int64(1075) 17163 if e <= int64(0) { 17164 if int64(1)-e >= int64(64) { 17165 m = int64(0) 17166 } else { 17167 m >>= int64(1) - e 17168 } 17169 e = int64(0) 17170 } else if e > int64(0x7ff) { 17171 e = int64(0x7ff) 17172 } 17173 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) = m & (int64(1)<<52 - int64(1)) 17174 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= e << 52 17175 if isNeg != 0 { 17176 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= libc.Int64FromUint64(uint64(1) << 63) 17177 } 17178 libc.Xmemcpy(tls, bp+144, bp+152, uint64(unsafe.Sizeof(float64(0)))) 17179 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 144))) 17180 } 17181 } 17182 17183 func ieee754func_from_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17184 bp := tls.Alloc(16) 17185 defer tls.Free(16) 17186 17187 _ = argc 17188 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 17189 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 17190 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 17191 var i uint32 17192 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = uint64(0) 17193 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 17194 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 8))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 17195 } 17196 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 17197 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp))) 17198 } 17199 } 17200 17201 func ieee754func_to_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17202 bp := tls.Alloc(24) 17203 defer tls.Free(24) 17204 17205 _ = argc 17206 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_FLOAT || 17207 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_INTEGER { 17208 *(*float64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 17209 17210 var i uint32 17211 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0)))) 17212 for i = uint32(1); uint64(i) <= uint64(unsafe.Sizeof(float64(0))); i++ { 17213 *(*uint8)(unsafe.Pointer(bp + 16 + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(i)))) = uint8(*(*sqlite3_uint64)(unsafe.Pointer(bp)) & uint64(0xff)) 17214 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 8 17215 } 17216 sqlite3.Xsqlite3_result_blob(tls, context, bp+16, int32(unsafe.Sizeof(float64(0))), libc.UintptrFromInt32(-1)) 17217 } 17218 } 17219 17220 func sqlite3_ieee_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17221 var i uint32 17222 var rc int32 = SQLITE_OK 17223 _ = pApi 17224 17225 _ = pzErrMsg 17226 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc1))/uint64(unsafe.Sizeof(struct { 17227 FzFName uintptr 17228 FnArg int32 17229 FiAux int32 17230 FxFunc uintptr 17231 }{})) && rc == SQLITE_OK; i++ { 17232 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc1[i].FzFName, aFunc1[i].FnArg, 17233 SQLITE_UTF8|SQLITE_INNOCUOUS, 17234 uintptr(unsafe.Pointer(&aFunc1))+uintptr(i)*24+12, 17235 aFunc1[i].FxFunc, uintptr(0), uintptr(0)) 17236 } 17237 return rc 17238 } 17239 17240 var aFunc1 = [6]struct { 17241 FzFName uintptr 17242 FnArg int32 17243 FiAux int32 17244 FxFunc uintptr 17245 }{ 17246 {FzFName: ts + 5507, FnArg: 1, FxFunc: 0}, 17247 {FzFName: ts + 5507, FnArg: 2, FxFunc: 0}, 17248 {FzFName: ts + 5515, FnArg: 1, FiAux: 1, FxFunc: 0}, 17249 {FzFName: ts + 5532, FnArg: 1, FiAux: 2, FxFunc: 0}, 17250 {FzFName: ts + 5549, FnArg: 1, FxFunc: 0}, 17251 {FzFName: ts + 5565, FnArg: 1, FxFunc: 0}, 17252 } 17253 17254 func sqlite3_mmap_warm(tls *libc.TLS, db uintptr, zDb uintptr) int32 { 17255 bp := tls.Alloc(88) 17256 defer tls.Free(88) 17257 17258 var rc int32 = SQLITE_OK 17259 var zSql uintptr = uintptr(0) 17260 var pgsz int32 = 0 17261 var nTotal int32 = 0 17262 17263 if 0 == sqlite3.Xsqlite3_get_autocommit(tls, db) { 17264 return SQLITE_MISUSE 17265 } 17266 17267 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5583, 17268 libc.VaList(bp, func() uintptr { 17269 if zDb != 0 { 17270 return ts + 5624 17271 } 17272 return ts + 584 17273 }(), func() uintptr { 17274 if zDb != 0 { 17275 return zDb 17276 } 17277 return ts + 584 17278 }(), func() uintptr { 17279 if zDb != 0 { 17280 return ts + 5626 17281 } 17282 return ts + 584 17283 }())) 17284 if zSql == uintptr(0) { 17285 return SQLITE_NOMEM 17286 } 17287 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 17288 sqlite3.Xsqlite3_free(tls, zSql) 17289 17290 if rc == SQLITE_OK { 17291 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5629, 17292 libc.VaList(bp+24, func() uintptr { 17293 if zDb != 0 { 17294 return ts + 5624 17295 } 17296 return ts + 584 17297 }(), func() uintptr { 17298 if zDb != 0 { 17299 return zDb 17300 } 17301 return ts + 584 17302 }(), func() uintptr { 17303 if zDb != 0 { 17304 return ts + 5626 17305 } 17306 return ts + 584 17307 }())) 17308 if zSql == uintptr(0) { 17309 rc = SQLITE_NOMEM 17310 } else { 17311 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 17312 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 17313 sqlite3.Xsqlite3_free(tls, zSql) 17314 if rc == SQLITE_OK { 17315 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 17316 pgsz = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 17317 } 17318 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 17319 } 17320 if rc == SQLITE_OK && pgsz == 0 { 17321 rc = SQLITE_ERROR 17322 } 17323 } 17324 } 17325 17326 if rc == SQLITE_OK { 17327 var rc2 int32 17328 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 17329 rc = sqlite3.Xsqlite3_file_control(tls, db, zDb, SQLITE_FCNTL_FILE_POINTER, bp+72) 17330 if rc == SQLITE_OK && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods)).FiVersion >= 3 { 17331 var iPg sqlite3_int64 = int64(1) 17332 var p uintptr = (*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods 17333 for 1 != 0 { 17334 rc = (*struct { 17335 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 17336 })(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) 17337 if rc != SQLITE_OK || *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 17338 break 17339 } 17340 17341 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80))))) 17342 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(pgsz-1)))) 17343 17344 rc = (*struct { 17345 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 17346 })(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))) 17347 if rc != SQLITE_OK { 17348 break 17349 } 17350 iPg++ 17351 } 17352 sqlite3.Xsqlite3_log(tls, SQLITE_OK, 17353 ts+5652, libc.VaList(bp+48, func() int64 { 17354 if iPg == int64(1) { 17355 return int64(0) 17356 } 17357 return iPg 17358 }(), 17359 sqlite3.Xsqlite3_db_filename(tls, db, zDb))) 17360 } 17361 17362 rc2 = sqlite3.Xsqlite3_exec(tls, db, ts+5702, uintptr(0), uintptr(0), uintptr(0)) 17363 if rc == SQLITE_OK { 17364 rc = rc2 17365 } 17366 } 17367 17368 return rc 17369 } 17370 17371 type nextCharContext1 = struct { 17372 Fdb uintptr 17373 FpStmt uintptr 17374 FzPrefix uintptr 17375 FnPrefix int32 17376 FnAlloc int32 17377 FnUsed int32 17378 F__ccgo_pad1 [4]byte 17379 FaResult uintptr 17380 FmallocFailed int32 17381 FotherError int32 17382 } 17383 17384 type nextCharContext = nextCharContext1 17385 17386 func nextCharAppend(tls *libc.TLS, p uintptr, c uint32) { 17387 var i int32 17388 for i = 0; i < (*nextCharContext)(unsafe.Pointer(p)).FnUsed; i++ { 17389 if *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(i)*4)) == c { 17390 return 17391 } 17392 } 17393 if (*nextCharContext)(unsafe.Pointer(p)).FnUsed+1 > (*nextCharContext)(unsafe.Pointer(p)).FnAlloc { 17394 var aNew uintptr 17395 var n int32 = (*nextCharContext)(unsafe.Pointer(p)).FnAlloc*2 + 30 17396 aNew = sqlite3.Xsqlite3_realloc64(tls, (*nextCharContext)(unsafe.Pointer(p)).FaResult, uint64(n)*uint64(unsafe.Sizeof(uint32(0)))) 17397 if aNew == uintptr(0) { 17398 (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed = 1 17399 return 17400 } else { 17401 (*nextCharContext)(unsafe.Pointer(p)).FaResult = aNew 17402 (*nextCharContext)(unsafe.Pointer(p)).FnAlloc = n 17403 } 17404 } 17405 *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(libc.PostIncInt32(&(*nextCharContext)(unsafe.Pointer(p)).FnUsed, 1))*4)) = c 17406 } 17407 17408 func writeUtf8(tls *libc.TLS, z uintptr, c uint32) int32 { 17409 if c < uint32(0x00080) { 17410 *(*uint8)(unsafe.Pointer(z)) = uint8(c & uint32(0xff)) 17411 return 1 17412 } 17413 if c < uint32(0x00800) { 17414 *(*uint8)(unsafe.Pointer(z)) = uint8(0xC0 + int32(uint8(c>>6&uint32(0x1F)))) 17415 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 17416 return 2 17417 } 17418 if c < uint32(0x10000) { 17419 *(*uint8)(unsafe.Pointer(z)) = uint8(0xE0 + int32(uint8(c>>12&uint32(0x0F)))) 17420 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 17421 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 17422 return 3 17423 } 17424 *(*uint8)(unsafe.Pointer(z)) = uint8(0xF0 + int32(uint8(c>>18&uint32(0x07)))) 17425 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>12&uint32(0x3F)))) 17426 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 17427 *(*uint8)(unsafe.Pointer(z + 3)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 17428 return 4 17429 } 17430 17431 func readUtf8(tls *libc.TLS, z uintptr, pOut uintptr) int32 { 17432 var c uint32 = uint32(*(*uint8)(unsafe.Pointer(z))) 17433 if c < uint32(0xc0) { 17434 *(*uint32)(unsafe.Pointer(pOut)) = c 17435 return 1 17436 } else { 17437 var n int32 = 1 17438 c = uint32(validBits[c-uint32(0xc0)]) 17439 for int32(*(*uint8)(unsafe.Pointer(z + uintptr(n))))&0xc0 == 0x80 { 17440 c = c<<6 + uint32(0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&n, 1)))))) 17441 } 17442 if c < uint32(0x80) || c&0xFFFFF800 == uint32(0xD800) || c&0xFFFFFFFE == uint32(0xFFFE) { 17443 c = uint32(0xFFFD) 17444 } 17445 *(*uint32)(unsafe.Pointer(pOut)) = c 17446 return n 17447 } 17448 return int32(0) 17449 } 17450 17451 var validBits = [64]uint8{ 17452 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17453 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 17454 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 17455 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 17456 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17457 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 17458 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 17459 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 17460 } 17461 17462 func findNextChars(tls *libc.TLS, p uintptr) { 17463 bp := tls.Alloc(12) 17464 defer tls.Free(12) 17465 17466 var cPrev uint32 = uint32(0) 17467 17468 var n int32 17469 var rc int32 17470 17471 for { 17472 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 1, (*nextCharContext)(unsafe.Pointer(p)).FzPrefix, (*nextCharContext)(unsafe.Pointer(p)).FnPrefix, 17473 uintptr(0)) 17474 n = writeUtf8(tls, bp, cPrev+uint32(1)) 17475 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 2, bp, n, uintptr(0)) 17476 rc = sqlite3.Xsqlite3_step(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17477 if rc == SQLITE_DONE { 17478 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17479 return 17480 } else if rc != SQLITE_ROW { 17481 (*nextCharContext)(unsafe.Pointer(p)).FotherError = rc 17482 return 17483 } else { 17484 var zOut uintptr = sqlite3.Xsqlite3_column_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 0) 17485 17486 n = readUtf8(tls, zOut+uintptr((*nextCharContext)(unsafe.Pointer(p)).FnPrefix), bp+8) 17487 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 17488 nextCharAppend(tls, p, *(*uint32)(unsafe.Pointer(bp + 8))) 17489 cPrev = *(*uint32)(unsafe.Pointer(bp + 8)) 17490 if (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed != 0 { 17491 return 17492 } 17493 } 17494 } 17495 } 17496 17497 func nextCharFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17498 bp := tls.Alloc(136) 17499 defer tls.Free(136) 17500 17501 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17502 var zField uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 17503 var zWhere uintptr 17504 var zCollName uintptr 17505 var zWhereClause uintptr = uintptr(0) 17506 var zColl uintptr = uintptr(0) 17507 var zSql uintptr 17508 var rc int32 17509 17510 libc.Xmemset(tls, bp+80, 0, uint64(unsafe.Sizeof(nextCharContext{}))) 17511 (*nextCharContext)(unsafe.Pointer(bp + 80)).Fdb = sqlite3.Xsqlite3_context_db_handle(tls, context) 17512 (*nextCharContext)(unsafe.Pointer(bp + 80)).FzPrefix = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 17513 (*nextCharContext)(unsafe.Pointer(bp + 80)).FnPrefix = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 17514 if zTable == uintptr(0) || zField == uintptr(0) || (*nextCharContext)(unsafe.Pointer(bp+80)).FzPrefix == uintptr(0) { 17515 return 17516 } 17517 if argc >= 4 && 17518 libc.AssignUintptr(&zWhere, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) != uintptr(0) && 17519 int32(*(*uint8)(unsafe.Pointer(zWhere))) != 0 { 17520 zWhereClause = sqlite3.Xsqlite3_mprintf(tls, ts+5706, libc.VaList(bp, zWhere)) 17521 if zWhereClause == uintptr(0) { 17522 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17523 return 17524 } 17525 } else { 17526 zWhereClause = ts + 584 17527 } 17528 if argc >= 5 && 17529 libc.AssignUintptr(&zCollName, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) != uintptr(0) && 17530 int32(*(*uint8)(unsafe.Pointer(zCollName))) != 0 { 17531 zColl = sqlite3.Xsqlite3_mprintf(tls, ts+5715, libc.VaList(bp+8, zCollName)) 17532 if zColl == uintptr(0) { 17533 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17534 if *(*uint8)(unsafe.Pointer(zWhereClause)) != 0 { 17535 sqlite3.Xsqlite3_free(tls, zWhereClause) 17536 } 17537 return 17538 } 17539 } else { 17540 zColl = ts + 584 17541 } 17542 zSql = sqlite3.Xsqlite3_mprintf(tls, 17543 ts+5728, 17544 libc.VaList(bp+16, zField, zTable, zField, zColl, zField, zColl, zWhereClause, zColl)) 17545 if *(*uint8)(unsafe.Pointer(zWhereClause)) != 0 { 17546 sqlite3.Xsqlite3_free(tls, zWhereClause) 17547 } 17548 if *(*uint8)(unsafe.Pointer(zColl)) != 0 { 17549 sqlite3.Xsqlite3_free(tls, zColl) 17550 } 17551 if zSql == uintptr(0) { 17552 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17553 return 17554 } 17555 17556 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb, zSql, -1, bp+80+8, uintptr(0)) 17557 sqlite3.Xsqlite3_free(tls, zSql) 17558 if rc != 0 { 17559 sqlite3.Xsqlite3_result_error(tls, context, sqlite3.Xsqlite3_errmsg(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb), -1) 17560 return 17561 } 17562 findNextChars(tls, bp+80) 17563 if (*nextCharContext)(unsafe.Pointer(bp+80)).FmallocFailed != 0 { 17564 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17565 } else { 17566 var pRes uintptr 17567 pRes = sqlite3.Xsqlite3_malloc64(tls, uint64((*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed*4+1)) 17568 if pRes == uintptr(0) { 17569 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17570 } else { 17571 var i int32 17572 var n int32 = 0 17573 for i = 0; i < (*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed; i++ { 17574 n = n + writeUtf8(tls, pRes+uintptr(n), *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(bp+80)).FaResult + uintptr(i)*4))) 17575 } 17576 *(*uint8)(unsafe.Pointer(pRes + uintptr(n))) = uint8(0) 17577 sqlite3.Xsqlite3_result_text(tls, context, pRes, n, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 17578 } 17579 } 17580 sqlite3.Xsqlite3_finalize(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FpStmt) 17581 sqlite3.Xsqlite3_free(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FaResult) 17582 } 17583 17584 func sqlite3_nextchar_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17585 var rc int32 = SQLITE_OK 17586 _ = pApi 17587 17588 _ = pzErrMsg 17589 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 3, 17590 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17591 *(*uintptr)(unsafe.Pointer(&struct { 17592 f func(*libc.TLS, uintptr, int32, uintptr) 17593 }{nextCharFunc})), uintptr(0), uintptr(0)) 17594 if rc == SQLITE_OK { 17595 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 4, 17596 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17597 *(*uintptr)(unsafe.Pointer(&struct { 17598 f func(*libc.TLS, uintptr, int32, uintptr) 17599 }{nextCharFunc})), uintptr(0), uintptr(0)) 17600 } 17601 if rc == SQLITE_OK { 17602 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 5, 17603 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 17604 *(*uintptr)(unsafe.Pointer(&struct { 17605 f func(*libc.TLS, uintptr, int32, uintptr) 17606 }{nextCharFunc})), uintptr(0), uintptr(0)) 17607 } 17608 return rc 17609 } 17610 17611 var aiClass = [256]uint8{ 17612 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), 17613 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), 17614 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), 17615 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), 17616 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), 17617 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), 17618 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), 17619 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), 17620 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), 17621 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), 17622 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), 17623 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), 17624 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), 17625 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), 17626 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), 17627 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), 17628 } 17629 17630 var sqlite3UpperToLower = [256]uint8{ 17631 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), 17632 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), 17633 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), 17634 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), 17635 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), 17636 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), 17637 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), 17638 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), 17639 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), 17640 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), 17641 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), 17642 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), 17643 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), 17644 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), 17645 uint8(252), uint8(253), uint8(254), uint8(255), 17646 } 17647 17648 var sqlite3CtypeMap = [256]uint8{ 17649 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17650 uint8(0x00), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x00), uint8(0x00), 17651 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17652 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17653 uint8(0x01), uint8(0x00), uint8(0x80), uint8(0x00), uint8(0x40), uint8(0x00), uint8(0x00), uint8(0x80), 17654 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17655 uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), 17656 uint8(0x0c), uint8(0x0c), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17657 uint8(0x00), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x02), 17658 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 17659 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 17660 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x80), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x40), 17661 uint8(0x80), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x22), 17662 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 17663 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 17664 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 17665 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17666 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17667 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17668 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17669 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17670 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17671 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17672 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17673 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17674 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17675 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17676 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17677 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17678 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17679 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17680 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 17681 } 17682 17683 func sqlite3GetToken(tls *libc.TLS, z uintptr, tokenType uintptr) int32 { 17684 var i int32 17685 var c int32 17686 switch int32(aiClass[*(*uint8)(unsafe.Pointer(z))]) { 17687 case CC_SPACE: 17688 { 17689 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x01 != 0; i++ { 17690 } 17691 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17692 return i 17693 17694 } 17695 case CC_MINUS: 17696 { 17697 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '-' { 17698 for i = 2; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && c != '\n'; i++ { 17699 } 17700 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17701 return i 17702 } 17703 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17704 return 1 17705 17706 } 17707 case CC_LP: 17708 { 17709 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17710 return 1 17711 17712 } 17713 case CC_RP: 17714 { 17715 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17716 return 1 17717 17718 } 17719 case CC_SEMI: 17720 { 17721 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17722 return 1 17723 17724 } 17725 case CC_PLUS: 17726 { 17727 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17728 return 1 17729 17730 } 17731 case CC_STAR: 17732 { 17733 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17734 return 1 17735 17736 } 17737 case CC_SLASH: 17738 { 17739 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '*' || int32(*(*uint8)(unsafe.Pointer(z + 2))) == 0 { 17740 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17741 return 1 17742 } 17743 i = 3 17744 c = int32(*(*uint8)(unsafe.Pointer(z + 2))) 17745 for ; (c != '*' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/') && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17746 } 17747 if c != 0 { 17748 i++ 17749 } 17750 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 17751 return i 17752 17753 } 17754 case CC_PERCENT: 17755 { 17756 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17757 return 1 17758 17759 } 17760 case CC_EQ: 17761 { 17762 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17763 return 1 + libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z + 1))) == '=') 17764 17765 } 17766 case CC_LT: 17767 { 17768 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 17769 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17770 return 2 17771 } else if c == '>' { 17772 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17773 return 2 17774 } else if c == '<' { 17775 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17776 return 2 17777 } else { 17778 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17779 return 1 17780 } 17781 17782 } 17783 fallthrough 17784 case CC_GT: 17785 { 17786 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 17787 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17788 return 2 17789 } else if c == '>' { 17790 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17791 return 2 17792 } else { 17793 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17794 return 1 17795 } 17796 17797 } 17798 fallthrough 17799 case CC_BANG: 17800 { 17801 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '=' { 17802 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17803 return 1 17804 } else { 17805 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17806 return 2 17807 } 17808 17809 } 17810 fallthrough 17811 case CC_PIPE: 17812 { 17813 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '|' { 17814 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17815 return 1 17816 } else { 17817 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17818 return 2 17819 } 17820 17821 } 17822 fallthrough 17823 case CC_COMMA: 17824 { 17825 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17826 return 1 17827 17828 } 17829 case CC_AND: 17830 { 17831 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17832 return 1 17833 17834 } 17835 case CC_TILDA: 17836 { 17837 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17838 return 1 17839 17840 } 17841 case CC_QUOTE: 17842 { 17843 var delim int32 = int32(*(*uint8)(unsafe.Pointer(z))) 17844 17845 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17846 if c == delim { 17847 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == delim { 17848 i++ 17849 } else { 17850 break 17851 } 17852 } 17853 } 17854 if c == '\'' { 17855 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17856 return i + 1 17857 } else if c != 0 { 17858 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17859 return i + 1 17860 } else { 17861 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17862 return i 17863 } 17864 17865 } 17866 fallthrough 17867 case CC_DOT: 17868 { 17869 if !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + 1))])&0x04 != 0) { 17870 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 17871 return 1 17872 } 17873 17874 } 17875 fallthrough 17876 case CC_DIGIT: 17877 { 17878 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17879 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 { 17880 for i = 3; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17881 } 17882 return i 17883 } 17884 for i = 0; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 17885 } 17886 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' { 17887 i++ 17888 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 17889 i++ 17890 } 17891 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17892 } 17893 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 || 17894 (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) { 17895 i = i + 2 17896 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 17897 i++ 17898 } 17899 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17900 } 17901 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17902 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17903 i++ 17904 } 17905 return i 17906 17907 } 17908 case CC_QUOTE2: 17909 { 17910 i = 1 17911 c = int32(*(*uint8)(unsafe.Pointer(z))) 17912 for ; c != ']' && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17913 } 17914 *(*int32)(unsafe.Pointer(tokenType)) = func() int32 { 17915 if c == ']' { 17916 return TK_NAME 17917 } 17918 return TK_ERROR 17919 }() 17920 return i 17921 17922 } 17923 case CC_VARNUM: 17924 { 17925 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17926 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 17927 } 17928 return i 17929 17930 } 17931 case CC_DOLLAR: 17932 fallthrough 17933 case CC_VARALPHA: 17934 { 17935 var n int32 = 0 17936 17937 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17938 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 17939 if int32(sqlite3CtypeMap[uint8(c)])&0x46 != 0 { 17940 n++ 17941 } else if c == '(' && n > 0 { 17942 for __ccgo := true; __ccgo; __ccgo = libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && !(int32(sqlite3CtypeMap[uint8(c)])&0x01 != 0) && c != ')' { 17943 i++ 17944 } 17945 if c == ')' { 17946 i++ 17947 } else { 17948 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17949 } 17950 break 17951 } else if c == ':' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == ':' { 17952 i++ 17953 } else { 17954 break 17955 } 17956 } 17957 if n == 0 { 17958 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17959 } 17960 return i 17961 17962 } 17963 case CC_KYWD: 17964 { 17965 for i = 1; int32(aiClass[*(*uint8)(unsafe.Pointer(z + uintptr(i)))]) <= CC_KYWD; i++ { 17966 } 17967 if int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 17968 i++ 17969 break 17970 } 17971 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 17972 return i 17973 17974 } 17975 case CC_X: 17976 { 17977 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '\'' { 17978 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 17979 for i = 2; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 17980 } 17981 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' || i%2 != 0 { 17982 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 17983 for *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' { 17984 i++ 17985 } 17986 } 17987 if *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 { 17988 i++ 17989 } 17990 return i 17991 } 17992 17993 } 17994 fallthrough 17995 case CC_ID: 17996 { 17997 i = 1 17998 break 17999 18000 } 18001 default: 18002 { 18003 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 18004 return 1 18005 18006 } 18007 } 18008 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 18009 i++ 18010 } 18011 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 18012 return i 18013 } 18014 18015 func sqlite3_normalize(tls *libc.TLS, zSql uintptr) uintptr { 18016 bp := tls.Alloc(4) 18017 defer tls.Free(4) 18018 18019 var z uintptr 18020 var nZ sqlite3_int64 18021 var nSql sqlite3_int64 18022 var i int32 18023 var j int32 18024 18025 var n int32 18026 var k int32 18027 18028 nSql = sqlite3_int64(libc.Xstrlen(tls, zSql)) 18029 nZ = nSql 18030 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nZ+int64(2))) 18031 if z == uintptr(0) { 18032 return uintptr(0) 18033 } 18034 for i = libc.AssignInt32(&j, 0); *(*uint8)(unsafe.Pointer(zSql + uintptr(i))) != 0; i = i + n { 18035 n = sqlite3GetToken(tls, zSql+uintptr(i), bp) 18036 switch *(*int32)(unsafe.Pointer(bp)) { 18037 case TK_SPACE: 18038 { 18039 break 18040 18041 } 18042 case TK_ERROR: 18043 { 18044 sqlite3.Xsqlite3_free(tls, z) 18045 return uintptr(0) 18046 18047 } 18048 case TK_LITERAL: 18049 { 18050 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8('?') 18051 break 18052 18053 } 18054 case TK_PUNCT: 18055 fallthrough 18056 case TK_NAME: 18057 { 18058 if n == 4 && sqlite3.Xsqlite3_strnicmp(tls, zSql+uintptr(i), ts+5846, 4) == 0 { 18059 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) || 18060 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) { 18061 } else { 18062 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8('?') 18063 break 18064 } 18065 } 18066 if j > 0 && int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(j-1)))])&0x46 != 0 && int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(zSql + uintptr(i)))])&0x46 != 0 { 18067 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(' ') 18068 } 18069 for k = 0; k < n; k++ { 18070 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = sqlite3UpperToLower[*(*uint8)(unsafe.Pointer(zSql + uintptr(i+k)))] 18071 } 18072 break 18073 18074 } 18075 } 18076 } 18077 for j > 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(j-1)))) == ' ' { 18078 j-- 18079 } 18080 if j > 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(j-1)))) != ';' { 18081 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(';') 18082 } 18083 *(*uint8)(unsafe.Pointer(z + uintptr(j))) = uint8(0) 18084 18085 for i = 0; i < j; i = n { 18086 var zIn uintptr = libc.Xstrstr(tls, z+uintptr(i), ts+5858) 18087 var nParen int32 18088 if zIn == uintptr(0) { 18089 break 18090 } 18091 n = int32((int64(zIn)-int64(z))/1) + 3 18092 if n != 0 && int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(zIn + libc.UintptrFromInt32(-1)))])&0x46 != 0 { 18093 continue 18094 } 18095 if libc.Xstrncmp(tls, zIn, ts+5862, uint64(9)) == 0 && !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(zIn + 9))])&0x46 != 0) { 18096 continue 18097 } 18098 if libc.Xstrncmp(tls, zIn, ts+5872, uint64(7)) == 0 && !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(zIn + 7))])&0x46 != 0) { 18099 continue 18100 } 18101 nParen = 1 18102 k = 0 18103 for ; *(*uint8)(unsafe.Pointer(z + uintptr(n+k))) != 0; k++ { 18104 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(n+k)))) == '(' { 18105 nParen++ 18106 } 18107 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(n+k)))) == ')' { 18108 nParen-- 18109 if nParen == 0 { 18110 break 18111 } 18112 } 18113 } 18114 18115 if k < 5 { 18116 z = sqlite3.Xsqlite3_realloc64(tls, z, uint64(j+(5-k)+1)) 18117 if z == uintptr(0) { 18118 return uintptr(0) 18119 } 18120 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 18121 } else if k > 5 { 18122 libc.Xmemmove(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k))) 18123 } 18124 j = j - k + 5 18125 *(*uint8)(unsafe.Pointer(z + uintptr(j))) = uint8(0) 18126 libc.Xmemcpy(tls, z+uintptr(n), ts+5880, uint64(5)) 18127 } 18128 return z 18129 } 18130 18131 type Percentile1 = struct { 18132 FnAlloc uint32 18133 FnUsed uint32 18134 FrPct float64 18135 Fa uintptr 18136 } 18137 18138 type Percentile = Percentile1 18139 18140 func isInfinity(tls *libc.TLS, r float64) int32 { 18141 bp := tls.Alloc(16) 18142 defer tls.Free(16) 18143 *(*float64)(unsafe.Pointer(bp + 8)) = r 18144 18145 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 18146 return libc.Bool32(*(*sqlite3_uint64)(unsafe.Pointer(bp))>>52&uint64(0x7ff) == uint64(0x7ff)) 18147 } 18148 18149 func sameValue(tls *libc.TLS, a float64, b float64) int32 { 18150 a = a - b 18151 return libc.Bool32(a >= -0.001 && a <= 0.001) 18152 } 18153 18154 func percentStep(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 18155 var p uintptr 18156 var rPct float64 18157 var eType int32 18158 var y float64 18159 18160 eType = sqlite3.Xsqlite3_value_numeric_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 18161 rPct = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 18162 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT || 18163 rPct < 0.0 || rPct > 100.0 { 18164 sqlite3.Xsqlite3_result_error(tls, pCtx, 18165 ts+5886, -1) 18166 return 18167 } 18168 18169 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, int32(unsafe.Sizeof(Percentile{}))) 18170 if p == uintptr(0) { 18171 return 18172 } 18173 18174 if (*Percentile)(unsafe.Pointer(p)).FrPct == 0.0 { 18175 (*Percentile)(unsafe.Pointer(p)).FrPct = rPct + 1.0 18176 } else if !(sameValue(tls, (*Percentile)(unsafe.Pointer(p)).FrPct, rPct+1.0) != 0) { 18177 sqlite3.Xsqlite3_result_error(tls, pCtx, 18178 ts+5953, -1) 18179 return 18180 } 18181 18182 eType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) 18183 if eType == SQLITE_NULL { 18184 return 18185 } 18186 18187 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT { 18188 sqlite3.Xsqlite3_result_error(tls, pCtx, 18189 ts+6017, -1) 18190 return 18191 } 18192 18193 y = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 18194 if isInfinity(tls, y) != 0 { 18195 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+6061, -1) 18196 return 18197 } 18198 18199 if (*Percentile)(unsafe.Pointer(p)).FnUsed >= (*Percentile)(unsafe.Pointer(p)).FnAlloc { 18200 var n uint32 = (*Percentile)(unsafe.Pointer(p)).FnAlloc*uint32(2) + uint32(250) 18201 var a uintptr = sqlite3.Xsqlite3_realloc64(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64(unsafe.Sizeof(float64(0)))*uint64(n)) 18202 if a == uintptr(0) { 18203 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 18204 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 18205 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 18206 return 18207 } 18208 (*Percentile)(unsafe.Pointer(p)).FnAlloc = n 18209 (*Percentile)(unsafe.Pointer(p)).Fa = a 18210 } 18211 *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncUint32(&(*Percentile)(unsafe.Pointer(p)).FnUsed, 1))*8)) = y 18212 } 18213 18214 func doubleCmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 18215 var a float64 = *(*float64)(unsafe.Pointer(pA)) 18216 var b float64 = *(*float64)(unsafe.Pointer(pB)) 18217 if a == b { 18218 return 0 18219 } 18220 if a < b { 18221 return -1 18222 } 18223 return +1 18224 } 18225 18226 func percentFinal(tls *libc.TLS, pCtx uintptr) { 18227 var p uintptr 18228 var i1 uint32 18229 var i2 uint32 18230 var v1 float64 18231 var v2 float64 18232 var ix float64 18233 var vx float64 18234 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, 0) 18235 if p == uintptr(0) { 18236 return 18237 } 18238 if (*Percentile)(unsafe.Pointer(p)).Fa == uintptr(0) { 18239 return 18240 } 18241 if (*Percentile)(unsafe.Pointer(p)).FnUsed != 0 { 18242 libc.Xqsort(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64((*Percentile)(unsafe.Pointer(p)).FnUsed), uint64(unsafe.Sizeof(float64(0))), *(*uintptr)(unsafe.Pointer(&struct { 18243 f func(*libc.TLS, uintptr, uintptr) int32 18244 }{doubleCmp}))) 18245 ix = ((*Percentile)(unsafe.Pointer(p)).FrPct - 1.0) * float64((*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1)) * 0.01 18246 i1 = uint32(ix) 18247 if ix == float64(i1) || i1 == (*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1) { 18248 i2 = i1 18249 } else { 18250 i2 = i1 + uint32(1) 18251 } 18252 v1 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i1)*8)) 18253 v2 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i2)*8)) 18254 vx = v1 + (v2-v1)*(ix-float64(i1)) 18255 sqlite3.Xsqlite3_result_double(tls, pCtx, vx) 18256 } 18257 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 18258 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Percentile{}))) 18259 } 18260 18261 func sqlite3_percentile_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18262 var rc int32 = SQLITE_OK 18263 _ = pApi 18264 18265 _ = pzErrMsg 18266 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6087, 2, 18267 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 18268 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 18269 f func(*libc.TLS, uintptr, int32, uintptr) 18270 }{percentStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{percentFinal}))) 18271 return rc 18272 } 18273 18274 type prefixes_vtab1 = struct{ Fbase sqlite3_vtab } 18275 18276 type prefixes_vtab = prefixes_vtab1 18277 18278 type prefixes_cursor1 = struct { 18279 Fbase sqlite3_vtab_cursor 18280 FiRowid sqlite3_int64 18281 FzStr uintptr 18282 FnStr int32 18283 F__ccgo_pad1 [4]byte 18284 } 18285 18286 type prefixes_cursor = prefixes_cursor1 18287 18288 func prefixesConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 18289 var pNew uintptr 18290 var rc int32 18291 18292 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 18293 ts+6098) 18294 if rc == SQLITE_OK { 18295 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_vtab{}))) 18296 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 18297 if pNew == uintptr(0) { 18298 return SQLITE_NOMEM 18299 } 18300 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(prefixes_vtab{}))) 18301 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 18302 } 18303 return rc 18304 } 18305 18306 func prefixesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 18307 var p uintptr = pVtab 18308 sqlite3.Xsqlite3_free(tls, p) 18309 return SQLITE_OK 18310 } 18311 18312 func prefixesOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 18313 var pCur uintptr 18314 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_cursor{}))) 18315 if pCur == uintptr(0) { 18316 return SQLITE_NOMEM 18317 } 18318 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(prefixes_cursor{}))) 18319 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 18320 return SQLITE_OK 18321 } 18322 18323 func prefixesClose(tls *libc.TLS, cur uintptr) int32 { 18324 var pCur uintptr = cur 18325 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 18326 sqlite3.Xsqlite3_free(tls, pCur) 18327 return SQLITE_OK 18328 } 18329 18330 func prefixesNext(tls *libc.TLS, cur uintptr) int32 { 18331 var pCur uintptr = cur 18332 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid++ 18333 return SQLITE_OK 18334 } 18335 18336 func prefixesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 18337 var pCur uintptr = cur 18338 switch i { 18339 case 0: 18340 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), 18341 uintptr(0)) 18342 break 18343 default: 18344 sqlite3.Xsqlite3_result_text(tls, ctx, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr, (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr, uintptr(0)) 18345 break 18346 } 18347 return SQLITE_OK 18348 } 18349 18350 func prefixesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18351 var pCur uintptr = cur 18352 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid 18353 return SQLITE_OK 18354 } 18355 18356 func prefixesEof(tls *libc.TLS, cur uintptr) int32 { 18357 var pCur uintptr = cur 18358 return libc.Bool32((*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid > sqlite3_int64((*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr)) 18359 } 18360 18361 func prefixesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 18362 bp := tls.Alloc(8) 18363 defer tls.Free(8) 18364 18365 var pCur uintptr = pVtabCursor 18366 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 18367 if argc > 0 { 18368 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 18369 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = func() int32 { 18370 if (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr != 0 { 18371 return int32(libc.Xstrlen(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr)) 18372 } 18373 return 0 18374 }() 18375 } else { 18376 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = uintptr(0) 18377 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = 0 18378 } 18379 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 18380 return SQLITE_OK 18381 } 18382 18383 func prefixesBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 18384 var i int32 18385 var p uintptr 18386 18387 i = 0 18388 p = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 18389 __1: 18390 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 18391 goto __3 18392 } 18393 { 18394 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != 1 { 18395 goto __2 18396 } 18397 if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 18398 goto __2 18399 } 18400 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 18401 goto __2 18402 } 18403 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 18404 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 18405 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 18406 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 18407 return SQLITE_OK 18408 18409 } 18410 goto __2 18411 __2: 18412 i++ 18413 p += 12 18414 goto __1 18415 goto __3 18416 __3: 18417 ; 18418 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000000) 18419 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000000000) 18420 return SQLITE_OK 18421 } 18422 18423 var prefixesModule = sqlite3_module{ 18424 FxConnect: 0, 18425 FxBestIndex: 0, 18426 FxDisconnect: 0, 18427 FxOpen: 0, 18428 FxClose: 0, 18429 FxFilter: 0, 18430 FxNext: 0, 18431 FxEof: 0, 18432 FxColumn: 0, 18433 FxRowid: 0, 18434 } 18435 18436 func prefixLengthFunc(tls *libc.TLS, ctx uintptr, nVal int32, apVal uintptr) { 18437 var nByte int32 18438 var nRet int32 = 0 18439 var zL uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 18440 var zR uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 18441 var nL int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 18442 var nR int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 18443 var i int32 18444 18445 nByte = func() int32 { 18446 if nL > nR { 18447 return nL 18448 } 18449 return nR 18450 }() 18451 for i = 0; i < nByte; i++ { 18452 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i)))) != int32(*(*uint8)(unsafe.Pointer(zR + uintptr(i)))) { 18453 break 18454 } 18455 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 != 0x80 { 18456 nRet++ 18457 } 18458 } 18459 18460 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 == 0x80 { 18461 nRet-- 18462 } 18463 sqlite3.Xsqlite3_result_int(tls, ctx, nRet) 18464 } 18465 18466 func sqlite3_prefixes_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18467 var rc int32 = SQLITE_OK 18468 _ = pApi 18469 18470 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6162, uintptr(unsafe.Pointer(&prefixesModule)), uintptr(0)) 18471 if rc == SQLITE_OK { 18472 rc = sqlite3.Xsqlite3_create_function(tls, 18473 db, ts+6171, 2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 18474 f func(*libc.TLS, uintptr, int32, uintptr) 18475 }{prefixLengthFunc})), uintptr(0), uintptr(0)) 18476 } 18477 return rc 18478 } 18479 18480 type qpvtab_vtab1 = struct{ Fbase sqlite3_vtab } 18481 18482 type qpvtab_vtab = qpvtab_vtab1 18483 18484 type qpvtab_cursor1 = struct { 18485 Fbase sqlite3_vtab_cursor 18486 FiRowid sqlite3_int64 18487 FzData uintptr 18488 FnData int32 18489 Fflags int32 18490 } 18491 18492 type qpvtab_cursor = qpvtab_cursor1 18493 18494 var azColname = [13]uintptr{ 18495 ts + 6185, 18496 ts + 6188, 18497 ts + 6191, 18498 ts + 6194, 18499 ts + 6197, 18500 ts + 6200, 18501 ts + 6204, ts + 6206, ts + 6208, ts + 6210, ts + 6212, 18502 ts + 6214, 18503 ts + 584, 18504 } 18505 18506 func qpvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 18507 var pNew uintptr 18508 var rc int32 18509 18510 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 18511 ts+6220) 18512 if rc == SQLITE_OK { 18513 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_vtab{}))) 18514 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 18515 if pNew == uintptr(0) { 18516 return SQLITE_NOMEM 18517 } 18518 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(qpvtab_vtab{}))) 18519 } 18520 return rc 18521 } 18522 18523 func qpvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 18524 var p uintptr = pVtab 18525 sqlite3.Xsqlite3_free(tls, p) 18526 return SQLITE_OK 18527 } 18528 18529 func qpvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 18530 var pCur uintptr 18531 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_cursor{}))) 18532 if pCur == uintptr(0) { 18533 return SQLITE_NOMEM 18534 } 18535 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(qpvtab_cursor{}))) 18536 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 18537 return SQLITE_OK 18538 } 18539 18540 func qpvtabClose(tls *libc.TLS, cur uintptr) int32 { 18541 var pCur uintptr = cur 18542 sqlite3.Xsqlite3_free(tls, pCur) 18543 return SQLITE_OK 18544 } 18545 18546 func qpvtabNext(tls *libc.TLS, cur uintptr) int32 { 18547 var pCur uintptr = cur 18548 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 18549 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 18550 var zEnd uintptr = libc.Xstrchr(tls, z, '\n') 18551 if zEnd != 0 { 18552 zEnd++ 18553 } 18554 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = sqlite3_int64(int32((int64(zEnd) - int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData)) / 1)) 18555 } 18556 return SQLITE_OK 18557 } 18558 18559 func qpvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 18560 bp := tls.Alloc(1) 18561 defer tls.Free(1) 18562 18563 var pCur uintptr = cur 18564 if i >= QPVTAB_VN && i <= QPVTAB_RHS && (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 18565 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 18566 var zEnd uintptr 18567 var j int32 18568 j = QPVTAB_VN 18569 for 1 != 0 { 18570 zEnd = libc.Xstrchr(tls, z, func() int32 { 18571 if j == QPVTAB_RHS { 18572 return '\n' 18573 } 18574 return ',' 18575 }()) 18576 if j == i || zEnd == uintptr(0) { 18577 break 18578 } 18579 z = zEnd + uintptr(1) 18580 j++ 18581 } 18582 if zEnd == z { 18583 sqlite3.Xsqlite3_result_null(tls, ctx) 18584 } else if i == QPVTAB_IX || i == QPVTAB_OP || i == QPVTAB_UX { 18585 sqlite3.Xsqlite3_result_int(tls, ctx, libc.Xatoi(tls, z)) 18586 } else { 18587 sqlite3.Xsqlite3_result_text64(tls, ctx, z, uint64((int64(zEnd)-int64(z))/1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 18588 } 18589 } else if i >= QPVTAB_A && i <= QPVTAB_E { 18590 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags&0x001 != 0 { 18591 sqlite3.Xsqlite3_result_int(tls, ctx, i-QPVTAB_A+1) 18592 } else { 18593 *(*uint8)(unsafe.Pointer(bp)) = uint8('a' + i - QPVTAB_A) 18594 sqlite3.Xsqlite3_result_text64(tls, ctx, bp, uint64(1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 18595 } 18596 } else if i == QPVTAB_FLAGS { 18597 sqlite3.Xsqlite3_result_int(tls, ctx, (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags) 18598 } 18599 return SQLITE_OK 18600 } 18601 18602 func qpvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18603 var pCur uintptr = cur 18604 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid 18605 return SQLITE_OK 18606 } 18607 18608 func qpvtabEof(tls *libc.TLS, cur uintptr) int32 { 18609 var pCur uintptr = cur 18610 return libc.Bool32((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid >= sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData)) 18611 } 18612 18613 func qpvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 18614 var pCur uintptr = pVtabCursor 18615 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 18616 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData = idxStr 18617 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData = int32(libc.Xstrlen(tls, idxStr)) 18618 (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags = idxNum 18619 return SQLITE_OK 18620 } 18621 18622 func qpvtabStrAppendValue(tls *libc.TLS, pStr uintptr, pVal uintptr) { 18623 bp := tls.Alloc(25) 18624 defer tls.Free(25) 18625 18626 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 18627 case SQLITE_NULL: 18628 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+5846, 0) 18629 break 18630 case SQLITE_INTEGER: 18631 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6325, libc.VaList(bp, sqlite3.Xsqlite3_value_int64(tls, pVal))) 18632 break 18633 case SQLITE_FLOAT: 18634 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6330, libc.VaList(bp+8, sqlite3.Xsqlite3_value_double(tls, pVal))) 18635 break 18636 case SQLITE_TEXT: 18637 { 18638 var i int32 18639 var a uintptr = sqlite3.Xsqlite3_value_text(tls, pVal) 18640 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 18641 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18642 for i = 0; i < n; i++ { 18643 *(*uint8)(unsafe.Pointer(bp + 24)) = *(*uint8)(unsafe.Pointer(a + uintptr(i))) 18644 if int32(*(*uint8)(unsafe.Pointer(bp + 24))) == '\n' { 18645 *(*uint8)(unsafe.Pointer(bp + 24)) = uint8(' ') 18646 } 18647 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 18648 if int32(*(*uint8)(unsafe.Pointer(bp + 24))) == '\'' { 18649 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 18650 } 18651 } 18652 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18653 break 18654 18655 } 18656 case SQLITE_BLOB: 18657 { 18658 var i int32 18659 var a uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 18660 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 18661 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6334, 2) 18662 for i = 0; i < n; i++ { 18663 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6337, libc.VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a + uintptr(i)))))) 18664 } 18665 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 18666 break 18667 18668 } 18669 } 18670 } 18671 18672 func qpvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 18673 bp := tls.Alloc(120) 18674 defer tls.Free(120) 18675 18676 var pStr uintptr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 18677 var i int32 18678 var k int32 = 0 18679 var rc int32 18680 _ = rc 18681 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6342, libc.VaList(bp, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint)) 18682 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 18683 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 18684 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 18685 if iCol == QPVTAB_FLAGS && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 18686 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 18687 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 18688 18689 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 18690 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 18691 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x002 != 0 { 18692 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 18693 } 18694 } 18695 } 18696 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 18697 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 18698 iCol = QPVTAB_NONE 18699 } 18700 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6362, 18701 libc.VaList(bp+8, i, 18702 azColname[iCol], 18703 op, 18704 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable))) 18705 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 18706 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 18707 18708 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 18709 qpvtabStrAppendValue(tls, pStr, *(*uintptr)(unsafe.Pointer(bp + 112))) 18710 } 18711 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6387, 1) 18712 } 18713 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 18714 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 18715 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 18716 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 18717 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 18718 iCol = QPVTAB_NONE 18719 } 18720 if iCol >= QPVTAB_A && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 18721 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&k, 1) 18722 if iCol <= QPVTAB_FLAGS || (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x004 != 0 { 18723 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 18724 } 18725 } 18726 } 18727 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6389, libc.VaList(bp+40, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy)) 18728 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; i++ { 18729 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 18730 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6406, libc.VaList(bp+48, i, 18731 func() uintptr { 18732 if iCol >= 0 { 18733 return azColname[iCol] 18734 } 18735 return ts + 6427 18736 }(), 18737 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy+uintptr(i)*8)).Fdesc))) 18738 } 18739 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6433, 18740 libc.VaList(bp+72, sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo))) 18741 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6463, libc.VaList(bp+80, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags)) 18742 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6480, libc.VaList(bp+88, int32((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 18743 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 18744 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 18745 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6496, libc.VaList(bp+96, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum)) 18746 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6511, 18747 libc.VaList(bp+104, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed)) 18748 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_str_finish(tls, pStr) 18749 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 18750 return SQLITE_OK 18751 } 18752 18753 var qpvtabModule = sqlite3_module{ 18754 FxConnect: 0, 18755 FxBestIndex: 0, 18756 FxDisconnect: 0, 18757 FxOpen: 0, 18758 FxClose: 0, 18759 FxFilter: 0, 18760 FxNext: 0, 18761 FxEof: 0, 18762 FxColumn: 0, 18763 FxRowid: 0, 18764 } 18765 18766 func sqlite3_qpvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18767 var rc int32 = SQLITE_OK 18768 _ = pApi 18769 18770 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6535, uintptr(unsafe.Pointer(&qpvtabModule)), uintptr(0)) 18771 return rc 18772 } 18773 18774 type ReStateNumber = uint16 18775 18776 type ReStateSet1 = struct { 18777 FnState uint32 18778 F__ccgo_pad1 [4]byte 18779 FaState uintptr 18780 } 18781 18782 type ReStateSet = ReStateSet1 18783 18784 type ReInput1 = struct { 18785 Fz uintptr 18786 Fi int32 18787 Fmx int32 18788 } 18789 18790 type ReInput = ReInput1 18791 18792 type ReCompiled1 = struct { 18793 FsIn ReInput 18794 FzErr uintptr 18795 FaOp uintptr 18796 FaArg uintptr 18797 FxNextChar uintptr 18798 FzInit [12]uint8 18799 FnInit int32 18800 FnState uint32 18801 FnAlloc uint32 18802 } 18803 18804 type ReCompiled = ReCompiled1 18805 18806 func re_add_state(tls *libc.TLS, pSet uintptr, newState int32) { 18807 var i uint32 18808 for i = uint32(0); i < (*ReStateSet)(unsafe.Pointer(pSet)).FnState; i++ { 18809 if int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(i)*2))) == newState { 18810 return 18811 } 18812 } 18813 *(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(libc.PostIncUint32(&(*ReStateSet)(unsafe.Pointer(pSet)).FnState, 1))*2)) = ReStateNumber(newState) 18814 } 18815 18816 func re_next_char(tls *libc.TLS, p uintptr) uint32 { 18817 var c uint32 18818 if (*ReInput)(unsafe.Pointer(p)).Fi >= (*ReInput)(unsafe.Pointer(p)).Fmx { 18819 return uint32(0) 18820 } 18821 c = uint32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*ReInput)(unsafe.Pointer(p)).Fi, 1))))) 18822 if c >= uint32(0x80) { 18823 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 { 18824 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) 18825 if c < uint32(0x80) { 18826 c = uint32(0xfffd) 18827 } 18828 } 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 && 18829 int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0xc0 == 0x80 { 18830 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) 18831 *(*int32)(unsafe.Pointer(p + 8)) += 2 18832 if c <= uint32(0x7ff) || c >= uint32(0xd800) && c <= uint32(0xdfff) { 18833 c = uint32(0xfffd) 18834 } 18835 } 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 && 18836 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 { 18837 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) | 18838 uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+2))))&0x3f) 18839 *(*int32)(unsafe.Pointer(p + 8)) += 3 18840 if c <= uint32(0xffff) || c > uint32(0x10ffff) { 18841 c = uint32(0xfffd) 18842 } 18843 } else { 18844 c = uint32(0xfffd) 18845 } 18846 } 18847 return c 18848 } 18849 18850 func re_next_char_nocase(tls *libc.TLS, p uintptr) uint32 { 18851 var c uint32 = re_next_char(tls, p) 18852 if c >= uint32('A') && c <= uint32('Z') { 18853 c = c + uint32('a'-'A') 18854 } 18855 return c 18856 } 18857 18858 func re_word_char(tls *libc.TLS, c int32) int32 { 18859 return libc.Bool32(c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || 18860 c >= 'A' && c <= 'Z' || c == '_') 18861 } 18862 18863 func re_digit_char(tls *libc.TLS, c int32) int32 { 18864 return libc.Bool32(c >= '0' && c <= '9') 18865 } 18866 18867 func re_space_char(tls *libc.TLS, c int32) int32 { 18868 return libc.Bool32(c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\v' || c == '\f') 18869 } 18870 18871 func sqlite3re_match(tls *libc.TLS, pRe uintptr, zIn uintptr, nIn int32) int32 { 18872 bp := tls.Alloc(248) 18873 defer tls.Free(248) 18874 18875 var pThis uintptr 18876 var pNext uintptr 18877 18878 var pToFree uintptr 18879 var i uint32 18880 var iSwap uint32 18881 var c int32 18882 var cPrev int32 18883 var rc int32 18884 18885 var x uint8 18886 var j int32 18887 var n int32 18888 var hit int32 18889 var x1 int32 18890 i = uint32(0) 18891 iSwap = uint32(0) 18892 c = RE_EOF + 1 18893 cPrev = 0 18894 rc = 0 18895 18896 (*ReInput)(unsafe.Pointer(bp + 232)).Fz = zIn 18897 (*ReInput)(unsafe.Pointer(bp + 232)).Fi = 0 18898 (*ReInput)(unsafe.Pointer(bp + 232)).Fmx = func() int32 { 18899 if nIn >= 0 { 18900 return nIn 18901 } 18902 return int32(libc.Xstrlen(tls, zIn)) 18903 }() 18904 18905 if !((*ReCompiled)(unsafe.Pointer(pRe)).FnInit != 0) { 18906 goto __1 18907 } 18908 x = *(*uint8)(unsafe.Pointer(pRe + 48)) 18909 __2: 18910 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit <= (*ReInput)(unsafe.Pointer(bp+232)).Fmx && 18911 (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)) { 18912 goto __3 18913 } 18914 (*ReInput)(unsafe.Pointer(bp+232)).Fi++ 18915 goto __2 18916 __3: 18917 ; 18918 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit > (*ReInput)(unsafe.Pointer(bp+232)).Fmx) { 18919 goto __4 18920 } 18921 return 0 18922 __4: 18923 ; 18924 __1: 18925 ; 18926 if !(uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState) <= uint64(unsafe.Sizeof([100]ReStateNumber{}))/(uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2))) { 18927 goto __5 18928 } 18929 pToFree = uintptr(0) 18930 (*ReStateSet)(unsafe.Pointer(bp)).FaState = bp + 32 18931 goto __6 18932 __5: 18933 pToFree = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2)*uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState)) 18934 if !(pToFree == uintptr(0)) { 18935 goto __7 18936 } 18937 return -1 18938 __7: 18939 ; 18940 (*ReStateSet)(unsafe.Pointer(bp)).FaState = pToFree 18941 __6: 18942 ; 18943 (*ReStateSet)(unsafe.Pointer(bp + 1*16)).FaState = (*ReStateSet)(unsafe.Pointer(bp)).FaState + uintptr((*ReCompiled)(unsafe.Pointer(pRe)).FnState)*2 18944 pNext = bp + 1*16 18945 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 18946 re_add_state(tls, pNext, 0) 18947 __8: 18948 if !(c != RE_EOF && (*ReStateSet)(unsafe.Pointer(pNext)).FnState > uint32(0)) { 18949 goto __9 18950 } 18951 cPrev = c 18952 c = int32((*struct { 18953 f func(*libc.TLS, uintptr) uint32 18954 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar})).f(tls, bp+232)) 18955 pThis = pNext 18956 pNext = bp + uintptr(iSwap)*16 18957 iSwap = uint32(1) - iSwap 18958 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 18959 i = uint32(0) 18960 __10: 18961 if !(i < (*ReStateSet)(unsafe.Pointer(pThis)).FnState) { 18962 goto __12 18963 } 18964 x1 = int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pThis)).FaState + uintptr(i)*2))) 18965 switch int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) { 18966 case RE_OP_MATCH: 18967 goto __14 18968 case RE_OP_ANY: 18969 goto __15 18970 case RE_OP_WORD: 18971 goto __16 18972 case RE_OP_NOTWORD: 18973 goto __17 18974 case RE_OP_DIGIT: 18975 goto __18 18976 case RE_OP_NOTDIGIT: 18977 goto __19 18978 case RE_OP_SPACE: 18979 goto __20 18980 case RE_OP_NOTSPACE: 18981 goto __21 18982 case RE_OP_BOUNDARY: 18983 goto __22 18984 case RE_OP_ANYSTAR: 18985 goto __23 18986 case RE_OP_FORK: 18987 goto __24 18988 case RE_OP_GOTO: 18989 goto __25 18990 case RE_OP_ACCEPT: 18991 goto __26 18992 case RE_OP_CC_EXC: 18993 goto __27 18994 case RE_OP_CC_INC: 18995 goto __28 18996 } 18997 goto __13 18998 __14: 18999 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) == c) { 19000 goto __29 19001 } 19002 re_add_state(tls, pNext, x1+1) 19003 __29: 19004 ; 19005 goto __13 19006 19007 __15: 19008 if !(c != 0) { 19009 goto __30 19010 } 19011 re_add_state(tls, pNext, x1+1) 19012 __30: 19013 ; 19014 goto __13 19015 19016 __16: 19017 if !(re_word_char(tls, c) != 0) { 19018 goto __31 19019 } 19020 re_add_state(tls, pNext, x1+1) 19021 __31: 19022 ; 19023 goto __13 19024 19025 __17: 19026 if !(!(re_word_char(tls, c) != 0) && c != 0) { 19027 goto __32 19028 } 19029 re_add_state(tls, pNext, x1+1) 19030 __32: 19031 ; 19032 goto __13 19033 19034 __18: 19035 if !(re_digit_char(tls, c) != 0) { 19036 goto __33 19037 } 19038 re_add_state(tls, pNext, x1+1) 19039 __33: 19040 ; 19041 goto __13 19042 19043 __19: 19044 if !(!(re_digit_char(tls, c) != 0) && c != 0) { 19045 goto __34 19046 } 19047 re_add_state(tls, pNext, x1+1) 19048 __34: 19049 ; 19050 goto __13 19051 19052 __20: 19053 if !(re_space_char(tls, c) != 0) { 19054 goto __35 19055 } 19056 re_add_state(tls, pNext, x1+1) 19057 __35: 19058 ; 19059 goto __13 19060 19061 __21: 19062 if !(!(re_space_char(tls, c) != 0) && c != 0) { 19063 goto __36 19064 } 19065 re_add_state(tls, pNext, x1+1) 19066 __36: 19067 ; 19068 goto __13 19069 19070 __22: 19071 if !(re_word_char(tls, c) != re_word_char(tls, cPrev)) { 19072 goto __37 19073 } 19074 re_add_state(tls, pThis, x1+1) 19075 __37: 19076 ; 19077 goto __13 19078 19079 __23: 19080 re_add_state(tls, pNext, x1) 19081 re_add_state(tls, pThis, x1+1) 19082 goto __13 19083 19084 __24: 19085 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 19086 re_add_state(tls, pThis, x1+1) 19087 goto __13 19088 19089 __25: 19090 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 19091 goto __13 19092 19093 __26: 19094 rc = 1 19095 goto re_match_end 19096 19097 __27: 19098 if !(c == 0) { 19099 goto __38 19100 } 19101 goto __13 19102 __38: 19103 ; 19104 goto re_op_cc_inc 19105 19106 __28: 19107 re_op_cc_inc: 19108 j = 1 19109 n = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) 19110 hit = 0 19111 j = 1 19112 __39: 19113 if !(j > 0 && j < n) { 19114 goto __41 19115 } 19116 if !(int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1+j)))) == RE_OP_CC_VALUE) { 19117 goto __42 19118 } 19119 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j)*4)) == c) { 19120 goto __44 19121 } 19122 hit = 1 19123 j = -1 19124 __44: 19125 ; 19126 goto __43 19127 __42: 19128 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) { 19129 goto __45 19130 } 19131 hit = 1 19132 j = -1 19133 goto __46 19134 __45: 19135 j++ 19136 __46: 19137 ; 19138 __43: 19139 ; 19140 goto __40 19141 __40: 19142 j++ 19143 goto __39 19144 goto __41 19145 __41: 19146 ; 19147 if !(int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) == RE_OP_CC_EXC) { 19148 goto __47 19149 } 19150 hit = libc.BoolInt32(!(hit != 0)) 19151 __47: 19152 ; 19153 if !(hit != 0) { 19154 goto __48 19155 } 19156 re_add_state(tls, pNext, x1+n) 19157 __48: 19158 ; 19159 goto __13 19160 19161 __13: 19162 ; 19163 goto __11 19164 __11: 19165 i++ 19166 goto __10 19167 goto __12 19168 __12: 19169 ; 19170 goto __8 19171 __9: 19172 ; 19173 i = uint32(0) 19174 __49: 19175 if !(i < (*ReStateSet)(unsafe.Pointer(pNext)).FnState) { 19176 goto __51 19177 } 19178 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) { 19179 goto __52 19180 } 19181 rc = 1 19182 goto __51 19183 __52: 19184 ; 19185 goto __50 19186 __50: 19187 i++ 19188 goto __49 19189 goto __51 19190 __51: 19191 ; 19192 re_match_end: 19193 sqlite3.Xsqlite3_free(tls, pToFree) 19194 return rc 19195 } 19196 19197 func re_resize(tls *libc.TLS, p uintptr, N int32) int32 { 19198 var aOp uintptr 19199 var aArg uintptr 19200 aOp = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp, uint64(N)*uint64(unsafe.Sizeof(uint8(0)))) 19201 if aOp == uintptr(0) { 19202 return 1 19203 } 19204 (*ReCompiled)(unsafe.Pointer(p)).FaOp = aOp 19205 aArg = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg, uint64(N)*uint64(unsafe.Sizeof(int32(0)))) 19206 if aArg == uintptr(0) { 19207 return 1 19208 } 19209 (*ReCompiled)(unsafe.Pointer(p)).FaArg = aArg 19210 (*ReCompiled)(unsafe.Pointer(p)).FnAlloc = uint32(N) 19211 return 0 19212 } 19213 19214 func re_insert(tls *libc.TLS, p uintptr, iBefore int32, op int32, arg int32) int32 { 19215 var i int32 19216 if (*ReCompiled)(unsafe.Pointer(p)).FnAlloc <= (*ReCompiled)(unsafe.Pointer(p)).FnState && re_resize(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnAlloc*uint32(2))) != 0 { 19217 return 0 19218 } 19219 for i = int32((*ReCompiled)(unsafe.Pointer(p)).FnState); i > iBefore; i-- { 19220 *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i))) = *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i-1))) 19221 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i-1)*4)) 19222 } 19223 (*ReCompiled)(unsafe.Pointer(p)).FnState++ 19224 *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(iBefore))) = uint8(op) 19225 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iBefore)*4)) = arg 19226 return iBefore 19227 } 19228 19229 func re_append(tls *libc.TLS, p uintptr, op int32, arg int32) int32 { 19230 return re_insert(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnState), op, arg) 19231 } 19232 19233 func re_copy(tls *libc.TLS, p uintptr, iStart int32, N int32) { 19234 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 { 19235 return 19236 } 19237 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)))) 19238 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)))) 19239 *(*uint32)(unsafe.Pointer(p + 64)) += uint32(N) 19240 } 19241 19242 func re_hex(tls *libc.TLS, c int32, pV uintptr) int32 { 19243 if c >= '0' && c <= '9' { 19244 c = c - '0' 19245 } else if c >= 'a' && c <= 'f' { 19246 c = c - ('a' - 10) 19247 } else if c >= 'A' && c <= 'F' { 19248 c = c - ('A' - 10) 19249 } else { 19250 return 0 19251 } 19252 *(*int32)(unsafe.Pointer(pV)) = *(*int32)(unsafe.Pointer(pV))*16 + c&0xff 19253 return 1 19254 } 19255 19256 func re_esc_char(tls *libc.TLS, p uintptr) uint32 { 19257 bp := tls.Alloc(4) 19258 defer tls.Free(4) 19259 19260 var i int32 19261 *(*int32)(unsafe.Pointer(bp)) = 0 19262 var c uint8 19263 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 19264 return uint32(0) 19265 } 19266 c = *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 19267 if int32(c) == 'u' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+4 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 19268 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 19269 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 19270 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 && 19271 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 3))), bp) != 0 && 19272 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 4))), bp) != 0 { 19273 *(*int32)(unsafe.Pointer(p + 8)) += 5 19274 return uint32(*(*int32)(unsafe.Pointer(bp))) 19275 } 19276 } 19277 if int32(c) == 'x' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+2 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 19278 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 19279 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 19280 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 { 19281 *(*int32)(unsafe.Pointer(p + 8)) += 3 19282 return uint32(*(*int32)(unsafe.Pointer(bp))) 19283 } 19284 } 19285 for i = 0; zEsc[i] != 0 && int32(zEsc[i]) != int32(c); i++ { 19286 } 19287 if zEsc[i] != 0 { 19288 if i < 6 { 19289 c = zTrans[i] 19290 } 19291 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19292 } else { 19293 (*ReCompiled)(unsafe.Pointer(p)).FzErr = ts + 6542 19294 } 19295 return uint32(c) 19296 } 19297 19298 var zEsc = *(*[21]uint8)(unsafe.Pointer(ts + 6559)) 19299 var zTrans = *(*[7]uint8)(unsafe.Pointer(ts + 6580)) 19300 19301 func rePeek(tls *libc.TLS, p uintptr) uint8 { 19302 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 19303 return *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 19304 } 19305 return uint8(0) 19306 } 19307 19308 func re_subcompile_re(tls *libc.TLS, p uintptr) uintptr { 19309 var zErr uintptr 19310 var iStart int32 19311 var iEnd int32 19312 var iGoto int32 19313 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 19314 zErr = re_subcompile_string(tls, p) 19315 if zErr != 0 { 19316 return zErr 19317 } 19318 for int32(rePeek(tls, p)) == '|' { 19319 iEnd = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 19320 re_insert(tls, p, iStart, RE_OP_FORK, iEnd+2-iStart) 19321 iGoto = re_append(tls, p, RE_OP_GOTO, 0) 19322 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19323 zErr = re_subcompile_string(tls, p) 19324 if zErr != 0 { 19325 return zErr 19326 } 19327 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iGoto)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iGoto)) 19328 } 19329 return uintptr(0) 19330 } 19331 19332 func re_subcompile_string(tls *libc.TLS, p uintptr) uintptr { 19333 var iPrev int32 = -1 19334 var iStart int32 19335 var c uint32 19336 var zErr uintptr 19337 for libc.AssignUint32(&c, (*struct { 19338 f func(*libc.TLS, uintptr) uint32 19339 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 19340 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 19341 switch c { 19342 case uint32('|'): 19343 fallthrough 19344 case uint32('$'): 19345 fallthrough 19346 case uint32(')'): 19347 { 19348 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi-- 19349 return uintptr(0) 19350 19351 } 19352 case uint32('('): 19353 { 19354 zErr = re_subcompile_re(tls, p) 19355 if zErr != 0 { 19356 return zErr 19357 } 19358 if int32(rePeek(tls, p)) != ')' { 19359 return ts + 6587 19360 } 19361 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19362 break 19363 19364 } 19365 case uint32('.'): 19366 { 19367 if int32(rePeek(tls, p)) == '*' { 19368 re_append(tls, p, RE_OP_ANYSTAR, 0) 19369 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19370 } else { 19371 re_append(tls, p, RE_OP_ANY, 0) 19372 } 19373 break 19374 19375 } 19376 case uint32('*'): 19377 { 19378 if iPrev < 0 { 19379 return ts + 6601 19380 } 19381 re_insert(tls, p, iPrev, RE_OP_GOTO, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 19382 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState+uint32(1))) 19383 break 19384 19385 } 19386 case uint32('+'): 19387 { 19388 if iPrev < 0 { 19389 return ts + 6621 19390 } 19391 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState)) 19392 break 19393 19394 } 19395 case uint32('?'): 19396 { 19397 if iPrev < 0 { 19398 return ts + 6641 19399 } 19400 re_insert(tls, p, iPrev, RE_OP_FORK, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 19401 break 19402 19403 } 19404 case uint32('{'): 19405 { 19406 var m int32 = 0 19407 var n int32 = 0 19408 var sz int32 19409 var j int32 19410 if iPrev < 0 { 19411 return ts + 6661 19412 } 19413 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 19414 m = int32(uint32(m*10) + c - uint32('0')) 19415 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19416 } 19417 n = m 19418 if c == uint32(',') { 19419 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19420 n = 0 19421 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 19422 n = int32(uint32(n*10) + c - uint32('0')) 19423 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19424 } 19425 } 19426 if c != uint32('}') { 19427 return ts + 6685 19428 } 19429 if n > 0 && n < m { 19430 return ts + 6699 19431 } 19432 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19433 sz = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iPrev)) 19434 if m == 0 { 19435 if n == 0 { 19436 return ts + 6724 19437 } 19438 re_insert(tls, p, iPrev, RE_OP_FORK, sz+1) 19439 n-- 19440 } else { 19441 for j = 1; j < m; j++ { 19442 re_copy(tls, p, iPrev, sz) 19443 } 19444 } 19445 for j = m; j < n; j++ { 19446 re_append(tls, p, RE_OP_FORK, sz+1) 19447 re_copy(tls, p, iPrev, sz) 19448 } 19449 if n == 0 && m > 0 { 19450 re_append(tls, p, RE_OP_FORK, -sz) 19451 } 19452 break 19453 19454 } 19455 case uint32('['): 19456 { 19457 var iFirst int32 = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 19458 if int32(rePeek(tls, p)) == '^' { 19459 re_append(tls, p, RE_OP_CC_EXC, 0) 19460 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19461 } else { 19462 re_append(tls, p, RE_OP_CC_INC, 0) 19463 } 19464 for libc.AssignUint32(&c, (*struct { 19465 f func(*libc.TLS, uintptr) uint32 19466 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 19467 if c == uint32('[') && int32(rePeek(tls, p)) == ':' { 19468 return ts + 6757 19469 } 19470 if c == uint32('\\') { 19471 c = re_esc_char(tls, p) 19472 } 19473 if int32(rePeek(tls, p)) == '-' { 19474 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 19475 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19476 c = (*struct { 19477 f func(*libc.TLS, uintptr) uint32 19478 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p) 19479 if c == uint32('\\') { 19480 c = re_esc_char(tls, p) 19481 } 19482 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 19483 } else { 19484 re_append(tls, p, RE_OP_CC_VALUE, int32(c)) 19485 } 19486 if int32(rePeek(tls, p)) == ']' { 19487 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19488 break 19489 } 19490 } 19491 if c == uint32(0) { 19492 return ts + 6795 19493 } 19494 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iFirst)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iFirst)) 19495 break 19496 19497 } 19498 case uint32('\\'): 19499 { 19500 var specialOp int32 = 0 19501 switch int32(rePeek(tls, p)) { 19502 case 'b': 19503 specialOp = RE_OP_BOUNDARY 19504 break 19505 case 'd': 19506 specialOp = RE_OP_DIGIT 19507 break 19508 case 'D': 19509 specialOp = RE_OP_NOTDIGIT 19510 break 19511 case 's': 19512 specialOp = RE_OP_SPACE 19513 break 19514 case 'S': 19515 specialOp = RE_OP_NOTSPACE 19516 break 19517 case 'w': 19518 specialOp = RE_OP_WORD 19519 break 19520 case 'W': 19521 specialOp = RE_OP_NOTWORD 19522 break 19523 } 19524 if specialOp != 0 { 19525 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 19526 re_append(tls, p, specialOp, 0) 19527 } else { 19528 c = re_esc_char(tls, p) 19529 re_append(tls, p, RE_OP_MATCH, int32(c)) 19530 } 19531 break 19532 19533 } 19534 default: 19535 { 19536 re_append(tls, p, RE_OP_MATCH, int32(c)) 19537 break 19538 19539 } 19540 } 19541 iPrev = iStart 19542 } 19543 return uintptr(0) 19544 } 19545 19546 func sqlite3re_free(tls *libc.TLS, pRe uintptr) { 19547 if pRe != 0 { 19548 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaOp) 19549 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaArg) 19550 sqlite3.Xsqlite3_free(tls, pRe) 19551 } 19552 } 19553 19554 func sqlite3re_compile(tls *libc.TLS, ppRe uintptr, zIn uintptr, noCase int32) uintptr { 19555 var pRe uintptr 19556 var zErr uintptr 19557 var i int32 19558 var j int32 19559 19560 *(*uintptr)(unsafe.Pointer(ppRe)) = uintptr(0) 19561 pRe = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(ReCompiled{}))) 19562 if pRe == uintptr(0) { 19563 return ts + 2069 19564 } 19565 libc.Xmemset(tls, pRe, 0, uint64(unsafe.Sizeof(ReCompiled{}))) 19566 (*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar = func() uintptr { 19567 if noCase != 0 { 19568 return *(*uintptr)(unsafe.Pointer(&struct { 19569 f func(*libc.TLS, uintptr) uint32 19570 }{re_next_char_nocase})) 19571 } 19572 return *(*uintptr)(unsafe.Pointer(&struct { 19573 f func(*libc.TLS, uintptr) uint32 19574 }{re_next_char})) 19575 }() 19576 if re_resize(tls, pRe, 30) != 0 { 19577 sqlite3re_free(tls, pRe) 19578 return ts + 2069 19579 } 19580 if int32(*(*uint8)(unsafe.Pointer(zIn))) == '^' { 19581 zIn++ 19582 } else { 19583 re_append(tls, pRe, RE_OP_ANYSTAR, 0) 19584 } 19585 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fz = zIn 19586 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi = 0 19587 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx = int32(libc.Xstrlen(tls, zIn)) 19588 zErr = re_subcompile_re(tls, pRe) 19589 if zErr != 0 { 19590 sqlite3re_free(tls, pRe) 19591 return zErr 19592 } 19593 if int32(rePeek(tls, pRe)) == '$' && (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi+1 >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 19594 re_append(tls, pRe, RE_OP_MATCH, RE_EOF) 19595 re_append(tls, pRe, RE_OP_ACCEPT, 0) 19596 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 19597 } else if (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 19598 re_append(tls, pRe, RE_OP_ACCEPT, 0) 19599 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 19600 } else { 19601 sqlite3re_free(tls, pRe) 19602 return ts + 6808 19603 } 19604 19605 if int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp))) == RE_OP_ANYSTAR && !(noCase != 0) { 19606 j = 0 19607 i = 1 19608 for ; j < int32(unsafe.Sizeof([12]uint8{}))-2 && int32(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(i)))) == RE_OP_MATCH; i++ { 19609 var x uint32 = uint32(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(i)*4))) 19610 if x <= uint32(127) { 19611 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(x) 19612 } else if x <= uint32(0xfff) { 19613 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xc0) | x>>6) 19614 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 19615 } else if x <= uint32(0xffff) { 19616 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xe0) | x>>12) 19617 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x>>6&uint32(0x3f)) 19618 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 19619 } else { 19620 break 19621 } 19622 } 19623 if j > 0 && int32(*(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(j-1)))) == 0 { 19624 j-- 19625 } 19626 (*ReCompiled)(unsafe.Pointer(pRe)).FnInit = j 19627 } 19628 return (*ReCompiled)(unsafe.Pointer(pRe)).FzErr 19629 } 19630 19631 func re_sql_func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19632 bp := tls.Alloc(8) 19633 defer tls.Free(8) 19634 19635 var zPattern uintptr 19636 var zStr uintptr 19637 var zErr uintptr 19638 var setAux int32 = 0 19639 19640 _ = argc 19641 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_get_auxdata(tls, context, 0) 19642 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 19643 zPattern = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19644 if zPattern == uintptr(0) { 19645 return 19646 } 19647 zErr = sqlite3re_compile(tls, bp, zPattern, libc.Bool32(sqlite3.Xsqlite3_user_data(tls, context) != uintptr(0))) 19648 if zErr != 0 { 19649 sqlite3re_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 19650 sqlite3.Xsqlite3_result_error(tls, context, zErr, -1) 19651 return 19652 } 19653 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 19654 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19655 return 19656 } 19657 setAux = 1 19658 } 19659 zStr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 19660 if zStr != uintptr(0) { 19661 sqlite3.Xsqlite3_result_int(tls, context, sqlite3re_match(tls, *(*uintptr)(unsafe.Pointer(bp)), zStr, -1)) 19662 } 19663 if setAux != 0 { 19664 sqlite3.Xsqlite3_set_auxdata(tls, context, 0, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3re_free}))) 19665 } 19666 } 19667 19668 func sqlite3_regexp_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19669 var rc int32 = SQLITE_OK 19670 _ = pApi 19671 19672 _ = pzErrMsg 19673 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6831, 2, 19674 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 19675 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 19676 f func(*libc.TLS, uintptr, int32, uintptr) 19677 }{re_sql_func})), uintptr(0), uintptr(0)) 19678 if rc == SQLITE_OK { 19679 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6838, 2, 19680 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 19681 db, *(*uintptr)(unsafe.Pointer(&struct { 19682 f func(*libc.TLS, uintptr, int32, uintptr) 19683 }{re_sql_func})), uintptr(0), uintptr(0)) 19684 } 19685 return rc 19686 } 19687 19688 func rememberFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 19689 var v sqlite3_int64 19690 var ptr uintptr 19691 19692 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 19693 ptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4060) 19694 if ptr != 0 { 19695 *(*sqlite3_int64)(unsafe.Pointer(ptr)) = v 19696 } 19697 sqlite3.Xsqlite3_result_int64(tls, pCtx, v) 19698 } 19699 19700 func sqlite3_remember_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19701 var rc int32 = SQLITE_OK 19702 _ = pApi 19703 19704 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6846, 2, SQLITE_UTF8, uintptr(0), 19705 *(*uintptr)(unsafe.Pointer(&struct { 19706 f func(*libc.TLS, uintptr, int32, uintptr) 19707 }{rememberFunc})), uintptr(0), uintptr(0)) 19708 return rc 19709 } 19710 19711 type series_cursor1 = struct { 19712 Fbase sqlite3_vtab_cursor 19713 FisDesc int32 19714 F__ccgo_pad1 [4]byte 19715 FiRowid sqlite3_int64 19716 FiValue sqlite3_int64 19717 FmnValue sqlite3_int64 19718 FmxValue sqlite3_int64 19719 FiStep sqlite3_int64 19720 } 19721 19722 type series_cursor = series_cursor1 19723 19724 func seriesConnect(tls *libc.TLS, db uintptr, pUnused uintptr, argcUnused int32, argvUnused uintptr, ppVtab uintptr, pzErrUnused uintptr) int32 { 19725 var pNew uintptr 19726 var rc int32 19727 19728 _ = pUnused 19729 _ = argcUnused 19730 _ = argvUnused 19731 _ = pzErrUnused 19732 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 19733 ts+6855) 19734 if rc == SQLITE_OK { 19735 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 19736 if pNew == uintptr(0) { 19737 return SQLITE_NOMEM 19738 } 19739 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 19740 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 19741 } 19742 return rc 19743 } 19744 19745 func seriesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 19746 sqlite3.Xsqlite3_free(tls, pVtab) 19747 return SQLITE_OK 19748 } 19749 19750 func seriesOpen(tls *libc.TLS, pUnused uintptr, ppCursor uintptr) int32 { 19751 var pCur uintptr 19752 _ = pUnused 19753 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(series_cursor{}))) 19754 if pCur == uintptr(0) { 19755 return SQLITE_NOMEM 19756 } 19757 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(series_cursor{}))) 19758 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 19759 return SQLITE_OK 19760 } 19761 19762 func seriesClose(tls *libc.TLS, cur uintptr) int32 { 19763 sqlite3.Xsqlite3_free(tls, cur) 19764 return SQLITE_OK 19765 } 19766 19767 func seriesNext(tls *libc.TLS, cur uintptr) int32 { 19768 var pCur uintptr = cur 19769 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 19770 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19771 } else { 19772 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) += (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19773 } 19774 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid++ 19775 return SQLITE_OK 19776 } 19777 19778 func seriesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 19779 var pCur uintptr = cur 19780 var x sqlite3_int64 = int64(0) 19781 switch i { 19782 case SERIES_COLUMN_START: 19783 x = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 19784 break 19785 case SERIES_COLUMN_STOP: 19786 x = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 19787 break 19788 case SERIES_COLUMN_STEP: 19789 x = (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19790 break 19791 default: 19792 x = (*series_cursor)(unsafe.Pointer(pCur)).FiValue 19793 break 19794 } 19795 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 19796 return SQLITE_OK 19797 } 19798 19799 func seriesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 19800 var pCur uintptr = cur 19801 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*series_cursor)(unsafe.Pointer(pCur)).FiRowid 19802 return SQLITE_OK 19803 } 19804 19805 func seriesEof(tls *libc.TLS, cur uintptr) int32 { 19806 var pCur uintptr = cur 19807 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 19808 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue < (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) 19809 } else { 19810 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue > (*series_cursor)(unsafe.Pointer(pCur)).FmxValue) 19811 } 19812 return int32(0) 19813 } 19814 19815 func seriesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStrUnused uintptr, argc int32, argv uintptr) int32 { 19816 var pCur uintptr = pVtabCursor 19817 var i int32 = 0 19818 _ = idxStrUnused 19819 if idxNum&1 != 0 { 19820 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19821 } else { 19822 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(0) 19823 } 19824 if idxNum&2 != 0 { 19825 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19826 } else { 19827 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 19828 } 19829 if idxNum&4 != 0 { 19830 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 19831 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep == int64(0) { 19832 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 19833 } else if (*series_cursor)(unsafe.Pointer(pCur)).FiStep < int64(0) { 19834 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = -(*series_cursor)(unsafe.Pointer(pCur)).FiStep 19835 if idxNum&16 == 0 { 19836 idxNum = idxNum | 8 19837 } 19838 } 19839 } else { 19840 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 19841 } 19842 for i = 0; i < argc; i++ { 19843 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) == SQLITE_NULL { 19844 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(1) 19845 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0) 19846 break 19847 } 19848 } 19849 if idxNum&8 != 0 { 19850 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 1 19851 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 19852 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep > int64(0) { 19853 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= ((*series_cursor)(unsafe.Pointer(pCur)).FmxValue - (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) % (*series_cursor)(unsafe.Pointer(pCur)).FiStep 19854 } 19855 } else { 19856 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 0 19857 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 19858 } 19859 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 19860 return SQLITE_OK 19861 } 19862 19863 func seriesBestIndex(tls *libc.TLS, pVTab uintptr, pIdxInfo uintptr) int32 { 19864 bp := tls.Alloc(12) 19865 defer tls.Free(12) 19866 19867 var i int32 19868 var j int32 19869 var idxNum int32 = 0 19870 var bStartSeen int32 = 0 19871 var unusableMask int32 = 0 19872 var nArg int32 = 0 19873 19874 var pConstraint uintptr 19875 19876 *(*int32)(unsafe.Pointer(bp)) = libc.AssignPtrInt32(bp+1*4, libc.AssignPtrInt32(bp+2*4, -1)) 19877 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 19878 i = 0 19879 __1: 19880 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 19881 goto __3 19882 } 19883 { 19884 var iCol int32 19885 var iMask int32 19886 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < SERIES_COLUMN_START { 19887 goto __2 19888 } 19889 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn - SERIES_COLUMN_START 19890 19891 iMask = int32(1) << iCol 19892 if iCol == 0 { 19893 bStartSeen = 1 19894 } 19895 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 19896 unusableMask = unusableMask | iMask 19897 goto __2 19898 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 19899 idxNum = idxNum | iMask 19900 *(*int32)(unsafe.Pointer(bp + uintptr(iCol)*4)) = i 19901 } 19902 19903 } 19904 goto __2 19905 __2: 19906 i++ 19907 pConstraint += 12 19908 goto __1 19909 goto __3 19910 __3: 19911 ; 19912 for i = 0; i < 3; i++ { 19913 if libc.AssignInt32(&j, *(*int32)(unsafe.Pointer(bp + uintptr(i)*4))) >= 0 { 19914 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).FargvIndex = libc.PreIncInt32(&nArg, 1) 19915 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).Fomit = libc.BoolUint8(!(1 != 0)) 19916 } 19917 } 19918 19919 if !(bStartSeen != 0) { 19920 sqlite3.Xsqlite3_free(tls, (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg) 19921 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 19922 ts+6914, 0) 19923 return SQLITE_ERROR 19924 } 19925 if unusableMask & ^idxNum != 0 { 19926 return SQLITE_CONSTRAINT 19927 } 19928 if idxNum&3 == 3 { 19929 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2 - libc.Bool32(idxNum&4 != 0)) 19930 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000) 19931 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy >= 1 && (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 0 { 19932 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 19933 idxNum = idxNum | 8 19934 } else { 19935 idxNum = idxNum | 16 19936 } 19937 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 19938 } 19939 } else { 19940 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 19941 } 19942 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 19943 return SQLITE_OK 19944 } 19945 19946 var seriesModule = sqlite3_module{ 19947 FxConnect: 0, 19948 FxBestIndex: 0, 19949 FxDisconnect: 0, 19950 FxOpen: 0, 19951 FxClose: 0, 19952 FxFilter: 0, 19953 FxNext: 0, 19954 FxEof: 0, 19955 FxColumn: 0, 19956 FxRowid: 0, 19957 } 19958 19959 func sqlite3_series_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19960 var rc int32 = SQLITE_OK 19961 _ = pApi 19962 19963 if sqlite3.Xsqlite3_libversion_number(tls) < 3008012 && pzErrMsg != uintptr(0) { 19964 *(*uintptr)(unsafe.Pointer(pzErrMsg)) = sqlite3.Xsqlite3_mprintf(tls, 19965 ts+6972, 0) 19966 return SQLITE_ERROR 19967 } 19968 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+7022, uintptr(unsafe.Pointer(&seriesModule)), uintptr(0)) 19969 return rc 19970 } 19971 19972 type u16 = uint16 19973 19974 var midClass = [128]uint8{ 19975 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19976 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19977 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19978 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19979 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 19980 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19981 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19982 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19983 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19984 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19985 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 19986 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19987 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19988 uint8(CCLASS_SILENT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19989 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19990 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19991 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19992 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19993 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 19994 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19995 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 19996 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 19997 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 19998 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 19999 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 20000 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 20001 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 20002 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 20003 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 20004 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_VOWEL), 20005 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20006 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20007 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 20008 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 20009 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 20010 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 20011 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 20012 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 20013 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 20014 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 20015 uint8(CCLASS_C), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 20016 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20017 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20018 } 20019 20020 var initClass = [128]uint8{ 20021 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20022 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20023 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20024 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20025 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 20026 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20027 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20028 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20029 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20030 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20031 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 20032 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20033 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20034 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20035 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20036 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20037 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 20038 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 20039 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 20040 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20041 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20042 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 20043 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 20044 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 20045 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 20046 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 20047 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 20048 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 20049 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 20050 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_Y), 20051 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20052 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20053 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 20054 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 20055 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 20056 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 20057 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 20058 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 20059 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 20060 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 20061 uint8(CCLASS_C), uint8(CCLASS_Y), uint8(CCLASS_C), 20062 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20063 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 20064 } 20065 20066 var className = *(*[14]uint8)(unsafe.Pointer(ts + 7038)) 20067 20068 func phoneticHash(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 20069 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+1)) 20070 var i int32 20071 var nOut int32 = 0 20072 var cPrev uint8 = uint8(0x77) 20073 var cPrevX uint8 = uint8(0x77) 20074 var aClass uintptr = uintptr(unsafe.Pointer(&initClass)) 20075 20076 if zOut == uintptr(0) { 20077 return uintptr(0) 20078 } 20079 if nIn > 2 { 20080 switch int32(*(*uint8)(unsafe.Pointer(zIn))) { 20081 case 'g': 20082 fallthrough 20083 case 'k': 20084 { 20085 if int32(*(*uint8)(unsafe.Pointer(zIn + 1))) == 'n' { 20086 zIn++ 20087 nIn-- 20088 } 20089 break 20090 20091 } 20092 } 20093 } 20094 for i = 0; i < nIn; i++ { 20095 var c uint8 = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 20096 if i+1 < nIn { 20097 if int32(c) == 'w' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'r' { 20098 continue 20099 } 20100 if int32(c) == 'd' && (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'j' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'g') { 20101 continue 20102 } 20103 if i+2 < nIn { 20104 if int32(c) == 't' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'c' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+2)))) == 'h' { 20105 continue 20106 } 20107 } 20108 } 20109 c = *(*uint8)(unsafe.Pointer(aClass + uintptr(int32(c)&0x7f))) 20110 if int32(c) == CCLASS_SPACE { 20111 continue 20112 } 20113 if int32(c) == CCLASS_OTHER && int32(cPrev) != CCLASS_DIGIT { 20114 continue 20115 } 20116 aClass = uintptr(unsafe.Pointer(&midClass)) 20117 if int32(c) == CCLASS_VOWEL && (int32(cPrevX) == CCLASS_R || int32(cPrevX) == CCLASS_L) { 20118 continue 20119 } 20120 if (int32(c) == CCLASS_R || int32(c) == CCLASS_L) && int32(cPrevX) == CCLASS_VOWEL { 20121 nOut-- 20122 } 20123 cPrev = c 20124 if int32(c) == CCLASS_SILENT { 20125 continue 20126 } 20127 cPrevX = c 20128 c = className[c] 20129 20130 if nOut == 0 || int32(c) != int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(nOut-1)))) { 20131 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = c 20132 } 20133 } 20134 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 20135 return zOut 20136 } 20137 20138 func phoneticHashSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20139 var zIn uintptr 20140 var zOut uintptr 20141 20142 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 20143 if zIn == uintptr(0) { 20144 return 20145 } 20146 zOut = phoneticHash(tls, zIn, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 20147 if zOut == uintptr(0) { 20148 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20149 } else { 20150 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 20151 } 20152 } 20153 20154 func characterClass(tls *libc.TLS, cPrev uint8, c uint8) uint8 { 20155 if int32(cPrev) == 0 { 20156 return initClass[int32(c)&0x7f] 20157 } 20158 return midClass[int32(c)&0x7f] 20159 } 20160 20161 func insertOrDeleteCost(tls *libc.TLS, cPrev uint8, c uint8, cNext uint8) int32 { 20162 var classC uint8 = characterClass(tls, cPrev, c) 20163 var classCprev uint8 20164 20165 if int32(classC) == CCLASS_SILENT { 20166 return 1 20167 } 20168 if int32(cPrev) == int32(c) { 20169 return 10 20170 } 20171 if int32(classC) == CCLASS_VOWEL && (int32(cPrev) == 'r' || int32(cNext) == 'r') { 20172 return 20 20173 } 20174 classCprev = characterClass(tls, cPrev, cPrev) 20175 if int32(classC) == int32(classCprev) { 20176 if int32(classC) == CCLASS_VOWEL { 20177 return 15 20178 } else { 20179 return 50 20180 } 20181 } 20182 20183 return 100 20184 } 20185 20186 func substituteCost(tls *libc.TLS, cPrev uint8, cFrom uint8, cTo uint8) int32 { 20187 var classFrom uint8 20188 var classTo uint8 20189 if int32(cFrom) == int32(cTo) { 20190 return 0 20191 } 20192 if int32(cFrom) == int32(cTo)^0x20 && (int32(cTo) >= 'A' && int32(cTo) <= 'Z' || int32(cTo) >= 'a' && int32(cTo) <= 'z') { 20193 return 0 20194 } 20195 classFrom = characterClass(tls, cPrev, cFrom) 20196 classTo = characterClass(tls, cPrev, cTo) 20197 if int32(classFrom) == int32(classTo) { 20198 return 40 20199 } 20200 if int32(classFrom) >= CCLASS_B && int32(classFrom) <= CCLASS_Y && 20201 int32(classTo) >= CCLASS_B && int32(classTo) <= CCLASS_Y { 20202 return 75 20203 } 20204 20205 return 100 20206 } 20207 20208 func editdist1(tls *libc.TLS, zA uintptr, zB uintptr, pnMatch uintptr) int32 { 20209 bp := tls.Alloc(300) 20210 defer tls.Free(300) 20211 20212 var nA int32 20213 var nB int32 20214 var xA int32 20215 var xB int32 20216 var cA uint8 = uint8(0) 20217 var cB uint8 20218 var cAprev uint8 20219 var cBprev uint8 20220 var cAnext uint8 20221 var cBnext uint8 20222 var d int32 20223 var dc int32 = 0 20224 var res int32 20225 var m uintptr 20226 var cx uintptr 20227 var toFree uintptr = uintptr(0) 20228 var nMatch int32 = 0 20229 20230 if zA == uintptr(0) || zB == uintptr(0) { 20231 return -1 20232 } 20233 20234 for *(*uint8)(unsafe.Pointer(zA)) != 0 && int32(*(*uint8)(unsafe.Pointer(zA))) == int32(*(*uint8)(unsafe.Pointer(zB))) { 20235 dc = int32(*(*uint8)(unsafe.Pointer(zA))) 20236 zA++ 20237 zB++ 20238 nMatch++ 20239 } 20240 if pnMatch != 0 { 20241 *(*int32)(unsafe.Pointer(pnMatch)) = nMatch 20242 } 20243 if int32(*(*uint8)(unsafe.Pointer(zA))) == 0 && int32(*(*uint8)(unsafe.Pointer(zB))) == 0 { 20244 return 0 20245 } 20246 20247 for nA = 0; *(*uint8)(unsafe.Pointer(zA + uintptr(nA))) != 0; nA++ { 20248 if int32(*(*uint8)(unsafe.Pointer(zA + uintptr(nA))))&0x80 != 0 { 20249 return -2 20250 } 20251 } 20252 for nB = 0; *(*uint8)(unsafe.Pointer(zB + uintptr(nB))) != 0; nB++ { 20253 if int32(*(*uint8)(unsafe.Pointer(zB + uintptr(nB))))&0x80 != 0 { 20254 return -2 20255 } 20256 } 20257 20258 if nA == 0 { 20259 cBprev = uint8(dc) 20260 for xB = libc.AssignInt32(&res, 0); int32(libc.AssignUint8(&cB, *(*uint8)(unsafe.Pointer(zB + uintptr(xB))))) != 0; xB++ { 20261 res = res + insertOrDeleteCost(tls, cBprev, cB, *(*uint8)(unsafe.Pointer(zB + uintptr(xB+1))))/FINAL_INS_COST_DIV 20262 cBprev = cB 20263 } 20264 return res 20265 } 20266 if nB == 0 { 20267 cAprev = uint8(dc) 20268 for xA = libc.AssignInt32(&res, 0); int32(libc.AssignUint8(&cA, *(*uint8)(unsafe.Pointer(zA + uintptr(xA))))) != 0; xA++ { 20269 res = res + insertOrDeleteCost(tls, cAprev, cA, *(*uint8)(unsafe.Pointer(zA + uintptr(xA+1)))) 20270 cAprev = cA 20271 } 20272 return res 20273 } 20274 20275 if int32(*(*uint8)(unsafe.Pointer(zA))) == '*' && int32(*(*uint8)(unsafe.Pointer(zA + 1))) == 0 { 20276 return 0 20277 } 20278 20279 if uint64(nB) < uint64(unsafe.Sizeof([75]int32{}))*uint64(4)/(uint64(unsafe.Sizeof(int32(0)))*uint64(5)) { 20280 m = bp 20281 } else { 20282 m = libc.AssignUintptr(&toFree, sqlite3.Xsqlite3_malloc64(tls, uint64((nB+1)*5)*uint64(unsafe.Sizeof(int32(0)))/uint64(4))) 20283 if m == uintptr(0) { 20284 return -3 20285 } 20286 } 20287 cx = m + uintptr(nB+1)*4 20288 20289 *(*int32)(unsafe.Pointer(m)) = 0 20290 *(*uint8)(unsafe.Pointer(cx)) = uint8(dc) 20291 cBprev = uint8(dc) 20292 for xB = 1; xB <= nB; xB++ { 20293 cBnext = *(*uint8)(unsafe.Pointer(zB + uintptr(xB))) 20294 cB = *(*uint8)(unsafe.Pointer(zB + uintptr(xB-1))) 20295 *(*uint8)(unsafe.Pointer(cx + uintptr(xB))) = cB 20296 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) + insertOrDeleteCost(tls, cBprev, cB, cBnext) 20297 cBprev = cB 20298 } 20299 cAprev = uint8(dc) 20300 for xA = 1; xA <= nA; xA++ { 20301 var lastA int32 = libc.Bool32(xA == nA) 20302 cA = *(*uint8)(unsafe.Pointer(zA + uintptr(xA-1))) 20303 cAnext = *(*uint8)(unsafe.Pointer(zA + uintptr(xA))) 20304 if int32(cA) == '*' && lastA != 0 { 20305 break 20306 } 20307 d = *(*int32)(unsafe.Pointer(m)) 20308 dc = int32(*(*uint8)(unsafe.Pointer(cx))) 20309 *(*int32)(unsafe.Pointer(m)) = d + insertOrDeleteCost(tls, cAprev, cA, cAnext) 20310 cBprev = uint8(0) 20311 for xB = 1; xB <= nB; xB++ { 20312 var totalCost int32 20313 var insCost int32 20314 var delCost int32 20315 var subCost int32 20316 var ncx int32 20317 cB = *(*uint8)(unsafe.Pointer(zB + uintptr(xB-1))) 20318 cBnext = *(*uint8)(unsafe.Pointer(zB + uintptr(xB))) 20319 20320 insCost = insertOrDeleteCost(tls, *(*uint8)(unsafe.Pointer(cx + uintptr(xB-1))), cB, cBnext) 20321 if lastA != 0 { 20322 insCost = insCost / FINAL_INS_COST_DIV 20323 } 20324 20325 delCost = insertOrDeleteCost(tls, *(*uint8)(unsafe.Pointer(cx + uintptr(xB))), cA, cBnext) 20326 20327 subCost = substituteCost(tls, *(*uint8)(unsafe.Pointer(cx + uintptr(xB-1))), cA, cB) 20328 20329 totalCost = insCost + *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) 20330 ncx = int32(cB) 20331 if delCost+*(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < totalCost { 20332 totalCost = delCost + *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 20333 ncx = int32(cA) 20334 } 20335 if subCost+d < totalCost { 20336 totalCost = subCost + d 20337 } 20338 20339 d = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 20340 dc = int32(*(*uint8)(unsafe.Pointer(cx + uintptr(xB)))) 20341 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = totalCost 20342 *(*uint8)(unsafe.Pointer(cx + uintptr(xB))) = uint8(ncx) 20343 cBprev = cB 20344 } 20345 cAprev = cA 20346 } 20347 20348 if int32(cA) == '*' { 20349 res = *(*int32)(unsafe.Pointer(m + 1*4)) 20350 for xB = 1; xB <= nB; xB++ { 20351 if *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < res { 20352 res = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 20353 if pnMatch != 0 { 20354 *(*int32)(unsafe.Pointer(pnMatch)) = xB + nMatch 20355 } 20356 } 20357 } 20358 } else { 20359 res = *(*int32)(unsafe.Pointer(m + uintptr(nB)*4)) 20360 20361 } 20362 sqlite3.Xsqlite3_free(tls, toFree) 20363 return res 20364 } 20365 20366 func editdistSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 20367 var res int32 = editdist1(tls, 20368 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 20369 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), 20370 uintptr(0)) 20371 if res < 0 { 20372 if res == -3 { 20373 sqlite3.Xsqlite3_result_error_nomem(tls, context) 20374 } else if res == -2 { 20375 sqlite3.Xsqlite3_result_error(tls, context, ts+7052, -1) 20376 } else { 20377 sqlite3.Xsqlite3_result_error(tls, context, ts+7082, -1) 20378 } 20379 } else { 20380 sqlite3.Xsqlite3_result_int(tls, context, res) 20381 } 20382 } 20383 20384 type EditDist3Cost1 = struct { 20385 FpNext uintptr 20386 FnFrom u8 20387 FnTo u8 20388 FiCost u16 20389 Fa [4]uint8 20390 } 20391 20392 type EditDist3Cost = EditDist3Cost1 20393 type EditDist3Config1 = struct { 20394 FnLang int32 20395 F__ccgo_pad1 [4]byte 20396 Fa uintptr 20397 } 20398 20399 type EditDist3Config = EditDist3Config1 20400 type EditDist3From1 = struct { 20401 FnSubst int32 20402 FnDel int32 20403 FnByte int32 20404 F__ccgo_pad1 [4]byte 20405 FapSubst uintptr 20406 FapDel uintptr 20407 } 20408 20409 type EditDist3From = EditDist3From1 20410 type EditDist3FromString1 = struct { 20411 Fz uintptr 20412 Fn int32 20413 FisPrefix int32 20414 Fa uintptr 20415 } 20416 20417 type EditDist3FromString = EditDist3FromString1 20418 type EditDist3To1 = struct { 20419 FnIns int32 20420 FnByte int32 20421 FapIns uintptr 20422 } 20423 20424 type EditDist3To = EditDist3To1 20425 type EditDist3ToString1 = struct { 20426 Fz uintptr 20427 Fn int32 20428 F__ccgo_pad1 [4]byte 20429 Fa uintptr 20430 } 20431 20432 type EditDist3ToString = EditDist3ToString1 20433 type EditDist3Lang1 = struct { 20434 FiLang int32 20435 FiInsCost int32 20436 FiDelCost int32 20437 FiSubCost int32 20438 FpCost uintptr 20439 } 20440 20441 type EditDist3Lang = EditDist3Lang1 20442 20443 var editDist3Lang = EditDist3Lang{FiInsCost: 100, FiDelCost: 100, FiSubCost: 150} 20444 20445 func editDist3ConfigClear(tls *libc.TLS, p uintptr) { 20446 var i int32 20447 if p == uintptr(0) { 20448 return 20449 } 20450 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; i++ { 20451 var pCost uintptr 20452 var pNext uintptr 20453 pCost = (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(i)*24)).FpCost 20454 for pCost != 0 { 20455 pNext = (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext 20456 sqlite3.Xsqlite3_free(tls, pCost) 20457 pCost = pNext 20458 } 20459 } 20460 sqlite3.Xsqlite3_free(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa) 20461 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 20462 } 20463 20464 func editDist3ConfigDelete(tls *libc.TLS, pIn uintptr) { 20465 var p uintptr = pIn 20466 editDist3ConfigClear(tls, p) 20467 sqlite3.Xsqlite3_free(tls, p) 20468 } 20469 20470 func editDist3CostCompare(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 20471 var n int32 = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) 20472 var rc int32 20473 if n > int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) { 20474 n = int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 20475 } 20476 rc = libc.Xstrncmp(tls, pA+12, pB+12, uint64(n)) 20477 if rc == 0 { 20478 rc = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) - int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 20479 } 20480 return rc 20481 } 20482 20483 func editDist3CostMerge(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 20484 bp := tls.Alloc(8) 20485 defer tls.Free(8) 20486 20487 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 20488 var ppTail uintptr = bp 20489 var p uintptr 20490 for pA != 0 && pB != 0 { 20491 if editDist3CostCompare(tls, pA, pB) <= 0 { 20492 p = pA 20493 pA = (*EditDist3Cost)(unsafe.Pointer(pA)).FpNext 20494 } else { 20495 p = pB 20496 pB = (*EditDist3Cost)(unsafe.Pointer(pB)).FpNext 20497 } 20498 *(*uintptr)(unsafe.Pointer(ppTail)) = p 20499 ppTail = p 20500 } 20501 if pA != 0 { 20502 *(*uintptr)(unsafe.Pointer(ppTail)) = pA 20503 } else { 20504 *(*uintptr)(unsafe.Pointer(ppTail)) = pB 20505 } 20506 return *(*uintptr)(unsafe.Pointer(bp)) 20507 } 20508 20509 func editDist3CostSort(tls *libc.TLS, pList uintptr) uintptr { 20510 bp := tls.Alloc(480) 20511 defer tls.Free(480) 20512 20513 var p uintptr 20514 var i int32 20515 var mx int32 = 0 20516 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 20517 *(*uintptr)(unsafe.Pointer(bp + 1*8)) = uintptr(0) 20518 for pList != 0 { 20519 p = pList 20520 pList = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 20521 (*EditDist3Cost)(unsafe.Pointer(p)).FpNext = uintptr(0) 20522 for i = 0; *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0; i++ { 20523 p = editDist3CostMerge(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)), p) 20524 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = uintptr(0) 20525 } 20526 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = p 20527 if i > mx { 20528 mx = i 20529 *(*uintptr)(unsafe.Pointer(bp + uintptr(i+1)*8)) = uintptr(0) 20530 } 20531 } 20532 p = uintptr(0) 20533 for i = 0; i <= mx; i++ { 20534 if *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0 { 20535 p = editDist3CostMerge(tls, p, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8))) 20536 } 20537 } 20538 return p 20539 } 20540 20541 func editDist3ConfigLoad(tls *libc.TLS, p uintptr, db uintptr, zTable uintptr) int32 { 20542 bp := tls.Alloc(16) 20543 defer tls.Free(16) 20544 20545 var rc int32 20546 var rc2 int32 20547 var zSql uintptr 20548 var iLangPrev int32 = -9999 20549 var pLang uintptr = uintptr(0) 20550 20551 zSql = sqlite3.Xsqlite3_mprintf(tls, 20552 ts+7107, libc.VaList(bp, zTable)) 20553 if zSql == uintptr(0) { 20554 return SQLITE_NOMEM 20555 } 20556 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+8, uintptr(0)) 20557 sqlite3.Xsqlite3_free(tls, zSql) 20558 if rc != 0 { 20559 return rc 20560 } 20561 editDist3ConfigClear(tls, p) 20562 for sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) == SQLITE_ROW { 20563 var iLang int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0) 20564 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 20565 var nFrom int32 20566 if zFrom != 0 { 20567 nFrom = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 20568 } else { 20569 nFrom = 0 20570 } 20571 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 20572 var nTo int32 20573 if zTo != 0 { 20574 nTo = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 20575 } else { 20576 nTo = 0 20577 } 20578 var iCost int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 3) 20579 20580 if nFrom > 100 || nTo > 100 { 20581 continue 20582 } 20583 if iCost < 0 { 20584 continue 20585 } 20586 if iCost >= 10000 { 20587 continue 20588 } 20589 if pLang == uintptr(0) || iLang != iLangPrev { 20590 var pNew uintptr 20591 pNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa, uint64((*EditDist3Config)(unsafe.Pointer(p)).FnLang+1)*uint64(unsafe.Sizeof(EditDist3Lang{}))) 20592 if pNew == uintptr(0) { 20593 rc = SQLITE_NOMEM 20594 break 20595 } 20596 (*EditDist3Config)(unsafe.Pointer(p)).Fa = pNew 20597 pLang = (*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr((*EditDist3Config)(unsafe.Pointer(p)).FnLang)*24 20598 (*EditDist3Config)(unsafe.Pointer(p)).FnLang++ 20599 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiLang = iLang 20600 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = 100 20601 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = 100 20602 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = 150 20603 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = uintptr(0) 20604 iLangPrev = iLang 20605 } 20606 if nFrom == 1 && int32(*(*uint8)(unsafe.Pointer(zFrom))) == '?' && nTo == 0 { 20607 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = iCost 20608 } else if nFrom == 0 && nTo == 1 && int32(*(*uint8)(unsafe.Pointer(zTo))) == '?' { 20609 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = iCost 20610 } else if nFrom == 1 && nTo == 1 && int32(*(*uint8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*uint8)(unsafe.Pointer(zTo))) == '?' { 20611 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = iCost 20612 } else { 20613 var pCost uintptr 20614 var nExtra int32 = nFrom + nTo - 4 20615 if nExtra < 0 { 20616 nExtra = 0 20617 } 20618 pCost = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Cost{}))+uint64(nExtra)) 20619 if pCost == uintptr(0) { 20620 rc = SQLITE_NOMEM 20621 break 20622 } 20623 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnFrom = u8(nFrom) 20624 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnTo = u8(nTo) 20625 (*EditDist3Cost)(unsafe.Pointer(pCost)).FiCost = u16(iCost) 20626 libc.Xmemcpy(tls, pCost+12, zFrom, uint64(nFrom)) 20627 libc.Xmemcpy(tls, pCost+12+uintptr(nFrom), zTo, uint64(nTo)) 20628 (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 20629 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = pCost 20630 } 20631 } 20632 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 20633 if rc == SQLITE_OK { 20634 rc = rc2 20635 } 20636 if rc == SQLITE_OK { 20637 var iLang int32 20638 for iLang = 0; iLang < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; iLang++ { 20639 (*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) 20640 } 20641 } 20642 return rc 20643 } 20644 20645 func utf8Len(tls *libc.TLS, c uint8, N int32) int32 { 20646 var len int32 = 1 20647 if int32(c) > 0x7f { 20648 if int32(c)&0xe0 == 0xc0 { 20649 len = 2 20650 } else if int32(c)&0xf0 == 0xe0 { 20651 len = 3 20652 } else { 20653 len = 4 20654 } 20655 } 20656 if len > N { 20657 len = N 20658 } 20659 return len 20660 } 20661 20662 func matchTo(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 20663 if int32(*(*uint8)(unsafe.Pointer(p + 12 + uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)))) != int32(*(*uint8)(unsafe.Pointer(z))) { 20664 return 0 20665 } 20666 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n { 20667 return 0 20668 } 20669 if libc.Xstrncmp(tls, p+12+uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)) != 0 { 20670 return 0 20671 } 20672 return 1 20673 } 20674 20675 func matchFrom(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 20676 if (*EditDist3Cost)(unsafe.Pointer(p)).FnFrom != 0 { 20677 if int32(*(*uint8)(unsafe.Pointer(p + 12))) != int32(*(*uint8)(unsafe.Pointer(z))) { 20678 return 0 20679 } 20680 if libc.Xstrncmp(tls, p+12, z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)) != 0 { 20681 return 0 20682 } 20683 } 20684 return 1 20685 } 20686 20687 func matchFromTo(tls *libc.TLS, pStr uintptr, n1 int32, z2 uintptr, n2 int32) int32 { 20688 var b1 int32 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n1)*32)).FnByte 20689 if b1 > n2 { 20690 return 0 20691 } 20692 20693 if int32(*(*uint8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n1)))) != int32(*(*uint8)(unsafe.Pointer(z2))) { 20694 return 0 20695 } 20696 if libc.Xstrncmp(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz+uintptr(n1), z2, uint64(b1)) != 0 { 20697 return 0 20698 } 20699 return 1 20700 } 20701 20702 func editDist3FromStringDelete(tls *libc.TLS, p uintptr) { 20703 var i int32 20704 if p != 0 { 20705 for i = 0; i < (*EditDist3FromString)(unsafe.Pointer(p)).Fn; i++ { 20706 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapDel) 20707 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapSubst) 20708 } 20709 sqlite3.Xsqlite3_free(tls, p) 20710 } 20711 } 20712 20713 func editDist3FromStringNew(tls *libc.TLS, pLang uintptr, z uintptr, n int32) uintptr { 20714 var pStr uintptr 20715 var p uintptr 20716 var i int32 20717 20718 if z == uintptr(0) { 20719 return uintptr(0) 20720 } 20721 if n < 0 { 20722 n = int32(libc.Xstrlen(tls, z)) 20723 } 20724 pStr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3FromString{}))+uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)+uint64(n)+uint64(1)) 20725 if pStr == uintptr(0) { 20726 return uintptr(0) 20727 } 20728 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa = pStr + 1*24 20729 libc.Xmemset(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa, 0, uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)) 20730 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn = n 20731 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n)*32 20732 libc.Xmemcpy(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz, z, uint64(n+1)) 20733 if n != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(n-1)))) == '*' { 20734 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 1 20735 n-- 20736 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn-- 20737 *(*uint8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n))) = uint8(0) 20738 } else { 20739 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 0 20740 } 20741 20742 for i = 0; i < n; i++ { 20743 var pFrom uintptr = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(i)*32 20744 libc.Xmemset(tls, pFrom, 0, uint64(unsafe.Sizeof(EditDist3From{}))) 20745 (*EditDist3From)(unsafe.Pointer(pFrom)).FnByte = utf8Len(tls, *(*uint8)(unsafe.Pointer(z + uintptr(i))), n-i) 20746 for p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost; p != 0; p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext { 20747 var apNew uintptr 20748 if i+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > n { 20749 continue 20750 } 20751 if matchFrom(tls, p, z+uintptr(i), n-i) == 0 { 20752 continue 20753 } 20754 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) == 0 { 20755 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel, 20756 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnDel+1)) 20757 if apNew == uintptr(0) { 20758 break 20759 } 20760 (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel = apNew 20761 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnDel, 1))*8)) = p 20762 } else { 20763 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst, 20764 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst+1)) 20765 if apNew == uintptr(0) { 20766 break 20767 } 20768 (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst = apNew 20769 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst, 1))*8)) = p 20770 } 20771 } 20772 if p != 0 { 20773 editDist3FromStringDelete(tls, pStr) 20774 pStr = uintptr(0) 20775 break 20776 } 20777 } 20778 return pStr 20779 } 20780 20781 func updateCost(tls *libc.TLS, m uintptr, i int32, j int32, iCost int32) { 20782 var b uint32 20783 20784 b = *(*uint32)(unsafe.Pointer(m + uintptr(j)*4)) + uint32(iCost) 20785 if b < *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) { 20786 *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) = b 20787 } 20788 } 20789 20790 func editDist3Core(tls *libc.TLS, pFrom uintptr, z2 uintptr, n2 int32, pLang uintptr, pnMatch uintptr) int32 { 20791 bp := tls.Alloc(1048) 20792 defer tls.Free(1048) 20793 20794 var k int32 20795 var n int32 20796 var i1 int32 20797 var b1 int32 20798 var i2 int32 20799 var b2 int32 20800 20801 var a2 uintptr 20802 var m uintptr 20803 var pToFree uintptr 20804 var szRow int32 20805 var p uintptr 20806 var res int32 20807 var nByte sqlite3_uint64 20808 20809 var apNew uintptr 20810 var cx int32 20811 var cxp int32 20812 var cxd int32 20813 var cxu int32 20814 var rx int32 20815 var rxp int32 20816 var b int32 20817 var nExtra int32 20818 *(*EditDist3FromString)(unsafe.Pointer(bp + 1024)) = *(*EditDist3FromString)(unsafe.Pointer(pFrom)) 20819 20820 n = ((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1) * (n2 + 1) 20821 n = (n + 1) & libc.CplInt32(1) 20822 nByte = uint64(n)*uint64(unsafe.Sizeof(uint32(0))) + uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2) 20823 if !(nByte <= sqlite3_uint64(unsafe.Sizeof([256]uint32{}))) { 20824 goto __1 20825 } 20826 m = bp 20827 pToFree = uintptr(0) 20828 goto __2 20829 __1: 20830 m = libc.AssignUintptr(&pToFree, sqlite3.Xsqlite3_malloc64(tls, nByte)) 20831 if !(m == uintptr(0)) { 20832 goto __3 20833 } 20834 return -1 20835 __3: 20836 ; 20837 __2: 20838 ; 20839 a2 = m + uintptr(n)*4 20840 libc.Xmemset(tls, a2, 0, uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2)) 20841 20842 i2 = 0 20843 __4: 20844 if !(i2 < n2) { 20845 goto __6 20846 } 20847 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte = utf8Len(tls, *(*uint8)(unsafe.Pointer(z2 + uintptr(i2))), n2-i2) 20848 p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 20849 __7: 20850 if !(p != 0) { 20851 goto __9 20852 } 20853 if !(int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > 0) { 20854 goto __10 20855 } 20856 goto __9 20857 __10: 20858 ; 20859 if !(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n2) { 20860 goto __11 20861 } 20862 goto __8 20863 __11: 20864 ; 20865 if !(int32(*(*uint8)(unsafe.Pointer(p + 12))) > int32(*(*uint8)(unsafe.Pointer(z2 + uintptr(i2))))) { 20866 goto __12 20867 } 20868 goto __9 20869 __12: 20870 ; 20871 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) == 0) { 20872 goto __13 20873 } 20874 goto __8 20875 __13: 20876 ; 20877 (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns++ 20878 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)) 20879 if !(apNew == uintptr(0)) { 20880 goto __14 20881 } 20882 res = -1 20883 goto editDist3Abort 20884 __14: 20885 ; 20886 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FapIns = apNew 20887 *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns-1)*8)) = p 20888 goto __8 20889 __8: 20890 p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 20891 goto __7 20892 goto __9 20893 __9: 20894 ; 20895 goto __5 20896 __5: 20897 i2++ 20898 goto __4 20899 goto __6 20900 __6: 20901 ; 20902 szRow = (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1 20903 libc.Xmemset(tls, m, 0x01, uint64((n2+1)*szRow)*uint64(unsafe.Sizeof(uint32(0)))) 20904 *(*uint32)(unsafe.Pointer(m)) = uint32(0) 20905 20906 i1 = 0 20907 __15: 20908 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 20909 goto __17 20910 } 20911 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 20912 updateCost(tls, m, i1+b1, i1, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 20913 k = 0 20914 __18: 20915 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 20916 goto __20 20917 } 20918 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 20919 updateCost(tls, m, i1+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), i1, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20920 goto __19 20921 __19: 20922 k++ 20923 goto __18 20924 goto __20 20925 __20: 20926 ; 20927 goto __16 20928 __16: 20929 i1 = i1 + b1 20930 goto __15 20931 goto __17 20932 __17: 20933 ; 20934 i2 = 0 20935 __21: 20936 if !(i2 < n2) { 20937 goto __23 20938 } 20939 b2 = (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte 20940 rx = szRow * (i2 + b2) 20941 rxp = szRow * i2 20942 updateCost(tls, m, rx, rxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20943 k = 0 20944 __24: 20945 if !(k < (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns) { 20946 goto __26 20947 } 20948 p = *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr(k)*8)) 20949 updateCost(tls, m, szRow*(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)), rxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20950 goto __25 20951 __25: 20952 k++ 20953 goto __24 20954 goto __26 20955 __26: 20956 ; 20957 i1 = 0 20958 __27: 20959 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 20960 goto __29 20961 } 20962 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 20963 cxp = rx + i1 20964 cx = cxp + b1 20965 cxd = rxp + i1 20966 cxu = cxd + b1 20967 updateCost(tls, m, cx, cxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 20968 k = 0 20969 __30: 20970 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 20971 goto __32 20972 } 20973 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 20974 updateCost(tls, m, cxp+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), cxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 20975 goto __31 20976 __31: 20977 k++ 20978 goto __30 20979 goto __32 20980 __32: 20981 ; 20982 updateCost(tls, m, cx, cxu, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 20983 if !(matchFromTo(tls, bp+1024, i1, z2+uintptr(i2), n2-i2) != 0) { 20984 goto __33 20985 } 20986 updateCost(tls, m, cx, cxd, 0) 20987 __33: 20988 ; 20989 updateCost(tls, m, cx, cxd, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost) 20990 k = 0 20991 __34: 20992 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnSubst) { 20993 goto __36 20994 } 20995 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapSubst + uintptr(k)*8)) 20996 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) != 0) { 20997 goto __37 20998 } 20999 updateCost(tls, m, cxd+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)+szRow*int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo), cxd, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 21000 __37: 21001 ; 21002 goto __35 21003 __35: 21004 k++ 21005 goto __34 21006 goto __36 21007 __36: 21008 ; 21009 goto __28 21010 __28: 21011 i1 = i1 + b1 21012 goto __27 21013 goto __29 21014 __29: 21015 ; 21016 goto __22 21017 __22: 21018 i2 = i2 + b2 21019 goto __21 21020 goto __23 21021 __23: 21022 ; 21023 res = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*(n2+1)-1)*4))) 21024 n = n2 21025 if !((*EditDist3FromString)(unsafe.Pointer(bp+1024)).FisPrefix != 0) { 21026 goto __38 21027 } 21028 i2 = 1 21029 __39: 21030 if !(i2 <= n2) { 21031 goto __41 21032 } 21033 b = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*i2-1)*4))) 21034 if !(b <= res) { 21035 goto __42 21036 } 21037 res = b 21038 n = i2 - 1 21039 __42: 21040 ; 21041 goto __40 21042 __40: 21043 i2++ 21044 goto __39 21045 goto __41 21046 __41: 21047 ; 21048 __38: 21049 ; 21050 if !(pnMatch != 0) { 21051 goto __43 21052 } 21053 nExtra = 0 21054 k = 0 21055 __44: 21056 if !(k < n) { 21057 goto __46 21058 } 21059 if !(int32(*(*uint8)(unsafe.Pointer(z2 + uintptr(k))))&0xc0 == 0x80) { 21060 goto __47 21061 } 21062 nExtra++ 21063 __47: 21064 ; 21065 goto __45 21066 __45: 21067 k++ 21068 goto __44 21069 goto __46 21070 __46: 21071 ; 21072 *(*int32)(unsafe.Pointer(pnMatch)) = n - nExtra 21073 __43: 21074 ; 21075 editDist3Abort: 21076 i2 = 0 21077 __48: 21078 if !(i2 < n2) { 21079 goto __50 21080 } 21081 sqlite3.Xsqlite3_free(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns) 21082 goto __49 21083 __49: 21084 i2++ 21085 goto __48 21086 goto __50 21087 __50: 21088 ; 21089 sqlite3.Xsqlite3_free(tls, pToFree) 21090 return res 21091 } 21092 21093 func editDist3FindLang(tls *libc.TLS, pConfig uintptr, iLang int32) uintptr { 21094 var i int32 21095 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(pConfig)).FnLang; i++ { 21096 if (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(pConfig)).Fa+uintptr(i)*24)).FiLang == iLang { 21097 return (*EditDist3Config)(unsafe.Pointer(pConfig)).Fa + uintptr(i)*24 21098 } 21099 } 21100 return uintptr(unsafe.Pointer(&editDist3Lang)) 21101 } 21102 21103 func editDist3SqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21104 var pConfig uintptr = sqlite3.Xsqlite3_user_data(tls, context) 21105 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 21106 var rc int32 21107 if argc == 1 { 21108 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21109 rc = editDist3ConfigLoad(tls, pConfig, db, zTable) 21110 if rc != 0 { 21111 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 21112 } 21113 } else { 21114 var zA uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21115 var zB uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 21116 var nA int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21117 var nB int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 21118 var iLang int32 21119 if argc == 3 { 21120 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 21121 } else { 21122 iLang = 0 21123 } 21124 var pLang uintptr = editDist3FindLang(tls, pConfig, iLang) 21125 var pFrom uintptr 21126 var dist int32 21127 21128 pFrom = editDist3FromStringNew(tls, pLang, zA, nA) 21129 if pFrom == uintptr(0) { 21130 sqlite3.Xsqlite3_result_error_nomem(tls, context) 21131 return 21132 } 21133 dist = editDist3Core(tls, pFrom, zB, nB, pLang, uintptr(0)) 21134 editDist3FromStringDelete(tls, pFrom) 21135 if dist == -1 { 21136 sqlite3.Xsqlite3_result_error_nomem(tls, context) 21137 } else { 21138 sqlite3.Xsqlite3_result_int(tls, context, dist) 21139 } 21140 } 21141 } 21142 21143 func editDist3Install(tls *libc.TLS, db uintptr) int32 { 21144 var rc int32 21145 var pConfig uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 21146 if pConfig == uintptr(0) { 21147 return SQLITE_NOMEM 21148 } 21149 libc.Xmemset(tls, pConfig, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 21150 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 21151 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 21152 *(*uintptr)(unsafe.Pointer(&struct { 21153 f func(*libc.TLS, uintptr, int32, uintptr) 21154 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 21155 if rc == SQLITE_OK { 21156 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 21157 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 21158 *(*uintptr)(unsafe.Pointer(&struct { 21159 f func(*libc.TLS, uintptr, int32, uintptr) 21160 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 21161 } 21162 if rc == SQLITE_OK { 21163 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 21164 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 21165 *(*uintptr)(unsafe.Pointer(&struct { 21166 f func(*libc.TLS, uintptr, int32, uintptr) 21167 }{editDist3SqlFunc})), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{editDist3ConfigDelete}))) 21168 } else { 21169 sqlite3.Xsqlite3_free(tls, pConfig) 21170 } 21171 return rc 21172 } 21173 21174 var sqlite3Utf8Trans1 = [64]uint8{ 21175 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 21176 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 21177 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 21178 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 21179 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 21180 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 21181 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 21182 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 21183 } 21184 21185 func utf8Read(tls *libc.TLS, z uintptr, n int32, pSize uintptr) int32 { 21186 var c int32 21187 var i int32 21188 21189 if 0 != 0 { 21190 c = libc.AssignInt32(&i, 0) 21191 } else { 21192 c = int32(*(*uint8)(unsafe.Pointer(z))) 21193 i = 1 21194 if c >= 0xc0 { 21195 c = int32(sqlite3Utf8Trans1[c-0xc0]) 21196 for i < n && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))&0xc0 == 0x80 { 21197 c = c<<6 + 0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1))))) 21198 } 21199 } 21200 } 21201 *(*int32)(unsafe.Pointer(pSize)) = i 21202 return c 21203 } 21204 21205 func utf8Charlen(tls *libc.TLS, zIn uintptr, nIn int32) int32 { 21206 bp := tls.Alloc(4) 21207 defer tls.Free(4) 21208 21209 var i int32 21210 var nChar int32 = 0 21211 for i = 0; i < nIn; nChar++ { 21212 utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 21213 i = i + *(*int32)(unsafe.Pointer(bp)) 21214 } 21215 return nChar 21216 } 21217 21218 type Transliteration1 = struct { 21219 FcFrom uint16 21220 FcTo0 uint8 21221 FcTo1 uint8 21222 FcTo2 uint8 21223 FcTo3 uint8 21224 } 21225 21226 type Transliteration = Transliteration1 21227 21228 var translit = [389]Transliteration{ 21229 {FcFrom: uint16(0x00A0), FcTo0: uint8(0x20)}, 21230 {FcFrom: uint16(0x00B5), FcTo0: uint8(0x75)}, 21231 {FcFrom: uint16(0x00C0), FcTo0: uint8(0x41)}, 21232 {FcFrom: uint16(0x00C1), FcTo0: uint8(0x41)}, 21233 {FcFrom: uint16(0x00C2), FcTo0: uint8(0x41)}, 21234 {FcFrom: uint16(0x00C3), FcTo0: uint8(0x41)}, 21235 {FcFrom: uint16(0x00C4), FcTo0: uint8(0x41), FcTo1: uint8(0x65)}, 21236 {FcFrom: uint16(0x00C5), FcTo0: uint8(0x41), FcTo1: uint8(0x61)}, 21237 {FcFrom: uint16(0x00C6), FcTo0: uint8(0x41), FcTo1: uint8(0x45)}, 21238 {FcFrom: uint16(0x00C7), FcTo0: uint8(0x43)}, 21239 {FcFrom: uint16(0x00C8), FcTo0: uint8(0x45)}, 21240 {FcFrom: uint16(0x00C9), FcTo0: uint8(0x45)}, 21241 {FcFrom: uint16(0x00CA), FcTo0: uint8(0x45)}, 21242 {FcFrom: uint16(0x00CB), FcTo0: uint8(0x45)}, 21243 {FcFrom: uint16(0x00CC), FcTo0: uint8(0x49)}, 21244 {FcFrom: uint16(0x00CD), FcTo0: uint8(0x49)}, 21245 {FcFrom: uint16(0x00CE), FcTo0: uint8(0x49)}, 21246 {FcFrom: uint16(0x00CF), FcTo0: uint8(0x49)}, 21247 {FcFrom: uint16(0x00D0), FcTo0: uint8(0x44)}, 21248 {FcFrom: uint16(0x00D1), FcTo0: uint8(0x4E)}, 21249 {FcFrom: uint16(0x00D2), FcTo0: uint8(0x4F)}, 21250 {FcFrom: uint16(0x00D3), FcTo0: uint8(0x4F)}, 21251 {FcFrom: uint16(0x00D4), FcTo0: uint8(0x4F)}, 21252 {FcFrom: uint16(0x00D5), FcTo0: uint8(0x4F)}, 21253 {FcFrom: uint16(0x00D6), FcTo0: uint8(0x4F), FcTo1: uint8(0x65)}, 21254 {FcFrom: uint16(0x00D7), FcTo0: uint8(0x78)}, 21255 {FcFrom: uint16(0x00D8), FcTo0: uint8(0x4F)}, 21256 {FcFrom: uint16(0x00D9), FcTo0: uint8(0x55)}, 21257 {FcFrom: uint16(0x00DA), FcTo0: uint8(0x55)}, 21258 {FcFrom: uint16(0x00DB), FcTo0: uint8(0x55)}, 21259 {FcFrom: uint16(0x00DC), FcTo0: uint8(0x55), FcTo1: uint8(0x65)}, 21260 {FcFrom: uint16(0x00DD), FcTo0: uint8(0x59)}, 21261 {FcFrom: uint16(0x00DE), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 21262 {FcFrom: uint16(0x00DF), FcTo0: uint8(0x73), FcTo1: uint8(0x73)}, 21263 {FcFrom: uint16(0x00E0), FcTo0: uint8(0x61)}, 21264 {FcFrom: uint16(0x00E1), FcTo0: uint8(0x61)}, 21265 {FcFrom: uint16(0x00E2), FcTo0: uint8(0x61)}, 21266 {FcFrom: uint16(0x00E3), FcTo0: uint8(0x61)}, 21267 {FcFrom: uint16(0x00E4), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 21268 {FcFrom: uint16(0x00E5), FcTo0: uint8(0x61), FcTo1: uint8(0x61)}, 21269 {FcFrom: uint16(0x00E6), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 21270 {FcFrom: uint16(0x00E7), FcTo0: uint8(0x63)}, 21271 {FcFrom: uint16(0x00E8), FcTo0: uint8(0x65)}, 21272 {FcFrom: uint16(0x00E9), FcTo0: uint8(0x65)}, 21273 {FcFrom: uint16(0x00EA), FcTo0: uint8(0x65)}, 21274 {FcFrom: uint16(0x00EB), FcTo0: uint8(0x65)}, 21275 {FcFrom: uint16(0x00EC), FcTo0: uint8(0x69)}, 21276 {FcFrom: uint16(0x00ED), FcTo0: uint8(0x69)}, 21277 {FcFrom: uint16(0x00EE), FcTo0: uint8(0x69)}, 21278 {FcFrom: uint16(0x00EF), FcTo0: uint8(0x69)}, 21279 {FcFrom: uint16(0x00F0), FcTo0: uint8(0x64)}, 21280 {FcFrom: uint16(0x00F1), FcTo0: uint8(0x6E)}, 21281 {FcFrom: uint16(0x00F2), FcTo0: uint8(0x6F)}, 21282 {FcFrom: uint16(0x00F3), FcTo0: uint8(0x6F)}, 21283 {FcFrom: uint16(0x00F4), FcTo0: uint8(0x6F)}, 21284 {FcFrom: uint16(0x00F5), FcTo0: uint8(0x6F)}, 21285 {FcFrom: uint16(0x00F6), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 21286 {FcFrom: uint16(0x00F7), FcTo0: uint8(0x3A)}, 21287 {FcFrom: uint16(0x00F8), FcTo0: uint8(0x6F)}, 21288 {FcFrom: uint16(0x00F9), FcTo0: uint8(0x75)}, 21289 {FcFrom: uint16(0x00FA), FcTo0: uint8(0x75)}, 21290 {FcFrom: uint16(0x00FB), FcTo0: uint8(0x75)}, 21291 {FcFrom: uint16(0x00FC), FcTo0: uint8(0x75), FcTo1: uint8(0x65)}, 21292 {FcFrom: uint16(0x00FD), FcTo0: uint8(0x79)}, 21293 {FcFrom: uint16(0x00FE), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 21294 {FcFrom: uint16(0x00FF), FcTo0: uint8(0x79)}, 21295 {FcFrom: uint16(0x0100), FcTo0: uint8(0x41)}, 21296 {FcFrom: uint16(0x0101), FcTo0: uint8(0x61)}, 21297 {FcFrom: uint16(0x0102), FcTo0: uint8(0x41)}, 21298 {FcFrom: uint16(0x0103), FcTo0: uint8(0x61)}, 21299 {FcFrom: uint16(0x0104), FcTo0: uint8(0x41)}, 21300 {FcFrom: uint16(0x0105), FcTo0: uint8(0x61)}, 21301 {FcFrom: uint16(0x0106), FcTo0: uint8(0x43)}, 21302 {FcFrom: uint16(0x0107), FcTo0: uint8(0x63)}, 21303 {FcFrom: uint16(0x0108), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 21304 {FcFrom: uint16(0x0109), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 21305 {FcFrom: uint16(0x010A), FcTo0: uint8(0x43)}, 21306 {FcFrom: uint16(0x010B), FcTo0: uint8(0x63)}, 21307 {FcFrom: uint16(0x010C), FcTo0: uint8(0x43)}, 21308 {FcFrom: uint16(0x010D), FcTo0: uint8(0x63)}, 21309 {FcFrom: uint16(0x010E), FcTo0: uint8(0x44)}, 21310 {FcFrom: uint16(0x010F), FcTo0: uint8(0x64)}, 21311 {FcFrom: uint16(0x0110), FcTo0: uint8(0x44)}, 21312 {FcFrom: uint16(0x0111), FcTo0: uint8(0x64)}, 21313 {FcFrom: uint16(0x0112), FcTo0: uint8(0x45)}, 21314 {FcFrom: uint16(0x0113), FcTo0: uint8(0x65)}, 21315 {FcFrom: uint16(0x0114), FcTo0: uint8(0x45)}, 21316 {FcFrom: uint16(0x0115), FcTo0: uint8(0x65)}, 21317 {FcFrom: uint16(0x0116), FcTo0: uint8(0x45)}, 21318 {FcFrom: uint16(0x0117), FcTo0: uint8(0x65)}, 21319 {FcFrom: uint16(0x0118), FcTo0: uint8(0x45)}, 21320 {FcFrom: uint16(0x0119), FcTo0: uint8(0x65)}, 21321 {FcFrom: uint16(0x011A), FcTo0: uint8(0x45)}, 21322 {FcFrom: uint16(0x011B), FcTo0: uint8(0x65)}, 21323 {FcFrom: uint16(0x011C), FcTo0: uint8(0x47), FcTo1: uint8(0x68)}, 21324 {FcFrom: uint16(0x011D), FcTo0: uint8(0x67), FcTo1: uint8(0x68)}, 21325 {FcFrom: uint16(0x011E), FcTo0: uint8(0x47)}, 21326 {FcFrom: uint16(0x011F), FcTo0: uint8(0x67)}, 21327 {FcFrom: uint16(0x0120), FcTo0: uint8(0x47)}, 21328 {FcFrom: uint16(0x0121), FcTo0: uint8(0x67)}, 21329 {FcFrom: uint16(0x0122), FcTo0: uint8(0x47)}, 21330 {FcFrom: uint16(0x0123), FcTo0: uint8(0x67)}, 21331 {FcFrom: uint16(0x0124), FcTo0: uint8(0x48), FcTo1: uint8(0x68)}, 21332 {FcFrom: uint16(0x0125), FcTo0: uint8(0x68), FcTo1: uint8(0x68)}, 21333 {FcFrom: uint16(0x0126), FcTo0: uint8(0x48)}, 21334 {FcFrom: uint16(0x0127), FcTo0: uint8(0x68)}, 21335 {FcFrom: uint16(0x0128), FcTo0: uint8(0x49)}, 21336 {FcFrom: uint16(0x0129), FcTo0: uint8(0x69)}, 21337 {FcFrom: uint16(0x012A), FcTo0: uint8(0x49)}, 21338 {FcFrom: uint16(0x012B), FcTo0: uint8(0x69)}, 21339 {FcFrom: uint16(0x012C), FcTo0: uint8(0x49)}, 21340 {FcFrom: uint16(0x012D), FcTo0: uint8(0x69)}, 21341 {FcFrom: uint16(0x012E), FcTo0: uint8(0x49)}, 21342 {FcFrom: uint16(0x012F), FcTo0: uint8(0x69)}, 21343 {FcFrom: uint16(0x0130), FcTo0: uint8(0x49)}, 21344 {FcFrom: uint16(0x0131), FcTo0: uint8(0x69)}, 21345 {FcFrom: uint16(0x0132), FcTo0: uint8(0x49), FcTo1: uint8(0x4A)}, 21346 {FcFrom: uint16(0x0133), FcTo0: uint8(0x69), FcTo1: uint8(0x6A)}, 21347 {FcFrom: uint16(0x0134), FcTo0: uint8(0x4A), FcTo1: uint8(0x68)}, 21348 {FcFrom: uint16(0x0135), FcTo0: uint8(0x6A), FcTo1: uint8(0x68)}, 21349 {FcFrom: uint16(0x0136), FcTo0: uint8(0x4B)}, 21350 {FcFrom: uint16(0x0137), FcTo0: uint8(0x6B)}, 21351 {FcFrom: uint16(0x0138), FcTo0: uint8(0x6B)}, 21352 {FcFrom: uint16(0x0139), FcTo0: uint8(0x4C)}, 21353 {FcFrom: uint16(0x013A), FcTo0: uint8(0x6C)}, 21354 {FcFrom: uint16(0x013B), FcTo0: uint8(0x4C)}, 21355 {FcFrom: uint16(0x013C), FcTo0: uint8(0x6C)}, 21356 {FcFrom: uint16(0x013D), FcTo0: uint8(0x4C)}, 21357 {FcFrom: uint16(0x013E), FcTo0: uint8(0x6C)}, 21358 {FcFrom: uint16(0x013F), FcTo0: uint8(0x4C), FcTo1: uint8(0x2E)}, 21359 {FcFrom: uint16(0x0140), FcTo0: uint8(0x6C), FcTo1: uint8(0x2E)}, 21360 {FcFrom: uint16(0x0141), FcTo0: uint8(0x4C)}, 21361 {FcFrom: uint16(0x0142), FcTo0: uint8(0x6C)}, 21362 {FcFrom: uint16(0x0143), FcTo0: uint8(0x4E)}, 21363 {FcFrom: uint16(0x0144), FcTo0: uint8(0x6E)}, 21364 {FcFrom: uint16(0x0145), FcTo0: uint8(0x4E)}, 21365 {FcFrom: uint16(0x0146), FcTo0: uint8(0x6E)}, 21366 {FcFrom: uint16(0x0147), FcTo0: uint8(0x4E)}, 21367 {FcFrom: uint16(0x0148), FcTo0: uint8(0x6E)}, 21368 {FcFrom: uint16(0x0149), FcTo0: uint8(0x27), FcTo1: uint8(0x6E)}, 21369 {FcFrom: uint16(0x014A), FcTo0: uint8(0x4E), FcTo1: uint8(0x47)}, 21370 {FcFrom: uint16(0x014B), FcTo0: uint8(0x6E), FcTo1: uint8(0x67)}, 21371 {FcFrom: uint16(0x014C), FcTo0: uint8(0x4F)}, 21372 {FcFrom: uint16(0x014D), FcTo0: uint8(0x6F)}, 21373 {FcFrom: uint16(0x014E), FcTo0: uint8(0x4F)}, 21374 {FcFrom: uint16(0x014F), FcTo0: uint8(0x6F)}, 21375 {FcFrom: uint16(0x0150), FcTo0: uint8(0x4F)}, 21376 {FcFrom: uint16(0x0151), FcTo0: uint8(0x6F)}, 21377 {FcFrom: uint16(0x0152), FcTo0: uint8(0x4F), FcTo1: uint8(0x45)}, 21378 {FcFrom: uint16(0x0153), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 21379 {FcFrom: uint16(0x0154), FcTo0: uint8(0x52)}, 21380 {FcFrom: uint16(0x0155), FcTo0: uint8(0x72)}, 21381 {FcFrom: uint16(0x0156), FcTo0: uint8(0x52)}, 21382 {FcFrom: uint16(0x0157), FcTo0: uint8(0x72)}, 21383 {FcFrom: uint16(0x0158), FcTo0: uint8(0x52)}, 21384 {FcFrom: uint16(0x0159), FcTo0: uint8(0x72)}, 21385 {FcFrom: uint16(0x015A), FcTo0: uint8(0x53)}, 21386 {FcFrom: uint16(0x015B), FcTo0: uint8(0x73)}, 21387 {FcFrom: uint16(0x015C), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 21388 {FcFrom: uint16(0x015D), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 21389 {FcFrom: uint16(0x015E), FcTo0: uint8(0x53)}, 21390 {FcFrom: uint16(0x015F), FcTo0: uint8(0x73)}, 21391 {FcFrom: uint16(0x0160), FcTo0: uint8(0x53)}, 21392 {FcFrom: uint16(0x0161), FcTo0: uint8(0x73)}, 21393 {FcFrom: uint16(0x0162), FcTo0: uint8(0x54)}, 21394 {FcFrom: uint16(0x0163), FcTo0: uint8(0x74)}, 21395 {FcFrom: uint16(0x0164), FcTo0: uint8(0x54)}, 21396 {FcFrom: uint16(0x0165), FcTo0: uint8(0x74)}, 21397 {FcFrom: uint16(0x0166), FcTo0: uint8(0x54)}, 21398 {FcFrom: uint16(0x0167), FcTo0: uint8(0x74)}, 21399 {FcFrom: uint16(0x0168), FcTo0: uint8(0x55)}, 21400 {FcFrom: uint16(0x0169), FcTo0: uint8(0x75)}, 21401 {FcFrom: uint16(0x016A), FcTo0: uint8(0x55)}, 21402 {FcFrom: uint16(0x016B), FcTo0: uint8(0x75)}, 21403 {FcFrom: uint16(0x016C), FcTo0: uint8(0x55)}, 21404 {FcFrom: uint16(0x016D), FcTo0: uint8(0x75)}, 21405 {FcFrom: uint16(0x016E), FcTo0: uint8(0x55)}, 21406 {FcFrom: uint16(0x016F), FcTo0: uint8(0x75)}, 21407 {FcFrom: uint16(0x0170), FcTo0: uint8(0x55)}, 21408 {FcFrom: uint16(0x0171), FcTo0: uint8(0x75)}, 21409 {FcFrom: uint16(0x0172), FcTo0: uint8(0x55)}, 21410 {FcFrom: uint16(0x0173), FcTo0: uint8(0x75)}, 21411 {FcFrom: uint16(0x0174), FcTo0: uint8(0x57)}, 21412 {FcFrom: uint16(0x0175), FcTo0: uint8(0x77)}, 21413 {FcFrom: uint16(0x0176), FcTo0: uint8(0x59)}, 21414 {FcFrom: uint16(0x0177), FcTo0: uint8(0x79)}, 21415 {FcFrom: uint16(0x0178), FcTo0: uint8(0x59)}, 21416 {FcFrom: uint16(0x0179), FcTo0: uint8(0x5A)}, 21417 {FcFrom: uint16(0x017A), FcTo0: uint8(0x7A)}, 21418 {FcFrom: uint16(0x017B), FcTo0: uint8(0x5A)}, 21419 {FcFrom: uint16(0x017C), FcTo0: uint8(0x7A)}, 21420 {FcFrom: uint16(0x017D), FcTo0: uint8(0x5A)}, 21421 {FcFrom: uint16(0x017E), FcTo0: uint8(0x7A)}, 21422 {FcFrom: uint16(0x017F), FcTo0: uint8(0x73)}, 21423 {FcFrom: uint16(0x0192), FcTo0: uint8(0x66)}, 21424 {FcFrom: uint16(0x0218), FcTo0: uint8(0x53)}, 21425 {FcFrom: uint16(0x0219), FcTo0: uint8(0x73)}, 21426 {FcFrom: uint16(0x021A), FcTo0: uint8(0x54)}, 21427 {FcFrom: uint16(0x021B), FcTo0: uint8(0x74)}, 21428 {FcFrom: uint16(0x0386), FcTo0: uint8(0x41)}, 21429 {FcFrom: uint16(0x0388), FcTo0: uint8(0x45)}, 21430 {FcFrom: uint16(0x0389), FcTo0: uint8(0x49)}, 21431 {FcFrom: uint16(0x038A), FcTo0: uint8(0x49)}, 21432 {FcFrom: uint16(0x038C), FcTo0: uint8(0x4f)}, 21433 {FcFrom: uint16(0x038E), FcTo0: uint8(0x59)}, 21434 {FcFrom: uint16(0x038F), FcTo0: uint8(0x4f)}, 21435 {FcFrom: uint16(0x0390), FcTo0: uint8(0x69)}, 21436 {FcFrom: uint16(0x0391), FcTo0: uint8(0x41)}, 21437 {FcFrom: uint16(0x0392), FcTo0: uint8(0x42)}, 21438 {FcFrom: uint16(0x0393), FcTo0: uint8(0x47)}, 21439 {FcFrom: uint16(0x0394), FcTo0: uint8(0x44)}, 21440 {FcFrom: uint16(0x0395), FcTo0: uint8(0x45)}, 21441 {FcFrom: uint16(0x0396), FcTo0: uint8(0x5a)}, 21442 {FcFrom: uint16(0x0397), FcTo0: uint8(0x49)}, 21443 {FcFrom: uint16(0x0398), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 21444 {FcFrom: uint16(0x0399), FcTo0: uint8(0x49)}, 21445 {FcFrom: uint16(0x039A), FcTo0: uint8(0x4b)}, 21446 {FcFrom: uint16(0x039B), FcTo0: uint8(0x4c)}, 21447 {FcFrom: uint16(0x039C), FcTo0: uint8(0x4d)}, 21448 {FcFrom: uint16(0x039D), FcTo0: uint8(0x4e)}, 21449 {FcFrom: uint16(0x039E), FcTo0: uint8(0x58)}, 21450 {FcFrom: uint16(0x039F), FcTo0: uint8(0x4f)}, 21451 {FcFrom: uint16(0x03A0), FcTo0: uint8(0x50)}, 21452 {FcFrom: uint16(0x03A1), FcTo0: uint8(0x52)}, 21453 {FcFrom: uint16(0x03A3), FcTo0: uint8(0x53)}, 21454 {FcFrom: uint16(0x03A4), FcTo0: uint8(0x54)}, 21455 {FcFrom: uint16(0x03A5), FcTo0: uint8(0x59)}, 21456 {FcFrom: uint16(0x03A6), FcTo0: uint8(0x46)}, 21457 {FcFrom: uint16(0x03A7), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 21458 {FcFrom: uint16(0x03A8), FcTo0: uint8(0x50), FcTo1: uint8(0x73)}, 21459 {FcFrom: uint16(0x03A9), FcTo0: uint8(0x4f)}, 21460 {FcFrom: uint16(0x03AA), FcTo0: uint8(0x49)}, 21461 {FcFrom: uint16(0x03AB), FcTo0: uint8(0x59)}, 21462 {FcFrom: uint16(0x03AC), FcTo0: uint8(0x61)}, 21463 {FcFrom: uint16(0x03AD), FcTo0: uint8(0x65)}, 21464 {FcFrom: uint16(0x03AE), FcTo0: uint8(0x69)}, 21465 {FcFrom: uint16(0x03AF), FcTo0: uint8(0x69)}, 21466 {FcFrom: uint16(0x03B1), FcTo0: uint8(0x61)}, 21467 {FcFrom: uint16(0x03B2), FcTo0: uint8(0x62)}, 21468 {FcFrom: uint16(0x03B3), FcTo0: uint8(0x67)}, 21469 {FcFrom: uint16(0x03B4), FcTo0: uint8(0x64)}, 21470 {FcFrom: uint16(0x03B5), FcTo0: uint8(0x65)}, 21471 {FcFrom: uint16(0x03B6), FcTo0: uint8(0x7a)}, 21472 {FcFrom: uint16(0x03B7), FcTo0: uint8(0x69)}, 21473 {FcFrom: uint16(0x03B8), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 21474 {FcFrom: uint16(0x03B9), FcTo0: uint8(0x69)}, 21475 {FcFrom: uint16(0x03BA), FcTo0: uint8(0x6b)}, 21476 {FcFrom: uint16(0x03BB), FcTo0: uint8(0x6c)}, 21477 {FcFrom: uint16(0x03BC), FcTo0: uint8(0x6d)}, 21478 {FcFrom: uint16(0x03BD), FcTo0: uint8(0x6e)}, 21479 {FcFrom: uint16(0x03BE), FcTo0: uint8(0x78)}, 21480 {FcFrom: uint16(0x03BF), FcTo0: uint8(0x6f)}, 21481 {FcFrom: uint16(0x03C0), FcTo0: uint8(0x70)}, 21482 {FcFrom: uint16(0x03C1), FcTo0: uint8(0x72)}, 21483 {FcFrom: uint16(0x03C3), FcTo0: uint8(0x73)}, 21484 {FcFrom: uint16(0x03C4), FcTo0: uint8(0x74)}, 21485 {FcFrom: uint16(0x03C5), FcTo0: uint8(0x79)}, 21486 {FcFrom: uint16(0x03C6), FcTo0: uint8(0x66)}, 21487 {FcFrom: uint16(0x03C7), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 21488 {FcFrom: uint16(0x03C8), FcTo0: uint8(0x70), FcTo1: uint8(0x73)}, 21489 {FcFrom: uint16(0x03C9), FcTo0: uint8(0x6f)}, 21490 {FcFrom: uint16(0x03CA), FcTo0: uint8(0x69)}, 21491 {FcFrom: uint16(0x03CB), FcTo0: uint8(0x79)}, 21492 {FcFrom: uint16(0x03CC), FcTo0: uint8(0x6f)}, 21493 {FcFrom: uint16(0x03CD), FcTo0: uint8(0x79)}, 21494 {FcFrom: uint16(0x03CE), FcTo0: uint8(0x69)}, 21495 {FcFrom: uint16(0x0400), FcTo0: uint8(0x45)}, 21496 {FcFrom: uint16(0x0401), FcTo0: uint8(0x45)}, 21497 {FcFrom: uint16(0x0402), FcTo0: uint8(0x44)}, 21498 {FcFrom: uint16(0x0403), FcTo0: uint8(0x47)}, 21499 {FcFrom: uint16(0x0404), FcTo0: uint8(0x45)}, 21500 {FcFrom: uint16(0x0405), FcTo0: uint8(0x5a)}, 21501 {FcFrom: uint16(0x0406), FcTo0: uint8(0x49)}, 21502 {FcFrom: uint16(0x0407), FcTo0: uint8(0x49)}, 21503 {FcFrom: uint16(0x0408), FcTo0: uint8(0x4a)}, 21504 {FcFrom: uint16(0x0409), FcTo0: uint8(0x49)}, 21505 {FcFrom: uint16(0x040A), FcTo0: uint8(0x4e)}, 21506 {FcFrom: uint16(0x040B), FcTo0: uint8(0x44)}, 21507 {FcFrom: uint16(0x040C), FcTo0: uint8(0x4b)}, 21508 {FcFrom: uint16(0x040D), FcTo0: uint8(0x49)}, 21509 {FcFrom: uint16(0x040E), FcTo0: uint8(0x55)}, 21510 {FcFrom: uint16(0x040F), FcTo0: uint8(0x44)}, 21511 {FcFrom: uint16(0x0410), FcTo0: uint8(0x41)}, 21512 {FcFrom: uint16(0x0411), FcTo0: uint8(0x42)}, 21513 {FcFrom: uint16(0x0412), FcTo0: uint8(0x56)}, 21514 {FcFrom: uint16(0x0413), FcTo0: uint8(0x47)}, 21515 {FcFrom: uint16(0x0414), FcTo0: uint8(0x44)}, 21516 {FcFrom: uint16(0x0415), FcTo0: uint8(0x45)}, 21517 {FcFrom: uint16(0x0416), FcTo0: uint8(0x5a), FcTo1: uint8(0x68)}, 21518 {FcFrom: uint16(0x0417), FcTo0: uint8(0x5a)}, 21519 {FcFrom: uint16(0x0418), FcTo0: uint8(0x49)}, 21520 {FcFrom: uint16(0x0419), FcTo0: uint8(0x49)}, 21521 {FcFrom: uint16(0x041A), FcTo0: uint8(0x4b)}, 21522 {FcFrom: uint16(0x041B), FcTo0: uint8(0x4c)}, 21523 {FcFrom: uint16(0x041C), FcTo0: uint8(0x4d)}, 21524 {FcFrom: uint16(0x041D), FcTo0: uint8(0x4e)}, 21525 {FcFrom: uint16(0x041E), FcTo0: uint8(0x4f)}, 21526 {FcFrom: uint16(0x041F), FcTo0: uint8(0x50)}, 21527 {FcFrom: uint16(0x0420), FcTo0: uint8(0x52)}, 21528 {FcFrom: uint16(0x0421), FcTo0: uint8(0x53)}, 21529 {FcFrom: uint16(0x0422), FcTo0: uint8(0x54)}, 21530 {FcFrom: uint16(0x0423), FcTo0: uint8(0x55)}, 21531 {FcFrom: uint16(0x0424), FcTo0: uint8(0x46)}, 21532 {FcFrom: uint16(0x0425), FcTo0: uint8(0x4b), FcTo1: uint8(0x68)}, 21533 {FcFrom: uint16(0x0426), FcTo0: uint8(0x54), FcTo1: uint8(0x63)}, 21534 {FcFrom: uint16(0x0427), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 21535 {FcFrom: uint16(0x0428), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 21536 {FcFrom: uint16(0x0429), FcTo0: uint8(0x53), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 21537 {FcFrom: uint16(0x042A), FcTo0: uint8(0x61)}, 21538 {FcFrom: uint16(0x042B), FcTo0: uint8(0x59)}, 21539 {FcFrom: uint16(0x042C), FcTo0: uint8(0x59)}, 21540 {FcFrom: uint16(0x042D), FcTo0: uint8(0x45)}, 21541 {FcFrom: uint16(0x042E), FcTo0: uint8(0x49), FcTo1: uint8(0x75)}, 21542 {FcFrom: uint16(0x042F), FcTo0: uint8(0x49), FcTo1: uint8(0x61)}, 21543 {FcFrom: uint16(0x0430), FcTo0: uint8(0x61)}, 21544 {FcFrom: uint16(0x0431), FcTo0: uint8(0x62)}, 21545 {FcFrom: uint16(0x0432), FcTo0: uint8(0x76)}, 21546 {FcFrom: uint16(0x0433), FcTo0: uint8(0x67)}, 21547 {FcFrom: uint16(0x0434), FcTo0: uint8(0x64)}, 21548 {FcFrom: uint16(0x0435), FcTo0: uint8(0x65)}, 21549 {FcFrom: uint16(0x0436), FcTo0: uint8(0x7a), FcTo1: uint8(0x68)}, 21550 {FcFrom: uint16(0x0437), FcTo0: uint8(0x7a)}, 21551 {FcFrom: uint16(0x0438), FcTo0: uint8(0x69)}, 21552 {FcFrom: uint16(0x0439), FcTo0: uint8(0x69)}, 21553 {FcFrom: uint16(0x043A), FcTo0: uint8(0x6b)}, 21554 {FcFrom: uint16(0x043B), FcTo0: uint8(0x6c)}, 21555 {FcFrom: uint16(0x043C), FcTo0: uint8(0x6d)}, 21556 {FcFrom: uint16(0x043D), FcTo0: uint8(0x6e)}, 21557 {FcFrom: uint16(0x043E), FcTo0: uint8(0x6f)}, 21558 {FcFrom: uint16(0x043F), FcTo0: uint8(0x70)}, 21559 {FcFrom: uint16(0x0440), FcTo0: uint8(0x72)}, 21560 {FcFrom: uint16(0x0441), FcTo0: uint8(0x73)}, 21561 {FcFrom: uint16(0x0442), FcTo0: uint8(0x74)}, 21562 {FcFrom: uint16(0x0443), FcTo0: uint8(0x75)}, 21563 {FcFrom: uint16(0x0444), FcTo0: uint8(0x66)}, 21564 {FcFrom: uint16(0x0445), FcTo0: uint8(0x6b), FcTo1: uint8(0x68)}, 21565 {FcFrom: uint16(0x0446), FcTo0: uint8(0x74), FcTo1: uint8(0x63)}, 21566 {FcFrom: uint16(0x0447), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 21567 {FcFrom: uint16(0x0448), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 21568 {FcFrom: uint16(0x0449), FcTo0: uint8(0x73), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 21569 {FcFrom: uint16(0x044A), FcTo0: uint8(0x61)}, 21570 {FcFrom: uint16(0x044B), FcTo0: uint8(0x79)}, 21571 {FcFrom: uint16(0x044C), FcTo0: uint8(0x79)}, 21572 {FcFrom: uint16(0x044D), FcTo0: uint8(0x65)}, 21573 {FcFrom: uint16(0x044E), FcTo0: uint8(0x69), FcTo1: uint8(0x75)}, 21574 {FcFrom: uint16(0x044F), FcTo0: uint8(0x69), FcTo1: uint8(0x61)}, 21575 {FcFrom: uint16(0x0450), FcTo0: uint8(0x65)}, 21576 {FcFrom: uint16(0x0451), FcTo0: uint8(0x65)}, 21577 {FcFrom: uint16(0x0452), FcTo0: uint8(0x64)}, 21578 {FcFrom: uint16(0x0453), FcTo0: uint8(0x67)}, 21579 {FcFrom: uint16(0x0454), FcTo0: uint8(0x65)}, 21580 {FcFrom: uint16(0x0455), FcTo0: uint8(0x7a)}, 21581 {FcFrom: uint16(0x0456), FcTo0: uint8(0x69)}, 21582 {FcFrom: uint16(0x0457), FcTo0: uint8(0x69)}, 21583 {FcFrom: uint16(0x0458), FcTo0: uint8(0x6a)}, 21584 {FcFrom: uint16(0x0459), FcTo0: uint8(0x69)}, 21585 {FcFrom: uint16(0x045A), FcTo0: uint8(0x6e)}, 21586 {FcFrom: uint16(0x045B), FcTo0: uint8(0x64)}, 21587 {FcFrom: uint16(0x045C), FcTo0: uint8(0x6b)}, 21588 {FcFrom: uint16(0x045D), FcTo0: uint8(0x69)}, 21589 {FcFrom: uint16(0x045E), FcTo0: uint8(0x75)}, 21590 {FcFrom: uint16(0x045F), FcTo0: uint8(0x64)}, 21591 {FcFrom: uint16(0x1E02), FcTo0: uint8(0x42)}, 21592 {FcFrom: uint16(0x1E03), FcTo0: uint8(0x62)}, 21593 {FcFrom: uint16(0x1E0A), FcTo0: uint8(0x44)}, 21594 {FcFrom: uint16(0x1E0B), FcTo0: uint8(0x64)}, 21595 {FcFrom: uint16(0x1E1E), FcTo0: uint8(0x46)}, 21596 {FcFrom: uint16(0x1E1F), FcTo0: uint8(0x66)}, 21597 {FcFrom: uint16(0x1E40), FcTo0: uint8(0x4D)}, 21598 {FcFrom: uint16(0x1E41), FcTo0: uint8(0x6D)}, 21599 {FcFrom: uint16(0x1E56), FcTo0: uint8(0x50)}, 21600 {FcFrom: uint16(0x1E57), FcTo0: uint8(0x70)}, 21601 {FcFrom: uint16(0x1E60), FcTo0: uint8(0x53)}, 21602 {FcFrom: uint16(0x1E61), FcTo0: uint8(0x73)}, 21603 {FcFrom: uint16(0x1E6A), FcTo0: uint8(0x54)}, 21604 {FcFrom: uint16(0x1E6B), FcTo0: uint8(0x74)}, 21605 {FcFrom: uint16(0x1E80), FcTo0: uint8(0x57)}, 21606 {FcFrom: uint16(0x1E81), FcTo0: uint8(0x77)}, 21607 {FcFrom: uint16(0x1E82), FcTo0: uint8(0x57)}, 21608 {FcFrom: uint16(0x1E83), FcTo0: uint8(0x77)}, 21609 {FcFrom: uint16(0x1E84), FcTo0: uint8(0x57)}, 21610 {FcFrom: uint16(0x1E85), FcTo0: uint8(0x77)}, 21611 {FcFrom: uint16(0x1EF2), FcTo0: uint8(0x59)}, 21612 {FcFrom: uint16(0x1EF3), FcTo0: uint8(0x79)}, 21613 {FcFrom: uint16(0xFB00), FcTo0: uint8(0x66), FcTo1: uint8(0x66)}, 21614 {FcFrom: uint16(0xFB01), FcTo0: uint8(0x66), FcTo1: uint8(0x69)}, 21615 {FcFrom: uint16(0xFB02), FcTo0: uint8(0x66), FcTo1: uint8(0x6C)}, 21616 {FcFrom: uint16(0xFB05), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 21617 {FcFrom: uint16(0xFB06), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 21618 } 21619 21620 func spellfixFindTranslit(tls *libc.TLS, c int32, pxTop uintptr) uintptr { 21621 *(*int32)(unsafe.Pointer(pxTop)) = int32(uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{})) - uint64(1)) 21622 return uintptr(unsafe.Pointer(&translit)) 21623 } 21624 21625 func transliterate(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 21626 bp := tls.Alloc(8) 21627 defer tls.Free(8) 21628 21629 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn*4+1)) 21630 var c int32 21631 21632 var nOut int32 21633 if zOut == uintptr(0) { 21634 return uintptr(0) 21635 } 21636 nOut = 0 21637 for nIn > 0 { 21638 c = utf8Read(tls, zIn, nIn, bp) 21639 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 21640 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 21641 if c <= 127 { 21642 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8(c) 21643 } else { 21644 var xBtm int32 21645 var x int32 21646 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 21647 xBtm = 0 21648 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 21649 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 21650 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 21651 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo0 21652 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 21653 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo1 21654 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 21655 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo2 21656 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 21657 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo3 21658 } 21659 } 21660 } 21661 c = 0 21662 break 21663 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 21664 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 21665 } else { 21666 xBtm = x + 1 21667 } 21668 } 21669 if c != 0 { 21670 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8('?') 21671 } 21672 } 21673 } 21674 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 21675 return zOut 21676 } 21677 21678 func translen_to_charlen(tls *libc.TLS, zIn uintptr, nIn int32, nTrans int32) int32 { 21679 bp := tls.Alloc(8) 21680 defer tls.Free(8) 21681 21682 var i int32 21683 var c int32 21684 21685 var nOut int32 21686 var nChar int32 21687 21688 i = libc.AssignInt32(&nOut, 0) 21689 for nChar = 0; i < nIn && nOut < nTrans; nChar++ { 21690 c = utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 21691 i = i + *(*int32)(unsafe.Pointer(bp)) 21692 21693 nOut++ 21694 if c >= 128 { 21695 var xBtm int32 21696 var x int32 21697 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 21698 xBtm = 0 21699 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 21700 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 21701 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 21702 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 21703 nOut++ 21704 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 21705 nOut++ 21706 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 21707 nOut++ 21708 } 21709 } 21710 } 21711 break 21712 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 21713 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 21714 } else { 21715 xBtm = x + 1 21716 } 21717 } 21718 } 21719 } 21720 21721 return nChar 21722 } 21723 21724 func transliterateSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21725 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21726 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21727 var zOut uintptr = transliterate(tls, zIn, nIn) 21728 if zOut == uintptr(0) { 21729 sqlite3.Xsqlite3_result_error_nomem(tls, context) 21730 } else { 21731 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 21732 } 21733 } 21734 21735 func scriptCodeSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21736 bp := tls.Alloc(4) 21737 defer tls.Free(4) 21738 21739 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21740 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 21741 var c int32 21742 21743 var scriptMask int32 = 0 21744 var res int32 21745 var seenDigit int32 = 0 21746 21747 for nIn > 0 { 21748 c = utf8Read(tls, zIn, nIn, bp) 21749 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 21750 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 21751 if c < 0x02af { 21752 if c >= 0x80 || int32(midClass[c&0x7f]) < CCLASS_DIGIT { 21753 scriptMask = scriptMask | SCRIPT_LATIN 21754 } else if c >= '0' && c <= '9' { 21755 seenDigit = 1 21756 } 21757 } else if c >= 0x0400 && c <= 0x04ff { 21758 scriptMask = scriptMask | SCRIPT_CYRILLIC 21759 } else if c >= 0x0386 && c <= 0x03ce { 21760 scriptMask = scriptMask | SCRIPT_GREEK 21761 } else if c >= 0x0590 && c <= 0x05ff { 21762 scriptMask = scriptMask | SCRIPT_HEBREW 21763 } else if c >= 0x0600 && c <= 0x06ff { 21764 scriptMask = scriptMask | SCRIPT_ARABIC 21765 } 21766 } 21767 if scriptMask == 0 && seenDigit != 0 { 21768 scriptMask = SCRIPT_LATIN 21769 } 21770 switch scriptMask { 21771 case 0: 21772 res = 999 21773 break 21774 case SCRIPT_LATIN: 21775 res = 215 21776 break 21777 case SCRIPT_CYRILLIC: 21778 res = 220 21779 break 21780 case SCRIPT_GREEK: 21781 res = 200 21782 break 21783 case SCRIPT_HEBREW: 21784 res = 125 21785 break 21786 case SCRIPT_ARABIC: 21787 res = 160 21788 break 21789 default: 21790 res = 998 21791 break 21792 } 21793 sqlite3.Xsqlite3_result_int(tls, context, res) 21794 } 21795 21796 type spellfix1_vtab1 = struct { 21797 Fbase sqlite3_vtab 21798 Fdb uintptr 21799 FzDbName uintptr 21800 FzTableName uintptr 21801 FzCostTable uintptr 21802 FpConfig3 uintptr 21803 } 21804 21805 type spellfix1_vtab = spellfix1_vtab1 21806 type spellfix1_cursor1 = struct { 21807 Fbase sqlite3_vtab_cursor 21808 FpVTab uintptr 21809 FzPattern uintptr 21810 FidxNum int32 21811 FnRow int32 21812 FnAlloc int32 21813 FiRow int32 21814 FiLang int32 21815 FiTop int32 21816 FiScope int32 21817 FnSearch int32 21818 FpFullScan uintptr 21819 Fa uintptr 21820 } 21821 21822 type spellfix1_cursor = spellfix1_cursor1 21823 21824 type spellfix1_row = struct { 21825 FiRowid sqlite3_int64 21826 FzWord uintptr 21827 FiRank int32 21828 FiDistance int32 21829 FiScore int32 21830 FiMatchlen int32 21831 FzHash [32]uint8 21832 } 21833 21834 func spellfix1DbExec(tls *libc.TLS, pRc uintptr, db uintptr, zFormat uintptr, va uintptr) { 21835 var ap va_list 21836 _ = ap 21837 var zSql uintptr 21838 if *(*int32)(unsafe.Pointer(pRc)) != 0 { 21839 return 21840 } 21841 ap = va 21842 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap) 21843 _ = ap 21844 if zSql == uintptr(0) { 21845 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 21846 } else { 21847 *(*int32)(unsafe.Pointer(pRc)) = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 21848 sqlite3.Xsqlite3_free(tls, zSql) 21849 } 21850 } 21851 21852 func spellfix1Uninit(tls *libc.TLS, isDestroy int32, pVTab uintptr) int32 { 21853 bp := tls.Alloc(20) 21854 defer tls.Free(20) 21855 21856 var p uintptr = pVTab 21857 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 21858 if isDestroy != 0 { 21859 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 21860 spellfix1DbExec(tls, bp+16, db, ts+7189, 21861 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 21862 } 21863 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 21864 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 21865 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 21866 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 21867 sqlite3.Xsqlite3_free(tls, p) 21868 } 21869 return *(*int32)(unsafe.Pointer(bp + 16)) 21870 } 21871 21872 func spellfix1Disconnect(tls *libc.TLS, pVTab uintptr) int32 { 21873 return spellfix1Uninit(tls, 0, pVTab) 21874 } 21875 21876 func spellfix1Destroy(tls *libc.TLS, pVTab uintptr) int32 { 21877 return spellfix1Uninit(tls, 1, pVTab) 21878 } 21879 21880 func spellfix1Dequote(tls *libc.TLS, zIn uintptr) uintptr { 21881 bp := tls.Alloc(8) 21882 defer tls.Free(8) 21883 21884 var zOut uintptr 21885 var i int32 21886 var j int32 21887 var c uint8 21888 for int32(*(*uint16)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls))) + uintptr(int32(*(*uint8)(unsafe.Pointer(zIn))))*2)))&int32(_ISspace) != 0 { 21889 zIn++ 21890 } 21891 zOut = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zIn)) 21892 if zOut == uintptr(0) { 21893 return uintptr(0) 21894 } 21895 i = int32(libc.Xstrlen(tls, zOut)) 21896 *(*uint8)(unsafe.Pointer(zOut + uintptr(i))) = uint8(0) 21897 c = *(*uint8)(unsafe.Pointer(zOut)) 21898 if int32(c) == '\'' || int32(c) == '"' { 21899 i = 1 21900 j = 0 21901 for ; 1 != 0; i++ { 21902 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&j, 1)))) = *(*uint8)(unsafe.Pointer(zOut + uintptr(i))) 21903 if int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(i)))) == int32(c) { 21904 if int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(i+1)))) == int32(c) { 21905 i++ 21906 } else { 21907 *(*uint8)(unsafe.Pointer(zOut + uintptr(j-1))) = uint8(0) 21908 break 21909 } 21910 } 21911 } 21912 } 21913 return zOut 21914 } 21915 21916 func spellfix1Init(tls *libc.TLS, isCreate int32, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21917 bp := tls.Alloc(60) 21918 defer tls.Free(60) 21919 21920 var pNew uintptr = uintptr(0) 21921 21922 var zDbName uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 21923 var zTableName uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 21924 var nDbName int32 21925 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_OK 21926 var i int32 21927 21928 nDbName = int32(libc.Xstrlen(tls, zDbName)) 21929 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_vtab{}))+uint64(nDbName)+uint64(1)) 21930 if pNew == uintptr(0) { 21931 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21932 } else { 21933 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(spellfix1_vtab{}))) 21934 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName = pNew + 1*64 21935 libc.Xmemcpy(tls, (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName, zDbName, uint64(nDbName+1)) 21936 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 21937 (*spellfix1_vtab)(unsafe.Pointer(pNew)).Fdb = db 21938 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0) { 21939 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21940 } else { 21941 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 21942 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_declare_vtab(tls, db, 21943 ts+7226) 21944 } 21945 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && isCreate != 0 { 21946 spellfix1DbExec(tls, bp+56, db, 21947 ts+7380, 21948 libc.VaList(bp+8, zDbName, zTableName)) 21949 spellfix1DbExec(tls, bp+56, db, 21950 ts+7514, 21951 libc.VaList(bp+24, zDbName, zTableName, zTableName)) 21952 } 21953 for i = 3; *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && i < argc; i++ { 21954 if libc.Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ts+7599, uint64(16)) == 0 && (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 21955 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable = spellfix1Dequote(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))+16) 21956 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 21957 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 21958 } 21959 continue 21960 } 21961 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+7616, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 21962 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_ERROR 21963 } 21964 } 21965 21966 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 && pNew != 0 { 21967 *(*uintptr)(unsafe.Pointer(ppVTab)) = uintptr(0) 21968 spellfix1Uninit(tls, 0, pNew) 21969 } else { 21970 *(*uintptr)(unsafe.Pointer(ppVTab)) = pNew 21971 } 21972 return *(*int32)(unsafe.Pointer(bp + 56)) 21973 } 21974 21975 func spellfix1Connect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21976 return spellfix1Init(tls, 0, db, pAux, argc, argv, ppVTab, pzErr) 21977 } 21978 21979 func spellfix1Create(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 21980 return spellfix1Init(tls, 1, db, pAux, argc, argv, ppVTab, pzErr) 21981 } 21982 21983 func spellfix1ResetCursor(tls *libc.TLS, pCur uintptr) { 21984 var i int32 21985 for i = 0; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 21986 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(i)*64)).FzWord) 21987 } 21988 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = 0 21989 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 21990 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch = 0 21991 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 21992 sqlite3.Xsqlite3_finalize(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 21993 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan = uintptr(0) 21994 } 21995 } 21996 21997 func spellfix1ResizeCursor(tls *libc.TLS, pCur uintptr, N int32) { 21998 var aNew uintptr 21999 22000 aNew = sqlite3.Xsqlite3_realloc64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64(unsafe.Sizeof(spellfix1_row{}))*uint64(N)) 22001 if aNew == uintptr(0) && N > 0 { 22002 spellfix1ResetCursor(tls, pCur) 22003 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa) 22004 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = 0 22005 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = uintptr(0) 22006 } else { 22007 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = N 22008 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = aNew 22009 } 22010 } 22011 22012 func spellfix1Close(tls *libc.TLS, cur uintptr) int32 { 22013 var pCur uintptr = cur 22014 spellfix1ResetCursor(tls, pCur) 22015 spellfix1ResizeCursor(tls, pCur, 0) 22016 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 22017 sqlite3.Xsqlite3_free(tls, pCur) 22018 return SQLITE_OK 22019 } 22020 22021 func spellfix1BestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 22022 var iPlan int32 = 0 22023 var iLangTerm int32 = -1 22024 var iTopTerm int32 = -1 22025 var iScopeTerm int32 = -1 22026 var iDistTerm int32 = -1 22027 var iRowidTerm int32 = -1 22028 var i int32 22029 var pConstraint uintptr 22030 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 22031 i = 0 22032 __1: 22033 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 22034 goto __3 22035 } 22036 { 22037 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 22038 goto __2 22039 } 22040 22041 if iPlan&SPELLFIX_IDXNUM_MATCH == 0 && 22042 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_WORD && 22043 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 22044 iPlan = iPlan | SPELLFIX_IDXNUM_MATCH 22045 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 22046 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 22047 } 22048 22049 if iPlan&SPELLFIX_IDXNUM_LANGID == 0 && 22050 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_LANGID && 22051 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 22052 iPlan = iPlan | SPELLFIX_IDXNUM_LANGID 22053 iLangTerm = i 22054 } 22055 22056 if iPlan&SPELLFIX_IDXNUM_TOP == 0 && 22057 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_TOP && 22058 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 22059 iPlan = iPlan | SPELLFIX_IDXNUM_TOP 22060 iTopTerm = i 22061 } 22062 22063 if iPlan&SPELLFIX_IDXNUM_SCOPE == 0 && 22064 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_SCOPE && 22065 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 22066 iPlan = iPlan | SPELLFIX_IDXNUM_SCOPE 22067 iScopeTerm = i 22068 } 22069 22070 if iPlan&(0x10|0x20) == 0 && 22071 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_DISTANCE && 22072 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 22073 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 22074 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 22075 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLT 22076 } else { 22077 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLE 22078 } 22079 iDistTerm = i 22080 } 22081 22082 if iPlan&SPELLFIX_IDXNUM_ROWID == 0 && 22083 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < 0 && 22084 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 22085 iPlan = iPlan | SPELLFIX_IDXNUM_ROWID 22086 iRowidTerm = i 22087 } 22088 22089 } 22090 goto __2 22091 __2: 22092 i++ 22093 pConstraint += 12 22094 goto __1 22095 goto __3 22096 __3: 22097 ; 22098 if iPlan&SPELLFIX_IDXNUM_MATCH != 0 { 22099 var idx int32 = 2 22100 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 22101 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 22102 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == SPELLFIX_COL_SCORE && 22103 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 22104 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 22105 } 22106 if iPlan&SPELLFIX_IDXNUM_LANGID != 0 { 22107 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 22108 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).Fomit = uint8(1) 22109 } 22110 if iPlan&SPELLFIX_IDXNUM_TOP != 0 { 22111 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 22112 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).Fomit = uint8(1) 22113 } 22114 if iPlan&SPELLFIX_IDXNUM_SCOPE != 0 { 22115 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 22116 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).Fomit = uint8(1) 22117 } 22118 if iPlan&(0x10|0x20) != 0 { 22119 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 22120 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).Fomit = uint8(1) 22121 } 22122 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e5 22123 } else if iPlan&SPELLFIX_IDXNUM_ROWID != 0 { 22124 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SPELLFIX_IDXNUM_ROWID 22125 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).FargvIndex = 1 22126 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).Fomit = uint8(1) 22127 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 22128 } else { 22129 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 22130 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e50 22131 } 22132 return SQLITE_OK 22133 } 22134 22135 func spellfix1Open(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 22136 var p uintptr = pVTab 22137 var pCur uintptr 22138 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 22139 if pCur == uintptr(0) { 22140 return SQLITE_NOMEM 22141 } 22142 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 22143 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab = p 22144 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 22145 return SQLITE_OK 22146 } 22147 22148 func spellfix1Score(tls *libc.TLS, iDistance int32, iRank int32) int32 { 22149 var iLog2 int32 22150 iLog2 = 0 22151 __1: 22152 if !(iRank > 0) { 22153 goto __3 22154 } 22155 { 22156 } 22157 goto __2 22158 __2: 22159 iLog2++ 22160 iRank >>= 1 22161 goto __1 22162 goto __3 22163 __3: 22164 ; 22165 return iDistance + 32 - iLog2 22166 } 22167 22168 func spellfix1RowCompare(tls *libc.TLS, A uintptr, B uintptr) int32 { 22169 var a uintptr = A 22170 var b uintptr = B 22171 return (*spellfix1_row)(unsafe.Pointer(a)).FiScore - (*spellfix1_row)(unsafe.Pointer(b)).FiScore 22172 } 22173 22174 type MatchQuery1 = struct { 22175 FpCur uintptr 22176 FpStmt uintptr 22177 FzHash [32]uint8 22178 FzPattern uintptr 22179 FnPattern int32 22180 F__ccgo_pad1 [4]byte 22181 FpMatchStr3 uintptr 22182 FpConfig3 uintptr 22183 FpLang uintptr 22184 FiLang int32 22185 FiScope int32 22186 FiMaxDist int32 22187 Frc int32 22188 FnRun int32 22189 FazPrior [1][32]uint8 22190 F__ccgo_pad2 [4]byte 22191 } 22192 22193 type MatchQuery = MatchQuery1 22194 22195 func spellfix1RunQuery(tls *libc.TLS, p uintptr, zQuery uintptr, nQuery int32) { 22196 bp := tls.Alloc(76) 22197 defer tls.Free(76) 22198 22199 var zK1 uintptr 22200 var zWord uintptr 22201 var iDist int32 22202 var iRank int32 22203 var iScore int32 22204 var iWorst int32 = 0 22205 var idx int32 22206 var idxWorst int32 = -1 22207 var i int32 22208 var iScope int32 = (*MatchQuery)(unsafe.Pointer(p)).FiScope 22209 var pCur uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpCur 22210 var pStmt uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpStmt 22211 22212 var zClass uintptr 22213 var nClass int32 22214 var rc int32 22215 22216 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) || (*MatchQuery)(unsafe.Pointer(p)).Frc != 0 { 22217 return 22218 } 22219 zClass = phoneticHash(tls, zQuery, nQuery) 22220 if zClass == uintptr(0) { 22221 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 22222 return 22223 } 22224 nClass = int32(libc.Xstrlen(tls, zClass)) 22225 if nClass > SPELLFIX_MX_HASH-2 { 22226 nClass = SPELLFIX_MX_HASH - 2 22227 *(*uint8)(unsafe.Pointer(zClass + uintptr(nClass))) = uint8(0) 22228 } 22229 if nClass <= iScope { 22230 if nClass > 2 { 22231 iScope = nClass - 1 22232 } else { 22233 iScope = nClass 22234 } 22235 } 22236 libc.Xmemcpy(tls, bp+8, zClass, uint64(iScope)) 22237 sqlite3.Xsqlite3_free(tls, zClass) 22238 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(iScope))) = uint8(0) 22239 libc.Xmemcpy(tls, bp+40, bp+8, uint64(iScope)) 22240 *(*uint8)(unsafe.Pointer(bp + 40 + uintptr(iScope))) = uint8('Z') 22241 *(*uint8)(unsafe.Pointer(bp + 40 + uintptr(iScope+1))) = uint8(0) 22242 22243 libc.Xmemcpy(tls, p+108+uintptr(libc.PostIncInt32(&(*MatchQuery)(unsafe.Pointer(p)).FnRun, 1))*32, bp+8, uint64(iScope+1)) 22244 if sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, bp+8, -1, uintptr(0)) == SQLITE_NOMEM || 22245 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, bp+40, -1, uintptr(0)) == SQLITE_NOMEM { 22246 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 22247 return 22248 } 22249 for sqlite3.Xsqlite3_step(tls, pStmt) == SQLITE_ROW { 22250 *(*int32)(unsafe.Pointer(bp + 72)) = -1 22251 iRank = sqlite3.Xsqlite3_column_int(tls, pStmt, 2) 22252 if (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3 != 0 { 22253 var nWord int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, 1) 22254 zWord = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 22255 iDist = editDist3Core(tls, (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3, zWord, nWord, (*MatchQuery)(unsafe.Pointer(p)).FpLang, bp+72) 22256 } else { 22257 zK1 = sqlite3.Xsqlite3_column_text(tls, pStmt, 3) 22258 if zK1 == uintptr(0) { 22259 continue 22260 } 22261 iDist = editdist1(tls, (*MatchQuery)(unsafe.Pointer(p)).FzPattern, zK1, uintptr(0)) 22262 } 22263 if iDist < 0 { 22264 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 22265 break 22266 } 22267 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch++ 22268 22269 if (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist >= 0 { 22270 if iDist > (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist { 22271 continue 22272 } 22273 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc && (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum&SPELLFIX_IDXNUM_TOP == 0 { 22274 spellfix1ResizeCursor(tls, pCur, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc*2+10) 22275 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) { 22276 break 22277 } 22278 } 22279 } 22280 22281 iScore = spellfix1Score(tls, iDist, iRank) 22282 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 22283 idx = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 22284 } else if iScore < iWorst { 22285 idx = idxWorst 22286 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord) 22287 } else { 22288 continue 22289 } 22290 22291 (*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))) 22292 if (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord == uintptr(0) { 22293 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 22294 break 22295 } 22296 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRowid = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 22297 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRank = iRank 22298 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiDistance = iDist 22299 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiScore = iScore 22300 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiMatchlen = *(*int32)(unsafe.Pointer(bp + 72)) 22301 libc.Xmemcpy(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64+32, bp+8, uint64(iScope+1)) 22302 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 22303 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow++ 22304 } 22305 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow == (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 22306 iWorst = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa)).FiScore 22307 idxWorst = 0 22308 for i = 1; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 22309 iScore = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(i)*64)).FiScore 22310 if iWorst < iScore { 22311 iWorst = iScore 22312 idxWorst = i 22313 } 22314 } 22315 } 22316 } 22317 rc = sqlite3.Xsqlite3_reset(tls, pStmt) 22318 if rc != 0 { 22319 (*MatchQuery)(unsafe.Pointer(p)).Frc = rc 22320 } 22321 } 22322 22323 func spellfix1FilterForMatch(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 22324 bp := tls.Alloc(176) 22325 defer tls.Free(176) 22326 22327 var idxNum int32 22328 var zMatchThis uintptr 22329 var pMatchStr3 uintptr 22330 var zPattern uintptr 22331 var nPattern int32 22332 var iLimit int32 22333 var iScope int32 22334 var iLang int32 22335 var zSql uintptr 22336 22337 var rc int32 22338 var idx int32 22339 var p uintptr 22340 22341 idxNum = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 22342 pMatchStr3 = uintptr(0) 22343 iLimit = 20 22344 iScope = 3 22345 iLang = 0 22346 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 22347 idx = 1 22348 p = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 22349 22350 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable != uintptr(0) && (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 22351 goto __1 22352 } 22353 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 22354 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 22355 goto __2 22356 } 22357 return SQLITE_NOMEM 22358 __2: 22359 ; 22360 libc.Xmemset(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, 0, uint64(unsafe.Sizeof(EditDist3Config{}))) 22361 rc = editDist3ConfigLoad(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22362 if !(rc != 0) { 22363 goto __3 22364 } 22365 return rc 22366 __3: 22367 ; 22368 __1: 22369 ; 22370 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(MatchQuery{}))) 22371 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 3 22372 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = -1 22373 22374 if !(idxNum&2 != 0) { 22375 goto __4 22376 } 22377 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 22378 __4: 22379 ; 22380 if !(idxNum&4 != 0) { 22381 goto __5 22382 } 22383 iLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 22384 if !(iLimit < 1) { 22385 goto __6 22386 } 22387 iLimit = 1 22388 __6: 22389 ; 22390 __5: 22391 ; 22392 if !(idxNum&8 != 0) { 22393 goto __7 22394 } 22395 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 22396 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope < 1) { 22397 goto __8 22398 } 22399 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 1 22400 __8: 22401 ; 22402 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope > SPELLFIX_MX_HASH-2) { 22403 goto __9 22404 } 22405 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = SPELLFIX_MX_HASH - 2 22406 __9: 22407 ; 22408 __7: 22409 ; 22410 if !(idxNum&(16|32) != 0) { 22411 goto __10 22412 } 22413 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 22414 if !(idxNum&16 != 0) { 22415 goto __11 22416 } 22417 (*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist-- 22418 __11: 22419 ; 22420 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist < 0) { 22421 goto __12 22422 } 22423 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = 0 22424 __12: 22425 ; 22426 __10: 22427 ; 22428 spellfix1ResetCursor(tls, pCur) 22429 spellfix1ResizeCursor(tls, pCur, iLimit) 22430 zMatchThis = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22431 if !(zMatchThis == uintptr(0)) { 22432 goto __13 22433 } 22434 return SQLITE_OK 22435 __13: 22436 ; 22437 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 != 0) { 22438 goto __14 22439 } 22440 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = editDist3FindLang(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, iLang) 22441 pMatchStr3 = editDist3FromStringNew(tls, (*MatchQuery)(unsafe.Pointer(bp+24)).FpLang, zMatchThis, -1) 22442 if !(pMatchStr3 == uintptr(0)) { 22443 goto __16 22444 } 22445 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22446 goto filter_exit 22447 __16: 22448 ; 22449 goto __15 22450 __14: 22451 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = uintptr(0) 22452 __15: 22453 ; 22454 zPattern = transliterate(tls, zMatchThis, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22455 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 22456 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern = zPattern 22457 if !(zPattern == uintptr(0)) { 22458 goto __17 22459 } 22460 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22461 goto filter_exit 22462 __17: 22463 ; 22464 nPattern = int32(libc.Xstrlen(tls, zPattern)) 22465 if !(int32(*(*uint8)(unsafe.Pointer(zPattern + uintptr(nPattern-1)))) == '*') { 22466 goto __18 22467 } 22468 nPattern-- 22469 __18: 22470 ; 22471 zSql = sqlite3.Xsqlite3_mprintf(tls, 22472 ts+7650, 22473 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, iLang)) 22474 if !(zSql == uintptr(0)) { 22475 goto __19 22476 } 22477 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22478 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 22479 goto filter_exit 22480 __19: 22481 ; 22482 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, bp+168, uintptr(0)) 22483 sqlite3.Xsqlite3_free(tls, zSql) 22484 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang = iLang 22485 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpCur = pCur 22486 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpStmt = *(*uintptr)(unsafe.Pointer(bp + 168)) 22487 (*MatchQuery)(unsafe.Pointer(bp + 24)).FzPattern = zPattern 22488 (*MatchQuery)(unsafe.Pointer(bp + 24)).FnPattern = nPattern 22489 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpMatchStr3 = pMatchStr3 22490 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiLang = iLang 22491 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = rc 22492 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpConfig3 = (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 22493 if !((*MatchQuery)(unsafe.Pointer(bp+24)).Frc == SQLITE_OK) { 22494 goto __20 22495 } 22496 spellfix1RunQuery(tls, bp+24, zPattern, nPattern) 22497 __20: 22498 ; 22499 if !((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa != 0) { 22500 goto __21 22501 } 22502 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 { 22503 f func(*libc.TLS, uintptr, uintptr) int32 22504 }{spellfix1RowCompare}))) 22505 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop = iLimit 22506 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope = iScope 22507 goto __22 22508 __21: 22509 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 22510 __22: 22511 ; 22512 filter_exit: 22513 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 22514 editDist3FromStringDelete(tls, pMatchStr3) 22515 return (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc 22516 } 22517 22518 func spellfix1FilterForFullScan(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 22519 bp := tls.Alloc(24) 22520 defer tls.Free(24) 22521 22522 var rc int32 = SQLITE_OK 22523 var idxNum int32 = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 22524 var zSql uintptr 22525 var pVTab uintptr = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 22526 spellfix1ResetCursor(tls, pCur) 22527 22528 zSql = sqlite3.Xsqlite3_mprintf(tls, 22529 ts+7750, 22530 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzTableName, 22531 func() uintptr { 22532 if idxNum&64 != 0 { 22533 return ts + 7809 22534 } 22535 return ts + 584 22536 }())) 22537 if zSql == uintptr(0) { 22538 return SQLITE_NOMEM 22539 } 22540 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).Fdb, zSql, -1, pCur+56, uintptr(0)) 22541 sqlite3.Xsqlite3_free(tls, zSql) 22542 if rc == SQLITE_OK && idxNum&64 != 0 { 22543 rc = sqlite3.Xsqlite3_bind_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 1, *(*uintptr)(unsafe.Pointer(argv))) 22544 } 22545 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = libc.AssignPtrInt32(pCur+36, 0) 22546 if rc == SQLITE_OK { 22547 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 22548 if rc == SQLITE_ROW { 22549 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = -1 22550 rc = SQLITE_OK 22551 } 22552 if rc == SQLITE_DONE { 22553 rc = SQLITE_OK 22554 } 22555 } else { 22556 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 22557 } 22558 return rc 22559 } 22560 22561 func spellfix1Filter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 22562 var pCur uintptr = cur 22563 var rc int32 22564 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum = idxNum 22565 if idxNum&1 != 0 { 22566 rc = spellfix1FilterForMatch(tls, pCur, argc, argv) 22567 } else { 22568 rc = spellfix1FilterForFullScan(tls, pCur, argc, argv) 22569 } 22570 return rc 22571 } 22572 22573 func spellfix1Next(tls *libc.TLS, cur uintptr) int32 { 22574 var pCur uintptr = cur 22575 var rc int32 = SQLITE_OK 22576 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow { 22577 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22578 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 22579 if rc != SQLITE_ROW { 22580 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 22581 } 22582 if rc == SQLITE_ROW || rc == SQLITE_DONE { 22583 rc = SQLITE_OK 22584 } 22585 } else { 22586 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow++ 22587 } 22588 } 22589 return rc 22590 } 22591 22592 func spellfix1Eof(tls *libc.TLS, cur uintptr) int32 { 22593 var pCur uintptr = cur 22594 return libc.Bool32((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow) 22595 } 22596 22597 func spellfix1Column(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 22598 bp := tls.Alloc(4) 22599 defer tls.Free(4) 22600 22601 var pCur uintptr = cur 22602 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22603 if i <= SPELLFIX_COL_LANGID { 22604 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, i)) 22605 } else { 22606 sqlite3.Xsqlite3_result_null(tls, ctx) 22607 } 22608 return SQLITE_OK 22609 } 22610 switch i { 22611 case SPELLFIX_COL_WORD: 22612 { 22613 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)) 22614 break 22615 22616 } 22617 case SPELLFIX_COL_RANK: 22618 { 22619 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) 22620 break 22621 22622 } 22623 case SPELLFIX_COL_DISTANCE: 22624 { 22625 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) 22626 break 22627 22628 } 22629 case SPELLFIX_COL_LANGID: 22630 { 22631 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang) 22632 break 22633 22634 } 22635 case SPELLFIX_COL_SCORE: 22636 { 22637 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) 22638 break 22639 22640 } 22641 case SPELLFIX_COL_MATCHLEN: 22642 { 22643 *(*int32)(unsafe.Pointer(bp)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiMatchlen 22644 if *(*int32)(unsafe.Pointer(bp)) < 0 { 22645 var nPattern int32 = int32(libc.Xstrlen(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern)) 22646 var zWord uintptr = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FzWord 22647 var nWord int32 = int32(libc.Xstrlen(tls, zWord)) 22648 22649 if nPattern > 0 && int32(*(*uint8)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern + uintptr(nPattern-1)))) == '*' { 22650 var zTranslit uintptr 22651 var res int32 22652 zTranslit = transliterate(tls, zWord, nWord) 22653 if !(zTranslit != 0) { 22654 return SQLITE_NOMEM 22655 } 22656 res = editdist1(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern, zTranslit, bp) 22657 sqlite3.Xsqlite3_free(tls, zTranslit) 22658 if res < 0 { 22659 return SQLITE_NOMEM 22660 } 22661 *(*int32)(unsafe.Pointer(bp)) = translen_to_charlen(tls, zWord, nWord, *(*int32)(unsafe.Pointer(bp))) 22662 } else { 22663 *(*int32)(unsafe.Pointer(bp)) = utf8Charlen(tls, zWord, nWord) 22664 } 22665 } 22666 22667 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(bp))) 22668 break 22669 22670 } 22671 case SPELLFIX_COL_PHONEHASH: 22672 { 22673 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64+32, -1, uintptr(0)) 22674 break 22675 22676 } 22677 case SPELLFIX_COL_TOP: 22678 { 22679 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop) 22680 break 22681 22682 } 22683 case SPELLFIX_COL_SCOPE: 22684 { 22685 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope) 22686 break 22687 22688 } 22689 case SPELLFIX_COL_SRCHCNT: 22690 { 22691 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch) 22692 break 22693 22694 } 22695 default: 22696 { 22697 sqlite3.Xsqlite3_result_null(tls, ctx) 22698 break 22699 22700 } 22701 } 22702 return SQLITE_OK 22703 } 22704 22705 func spellfix1Rowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 22706 var pCur uintptr = cur 22707 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 22708 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 4) 22709 } else { 22710 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiRowid 22711 } 22712 return SQLITE_OK 22713 } 22714 22715 func spellfix1GetConflict(tls *libc.TLS, db uintptr) uintptr { 22716 var eConflict int32 = sqlite3.Xsqlite3_vtab_on_conflict(tls, db) 22717 22718 return azConflict[eConflict-1] 22719 } 22720 22721 var azConflict = [5]uintptr{ 22722 ts + 7824, ts + 7833, ts + 7840, ts + 7840, ts + 7846, 22723 } 22724 22725 func spellfix1Update(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 22726 bp := tls.Alloc(284) 22727 defer tls.Free(284) 22728 22729 *(*int32)(unsafe.Pointer(bp + 280)) = SQLITE_OK 22730 var rowid sqlite3_int64 22731 var newRowid sqlite3_int64 22732 var p uintptr = pVTab 22733 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 22734 22735 if argc == 1 { 22736 rowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22737 spellfix1DbExec(tls, bp+280, db, 22738 ts+7854, 22739 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, rowid)) 22740 } else { 22741 var zWord uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 22742 var nWord int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 22743 var iLang int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 22744 var iRank int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 22745 var zSoundslike uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 22746 var nSoundslike int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 22747 var zK1 uintptr 22748 var zK2 uintptr 22749 var i int32 22750 var c uint8 22751 var zConflict uintptr = spellfix1GetConflict(tls, db) 22752 22753 if zWord == uintptr(0) { 22754 var zCmd uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 13*8))) 22755 if zCmd == uintptr(0) { 22756 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7897, 22757 libc.VaList(bp+24, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 22758 return SQLITE_CONSTRAINT | int32(5)<<8 22759 } 22760 if libc.Xstrcmp(tls, zCmd, ts+7933) == 0 { 22761 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 22762 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 22763 return SQLITE_OK 22764 } 22765 if libc.Xstrncmp(tls, zCmd, ts+7599, uint64(16)) == 0 { 22766 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 22767 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 22768 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22769 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = spellfix1Dequote(tls, zCmd+uintptr(16)) 22770 if (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable == uintptr(0) { 22771 return SQLITE_NOMEM 22772 } 22773 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 { 22774 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 22775 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = uintptr(0) 22776 } 22777 return SQLITE_OK 22778 } 22779 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7944, 22780 libc.VaList(bp+32, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zCmd)) 22781 return SQLITE_ERROR 22782 } 22783 if iRank < 1 { 22784 iRank = 1 22785 } 22786 if zSoundslike != 0 { 22787 zK1 = transliterate(tls, zSoundslike, nSoundslike) 22788 } else { 22789 zK1 = transliterate(tls, zWord, nWord) 22790 } 22791 if zK1 == uintptr(0) { 22792 return SQLITE_NOMEM 22793 } 22794 for i = 0; int32(libc.AssignUint8(&c, *(*uint8)(unsafe.Pointer(zK1 + uintptr(i))))) != 0; i++ { 22795 if int32(c) >= 'A' && int32(c) <= 'Z' { 22796 *(*uint8)(unsafe.Pointer(zK1 + uintptr(i))) += uint8('a' - 'A') 22797 } 22798 } 22799 zK2 = phoneticHash(tls, zK1, i) 22800 if zK2 == uintptr(0) { 22801 sqlite3.Xsqlite3_free(tls, zK1) 22802 return SQLITE_NOMEM 22803 } 22804 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 22805 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_NULL { 22806 spellfix1DbExec(tls, bp+280, db, 22807 ts+7979, 22808 libc.VaList(bp+48, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 22809 iRank, iLang, zWord, zK1, zWord, zK2)) 22810 } else { 22811 newRowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 22812 spellfix1DbExec(tls, bp+280, db, 22813 ts+8065, 22814 libc.VaList(bp+112, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 22815 newRowid, iRank, iLang, zWord, zK1, zWord, zK2)) 22816 } 22817 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 22818 } else { 22819 rowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 22820 newRowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 22821 spellfix1DbExec(tls, bp+280, db, 22822 ts+8165, 22823 libc.VaList(bp+192, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, newRowid, iRank, iLang, 22824 zWord, zK1, zWord, zK2, rowid)) 22825 } 22826 sqlite3.Xsqlite3_free(tls, zK1) 22827 sqlite3.Xsqlite3_free(tls, zK2) 22828 } 22829 return *(*int32)(unsafe.Pointer(bp + 280)) 22830 } 22831 22832 func spellfix1Rename(tls *libc.TLS, pVTab uintptr, zNew uintptr) int32 { 22833 bp := tls.Alloc(36) 22834 defer tls.Free(36) 22835 22836 var p uintptr = pVTab 22837 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 22838 *(*int32)(unsafe.Pointer(bp + 32)) = SQLITE_OK 22839 var zNewName uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zNew)) 22840 if zNewName == uintptr(0) { 22841 return SQLITE_NOMEM 22842 } 22843 spellfix1DbExec(tls, bp+32, db, 22844 ts+8274, 22845 libc.VaList(bp+8, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zNewName)) 22846 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK { 22847 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 22848 (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName = zNewName 22849 } else { 22850 sqlite3.Xsqlite3_free(tls, zNewName) 22851 } 22852 return *(*int32)(unsafe.Pointer(bp + 32)) 22853 } 22854 22855 var spellfix1Module = sqlite3_module{ 22856 FxCreate: 0, 22857 FxConnect: 0, 22858 FxBestIndex: 0, 22859 FxDisconnect: 0, 22860 FxDestroy: 0, 22861 FxOpen: 0, 22862 FxClose: 0, 22863 FxFilter: 0, 22864 FxNext: 0, 22865 FxEof: 0, 22866 FxColumn: 0, 22867 FxRowid: 0, 22868 FxUpdate: 0, 22869 FxRename: 0, 22870 } 22871 22872 func spellfix1Register(tls *libc.TLS, db uintptr) int32 { 22873 var rc int32 = SQLITE_OK 22874 var i int32 22875 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8323, 1, 22876 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22877 *(*uintptr)(unsafe.Pointer(&struct { 22878 f func(*libc.TLS, uintptr, int32, uintptr) 22879 }{transliterateSqlFunc})), uintptr(0), uintptr(0)) 22880 if rc == SQLITE_OK { 22881 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8342, 2, 22882 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22883 *(*uintptr)(unsafe.Pointer(&struct { 22884 f func(*libc.TLS, uintptr, int32, uintptr) 22885 }{editdistSqlFunc})), uintptr(0), uintptr(0)) 22886 } 22887 if rc == SQLITE_OK { 22888 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8361, 1, 22889 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22890 *(*uintptr)(unsafe.Pointer(&struct { 22891 f func(*libc.TLS, uintptr, int32, uintptr) 22892 }{phoneticHashSqlFunc})), uintptr(0), uintptr(0)) 22893 } 22894 if rc == SQLITE_OK { 22895 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8381, 1, 22896 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 22897 *(*uintptr)(unsafe.Pointer(&struct { 22898 f func(*libc.TLS, uintptr, int32, uintptr) 22899 }{scriptCodeSqlFunc})), uintptr(0), uintptr(0)) 22900 } 22901 if rc == SQLITE_OK { 22902 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8402, uintptr(unsafe.Pointer(&spellfix1Module)), uintptr(0)) 22903 } 22904 if rc == SQLITE_OK { 22905 rc = editDist3Install(tls, db) 22906 } 22907 22908 for i = 0; uint64(i) < uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{}))-uint64(1); i++ { 22909 } 22910 22911 return rc 22912 } 22913 22914 func sqlite3_spellfix_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 22915 _ = pApi 22916 22917 return spellfix1Register(tls, db) 22918 return SQLITE_OK 22919 } 22920 22921 var totype_one int32 = 1 22922 22923 func totypeIsspace(tls *libc.TLS, c uint8) int32 { 22924 return libc.Bool32(int32(c) == ' ' || int32(c) == '\t' || int32(c) == '\n' || int32(c) == '\v' || int32(c) == '\f' || int32(c) == '\r') 22925 } 22926 22927 func totypeIsdigit(tls *libc.TLS, c uint8) int32 { 22928 return libc.Bool32(int32(c) >= '0' && int32(c) <= '9') 22929 } 22930 22931 func totypeCompare2pow63(tls *libc.TLS, zNum uintptr) int32 { 22932 var c int32 = 0 22933 var i int32 22934 22935 var pow63 uintptr = ts + 8412 22936 for i = 0; c == 0 && i < 18; i++ { 22937 c = (int32(*(*uint8)(unsafe.Pointer(zNum + uintptr(i)))) - int32(*(*uint8)(unsafe.Pointer(pow63 + uintptr(i))))) * 10 22938 } 22939 if c == 0 { 22940 c = int32(*(*uint8)(unsafe.Pointer(zNum + 18))) - '8' 22941 } 22942 return c 22943 } 22944 22945 func totypeAtoi64(tls *libc.TLS, zNum uintptr, pNum uintptr, length int32) int32 { 22946 var u sqlite3_uint64 = uint64(0) 22947 var neg int32 = 0 22948 var i int32 22949 var c int32 = 0 22950 var nonNum int32 = 0 22951 var zStart uintptr 22952 var zEnd uintptr = zNum + uintptr(length) 22953 22954 for zNum < zEnd && totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zNum))) != 0 { 22955 zNum++ 22956 } 22957 if zNum < zEnd { 22958 if int32(*(*uint8)(unsafe.Pointer(zNum))) == '-' { 22959 neg = 1 22960 zNum++ 22961 } else if int32(*(*uint8)(unsafe.Pointer(zNum))) == '+' { 22962 zNum++ 22963 } 22964 } 22965 zStart = zNum 22966 for zNum < zEnd && int32(*(*uint8)(unsafe.Pointer(zNum))) == '0' { 22967 zNum++ 22968 } 22969 for i = 0; zNum+uintptr(i) < zEnd && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(zNum + uintptr(i))))) >= '0' && c <= '9'; i++ { 22970 u = u*uint64(10) + sqlite3_uint64(c) - uint64('0') 22971 } 22972 if u > uint64(int64(0xffffffff)|int64(0x7fffffff)<<32) { 22973 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 22974 } else if neg != 0 { 22975 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = -sqlite3_int64(u) 22976 } else { 22977 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = sqlite3_int64(u) 22978 } 22979 if c != 0 && zNum+uintptr(i) < zEnd || i == 0 && zStart == zNum || i > 19 || nonNum != 0 { 22980 return 1 22981 } else if i < 19 { 22982 return 0 22983 } else { 22984 c = totypeCompare2pow63(tls, zNum) 22985 if c < 0 { 22986 return 0 22987 } else if c > 0 { 22988 return 1 22989 } else { 22990 if neg != 0 { 22991 return 0 22992 } 22993 return 2 22994 } 22995 } 22996 return int32(0) 22997 } 22998 22999 func totypeAtoF(tls *libc.TLS, z uintptr, pResult uintptr, length int32) int32 { 23000 var zEnd uintptr 23001 23002 var sign int32 23003 var s sqlite3_int64 23004 var d int32 23005 var esign int32 23006 var e int32 23007 var eValid int32 23008 var result float64 23009 var nDigits int32 23010 var nonNum int32 23011 var scale float64 23012 zEnd = z + uintptr(length) 23013 sign = 1 23014 s = int64(0) 23015 d = 0 23016 esign = 1 23017 e = 0 23018 eValid = 1 23019 nDigits = 0 23020 nonNum = 0 23021 23022 *(*float64)(unsafe.Pointer(pResult)) = 0.0 23023 23024 __1: 23025 if !(z < zEnd && totypeIsspace(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 23026 goto __2 23027 } 23028 z++ 23029 goto __1 23030 __2: 23031 ; 23032 if !(z >= zEnd) { 23033 goto __3 23034 } 23035 return 0 23036 __3: 23037 ; 23038 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '-') { 23039 goto __4 23040 } 23041 sign = -1 23042 z++ 23043 goto __5 23044 __4: 23045 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '+') { 23046 goto __6 23047 } 23048 z++ 23049 __6: 23050 ; 23051 __5: 23052 ; 23053 __7: 23054 if !(z < zEnd && int32(*(*uint8)(unsafe.Pointer(z))) == '0') { 23055 goto __8 23056 } 23057 z++ 23058 nDigits++ 23059 goto __7 23060 __8: 23061 ; 23062 __9: 23063 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 23064 goto __10 23065 } 23066 s = s*int64(10) + sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(z)))-'0') 23067 z++ 23068 nDigits++ 23069 goto __9 23070 __10: 23071 ; 23072 __11: 23073 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 23074 goto __12 23075 } 23076 z++ 23077 nDigits++ 23078 d++ 23079 goto __11 23080 __12: 23081 ; 23082 if !(z >= zEnd) { 23083 goto __13 23084 } 23085 goto totype_atof_calc 23086 __13: 23087 ; 23088 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '.') { 23089 goto __14 23090 } 23091 z++ 23092 23093 __15: 23094 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 23095 goto __16 23096 } 23097 s = s*int64(10) + sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(z)))-'0') 23098 z++ 23099 nDigits++ 23100 d-- 23101 goto __15 23102 __16: 23103 ; 23104 __17: 23105 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 23106 goto __18 23107 } 23108 z++ 23109 nDigits++ 23110 goto __17 23111 __18: 23112 ; 23113 __14: 23114 ; 23115 if !(z >= zEnd) { 23116 goto __19 23117 } 23118 goto totype_atof_calc 23119 __19: 23120 ; 23121 if !(int32(*(*uint8)(unsafe.Pointer(z))) == 'e' || int32(*(*uint8)(unsafe.Pointer(z))) == 'E') { 23122 goto __20 23123 } 23124 z++ 23125 eValid = 0 23126 if !(z >= zEnd) { 23127 goto __21 23128 } 23129 goto totype_atof_calc 23130 __21: 23131 ; 23132 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '-') { 23133 goto __22 23134 } 23135 esign = -1 23136 z++ 23137 goto __23 23138 __22: 23139 if !(int32(*(*uint8)(unsafe.Pointer(z))) == '+') { 23140 goto __24 23141 } 23142 z++ 23143 __24: 23144 ; 23145 __23: 23146 ; 23147 __25: 23148 if !(z < zEnd && totypeIsdigit(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 23149 goto __26 23150 } 23151 if e < 10000 { 23152 e = e*10 + (int32(*(*uint8)(unsafe.Pointer(z))) - '0') 23153 } else { 23154 e = 10000 23155 } 23156 z++ 23157 eValid = 1 23158 goto __25 23159 __26: 23160 ; 23161 __20: 23162 ; 23163 if !(nDigits != 0 && eValid != 0) { 23164 goto __27 23165 } 23166 __28: 23167 if !(z < zEnd && totypeIsspace(tls, *(*uint8)(unsafe.Pointer(z))) != 0) { 23168 goto __29 23169 } 23170 z++ 23171 goto __28 23172 __29: 23173 ; 23174 __27: 23175 ; 23176 totype_atof_calc: 23177 e = e*esign + d 23178 if !(e < 0) { 23179 goto __30 23180 } 23181 esign = -1 23182 e = e * -1 23183 goto __31 23184 __30: 23185 esign = 1 23186 __31: 23187 ; 23188 if !!(s != 0) { 23189 goto __32 23190 } 23191 23192 if sign < 0 && nDigits != 0 { 23193 result = -libc.Float64FromFloat64(float64(0)) 23194 } else { 23195 result = float64(0) 23196 } 23197 goto __33 23198 __32: 23199 if !(esign > 0) { 23200 goto __34 23201 } 23202 __36: 23203 if !(s < (int64(0xffffffff)|int64(0x7fffffff)<<32)/int64(10) && e > 0) { 23204 goto __37 23205 } 23206 e-- 23207 s = s * int64(10) 23208 goto __36 23209 __37: 23210 ; 23211 goto __35 23212 __34: 23213 __38: 23214 if !(!(int32(s%int64(10)) != 0) && e > 0) { 23215 goto __39 23216 } 23217 e-- 23218 s = s / int64(10) 23219 goto __38 23220 __39: 23221 ; 23222 __35: 23223 ; 23224 if sign < 0 { 23225 s = -s 23226 } else { 23227 s = s 23228 } 23229 23230 if !(e != 0) { 23231 goto __40 23232 } 23233 scale = 1.0 23234 23235 if !(e > 307 && e < 342) { 23236 goto __42 23237 } 23238 __44: 23239 if !(e%308 != 0) { 23240 goto __45 23241 } 23242 scale = scale * 1.0e+1 23243 e = e - 1 23244 goto __44 23245 __45: 23246 ; 23247 if !(esign < 0) { 23248 goto __46 23249 } 23250 result = float64(s) / scale 23251 result = result / 1.0e+308 23252 goto __47 23253 __46: 23254 result = float64(s) * scale 23255 result = result * 1.0e+308 23256 __47: 23257 ; 23258 goto __43 23259 __42: 23260 if !(e >= 342) { 23261 goto __48 23262 } 23263 if !(esign < 0) { 23264 goto __50 23265 } 23266 result = 0.0 * float64(s) 23267 goto __51 23268 __50: 23269 result = libc.Float64(1e308) * libc.Float64(1e308) * float64(s) 23270 __51: 23271 ; 23272 goto __49 23273 __48: 23274 __52: 23275 if !(e%22 != 0) { 23276 goto __53 23277 } 23278 scale = scale * 1.0e+1 23279 e = e - 1 23280 goto __52 23281 __53: 23282 ; 23283 __54: 23284 if !(e > 0) { 23285 goto __55 23286 } 23287 scale = scale * 1.0e+22 23288 e = e - 22 23289 goto __54 23290 __55: 23291 ; 23292 if !(esign < 0) { 23293 goto __56 23294 } 23295 result = float64(s) / scale 23296 goto __57 23297 __56: 23298 result = float64(s) * scale 23299 __57: 23300 ; 23301 __49: 23302 ; 23303 __43: 23304 ; 23305 goto __41 23306 __40: 23307 result = float64(s) 23308 __41: 23309 ; 23310 __33: 23311 ; 23312 *(*float64)(unsafe.Pointer(pResult)) = result 23313 23314 return libc.Bool32(z >= zEnd && nDigits > 0 && eValid != 0 && nonNum == 0) 23315 } 23316 23317 func tointegerFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 23318 bp := tls.Alloc(24) 23319 defer tls.Free(24) 23320 23321 _ = argc 23322 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 23323 case SQLITE_FLOAT: 23324 { 23325 var rVal float64 = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 23326 var iVal sqlite3_int64 = sqlite3_int64(rVal) 23327 if rVal == float64(iVal) { 23328 sqlite3.Xsqlite3_result_int64(tls, context, iVal) 23329 } 23330 break 23331 23332 } 23333 case SQLITE_INTEGER: 23334 { 23335 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 23336 break 23337 23338 } 23339 case SQLITE_BLOB: 23340 { 23341 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 23342 if zBlob != 0 { 23343 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23344 if uint64(nBlob) == uint64(unsafe.Sizeof(sqlite3_int64(0))) { 23345 if int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&totype_one))))) == 0 { 23346 var i int32 23347 23348 for i = 0; uint64(i) < uint64(unsafe.Sizeof(sqlite3_int64(0))); i++ { 23349 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(sqlite3_int64(0)))-uint64(1)-uint64(i)))) 23350 } 23351 libc.Xmemcpy(tls, bp+8, bp, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 23352 } else { 23353 libc.Xmemcpy(tls, bp+8, zBlob, uint64(unsafe.Sizeof(sqlite3_int64(0)))) 23354 } 23355 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))) 23356 } 23357 } 23358 break 23359 23360 } 23361 case SQLITE_TEXT: 23362 { 23363 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 23364 if zStr != 0 { 23365 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23366 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) { 23367 if !(totypeAtoi64(tls, zStr, bp+16, nStr) != 0) { 23368 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 23369 } 23370 } 23371 } 23372 break 23373 23374 } 23375 default: 23376 { 23377 break 23378 23379 } 23380 } 23381 } 23382 23383 func torealFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 23384 bp := tls.Alloc(24) 23385 defer tls.Free(24) 23386 23387 _ = argc 23388 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 23389 case SQLITE_FLOAT: 23390 { 23391 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv)))) 23392 break 23393 23394 } 23395 case SQLITE_INTEGER: 23396 { 23397 var iVal sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 23398 var rVal float64 = float64(iVal) 23399 if iVal == sqlite3_int64(rVal) { 23400 sqlite3.Xsqlite3_result_double(tls, context, rVal) 23401 } 23402 break 23403 23404 } 23405 case SQLITE_BLOB: 23406 { 23407 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 23408 if zBlob != 0 { 23409 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23410 if uint64(nBlob) == uint64(unsafe.Sizeof(float64(0))) { 23411 if int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&totype_one))))) == 1 { 23412 var i int32 23413 23414 for i = 0; uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 23415 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(1)-uint64(i)))) 23416 } 23417 libc.Xmemcpy(tls, bp+8, bp, uint64(unsafe.Sizeof(float64(0)))) 23418 } else { 23419 libc.Xmemcpy(tls, bp+8, zBlob, uint64(unsafe.Sizeof(float64(0)))) 23420 } 23421 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 8))) 23422 } 23423 } 23424 break 23425 23426 } 23427 case SQLITE_TEXT: 23428 { 23429 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 23430 if zStr != 0 { 23431 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23432 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr + uintptr(nStr-1)))) != 0) { 23433 if totypeAtoF(tls, zStr, bp+16, nStr) != 0 { 23434 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 16))) 23435 return 23436 } 23437 } 23438 } 23439 break 23440 23441 } 23442 default: 23443 { 23444 break 23445 23446 } 23447 } 23448 } 23449 23450 func sqlite3_totype_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 23451 var rc int32 = SQLITE_OK 23452 _ = pApi 23453 23454 _ = pzErrMsg 23455 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8431, 1, 23456 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 23457 *(*uintptr)(unsafe.Pointer(&struct { 23458 f func(*libc.TLS, uintptr, int32, uintptr) 23459 }{tointegerFunc})), uintptr(0), uintptr(0)) 23460 if rc == SQLITE_OK { 23461 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8441, 1, 23462 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 23463 *(*uintptr)(unsafe.Pointer(&struct { 23464 f func(*libc.TLS, uintptr, int32, uintptr) 23465 }{torealFunc})), uintptr(0), uintptr(0)) 23466 } 23467 return rc 23468 } 23469 23470 type UnionCsr1 = struct { 23471 Fbase sqlite3_vtab_cursor 23472 FpStmt uintptr 23473 FiMaxRowid sqlite3_int64 23474 FiTab int32 23475 F__ccgo_pad1 [4]byte 23476 } 23477 23478 type UnionCsr = UnionCsr1 23479 type UnionTab1 = struct { 23480 Fbase sqlite3_vtab 23481 Fdb uintptr 23482 FbSwarm int32 23483 FiPK int32 23484 FnSrc int32 23485 F__ccgo_pad1 [4]byte 23486 FaSrc uintptr 23487 FbHasContext int32 23488 F__ccgo_pad2 [4]byte 23489 FzSourceStr uintptr 23490 FpNotFound uintptr 23491 FpOpenClose uintptr 23492 FpClosable uintptr 23493 FnOpen int32 23494 FnMaxOpen int32 23495 } 23496 23497 type UnionTab = UnionTab1 23498 type UnionSrc1 = struct { 23499 FzDb uintptr 23500 FzTab uintptr 23501 FiMin sqlite3_int64 23502 FiMax sqlite3_int64 23503 FzFile uintptr 23504 FzContext uintptr 23505 FnUser int32 23506 F__ccgo_pad1 [4]byte 23507 Fdb uintptr 23508 FpNextClosable uintptr 23509 } 23510 23511 type UnionSrc = UnionSrc1 23512 23513 func unionMalloc(tls *libc.TLS, pRc uintptr, nByte sqlite3_int64) uintptr { 23514 var pRet uintptr 23515 23516 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23517 pRet = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 23518 if pRet != 0 { 23519 libc.Xmemset(tls, pRet, 0, size_t(nByte)) 23520 } else { 23521 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 23522 } 23523 } else { 23524 pRet = uintptr(0) 23525 } 23526 return pRet 23527 } 23528 23529 func unionStrdup(tls *libc.TLS, pRc uintptr, zIn uintptr) uintptr { 23530 var zRet uintptr = uintptr(0) 23531 if zIn != 0 { 23532 var nByte sqlite3_int64 = sqlite3_int64(libc.Xstrlen(tls, zIn) + uint64(1)) 23533 zRet = unionMalloc(tls, pRc, nByte) 23534 if zRet != 0 { 23535 libc.Xmemcpy(tls, zRet, zIn, size_t(nByte)) 23536 } 23537 } 23538 return zRet 23539 } 23540 23541 func unionDequote(tls *libc.TLS, z uintptr) { 23542 if z != 0 { 23543 var q uint8 = *(*uint8)(unsafe.Pointer(z)) 23544 23545 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 23546 var iIn int32 = 1 23547 var iOut int32 = 0 23548 if int32(q) == '[' { 23549 q = uint8(']') 23550 } 23551 for *(*uint8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 23552 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 23553 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 23554 iIn++ 23555 break 23556 } else { 23557 iIn = iIn + 2 23558 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 23559 } 23560 } else { 23561 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 23562 } 23563 } 23564 *(*uint8)(unsafe.Pointer(z + uintptr(iOut))) = uint8(0) 23565 } 23566 } 23567 } 23568 23569 func unionPrepare(tls *libc.TLS, pRc uintptr, db uintptr, zSql uintptr, pzErr uintptr) uintptr { 23570 bp := tls.Alloc(16) 23571 defer tls.Free(16) 23572 23573 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 23574 23575 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23576 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 23577 if rc != SQLITE_OK { 23578 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8448, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 23579 *(*int32)(unsafe.Pointer(pRc)) = rc 23580 } 23581 } 23582 return *(*uintptr)(unsafe.Pointer(bp + 8)) 23583 } 23584 23585 func unionPreparePrintf(tls *libc.TLS, pRc uintptr, pzErr uintptr, db uintptr, zFmt uintptr, va uintptr) uintptr { 23586 var pRet uintptr = uintptr(0) 23587 var zSql uintptr 23588 var ap va_list 23589 _ = ap 23590 ap = va 23591 23592 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 23593 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23594 if zSql == uintptr(0) { 23595 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 23596 } else { 23597 pRet = unionPrepare(tls, pRc, db, zSql, pzErr) 23598 } 23599 } 23600 sqlite3.Xsqlite3_free(tls, zSql) 23601 23602 _ = ap 23603 return pRet 23604 } 23605 23606 func unionFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr, pzErr uintptr) { 23607 bp := tls.Alloc(8) 23608 defer tls.Free(8) 23609 23610 var db uintptr = sqlite3.Xsqlite3_db_handle(tls, pStmt) 23611 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 23612 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23613 *(*int32)(unsafe.Pointer(pRc)) = rc 23614 if rc != 0 { 23615 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 23616 } 23617 } 23618 } 23619 23620 func unionInvokeOpenClose(tls *libc.TLS, pTab uintptr, pSrc uintptr, bClose int32, pzErr uintptr) int32 { 23621 bp := tls.Alloc(8) 23622 defer tls.Free(8) 23623 23624 var rc int32 = SQLITE_OK 23625 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 23626 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 23627 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23628 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 23629 } 23630 sqlite3.Xsqlite3_bind_int(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2+(*UnionTab)(unsafe.Pointer(pTab)).FbHasContext, bClose) 23631 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 23632 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose)) { 23633 if pzErr != 0 { 23634 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 23635 } 23636 } 23637 } 23638 return rc 23639 } 23640 23641 func unionCloseSources(tls *libc.TLS, pTab uintptr, nMax int32) { 23642 for (*UnionTab)(unsafe.Pointer(pTab)).FpClosable != 0 && (*UnionTab)(unsafe.Pointer(pTab)).FnOpen > nMax { 23643 var p uintptr 23644 var pp uintptr 23645 for pp = pTab + 88; (*UnionSrc)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNextClosable != 0; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 23646 } 23647 p = *(*uintptr)(unsafe.Pointer(pp)) 23648 23649 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(p)).Fdb) 23650 (*UnionSrc)(unsafe.Pointer(p)).Fdb = uintptr(0) 23651 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 23652 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen-- 23653 unionInvokeOpenClose(tls, pTab, p, 1, uintptr(0)) 23654 } 23655 } 23656 23657 func unionDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 23658 if pVtab != 0 { 23659 var pTab uintptr = pVtab 23660 var i int32 23661 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23662 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 23663 var bHaveSrcDb int32 = libc.Bool32((*UnionSrc)(unsafe.Pointer(pSrc)).Fdb != uintptr(0)) 23664 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23665 if bHaveSrcDb != 0 { 23666 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 23667 } 23668 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb) 23669 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab) 23670 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile) 23671 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext) 23672 } 23673 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 23674 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 23675 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) 23676 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc) 23677 sqlite3.Xsqlite3_free(tls, pTab) 23678 } 23679 return SQLITE_OK 23680 } 23681 23682 func unionIsIntkeyTable(tls *libc.TLS, db uintptr, pSrc uintptr, pzErr uintptr) int32 { 23683 bp := tls.Alloc(36) 23684 defer tls.Free(36) 23685 23686 *(*int32)(unsafe.Pointer(bp + 32)) = 0 23687 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 23688 var rc int32 23689 23690 sqlite3.Xsqlite3_table_column_metadata(tls, 23691 db, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, ts+8462, bp+24, uintptr(0), uintptr(0), bp+32, uintptr(0)) 23692 rc = sqlite3.Xsqlite3_errcode(tls, db) 23693 if rc == SQLITE_ERROR || 23694 rc == SQLITE_OK && (!(*(*int32)(unsafe.Pointer(bp + 32)) != 0) || sqlite3.Xsqlite3_stricmp(tls, ts+8470, *(*uintptr)(unsafe.Pointer(bp + 24))) != 0) { 23695 rc = SQLITE_ERROR 23696 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8478, 23697 libc.VaList(bp, func() uintptr { 23698 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23699 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 23700 } 23701 return ts + 584 23702 }(), 23703 func() uintptr { 23704 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 23705 return ts + 8506 23706 } 23707 return ts + 584 23708 }(), 23709 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 23710 } 23711 return rc 23712 } 23713 23714 func unionSourceToStr(tls *libc.TLS, pRc uintptr, pTab uintptr, pSrc uintptr, pzErr uintptr) uintptr { 23715 bp := tls.Alloc(4) 23716 defer tls.Free(4) 23717 23718 var zRet uintptr = uintptr(0) 23719 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 23720 var db uintptr = func() uintptr { 23721 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23722 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 23723 } 23724 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 23725 }() 23726 *(*int32)(unsafe.Pointer(bp)) = unionIsIntkeyTable(tls, db, pSrc, pzErr) 23727 var pStmt uintptr = unionPrepare(tls, bp, db, 23728 ts+8508, pzErr) 23729 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23730 sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, -1, uintptr(0)) 23731 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, -1, uintptr(0)) 23732 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 23733 var z uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 23734 zRet = unionStrdup(tls, bp, z) 23735 } 23736 unionFinalize(tls, bp, pStmt, pzErr) 23737 } 23738 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp)) 23739 } 23740 23741 return zRet 23742 } 23743 23744 func unionSourceCheck(tls *libc.TLS, pTab uintptr, pzErr uintptr) int32 { 23745 bp := tls.Alloc(4) 23746 defer tls.Free(4) 23747 23748 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23749 var z0 uintptr = uintptr(0) 23750 var i int32 23751 23752 z0 = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, pzErr) 23753 for i = 1; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 23754 var z uintptr = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc+uintptr(i)*72, pzErr) 23755 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && sqlite3.Xsqlite3_stricmp(tls, z, z0) != 0 { 23756 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 23757 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 23758 } 23759 sqlite3.Xsqlite3_free(tls, z) 23760 } 23761 sqlite3.Xsqlite3_free(tls, z0) 23762 23763 return *(*int32)(unsafe.Pointer(bp)) 23764 } 23765 23766 func unionOpenDatabaseInner(tls *libc.TLS, pTab uintptr, pSrc uintptr, pzErr uintptr) int32 { 23767 bp := tls.Alloc(16) 23768 defer tls.Free(16) 23769 23770 var rc int32 23771 23772 rc = unionInvokeOpenClose(tls, pTab, pSrc, 0, pzErr) 23773 if rc != SQLITE_OK { 23774 return rc 23775 } 23776 23777 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 23778 if rc == SQLITE_OK { 23779 return rc 23780 } 23781 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 23782 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23783 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 23784 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 23785 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23786 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 23787 } 23788 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 23789 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound)) { 23790 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 23791 return rc 23792 } 23793 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 23794 } 23795 if rc != SQLITE_OK { 23796 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_errmsg(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb))) 23797 } 23798 return rc 23799 } 23800 23801 var openFlags int32 = SQLITE_OPEN_READONLY | SQLITE_OPEN_URI 23802 23803 func unionOpenDatabase(tls *libc.TLS, pTab uintptr, iSrc int32, pzErr uintptr) int32 { 23804 bp := tls.Alloc(4) 23805 defer tls.Free(4) 23806 23807 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 23808 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iSrc)*72 23809 23810 if (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb == uintptr(0) { 23811 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen-1) 23812 *(*int32)(unsafe.Pointer(bp)) = unionOpenDatabaseInner(tls, pTab, pSrc, pzErr) 23813 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23814 var z uintptr = unionSourceToStr(tls, bp, pTab, pSrc, pzErr) 23815 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23816 if (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr == uintptr(0) { 23817 (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr = z 23818 } else { 23819 if sqlite3.Xsqlite3_stricmp(tls, z, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) != 0 { 23820 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 23821 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 23822 } 23823 sqlite3.Xsqlite3_free(tls, z) 23824 } 23825 } 23826 } 23827 23828 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 23829 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 23830 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 23831 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen++ 23832 } else { 23833 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 23834 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 23835 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 23836 } 23837 } 23838 23839 return *(*int32)(unsafe.Pointer(bp)) 23840 } 23841 23842 func unionIncrRefcount(tls *libc.TLS, pTab uintptr, iTab int32) { 23843 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23844 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iTab)*72 23845 23846 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 23847 var pp uintptr 23848 for pp = pTab + 88; *(*uintptr)(unsafe.Pointer(pp)) != pSrc; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 23849 } 23850 *(*uintptr)(unsafe.Pointer(pp)) = (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable 23851 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = uintptr(0) 23852 } 23853 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser++ 23854 } 23855 } 23856 23857 func unionFinalizeCsrStmt(tls *libc.TLS, pCsr uintptr) int32 { 23858 var rc int32 = SQLITE_OK 23859 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 23860 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 23861 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 23862 rc = sqlite3.Xsqlite3_finalize(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) 23863 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 23864 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 23865 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser-- 23866 23867 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 23868 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 23869 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 23870 } 23871 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen) 23872 } 23873 } 23874 return rc 23875 } 23876 23877 func union_isspace(tls *libc.TLS, c uint8) int32 { 23878 return libc.Bool32(int32(c) == ' ' || int32(c) == '\n' || int32(c) == '\r' || int32(c) == '\t') 23879 } 23880 23881 func union_isidchar(tls *libc.TLS, c uint8) int32 { 23882 return libc.Bool32(int32(c) >= 'a' && int32(c) <= 'z' || int32(c) >= 'A' && int32(c) < 'Z' || int32(c) >= '0' && int32(c) <= '9') 23883 } 23884 23885 func unionConfigureVtab(tls *libc.TLS, pRc uintptr, pTab uintptr, pStmt uintptr, nArg int32, azArg uintptr, pzErr uintptr) { 23886 bp := tls.Alloc(68) 23887 defer tls.Free(68) 23888 23889 *(*int32)(unsafe.Pointer(bp + 64)) = *(*int32)(unsafe.Pointer(pRc)) 23890 var i int32 23891 if *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK { 23892 (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext = libc.Bool32(sqlite3.Xsqlite3_column_count(tls, pStmt) > 4) 23893 } 23894 for i = 0; *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK && i < nArg; i++ { 23895 var zArg uintptr = unionStrdup(tls, bp+64, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8))) 23896 if zArg != 0 { 23897 var nOpt int32 = 0 23898 var zOpt uintptr 23899 var zVal uintptr 23900 23901 unionDequote(tls, zArg) 23902 zOpt = zArg 23903 for union_isspace(tls, *(*uint8)(unsafe.Pointer(zOpt))) != 0 { 23904 zOpt++ 23905 } 23906 zVal = zOpt 23907 if int32(*(*uint8)(unsafe.Pointer(zVal))) == ':' { 23908 zVal++ 23909 } 23910 for union_isidchar(tls, *(*uint8)(unsafe.Pointer(zVal))) != 0 { 23911 zVal++ 23912 } 23913 nOpt = int32((int64(zVal) - int64(zOpt)) / 1) 23914 23915 for union_isspace(tls, *(*uint8)(unsafe.Pointer(zVal))) != 0 { 23916 zVal++ 23917 } 23918 if int32(*(*uint8)(unsafe.Pointer(zVal))) == '=' { 23919 *(*uint8)(unsafe.Pointer(zOpt + uintptr(nOpt))) = uint8(0) 23920 zVal++ 23921 for union_isspace(tls, *(*uint8)(unsafe.Pointer(zVal))) != 0 { 23922 zVal++ 23923 } 23924 zVal = unionStrdup(tls, bp+64, zVal) 23925 if zVal != 0 { 23926 unionDequote(tls, zVal) 23927 if int32(*(*uint8)(unsafe.Pointer(zOpt))) == ':' { 23928 var iParam int32 = sqlite3.Xsqlite3_bind_parameter_index(tls, pStmt, zOpt) 23929 if iParam == 0 { 23930 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23931 ts+8621, libc.VaList(bp, zOpt)) 23932 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23933 } else { 23934 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3_bind_text(tls, pStmt, iParam, zVal, -1, libc.UintptrFromInt32(-1)) 23935 } 23936 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8658, 7) { 23937 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = libc.Xatoi(tls, zVal) 23938 if (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen <= 0 { 23939 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8666, 0) 23940 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23941 } 23942 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8699, 7) { 23943 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 23944 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23945 ts+8707, 0) 23946 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23947 } else { 23948 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23949 ts+8745, libc.VaList(bp+8, zVal, func() uintptr { 23950 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23951 return ts + 8762 23952 } 23953 return ts + 584 23954 }())) 23955 } 23956 } else if nOpt == 9 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8765, 9) { 23957 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 23958 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 23959 ts+8775, 0) 23960 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23961 } else { 23962 (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23963 ts+8815, libc.VaList(bp+24, zVal, func() uintptr { 23964 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 23965 return ts + 8762 23966 } 23967 return ts + 584 23968 }())) 23969 } 23970 } else { 23971 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8834, libc.VaList(bp+40, zOpt)) 23972 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23973 } 23974 sqlite3.Xsqlite3_free(tls, zVal) 23975 } 23976 } else { 23977 if i == 0 && nArg == 1 { 23978 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 23979 ts+8869, libc.VaList(bp+48, zArg)) 23980 } else { 23981 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8884, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)))) 23982 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 23983 } 23984 } 23985 sqlite3.Xsqlite3_free(tls, zArg) 23986 } 23987 } 23988 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 64)) 23989 } 23990 23991 func unionConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 23992 bp := tls.Alloc(44) 23993 defer tls.Free(44) 23994 23995 var pTab uintptr = uintptr(0) 23996 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 23997 var bSwarm int32 = func() int32 { 23998 if pAux == uintptr(0) { 23999 return 0 24000 } 24001 return 1 24002 }() 24003 var zVtab uintptr = func() uintptr { 24004 if bSwarm != 0 { 24005 return ts + 8911 24006 } 24007 return ts + 8921 24008 }() 24009 24010 if sqlite3.Xsqlite3_stricmp(tls, ts+8931, *(*uintptr)(unsafe.Pointer(argv + 1*8))) != 0 { 24011 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8936, libc.VaList(bp, zVtab)) 24012 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 24013 } else if argc < 4 || argc > 4 && bSwarm == 0 { 24014 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8977, libc.VaList(bp+8, zVtab)) 24015 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 24016 } else { 24017 var nAlloc int32 = 0 24018 var pStmt uintptr = uintptr(0) 24019 var zArg uintptr = unionStrdup(tls, bp+40, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 24020 24021 unionDequote(tls, zArg) 24022 pStmt = unionPreparePrintf(tls, bp+40, pzErr, db, 24023 ts+9010, libc.VaList(bp+16, zArg)) 24024 24025 pTab = unionMalloc(tls, bp+40, int64(unsafe.Sizeof(UnionTab{}))) 24026 if pTab != 0 { 24027 (*UnionTab)(unsafe.Pointer(pTab)).Fdb = db 24028 (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm = bSwarm 24029 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = SWARMVTAB_MAX_OPEN 24030 } 24031 24032 if bSwarm != 0 { 24033 unionConfigureVtab(tls, bp+40, pTab, pStmt, argc-4, argv+4*8, pzErr) 24034 } 24035 24036 for *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 24037 var zDb uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 24038 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 24039 var iMin sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 2) 24040 var iMax sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 3) 24041 var pSrc uintptr 24042 24043 if nAlloc <= (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 24044 var nNew int32 24045 if nAlloc != 0 { 24046 nNew = nAlloc * 2 24047 } else { 24048 nNew = 8 24049 } 24050 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, 24051 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, uint64(nNew)*uint64(unsafe.Sizeof(UnionSrc{}))) 24052 if aNew == uintptr(0) { 24053 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_NOMEM 24054 break 24055 } else { 24056 libc.Xmemset(tls, aNew+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*72, 0, uint64(nNew-(*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*uint64(unsafe.Sizeof(UnionSrc{}))) 24057 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc = aNew 24058 nAlloc = nNew 24059 } 24060 } 24061 24062 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 { 24063 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9040, 0) 24064 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 24065 } 24066 24067 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 24068 pSrc = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(libc.PostIncInt32(&(*UnionTab)(unsafe.Pointer(pTab)).FnSrc, 1))*72 24069 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab = unionStrdup(tls, bp+40, zTab) 24070 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin = iMin 24071 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax = iMax 24072 if bSwarm != 0 { 24073 (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile = unionStrdup(tls, bp+40, zDb) 24074 } else { 24075 (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb = unionStrdup(tls, bp+40, zDb) 24076 } 24077 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 24078 var zContext uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 4) 24079 (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext = unionStrdup(tls, bp+40, zContext) 24080 } 24081 } 24082 } 24083 unionFinalize(tls, bp+40, pStmt, pzErr) 24084 pStmt = uintptr(0) 24085 24086 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FnSrc == 0 { 24087 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9067, 0) 24088 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 24089 } 24090 24091 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 24092 if bSwarm != 0 { 24093 *(*int32)(unsafe.Pointer(bp + 40)) = unionOpenDatabase(tls, pTab, 0, pzErr) 24094 } else { 24095 *(*int32)(unsafe.Pointer(bp + 40)) = unionSourceCheck(tls, pTab, pzErr) 24096 } 24097 } 24098 24099 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 24100 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc 24101 var tdb uintptr = func() uintptr { 24102 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 24103 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 24104 } 24105 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 24106 }() 24107 pStmt = unionPreparePrintf(tls, bp+40, pzErr, tdb, 24108 ts+9095, 24109 libc.VaList(bp+24, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb)) 24110 } 24111 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 24112 var zDecl uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 24113 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zDecl) 24114 (*UnionTab)(unsafe.Pointer(pTab)).FiPK = sqlite3.Xsqlite3_column_int(tls, pStmt, 1) 24115 } 24116 24117 unionFinalize(tls, bp+40, pStmt, pzErr) 24118 } 24119 24120 if *(*int32)(unsafe.Pointer(bp + 40)) != SQLITE_OK { 24121 unionDisconnect(tls, pTab) 24122 pTab = uintptr(0) 24123 } 24124 24125 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 24126 return *(*int32)(unsafe.Pointer(bp + 40)) 24127 } 24128 24129 func unionOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 24130 bp := tls.Alloc(4) 24131 defer tls.Free(4) 24132 24133 var pCsr uintptr 24134 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 24135 _ = p 24136 pCsr = unionMalloc(tls, bp, int64(unsafe.Sizeof(UnionCsr{}))) 24137 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 24138 return *(*int32)(unsafe.Pointer(bp)) 24139 } 24140 24141 func unionClose(tls *libc.TLS, cur uintptr) int32 { 24142 var pCsr uintptr = cur 24143 unionFinalizeCsrStmt(tls, pCsr) 24144 sqlite3.Xsqlite3_free(tls, pCsr) 24145 return SQLITE_OK 24146 } 24147 24148 func doUnionNext(tls *libc.TLS, pCsr uintptr) int32 { 24149 bp := tls.Alloc(28) 24150 defer tls.Free(28) 24151 24152 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_OK 24153 24154 if sqlite3.Xsqlite3_step(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) != SQLITE_ROW { 24155 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 24156 *(*int32)(unsafe.Pointer(bp + 24)) = unionFinalizeCsrStmt(tls, pCsr) 24157 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 24158 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab++ 24159 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 24160 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 24161 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid >= (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 24162 *(*int32)(unsafe.Pointer(bp + 24)) = unionOpenDatabase(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab, pTab+16) 24163 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPreparePrintf(tls, bp+24, pTab+16, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb, 24164 ts+9273, 24165 libc.VaList(bp, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, 24166 func() uintptr { 24167 if (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax > (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid { 24168 return ts + 9305 24169 } 24170 return ts + 9322 24171 }(), 24172 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid)) 24173 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 24174 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 24175 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ROW 24176 } 24177 } 24178 } 24179 } 24180 } 24181 24182 return *(*int32)(unsafe.Pointer(bp + 24)) 24183 } 24184 24185 func unionNext(tls *libc.TLS, cur uintptr) int32 { 24186 var rc int32 24187 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_ROW { 24188 rc = doUnionNext(tls, cur) 24189 } 24190 return rc 24191 } 24192 24193 func unionColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 24194 var pCsr uintptr = cur 24195 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 24196 return SQLITE_OK 24197 } 24198 24199 func unionRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 24200 var pCsr uintptr = cur 24201 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, 0) 24202 return SQLITE_OK 24203 } 24204 24205 func unionEof(tls *libc.TLS, cur uintptr) int32 { 24206 var pCsr uintptr = cur 24207 return libc.Bool32((*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 24208 } 24209 24210 func unionFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 24211 bp := tls.Alloc(108) 24212 defer tls.Free(108) 24213 24214 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 24215 var pCsr uintptr = pVtabCursor 24216 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 24217 var i int32 24218 var zSql uintptr = uintptr(0) 24219 var bZero int32 = 0 24220 24221 var iMin sqlite3_int64 = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 24222 var iMax sqlite3_int64 = int64(0xffffffff) | int64(0x7fffffff)<<32 24223 24224 _ = idxStr 24225 24226 if idxNum == SQLITE_INDEX_CONSTRAINT_EQ { 24227 iMin = libc.AssignInt64(&iMax, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 24228 } else { 24229 if idxNum&(SQLITE_INDEX_CONSTRAINT_LE|SQLITE_INDEX_CONSTRAINT_LT) != 0 { 24230 iMax = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 24231 if idxNum&SQLITE_INDEX_CONSTRAINT_LT != 0 { 24232 if iMax == int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) { 24233 bZero = 1 24234 } else { 24235 iMax-- 24236 } 24237 } 24238 } 24239 24240 if idxNum&(SQLITE_INDEX_CONSTRAINT_GE|SQLITE_INDEX_CONSTRAINT_GT) != 0 { 24241 iMin = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(argc-1)*8))) 24242 if idxNum&SQLITE_INDEX_CONSTRAINT_GT != 0 { 24243 if iMin == int64(0xffffffff)|int64(0x7fffffff)<<32 { 24244 bZero = 1 24245 } else { 24246 iMin++ 24247 } 24248 } 24249 } 24250 } 24251 24252 unionFinalizeCsrStmt(tls, pCsr) 24253 if bZero != 0 { 24254 return SQLITE_OK 24255 } 24256 24257 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 24258 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 24259 if iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax || iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 24260 continue 24261 } 24262 24263 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9326, libc.VaList(bp, zSql, func() uintptr { 24264 if zSql != 0 { 24265 return ts + 9360 24266 } 24267 return ts + 584 24268 }(), func() uintptr { 24269 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 24270 return ts + 5624 24271 } 24272 return ts + 584 24273 }(), func() uintptr { 24274 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 24275 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 24276 } 24277 return ts + 584 24278 }(), func() uintptr { 24279 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 24280 return ts + 5626 24281 } 24282 return ts + 584 24283 }(), (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 24284 if zSql == uintptr(0) { 24285 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 24286 break 24287 } 24288 24289 if iMin == iMax { 24290 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9372, libc.VaList(bp+48, zSql, iMin)) 24291 } else { 24292 var zWhere uintptr = ts + 9392 24293 if iMin != int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) && iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 24294 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9398, libc.VaList(bp+64, zSql, iMin)) 24295 zWhere = ts + 9419 24296 } 24297 if iMax != int64(0xffffffff)|int64(0x7fffffff)<<32 && iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax { 24298 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9423, libc.VaList(bp+80, zSql, zWhere, iMax)) 24299 } 24300 } 24301 24302 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 24303 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab = i 24304 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid = iMax 24305 *(*int32)(unsafe.Pointer(bp + 104)) = unionOpenDatabase(tls, pTab, i, pTab+16) 24306 break 24307 } 24308 } 24309 24310 if zSql == uintptr(0) { 24311 return *(*int32)(unsafe.Pointer(bp + 104)) 24312 } else { 24313 var db uintptr = func() uintptr { 24314 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 24315 return (*UnionSrc)(unsafe.Pointer((*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72)).Fdb 24316 } 24317 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 24318 }() 24319 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPrepare(tls, bp+104, db, zSql, pTab+16) 24320 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 24321 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 24322 } 24323 sqlite3.Xsqlite3_free(tls, zSql) 24324 } 24325 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 24326 return *(*int32)(unsafe.Pointer(bp + 104)) 24327 } 24328 return unionNext(tls, pVtabCursor) 24329 } 24330 24331 func unionBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 24332 var pTab uintptr = tab 24333 var iEq int32 = -1 24334 var iLt int32 = -1 24335 var iGt int32 = -1 24336 var i int32 24337 24338 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 24339 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 24340 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) { 24341 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) { 24342 case SQLITE_INDEX_CONSTRAINT_EQ: 24343 iEq = i 24344 break 24345 fallthrough 24346 case SQLITE_INDEX_CONSTRAINT_LE: 24347 fallthrough 24348 case SQLITE_INDEX_CONSTRAINT_LT: 24349 iLt = i 24350 break 24351 fallthrough 24352 case SQLITE_INDEX_CONSTRAINT_GE: 24353 fallthrough 24354 case SQLITE_INDEX_CONSTRAINT_GT: 24355 iGt = i 24356 break 24357 } 24358 } 24359 } 24360 24361 if iEq >= 0 { 24362 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1) 24363 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags = SQLITE_INDEX_SCAN_UNIQUE 24364 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 24365 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SQLITE_INDEX_CONSTRAINT_EQ 24366 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).FargvIndex = 1 24367 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).Fomit = uint8(1) 24368 } else { 24369 var iCons int32 = 1 24370 var idxNum int32 = 0 24371 var nRow sqlite3_int64 = int64(1000000) 24372 if iLt >= 0 { 24373 nRow = nRow / int64(2) 24374 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 24375 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).Fomit = uint8(1) 24376 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iLt)*12)).Fop) 24377 } 24378 if iGt >= 0 { 24379 nRow = nRow / int64(2) 24380 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 24381 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).Fomit = uint8(1) 24382 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iGt)*12)).Fop) 24383 } 24384 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = nRow 24385 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 * float64(nRow) 24386 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 24387 } 24388 24389 return SQLITE_OK 24390 } 24391 24392 func createUnionVtab(tls *libc.TLS, db uintptr) int32 { 24393 var rc int32 24394 24395 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8921, uintptr(unsafe.Pointer(&unionModule)), uintptr(0)) 24396 if rc == SQLITE_OK { 24397 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8911, uintptr(unsafe.Pointer(&unionModule)), db) 24398 } 24399 return rc 24400 } 24401 24402 var unionModule = sqlite3_module{ 24403 FxCreate: 0, 24404 FxConnect: 0, 24405 FxBestIndex: 0, 24406 FxDisconnect: 0, 24407 FxDestroy: 0, 24408 FxOpen: 0, 24409 FxClose: 0, 24410 FxFilter: 0, 24411 FxNext: 0, 24412 FxEof: 0, 24413 FxColumn: 0, 24414 FxRowid: 0, 24415 } 24416 24417 func sqlite3_unionvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 24418 var rc int32 = SQLITE_OK 24419 _ = pApi 24420 24421 _ = pzErrMsg 24422 rc = createUnionVtab(tls, db) 24423 return rc 24424 } 24425 24426 type wholenumber_cursor1 = struct { 24427 Fbase sqlite3_vtab_cursor 24428 FiValue sqlite3_int64 24429 FmxValue sqlite3_int64 24430 } 24431 24432 type wholenumber_cursor = wholenumber_cursor1 24433 24434 func wholenumberConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 24435 var pNew uintptr 24436 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 24437 if pNew == uintptr(0) { 24438 return SQLITE_NOMEM 24439 } 24440 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+9441) 24441 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 24442 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{}))) 24443 return SQLITE_OK 24444 } 24445 24446 func wholenumberDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 24447 sqlite3.Xsqlite3_free(tls, pVtab) 24448 return SQLITE_OK 24449 } 24450 24451 func wholenumberOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 24452 var pCur uintptr 24453 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(wholenumber_cursor{}))) 24454 if pCur == uintptr(0) { 24455 return SQLITE_NOMEM 24456 } 24457 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(wholenumber_cursor{}))) 24458 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 24459 return SQLITE_OK 24460 } 24461 24462 func wholenumberClose(tls *libc.TLS, cur uintptr) int32 { 24463 sqlite3.Xsqlite3_free(tls, cur) 24464 return SQLITE_OK 24465 } 24466 24467 func wholenumberNext(tls *libc.TLS, cur uintptr) int32 { 24468 var pCur uintptr = cur 24469 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue++ 24470 return SQLITE_OK 24471 } 24472 24473 func wholenumberColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 24474 var pCur uintptr = cur 24475 sqlite3.Xsqlite3_result_int64(tls, ctx, (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue) 24476 return SQLITE_OK 24477 } 24478 24479 func wholenumberRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 24480 var pCur uintptr = cur 24481 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue 24482 return SQLITE_OK 24483 } 24484 24485 func wholenumberEof(tls *libc.TLS, cur uintptr) int32 { 24486 var pCur uintptr = cur 24487 return libc.Bool32((*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue || (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue == int64(0)) 24488 } 24489 24490 func wholenumberFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 24491 var pCur uintptr = pVtabCursor 24492 var v sqlite3_int64 24493 var i int32 = 0 24494 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = int64(1) 24495 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 24496 if idxNum&3 != 0 { 24497 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) + sqlite3_int64(idxNum&1) 24498 if v > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v <= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 24499 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = v 24500 } 24501 i++ 24502 } 24503 if idxNum&12 != 0 { 24504 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) - sqlite3_int64(idxNum>>2&1) 24505 if v >= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v < (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 24506 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = v 24507 } 24508 } 24509 return SQLITE_OK 24510 } 24511 24512 func wholenumberBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 24513 var i int32 24514 var idxNum int32 = 0 24515 var argvIdx int32 = 1 24516 var ltIdx int32 = -1 24517 var gtIdx int32 = -1 24518 var pConstraint uintptr 24519 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 24520 i = 0 24521 __1: 24522 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 24523 goto __3 24524 } 24525 { 24526 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 24527 goto __2 24528 } 24529 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GT { 24530 idxNum = idxNum | 1 24531 ltIdx = i 24532 } 24533 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GE { 24534 idxNum = idxNum | 2 24535 ltIdx = i 24536 } 24537 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 24538 idxNum = idxNum | 4 24539 gtIdx = i 24540 } 24541 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE { 24542 idxNum = idxNum | 8 24543 gtIdx = i 24544 } 24545 24546 } 24547 goto __2 24548 __2: 24549 i++ 24550 pConstraint += 12 24551 goto __1 24552 goto __3 24553 __3: 24554 ; 24555 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 24556 if ltIdx >= 0 { 24557 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).FargvIndex = libc.PostIncInt32(&argvIdx, 1) 24558 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).Fomit = uint8(1) 24559 } 24560 if gtIdx >= 0 { 24561 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).FargvIndex = argvIdx 24562 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).Fomit = uint8(1) 24563 } 24564 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 24565 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 24566 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 24567 } 24568 if idxNum&12 == 0 { 24569 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e99 24570 } else if idxNum&3 == 0 { 24571 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 24572 } else { 24573 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 24574 } 24575 return SQLITE_OK 24576 } 24577 24578 var wholenumberModule = sqlite3_module{ 24579 FxCreate: 0, 24580 FxConnect: 0, 24581 FxBestIndex: 0, 24582 FxDisconnect: 0, 24583 FxDestroy: 0, 24584 FxOpen: 0, 24585 FxClose: 0, 24586 FxFilter: 0, 24587 FxNext: 0, 24588 FxEof: 0, 24589 FxColumn: 0, 24590 FxRowid: 0, 24591 } 24592 24593 func sqlite3_wholenumber_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 24594 var rc int32 = SQLITE_OK 24595 _ = pApi 24596 24597 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+9463, uintptr(unsafe.Pointer(&wholenumberModule)), uintptr(0)) 24598 return rc 24599 } 24600 24601 func test_rbu_delta(tls *libc.TLS, pCtx uintptr, nArg int32, apVal uintptr) { 24602 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 24603 var pScript uintptr 24604 var i int32 24605 24606 pScript = tcl.XTcl_NewObj(tls) 24607 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 24608 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, ts+9475, -1)) 24609 for i = 0; i < nArg; i++ { 24610 var pIn uintptr = *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)) 24611 var z uintptr = sqlite3.Xsqlite3_value_text(tls, pIn) 24612 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, z, -1)) 24613 } 24614 24615 if TCL_OK == tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_GLOBAL_ONLY) { 24616 var z uintptr = tcl.XTcl_GetStringResult(tls, interp) 24617 sqlite3.Xsqlite3_result_text(tls, pCtx, z, -1, libc.UintptrFromInt32(-1)) 24618 } else { 24619 tcl.XTcl_BackgroundError(tls, interp) 24620 } 24621 24622 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 24623 var _objPtr uintptr = pScript 24624 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 24625 tcl.XTclFreeObj(tls, _objPtr) 24626 } 24627 } 24628 } 24629 24630 func test_sqlite3rbu_cmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24631 bp := tls.Alloc(496) 24632 defer tls.Free(496) 24633 24634 var ret int32 = TCL_OK 24635 var pRbu uintptr = clientData 24636 *(*[14]RbuCmd)(unsafe.Pointer(bp + 24)) = [14]RbuCmd{ 24637 {FzName: ts + 9485, FnArg: 2, FzUsage: ts + 584}, 24638 {FzName: ts + 9490, FnArg: 2, FzUsage: ts + 584}, 24639 {FzName: ts + 9496, FnArg: 2, FzUsage: ts + 584}, 24640 {FzName: ts + 9513, FnArg: 2, FzUsage: ts + 584}, 24641 {FzName: ts + 9523, FnArg: 3, FzUsage: ts + 9535}, 24642 {FzName: ts + 9539, FnArg: 2, FzUsage: ts + 584}, 24643 {FzName: ts + 9551, FnArg: 3, FzUsage: ts + 9554}, 24644 {FzName: ts + 9558, FnArg: 2, FzUsage: ts + 584}, 24645 {FzName: ts + 9564, FnArg: 2, FzUsage: ts + 584}, 24646 {FzName: ts + 9573, FnArg: 2, FzUsage: ts + 584}, 24647 {FzName: ts + 9588, FnArg: 3, FzUsage: ts + 9604}, 24648 {FzName: ts + 9610, FnArg: 2, FzUsage: ts + 584}, 24649 {FzName: ts + 9620, FnArg: 3, FzUsage: ts + 9535}, 24650 {}, 24651 } 24652 24653 if objc < 2 { 24654 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9631) 24655 return TCL_ERROR 24656 } 24657 ret = tcl.XTcl_GetIndexFromObjStruct(tls, 24658 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, int32(unsafe.Sizeof(RbuCmd{})), ts+9638, 0, bp+360) 24659 if ret != 0 { 24660 return TCL_ERROR 24661 } 24662 if objc != (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FnArg { 24663 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FzUsage) 24664 return TCL_ERROR 24665 } 24666 24667 switch *(*int32)(unsafe.Pointer(bp + 360)) { 24668 case 0: 24669 { 24670 var rc int32 = sqlite3.Xsqlite3rbu_step(tls, pRbu) 24671 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24672 break 24673 24674 } 24675 24676 case 9: 24677 fallthrough 24678 case 1: 24679 { 24680 *(*uintptr)(unsafe.Pointer(bp + 368)) = uintptr(0) 24681 var rc int32 24682 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 24683 if *(*int32)(unsafe.Pointer(bp + 360)) == 1 { 24684 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, bp+368) 24685 } else { 24686 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, uintptr(0)) 24687 } 24688 if rc == SQLITE_OK || rc == SQLITE_DONE { 24689 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24690 24691 } else { 24692 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24693 if *(*uintptr)(unsafe.Pointer(bp + 368)) != 0 { 24694 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, *(*uintptr)(unsafe.Pointer(bp + 368)), 0)) 24695 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 368))) 24696 } 24697 ret = TCL_ERROR 24698 } 24699 break 24700 24701 } 24702 24703 case 2: 24704 { 24705 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, 0) 24706 var rc int32 = sqlite3.Xsqlite3_create_function(tls, 24707 db, ts+9475, -1, SQLITE_UTF8, interp, *(*uintptr)(unsafe.Pointer(&struct { 24708 f func(*libc.TLS, uintptr, int32, uintptr) 24709 }{test_rbu_delta})), uintptr(0), uintptr(0)) 24710 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24711 ret = func() int32 { 24712 if rc == SQLITE_OK { 24713 return TCL_OK 24714 } 24715 return TCL_ERROR 24716 }() 24717 break 24718 24719 } 24720 24721 case 3: 24722 { 24723 var rc int32 = sqlite3.Xsqlite3rbu_savestate(tls, pRbu) 24724 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24725 ret = func() int32 { 24726 if rc == SQLITE_OK { 24727 return TCL_OK 24728 } 24729 return TCL_ERROR 24730 }() 24731 break 24732 24733 } 24734 24735 case 12: 24736 fallthrough 24737 case 4: 24738 { 24739 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 360)) == 12)) 24740 var rc int32 = sqlite3.Xsqlite3_exec(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), uintptr(0), uintptr(0), uintptr(0)) 24741 if rc != SQLITE_OK { 24742 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, db), -1)) 24743 ret = TCL_ERROR 24744 } 24745 break 24746 24747 } 24748 24749 case 5: 24750 { 24751 var pObj uintptr 24752 sqlite3.Xsqlite3rbu_bp_progress(tls, pRbu, bp+376, bp+380) 24753 24754 pObj = tcl.XTcl_NewObj(tls) 24755 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 376)))) 24756 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 380)))) 24757 tcl.XTcl_SetObjResult(tls, interp, pObj) 24758 break 24759 24760 } 24761 24762 case 6: 24763 { 24764 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+384) != 0 { 24765 ret = TCL_ERROR 24766 } else { 24767 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, *(*int32)(unsafe.Pointer(bp + 384))) 24768 if sqlite3TestMakePointerStr(tls, interp, bp+388, db) != 0 { 24769 ret = TCL_ERROR 24770 } else { 24771 tcl.XTcl_SetResult(tls, interp, bp+388, uintptr(1)) 24772 } 24773 } 24774 break 24775 24776 } 24777 case 7: 24778 { 24779 *(*[6]uintptr)(unsafe.Pointer(bp + 440)) = [6]uintptr{uintptr(0), ts + 9649, ts + 9653, ts + 9658, ts + 9669, ts + 9674} 24780 var eState int32 = sqlite3.Xsqlite3rbu_state(tls, pRbu) 24781 24782 tcl.XTcl_SetResult(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 440 + uintptr(eState)*8)), uintptr(0)) 24783 break 24784 24785 } 24786 case 8: 24787 { 24788 var nStep sqlite3_int64 = sqlite3.Xsqlite3rbu_progress(tls, pRbu) 24789 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nStep)) 24790 break 24791 24792 } 24793 24794 case 10: 24795 { 24796 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+488) != 0 { 24797 ret = TCL_ERROR 24798 } else { 24799 *(*sqlite3_int64)(unsafe.Pointer(bp + 488)) = sqlite3.Xsqlite3rbu_temp_size_limit(tls, pRbu, *(*sqlite3_int64)(unsafe.Pointer(bp + 488))) 24800 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 488)))) 24801 } 24802 break 24803 24804 } 24805 case 11: 24806 { 24807 var sz sqlite3_int64 = sqlite3.Xsqlite3rbu_temp_size(tls, pRbu) 24808 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sz)) 24809 break 24810 24811 } 24812 24813 default: 24814 break 24815 } 24816 24817 return ret 24818 } 24819 24820 type RbuCmd = struct { 24821 FzName uintptr 24822 FnArg int32 24823 F__ccgo_pad1 [4]byte 24824 FzUsage uintptr 24825 } 24826 24827 func test_sqlite3rbu(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24828 var pRbu uintptr = uintptr(0) 24829 var zCmd uintptr 24830 var zTarget uintptr 24831 var zRbu uintptr 24832 var zStateDb uintptr = uintptr(0) 24833 24834 if objc != 4 && objc != 5 { 24835 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9680) 24836 return TCL_ERROR 24837 } 24838 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24839 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 24840 zRbu = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 24841 if objc == 5 { 24842 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 24843 } 24844 24845 pRbu = sqlite3.Xsqlite3rbu_open(tls, zTarget, zRbu, zStateDb) 24846 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 24847 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 24848 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 24849 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24850 return TCL_OK 24851 } 24852 24853 func test_sqlite3rbu_vacuum(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24854 var pRbu uintptr = uintptr(0) 24855 var zCmd uintptr 24856 var zTarget uintptr 24857 var zStateDb uintptr = uintptr(0) 24858 24859 if objc != 3 && objc != 4 { 24860 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9713) 24861 return TCL_ERROR 24862 } 24863 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24864 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 24865 if objc == 4 { 24866 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 24867 } 24868 if zStateDb != 0 && int32(*(*uint8)(unsafe.Pointer(zStateDb))) == 0 { 24869 zStateDb = uintptr(0) 24870 } 24871 24872 pRbu = sqlite3.Xsqlite3rbu_vacuum(tls, zTarget, zStateDb) 24873 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 24874 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 24875 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 24876 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24877 return TCL_OK 24878 } 24879 24880 func test_sqlite3rbu_create_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24881 var zName uintptr 24882 var zParent uintptr 24883 var rc int32 24884 24885 if objc != 3 && objc != 4 { 24886 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9739) 24887 return TCL_ERROR 24888 } 24889 24890 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 24891 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8))) 24892 if int32(*(*uint8)(unsafe.Pointer(zParent))) == 0 { 24893 zParent = uintptr(0) 24894 } 24895 24896 rc = sqlite3.Xsqlite3rbu_create_vfs(tls, zName, zParent) 24897 if rc != SQLITE_OK { 24898 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 24899 return TCL_ERROR 24900 } else if objc == 4 { 24901 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, zName) 24902 sqlite3.Xsqlite3_vfs_register(tls, pVfs, 1) 24903 } 24904 24905 tcl.XTcl_ResetResult(tls, interp) 24906 return TCL_OK 24907 } 24908 24909 func test_sqlite3rbu_destroy_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24910 var zName uintptr 24911 24912 if objc != 2 { 24913 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 24914 return TCL_ERROR 24915 } 24916 24917 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 24918 sqlite3.Xsqlite3rbu_destroy_vfs(tls, zName) 24919 return TCL_OK 24920 } 24921 24922 func test_sqlite3rbu_internal_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 24923 bp := tls.Alloc(16) 24924 defer tls.Free(16) 24925 24926 var db uintptr 24927 24928 if objc != 1 { 24929 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 24930 return TCL_ERROR 24931 } 24932 24933 db = sqlite3.Xsqlite3rbu_db(tls, uintptr(0), 0) 24934 if db != uintptr(0) { 24935 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9767, 0)) 24936 return TCL_ERROR 24937 } 24938 24939 return TCL_OK 24940 } 24941 24942 func SqliteRbu_Init(tls *libc.TLS, interp uintptr) int32 { 24943 var i int32 24944 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd))/uint64(unsafe.Sizeof(struct { 24945 FzName uintptr 24946 FxProc uintptr 24947 }{})); i++ { 24948 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd[i].FzName, aObjCmd[i].FxProc, uintptr(0), uintptr(0)) 24949 } 24950 return TCL_OK 24951 } 24952 24953 var aObjCmd = [5]struct { 24954 FzName uintptr 24955 FxProc uintptr 24956 }{ 24957 {FzName: ts + 9790, FxProc: 0}, 24958 {FzName: ts + 9801, FxProc: 0}, 24959 {FzName: ts + 9819, FxProc: 0}, 24960 {FzName: ts + 9841, FxProc: 0}, 24961 {FzName: ts + 9864, FxProc: 0}, 24962 } 24963 24964 type sqlite31 = sqlite32 24965 24966 type sqlite3_str = sqlite3_str1 24967 24968 type uint8_t = uint8 24969 type uint16_t = uint16 24970 type uint32_t = uint32 24971 type uint64_t = uint64 24972 24973 type int_least8_t = int8 24974 type int_least16_t = int16 24975 type int_least32_t = int32 24976 type int_least64_t = int64 24977 24978 type uint_least8_t = uint8 24979 type uint_least16_t = uint16 24980 type uint_least32_t = uint32 24981 type uint_least64_t = uint64 24982 24983 type int_fast8_t = int8 24984 type int_fast16_t = int64 24985 type int_fast32_t = int64 24986 type int_fast64_t = int64 24987 24988 type uint_fast8_t = uint8 24989 type uint_fast16_t = uint64 24990 type uint_fast32_t = uint64 24991 type uint_fast64_t = uint64 24992 type uintptr_t = uint64 24993 24994 type intmax_t = int64 24995 type uintmax_t = uint64 24996 24997 type imaxdiv_t = struct { 24998 Fquot int64 24999 Frem int64 25000 } 25001 25002 type Hash1 = struct { 25003 Fhtsize uint32 25004 Fcount uint32 25005 Ffirst uintptr 25006 Fht uintptr 25007 } 25008 25009 type Hash = Hash1 25010 type HashElem1 = struct { 25011 Fnext uintptr 25012 Fprev uintptr 25013 Fdata uintptr 25014 FpKey uintptr 25015 } 25016 25017 type HashElem = HashElem1 25018 25019 type _ht = struct { 25020 Fcount uint32 25021 F__ccgo_pad1 [4]byte 25022 Fchain uintptr 25023 } 25024 25025 type max_align_t = struct { 25026 F__max_align_ll int64 25027 F__max_align_ld float64 25028 } 25029 type i16 = int16_t 25030 type i8 = int8_t 25031 25032 type tRowcnt = u32 25033 25034 type LogEst = int16_t 25035 25036 type uptr = uintptr_t 25037 25038 type BusyHandler1 = struct { 25039 FxBusyHandler uintptr 25040 FpBusyArg uintptr 25041 FnBusy int32 25042 F__ccgo_pad1 [4]byte 25043 } 25044 25045 type BusyHandler = BusyHandler1 25046 25047 type AggInfo1 = struct { 25048 FdirectMode u8 25049 FuseSortingIdx u8 25050 F__ccgo_pad1 [2]byte 25051 FsortingIdx int32 25052 FsortingIdxPTab int32 25053 FnSortingColumn int32 25054 FmnReg int32 25055 FmxReg int32 25056 FpGroupBy uintptr 25057 FaCol uintptr 25058 FnColumn int32 25059 FnAccumulator int32 25060 FaFunc uintptr 25061 FnFunc int32 25062 FselId u32 25063 } 25064 25065 type AggInfo = AggInfo1 25066 type AuthContext1 = struct { 25067 FzAuthContext uintptr 25068 FpParse uintptr 25069 } 25070 25071 type AuthContext = AuthContext1 25072 type AutoincInfo1 = struct { 25073 FpNext uintptr 25074 FpTab uintptr 25075 FiDb int32 25076 FregCtr int32 25077 } 25078 25079 type AutoincInfo = AutoincInfo1 25080 type CollSeq1 = struct { 25081 FzName uintptr 25082 Fenc u8 25083 F__ccgo_pad1 [7]byte 25084 FpUser uintptr 25085 FxCmp uintptr 25086 FxDel uintptr 25087 } 25088 25089 type CollSeq = CollSeq1 25090 type Column1 = struct { 25091 FzCnName uintptr 25092 FnotNull uint8 25093 F__ccgo_pad1 [1]byte 25094 Faffinity uint8 25095 FszEst u8 25096 FhName u8 25097 F__ccgo_pad2 [1]byte 25098 FiDflt u16 25099 FcolFlags u16 25100 F__ccgo_pad3 [6]byte 25101 } 25102 25103 type Column = Column1 25104 type Cte1 = struct { 25105 FzName uintptr 25106 FpCols uintptr 25107 FpSelect uintptr 25108 FzCteErr uintptr 25109 FpUse uintptr 25110 FeM10d u8 25111 F__ccgo_pad1 [7]byte 25112 } 25113 25114 type Cte = Cte1 25115 type CteUse1 = struct { 25116 FnUse int32 25117 FaddrM9e int32 25118 FregRtn int32 25119 FiCur int32 25120 FnRowEst LogEst 25121 FeM10d u8 25122 F__ccgo_pad1 [1]byte 25123 } 25124 25125 type CteUse = CteUse1 25126 type Db1 = struct { 25127 FzDbSName uintptr 25128 FpBt uintptr 25129 Fsafety_level u8 25130 FbSyncSet u8 25131 F__ccgo_pad1 [6]byte 25132 FpSchema uintptr 25133 } 25134 25135 type Db = Db1 25136 type DbFixer1 = struct { 25137 FpParse uintptr 25138 Fw Walker 25139 FpSchema uintptr 25140 FbTemp u8 25141 F__ccgo_pad1 [7]byte 25142 FzDb uintptr 25143 FzType uintptr 25144 FpName uintptr 25145 } 25146 25147 type DbFixer = DbFixer1 25148 type Schema1 = struct { 25149 Fschema_cookie int32 25150 FiGeneration int32 25151 FtblHash Hash 25152 FidxHash Hash 25153 FtrigHash Hash 25154 FfkeyHash Hash 25155 FpSeqTab uintptr 25156 Ffile_format u8 25157 Fenc u8 25158 FschemaFlags u16 25159 Fcache_size int32 25160 } 25161 25162 type Schema = Schema1 25163 type Expr1 = struct { 25164 Fop u8 25165 FaffExpr uint8 25166 Fop2 u8 25167 F__ccgo_pad1 [1]byte 25168 Fflags u32 25169 Fu struct{ FzToken uintptr } 25170 FpLeft uintptr 25171 FpRight uintptr 25172 Fx struct{ FpList uintptr } 25173 FnHeight int32 25174 FiTable int32 25175 FiColumn ynVar 25176 FiAgg i16 25177 Fw struct{ FiJoin int32 } 25178 FpAggInfo uintptr 25179 Fy struct{ FpTab uintptr } 25180 } 25181 25182 type Expr = Expr1 25183 type ExprList1 = struct { 25184 FnExpr int32 25185 FnAlloc int32 25186 Fa [1]struct { 25187 FpExpr uintptr 25188 FzEName uintptr 25189 Ffg struct { 25190 F__ccgo_pad1 [0]uint32 25191 FsortFlags u8 25192 F__ccgo_pad2 [3]byte 25193 FeEName uint16 25194 F__ccgo_pad3 [2]byte 25195 } 25196 Fu struct { 25197 F__ccgo_pad1 [0]uint32 25198 Fx struct { 25199 FiOrderByCol u16 25200 FiAlias u16 25201 } 25202 } 25203 F__ccgo_pad1 [4]byte 25204 } 25205 } 25206 25207 type ExprList = ExprList1 25208 type FKey1 = struct { 25209 FpFrom uintptr 25210 FpNextFrom uintptr 25211 FzTo uintptr 25212 FpNextTo uintptr 25213 FpPrevTo uintptr 25214 FnCol int32 25215 FisDeferred u8 25216 FaAction [2]u8 25217 F__ccgo_pad1 [1]byte 25218 FapTrigger [2]uintptr 25219 FaCol [1]struct { 25220 FiFrom int32 25221 F__ccgo_pad1 [4]byte 25222 FzCol uintptr 25223 } 25224 } 25225 25226 type FKey = FKey1 25227 type FuncDestructor1 = struct { 25228 FnRef int32 25229 F__ccgo_pad1 [4]byte 25230 FxDestroy uintptr 25231 FpUserData uintptr 25232 } 25233 25234 type FuncDestructor = FuncDestructor1 25235 type FuncDef1 = struct { 25236 FnArg i8 25237 F__ccgo_pad1 [3]byte 25238 FfuncFlags u32 25239 FpUserData uintptr 25240 FpNext uintptr 25241 FxSFunc uintptr 25242 FxFinalize uintptr 25243 FxValue uintptr 25244 FxInverse uintptr 25245 FzName uintptr 25246 Fu struct{ FpHash uintptr } 25247 } 25248 25249 type FuncDef = FuncDef1 25250 type FuncDefHash1 = struct{ Fa [23]uintptr } 25251 25252 type FuncDefHash = FuncDefHash1 25253 type IdList1 = struct { 25254 FnId int32 25255 FeU4 u8 25256 F__ccgo_pad1 [3]byte 25257 Fa [1]struct { 25258 FzName uintptr 25259 Fu4 struct { 25260 F__ccgo_pad1 [0]uint64 25261 Fidx int32 25262 F__ccgo_pad2 [4]byte 25263 } 25264 } 25265 } 25266 25267 type IdList = IdList1 25268 type Index1 = struct { 25269 FzName uintptr 25270 FaiColumn uintptr 25271 FaiRowLogEst uintptr 25272 FpTable uintptr 25273 FzColAff uintptr 25274 FpNext uintptr 25275 FpSchema uintptr 25276 FaSortOrder uintptr 25277 FazColl uintptr 25278 FpPartIdxWhere uintptr 25279 FaColExpr uintptr 25280 Ftnum Pgno 25281 FszIdxRow LogEst 25282 FnKeyCol u16 25283 FnColumn u16 25284 FonError u8 25285 F__ccgo_pad1 [1]byte 25286 FidxType uint16 25287 F__ccgo_pad2 [2]byte 25288 FnSample int32 25289 FnSampleCol int32 25290 FaAvgEq uintptr 25291 FaSample uintptr 25292 FaiRowEst uintptr 25293 FnRowEst0 tRowcnt 25294 F__ccgo_pad3 [4]byte 25295 FcolNotIdxed Bitmask 25296 } 25297 25298 type Index = Index1 25299 type IndexSample1 = struct { 25300 Fp uintptr 25301 Fn int32 25302 F__ccgo_pad1 [4]byte 25303 FanEq uintptr 25304 FanLt uintptr 25305 FanDLt uintptr 25306 } 25307 25308 type IndexSample = IndexSample1 25309 type KeyInfo1 = struct { 25310 FnRef u32 25311 Fenc u8 25312 F__ccgo_pad1 [1]byte 25313 FnKeyField u16 25314 FnAllField u16 25315 F__ccgo_pad2 [6]byte 25316 Fdb uintptr 25317 FaSortFlags uintptr 25318 FaColl [1]uintptr 25319 } 25320 25321 type KeyInfo = KeyInfo1 25322 type Lookaside1 = struct { 25323 FbDisable u32 25324 Fsz u16 25325 FszTrue u16 25326 FbMalloced u8 25327 F__ccgo_pad1 [3]byte 25328 FnSlot u32 25329 FanStat [3]u32 25330 F__ccgo_pad2 [4]byte 25331 FpInit uintptr 25332 FpFree uintptr 25333 FpSmallInit uintptr 25334 FpSmallFree uintptr 25335 FpMiddle uintptr 25336 FpStart uintptr 25337 FpEnd uintptr 25338 } 25339 25340 type Lookaside = Lookaside1 25341 type LookasideSlot1 = struct{ FpNext uintptr } 25342 25343 type LookasideSlot = LookasideSlot1 25344 type Module1 = struct { 25345 FpModule uintptr 25346 FzName uintptr 25347 FnRefModule int32 25348 F__ccgo_pad1 [4]byte 25349 FpAux uintptr 25350 FxDestroy uintptr 25351 FpEpoTab uintptr 25352 } 25353 25354 type Module = Module1 25355 type NameContext1 = struct { 25356 FpParse uintptr 25357 FpSrcList uintptr 25358 FuNC struct{ FpEList uintptr } 25359 FpNext uintptr 25360 FnRef int32 25361 FnNcErr int32 25362 FncFlags int32 25363 F__ccgo_pad1 [4]byte 25364 FpWinSelect uintptr 25365 } 25366 25367 type NameContext = NameContext1 25368 type OnOrUsing1 = struct { 25369 FpOn uintptr 25370 FpUsing uintptr 25371 } 25372 25373 type OnOrUsing = OnOrUsing1 25374 type Parse1 = struct { 25375 Fdb uintptr 25376 FzErrMsg uintptr 25377 FpVdbe uintptr 25378 Frc int32 25379 FcolNamesSet u8 25380 FcheckSchema u8 25381 Fnested u8 25382 FnTempReg u8 25383 FisMultiWrite u8 25384 FmayAbort u8 25385 FhasCompound u8 25386 FokConstFactor u8 25387 FdisableLookaside u8 25388 FdisableVtab u8 25389 FwithinRJSubrtn u8 25390 F__ccgo_pad1 [1]byte 25391 FnRangeReg int32 25392 FiRangeReg int32 25393 FnErr int32 25394 FnTab int32 25395 FnMem int32 25396 FszOpAlloc int32 25397 FiSelfTab int32 25398 FnLabel int32 25399 FnLabelAlloc int32 25400 F__ccgo_pad2 [4]byte 25401 FaLabel uintptr 25402 FpConstExpr uintptr 25403 FconstraintName Token 25404 FwriteMask yDbMask 25405 FcookieMask yDbMask 25406 FregRowid int32 25407 FregRoot int32 25408 FnMaxArg int32 25409 FnSelect int32 25410 FnTableLock int32 25411 F__ccgo_pad3 [4]byte 25412 FaTableLock uintptr 25413 FpAinc uintptr 25414 FpToplevel uintptr 25415 FpTriggerTab uintptr 25416 FpTriggerPrg uintptr 25417 FpCleanup uintptr 25418 Fu1 struct { 25419 F__ccgo_pad1 [0]uint64 25420 FaddrCrTab int32 25421 F__ccgo_pad2 [4]byte 25422 } 25423 FnQueryLoop u32 25424 Foldmask u32 25425 Fnewmask u32 25426 FeTriggerOp u8 25427 FbReturning u8 25428 FeOrconf u8 25429 FdisableTriggers u8 25430 FaTempReg [8]int32 25431 FpOuterParse uintptr 25432 FsNameToken Token 25433 FsLastToken Token 25434 FnVar ynVar 25435 FiPkSortOrder u8 25436 Fexplain u8 25437 FeParseMode u8 25438 F__ccgo_pad4 [3]byte 25439 FnVtabLock int32 25440 FnHeight int32 25441 FaddrExplain int32 25442 F__ccgo_pad5 [4]byte 25443 FpVList uintptr 25444 FpReprepare uintptr 25445 FzTail uintptr 25446 FpNewTable uintptr 25447 FpNewIndex uintptr 25448 FpNewTrigger uintptr 25449 FzAuthContext uintptr 25450 FsArg Token 25451 FapVtabLock uintptr 25452 FpWith uintptr 25453 FpRename uintptr 25454 } 25455 25456 type Parse = Parse1 25457 type ParseCleanup1 = struct { 25458 FpNext uintptr 25459 FpPtr uintptr 25460 FxCleanup uintptr 25461 } 25462 25463 type ParseCleanup = ParseCleanup1 25464 type PreUpdate1 = struct { 25465 Fv uintptr 25466 FpCsr uintptr 25467 Fop int32 25468 F__ccgo_pad1 [4]byte 25469 FaRecord uintptr 25470 Fkeyinfo KeyInfo 25471 FpUnpacked uintptr 25472 FpNewUnpacked uintptr 25473 FiNewReg int32 25474 FiBlobWrite int32 25475 FiKey1 i64 25476 FiKey2 i64 25477 FaNew uintptr 25478 FpTab uintptr 25479 FpPk uintptr 25480 } 25481 25482 type PrintfArguments1 = struct { 25483 FnArg int32 25484 FnUsed int32 25485 FapArg uintptr 25486 } 25487 25488 type PrintfArguments = PrintfArguments1 25489 type Returning1 = struct { 25490 FpParse uintptr 25491 FpReturnEL uintptr 25492 FretTrig Trigger 25493 FretTStep TriggerStep 25494 FiRetCur int32 25495 FnRetCol int32 25496 FiRetReg int32 25497 F__ccgo_pad1 [4]byte 25498 } 25499 25500 type Returning = Returning1 25501 type Savepoint1 = struct { 25502 FzName uintptr 25503 FnDeferredCons i64 25504 FnDeferredImmCons i64 25505 FpNext uintptr 25506 } 25507 25508 type Savepoint = Savepoint1 25509 type Select1 = struct { 25510 Fop u8 25511 F__ccgo_pad1 [1]byte 25512 FnSelectRow LogEst 25513 FselFlags u32 25514 FiLimit int32 25515 FiOffset int32 25516 FselId u32 25517 FaddrOpenEphm [2]int32 25518 F__ccgo_pad2 [4]byte 25519 FpEList uintptr 25520 FpSrc uintptr 25521 FpWhere uintptr 25522 FpGroupBy uintptr 25523 FpHaving uintptr 25524 FpOrderBy uintptr 25525 FpPrior uintptr 25526 FpNext uintptr 25527 FpLimit uintptr 25528 FpWith uintptr 25529 FpWin uintptr 25530 FpWinDefn uintptr 25531 } 25532 25533 type Select = Select1 25534 type SelectDest1 = struct { 25535 FeDest u8 25536 F__ccgo_pad1 [3]byte 25537 FiSDParm int32 25538 FiSDParm2 int32 25539 FiSdst int32 25540 FnSdst int32 25541 F__ccgo_pad2 [4]byte 25542 FzAffSdst uintptr 25543 FpOrderBy uintptr 25544 } 25545 25546 type SelectDest = SelectDest1 25547 type SrcItem1 = struct { 25548 FpSchema uintptr 25549 FzDatabase uintptr 25550 FzName uintptr 25551 FzAlias uintptr 25552 FpTab uintptr 25553 FpSelect uintptr 25554 FaddrFillSub int32 25555 FregReturn int32 25556 FregResult int32 25557 Ffg struct { 25558 F__ccgo_pad1 [0]uint32 25559 Fjointype u8 25560 F__ccgo_pad2 [3]byte 25561 FnotIndexed uint16 25562 F__ccgo_pad3 [2]byte 25563 } 25564 FiCursor int32 25565 Fu3 struct{ FpOn uintptr } 25566 FcolUsed Bitmask 25567 Fu1 struct{ FzIndexedBy uintptr } 25568 Fu2 struct{ FpIBIndex uintptr } 25569 } 25570 25571 type SrcItem = SrcItem1 25572 type SrcList1 = struct { 25573 FnSrc int32 25574 FnAlloc u32 25575 Fa [1]SrcItem 25576 } 25577 25578 type SrcList = SrcList1 25579 type StrAccum = sqlite3_str1 25580 type Table1 = struct { 25581 FzName uintptr 25582 FaCol uintptr 25583 FpIndex uintptr 25584 FzColAff uintptr 25585 FpCheck uintptr 25586 Ftnum Pgno 25587 FnTabRef u32 25588 FtabFlags u32 25589 FiPKey i16 25590 FnCol i16 25591 FnNVCol i16 25592 FnRowLogEst LogEst 25593 FszTabRow LogEst 25594 FkeyConf u8 25595 FeTabType u8 25596 Fu struct { 25597 Ftab struct { 25598 FaddColOffset int32 25599 F__ccgo_pad1 [4]byte 25600 FpFKey uintptr 25601 FpDfltList uintptr 25602 } 25603 } 25604 FpTrigger uintptr 25605 FpSchema uintptr 25606 } 25607 25608 type Table = Table1 25609 type Token1 = struct { 25610 Fz uintptr 25611 Fn uint32 25612 F__ccgo_pad1 [4]byte 25613 } 25614 25615 type Token = Token1 25616 type Trigger1 = struct { 25617 FzName uintptr 25618 Ftable uintptr 25619 Fop u8 25620 Ftr_tm u8 25621 FbReturning u8 25622 F__ccgo_pad1 [5]byte 25623 FpWhen uintptr 25624 FpColumns uintptr 25625 FpSchema uintptr 25626 FpTabSchema uintptr 25627 Fstep_list uintptr 25628 FpNext uintptr 25629 } 25630 25631 type Trigger = Trigger1 25632 type TriggerPrg1 = struct { 25633 FpTrigger uintptr 25634 FpNext uintptr 25635 FpProgram uintptr 25636 Forconf int32 25637 FaColmask [2]u32 25638 F__ccgo_pad1 [4]byte 25639 } 25640 25641 type TriggerPrg = TriggerPrg1 25642 type TriggerStep1 = struct { 25643 Fop u8 25644 Forconf u8 25645 F__ccgo_pad1 [6]byte 25646 FpTrig uintptr 25647 FpSelect uintptr 25648 FzTarget uintptr 25649 FpFrom uintptr 25650 FpWhere uintptr 25651 FpExprList uintptr 25652 FpIdList uintptr 25653 FpUpsert uintptr 25654 FzSpan uintptr 25655 FpNext uintptr 25656 FpLast uintptr 25657 } 25658 25659 type TriggerStep = TriggerStep1 25660 type UnpackedRecord1 = struct { 25661 FpKeyInfo uintptr 25662 FaMem uintptr 25663 Fu struct{ Fz uintptr } 25664 Fn int32 25665 FnField u16 25666 Fdefault_rc i8 25667 FerrCode u8 25668 Fr1 i8 25669 Fr2 i8 25670 FeqSeen u8 25671 F__ccgo_pad1 [5]byte 25672 } 25673 25674 type UnpackedRecord = UnpackedRecord1 25675 type Upsert1 = struct { 25676 FpUpsertTarget uintptr 25677 FpUpsertTargetWhere uintptr 25678 FpUpsertSet uintptr 25679 FpUpsertWhere uintptr 25680 FpNextUpsert uintptr 25681 FisDoUpdate u8 25682 F__ccgo_pad1 [7]byte 25683 FpToFree uintptr 25684 FpUpsertIdx uintptr 25685 FpUpsertSrc uintptr 25686 FregData int32 25687 FiDataCur int32 25688 FiIdxCur int32 25689 F__ccgo_pad2 [4]byte 25690 } 25691 25692 type Upsert = Upsert1 25693 type VTable1 = struct { 25694 Fdb uintptr 25695 FpMod uintptr 25696 FpVtab uintptr 25697 FnRef int32 25698 FbConstraint u8 25699 FeVtabRisk u8 25700 F__ccgo_pad1 [2]byte 25701 FiSavepoint int32 25702 F__ccgo_pad2 [4]byte 25703 FpNext uintptr 25704 } 25705 25706 type VTable = VTable1 25707 type Walker1 = struct { 25708 FpParse uintptr 25709 FxExprCallback uintptr 25710 FxSelectCallback uintptr 25711 FxSelectCallback2 uintptr 25712 FwalkerDepth int32 25713 FeCode u16 25714 F__ccgo_pad1 [2]byte 25715 Fu struct{ FpNC uintptr } 25716 } 25717 25718 type Walker = Walker1 25719 type Window1 = struct { 25720 FzName uintptr 25721 FzBase uintptr 25722 FpPartition uintptr 25723 FpOrderBy uintptr 25724 FeFrmType u8 25725 FeStart u8 25726 FeEnd u8 25727 FbImplicitFrame u8 25728 FeExclude u8 25729 F__ccgo_pad1 [3]byte 25730 FpStart uintptr 25731 FpEnd uintptr 25732 FppThis uintptr 25733 FpNextWin uintptr 25734 FpFilter uintptr 25735 FpWFunc uintptr 25736 FiEphCsr int32 25737 FregAccum int32 25738 FregResult int32 25739 FcsrApp int32 25740 FregApp int32 25741 FregPart int32 25742 FpOwner uintptr 25743 FnBufferCol int32 25744 FiArgCol int32 25745 FregOne int32 25746 FregStartRowid int32 25747 FregEndRowid int32 25748 FbExprArgs u8 25749 F__ccgo_pad2 [3]byte 25750 } 25751 25752 type Window = Window1 25753 type With1 = struct { 25754 FnCte int32 25755 FbView int32 25756 FpOuter uintptr 25757 Fa [1]Cte 25758 } 25759 25760 type With = With1 25761 25762 type Bitmask = u64 25763 25764 type VList = int32 25765 25766 type Pgno = u32 25767 25768 type PgHdr1 = struct { 25769 FpPage uintptr 25770 FpData uintptr 25771 FpExtra uintptr 25772 FpCache uintptr 25773 FpDirty uintptr 25774 FpPager uintptr 25775 Fpgno Pgno 25776 Fflags u16 25777 FnRef i16 25778 FpDirtyNext uintptr 25779 FpDirtyPrev uintptr 25780 } 25781 25782 type DbPage = PgHdr1 25783 25784 type Btree1 = struct { 25785 Fdb uintptr 25786 FpBt uintptr 25787 FinTrans u8 25788 Fsharable u8 25789 Flocked u8 25790 FhasIncrblobCur u8 25791 FwantToLock int32 25792 FnBackup int32 25793 FiBDataVersion u32 25794 FpNext uintptr 25795 FpPrev uintptr 25796 Flock BtLock 25797 } 25798 25799 type BtCursor1 = struct { 25800 FeState u8 25801 FcurFlags u8 25802 FcurPagerFlags u8 25803 Fhints u8 25804 FskipNext int32 25805 FpBtree uintptr 25806 FaOverflow uintptr 25807 FpKey uintptr 25808 FpBt uintptr 25809 FpNext uintptr 25810 Finfo CellInfo 25811 FnKey i64 25812 FpgnoRoot Pgno 25813 FiPage i8 25814 FcurIntKey u8 25815 Fix u16 25816 FaiIdx [19]u16 25817 F__ccgo_pad1 [2]byte 25818 FpKeyInfo uintptr 25819 FpPage uintptr 25820 FapPage [19]uintptr 25821 } 25822 25823 type BtShared1 = struct { 25824 FpPager uintptr 25825 Fdb uintptr 25826 FpCursor uintptr 25827 FpPage1 uintptr 25828 FopenFlags u8 25829 FautoVacuum u8 25830 FincrVacuum u8 25831 FbDoTruncate u8 25832 FinTransaction u8 25833 Fmax1bytePayload u8 25834 FnReserveWanted u8 25835 F__ccgo_pad1 [1]byte 25836 FbtsFlags u16 25837 FmaxLocal u16 25838 FminLocal u16 25839 FmaxLeaf u16 25840 FminLeaf u16 25841 F__ccgo_pad2 [2]byte 25842 FpageSize u32 25843 FusableSize u32 25844 FnTransaction int32 25845 FnPage u32 25846 F__ccgo_pad3 [4]byte 25847 FpSchema uintptr 25848 FxFreeSchema uintptr 25849 Fmutex uintptr 25850 FpHasContent uintptr 25851 FnRef int32 25852 F__ccgo_pad4 [4]byte 25853 FpNext uintptr 25854 FpLock uintptr 25855 FpWriter uintptr 25856 FpTmpSpace uintptr 25857 FnPreformatSize int32 25858 F__ccgo_pad5 [4]byte 25859 } 25860 25861 type BtreePayload1 = struct { 25862 FpKey uintptr 25863 FnKey sqlite3_int64 25864 FpData uintptr 25865 FaMem uintptr 25866 FnMem u16 25867 F__ccgo_pad1 [2]byte 25868 FnData int32 25869 FnZero int32 25870 F__ccgo_pad2 [4]byte 25871 } 25872 25873 type BtreePayload = BtreePayload1 25874 25875 type Vdbe1 = struct { 25876 Fdb uintptr 25877 FpPrev uintptr 25878 FpNext uintptr 25879 FpParse uintptr 25880 FnVar ynVar 25881 F__ccgo_pad1 [2]byte 25882 FnMem int32 25883 FnCursor int32 25884 FcacheCtr u32 25885 Fpc int32 25886 Frc int32 25887 FnChange i64 25888 FiStatement int32 25889 F__ccgo_pad2 [4]byte 25890 FiCurrentTime i64 25891 FnFkConstraint i64 25892 FnStmtDefCons i64 25893 FnStmtDefImmCons i64 25894 FaMem uintptr 25895 FapArg uintptr 25896 FapCsr uintptr 25897 FaVar uintptr 25898 FaOp uintptr 25899 FnOp int32 25900 FnOpAlloc int32 25901 FaColName uintptr 25902 FpResultSet uintptr 25903 FzErrMsg uintptr 25904 FpVList uintptr 25905 FstartTime i64 25906 FnResColumn u16 25907 FerrorAction u8 25908 FminWriteFileFormat u8 25909 FprepFlags u8 25910 FeVdbeState u8 25911 F__ccgo_pad3 [2]byte 25912 Fexpired uint8 25913 F__ccgo_pad4 [3]byte 25914 FbtreeMask yDbMask 25915 FlockMask yDbMask 25916 FaCounter [9]u32 25917 FzSql uintptr 25918 FpFree uintptr 25919 FpFrame uintptr 25920 FpDelFrame uintptr 25921 FnFrame int32 25922 Fexpmask u32 25923 FpProgram uintptr 25924 FpAuxData uintptr 25925 } 25926 25927 type SubProgram1 = struct { 25928 FaOp uintptr 25929 FnOp int32 25930 FnMem int32 25931 FnCsr int32 25932 F__ccgo_pad1 [4]byte 25933 FaOnce uintptr 25934 Ftoken uintptr 25935 FpNext uintptr 25936 } 25937 25938 type SubProgram = SubProgram1 25939 25940 type VdbeOp1 = struct { 25941 Fopcode u8 25942 Fp4type int8 25943 Fp5 u16 25944 Fp1 int32 25945 Fp2 int32 25946 Fp3 int32 25947 Fp4 struct { 25948 F__ccgo_pad1 [0]uint64 25949 Fi int32 25950 F__ccgo_pad2 [4]byte 25951 } 25952 FzComment uintptr 25953 } 25954 25955 type p4union = struct { 25956 F__ccgo_pad1 [0]uint64 25957 Fi int32 25958 F__ccgo_pad2 [4]byte 25959 } 25960 25961 type VdbeOp = VdbeOp1 25962 25963 type VdbeOpList1 = struct { 25964 Fopcode u8 25965 Fp1 int8 25966 Fp2 int8 25967 Fp3 int8 25968 } 25969 25970 type VdbeOpList = VdbeOpList1 25971 25972 type RecordCompare = uintptr 25973 25974 type PgHdr = PgHdr1 25975 25976 type sqlite3_xauth = uintptr 25977 25978 type sqlite3InitInfo = struct { 25979 FnewTnum Pgno 25980 FiDb u8 25981 Fbusy u8 25982 F__ccgo_pad1 [2]byte 25983 ForphanTrigger uint8 25984 F__ccgo_pad2 [7]byte 25985 FazInit uintptr 25986 } 25987 25988 type sColMap = struct { 25989 FiFrom int32 25990 F__ccgo_pad1 [4]byte 25991 FzCol uintptr 25992 } 25993 25994 type AggInfo_col = struct { 25995 FpTab uintptr 25996 FpCExpr uintptr 25997 FiTable int32 25998 FiMem int32 25999 FiColumn i16 26000 FiSorterColumn i16 26001 F__ccgo_pad1 [4]byte 26002 } 26003 26004 type AggInfo_func = struct { 26005 FpFExpr uintptr 26006 FpFunc uintptr 26007 FiMem int32 26008 FiDistinct int32 26009 FiDistAddr int32 26010 F__ccgo_pad1 [4]byte 26011 } 26012 26013 type ynVar = i16 26014 26015 type ExprList_item = struct { 26016 FpExpr uintptr 26017 FzEName uintptr 26018 Ffg struct { 26019 F__ccgo_pad1 [0]uint32 26020 FsortFlags u8 26021 F__ccgo_pad2 [3]byte 26022 FeEName uint16 26023 F__ccgo_pad3 [2]byte 26024 } 26025 Fu struct { 26026 F__ccgo_pad1 [0]uint32 26027 Fx struct { 26028 FiOrderByCol u16 26029 FiAlias u16 26030 } 26031 } 26032 F__ccgo_pad1 [4]byte 26033 } 26034 26035 type IdList_item = struct { 26036 FzName uintptr 26037 Fu4 struct { 26038 F__ccgo_pad1 [0]uint64 26039 Fidx int32 26040 F__ccgo_pad2 [4]byte 26041 } 26042 } 26043 26044 type yDbMask = uint32 26045 26046 type InitData = struct { 26047 Fdb uintptr 26048 FpzErrMsg uintptr 26049 FiDb int32 26050 Frc int32 26051 FmInitFlags u32 26052 FnInitRow u32 26053 FmxPage Pgno 26054 F__ccgo_pad1 [4]byte 26055 } 26056 26057 type Sqlite3Config = struct { 26058 FbMemstat int32 26059 FbCoreMutex u8 26060 FbFullMutex u8 26061 FbOpenUri u8 26062 FbUseCis u8 26063 FbSmallMalloc u8 26064 FbExtraSchemaChecks u8 26065 F__ccgo_pad1 [2]byte 26066 FmxStrlen int32 26067 FneverCorrupt int32 26068 FszLookaside int32 26069 FnLookaside int32 26070 FnStmtSpill int32 26071 Fm sqlite3_mem_methods 26072 Fmutex sqlite3_mutex_methods 26073 Fpcache2 sqlite3_pcache_methods2 26074 FpHeap uintptr 26075 FnHeap int32 26076 FmnReq int32 26077 FmxReq int32 26078 F__ccgo_pad2 [4]byte 26079 FszMmap sqlite3_int64 26080 FmxMmap sqlite3_int64 26081 FpPage uintptr 26082 FszPage int32 26083 FnPage int32 26084 FmxParserStack int32 26085 FsharedCacheEnabled int32 26086 FszPma u32 26087 FisInit int32 26088 FinProgress int32 26089 FisMutexInit int32 26090 FisMallocInit int32 26091 FisPCacheInit int32 26092 FnRefInitMutex int32 26093 F__ccgo_pad3 [4]byte 26094 FpInitMutex uintptr 26095 FxLog uintptr 26096 FpLogArg uintptr 26097 FmxMemdbSize sqlite3_int64 26098 FxTestCallback uintptr 26099 FbLocaltimeFault int32 26100 F__ccgo_pad4 [4]byte 26101 FxAltLocaltime uintptr 26102 FiOnceResetThreshold int32 26103 FszSorterRef u32 26104 FiPrngSeed uint32 26105 F__ccgo_pad5 [4]byte 26106 } 26107 26108 type BoxGeomCtx1 = struct { 26109 Finterp uintptr 26110 FpScript uintptr 26111 } 26112 26113 type BoxGeomCtx = BoxGeomCtx1 26114 26115 type BoxQueryCtx1 = struct { 26116 Finterp uintptr 26117 FpScript uintptr 26118 } 26119 26120 type BoxQueryCtx = BoxQueryCtx1 26121 26122 func testDelUser(tls *libc.TLS, pCtx uintptr) { 26123 var p uintptr = pCtx 26124 tcl.XTcl_EvalObjEx(tls, (*BoxGeomCtx)(unsafe.Pointer(p)).Finterp, (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript, 0) 26125 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26126 var _objPtr uintptr = (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript 26127 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26128 tcl.XTclFreeObj(tls, _objPtr) 26129 } 26130 } 26131 sqlite3.Xsqlite3_free(tls, p) 26132 } 26133 26134 func invokeTclGeomCb(tls *libc.TLS, zName uintptr, p uintptr, nCoord int32, aCoord uintptr) int32 { 26135 bp := tls.Alloc(96) 26136 defer tls.Free(96) 26137 26138 var rc int32 = SQLITE_OK 26139 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext != 0 { 26140 var pCtx uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext 26141 var interp uintptr = (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp 26142 var pScript uintptr = uintptr(0) 26143 var pParam uintptr = uintptr(0) 26144 var pCoord uintptr = uintptr(0) 26145 var ii int32 26146 var pRes uintptr 26147 26148 pScript = tcl.XTcl_DuplicateObj(tls, (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript) 26149 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 26150 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 26151 26152 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)) 26153 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 26154 26155 pParam = tcl.XTcl_NewObj(tls) 26156 for ii = 0; ii < (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam; ii++ { 26157 tcl.XTcl_ListObjAppendElement(tls, 26158 interp, pParam, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + uintptr(ii)*8)))) 26159 } 26160 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pParam) 26161 26162 pCoord = tcl.XTcl_NewObj(tls) 26163 for ii = 0; ii < nCoord; ii++ { 26164 tcl.XTcl_ListObjAppendElement(tls, interp, pCoord, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + uintptr(ii)*8)))) 26165 } 26166 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pCoord) 26167 26168 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([64]uint8{}))-uint64(1)), bp+16, ts+9889, libc.VaList(bp+8, p)) 26169 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 26170 26171 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 26172 if rc != TCL_OK { 26173 rc = SQLITE_ERROR 26174 } else { 26175 *(*int32)(unsafe.Pointer(bp + 80)) = 0 26176 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 26177 26178 pRes = tcl.XTcl_GetObjResult(tls, interp) 26179 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) != 0 { 26180 return TCL_ERROR 26181 } 26182 if *(*int32)(unsafe.Pointer(bp + 80)) > 0 { 26183 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88))))) 26184 if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9892) { 26185 *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) = 0.0 26186 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam = 1 26187 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9897) { 26188 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 26189 rc = SQLITE_ERROR 26190 } else { 26191 var pBGCtx uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(BoxGeomCtx{}))) 26192 if pBGCtx == uintptr(0) { 26193 rc = SQLITE_NOMEM 26194 } else { 26195 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).Finterp = interp 26196 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, pRes) 26197 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript)).FrefCount++ 26198 tcl.XTcl_ListObjReplace(tls, interp, (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript, 0, 1, 0, uintptr(0)) 26199 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pBGCtx 26200 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testDelUser})) 26201 } 26202 } 26203 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9902) { 26204 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 26205 rc = SQLITE_ERROR 26206 } 26207 } 26208 } 26209 } 26210 } 26211 return rc 26212 } 26213 26214 func box_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 26215 var ii int32 26216 26217 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != nCoord { 26218 invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) 26219 return SQLITE_ERROR 26220 } 26221 if invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) != 0 { 26222 return SQLITE_ERROR 26223 } 26224 26225 for ii = 0; ii < nCoord; ii = ii + 2 { 26226 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)) { 26227 *(*int32)(unsafe.Pointer(pRes)) = 0 26228 return SQLITE_OK 26229 } 26230 } 26231 26232 *(*int32)(unsafe.Pointer(pRes)) = 1 26233 26234 return SQLITE_OK 26235 } 26236 26237 func register_box_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26238 bp := tls.Alloc(80) 26239 defer tls.Free(80) 26240 26241 var pCtx uintptr 26242 26243 if objc != 3 { 26244 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 26245 return TCL_ERROR 26246 } 26247 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 26248 return TCL_ERROR 26249 } 26250 26251 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(uintptr(0)))) 26252 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp = interp 26253 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26254 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 26255 26256 sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), ts+9915, *(*uintptr)(unsafe.Pointer(&struct { 26257 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 26258 }{box_geom})), pCtx) 26259 26260 sqlite3.Xsqlite3_snprintf(tls, 64, bp+16, ts+9889, libc.VaList(bp, pCtx)) 26261 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 26262 return TCL_OK 26263 } 26264 26265 func box_query(tls *libc.TLS, pInfo uintptr) int32 { 26266 bp := tls.Alloc(60) 26267 defer tls.Free(60) 26268 26269 *(*[4]uintptr)(unsafe.Pointer(bp)) = [4]uintptr{ts + 5854, ts + 9929, ts + 9936, uintptr(0)} 26270 var pCtx uintptr = (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FpContext 26271 var interp uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp 26272 var pEval uintptr 26273 var pArg uintptr 26274 var pTmp uintptr = uintptr(0) 26275 var rc int32 26276 var ii int32 26277 26278 pEval = tcl.XTcl_DuplicateObj(tls, (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript) 26279 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26280 pArg = tcl.XTcl_NewObj(tls) 26281 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 26282 26283 pTmp = tcl.XTcl_NewObj(tls) 26284 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 26285 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnParam; ii++ { 26286 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaParam + uintptr(ii)*8))) 26287 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 26288 } 26289 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9942, -1)) 26290 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 26291 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26292 var _objPtr uintptr = pTmp 26293 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26294 tcl.XTclFreeObj(tls, _objPtr) 26295 } 26296 } 26297 26298 pTmp = tcl.XTcl_NewObj(tls) 26299 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 26300 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnCoord; ii++ { 26301 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaCoord + uintptr(ii)*8))) 26302 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 26303 } 26304 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9949, -1)) 26305 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 26306 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 26307 var _objPtr uintptr = pTmp 26308 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26309 tcl.XTclFreeObj(tls, _objPtr) 26310 } 26311 } 26312 26313 pTmp = tcl.XTcl_NewObj(tls) 26314 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 26315 for ii = 0; ii <= (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel; ii++ { 26316 var p uintptr = tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FanQueue + uintptr(ii)*4)))) 26317 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 26318 } 26319 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9956, -1)) 26320 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 26321 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 26322 var _objPtr uintptr = pTmp 26323 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26324 tcl.XTclFreeObj(tls, _objPtr) 26325 } 26326 } 26327 26328 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9964, -1)) 26329 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiLevel)) 26330 26331 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9971, -1)) 26332 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel)) 26333 26334 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9979, -1)) 26335 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewWideIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiRowid)) 26336 26337 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9986, -1)) 26338 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewDoubleObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrParentScore)) 26339 26340 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9999, -1)) 26341 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, 26342 tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin)*8)), -1)) 26343 26344 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, pArg) 26345 if tcl.XTcl_EvalObjEx(tls, interp, pEval, 0) != 0 { 26346 rc = SQLITE_ERROR 26347 } else { 26348 rc = SQLITE_OK 26349 } 26350 26351 if rc == SQLITE_OK { 26352 *(*float64)(unsafe.Pointer(bp + 48)) = 0.0 26353 *(*int32)(unsafe.Pointer(bp + 32)) = 0 26354 *(*int32)(unsafe.Pointer(bp + 56)) = 0 26355 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 26356 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 26357 26358 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+32, bp+40) != 0 || 26359 *(*int32)(unsafe.Pointer(bp + 32)) != 2 || 26360 tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)) + 1*8)), bp+48) != 0 || 26361 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 { 26362 rc = SQLITE_ERROR 26363 } else { 26364 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrScore = *(*float64)(unsafe.Pointer(bp + 48)) 26365 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin = *(*int32)(unsafe.Pointer(bp + 56)) 26366 } 26367 } 26368 26369 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 26370 var _objPtr uintptr = pArg 26371 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26372 tcl.XTclFreeObj(tls, _objPtr) 26373 } 26374 } 26375 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 26376 var _objPtr uintptr = pEval 26377 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26378 tcl.XTclFreeObj(tls, _objPtr) 26379 } 26380 } 26381 return rc 26382 } 26383 26384 func box_query_destroy(tls *libc.TLS, p uintptr) { 26385 var pCtx uintptr = p 26386 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26387 var _objPtr uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript 26388 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26389 tcl.XTclFreeObj(tls, _objPtr) 26390 } 26391 } 26392 tcl.XTcl_Free(tls, pCtx) 26393 } 26394 26395 func register_box_query(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26396 bp := tls.Alloc(8) 26397 defer tls.Free(8) 26398 26399 var pCtx uintptr 26400 26401 if objc != 3 { 26402 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 26403 return TCL_ERROR 26404 } 26405 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 26406 return TCL_ERROR 26407 } 26408 26409 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(BoxQueryCtx{}))) 26410 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp = interp 26411 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26412 (*Tcl_Obj)(unsafe.Pointer((*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 26413 26414 sqlite3.Xsqlite3_rtree_query_callback(tls, 26415 *(*uintptr)(unsafe.Pointer(bp)), ts+10019, *(*uintptr)(unsafe.Pointer(&struct { 26416 f func(*libc.TLS, uintptr) int32 26417 }{box_query})), pCtx, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{box_query_destroy}))) 26418 26419 tcl.XTcl_ResetResult(tls, interp) 26420 return TCL_OK 26421 } 26422 26423 func Sqlitetestrtreedoc_Init(tls *libc.TLS, interp uintptr) int32 { 26424 tcl.XTcl_CreateObjCommand(tls, interp, ts+10024, *(*uintptr)(unsafe.Pointer(&struct { 26425 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26426 }{register_box_geom})), uintptr(0), uintptr(0)) 26427 tcl.XTcl_CreateObjCommand(tls, interp, ts+10042, *(*uintptr)(unsafe.Pointer(&struct { 26428 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26429 }{register_box_query})), uintptr(0), uintptr(0)) 26430 return TCL_OK 26431 } 26432 26433 type TestSession1 = struct { 26434 FpSession uintptr 26435 Finterp uintptr 26436 FpFilterScript uintptr 26437 } 26438 26439 type TestSession = TestSession1 26440 26441 type TestStreamInput1 = struct { 26442 FnStream int32 26443 F__ccgo_pad1 [4]byte 26444 FaData uintptr 26445 FnData int32 26446 FiData int32 26447 } 26448 26449 type TestStreamInput = TestStreamInput1 26450 26451 func dbHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 26452 bp := tls.Alloc(88) 26453 defer tls.Free(88) 26454 26455 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 26456 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 26457 return TCL_ERROR 26458 } 26459 26460 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26461 return TCL_OK 26462 } 26463 26464 func sql_exec_changeset(tls *libc.TLS, db uintptr, zSql uintptr, pnChangeset uintptr, ppChangeset uintptr) int32 { 26465 bp := tls.Alloc(8) 26466 defer tls.Free(8) 26467 26468 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 26469 var rc int32 26470 26471 rc = sqlite3.Xsqlite3session_create(tls, db, ts+85, bp) 26472 26473 if rc == SQLITE_OK { 26474 rc = sqlite3.Xsqlite3session_attach(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0)) 26475 } 26476 26477 if rc == SQLITE_OK { 26478 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 26479 } 26480 26481 if rc == SQLITE_OK { 26482 rc = sqlite3.Xsqlite3session_changeset(tls, *(*uintptr)(unsafe.Pointer(bp)), pnChangeset, ppChangeset) 26483 } 26484 26485 sqlite3.Xsqlite3session_delete(tls, *(*uintptr)(unsafe.Pointer(bp))) 26486 26487 return rc 26488 } 26489 26490 func test_sql_exec_changeset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26491 bp := tls.Alloc(40) 26492 defer tls.Free(40) 26493 26494 var zSql uintptr 26495 26496 var rc int32 26497 26498 if objc != 3 { 26499 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 26500 return TCL_ERROR 26501 } 26502 if dbHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 26503 return TCL_ERROR 26504 } 26505 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26506 26507 rc = sql_exec_changeset(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zSql, bp+24, bp+32) 26508 if rc != SQLITE_OK { 26509 tcl.XTcl_ResetResult(tls, interp) 26510 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+10068, 0)) 26511 return TCL_ERROR 26512 } 26513 26514 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 24)))) 26515 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 26516 return TCL_OK 26517 } 26518 26519 func test_tcl_integer(tls *libc.TLS, interp uintptr, zVar uintptr) int32 { 26520 bp := tls.Alloc(4) 26521 defer tls.Free(4) 26522 26523 var pObj uintptr 26524 *(*int32)(unsafe.Pointer(bp)) = 0 26525 var pName uintptr = tcl.XTcl_NewStringObj(tls, zVar, -1) 26526 (*Tcl_Obj)(unsafe.Pointer(pName)).FrefCount++ 26527 pObj = tcl.XTcl_ObjGetVar2(tls, interp, pName, uintptr(0), TCL_GLOBAL_ONLY) 26528 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26529 var _objPtr uintptr = pName 26530 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26531 tcl.XTclFreeObj(tls, _objPtr) 26532 } 26533 } 26534 if pObj != 0 { 26535 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pObj, bp) 26536 } 26537 return *(*int32)(unsafe.Pointer(bp)) 26538 } 26539 26540 func test_session_error(tls *libc.TLS, interp uintptr, rc int32, zErr uintptr) int32 { 26541 bp := tls.Alloc(24) 26542 defer tls.Free(24) 26543 26544 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26545 if zErr != 0 { 26546 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, zErr, 0)) 26547 sqlite3.Xsqlite3_free(tls, zErr) 26548 } 26549 return TCL_ERROR 26550 } 26551 26552 func test_table_filter(tls *libc.TLS, pCtx uintptr, zTbl uintptr) int32 { 26553 bp := tls.Alloc(4) 26554 defer tls.Free(4) 26555 26556 var p uintptr = pCtx 26557 var pEval uintptr 26558 var rc int32 26559 *(*int32)(unsafe.Pointer(bp)) = 0 26560 26561 pEval = tcl.XTcl_DuplicateObj(tls, (*TestSession)(unsafe.Pointer(p)).FpFilterScript) 26562 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26563 rc = tcl.XTcl_ListObjAppendElement(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 26564 if rc == TCL_OK { 26565 rc = tcl.XTcl_EvalObjEx(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 26566 } 26567 if rc == TCL_OK { 26568 rc = tcl.XTcl_GetBooleanFromObj(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestSession)(unsafe.Pointer(p)).Finterp), bp) 26569 } 26570 if rc != TCL_OK { 26571 tcl.XTcl_BackgroundError(tls, (*TestSession)(unsafe.Pointer(p)).Finterp) 26572 } 26573 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26574 var _objPtr uintptr = pEval 26575 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26576 tcl.XTclFreeObj(tls, _objPtr) 26577 } 26578 } 26579 26580 return *(*int32)(unsafe.Pointer(bp)) 26581 } 26582 26583 type TestSessionsBlob1 = struct { 26584 Fp uintptr 26585 Fn int32 26586 F__ccgo_pad1 [4]byte 26587 } 26588 26589 type TestSessionsBlob = TestSessionsBlob1 26590 26591 func testStreamOutput(tls *libc.TLS, pCtx uintptr, pData uintptr, nData int32) int32 { 26592 var pBlob uintptr = pCtx 26593 var pNew uintptr 26594 26595 pNew = sqlite3.Xsqlite3_realloc(tls, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn+nData) 26596 if pNew == uintptr(0) { 26597 return SQLITE_NOMEM 26598 } 26599 (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp = pNew 26600 libc.Xmemcpy(tls, pNew+uintptr((*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn), pData, uint64(nData)) 26601 *(*int32)(unsafe.Pointer(pBlob + 8)) += nData 26602 return SQLITE_OK 26603 } 26604 26605 func test_session_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26606 bp := tls.Alloc(44) 26607 defer tls.Free(44) 26608 26609 var p uintptr = clientData 26610 var pSession uintptr = (*TestSession)(unsafe.Pointer(p)).FpSession 26611 26612 var rc int32 26613 26614 if objc < 2 { 26615 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 26616 return TCL_ERROR 26617 } 26618 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 26619 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub)), int32(unsafe.Sizeof(SessionSubcmd{})), ts+2014, 0, bp) 26620 if rc != TCL_OK { 26621 return rc 26622 } 26623 if objc != 2+aSub[*(*int32)(unsafe.Pointer(bp))].FnArg { 26624 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub[*(*int32)(unsafe.Pointer(bp))].FzMsg) 26625 return TCL_ERROR 26626 } 26627 26628 switch *(*int32)(unsafe.Pointer(bp)) { 26629 case 0: 26630 { 26631 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26632 if int32(*(*uint8)(unsafe.Pointer(zArg))) == '*' && int32(*(*uint8)(unsafe.Pointer(zArg + 1))) == 0 { 26633 zArg = uintptr(0) 26634 } 26635 rc = sqlite3.Xsqlite3session_attach(tls, pSession, zArg) 26636 if rc != SQLITE_OK { 26637 return test_session_error(tls, interp, rc, uintptr(0)) 26638 } 26639 break 26640 26641 } 26642 26643 case 7: 26644 fallthrough 26645 case 1: 26646 { 26647 *(*TestSessionsBlob)(unsafe.Pointer(bp + 8)) = TestSessionsBlob{} 26648 if test_tcl_integer(tls, interp, ts+10098) != 0 { 26649 var pCtx uintptr = bp + 8 26650 if *(*int32)(unsafe.Pointer(bp)) == 7 { 26651 rc = sqlite3.Xsqlite3session_patchset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26652 f func(*libc.TLS, uintptr, uintptr, int32) int32 26653 }{testStreamOutput})), pCtx) 26654 } else { 26655 rc = sqlite3.Xsqlite3session_changeset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26656 f func(*libc.TLS, uintptr, uintptr, int32) int32 26657 }{testStreamOutput})), pCtx) 26658 } 26659 } else { 26660 if *(*int32)(unsafe.Pointer(bp)) == 7 { 26661 rc = sqlite3.Xsqlite3session_patchset(tls, pSession, bp+8+8, bp+8) 26662 } else { 26663 rc = sqlite3.Xsqlite3session_changeset(tls, pSession, bp+8+8, bp+8) 26664 } 26665 } 26666 if rc == SQLITE_OK { 26667 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fn)) 26668 } 26669 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp) 26670 if rc != SQLITE_OK { 26671 return test_session_error(tls, interp, rc, uintptr(0)) 26672 } 26673 break 26674 26675 } 26676 26677 case 2: 26678 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 26679 break 26680 26681 case 3: 26682 { 26683 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 26684 return TCL_ERROR 26685 } 26686 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3session_enable(tls, pSession, *(*int32)(unsafe.Pointer(bp + 24))) 26687 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 24)) != 0))) 26688 break 26689 26690 } 26691 26692 case 4: 26693 { 26694 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+28) != 0 { 26695 return TCL_ERROR 26696 } 26697 *(*int32)(unsafe.Pointer(bp + 28)) = sqlite3.Xsqlite3session_indirect(tls, pSession, *(*int32)(unsafe.Pointer(bp + 28))) 26698 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 28)) != 0))) 26699 break 26700 26701 } 26702 26703 case 5: 26704 { 26705 var val int32 26706 val = sqlite3.Xsqlite3session_isempty(tls, pSession) 26707 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(val != 0))) 26708 break 26709 26710 } 26711 26712 case 6: 26713 { 26714 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 26715 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26716 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 26717 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26718 tcl.XTclFreeObj(tls, _objPtr) 26719 } 26720 } 26721 } 26722 (*TestSession)(unsafe.Pointer(p)).Finterp = interp 26723 (*TestSession)(unsafe.Pointer(p)).FpFilterScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 26724 (*Tcl_Obj)(unsafe.Pointer((*TestSession)(unsafe.Pointer(p)).FpFilterScript)).FrefCount++ 26725 sqlite3.Xsqlite3session_table_filter(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 26726 f func(*libc.TLS, uintptr, uintptr) int32 26727 }{test_table_filter})), clientData) 26728 break 26729 26730 } 26731 26732 case 8: 26733 { 26734 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 26735 rc = sqlite3.Xsqlite3session_diff(tls, pSession, 26736 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 26737 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), 26738 bp+32) 26739 26740 if rc != 0 { 26741 return test_session_error(tls, interp, rc, *(*uintptr)(unsafe.Pointer(bp + 32))) 26742 } 26743 break 26744 26745 } 26746 26747 case 9: 26748 { 26749 var nMalloc sqlite3_int64 = sqlite3.Xsqlite3session_memory_used(tls, pSession) 26750 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nMalloc)) 26751 break 26752 26753 } 26754 26755 case 10: 26756 { 26757 var nSize sqlite3_int64 = sqlite3.Xsqlite3session_changeset_size(tls, pSession) 26758 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nSize)) 26759 break 26760 26761 } 26762 case 11: 26763 { 26764 var rc int32 26765 26766 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 26767 return TCL_ERROR 26768 } 26769 rc = sqlite3.Xsqlite3session_object_config(tls, 26770 pSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+40) 26771 if rc != SQLITE_OK { 26772 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26773 } else { 26774 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 26775 } 26776 break 26777 26778 } 26779 } 26780 26781 return TCL_OK 26782 } 26783 26784 type SessionSubcmd = struct { 26785 FzSub uintptr 26786 FnArg int32 26787 F__ccgo_pad1 [4]byte 26788 FzMsg uintptr 26789 FiSub int32 26790 F__ccgo_pad2 [4]byte 26791 } 26792 26793 var aSub = [13]SessionSubcmd{ 26794 {FzSub: ts + 10121, FnArg: 1, FzMsg: ts + 1951}, 26795 {FzSub: ts + 10128, FzMsg: ts + 584}, 26796 {FzSub: ts + 10138, FzMsg: ts + 584}, 26797 {FzSub: ts + 10145, FnArg: 1, FzMsg: ts + 10152}, 26798 {FzSub: ts + 10157, FnArg: 1, FzMsg: ts + 10152}, 26799 {FzSub: ts + 10166, FzMsg: ts + 584}, 26800 {FzSub: ts + 10174, FnArg: 1, FzMsg: ts + 10187}, 26801 {FzSub: ts + 10194, FzMsg: ts + 584}, 26802 {FzSub: ts + 10203, FnArg: 2, FzMsg: ts + 10208}, 26803 {FzSub: ts + 10219, FzMsg: ts + 584}, 26804 {FzSub: ts + 10231, FzMsg: ts + 584}, 26805 {FzSub: ts + 10246, FnArg: 1, FzMsg: ts + 2413}, 26806 {}, 26807 } 26808 26809 func test_session_del(tls *libc.TLS, clientData uintptr) { 26810 var p uintptr = clientData 26811 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 26812 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26813 var _objPtr uintptr = (*TestSession)(unsafe.Pointer(p)).FpFilterScript 26814 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26815 tcl.XTclFreeObj(tls, _objPtr) 26816 } 26817 } 26818 } 26819 sqlite3.Xsqlite3session_delete(tls, (*TestSession)(unsafe.Pointer(p)).FpSession) 26820 tcl.XTcl_Free(tls, p) 26821 } 26822 26823 func test_sqlite3session(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 26824 bp := tls.Alloc(92) 26825 defer tls.Free(92) 26826 26827 var db uintptr 26828 26829 var rc int32 26830 var p uintptr 26831 *(*int32)(unsafe.Pointer(bp + 88)) = -1 26832 26833 if objc != 4 { 26834 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10265) 26835 return TCL_ERROR 26836 } 26837 26838 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) { 26839 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 26840 return TCL_ERROR 26841 } 26842 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 26843 26844 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestSession{}))) 26845 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TestSession{}))) 26846 rc = sqlite3.Xsqlite3session_create(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), p) 26847 if rc != SQLITE_OK { 26848 tcl.XTcl_Free(tls, p) 26849 return test_session_error(tls, interp, rc, uintptr(0)) 26850 } 26851 26852 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 26853 26854 *(*int32)(unsafe.Pointer(bp + 88)) = 1 26855 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 26856 26857 tcl.XTcl_CreateObjCommand(tls, 26858 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 26859 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 26860 }{test_session_cmd})), p, 26861 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_session_del}))) 26862 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 26863 return TCL_OK 26864 } 26865 26866 func test_append_value(tls *libc.TLS, pList uintptr, pVal uintptr) { 26867 if pVal == uintptr(0) { 26868 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 26869 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 26870 } else { 26871 var pObj uintptr 26872 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 26873 case SQLITE_NULL: 26874 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10287, 1)) 26875 pObj = tcl.XTcl_NewObj(tls) 26876 break 26877 fallthrough 26878 case SQLITE_INTEGER: 26879 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10289, 1)) 26880 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, pVal)) 26881 break 26882 fallthrough 26883 case SQLITE_FLOAT: 26884 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10291, 1)) 26885 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, pVal)) 26886 break 26887 fallthrough 26888 case SQLITE_TEXT: 26889 { 26890 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 26891 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 26892 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10293, 1)) 26893 pObj = tcl.XTcl_NewStringObj(tls, z, n) 26894 break 26895 26896 } 26897 fallthrough 26898 default: 26899 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+6206, 1)) 26900 pObj = tcl.XTcl_NewByteArrayObj(tls, 26901 sqlite3.Xsqlite3_value_blob(tls, pVal), 26902 sqlite3.Xsqlite3_value_bytes(tls, pVal)) 26903 break 26904 } 26905 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, pObj) 26906 } 26907 } 26908 26909 type TestConflictHandler1 = struct { 26910 Finterp uintptr 26911 FpConflictScript uintptr 26912 FpFilterScript uintptr 26913 } 26914 26915 type TestConflictHandler = TestConflictHandler1 26916 26917 func test_obj_eq_string(tls *libc.TLS, p uintptr, z uintptr) int32 { 26918 bp := tls.Alloc(4) 26919 defer tls.Free(4) 26920 26921 var n int32 26922 26923 var zObj uintptr 26924 26925 n = int32(libc.Xstrlen(tls, z)) 26926 zObj = tcl.XTcl_GetStringFromObj(tls, p, bp) 26927 26928 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == n && (n == 0 || 0 == libc.Xmemcmp(tls, zObj, z, uint64(n)))) 26929 } 26930 26931 func test_filter_handler(tls *libc.TLS, pCtx uintptr, zTab uintptr) int32 { 26932 bp := tls.Alloc(4) 26933 defer tls.Free(4) 26934 26935 var p uintptr = pCtx 26936 *(*int32)(unsafe.Pointer(bp)) = 1 26937 var pEval uintptr 26938 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 26939 26940 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpFilterScript) 26941 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26942 26943 if TCL_OK != tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zTab, -1)) || 26944 TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) || 26945 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 26946 tcl.XTcl_BackgroundError(tls, interp) 26947 } 26948 26949 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26950 var _objPtr uintptr = pEval 26951 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 26952 tcl.XTclFreeObj(tls, _objPtr) 26953 } 26954 } 26955 return *(*int32)(unsafe.Pointer(bp)) 26956 } 26957 26958 func test_conflict_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 26959 bp := tls.Alloc(104) 26960 defer tls.Free(104) 26961 26962 var p uintptr = pCtx 26963 var pEval uintptr 26964 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 26965 *(*int32)(unsafe.Pointer(bp + 100)) = 0 26966 26967 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpConflictScript) 26968 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 26969 26970 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 26971 26972 if eConf == SQLITE_CHANGESET_FOREIGN_KEY { 26973 sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+16) 26974 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, ts+10295, -1)) 26975 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 26976 } else { 26977 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, 26978 func() uintptr { 26979 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 26980 return ts + 10307 26981 } 26982 return func() uintptr { 26983 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_UPDATE { 26984 return ts + 10314 26985 } 26986 return ts + 10321 26987 }() 26988 }(), -1)) 26989 26990 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp)), -1)) 26991 26992 switch eConf { 26993 case SQLITE_CHANGESET_DATA: 26994 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10328, -1)) 26995 break 26996 fallthrough 26997 case SQLITE_CHANGESET_NOTFOUND: 26998 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10333, -1)) 26999 break 27000 fallthrough 27001 case SQLITE_CHANGESET_CONFLICT: 27002 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10342, -1)) 27003 break 27004 fallthrough 27005 case SQLITE_CHANGESET_CONSTRAINT: 27006 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10351, -1)) 27007 break 27008 } 27009 27010 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 27011 var i int32 27012 var pOld uintptr = tcl.XTcl_NewObj(tls) 27013 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 27014 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+24) 27015 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 24))) 27016 } 27017 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pOld) 27018 } 27019 27020 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 27021 var i int32 27022 var pNew uintptr = tcl.XTcl_NewObj(tls) 27023 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 27024 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+32) 27025 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 32))) 27026 } 27027 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pNew) 27028 } 27029 27030 if eConf == SQLITE_CHANGESET_DATA || eConf == SQLITE_CHANGESET_CONFLICT { 27031 var i int32 27032 var pConflict uintptr = tcl.XTcl_NewObj(tls) 27033 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 27034 var rc int32 27035 _ = rc 27036 27037 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, i, bp+40) 27038 27039 test_append_value(tls, pConflict, *(*uintptr)(unsafe.Pointer(bp + 40))) 27040 } 27041 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pConflict) 27042 } 27043 27044 if eConf == SQLITE_CHANGESET_CONSTRAINT || 27045 eConf == SQLITE_CHANGESET_NOTFOUND { 27046 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, 0, bp+48) 27047 _ = rc 27048 27049 } else { 27050 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, -1, bp+56) 27051 _ = rc 27052 27053 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+56) 27054 27055 } 27056 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_DELETE { 27057 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, 0, bp+64) 27058 _ = rc 27059 27060 } else { 27061 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, -1, bp+72) 27062 _ = rc 27063 27064 rc = sqlite3.Xsqlite3changeset_new(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+72) 27065 27066 } 27067 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 27068 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, 0, bp+80) 27069 _ = rc 27070 27071 } else { 27072 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, -1, bp+88) 27073 _ = rc 27074 27075 rc = sqlite3.Xsqlite3changeset_old(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+88) 27076 27077 } 27078 if eConf != SQLITE_CHANGESET_FOREIGN_KEY { 27079 var rc int32 = sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+96) 27080 _ = rc 27081 27082 } 27083 27084 } 27085 27086 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) { 27087 tcl.XTcl_BackgroundError(tls, interp) 27088 } else { 27089 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 27090 if test_obj_eq_string(tls, pRes, ts+10362) != 0 || test_obj_eq_string(tls, pRes, ts+584) != 0 { 27091 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_OMIT 27092 } else if test_obj_eq_string(tls, pRes, ts+7846) != 0 { 27093 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_REPLACE 27094 } else if test_obj_eq_string(tls, pRes, ts+7840) != 0 { 27095 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_ABORT 27096 } else { 27097 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pRes, bp+100) 27098 } 27099 } 27100 27101 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 27102 var _objPtr uintptr = pEval 27103 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 27104 tcl.XTclFreeObj(tls, _objPtr) 27105 } 27106 } 27107 return *(*int32)(unsafe.Pointer(bp + 100)) 27108 } 27109 27110 func replace_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 27111 bp := tls.Alloc(32) 27112 defer tls.Free(32) 27113 27114 var i int32 27115 var x int32 = 0 27116 27117 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 27118 27119 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 27120 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 27121 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+16) 27122 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 27123 x++ 27124 } 27125 } 27126 27127 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 27128 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 27129 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+24) 27130 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 27131 x++ 27132 } 27133 } 27134 27135 if eConf == SQLITE_CHANGESET_DATA { 27136 return SQLITE_CHANGESET_REPLACE 27137 } 27138 return SQLITE_CHANGESET_OMIT 27139 } 27140 27141 func testStreamInput(tls *libc.TLS, pCtx uintptr, pData uintptr, pnData uintptr) int32 { 27142 var p uintptr = pCtx 27143 var nReq int32 = *(*int32)(unsafe.Pointer(pnData)) 27144 var nRem int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnData - (*TestStreamInput)(unsafe.Pointer(p)).FiData 27145 var nRet int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnStream 27146 27147 var pAlloc uintptr = sqlite3.Xsqlite3_malloc(tls, 10) 27148 if pAlloc == uintptr(0) { 27149 return SQLITE_NOMEM 27150 } 27151 sqlite3.Xsqlite3_free(tls, pAlloc) 27152 27153 if nRet > nReq { 27154 nRet = nReq 27155 } 27156 if nRet > nRem { 27157 nRet = nRem 27158 } 27159 27160 if nRet > 0 { 27161 libc.Xmemcpy(tls, pData, (*TestStreamInput)(unsafe.Pointer(p)).FaData+uintptr((*TestStreamInput)(unsafe.Pointer(p)).FiData), uint64(nRet)) 27162 *(*int32)(unsafe.Pointer(p + 20)) += nRet 27163 } 27164 27165 *(*int32)(unsafe.Pointer(pnData)) = nRet 27166 return SQLITE_OK 27167 } 27168 27169 func testSqlite3changesetApply(tls *libc.TLS, bV2 int32, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27170 bp := tls.Alloc(156) 27171 defer tls.Free(156) 27172 27173 var db uintptr 27174 27175 var rc int32 27176 var pChangeset uintptr 27177 27178 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 27179 *(*int32)(unsafe.Pointer(bp + 152)) = 0 27180 var flags int32 = 0 27181 27182 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27183 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27184 27185 if bV2 != 0 { 27186 if objc > 1 { 27187 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27188 var n int32 = int32(libc.Xstrlen(tls, z1)) 27189 if n > 1 && n <= 12 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10367, z1, n) { 27190 flags = flags | SQLITE_CHANGESETAPPLY_NOSAVEPOINT 27191 objc-- 27192 objv += 8 27193 } 27194 } 27195 if objc > 1 { 27196 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27197 var n int32 = int32(libc.Xstrlen(tls, z1)) 27198 if n > 1 && n <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10380, z1, n) { 27199 flags = flags | SQLITE_CHANGESETAPPLY_INVERT 27200 objc-- 27201 objv += 8 27202 } 27203 } 27204 } 27205 27206 if objc != 4 && objc != 5 { 27207 var zMsg uintptr 27208 if bV2 != 0 { 27209 zMsg = ts + 10388 27210 } else { 27211 zMsg = ts + 10459 27212 } 27213 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zMsg) 27214 return TCL_ERROR 27215 } 27216 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) { 27217 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), 0)) 27218 return TCL_ERROR 27219 } 27220 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData)) 27221 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+112) 27222 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpConflictScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 27223 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpFilterScript = func() uintptr { 27224 if objc == 5 { 27225 return *(*uintptr)(unsafe.Pointer(objv + 4*8)) 27226 } 27227 return uintptr(0) 27228 }() 27229 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).Finterp = interp 27230 27231 if (*TestStreamInput)(unsafe.Pointer(bp+24)).FnStream == 0 { 27232 if bV2 == 0 { 27233 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 27234 func() uintptr { 27235 if objc == 5 { 27236 return *(*uintptr)(unsafe.Pointer(&struct { 27237 f func(*libc.TLS, uintptr, uintptr) int32 27238 }{test_filter_handler})) 27239 } 27240 return uintptr(0) 27241 }(), *(*uintptr)(unsafe.Pointer(&struct { 27242 f func(*libc.TLS, uintptr, int32, uintptr) int32 27243 }{test_conflict_handler})), bp+120) 27244 } else { 27245 rc = sqlite3.Xsqlite3changeset_apply_v2(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 27246 func() uintptr { 27247 if objc == 5 { 27248 return *(*uintptr)(unsafe.Pointer(&struct { 27249 f func(*libc.TLS, uintptr, uintptr) int32 27250 }{test_filter_handler})) 27251 } 27252 return uintptr(0) 27253 }(), *(*uintptr)(unsafe.Pointer(&struct { 27254 f func(*libc.TLS, uintptr, int32, uintptr) int32 27255 }{test_conflict_handler})), bp+120, 27256 bp+144, bp+152, flags) 27257 } 27258 } else { 27259 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = pChangeset 27260 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnData = *(*int32)(unsafe.Pointer(bp + 112)) 27261 if bV2 == 0 { 27262 rc = sqlite3.Xsqlite3changeset_apply_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 27263 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27264 }{testStreamInput})), bp+24, 27265 func() uintptr { 27266 if objc == 5 { 27267 return *(*uintptr)(unsafe.Pointer(&struct { 27268 f func(*libc.TLS, uintptr, uintptr) int32 27269 }{test_filter_handler})) 27270 } 27271 return uintptr(0) 27272 }(), 27273 *(*uintptr)(unsafe.Pointer(&struct { 27274 f func(*libc.TLS, uintptr, int32, uintptr) int32 27275 }{test_conflict_handler})), bp+120) 27276 } else { 27277 rc = sqlite3.Xsqlite3changeset_apply_v2_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 27278 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27279 }{testStreamInput})), bp+24, 27280 func() uintptr { 27281 if objc == 5 { 27282 return *(*uintptr)(unsafe.Pointer(&struct { 27283 f func(*libc.TLS, uintptr, uintptr) int32 27284 }{test_filter_handler})) 27285 } 27286 return uintptr(0) 27287 }(), 27288 *(*uintptr)(unsafe.Pointer(&struct { 27289 f func(*libc.TLS, uintptr, int32, uintptr) int32 27290 }{test_conflict_handler})), bp+120, 27291 bp+144, bp+152, flags) 27292 } 27293 } 27294 27295 if rc != SQLITE_OK { 27296 return test_session_error(tls, interp, rc, uintptr(0)) 27297 } else { 27298 tcl.XTcl_ResetResult(tls, interp) 27299 if bV2 != 0 && *(*uintptr)(unsafe.Pointer(bp + 144)) != 0 { 27300 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 144)), *(*int32)(unsafe.Pointer(bp + 152)))) 27301 } 27302 } 27303 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 144))) 27304 return TCL_OK 27305 } 27306 27307 func test_sqlite3changeset_apply(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27308 return testSqlite3changesetApply(tls, 0, clientData, interp, objc, objv) 27309 } 27310 27311 func test_sqlite3changeset_apply_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27312 return testSqlite3changesetApply(tls, 1, clientData, interp, objc, objv) 27313 } 27314 27315 func test_sqlite3changeset_apply_replace_all(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27316 bp := tls.Alloc(92) 27317 defer tls.Free(92) 27318 27319 var db uintptr 27320 27321 var rc int32 27322 var pChangeset uintptr 27323 27324 if objc != 3 { 27325 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10504) 27326 return TCL_ERROR 27327 } 27328 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) { 27329 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 27330 return TCL_ERROR 27331 } 27332 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 27333 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+88) 27334 27335 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 88)), pChangeset, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 27336 f func(*libc.TLS, uintptr, int32, uintptr) int32 27337 }{replace_handler})), uintptr(0)) 27338 if rc != SQLITE_OK { 27339 return test_session_error(tls, interp, rc, uintptr(0)) 27340 } 27341 tcl.XTcl_ResetResult(tls, interp) 27342 return TCL_OK 27343 } 27344 27345 func test_sqlite3changeset_invert(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27346 bp := tls.Alloc(40) 27347 defer tls.Free(40) 27348 27349 var rc int32 27350 27351 if objc != 2 { 27352 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10517) 27353 return TCL_ERROR 27354 } 27355 27356 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27357 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestSessionsBlob{}))) 27358 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27359 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 27360 27361 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream != 0 { 27362 rc = sqlite3.Xsqlite3changeset_invert_strm(tls, 27363 *(*uintptr)(unsafe.Pointer(&struct { 27364 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27365 }{testStreamInput})), bp, *(*uintptr)(unsafe.Pointer(&struct { 27366 f func(*libc.TLS, uintptr, uintptr, int32) int32 27367 }{testStreamOutput})), bp+24) 27368 } else { 27369 rc = sqlite3.Xsqlite3changeset_invert(tls, (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, bp+24+8, bp+24) 27370 } 27371 if rc != SQLITE_OK { 27372 rc = test_session_error(tls, interp, rc, uintptr(0)) 27373 } else { 27374 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fn)) 27375 } 27376 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp) 27377 return rc 27378 } 27379 27380 func test_sqlite3changeset_concat(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27381 bp := tls.Alloc(64) 27382 defer tls.Free(64) 27383 27384 var rc int32 27385 27386 *(*TestSessionsBlob)(unsafe.Pointer(bp + 48)) = TestSessionsBlob{} 27387 27388 if objc != 3 { 27389 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10527) 27390 return TCL_ERROR 27391 } 27392 27393 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27394 libc.Xmemset(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27395 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 27396 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24+16) 27397 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27398 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = (*TestStreamInput)(unsafe.Pointer(bp)).FnStream 27399 27400 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream > 0 { 27401 rc = sqlite3.Xsqlite3changeset_concat_strm(tls, 27402 *(*uintptr)(unsafe.Pointer(&struct { 27403 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27404 }{testStreamInput})), bp, 27405 *(*uintptr)(unsafe.Pointer(&struct { 27406 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27407 }{testStreamInput})), bp+24, 27408 *(*uintptr)(unsafe.Pointer(&struct { 27409 f func(*libc.TLS, uintptr, uintptr, int32) int32 27410 }{testStreamOutput})), bp+48) 27411 } else { 27412 rc = sqlite3.Xsqlite3changeset_concat(tls, 27413 (*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) 27414 } 27415 27416 if rc != SQLITE_OK { 27417 rc = test_session_error(tls, interp, rc, uintptr(0)) 27418 } else { 27419 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fn)) 27420 } 27421 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp) 27422 return rc 27423 } 27424 27425 func test_sqlite3session_foreach(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27426 bp := tls.Alloc(104) 27427 defer tls.Free(104) 27428 27429 var pChangeset uintptr 27430 27431 var rc int32 27432 var pVarname uintptr 27433 var pCS uintptr 27434 var pScript uintptr 27435 var isCheckNext int32 = 0 27436 var isInvert int32 = 0 27437 27438 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27439 27440 for objc > 1 { 27441 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27442 var nOpt int32 = int32(libc.Xstrlen(tls, zOpt)) 27443 if int32(*(*uint8)(unsafe.Pointer(zOpt))) != '-' { 27444 break 27445 } 27446 if nOpt <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10380, nOpt) { 27447 isInvert = 1 27448 } else if nOpt <= 5 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10538, nOpt) { 27449 isCheckNext = 1 27450 } else { 27451 break 27452 } 27453 objv += 8 27454 objc-- 27455 } 27456 if objc != 4 { 27457 tcl.XTcl_WrongNumArgs(tls, 27458 interp, 1, objv, ts+10544) 27459 return TCL_ERROR 27460 } 27461 27462 pVarname = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 27463 pCS = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 27464 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 27465 27466 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, pCS, bp+24) 27467 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27468 if isInvert != 0 { 27469 var f int32 = SQLITE_CHANGESETSTART_INVERT 27470 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 27471 rc = sqlite3.Xsqlite3changeset_start_v2(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset, f) 27472 } else { 27473 var pCtx uintptr = bp 27474 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 27475 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 27476 rc = sqlite3.Xsqlite3changeset_start_v2_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 27477 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27478 }{testStreamInput})), pCtx, f) 27479 } 27480 } else { 27481 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 27482 rc = sqlite3.Xsqlite3changeset_start(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset) 27483 } else { 27484 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 27485 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 27486 rc = sqlite3.Xsqlite3changeset_start_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 27487 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27488 }{testStreamInput})), bp) 27489 } 27490 } 27491 if rc != SQLITE_OK { 27492 return test_session_error(tls, interp, rc, uintptr(0)) 27493 } 27494 27495 for SQLITE_ROW == sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) { 27496 var pVar uintptr 27497 var pOld uintptr 27498 var pNew uintptr 27499 27500 var zPK uintptr 27501 27502 var i int32 27503 27504 if SQLITE_MISUSE != sqlite3.Xsqlite3changeset_fk_conflicts(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+40) { 27505 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27506 return TCL_ERROR 27507 } 27508 27509 sqlite3.Xsqlite3changeset_op(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+48, bp+56, bp+60, bp+64) 27510 pVar = tcl.XTcl_NewObj(tls) 27511 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, 27512 func() uintptr { 27513 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_INSERT { 27514 return ts + 10307 27515 } 27516 return func() uintptr { 27517 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_UPDATE { 27518 return ts + 10314 27519 } 27520 return ts + 10321 27521 }() 27522 }(), -1)) 27523 27524 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), -1)) 27525 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewIntObj(tls, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 64)) != 0))) 27526 27527 zPK = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 56))+1)) 27528 libc.Xmemset(tls, zPK, 0, uint64(*(*int32)(unsafe.Pointer(bp + 56))+1)) 27529 sqlite3.Xsqlite3changeset_pk(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+72, bp+80) 27530 27531 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 27532 *(*uint8)(unsafe.Pointer(zPK + uintptr(i))) = func() uint8 { 27533 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)) + uintptr(i))) != 0 { 27534 return uint8('X') 27535 } 27536 return uint8('.') 27537 }() 27538 } 27539 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, zPK, -1)) 27540 tcl.XTcl_Free(tls, zPK) 27541 27542 pOld = tcl.XTcl_NewObj(tls) 27543 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_INSERT { 27544 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 27545 sqlite3.Xsqlite3changeset_old(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+88) 27546 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 88))) 27547 } 27548 } 27549 pNew = tcl.XTcl_NewObj(tls) 27550 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_DELETE { 27551 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 27552 sqlite3.Xsqlite3changeset_new(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+96) 27553 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 96))) 27554 } 27555 } 27556 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pOld) 27557 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pNew) 27558 27559 tcl.XTcl_ObjSetVar2(tls, interp, pVarname, uintptr(0), pVar, 0) 27560 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 27561 if rc != TCL_OK && rc != TCL_CONTINUE { 27562 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27563 if rc == TCL_BREAK { 27564 return TCL_OK 27565 } 27566 return rc 27567 } 27568 } 27569 27570 if isCheckNext != 0 { 27571 var rc2 int32 = sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27572 _ = rc2 27573 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27574 27575 } else { 27576 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 27577 } 27578 if rc != SQLITE_OK { 27579 return test_session_error(tls, interp, rc, uintptr(0)) 27580 } 27581 27582 return TCL_OK 27583 } 27584 27585 func test_rebaser_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27586 bp := tls.Alloc(48) 27587 defer tls.Free(48) 27588 27589 var p uintptr = clientData 27590 27591 var rc int32 27592 27593 if objc < 2 { 27594 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 27595 return TCL_ERROR 27596 } 27597 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 27598 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub1)), int32(unsafe.Sizeof(RebaseSubcmd{})), ts+2014, 0, bp) 27599 if rc != TCL_OK { 27600 return rc 27601 } 27602 if objc != 2+aSub1[*(*int32)(unsafe.Pointer(bp))].FnArg { 27603 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub1[*(*int32)(unsafe.Pointer(bp))].FzMsg) 27604 return TCL_ERROR 27605 } 27606 27607 switch *(*int32)(unsafe.Pointer(bp)) { 27608 case 0: 27609 { 27610 *(*int32)(unsafe.Pointer(bp + 4)) = 0 27611 var pRebase uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 27612 rc = sqlite3.Xsqlite3rebaser_configure(tls, p, *(*int32)(unsafe.Pointer(bp + 4)), pRebase) 27613 break 27614 27615 } 27616 27617 case 1: 27618 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 27619 break 27620 27621 default: 27622 { 27623 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(TestStreamInput{}))) 27624 libc.Xmemset(tls, bp+32, 0, uint64(unsafe.Sizeof(TestSessionsBlob{}))) 27625 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8+16) 27626 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FnStream = test_tcl_integer(tls, interp, ts+10098) 27627 27628 if (*TestStreamInput)(unsafe.Pointer(bp+8)).FnStream != 0 { 27629 rc = sqlite3.Xsqlite3rebaser_rebase_strm(tls, p, 27630 *(*uintptr)(unsafe.Pointer(&struct { 27631 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 27632 }{testStreamInput})), bp+8, 27633 *(*uintptr)(unsafe.Pointer(&struct { 27634 f func(*libc.TLS, uintptr, uintptr, int32) int32 27635 }{testStreamOutput})), bp+32) 27636 } else { 27637 rc = sqlite3.Xsqlite3rebaser_rebase(tls, p, (*TestStreamInput)(unsafe.Pointer(bp+8)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+8)).FaData, bp+32+8, bp+32) 27638 } 27639 27640 if rc == SQLITE_OK { 27641 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fn)) 27642 } 27643 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp) 27644 break 27645 27646 } 27647 } 27648 27649 if rc != SQLITE_OK { 27650 return test_session_error(tls, interp, rc, uintptr(0)) 27651 } 27652 return TCL_OK 27653 } 27654 27655 type RebaseSubcmd = struct { 27656 FzSub uintptr 27657 FnArg int32 27658 F__ccgo_pad1 [4]byte 27659 FzMsg uintptr 27660 FiSub int32 27661 F__ccgo_pad2 [4]byte 27662 } 27663 27664 var aSub1 = [4]RebaseSubcmd{ 27665 {FzSub: ts + 10587, FnArg: 1, FzMsg: ts + 10597}, 27666 {FzSub: ts + 10138, FzMsg: ts + 584}, 27667 {FzSub: ts + 10609, FnArg: 1, FzMsg: ts + 10517}, 27668 {}, 27669 } 27670 27671 func test_rebaser_del(tls *libc.TLS, clientData uintptr) { 27672 var p uintptr = clientData 27673 sqlite3.Xsqlite3rebaser_delete(tls, p) 27674 } 27675 27676 func test_sqlite3rebaser_create(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27677 bp := tls.Alloc(8) 27678 defer tls.Free(8) 27679 27680 var rc int32 27681 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 27682 if objc != 2 { 27683 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 27684 return SQLITE_ERROR 27685 } 27686 27687 rc = sqlite3.Xsqlite3rebaser_create(tls, bp) 27688 if rc != SQLITE_OK { 27689 return test_session_error(tls, interp, rc, uintptr(0)) 27690 } 27691 27692 tcl.XTcl_CreateObjCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 27693 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27694 }{test_rebaser_cmd})), 27695 *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_rebaser_del}))) 27696 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27697 return TCL_OK 27698 } 27699 27700 func test_sqlite3session_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 27701 bp := tls.Alloc(8) 27702 defer tls.Free(8) 27703 27704 var rc int32 27705 27706 if objc != 3 { 27707 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10616) 27708 return SQLITE_ERROR 27709 } 27710 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 27711 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub2)), int32(unsafe.Sizeof(ConfigOpt{})), ts+2014, 0, bp) 27712 if rc != TCL_OK { 27713 return rc 27714 } 27715 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 27716 return TCL_ERROR 27717 } 27718 27719 rc = sqlite3.Xsqlite3session_config(tls, aSub2[*(*int32)(unsafe.Pointer(bp))].Fop, bp+4) 27720 if rc != SQLITE_OK { 27721 return test_session_error(tls, interp, rc, uintptr(0)) 27722 } 27723 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 27724 return TCL_OK 27725 } 27726 27727 type ConfigOpt = struct { 27728 FzSub uintptr 27729 Fop int32 27730 F__ccgo_pad1 [4]byte 27731 } 27732 27733 var aSub2 = [3]ConfigOpt{ 27734 {FzSub: ts + 10625, Fop: SQLITE_SESSION_CONFIG_STRMSIZE}, 27735 {FzSub: ts + 2758}, 27736 {}, 27737 } 27738 27739 func TestSession_Init(tls *libc.TLS, interp uintptr) int32 { 27740 bp := tls.Alloc(160) 27741 defer tls.Free(160) 27742 27743 *(*[10]struct { 27744 FzCmd uintptr 27745 FxProc uintptr 27746 })(unsafe.Pointer(bp)) = [10]struct { 27747 FzCmd uintptr 27748 FxProc uintptr 27749 }{ 27750 {FzCmd: ts + 10635, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27751 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27752 }{test_sqlite3session}))}, 27753 {FzCmd: ts + 10650, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27754 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27755 }{test_sqlite3session_foreach}))}, 27756 {FzCmd: ts + 10673, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27757 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27758 }{test_sqlite3changeset_invert}))}, 27759 {FzCmd: ts + 10697, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27760 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27761 }{test_sqlite3changeset_concat}))}, 27762 {FzCmd: ts + 10721, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27763 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27764 }{test_sqlite3changeset_apply}))}, 27765 {FzCmd: ts + 10744, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27766 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27767 }{test_sqlite3changeset_apply_v2}))}, 27768 {FzCmd: ts + 10770, 27769 FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27770 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27771 }{test_sqlite3changeset_apply_replace_all}))}, 27772 {FzCmd: ts + 10805, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27773 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27774 }{test_sql_exec_changeset}))}, 27775 {FzCmd: ts + 10824, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27776 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27777 }{test_sqlite3rebaser_create}))}, 27778 {FzCmd: ts + 10846, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 27779 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 27780 }{test_sqlite3session_config}))}, 27781 } 27782 var i int32 27783 27784 for i = 0; uint64(i) < uint64(unsafe.Sizeof([10]struct { 27785 FzCmd uintptr 27786 FxProc uintptr 27787 }{}))/uint64(unsafe.Sizeof(struct { 27788 FzCmd uintptr 27789 FxProc uintptr 27790 }{})); i++ { 27791 var p uintptr = bp + uintptr(i)*16 27792 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 27793 FzCmd uintptr 27794 FxProc uintptr 27795 })(unsafe.Pointer(p)).FzCmd, (*struct { 27796 FzCmd uintptr 27797 FxProc uintptr 27798 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 27799 } 27800 27801 return TCL_OK 27802 } 27803 27804 type sig_atomic_t = int32 27805 27806 type sigval = struct { 27807 F__ccgo_pad1 [0]uint64 27808 Fsival_int int32 27809 F__ccgo_pad2 [4]byte 27810 } 27811 27812 type siginfo_t = struct { 27813 Fsi_signo int32 27814 Fsi_errno int32 27815 Fsi_code int32 27816 F__pad0 int32 27817 F_sifields struct { 27818 F__ccgo_pad1 [0]uint64 27819 F_pad [28]int32 27820 } 27821 } 27822 27823 type sigval_t = sigval 27824 27825 type sigevent_t = sigevent 27826 27827 type sig_t = uintptr 27828 27829 type sigaction = struct { 27830 F__sigaction_handler struct{ Fsa_handler uintptr } 27831 Fsa_mask struct{ F__val [16]uint64 } 27832 Fsa_flags int32 27833 F__ccgo_pad1 [4]byte 27834 Fsa_restorer uintptr 27835 } 27836 27837 type pt_regs = struct { 27838 Fgpr [32]uint64 27839 Fnip uint64 27840 Fmsr uint64 27841 Forig_gpr3 uint64 27842 Fctr uint64 27843 Flink uint64 27844 Fxer uint64 27845 Fccr uint64 27846 Fsofte uint64 27847 Ftrap uint64 27848 Fdar uint64 27849 Fdsisr uint64 27850 Fresult uint64 27851 } 27852 27853 type ppc_debug_info = struct { 27854 Fversion uint32 27855 Fnum_instruction_bps uint32 27856 Fnum_data_bps uint32 27857 Fnum_condition_regs uint32 27858 Fdata_bp_alignment uint32 27859 Fsizeof_condition uint32 27860 Ffeatures uint64 27861 } 27862 27863 type ppc_hw_breakpoint = struct { 27864 Fversion uint32 27865 Ftrigger_type uint32 27866 Faddr_mode uint32 27867 Fcondition_mode uint32 27868 Faddr uint64 27869 Faddr2 uint64 27870 Fcondition_value uint64 27871 } 27872 27873 type elf_greg_t64 = uint64 27874 type elf_gregset_t64 = [48]elf_greg_t64 27875 27876 type elf_greg_t32 = uint32 27877 type elf_gregset_t32 = [48]elf_greg_t32 27878 type compat_elf_gregset_t = elf_gregset_t32 27879 27880 type elf_greg_t = elf_greg_t64 27881 type elf_gregset_t = elf_gregset_t64 27882 27883 type elf_fpreg_t = float64 27884 type elf_fpregset_t = [33]elf_fpreg_t 27885 27886 type elf_vrreg_t = struct { 27887 F__ccgo_pad1 [0]uint64 27888 Fu [4]uint32 27889 } 27890 type elf_vrregset_t = [34]elf_vrreg_t 27891 type elf_vrregset_t32 = [33]elf_vrreg_t 27892 type elf_vsrreghalf_t32 = [32]elf_fpreg_t 27893 27894 type ppc64_opd_entry = struct { 27895 Ffuncaddr uint64 27896 Fr2 uint64 27897 } 27898 27899 type sigcontext = struct { 27900 F_unused [4]uint64 27901 Fsignal int32 27902 F_pad0 int32 27903 Fhandler uint64 27904 Foldmask uint64 27905 Fregs uintptr 27906 Fgp_regs elf_gregset_t 27907 Ffp_regs elf_fpregset_t 27908 Fv_regs uintptr 27909 Fvmx_reserve [101]int64 27910 } 27911 27912 type stack_t = struct { 27913 Fss_sp uintptr 27914 Fss_flags int32 27915 F__ccgo_pad1 [4]byte 27916 Fss_size size_t 27917 } 27918 27919 type gregset_t = [48]uint64 27920 type fpregset_t = [33]float64 27921 27922 type _libc_vscr = struct { 27923 Fvscr_word uint32 27924 F__pad [3]uint32 27925 } 27926 27927 type vscr_t = _libc_vscr 27928 27929 type _libc_vrstate = struct { 27930 Fvrregs [32][4]uint32 27931 Fvscr vscr_t 27932 Fvrsave uint32 27933 F__pad [3]uint32 27934 } 27935 27936 type vrregset_t = _libc_vrstate 27937 27938 type mcontext_t = struct { 27939 F__glibc_reserved [4]uint64 27940 Fsignal int32 27941 F__pad0 int32 27942 Fhandler uint64 27943 Foldmask uint64 27944 Fregs uintptr 27945 Fgp_regs gregset_t 27946 Ffp_regs fpregset_t 27947 Fv_regs uintptr 27948 Fvmx_reserve [69]int64 27949 } 27950 27951 type ucontext_t1 = struct { 27952 Fuc_flags uint64 27953 Fuc_link uintptr 27954 Fuc_stack stack_t 27955 Fuc_sigmask sigset_t 27956 Fuc_mcontext mcontext_t 27957 } 27958 27959 type ucontext_t = ucontext_t1 27960 27961 type sigstack = struct { 27962 Fss_sp uintptr 27963 Fss_onstack int32 27964 F__ccgo_pad1 [4]byte 27965 } 27966 27967 type SqliteDb = struct { 27968 Fdb uintptr 27969 Finterp uintptr 27970 FzBusy uintptr 27971 FzCommit uintptr 27972 FzTrace uintptr 27973 FzTraceV2 uintptr 27974 FzProfile uintptr 27975 FzProgress uintptr 27976 FzBindFallback uintptr 27977 FzAuth uintptr 27978 FdisableAuth int32 27979 F__ccgo_pad1 [4]byte 27980 FzNull uintptr 27981 FpFunc uintptr 27982 FpUpdateHook uintptr 27983 FpPreUpdateHook uintptr 27984 FpRollbackHook uintptr 27985 FpWalHook uintptr 27986 FpUnlockNotify uintptr 27987 FpCollate uintptr 27988 Frc int32 27989 F__ccgo_pad2 [4]byte 27990 FpCollateNeeded uintptr 27991 FstmtList uintptr 27992 FstmtLast uintptr 27993 FmaxStmt int32 27994 FnStmt int32 27995 FpIncrblob uintptr 27996 FnStep int32 27997 FnSort int32 27998 FnIndex int32 27999 FnVMStep int32 28000 FnTransaction int32 28001 FopenFlags int32 28002 FnRef int32 28003 FbLegacyPrepare int32 28004 } 28005 28006 type SqlFunc1 = struct { 28007 Finterp uintptr 28008 FpScript uintptr 28009 FpDb uintptr 28010 FuseEvalObjv int32 28011 FeType int32 28012 FzName uintptr 28013 FpNext uintptr 28014 } 28015 28016 type SqlFunc = SqlFunc1 28017 28018 type SqlCollate1 = struct { 28019 Finterp uintptr 28020 FzScript uintptr 28021 FpNext uintptr 28022 } 28023 28024 type SqlCollate = SqlCollate1 28025 28026 type SqlPreparedStmt1 = struct { 28027 FpNext uintptr 28028 FpPrev uintptr 28029 FpStmt uintptr 28030 FnSql int32 28031 F__ccgo_pad1 [4]byte 28032 FzSql uintptr 28033 FnParm int32 28034 F__ccgo_pad2 [4]byte 28035 FapParm uintptr 28036 } 28037 28038 type SqlPreparedStmt = SqlPreparedStmt1 28039 28040 type IncrblobChannel1 = struct { 28041 FpBlob uintptr 28042 FpDb uintptr 28043 FiSeek int32 28044 F__ccgo_pad1 [4]byte 28045 Fchannel Tcl_Channel 28046 FpNext uintptr 28047 FpPrev uintptr 28048 } 28049 28050 type IncrblobChannel = IncrblobChannel1 28051 28052 func strlen30(tls *libc.TLS, z uintptr) int32 { 28053 var z2 uintptr = z 28054 for *(*uint8)(unsafe.Pointer(z2)) != 0 { 28055 z2++ 28056 } 28057 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 28058 } 28059 28060 func closeIncrblobChannels(tls *libc.TLS, pDb uintptr) { 28061 var p uintptr 28062 var pNext uintptr 28063 28064 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob; p != 0; p = pNext { 28065 pNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 28066 28067 tcl.XTcl_UnregisterChannel(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 28068 } 28069 } 28070 28071 func incrblobClose(tls *libc.TLS, instanceData ClientData, interp uintptr) int32 { 28072 var p uintptr = instanceData 28073 var rc int32 = sqlite3.Xsqlite3_blob_close(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 28074 var db uintptr = (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).Fdb 28075 28076 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 28077 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev 28078 } 28079 if (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev != 0 { 28080 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpPrev)).FpNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 28081 } 28082 if (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob == p { 28083 (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 28084 } 28085 28086 tcl.XTcl_Free(tls, p) 28087 28088 if rc != SQLITE_OK { 28089 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(1)) 28090 return TCL_ERROR 28091 } 28092 return TCL_OK 28093 } 28094 28095 func incrblobInput(tls *libc.TLS, instanceData ClientData, buf uintptr, bufSize int32, errorCodePtr uintptr) int32 { 28096 var p uintptr = instanceData 28097 var nRead int32 = bufSize 28098 var nBlob int32 28099 var rc int32 28100 28101 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 28102 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nRead > nBlob { 28103 nRead = nBlob - (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 28104 } 28105 if nRead <= 0 { 28106 return 0 28107 } 28108 28109 rc = sqlite3.Xsqlite3_blob_read(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nRead, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 28110 if rc != SQLITE_OK { 28111 *(*int32)(unsafe.Pointer(errorCodePtr)) = rc 28112 return -1 28113 } 28114 28115 *(*int32)(unsafe.Pointer(p + 16)) += nRead 28116 return nRead 28117 } 28118 28119 func incrblobOutput(tls *libc.TLS, instanceData ClientData, buf uintptr, toWrite int32, errorCodePtr uintptr) int32 { 28120 var p uintptr = instanceData 28121 var nWrite int32 = toWrite 28122 var nBlob int32 28123 var rc int32 28124 28125 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 28126 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nWrite > nBlob { 28127 *(*int32)(unsafe.Pointer(errorCodePtr)) = EINVAL 28128 return -1 28129 } 28130 if nWrite <= 0 { 28131 return 0 28132 } 28133 28134 rc = sqlite3.Xsqlite3_blob_write(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nWrite, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 28135 if rc != SQLITE_OK { 28136 *(*int32)(unsafe.Pointer(errorCodePtr)) = EIO 28137 return -1 28138 } 28139 28140 *(*int32)(unsafe.Pointer(p + 16)) += nWrite 28141 return nWrite 28142 } 28143 28144 func incrblobSeek(tls *libc.TLS, instanceData ClientData, offset int64, seekMode int32, errorCodePtr uintptr) int32 { 28145 var p uintptr = instanceData 28146 28147 switch seekMode { 28148 case SEEK_SET: 28149 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(offset) 28150 break 28151 case SEEK_CUR: 28152 *(*int32)(unsafe.Pointer(p + 16)) += int32(offset) 28153 break 28154 case SEEK_END: 28155 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(int64(sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob)) + offset) 28156 break 28157 28158 default: 28159 } 28160 28161 return (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 28162 } 28163 28164 func incrblobWatch(tls *libc.TLS, instanceData ClientData, mode int32) { 28165 } 28166 28167 func incrblobHandle(tls *libc.TLS, instanceData ClientData, dir int32, hPtr uintptr) int32 { 28168 return TCL_ERROR 28169 } 28170 28171 var IncrblobChannelType = Tcl_ChannelType{ 28172 FtypeName: ts + 10868, 28173 Fversion: uintptr(0x2), 28174 FcloseProc: 0, 28175 FinputProc: 0, 28176 FoutputProc: 0, 28177 FseekProc: 0, 28178 FwatchProc: 0, 28179 FgetHandleProc: 0, 28180 } 28181 28182 func createIncrblobChannel(tls *libc.TLS, interp uintptr, pDb uintptr, zDb uintptr, zTable uintptr, zColumn uintptr, iRow sqlite_int64, isReadonly int32) int32 { 28183 bp := tls.Alloc(80) 28184 defer tls.Free(80) 28185 28186 var p uintptr 28187 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 28188 28189 var rc int32 28190 var flags int32 = int32(1)<<1 | func() int32 { 28191 if isReadonly != 0 { 28192 return 0 28193 } 28194 return int32(1) << 2 28195 }() 28196 28197 rc = sqlite3.Xsqlite3_blob_open(tls, db, zDb, zTable, zColumn, iRow, libc.BoolInt32(!(isReadonly != 0)), bp+8) 28198 if rc != SQLITE_OK { 28199 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 28200 return TCL_ERROR 28201 } 28202 28203 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(IncrblobChannel{}))) 28204 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = 0 28205 (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob = *(*uintptr)(unsafe.Pointer(bp + 8)) 28206 28207 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]uint8{})), bp+16, ts+10877, libc.VaList(bp, libc.PreIncInt32(&count, 1))) 28208 (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel = tcl.XTcl_CreateChannel(tls, uintptr(unsafe.Pointer(&IncrblobChannelType)), bp+16, p, flags) 28209 tcl.XTcl_RegisterChannel(tls, interp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 28210 28211 (*IncrblobChannel)(unsafe.Pointer(p)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob 28212 (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev = uintptr(0) 28213 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 28214 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = p 28215 } 28216 (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob = p 28217 (*IncrblobChannel)(unsafe.Pointer(p)).FpDb = pDb 28218 28219 tcl.XTcl_SetResult(tls, interp, tcl.XTcl_GetChannelName(tls, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel), uintptr(1)) 28220 return TCL_OK 28221 } 28222 28223 var count int32 = 0 28224 28225 func safeToUseEvalObjv(tls *libc.TLS, interp uintptr, pCmd uintptr) int32 { 28226 bp := tls.Alloc(4) 28227 defer tls.Free(4) 28228 28229 var z uintptr 28230 28231 z = tcl.XTcl_GetStringFromObj(tls, pCmd, bp) 28232 for libc.PostDecInt32(&*(*int32)(unsafe.Pointer(bp)), 1) > 0 { 28233 var c int32 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 28234 if c == '$' || c == '[' || c == ';' { 28235 return 0 28236 } 28237 } 28238 return 1 28239 } 28240 28241 func findSqlFunc(tls *libc.TLS, pDb uintptr, zName uintptr) uintptr { 28242 var p uintptr 28243 var pNew uintptr 28244 var nName int32 = strlen30(tls, zName) 28245 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlFunc{}))+uint64(nName)+uint64(1))) 28246 (*SqlFunc)(unsafe.Pointer(pNew)).FzName = pNew + 1*48 28247 libc.Xmemcpy(tls, (*SqlFunc)(unsafe.Pointer(pNew)).FzName, zName, uint64(nName+1)) 28248 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc; p != 0; p = (*SqlFunc)(unsafe.Pointer(p)).FpNext { 28249 if sqlite3.Xsqlite3_stricmp(tls, (*SqlFunc)(unsafe.Pointer(p)).FzName, (*SqlFunc)(unsafe.Pointer(pNew)).FzName) == 0 { 28250 tcl.XTcl_Free(tls, pNew) 28251 return p 28252 } 28253 } 28254 (*SqlFunc)(unsafe.Pointer(pNew)).Finterp = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28255 (*SqlFunc)(unsafe.Pointer(pNew)).FpDb = pDb 28256 (*SqlFunc)(unsafe.Pointer(pNew)).FpScript = uintptr(0) 28257 (*SqlFunc)(unsafe.Pointer(pNew)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 28258 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = pNew 28259 return pNew 28260 } 28261 28262 func dbFreeStmt(tls *libc.TLS, pStmt uintptr) { 28263 if sqlite3.Xsqlite3_sql(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) == uintptr(0) { 28264 tcl.XTcl_Free(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FzSql) 28265 } 28266 sqlite3.Xsqlite3_finalize(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) 28267 tcl.XTcl_Free(tls, pStmt) 28268 } 28269 28270 func flushStmtCache(tls *libc.TLS, pDb uintptr) { 28271 var pPreStmt uintptr 28272 var pNext uintptr 28273 28274 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = pNext { 28275 pNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 28276 dbFreeStmt(tls, pPreStmt) 28277 } 28278 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt = 0 28279 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = uintptr(0) 28280 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = uintptr(0) 28281 } 28282 28283 func addDatabaseRef(tls *libc.TLS, pDb uintptr) { 28284 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef++ 28285 } 28286 28287 func delDatabaseRef(tls *libc.TLS, pDb uintptr) { 28288 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef-- 28289 if (*SqliteDb)(unsafe.Pointer(pDb)).FnRef == 0 { 28290 flushStmtCache(tls, pDb) 28291 closeIncrblobChannels(tls, pDb) 28292 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 28293 for (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc != 0 { 28294 var pFunc uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 28295 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = (*SqlFunc)(unsafe.Pointer(pFunc)).FpNext 28296 28297 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28298 var _objPtr uintptr = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 28299 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28300 tcl.XTclFreeObj(tls, _objPtr) 28301 } 28302 } 28303 tcl.XTcl_Free(tls, pFunc) 28304 } 28305 for (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate != 0 { 28306 var pCollate uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 28307 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext 28308 tcl.XTcl_Free(tls, pCollate) 28309 } 28310 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0 { 28311 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 28312 } 28313 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0 { 28314 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 28315 } 28316 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0 { 28317 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 28318 } 28319 if (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0 { 28320 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 28321 } 28322 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0 { 28323 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 28324 } 28325 if (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0 { 28326 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 28327 } 28328 if (*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0 { 28329 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 28330 } 28331 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 28332 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28333 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook 28334 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28335 tcl.XTclFreeObj(tls, _objPtr) 28336 } 28337 } 28338 } 28339 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 28340 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28341 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook 28342 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28343 tcl.XTclFreeObj(tls, _objPtr) 28344 } 28345 } 28346 } 28347 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 28348 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 28349 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook 28350 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28351 tcl.XTclFreeObj(tls, _objPtr) 28352 } 28353 } 28354 } 28355 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 28356 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 28357 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook 28358 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28359 tcl.XTclFreeObj(tls, _objPtr) 28360 } 28361 } 28362 } 28363 if (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0 { 28364 for __ccgo5 := true; __ccgo5; __ccgo5 = 0 != 0 { 28365 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 28366 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28367 tcl.XTclFreeObj(tls, _objPtr) 28368 } 28369 } 28370 } 28371 tcl.XTcl_Free(tls, pDb) 28372 } 28373 } 28374 28375 func DbDeleteCmd(tls *libc.TLS, db uintptr) { 28376 var pDb uintptr = db 28377 delDatabaseRef(tls, pDb) 28378 } 28379 28380 func DbBusyHandler(tls *libc.TLS, cd uintptr, nTries int32) int32 { 28381 bp := tls.Alloc(70) 28382 defer tls.Free(70) 28383 28384 var pDb uintptr = cd 28385 var rc int32 28386 28387 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+40, ts+1333, libc.VaList(bp, nTries)) 28388 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))) 28389 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 28390 return 0 28391 } 28392 return 1 28393 } 28394 28395 func DbProgressHandler(tls *libc.TLS, cd uintptr) int32 { 28396 var pDb uintptr = cd 28397 var rc int32 28398 28399 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 28400 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 28401 return 1 28402 } 28403 return 0 28404 } 28405 28406 func DbTraceHandler(tls *libc.TLS, cd uintptr, zSql uintptr) { 28407 bp := tls.Alloc(216) 28408 defer tls.Free(216) 28409 28410 var pDb uintptr = cd 28411 28412 tcl.XTcl_DStringInit(tls, bp) 28413 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, -1) 28414 tcl.XTcl_DStringAppendElement(tls, bp, zSql) 28415 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 28416 tcl.XTcl_DStringFree(tls, bp) 28417 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28418 } 28419 28420 func DbTraceV2Handler(tls *libc.TLS, type1 uint32, cd uintptr, pd uintptr, xd uintptr) int32 { 28421 var pDb uintptr = cd 28422 var pCmd uintptr 28423 28424 switch type1 { 28425 case uint32(SQLITE_TRACE_STMT): 28426 { 28427 var pStmt uintptr = pd 28428 var zSql uintptr = xd 28429 28430 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28431 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28432 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28433 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 28434 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28435 tcl.XTcl_NewStringObj(tls, zSql, -1)) 28436 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28437 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28438 var _objPtr uintptr = pCmd 28439 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28440 tcl.XTclFreeObj(tls, _objPtr) 28441 } 28442 } 28443 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28444 break 28445 28446 } 28447 case uint32(SQLITE_TRACE_PROFILE): 28448 { 28449 var pStmt uintptr = pd 28450 var ns sqlite3_int64 = *(*sqlite3_int64)(unsafe.Pointer(xd)) 28451 28452 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28453 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28454 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28455 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 28456 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28457 tcl.XTcl_NewWideIntObj(tls, ns)) 28458 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28459 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28460 var _objPtr uintptr = pCmd 28461 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28462 tcl.XTclFreeObj(tls, _objPtr) 28463 } 28464 } 28465 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28466 break 28467 28468 } 28469 case uint32(SQLITE_TRACE_ROW): 28470 { 28471 var pStmt uintptr = pd 28472 28473 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28474 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28475 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28476 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 28477 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28478 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28479 var _objPtr uintptr = pCmd 28480 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28481 tcl.XTclFreeObj(tls, _objPtr) 28482 } 28483 } 28484 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28485 break 28486 28487 } 28488 case uint32(SQLITE_TRACE_CLOSE): 28489 { 28490 var db uintptr = pd 28491 28492 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 28493 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28494 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 28495 tcl.XTcl_NewWideIntObj(tls, int64(db))) 28496 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28497 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 28498 var _objPtr uintptr = pCmd 28499 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28500 tcl.XTclFreeObj(tls, _objPtr) 28501 } 28502 } 28503 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28504 break 28505 28506 } 28507 } 28508 return SQLITE_OK 28509 } 28510 28511 func DbProfileHandler(tls *libc.TLS, cd uintptr, zSql uintptr, tm1 sqlite_uint64) { 28512 bp := tls.Alloc(328) 28513 defer tls.Free(328) 28514 28515 var pDb uintptr = cd 28516 28517 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([100]uint8{}))-uint64(1)), bp+8, ts+6325, libc.VaList(bp, tm1)) 28518 tcl.XTcl_DStringInit(tls, bp+112) 28519 tcl.XTcl_DStringAppend(tls, bp+112, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, -1) 28520 tcl.XTcl_DStringAppendElement(tls, bp+112, zSql) 28521 tcl.XTcl_DStringAppendElement(tls, bp+112, bp+8) 28522 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+112)).Fstring) 28523 tcl.XTcl_DStringFree(tls, bp+112) 28524 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28525 } 28526 28527 func DbCommitHandler(tls *libc.TLS, cd uintptr) int32 { 28528 var pDb uintptr = cd 28529 var rc int32 28530 28531 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 28532 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 28533 return 1 28534 } 28535 return 0 28536 } 28537 28538 func DbRollbackHandler(tls *libc.TLS, clientData uintptr) { 28539 var pDb uintptr = clientData 28540 28541 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook, 0) { 28542 tcl.XTcl_BackgroundError(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28543 } 28544 } 28545 28546 func DbWalHandler(tls *libc.TLS, clientData uintptr, db uintptr, zDb uintptr, nEntry int32) int32 { 28547 bp := tls.Alloc(4) 28548 defer tls.Free(4) 28549 28550 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 28551 var p uintptr 28552 var pDb uintptr = clientData 28553 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 28554 28555 p = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook) 28556 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 28557 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28558 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewIntObj(tls, nEntry)) 28559 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, p, 0) || 28560 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 28561 tcl.XTcl_BackgroundError(tls, interp) 28562 } 28563 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28564 var _objPtr uintptr = p 28565 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28566 tcl.XTclFreeObj(tls, _objPtr) 28567 } 28568 } 28569 28570 return *(*int32)(unsafe.Pointer(bp)) 28571 } 28572 28573 func setTestUnlockNotifyVars(tls *libc.TLS, interp uintptr, iArg int32, nArg int32) { 28574 bp := tls.Alloc(80) 28575 defer tls.Free(80) 28576 28577 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]uint8{})), bp+16, ts+1333, libc.VaList(bp, iArg)) 28578 tcl.XTcl_SetVar2(tls, interp, ts+10889, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 28579 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]uint8{})), bp+16, ts+1333, libc.VaList(bp+8, nArg)) 28580 tcl.XTcl_SetVar2(tls, interp, ts+10914, uintptr(0), bp+16, TCL_GLOBAL_ONLY) 28581 } 28582 28583 func DbUnlockNotify(tls *libc.TLS, apArg uintptr, nArg int32) { 28584 var i int32 28585 for i = 0; i < nArg; i++ { 28586 var flags int32 = TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT 28587 var pDb uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 28588 setTestUnlockNotifyVars(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, i, nArg) 28589 28590 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify, flags) 28591 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28592 var _objPtr uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 28593 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28594 tcl.XTclFreeObj(tls, _objPtr) 28595 } 28596 } 28597 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 28598 } 28599 } 28600 28601 func DbPreUpdateHandler(tls *libc.TLS, p uintptr, db uintptr, op int32, zDb uintptr, zTbl uintptr, iKey1 sqlite_int64, iKey2 sqlite_int64) { 28602 var pDb uintptr = p 28603 var pCmd uintptr 28604 28605 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook) 28606 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28607 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr[(op-1)/9], -1)) 28608 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28609 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28610 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey1)) 28611 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey2)) 28612 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28613 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28614 var _objPtr uintptr = pCmd 28615 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28616 tcl.XTclFreeObj(tls, _objPtr) 28617 } 28618 } 28619 } 28620 28621 var azStr = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 28622 28623 func DbUpdateHandler(tls *libc.TLS, p uintptr, op int32, zDb uintptr, zTbl uintptr, rowid sqlite_int64) { 28624 var pDb uintptr = p 28625 var pCmd uintptr 28626 28627 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook) 28628 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28629 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr1[(op-1)/9], -1)) 28630 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 28631 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28632 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, rowid)) 28633 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 28634 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28635 var _objPtr uintptr = pCmd 28636 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28637 tcl.XTclFreeObj(tls, _objPtr) 28638 } 28639 } 28640 } 28641 28642 var azStr1 = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 28643 28644 func tclCollateNeeded(tls *libc.TLS, pCtx uintptr, db uintptr, enc int32, zName uintptr) { 28645 var pDb uintptr = pCtx 28646 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 28647 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 28648 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 28649 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pScript, 0) 28650 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28651 var _objPtr uintptr = pScript 28652 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28653 tcl.XTclFreeObj(tls, _objPtr) 28654 } 28655 } 28656 } 28657 28658 func tclSqlCollate(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 28659 var p uintptr = pCtx 28660 var pCmd uintptr 28661 28662 pCmd = tcl.XTcl_NewStringObj(tls, (*SqlCollate)(unsafe.Pointer(p)).FzScript, -1) 28663 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28664 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zA, nA)) 28665 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zB, nB)) 28666 tcl.XTcl_EvalObjEx(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 28667 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28668 var _objPtr uintptr = pCmd 28669 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28670 tcl.XTclFreeObj(tls, _objPtr) 28671 } 28672 } 28673 return libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp)) 28674 } 28675 28676 func tclSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 28677 bp := tls.Alloc(40) 28678 defer tls.Free(40) 28679 28680 var p uintptr = sqlite3.Xsqlite3_user_data(tls, context) 28681 var pCmd uintptr 28682 var i int32 28683 var rc int32 28684 28685 if argc == 0 { 28686 pCmd = (*SqlFunc)(unsafe.Pointer(p)).FpScript 28687 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28688 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, 0) 28689 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28690 var _objPtr uintptr = pCmd 28691 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28692 tcl.XTclFreeObj(tls, _objPtr) 28693 } 28694 } 28695 } else { 28696 if tcl.XTcl_ListObjGetElements(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, (*SqlFunc)(unsafe.Pointer(p)).FpScript, bp, bp+8) != 0 { 28697 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28698 return 28699 } 28700 pCmd = tcl.XTcl_NewListObj(tls, *(*int32)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 28701 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 28702 for i = 0; i < argc; i++ { 28703 var pIn uintptr = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 28704 var pVal uintptr 28705 28706 switch sqlite3.Xsqlite3_value_type(tls, pIn) { 28707 case SQLITE_BLOB: 28708 { 28709 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 28710 pVal = tcl.XTcl_NewByteArrayObj(tls, sqlite3.Xsqlite3_value_blob(tls, pIn), bytes) 28711 break 28712 28713 } 28714 fallthrough 28715 case SQLITE_INTEGER: 28716 { 28717 var v sqlite_int64 = sqlite3.Xsqlite3_value_int64(tls, pIn) 28718 if v >= int64(-2147483647) && v <= int64(2147483647) { 28719 pVal = tcl.XTcl_NewIntObj(tls, int32(v)) 28720 } else { 28721 pVal = tcl.XTcl_NewWideIntObj(tls, v) 28722 } 28723 break 28724 28725 } 28726 fallthrough 28727 case SQLITE_FLOAT: 28728 { 28729 var r float64 = sqlite3.Xsqlite3_value_double(tls, pIn) 28730 pVal = tcl.XTcl_NewDoubleObj(tls, r) 28731 break 28732 28733 } 28734 fallthrough 28735 case SQLITE_NULL: 28736 { 28737 pVal = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 28738 break 28739 28740 } 28741 fallthrough 28742 default: 28743 { 28744 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 28745 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pIn), bytes) 28746 break 28747 28748 } 28749 } 28750 rc = tcl.XTcl_ListObjAppendElement(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, pVal) 28751 if rc != 0 { 28752 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28753 var _objPtr uintptr = pCmd 28754 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28755 tcl.XTclFreeObj(tls, _objPtr) 28756 } 28757 } 28758 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28759 return 28760 } 28761 } 28762 if !((*SqlFunc)(unsafe.Pointer(p)).FuseEvalObjv != 0) { 28763 tcl.XTcl_GetString(tls, pCmd) 28764 } 28765 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 28766 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28767 var _objPtr uintptr = pCmd 28768 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 28769 tcl.XTclFreeObj(tls, _objPtr) 28770 } 28771 } 28772 } 28773 28774 if rc != 0 && rc != TCL_RETURN { 28775 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 28776 } else { 28777 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp) 28778 28779 var data uintptr 28780 var zType uintptr = func() uintptr { 28781 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 28782 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 28783 } 28784 return ts + 584 28785 }() 28786 var c uint8 = *(*uint8)(unsafe.Pointer(zType)) 28787 var eType int32 = (*SqlFunc)(unsafe.Pointer(p)).FeType 28788 28789 if eType == SQLITE_NULL { 28790 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 28791 eType = SQLITE_BLOB 28792 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 || 28793 int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || 28794 int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 28795 eType = SQLITE_INTEGER 28796 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 28797 eType = SQLITE_FLOAT 28798 } else { 28799 eType = SQLITE_TEXT 28800 } 28801 } 28802 28803 switch eType { 28804 case SQLITE_BLOB: 28805 { 28806 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+16) 28807 sqlite3.Xsqlite3_result_blob(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 28808 break 28809 28810 } 28811 fallthrough 28812 case SQLITE_INTEGER: 28813 { 28814 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+24) { 28815 sqlite3.Xsqlite3_result_int64(tls, context, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 28816 break 28817 } 28818 28819 } 28820 fallthrough 28821 case SQLITE_FLOAT: 28822 { 28823 if TCL_OK == tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+32) { 28824 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 32))) 28825 break 28826 } 28827 28828 } 28829 fallthrough 28830 default: 28831 { 28832 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+16) 28833 sqlite3.Xsqlite3_result_text(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 28834 break 28835 28836 } 28837 } 28838 28839 } 28840 } 28841 28842 func auth_callback(tls *libc.TLS, pArg uintptr, code int32, zArg1 uintptr, zArg2 uintptr, zArg3 uintptr, zArg4 uintptr) int32 { 28843 bp := tls.Alloc(216) 28844 defer tls.Free(216) 28845 28846 var zCode uintptr 28847 28848 var rc int32 28849 var zReply uintptr 28850 28851 var pDb uintptr = pArg 28852 if (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth != 0 { 28853 return SQLITE_OK 28854 } 28855 28856 switch code { 28857 case SQLITE_COPY: 28858 zCode = ts + 10944 28859 break 28860 case SQLITE_CREATE_INDEX: 28861 zCode = ts + 10956 28862 break 28863 case SQLITE_CREATE_TABLE: 28864 zCode = ts + 10976 28865 break 28866 case SQLITE_CREATE_TEMP_INDEX: 28867 zCode = ts + 10996 28868 break 28869 case SQLITE_CREATE_TEMP_TABLE: 28870 zCode = ts + 11021 28871 break 28872 case SQLITE_CREATE_TEMP_TRIGGER: 28873 zCode = ts + 11046 28874 break 28875 case SQLITE_CREATE_TEMP_VIEW: 28876 zCode = ts + 11073 28877 break 28878 case SQLITE_CREATE_TRIGGER: 28879 zCode = ts + 11097 28880 break 28881 case SQLITE_CREATE_VIEW: 28882 zCode = ts + 11119 28883 break 28884 case SQLITE_DELETE: 28885 zCode = ts + 11138 28886 break 28887 case SQLITE_DROP_INDEX: 28888 zCode = ts + 11152 28889 break 28890 case SQLITE_DROP_TABLE: 28891 zCode = ts + 11170 28892 break 28893 case SQLITE_DROP_TEMP_INDEX: 28894 zCode = ts + 11188 28895 break 28896 case SQLITE_DROP_TEMP_TABLE: 28897 zCode = ts + 11211 28898 break 28899 case SQLITE_DROP_TEMP_TRIGGER: 28900 zCode = ts + 11234 28901 break 28902 case SQLITE_DROP_TEMP_VIEW: 28903 zCode = ts + 11259 28904 break 28905 case SQLITE_DROP_TRIGGER: 28906 zCode = ts + 11281 28907 break 28908 case SQLITE_DROP_VIEW: 28909 zCode = ts + 11301 28910 break 28911 case SQLITE_INSERT: 28912 zCode = ts + 11318 28913 break 28914 case SQLITE_PRAGMA: 28915 zCode = ts + 11332 28916 break 28917 case SQLITE_READ: 28918 zCode = ts + 11346 28919 break 28920 case SQLITE_SELECT: 28921 zCode = ts + 11358 28922 break 28923 case SQLITE_TRANSACTION: 28924 zCode = ts + 11372 28925 break 28926 case SQLITE_UPDATE: 28927 zCode = ts + 11391 28928 break 28929 case SQLITE_ATTACH: 28930 zCode = ts + 11405 28931 break 28932 case SQLITE_DETACH: 28933 zCode = ts + 11419 28934 break 28935 case SQLITE_ALTER_TABLE: 28936 zCode = ts + 11433 28937 break 28938 case SQLITE_REINDEX: 28939 zCode = ts + 11452 28940 break 28941 case SQLITE_ANALYZE: 28942 zCode = ts + 11467 28943 break 28944 case SQLITE_CREATE_VTABLE: 28945 zCode = ts + 11482 28946 break 28947 case SQLITE_DROP_VTABLE: 28948 zCode = ts + 11503 28949 break 28950 case SQLITE_FUNCTION: 28951 zCode = ts + 11522 28952 break 28953 case SQLITE_SAVEPOINT: 28954 zCode = ts + 11538 28955 break 28956 case SQLITE_RECURSIVE: 28957 zCode = ts + 11555 28958 break 28959 default: 28960 zCode = ts + 11572 28961 break 28962 } 28963 tcl.XTcl_DStringInit(tls, bp) 28964 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, -1) 28965 tcl.XTcl_DStringAppendElement(tls, bp, zCode) 28966 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28967 if zArg1 != 0 { 28968 return zArg1 28969 } 28970 return ts + 584 28971 }()) 28972 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28973 if zArg2 != 0 { 28974 return zArg2 28975 } 28976 return ts + 584 28977 }()) 28978 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28979 if zArg3 != 0 { 28980 return zArg3 28981 } 28982 return ts + 584 28983 }()) 28984 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 28985 if zArg4 != 0 { 28986 return zArg4 28987 } 28988 return ts + 584 28989 }()) 28990 rc = tcl.XTcl_GlobalEval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 28991 tcl.XTcl_DStringFree(tls, bp) 28992 if rc == TCL_OK { 28993 zReply = tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 28994 } else { 28995 zReply = ts + 11577 28996 } 28997 if libc.Xstrcmp(tls, zReply, ts+2127) == 0 { 28998 rc = SQLITE_OK 28999 } else if libc.Xstrcmp(tls, zReply, ts+11577) == 0 { 29000 rc = SQLITE_DENY 29001 } else if libc.Xstrcmp(tls, zReply, ts+11589) == 0 { 29002 rc = SQLITE_IGNORE 29003 } else { 29004 rc = 999 29005 } 29006 return rc 29007 } 29008 29009 func local_getline(tls *libc.TLS, zPrompt uintptr, in uintptr) uintptr { 29010 var zLine uintptr 29011 var nLine int32 29012 var n int32 29013 29014 nLine = 100 29015 zLine = libc.Xmalloc(tls, uint64(nLine)) 29016 if zLine == uintptr(0) { 29017 return uintptr(0) 29018 } 29019 n = 0 29020 for 1 != 0 { 29021 if n+100 > nLine { 29022 nLine = nLine*2 + 100 29023 zLine = libc.Xrealloc(tls, zLine, uint64(nLine)) 29024 if zLine == uintptr(0) { 29025 return uintptr(0) 29026 } 29027 } 29028 if libc.Xfgets(tls, zLine+uintptr(n), nLine-n, in) == uintptr(0) { 29029 if n == 0 { 29030 libc.Xfree(tls, zLine) 29031 return uintptr(0) 29032 } 29033 *(*uint8)(unsafe.Pointer(zLine + uintptr(n))) = uint8(0) 29034 break 29035 } 29036 for *(*uint8)(unsafe.Pointer(zLine + uintptr(n))) != 0 { 29037 n++ 29038 } 29039 if n > 0 && int32(*(*uint8)(unsafe.Pointer(zLine + uintptr(n-1)))) == '\n' { 29040 n-- 29041 *(*uint8)(unsafe.Pointer(zLine + uintptr(n))) = uint8(0) 29042 break 29043 } 29044 } 29045 zLine = libc.Xrealloc(tls, zLine, uint64(n+1)) 29046 return zLine 29047 } 29048 29049 func DbTransPostCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 29050 bp := tls.Alloc(16) 29051 defer tls.Free(16) 29052 29053 var pDb uintptr = *(*ClientData)(unsafe.Pointer(data)) 29054 var rc int32 = result 29055 var zEnd uintptr 29056 29057 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction-- 29058 zEnd = azEnd[libc.Bool32(rc == TCL_ERROR)*2+libc.Bool32((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0)] 29059 29060 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 29061 if sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zEnd, uintptr(0), uintptr(0), uintptr(0)) != 0 { 29062 if rc != TCL_ERROR { 29063 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 29064 rc = TCL_ERROR 29065 } 29066 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+7824, uintptr(0), uintptr(0), uintptr(0)) 29067 } 29068 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 29069 29070 delDatabaseRef(tls, pDb) 29071 return rc 29072 } 29073 29074 var azEnd = [4]uintptr{ 29075 ts + 11603, 29076 ts + 11628, 29077 ts + 11635, 29078 ts + 7824, 29079 } 29080 29081 func dbPrepare(tls *libc.TLS, pDb uintptr, zSql uintptr, ppStmt uintptr, pzOut uintptr) int32 { 29082 var prepFlags uint32 = uint32(0) 29083 if (*SqliteDb)(unsafe.Pointer(pDb)).FbLegacyPrepare != 0 { 29084 return sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, ppStmt, pzOut) 29085 } 29086 29087 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt > 5 { 29088 prepFlags = uint32(SQLITE_PREPARE_PERSISTENT) 29089 } 29090 29091 return sqlite3.Xsqlite3_prepare_v3(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, prepFlags, ppStmt, pzOut) 29092 } 29093 29094 func dbPrepareAndBind(tls *libc.TLS, pDb uintptr, zIn uintptr, pzOut uintptr, ppPreStmt uintptr) int32 { 29095 bp := tls.Alloc(32) 29096 defer tls.Free(32) 29097 29098 var zSql uintptr = zIn 29099 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 29100 var pPreStmt uintptr 29101 var nSql int32 29102 var nVar int32 = 0 29103 var iParm int32 = 0 29104 var c uint8 29105 var i int32 29106 var needResultReset int32 = 0 29107 var rc int32 = SQLITE_OK 29108 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 29109 29110 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = uintptr(0) 29111 29112 for int32(libc.AssignUint8(&c, *(*uint8)(unsafe.Pointer(zSql)))) == ' ' || int32(c) == '\t' || int32(c) == '\r' || int32(c) == '\n' { 29113 zSql++ 29114 } 29115 nSql = strlen30(tls, zSql) 29116 29117 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext { 29118 var n int32 = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql 29119 if nSql >= n && 29120 libc.Xmemcmp(tls, (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql, zSql, uint64(n)) == 0 && 29121 (int32(*(*uint8)(unsafe.Pointer(zSql + uintptr(n)))) == 0 || int32(*(*uint8)(unsafe.Pointer(zSql + uintptr(n-1)))) == ';') { 29122 *(*uintptr)(unsafe.Pointer(bp)) = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 29123 *(*uintptr)(unsafe.Pointer(pzOut)) = zSql + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql) 29124 29125 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev != 0 { 29126 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev)).FpNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 29127 } else { 29128 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 29129 } 29130 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext != 0 { 29131 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext)).FpPrev = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 29132 } else { 29133 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 29134 } 29135 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 29136 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 29137 break 29138 } 29139 } 29140 29141 if pPreStmt == uintptr(0) { 29142 var nByte int32 29143 29144 if SQLITE_OK != dbPrepare(tls, pDb, zSql, bp, pzOut) { 29145 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 29146 return TCL_ERROR 29147 } 29148 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 29149 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) { 29150 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 29151 return TCL_ERROR 29152 } else { 29153 return TCL_OK 29154 } 29155 } 29156 29157 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 29158 nByte = int32(uint64(unsafe.Sizeof(SqlPreparedStmt{})) + uint64(nVar)*uint64(unsafe.Sizeof(uintptr(0)))) 29159 pPreStmt = tcl.XTcl_Alloc(tls, uint32(nByte)) 29160 libc.Xmemset(tls, pPreStmt, 0, uint64(nByte)) 29161 29162 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt = *(*uintptr)(unsafe.Pointer(bp)) 29163 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql = int32((int64(*(*uintptr)(unsafe.Pointer(pzOut))) - int64(zSql)) / 1) 29164 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 29165 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm = pPreStmt + 1*56 29166 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql == uintptr(0) { 29167 var zCopy uintptr = tcl.XTcl_Alloc(tls, uint32((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql+1)) 29168 libc.Xmemcpy(tls, zCopy, zSql, uint64((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql)) 29169 *(*uint8)(unsafe.Pointer(zCopy + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql))) = uint8(0) 29170 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = zCopy 29171 } 29172 } 29173 29174 for i = 1; i <= nVar; i++ { 29175 var zVar uintptr = sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 29176 if zVar != uintptr(0) && (int32(*(*uint8)(unsafe.Pointer(zVar))) == '$' || int32(*(*uint8)(unsafe.Pointer(zVar))) == ':' || int32(*(*uint8)(unsafe.Pointer(zVar))) == '@') { 29177 var pVar uintptr = tcl.XTcl_GetVar2Ex(tls, interp, zVar+1, uintptr(0), 0) 29178 if pVar == uintptr(0) && (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != uintptr(0) { 29179 var pCmd uintptr 29180 var rx int32 29181 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, -1) 29182 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 29183 tcl.XTcl_ListObjAppendElement(tls, interp, pCmd, tcl.XTcl_NewStringObj(tls, zVar, -1)) 29184 if needResultReset != 0 { 29185 tcl.XTcl_ResetResult(tls, interp) 29186 } 29187 needResultReset = 1 29188 rx = tcl.XTcl_EvalObjEx(tls, interp, pCmd, TCL_EVAL_DIRECT) 29189 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29190 var _objPtr uintptr = pCmd 29191 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29192 tcl.XTclFreeObj(tls, _objPtr) 29193 } 29194 } 29195 if rx == TCL_OK { 29196 pVar = tcl.XTcl_GetObjResult(tls, interp) 29197 } else if rx == TCL_ERROR { 29198 rc = TCL_ERROR 29199 break 29200 } else { 29201 pVar = uintptr(0) 29202 } 29203 } 29204 if pVar != 0 { 29205 var data uintptr 29206 var zType uintptr = func() uintptr { 29207 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 29208 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 29209 } 29210 return ts + 584 29211 }() 29212 c = *(*uint8)(unsafe.Pointer(zType)) 29213 if int32(*(*uint8)(unsafe.Pointer(zVar))) == '@' || int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 29214 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+8) 29215 sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 29216 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 29217 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 29218 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 29219 tcl.XTcl_GetIntFromObj(tls, interp, pVar, bp+8) 29220 sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*int32)(unsafe.Pointer(bp + 8))) 29221 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 29222 tcl.XTcl_GetDoubleFromObj(tls, interp, pVar, bp+16) 29223 sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*float64)(unsafe.Pointer(bp + 16))) 29224 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 29225 tcl.XTcl_GetWideIntFromObj(tls, interp, pVar, bp+24) 29226 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 29227 } else { 29228 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+8) 29229 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 29230 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 29231 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 29232 } 29233 } else { 29234 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 29235 } 29236 if needResultReset != 0 { 29237 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 29238 } 29239 } 29240 } 29241 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = iParm 29242 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = pPreStmt 29243 if needResultReset != 0 && rc == TCL_OK { 29244 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 29245 } 29246 29247 return rc 29248 } 29249 29250 func dbReleaseStmt(tls *libc.TLS, pDb uintptr, pPreStmt uintptr, discard int32) { 29251 var i int32 29252 29253 for i = 0; i < (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm; i++ { 29254 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29255 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(i)*8)) 29256 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29257 tcl.XTclFreeObj(tls, _objPtr) 29258 } 29259 } 29260 } 29261 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = 0 29262 29263 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt <= 0 || discard != 0 { 29264 dbFreeStmt(tls, pPreStmt) 29265 } else { 29266 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList 29267 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev = uintptr(0) 29268 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 29269 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpPrev = pPreStmt 29270 } 29271 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = pPreStmt 29272 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast == uintptr(0) { 29273 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = pPreStmt 29274 } else { 29275 } 29276 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt++ 29277 29278 for (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt > (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt { 29279 var pLast uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast 29280 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pLast)).FpPrev 29281 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast)).FpNext = uintptr(0) 29282 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 29283 dbFreeStmt(tls, pLast) 29284 } 29285 } 29286 } 29287 29288 type DbEvalContext1 = struct { 29289 FpDb uintptr 29290 FpSql uintptr 29291 FzSql uintptr 29292 FpPreStmt uintptr 29293 FnCol int32 29294 FevalFlags int32 29295 FpArray uintptr 29296 FapColName uintptr 29297 } 29298 29299 type DbEvalContext = DbEvalContext1 29300 29301 func dbReleaseColumnNames(tls *libc.TLS, p uintptr) { 29302 if (*DbEvalContext)(unsafe.Pointer(p)).FapColName != 0 { 29303 var i int32 29304 for i = 0; i < (*DbEvalContext)(unsafe.Pointer(p)).FnCol; i++ { 29305 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29306 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FapColName + uintptr(i)*8)) 29307 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29308 tcl.XTclFreeObj(tls, _objPtr) 29309 } 29310 } 29311 } 29312 tcl.XTcl_Free(tls, (*DbEvalContext)(unsafe.Pointer(p)).FapColName) 29313 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = uintptr(0) 29314 } 29315 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = 0 29316 } 29317 29318 func dbEvalInit(tls *libc.TLS, p uintptr, pDb uintptr, pSql uintptr, pArray uintptr, evalFlags int32) { 29319 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(DbEvalContext{}))) 29320 (*DbEvalContext)(unsafe.Pointer(p)).FpDb = pDb 29321 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = tcl.XTcl_GetString(tls, pSql) 29322 (*DbEvalContext)(unsafe.Pointer(p)).FpSql = pSql 29323 (*Tcl_Obj)(unsafe.Pointer(pSql)).FrefCount++ 29324 if pArray != 0 { 29325 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = pArray 29326 (*Tcl_Obj)(unsafe.Pointer(pArray)).FrefCount++ 29327 } 29328 (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags = evalFlags 29329 addDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 29330 } 29331 29332 func dbEvalRowInfo(tls *libc.TLS, p uintptr, pnCol uintptr, papColName uintptr) { 29333 if uintptr(0) == (*DbEvalContext)(unsafe.Pointer(p)).FapColName { 29334 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 29335 var i int32 29336 var nCol int32 29337 var apColName uintptr = uintptr(0) 29338 29339 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = libc.AssignInt32(&nCol, sqlite3.Xsqlite3_column_count(tls, pStmt)) 29340 if nCol > 0 && (papColName != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0) { 29341 apColName = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol))) 29342 for i = 0; i < nCol; i++ { 29343 *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)) = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_name(tls, pStmt, i), -1) 29344 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)))).FrefCount++ 29345 } 29346 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = apColName 29347 } 29348 29349 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 29350 var interp uintptr = (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).Finterp 29351 var pColList uintptr = tcl.XTcl_NewObj(tls) 29352 var pStar uintptr = tcl.XTcl_NewStringObj(tls, ts+3840, -1) 29353 29354 for i = 0; i < nCol; i++ { 29355 tcl.XTcl_ListObjAppendElement(tls, interp, pColList, *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8))) 29356 } 29357 (*Tcl_Obj)(unsafe.Pointer(pStar)).FrefCount++ 29358 tcl.XTcl_ObjSetVar2(tls, interp, (*DbEvalContext)(unsafe.Pointer(p)).FpArray, pStar, pColList, 0) 29359 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29360 var _objPtr uintptr = pStar 29361 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29362 tcl.XTclFreeObj(tls, _objPtr) 29363 } 29364 } 29365 } 29366 } 29367 29368 if papColName != 0 { 29369 *(*uintptr)(unsafe.Pointer(papColName)) = (*DbEvalContext)(unsafe.Pointer(p)).FapColName 29370 } 29371 if pnCol != 0 { 29372 *(*int32)(unsafe.Pointer(pnCol)) = (*DbEvalContext)(unsafe.Pointer(p)).FnCol 29373 } 29374 } 29375 29376 func dbEvalStep(tls *libc.TLS, p uintptr) int32 { 29377 var zPrevSql uintptr = uintptr(0) 29378 29379 for *(*uint8)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FzSql)) != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 29380 var rc int32 29381 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt == uintptr(0) { 29382 zPrevSql = func() uintptr { 29383 if (*DbEvalContext)(unsafe.Pointer(p)).FzSql == zPrevSql { 29384 return uintptr(0) 29385 } 29386 return (*DbEvalContext)(unsafe.Pointer(p)).FzSql 29387 }() 29388 rc = dbPrepareAndBind(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FzSql, p+16, p+24) 29389 if rc != TCL_OK { 29390 return rc 29391 } 29392 } else { 29393 var rcs int32 29394 var pDb uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpDb 29395 var pPreStmt uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt 29396 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 29397 29398 rcs = sqlite3.Xsqlite3_step(tls, pStmt) 29399 if rcs == SQLITE_ROW { 29400 return TCL_OK 29401 } 29402 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 29403 dbEvalRowInfo(tls, p, uintptr(0), uintptr(0)) 29404 } 29405 rcs = sqlite3.Xsqlite3_reset(tls, pStmt) 29406 29407 (*SqliteDb)(unsafe.Pointer(pDb)).FnStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, 1) 29408 (*SqliteDb)(unsafe.Pointer(pDb)).FnSort = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_SORT, 1) 29409 (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_AUTOINDEX, 1) 29410 (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_VM_STEP, 1) 29411 dbReleaseColumnNames(tls, p) 29412 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 29413 29414 if rcs != SQLITE_OK { 29415 dbReleaseStmt(tls, pDb, pPreStmt, 1) 29416 if (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FbLegacyPrepare != 0 && rcs == SQLITE_SCHEMA && zPrevSql != 0 { 29417 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = zPrevSql 29418 continue 29419 } 29420 tcl.XTcl_SetObjResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, 29421 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 29422 return TCL_ERROR 29423 } else { 29424 dbReleaseStmt(tls, pDb, pPreStmt, 0) 29425 } 29426 } 29427 } 29428 29429 return TCL_BREAK 29430 } 29431 29432 func dbEvalFinalize(tls *libc.TLS, p uintptr) { 29433 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 29434 sqlite3.Xsqlite3_reset(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt) 29435 dbReleaseStmt(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt, 0) 29436 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 29437 } 29438 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 29439 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29440 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 29441 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29442 tcl.XTclFreeObj(tls, _objPtr) 29443 } 29444 } 29445 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = uintptr(0) 29446 } 29447 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 29448 var _objPtr uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpSql 29449 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29450 tcl.XTclFreeObj(tls, _objPtr) 29451 } 29452 } 29453 dbReleaseColumnNames(tls, p) 29454 delDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 29455 } 29456 29457 func dbEvalColumnValue(tls *libc.TLS, p uintptr, iCol int32) uintptr { 29458 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 29459 switch sqlite3.Xsqlite3_column_type(tls, pStmt, iCol) { 29460 case SQLITE_BLOB: 29461 { 29462 var bytes int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, iCol) 29463 var zBlob uintptr = sqlite3.Xsqlite3_column_blob(tls, pStmt, iCol) 29464 if !(zBlob != 0) { 29465 bytes = 0 29466 } 29467 return tcl.XTcl_NewByteArrayObj(tls, zBlob, bytes) 29468 29469 } 29470 case SQLITE_INTEGER: 29471 { 29472 var v sqlite_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, iCol) 29473 if v >= int64(-2147483647) && v <= int64(2147483647) { 29474 return tcl.XTcl_NewIntObj(tls, int32(v)) 29475 } else { 29476 return tcl.XTcl_NewWideIntObj(tls, v) 29477 } 29478 29479 } 29480 fallthrough 29481 case SQLITE_FLOAT: 29482 { 29483 return tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_column_double(tls, pStmt, iCol)) 29484 29485 } 29486 case SQLITE_NULL: 29487 { 29488 return tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 29489 29490 } 29491 } 29492 29493 return tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_text(tls, pStmt, iCol), -1) 29494 } 29495 29496 func DbUseNre(tls *libc.TLS) int32 { 29497 bp := tls.Alloc(8) 29498 defer tls.Free(8) 29499 29500 tcl.XTcl_GetVersion(tls, bp, bp+4, uintptr(0), uintptr(0)) 29501 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == 8 && *(*int32)(unsafe.Pointer(bp + 4)) >= 6 || *(*int32)(unsafe.Pointer(bp)) > 8) 29502 } 29503 29504 func DbEvalNextCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 29505 bp := tls.Alloc(16) 29506 defer tls.Free(16) 29507 29508 var rc int32 = result 29509 29510 var p uintptr = *(*ClientData)(unsafe.Pointer(data)) 29511 var pScript uintptr = *(*ClientData)(unsafe.Pointer(data + 1*8)) 29512 var pArray uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 29513 29514 for (rc == TCL_OK || rc == TCL_CONTINUE) && TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, p)) { 29515 var i int32 29516 29517 dbEvalRowInfo(tls, p, bp, bp+8) 29518 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 29519 if pArray == uintptr(0) { 29520 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(0), dbEvalColumnValue(tls, p, i), 0) 29521 } else if (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags&SQLITE_EVAL_WITHOUTNULLS != 0 && 29522 sqlite3.Xsqlite3_column_type(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt, i) == SQLITE_NULL { 29523 tcl.XTcl_UnsetVar2(tls, interp, tcl.XTcl_GetString(tls, pArray), 29524 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8))), 0) 29525 } else { 29526 tcl.XTcl_ObjSetVar2(tls, interp, pArray, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), dbEvalColumnValue(tls, p, i), 0) 29527 } 29528 } 29529 29530 if DbUseNre(tls) != 0 { 29531 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 29532 f func(*libc.TLS, uintptr, uintptr, int32) int32 29533 }{DbEvalNextCmd})), p, pScript, uintptr(0), uintptr(0)) 29534 return tcl.XTcl_NREvalObj(tls, interp, pScript, 0) 29535 } else { 29536 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 29537 } 29538 } 29539 29540 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29541 var _objPtr uintptr = pScript 29542 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29543 tcl.XTclFreeObj(tls, _objPtr) 29544 } 29545 } 29546 dbEvalFinalize(tls, p) 29547 tcl.XTcl_Free(tls, p) 29548 29549 if rc == TCL_OK || rc == TCL_BREAK { 29550 tcl.XTcl_ResetResult(tls, interp) 29551 rc = TCL_OK 29552 } 29553 return rc 29554 } 29555 29556 func DbHookCmd(tls *libc.TLS, interp uintptr, pDb uintptr, pArg uintptr, ppHook uintptr) { 29557 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 29558 29559 if *(*uintptr)(unsafe.Pointer(ppHook)) != 0 { 29560 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(ppHook))) 29561 if pArg != 0 { 29562 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29563 var _objPtr uintptr = *(*uintptr)(unsafe.Pointer(ppHook)) 29564 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 29565 tcl.XTclFreeObj(tls, _objPtr) 29566 } 29567 } 29568 *(*uintptr)(unsafe.Pointer(ppHook)) = uintptr(0) 29569 } 29570 } 29571 if pArg != 0 { 29572 if tcl.XTcl_GetCharLength(tls, pArg) > 0 { 29573 *(*uintptr)(unsafe.Pointer(ppHook)) = pArg 29574 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppHook)))).FrefCount++ 29575 } 29576 } 29577 29578 sqlite3.Xsqlite3_preupdate_hook(tls, db, func() uintptr { 29579 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 29580 return *(*uintptr)(unsafe.Pointer(&struct { 29581 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, sqlite_int64, sqlite_int64) 29582 }{DbPreUpdateHandler})) 29583 } 29584 return uintptr(0) 29585 }(), pDb) 29586 sqlite3.Xsqlite3_update_hook(tls, db, func() uintptr { 29587 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 29588 return *(*uintptr)(unsafe.Pointer(&struct { 29589 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, sqlite_int64) 29590 }{DbUpdateHandler})) 29591 } 29592 return uintptr(0) 29593 }(), pDb) 29594 sqlite3.Xsqlite3_rollback_hook(tls, db, func() uintptr { 29595 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 29596 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbRollbackHandler})) 29597 } 29598 return uintptr(0) 29599 }(), pDb) 29600 sqlite3.Xsqlite3_wal_hook(tls, db, func() uintptr { 29601 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 29602 return *(*uintptr)(unsafe.Pointer(&struct { 29603 f func(*libc.TLS, uintptr, uintptr, uintptr, int32) int32 29604 }{DbWalHandler})) 29605 } 29606 return uintptr(0) 29607 }(), pDb) 29608 } 29609 29610 func DbObjCmd(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29611 bp := tls.Alloc(1588) 29612 defer tls.Free(1588) 29613 *(*uintptr)(unsafe.Pointer(bp + 1464)) = cd 29614 29615 var pDb uintptr 29616 29617 var rc int32 29618 var zAuth uintptr 29619 29620 var zDestFile uintptr 29621 var zSrcDb uintptr 29622 29623 var pBackup uintptr 29624 var zCallback uintptr 29625 29626 var zBusy uintptr 29627 29628 var subCmd uintptr 29629 29630 var pResult uintptr 29631 var pCollate uintptr 29632 var zName uintptr 29633 var zScript uintptr 29634 29635 var _objPtr uintptr 29636 var zCommit uintptr 29637 29638 var pResult1 uintptr 29639 var isComplete int32 29640 29641 var zOpt uintptr 29642 29643 var pResult2 uintptr 29644 var ii int32 29645 var zErr uintptr 29646 var nErr int32 29647 var z uintptr 29648 var zTable uintptr 29649 var zFile uintptr 29650 var zConflict uintptr 29651 29652 var nCol int32 29653 var nByte int32 29654 var i int32 29655 var j int32 29656 var nSep int32 29657 var nNull int32 29658 var zSql uintptr 29659 var zLine uintptr 29660 var azCol uintptr 29661 var zCommit1 uintptr 29662 var in uintptr 29663 var lineno int32 29664 29665 var pResult3 uintptr 29666 29667 var zSep uintptr 29668 var zNull uintptr 29669 29670 var z1 uintptr 29671 var flags int32 29672 var zSchema uintptr 29673 var pValue uintptr 29674 var pBA uintptr 29675 var pData uintptr 29676 29677 var xrc int32 29678 29679 var i1 int32 29680 29681 var pResult4 uintptr 29682 29683 var i2 int32 29684 29685 var _objPtr1 uintptr 29686 29687 var pRet uintptr 29688 29689 var p uintptr 29690 var pArray uintptr 29691 var pScript uintptr 29692 var evalFlags int32 29693 var zOpt1 uintptr 29694 29695 var z2 uintptr 29696 var n1 int32 29697 var _objPtr2 uintptr 29698 var flags1 int32 29699 var pFunc uintptr 29700 var pScript1 uintptr 29701 var zName1 uintptr 29702 29703 var i3 int32 29704 29705 var isReadonly1 int32 29706 var zDb uintptr 29707 var zTable1 uintptr 29708 var zColumn uintptr 29709 29710 var zNull1 uintptr 29711 var pResult5 uintptr 29712 var rowid Tcl_WideInt 29713 var zProgress uintptr 29714 29715 var zProfile uintptr 29716 29717 var zSrcFile uintptr 29718 var zDestDb uintptr 29719 29720 var pBackup1 uintptr 29721 var nTimeout int32 29722 var needFree int32 29723 var zSchema1 uintptr 29724 29725 var pData1 uintptr 29726 var v2 int32 29727 var zOp uintptr 29728 29729 var pResult6 uintptr 29730 var zTrace uintptr 29731 29732 var _objPtr3 uintptr 29733 var _objPtr4 uintptr 29734 29735 var pError uintptr 29736 29737 var i4 int32 29738 var zTraceV2 uintptr 29739 29740 var wMask Tcl_WideInt 29741 29742 var pScript2 uintptr 29743 var zBegin uintptr 29744 var _objPtr5 uintptr 29745 var xNotify uintptr 29746 var pNotifyArg uintptr 29747 var nCol2 int32 29748 var pRet1 uintptr 29749 var pObj1 uintptr 29750 29751 var ppHook uintptr 29752 29753 var zArg uintptr 29754 var i5 int32 29755 pDb = *(*uintptr)(unsafe.Pointer(bp + 1464)) 29756 rc = TCL_OK 29757 29758 if !(objc < 2) { 29759 goto __1 29760 } 29761 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 29762 return TCL_ERROR 29763 __1: 29764 ; 29765 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) { 29766 goto __2 29767 } 29768 return TCL_ERROR 29769 __2: 29770 ; 29771 switch uint32(*(*int32)(unsafe.Pointer(bp + 1016))) { 29772 case uint32(0): 29773 goto __4 29774 29775 case uint32(1): 29776 goto __5 29777 29778 case uint32(2): 29779 goto __6 29780 29781 case uint32(3): 29782 goto __7 29783 29784 case uint32(4): 29785 goto __8 29786 29787 case uint32(5): 29788 goto __9 29789 29790 case uint32(6): 29791 goto __10 29792 29793 case uint32(7): 29794 goto __11 29795 29796 case uint32(8): 29797 goto __12 29798 29799 case uint32(9): 29800 goto __13 29801 29802 case uint32(10): 29803 goto __14 29804 29805 case uint32(11): 29806 goto __15 29807 29808 case uint32(12): 29809 goto __16 29810 29811 case uint32(13): 29812 goto __17 29813 29814 case uint32(14): 29815 goto __18 29816 29817 case uint32(15): 29818 goto __19 29819 29820 case uint32(16): 29821 goto __20 29822 29823 case uint32(18): 29824 goto __21 29825 case uint32(24): 29826 goto __22 29827 29828 case uint32(17): 29829 goto __23 29830 29831 case uint32(19): 29832 goto __24 29833 29834 case uint32(20): 29835 goto __25 29836 29837 case uint32(21): 29838 goto __26 29839 29840 case uint32(23): 29841 goto __27 29842 29843 case uint32(22): 29844 goto __28 29845 29846 case uint32(27): 29847 goto __29 29848 29849 case uint32(26): 29850 goto __30 29851 29852 case uint32(28): 29853 goto __31 29854 29855 case uint32(29): 29856 goto __32 29857 29858 case uint32(31): 29859 goto __33 29860 29861 case uint32(32): 29862 goto __34 29863 29864 case uint32(33): 29865 goto __35 29866 29867 case uint32(34): 29868 goto __36 29869 29870 case uint32(35): 29871 goto __37 29872 29873 case uint32(36): 29874 goto __38 29875 29876 case uint32(37): 29877 goto __39 29878 29879 case uint32(38): 29880 goto __40 29881 29882 case uint32(25): 29883 goto __41 29884 29885 case uint32(41): 29886 goto __42 29887 case uint32(39): 29888 goto __43 29889 case uint32(30): 29890 goto __44 29891 29892 case uint32(40): 29893 goto __45 29894 } 29895 goto __3 29896 29897 __4: 29898 if !(objc > 3) { 29899 goto __46 29900 } 29901 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 29902 return TCL_ERROR 29903 goto __47 29904 __46: 29905 if !(objc == 2) { 29906 goto __48 29907 } 29908 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29909 goto __50 29910 } 29911 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, uintptr(0))) 29912 __50: 29913 ; 29914 goto __49 29915 __48: 29916 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29917 goto __51 29918 } 29919 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 29920 __51: 29921 ; 29922 zAuth = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1020) 29923 if !(zAuth != 0 && *(*int32)(unsafe.Pointer(bp + 1020)) > 0) { 29924 goto __52 29925 } 29926 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 29927 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, zAuth, uint64(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 29928 goto __53 29929 __52: 29930 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = uintptr(0) 29931 __53: 29932 ; 29933 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 29934 goto __54 29935 } 29936 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 29937 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 29938 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 29939 }{auth_callback})), pDb) 29940 goto __55 29941 __54: 29942 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 29943 __55: 29944 ; 29945 __49: 29946 ; 29947 __47: 29948 ; 29949 goto __3 29950 29951 __5: 29952 if !(objc == 3) { 29953 goto __56 29954 } 29955 zSrcDb = ts + 85 29956 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29957 goto __57 29958 __56: 29959 if !(objc == 4) { 29960 goto __58 29961 } 29962 zSrcDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 29963 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 29964 goto __59 29965 __58: 29966 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 29967 return TCL_ERROR 29968 __59: 29969 ; 29970 __57: 29971 ; 29972 rc = sqlite3.Xsqlite3_open_v2(tls, zDestFile, bp+1024, 29973 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 29974 if !(rc != SQLITE_OK) { 29975 goto __60 29976 } 29977 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+11729, 29978 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29979 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29980 return TCL_ERROR 29981 __60: 29982 ; 29983 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 1024)), ts+85, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSrcDb) 29984 if !(pBackup == uintptr(0)) { 29985 goto __61 29986 } 29987 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+11759, 29988 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 29989 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 29990 return TCL_ERROR 29991 __61: 29992 ; 29993 __62: 29994 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup, 100)) == SQLITE_OK) { 29995 goto __63 29996 } 29997 goto __62 29998 __63: 29999 ; 30000 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 30001 if !(rc == SQLITE_DONE) { 30002 goto __64 30003 } 30004 rc = TCL_OK 30005 goto __65 30006 __64: 30007 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+11759, 30008 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 30009 rc = TCL_ERROR 30010 __65: 30011 ; 30012 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 30013 goto __3 30014 30015 __6: 30016 if !(objc > 3) { 30017 goto __66 30018 } 30019 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30020 return TCL_ERROR 30021 goto __67 30022 __66: 30023 if !(objc == 2) { 30024 goto __68 30025 } 30026 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 30027 goto __70 30028 } 30029 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+88, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, uintptr(0))) 30030 __70: 30031 ; 30032 goto __69 30033 __68: 30034 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 30035 goto __71 30036 } 30037 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 30038 __71: 30039 ; 30040 zCallback = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1032) 30041 if !(zCallback != 0 && *(*int32)(unsafe.Pointer(bp + 1032)) > 0) { 30042 goto __72 30043 } 30044 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 30045 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, zCallback, uint64(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 30046 goto __73 30047 __72: 30048 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = uintptr(0) 30049 __73: 30050 ; 30051 __69: 30052 ; 30053 __67: 30054 ; 30055 goto __3 30056 30057 __7: 30058 if !(objc > 3) { 30059 goto __74 30060 } 30061 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11775) 30062 return TCL_ERROR 30063 goto __75 30064 __74: 30065 if !(objc == 2) { 30066 goto __76 30067 } 30068 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 30069 goto __78 30070 } 30071 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, uintptr(0))) 30072 __78: 30073 ; 30074 goto __77 30075 __76: 30076 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 30077 goto __79 30078 } 30079 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 30080 __79: 30081 ; 30082 zBusy = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1036) 30083 if !(zBusy != 0 && *(*int32)(unsafe.Pointer(bp + 1036)) > 0) { 30084 goto __80 30085 } 30086 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 30087 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, zBusy, uint64(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 30088 goto __81 30089 __80: 30090 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = uintptr(0) 30091 __81: 30092 ; 30093 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 30094 goto __82 30095 } 30096 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30097 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30098 f func(*libc.TLS, uintptr, int32) int32 30099 }{DbBusyHandler})), pDb) 30100 goto __83 30101 __82: 30102 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30103 __83: 30104 ; 30105 __77: 30106 ; 30107 __75: 30108 ; 30109 goto __3 30110 30111 __8: 30112 if !(objc <= 2) { 30113 goto __84 30114 } 30115 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+11784) 30116 return TCL_ERROR 30117 __84: 30118 ; 30119 subCmd = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 30120 if !(int32(*(*uint8)(unsafe.Pointer(subCmd))) == 'f' && libc.Xstrcmp(tls, subCmd, ts+11803) == 0) { 30121 goto __85 30122 } 30123 if !(objc != 3) { 30124 goto __87 30125 } 30126 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11803) 30127 return TCL_ERROR 30128 goto __88 30129 __87: 30130 flushStmtCache(tls, pDb) 30131 __88: 30132 ; 30133 goto __86 30134 __85: 30135 if !(int32(*(*uint8)(unsafe.Pointer(subCmd))) == 's' && libc.Xstrcmp(tls, subCmd, ts+11809) == 0) { 30136 goto __89 30137 } 30138 if !(objc != 4) { 30139 goto __91 30140 } 30141 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11814) 30142 return TCL_ERROR 30143 goto __92 30144 __91: 30145 if !(TCL_ERROR == tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1040)) { 30146 goto __93 30147 } 30148 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+120, ts+11821, 30149 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)), ts+11838, uintptr(0))) 30150 return TCL_ERROR 30151 goto __94 30152 __93: 30153 if !(*(*int32)(unsafe.Pointer(bp + 1040)) < 0) { 30154 goto __95 30155 } 30156 flushStmtCache(tls, pDb) 30157 *(*int32)(unsafe.Pointer(bp + 1040)) = 0 30158 goto __96 30159 __95: 30160 if !(*(*int32)(unsafe.Pointer(bp + 1040)) > MAX_PREPARED_STMTS) { 30161 goto __97 30162 } 30163 *(*int32)(unsafe.Pointer(bp + 1040)) = MAX_PREPARED_STMTS 30164 __97: 30165 ; 30166 __96: 30167 ; 30168 (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt = *(*int32)(unsafe.Pointer(bp + 1040)) 30169 __94: 30170 ; 30171 __92: 30172 ; 30173 goto __90 30174 __89: 30175 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+152, ts+11851, 30176 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)), ts+11864, 30177 uintptr(0))) 30178 return TCL_ERROR 30179 __90: 30180 ; 30181 __86: 30182 ; 30183 goto __3 30184 30185 __9: 30186 if !(objc != 2) { 30187 goto __98 30188 } 30189 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 30190 return TCL_ERROR 30191 __98: 30192 ; 30193 pResult = tcl.XTcl_GetObjResult(tls, interp) 30194 tcl.XTcl_SetWideIntObj(tls, pResult, sqlite3.Xsqlite3_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 30195 goto __3 30196 30197 __10: 30198 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0))) 30199 goto __3 30200 30201 __11: 30202 if !(objc != 4) { 30203 goto __99 30204 } 30205 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11889) 30206 return TCL_ERROR 30207 __99: 30208 ; 30209 zName = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 30210 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1044) 30211 pCollate = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlCollate{}))+uint64(*(*int32)(unsafe.Pointer(bp + 1044)))+uint64(1))) 30212 if !(pCollate == uintptr(0)) { 30213 goto __100 30214 } 30215 return TCL_ERROR 30216 __100: 30217 ; 30218 (*SqlCollate)(unsafe.Pointer(pCollate)).Finterp = interp 30219 (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 30220 (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript = pCollate + 1*24 30221 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = pCollate 30222 libc.Xmemcpy(tls, (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 1044))+1)) 30223 if !(sqlite3.Xsqlite3_create_collation(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName, SQLITE_UTF8, 30224 pCollate, *(*uintptr)(unsafe.Pointer(&struct { 30225 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 30226 }{tclSqlCollate}))) != 0) { 30227 goto __101 30228 } 30229 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 30230 return TCL_ERROR 30231 __101: 30232 ; 30233 goto __3 30234 30235 __12: 30236 if !(objc != 3) { 30237 goto __102 30238 } 30239 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+10187) 30240 return TCL_ERROR 30241 __102: 30242 ; 30243 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0) { 30244 goto __103 30245 } 30246 __104: 30247 _objPtr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded 30248 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1) { 30249 goto __107 30250 } 30251 tcl.XTclFreeObj(tls, _objPtr) 30252 __107: 30253 ; 30254 goto __105 30255 __105: 30256 if 0 != 0 { 30257 goto __104 30258 } 30259 goto __106 30260 __106: 30261 ; 30262 __103: 30263 ; 30264 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30265 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount++ 30266 sqlite3.Xsqlite3_collation_needed(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, pDb, *(*uintptr)(unsafe.Pointer(&struct { 30267 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 30268 }{tclCollateNeeded}))) 30269 goto __3 30270 30271 __13: 30272 if !(objc > 3) { 30273 goto __108 30274 } 30275 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 30276 return TCL_ERROR 30277 goto __109 30278 __108: 30279 if !(objc == 2) { 30280 goto __110 30281 } 30282 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 30283 goto __112 30284 } 30285 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+184, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, uintptr(0))) 30286 __112: 30287 ; 30288 goto __111 30289 __110: 30290 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 30291 goto __113 30292 } 30293 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 30294 __113: 30295 ; 30296 zCommit = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1048) 30297 if !(zCommit != 0 && *(*int32)(unsafe.Pointer(bp + 1048)) > 0) { 30298 goto __114 30299 } 30300 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 30301 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, zCommit, uint64(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 30302 goto __115 30303 __114: 30304 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = uintptr(0) 30305 __115: 30306 ; 30307 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 30308 goto __116 30309 } 30310 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 30311 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 30312 f func(*libc.TLS, uintptr) int32 30313 }{DbCommitHandler})), pDb) 30314 goto __117 30315 __116: 30316 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 30317 __117: 30318 ; 30319 __111: 30320 ; 30321 __109: 30322 ; 30323 goto __3 30324 30325 __14: 30326 if !(objc != 3) { 30327 goto __118 30328 } 30329 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 30330 return TCL_ERROR 30331 __118: 30332 ; 30333 isComplete = sqlite3.Xsqlite3_complete(tls, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0))) 30334 pResult1 = tcl.XTcl_GetObjResult(tls, interp) 30335 tcl.XTcl_SetIntObj(tls, pResult1, libc.Bool32(isComplete != 0)) 30336 goto __3 30337 30338 __15: 30339 if !(objc > 4) { 30340 goto __119 30341 } 30342 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11901) 30343 return TCL_ERROR 30344 __119: 30345 ; 30346 if !(objc == 2) { 30347 goto __120 30348 } 30349 30350 pResult2 = tcl.XTcl_NewListObj(tls, 0, uintptr(0)) 30351 ii = 0 30352 __122: 30353 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 30354 goto __124 30355 } 30356 *(*int32)(unsafe.Pointer(bp + 1052)) = 0 30357 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+200, -1, bp+1052)) 30358 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 30359 tcl.XTcl_NewStringObj(tls, aDbConfig[ii].FzName, -1)) 30360 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 30361 tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1052)))) 30362 goto __123 30363 __123: 30364 ii++ 30365 goto __122 30366 goto __124 30367 __124: 30368 ; 30369 goto __121 30370 __120: 30371 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 30372 *(*int32)(unsafe.Pointer(bp + 1056)) = -1 30373 *(*int32)(unsafe.Pointer(bp + 1060)) = 0 30374 if !(int32(*(*uint8)(unsafe.Pointer(zOpt))) == '-') { 30375 goto __125 30376 } 30377 zOpt++ 30378 __125: 30379 ; 30380 ii = 0 30381 __126: 30382 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 30383 goto __128 30384 } 30385 if !(libc.Xstrcmp(tls, aDbConfig[ii].FzName, zOpt) == 0) { 30386 goto __129 30387 } 30388 goto __128 30389 __129: 30390 ; 30391 goto __127 30392 __127: 30393 ii++ 30394 goto __126 30395 goto __128 30396 __128: 30397 ; 30398 if !(uint64(ii) >= uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 30399 goto __130 30400 } 30401 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+216, ts+11920, zOpt, 30402 ts+11945, uintptr(0))) 30403 return TCL_ERROR 30404 __130: 30405 ; 30406 if !(objc == 4) { 30407 goto __131 30408 } 30409 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1056) != 0) { 30410 goto __132 30411 } 30412 return TCL_ERROR 30413 __132: 30414 ; 30415 __131: 30416 ; 30417 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+248, *(*int32)(unsafe.Pointer(bp + 1056)), bp+1060)) 30418 pResult2 = tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1060))) 30419 __121: 30420 ; 30421 tcl.XTcl_SetObjResult(tls, interp, pResult2) 30422 goto __3 30423 30424 __16: 30425 lineno = 0 30426 if !(objc < 5 || objc > 7) { 30427 goto __133 30428 } 30429 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 30430 ts+11947) 30431 return TCL_ERROR 30432 __133: 30433 ; 30434 if !(objc >= 6) { 30435 goto __134 30436 } 30437 zSep = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8)), uintptr(0)) 30438 goto __135 30439 __134: 30440 zSep = ts + 12009 30441 __135: 30442 ; 30443 if !(objc >= 7) { 30444 goto __136 30445 } 30446 zNull = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8)), uintptr(0)) 30447 goto __137 30448 __136: 30449 zNull = ts + 584 30450 __137: 30451 ; 30452 zConflict = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 30453 zTable = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)) 30454 zFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0)) 30455 nSep = strlen30(tls, zSep) 30456 nNull = strlen30(tls, zNull) 30457 if !(nSep == 0) { 30458 goto __138 30459 } 30460 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+264, ts+12011, 30461 uintptr(0))) 30462 return TCL_ERROR 30463 __138: 30464 ; 30465 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) { 30466 goto __139 30467 } 30468 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+280, ts+12090, zConflict, 30469 ts+12099, uintptr(0))) 30470 return TCL_ERROR 30471 __139: 30472 ; 30473 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+12179, libc.VaList(bp+312, zTable)) 30474 if !(zSql == uintptr(0)) { 30475 goto __140 30476 } 30477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+320, ts+12198, zTable, uintptr(0))) 30478 return TCL_ERROR 30479 __140: 30480 ; 30481 nByte = strlen30(tls, zSql) 30482 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 30483 sqlite3.Xsqlite3_free(tls, zSql) 30484 if !(rc != 0) { 30485 goto __141 30486 } 30487 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+344, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30488 nCol = 0 30489 goto __142 30490 __141: 30491 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30492 __142: 30493 ; 30494 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30495 if !(nCol == 0) { 30496 goto __143 30497 } 30498 return TCL_ERROR 30499 __143: 30500 ; 30501 zSql = libc.Xmalloc(tls, uint64(nByte+50+nCol*2)) 30502 if !(zSql == uintptr(0)) { 30503 goto __144 30504 } 30505 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+368, ts+12229, uintptr(0))) 30506 return TCL_ERROR 30507 __144: 30508 ; 30509 sqlite3.Xsqlite3_snprintf(tls, nByte+50, zSql, ts+12251, 30510 libc.VaList(bp+384, zConflict, zTable)) 30511 j = strlen30(tls, zSql) 30512 i = 1 30513 __145: 30514 if !(i < nCol) { 30515 goto __147 30516 } 30517 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(',') 30518 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = uint8('?') 30519 goto __146 30520 __146: 30521 i++ 30522 goto __145 30523 goto __147 30524 __147: 30525 ; 30526 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(')') 30527 *(*uint8)(unsafe.Pointer(zSql + uintptr(j))) = uint8(0) 30528 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 30529 libc.Xfree(tls, zSql) 30530 if !(rc != 0) { 30531 goto __148 30532 } 30533 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+400, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30534 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30535 return TCL_ERROR 30536 __148: 30537 ; 30538 in = libc.Xfopen(tls, zFile, ts+4402) 30539 if !(in == uintptr(0)) { 30540 goto __149 30541 } 30542 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+424, ts+12283, zFile, uintptr(0))) 30543 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30544 return TCL_ERROR 30545 __149: 30546 ; 30547 azCol = libc.Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol+1)) 30548 if !(azCol == uintptr(0)) { 30549 goto __150 30550 } 30551 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+448, ts+12229, uintptr(0))) 30552 libc.Xfclose(tls, in) 30553 return TCL_ERROR 30554 __150: 30555 ; 30556 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+12309, uintptr(0), uintptr(0), uintptr(0)) 30557 zCommit1 = ts + 11628 30558 __151: 30559 if !(libc.AssignUintptr(&zLine, local_getline(tls, uintptr(0), in)) != uintptr(0)) { 30560 goto __152 30561 } 30562 lineno++ 30563 *(*uintptr)(unsafe.Pointer(azCol)) = zLine 30564 i = 0 30565 z = zLine 30566 __153: 30567 if !(*(*uint8)(unsafe.Pointer(z)) != 0) { 30568 goto __155 30569 } 30570 if !(int32(*(*uint8)(unsafe.Pointer(z))) == int32(*(*uint8)(unsafe.Pointer(zSep))) && libc.Xstrncmp(tls, z, zSep, uint64(nSep)) == 0) { 30571 goto __156 30572 } 30573 *(*uint8)(unsafe.Pointer(z)) = uint8(0) 30574 i++ 30575 if !(i < nCol) { 30576 goto __157 30577 } 30578 *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)) = z + uintptr(nSep) 30579 z += uintptr(nSep - 1) 30580 __157: 30581 ; 30582 __156: 30583 ; 30584 goto __154 30585 __154: 30586 z++ 30587 goto __153 30588 goto __155 30589 __155: 30590 ; 30591 if !(i+1 != nCol) { 30592 goto __158 30593 } 30594 nErr = strlen30(tls, zFile) + 200 30595 zErr = libc.Xmalloc(tls, uint64(nErr)) 30596 if !(zErr != 0) { 30597 goto __159 30598 } 30599 sqlite3.Xsqlite3_snprintf(tls, nErr, zErr, 30600 ts+12315, 30601 libc.VaList(bp+464, zFile, lineno, nCol, i+1)) 30602 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+496, zErr, uintptr(0))) 30603 libc.Xfree(tls, zErr) 30604 __159: 30605 ; 30606 zCommit1 = ts + 7824 30607 goto __152 30608 __158: 30609 ; 30610 i = 0 30611 __160: 30612 if !(i < nCol) { 30613 goto __162 30614 } 30615 30616 if !(nNull > 0 && libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), zNull) == 0 || 30617 strlen30(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8))) == 0) { 30618 goto __163 30619 } 30620 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1) 30621 goto __164 30622 __163: 30623 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), -1, uintptr(0)) 30624 __164: 30625 ; 30626 goto __161 30627 __161: 30628 i++ 30629 goto __160 30630 goto __162 30631 __162: 30632 ; 30633 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30634 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30635 libc.Xfree(tls, zLine) 30636 if !(rc != SQLITE_OK) { 30637 goto __165 30638 } 30639 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+512, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 30640 zCommit1 = ts + 7824 30641 goto __152 30642 __165: 30643 ; 30644 goto __151 30645 __152: 30646 ; 30647 libc.Xfree(tls, azCol) 30648 libc.Xfclose(tls, in) 30649 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 30650 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zCommit1, uintptr(0), uintptr(0), uintptr(0)) 30651 30652 if !(int32(*(*uint8)(unsafe.Pointer(zCommit1))) == 'C') { 30653 goto __166 30654 } 30655 30656 pResult3 = tcl.XTcl_GetObjResult(tls, interp) 30657 tcl.XTcl_SetIntObj(tls, pResult3, lineno) 30658 rc = TCL_OK 30659 goto __167 30660 __166: 30661 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]uint8{})), bp+1072, ts+1333, libc.VaList(bp+536, lineno)) 30662 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+544, ts+12375, bp+1072, 30663 uintptr(0))) 30664 rc = TCL_ERROR 30665 __167: 30666 ; 30667 goto __3 30668 30669 __17: 30670 zSchema = uintptr(0) 30671 pValue = uintptr(0) 30672 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = int64(0) 30673 *(*int32)(unsafe.Pointer(bp + 1160)) = 0 30674 30675 if !(objc < 3) { 30676 goto __168 30677 } 30678 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12408) 30679 rc = TCL_ERROR 30680 goto __3 30681 __168: 30682 ; 30683 i1 = 2 30684 __169: 30685 if !(i1 < objc-1) { 30686 goto __171 30687 } 30688 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i1)*8))) 30689 if !(libc.Xstrcmp(tls, z1, ts+12425) == 0 && i1 < objc-2) { 30690 goto __172 30691 } 30692 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1152) 30693 if !(rc != 0) { 30694 goto __173 30695 } 30696 goto deserialize_error 30697 __173: 30698 ; 30699 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 1152)) 30700 goto __170 30701 __172: 30702 ; 30703 if !(libc.Xstrcmp(tls, z1, ts+12434) == 0 && i1 < objc-2) { 30704 goto __174 30705 } 30706 rc = tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1160) 30707 if !(rc != 0) { 30708 goto __175 30709 } 30710 goto deserialize_error 30711 __175: 30712 ; 30713 goto __170 30714 __174: 30715 ; 30716 if !(zSchema == uintptr(0) && i1 == objc-2 && int32(*(*uint8)(unsafe.Pointer(z1))) != '-') { 30717 goto __176 30718 } 30719 zSchema = z1 30720 goto __170 30721 __176: 30722 ; 30723 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+568, ts+12444, z1, uintptr(0))) 30724 rc = TCL_ERROR 30725 goto deserialize_error 30726 goto __170 30727 __170: 30728 i1++ 30729 goto __169 30730 goto __171 30731 __171: 30732 ; 30733 pValue = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30734 pBA = tcl.XTcl_GetByteArrayFromObj(tls, pValue, bp+1164) 30735 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 30736 if !(pData == uintptr(0) && *(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 30737 goto __177 30738 } 30739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+592, ts+2069, uintptr(0))) 30740 rc = TCL_ERROR 30741 goto __178 30742 __177: 30743 if !(*(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 30744 goto __179 30745 } 30746 libc.Xmemcpy(tls, pData, pBA, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 30747 __179: 30748 ; 30749 if !(*(*int32)(unsafe.Pointer(bp + 1160)) != 0) { 30750 goto __180 30751 } 30752 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY 30753 goto __181 30754 __180: 30755 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE 30756 __181: 30757 ; 30758 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)) 30759 if !(xrc != 0) { 30760 goto __182 30761 } 30762 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+608, ts+12461, uintptr(0))) 30763 rc = TCL_ERROR 30764 __182: 30765 ; 30766 if !(*(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) > int64(0)) { 30767 goto __183 30768 } 30769 sqlite3.Xsqlite3_file_control(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, SQLITE_FCNTL_SIZE_LIMIT, bp+1168) 30770 __183: 30771 ; 30772 __178: 30773 ; 30774 deserialize_error: 30775 goto __3 30776 30777 __18: 30778 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+624, ts+12489, 30779 uintptr(0))) 30780 return TCL_ERROR 30781 30782 __19: 30783 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 30784 goto __3 30785 30786 __20: 30787 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_error_offset(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 30788 goto __3 30789 30790 __21: 30791 __22: 30792 pResult4 = uintptr(0) 30793 if !(objc != 3) { 30794 goto __184 30795 } 30796 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 30797 return TCL_ERROR 30798 __184: 30799 ; 30800 dbEvalInit(tls, bp+1176, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 30801 rc = dbEvalStep(tls, bp+1176) 30802 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 24) { 30803 goto __185 30804 } 30805 if !(rc == TCL_OK) { 30806 goto __187 30807 } 30808 pResult4 = dbEvalColumnValue(tls, bp+1176, 0) 30809 goto __188 30810 __187: 30811 if !(rc == TCL_BREAK) { 30812 goto __189 30813 } 30814 tcl.XTcl_ResetResult(tls, interp) 30815 __189: 30816 ; 30817 __188: 30818 ; 30819 goto __186 30820 __185: 30821 if !(rc == TCL_BREAK || rc == TCL_OK) { 30822 goto __190 30823 } 30824 pResult4 = tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(rc == TCL_OK) != 0)) 30825 __190: 30826 ; 30827 __186: 30828 ; 30829 dbEvalFinalize(tls, bp+1176) 30830 if !(pResult4 != 0) { 30831 goto __191 30832 } 30833 tcl.XTcl_SetObjResult(tls, interp, pResult4) 30834 __191: 30835 ; 30836 if !(rc == TCL_BREAK) { 30837 goto __192 30838 } 30839 rc = TCL_OK 30840 __192: 30841 ; 30842 goto __3 30843 30844 __23: 30845 evalFlags = 0 30846 __193: 30847 if !(objc > 3 && libc.AssignUintptr(&zOpt1, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) != uintptr(0) && int32(*(*uint8)(unsafe.Pointer(zOpt1))) == '-') { 30848 goto __194 30849 } 30850 if !(libc.Xstrcmp(tls, zOpt1, ts+12537) == 0) { 30851 goto __195 30852 } 30853 evalFlags = evalFlags | SQLITE_EVAL_WITHOUTNULLS 30854 goto __196 30855 __195: 30856 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+640, ts+12551, zOpt1, ts+11945, uintptr(0))) 30857 return TCL_ERROR 30858 __196: 30859 ; 30860 objc-- 30861 objv += 8 30862 goto __193 30863 __194: 30864 ; 30865 if !(objc < 3 || objc > 5) { 30866 goto __197 30867 } 30868 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 30869 ts+12569) 30870 return TCL_ERROR 30871 __197: 30872 ; 30873 if !(objc == 3) { 30874 goto __198 30875 } 30876 pRet = tcl.XTcl_NewObj(tls) 30877 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 30878 dbEvalInit(tls, bp+1232, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 30879 __200: 30880 if !(TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, bp+1232))) { 30881 goto __201 30882 } 30883 dbEvalRowInfo(tls, bp+1232, bp+1288, uintptr(0)) 30884 i2 = 0 30885 __202: 30886 if !(i2 < *(*int32)(unsafe.Pointer(bp + 1288))) { 30887 goto __204 30888 } 30889 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, dbEvalColumnValue(tls, bp+1232, i2)) 30890 goto __203 30891 __203: 30892 i2++ 30893 goto __202 30894 goto __204 30895 __204: 30896 ; 30897 goto __200 30898 __201: 30899 ; 30900 dbEvalFinalize(tls, bp+1232) 30901 if !(rc == TCL_BREAK) { 30902 goto __205 30903 } 30904 tcl.XTcl_SetObjResult(tls, interp, pRet) 30905 rc = TCL_OK 30906 __205: 30907 ; 30908 __206: 30909 _objPtr1 = pRet 30910 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr1)).FrefCount, 1) <= 1) { 30911 goto __209 30912 } 30913 tcl.XTclFreeObj(tls, _objPtr1) 30914 __209: 30915 ; 30916 goto __207 30917 __207: 30918 if 0 != 0 { 30919 goto __206 30920 } 30921 goto __208 30922 __208: 30923 ; 30924 goto __199 30925 __198: 30926 pArray = uintptr(0) 30927 30928 if !(objc >= 5 && *(*uint8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))))) != 0) { 30929 goto __210 30930 } 30931 pArray = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 30932 __210: 30933 ; 30934 pScript = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 30935 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 30936 30937 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(DbEvalContext{}))) 30938 dbEvalInit(tls, p, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), pArray, evalFlags) 30939 30940 *(*ClientData)(unsafe.Pointer(bp + 1296)) = p 30941 *(*ClientData)(unsafe.Pointer(bp + 1296 + 1*8)) = pScript 30942 rc = DbEvalNextCmd(tls, bp+1296, interp, TCL_OK) 30943 __199: 30944 ; 30945 goto __3 30946 30947 __24: 30948 flags1 = SQLITE_UTF8 30949 *(*int32)(unsafe.Pointer(bp + 1312)) = -1 30950 *(*int32)(unsafe.Pointer(bp + 1368)) = SQLITE_NULL 30951 if !(objc < 4) { 30952 goto __211 30953 } 30954 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12605) 30955 return TCL_ERROR 30956 __211: 30957 ; 30958 i3 = 3 30959 __212: 30960 if !(i3 < objc-1) { 30961 goto __214 30962 } 30963 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8))) 30964 n1 = strlen30(tls, z2) 30965 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12628, uint64(n1)) == 0) { 30966 goto __215 30967 } 30968 if !(i3 == objc-2) { 30969 goto __217 30970 } 30971 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+672, ts+12638, z2, uintptr(0))) 30972 return TCL_ERROR 30973 __217: 30974 ; 30975 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3+1)*8)), bp+1312) != 0) { 30976 goto __218 30977 } 30978 return TCL_ERROR 30979 __218: 30980 ; 30981 if !(*(*int32)(unsafe.Pointer(bp + 1312)) < 0) { 30982 goto __219 30983 } 30984 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+696, ts+12668, 30985 uintptr(0))) 30986 return TCL_ERROR 30987 __219: 30988 ; 30989 i3++ 30990 goto __216 30991 __215: 30992 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12709, uint64(n1)) == 0) { 30993 goto __220 30994 } 30995 flags1 = flags1 | SQLITE_DETERMINISTIC 30996 goto __221 30997 __220: 30998 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12724, uint64(n1)) == 0) { 30999 goto __222 31000 } 31001 flags1 = flags1 | SQLITE_DIRECTONLY 31002 goto __223 31003 __222: 31004 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12736, uint64(n1)) == 0) { 31005 goto __224 31006 } 31007 flags1 = flags1 | SQLITE_INNOCUOUS 31008 goto __225 31009 __224: 31010 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12747, uint64(n1)) == 0) { 31011 goto __226 31012 } 31013 *(*[6]uintptr)(unsafe.Pointer(bp + 1320)) = [6]uintptr{ts + 8470, ts + 12759, ts + 12764, ts + 12769, ts + 12774, uintptr(0)} 31014 31015 if !(i3 == objc-2) { 31016 goto __228 31017 } 31018 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+712, ts+12638, z2, uintptr(0))) 31019 return TCL_ERROR 31020 __228: 31021 ; 31022 i3++ 31023 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) { 31024 goto __229 31025 } 31026 return TCL_ERROR 31027 __229: 31028 ; 31029 *(*int32)(unsafe.Pointer(bp + 1368))++ 31030 goto __227 31031 __226: 31032 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+736, ts+11851, z2, 31033 ts+12783, uintptr(0))) 31034 return TCL_ERROR 31035 __227: 31036 ; 31037 __225: 31038 ; 31039 __223: 31040 ; 31041 __221: 31042 ; 31043 __216: 31044 ; 31045 goto __213 31046 __213: 31047 i3++ 31048 goto __212 31049 goto __214 31050 __214: 31051 ; 31052 pScript1 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 31053 zName1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 31054 pFunc = findSqlFunc(tls, pDb, zName1) 31055 if !(pFunc == uintptr(0)) { 31056 goto __230 31057 } 31058 return TCL_ERROR 31059 __230: 31060 ; 31061 if !((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript != 0) { 31062 goto __231 31063 } 31064 __232: 31065 _objPtr2 = (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript 31066 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr2)).FrefCount, 1) <= 1) { 31067 goto __235 31068 } 31069 tcl.XTclFreeObj(tls, _objPtr2) 31070 __235: 31071 ; 31072 goto __233 31073 __233: 31074 if 0 != 0 { 31075 goto __232 31076 } 31077 goto __234 31078 __234: 31079 ; 31080 __231: 31081 ; 31082 (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript = pScript1 31083 (*Tcl_Obj)(unsafe.Pointer(pScript1)).FrefCount++ 31084 (*SqlFunc)(unsafe.Pointer(pFunc)).FuseEvalObjv = safeToUseEvalObjv(tls, interp, pScript1) 31085 (*SqlFunc)(unsafe.Pointer(pFunc)).FeType = *(*int32)(unsafe.Pointer(bp + 1368)) 31086 rc = sqlite3.Xsqlite3_create_function(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName1, *(*int32)(unsafe.Pointer(bp + 1312)), flags1, 31087 pFunc, *(*uintptr)(unsafe.Pointer(&struct { 31088 f func(*libc.TLS, uintptr, int32, uintptr) 31089 }{tclSqlFunc})), uintptr(0), uintptr(0)) 31090 if !(rc != SQLITE_OK) { 31091 goto __236 31092 } 31093 rc = TCL_ERROR 31094 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 31095 __236: 31096 ; 31097 goto __3 31098 31099 __25: 31100 isReadonly1 = 0 31101 zDb = ts + 85 31102 31103 if !(objc > 3 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), ts+12434) == 0) { 31104 goto __237 31105 } 31106 isReadonly1 = 1 31107 __237: 31108 ; 31109 if !(objc != 5+isReadonly1 && objc != 6+isReadonly1) { 31110 goto __238 31111 } 31112 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12861) 31113 return TCL_ERROR 31114 __238: 31115 ; 31116 if !(objc == 6+isReadonly1) { 31117 goto __239 31118 } 31119 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(2+isReadonly1)*8))) 31120 __239: 31121 ; 31122 zTable1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8))) 31123 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 31124 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+1376) 31125 31126 if !(rc == TCL_OK) { 31127 goto __240 31128 } 31129 rc = createIncrblobChannel(tls, 31130 interp, pDb, zDb, zTable1, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 1376)), isReadonly1) 31131 __240: 31132 ; 31133 goto __3 31134 31135 __26: 31136 sqlite3.Xsqlite3_interrupt(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 31137 goto __3 31138 31139 __27: 31140 if !(objc != 2 && objc != 3) { 31141 goto __241 31142 } 31143 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12897) 31144 return TCL_ERROR 31145 __241: 31146 ; 31147 if !(objc == 3) { 31148 goto __242 31149 } 31150 zNull1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1384) 31151 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0) { 31152 goto __243 31153 } 31154 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 31155 __243: 31156 ; 31157 if !(zNull1 != 0 && *(*int32)(unsafe.Pointer(bp + 1384)) > 0) { 31158 goto __244 31159 } 31160 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1384))+1)) 31161 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, zNull1, uint64(*(*int32)(unsafe.Pointer(bp + 1384)))) 31162 *(*uint8)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FzNull + uintptr(*(*int32)(unsafe.Pointer(bp + 1384))))) = uint8(0) 31163 goto __245 31164 __244: 31165 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = uintptr(0) 31166 __245: 31167 ; 31168 __242: 31169 ; 31170 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, -1)) 31171 goto __3 31172 31173 __28: 31174 if !(objc != 2) { 31175 goto __246 31176 } 31177 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 31178 return TCL_ERROR 31179 __246: 31180 ; 31181 rowid = sqlite3.Xsqlite3_last_insert_rowid(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 31182 pResult5 = tcl.XTcl_GetObjResult(tls, interp) 31183 tcl.XTcl_SetWideIntObj(tls, pResult5, rowid) 31184 goto __3 31185 31186 __29: 31187 if !(objc == 2) { 31188 goto __247 31189 } 31190 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 31191 goto __249 31192 } 31193 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+768, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, uintptr(0))) 31194 __249: 31195 ; 31196 goto __248 31197 __247: 31198 if !(objc == 4) { 31199 goto __250 31200 } 31201 if !(TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1388)) { 31202 goto __252 31203 } 31204 return TCL_ERROR 31205 __252: 31206 ; 31207 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 31208 goto __253 31209 } 31210 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 31211 __253: 31212 ; 31213 zProgress = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1392) 31214 if !(zProgress != 0 && *(*int32)(unsafe.Pointer(bp + 1392)) > 0) { 31215 goto __254 31216 } 31217 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 31218 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, zProgress, uint64(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 31219 goto __255 31220 __254: 31221 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = uintptr(0) 31222 __255: 31223 ; 31224 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 31225 goto __256 31226 } 31227 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31228 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1388)), *(*uintptr)(unsafe.Pointer(&struct { 31229 f func(*libc.TLS, uintptr) int32 31230 }{DbProgressHandler})), pDb) 31231 goto __257 31232 __256: 31233 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, 0, uintptr(0), uintptr(0)) 31234 __257: 31235 ; 31236 goto __251 31237 __250: 31238 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12907) 31239 return TCL_ERROR 31240 __251: 31241 ; 31242 __248: 31243 ; 31244 goto __3 31245 31246 __30: 31247 if !(objc > 3) { 31248 goto __258 31249 } 31250 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 31251 return TCL_ERROR 31252 goto __259 31253 __258: 31254 if !(objc == 2) { 31255 goto __260 31256 } 31257 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 31258 goto __262 31259 } 31260 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+784, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, uintptr(0))) 31261 __262: 31262 ; 31263 goto __261 31264 __260: 31265 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 31266 goto __263 31267 } 31268 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 31269 __263: 31270 ; 31271 zProfile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1396) 31272 if !(zProfile != 0 && *(*int32)(unsafe.Pointer(bp + 1396)) > 0) { 31273 goto __264 31274 } 31275 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 31276 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, zProfile, uint64(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 31277 goto __265 31278 __264: 31279 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = uintptr(0) 31280 __265: 31281 ; 31282 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 31283 goto __266 31284 } 31285 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31286 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 31287 f func(*libc.TLS, uintptr, uintptr, sqlite_uint64) 31288 }{DbProfileHandler})), pDb) 31289 goto __267 31290 __266: 31291 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 31292 __267: 31293 ; 31294 __261: 31295 ; 31296 __259: 31297 ; 31298 goto __3 31299 31300 __31: 31301 if !(objc != 3) { 31302 goto __268 31303 } 31304 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12918) 31305 return TCL_ERROR 31306 __268: 31307 ; 31308 goto __3 31309 31310 __32: 31311 nTimeout = 0 31312 31313 if !(objc == 3) { 31314 goto __269 31315 } 31316 zDestDb = ts + 85 31317 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31318 goto __270 31319 __269: 31320 if !(objc == 4) { 31321 goto __271 31322 } 31323 zDestDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31324 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 31325 goto __272 31326 __271: 31327 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 31328 return TCL_ERROR 31329 __272: 31330 ; 31331 __270: 31332 ; 31333 rc = sqlite3.Xsqlite3_open_v2(tls, zSrcFile, bp+1400, 31334 SQLITE_OPEN_READONLY|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 31335 if !(rc != SQLITE_OK) { 31336 goto __273 31337 } 31338 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+800, ts+12922, 31339 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))), uintptr(0))) 31340 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 31341 return TCL_ERROR 31342 __273: 31343 ; 31344 pBackup1 = sqlite3.Xsqlite3_backup_init(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zDestDb, *(*uintptr)(unsafe.Pointer(bp + 1400)), ts+85) 31345 if !(pBackup1 == uintptr(0)) { 31346 goto __274 31347 } 31348 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+824, ts+12952, 31349 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31350 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 31351 return TCL_ERROR 31352 __274: 31353 ; 31354 __275: 31355 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup1, 100)) == SQLITE_OK || 31356 rc == SQLITE_BUSY) { 31357 goto __276 31358 } 31359 if !(rc == SQLITE_BUSY) { 31360 goto __277 31361 } 31362 if !(libc.PostIncInt32(&nTimeout, 1) >= 3) { 31363 goto __278 31364 } 31365 goto __276 31366 __278: 31367 ; 31368 sqlite3.Xsqlite3_sleep(tls, 100) 31369 __277: 31370 ; 31371 goto __275 31372 __276: 31373 ; 31374 sqlite3.Xsqlite3_backup_finish(tls, pBackup1) 31375 if !(rc == SQLITE_DONE) { 31376 goto __279 31377 } 31378 rc = TCL_OK 31379 goto __280 31380 __279: 31381 if !(rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { 31382 goto __281 31383 } 31384 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+848, ts+12969, 31385 uintptr(0))) 31386 rc = TCL_ERROR 31387 goto __282 31388 __281: 31389 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+864, ts+12952, 31390 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31391 rc = TCL_ERROR 31392 __282: 31393 ; 31394 __280: 31395 ; 31396 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 31397 goto __3 31398 31399 __33: 31400 if objc >= 3 { 31401 zSchema1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31402 } else { 31403 zSchema1 = ts + 85 31404 } 31405 *(*sqlite3_int64)(unsafe.Pointer(bp + 1408)) = int64(0) 31406 if !(objc != 2 && objc != 3) { 31407 goto __283 31408 } 31409 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13006) 31410 rc = TCL_ERROR 31411 goto __284 31412 __283: 31413 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(SQLITE_SERIALIZE_NOCOPY)) 31414 if !(pData1 != 0) { 31415 goto __285 31416 } 31417 needFree = 0 31418 goto __286 31419 __285: 31420 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(0)) 31421 needFree = 1 31422 __286: 31423 ; 31424 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pData1, int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 1408))))) 31425 if !(needFree != 0) { 31426 goto __287 31427 } 31428 sqlite3.Xsqlite3_free(tls, pData1) 31429 __287: 31430 ; 31431 __284: 31432 ; 31433 goto __3 31434 31435 __34: 31436 if !(objc != 3) { 31437 goto __288 31438 } 31439 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13017) 31440 return TCL_ERROR 31441 __288: 31442 ; 31443 zOp = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31444 if !(libc.Xstrcmp(tls, zOp, ts+9485) == 0) { 31445 goto __289 31446 } 31447 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnStep 31448 goto __290 31449 __289: 31450 if !(libc.Xstrcmp(tls, zOp, ts+13039) == 0) { 31451 goto __291 31452 } 31453 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnSort 31454 goto __292 31455 __291: 31456 if !(libc.Xstrcmp(tls, zOp, ts+13044) == 0) { 31457 goto __293 31458 } 31459 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex 31460 goto __294 31461 __293: 31462 if !(libc.Xstrcmp(tls, zOp, ts+13054) == 0) { 31463 goto __295 31464 } 31465 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep 31466 goto __296 31467 __295: 31468 tcl.XTcl_AppendResult(tls, interp, 31469 libc.VaList(bp+888, ts+13061, 31470 uintptr(0))) 31471 return TCL_ERROR 31472 __296: 31473 ; 31474 __294: 31475 ; 31476 __292: 31477 ; 31478 __290: 31479 ; 31480 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, v2)) 31481 goto __3 31482 31483 __35: 31484 if !(objc != 3) { 31485 goto __297 31486 } 31487 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13117) 31488 return TCL_ERROR 31489 __297: 31490 ; 31491 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1416) != 0) { 31492 goto __298 31493 } 31494 return TCL_ERROR 31495 __298: 31496 ; 31497 sqlite3.Xsqlite3_busy_timeout(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1416))) 31498 goto __3 31499 31500 __36: 31501 if !(objc != 2) { 31502 goto __299 31503 } 31504 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 31505 return TCL_ERROR 31506 __299: 31507 ; 31508 pResult6 = tcl.XTcl_GetObjResult(tls, interp) 31509 tcl.XTcl_SetWideIntObj(tls, pResult6, sqlite3.Xsqlite3_total_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 31510 goto __3 31511 31512 __37: 31513 if !(objc > 3) { 31514 goto __300 31515 } 31516 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 31517 return TCL_ERROR 31518 goto __301 31519 __300: 31520 if !(objc == 2) { 31521 goto __302 31522 } 31523 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31524 goto __304 31525 } 31526 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+904, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, uintptr(0))) 31527 __304: 31528 ; 31529 goto __303 31530 __302: 31531 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31532 goto __305 31533 } 31534 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 31535 __305: 31536 ; 31537 zTrace = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1420) 31538 if !(zTrace != 0 && *(*int32)(unsafe.Pointer(bp + 1420)) > 0) { 31539 goto __306 31540 } 31541 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 31542 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, zTrace, uint64(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 31543 goto __307 31544 __306: 31545 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = uintptr(0) 31546 __307: 31547 ; 31548 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 31549 goto __308 31550 } 31551 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31552 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 31553 f func(*libc.TLS, uintptr, uintptr) 31554 }{DbTraceHandler})), pDb) 31555 goto __309 31556 __308: 31557 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 31558 __309: 31559 ; 31560 __303: 31561 ; 31562 __301: 31563 ; 31564 goto __3 31565 31566 __38: 31567 if !(objc > 4) { 31568 goto __310 31569 } 31570 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13130) 31571 return TCL_ERROR 31572 goto __311 31573 __310: 31574 if !(objc == 2) { 31575 goto __312 31576 } 31577 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31578 goto __314 31579 } 31580 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+920, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, uintptr(0))) 31581 __314: 31582 ; 31583 goto __313 31584 __312: 31585 wMask = int64(0) 31586 if !(objc == 4) { 31587 goto __315 31588 } 31589 if !(TCL_OK != tcl.XTcl_ListObjLength(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1424)) { 31590 goto __317 31591 } 31592 return TCL_ERROR 31593 __317: 31594 ; 31595 i4 = 0 31596 __318: 31597 if !(i4 < *(*int32)(unsafe.Pointer(bp + 1424))) { 31598 goto __320 31599 } 31600 if !(TCL_OK != tcl.XTcl_ListObjIndex(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), i4, bp+1432)) { 31601 goto __321 31602 } 31603 return TCL_ERROR 31604 __321: 31605 ; 31606 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) { 31607 goto __322 31608 } 31609 pError = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, interp)) 31610 (*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount++ 31611 if !(TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), bp+1448)) { 31612 goto __324 31613 } 31614 __326: 31615 _objPtr3 = pError 31616 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr3)).FrefCount, 1) <= 1) { 31617 goto __329 31618 } 31619 tcl.XTclFreeObj(tls, _objPtr3) 31620 __329: 31621 ; 31622 goto __327 31623 __327: 31624 if 0 != 0 { 31625 goto __326 31626 } 31627 goto __328 31628 __328: 31629 ; 31630 wMask = wMask | *(*Tcl_WideInt)(unsafe.Pointer(bp + 1448)) 31631 goto __325 31632 __324: 31633 tcl.XTcl_SetObjResult(tls, interp, pError) 31634 __330: 31635 _objPtr4 = pError 31636 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr4)).FrefCount, 1) <= 1) { 31637 goto __333 31638 } 31639 tcl.XTclFreeObj(tls, _objPtr4) 31640 __333: 31641 ; 31642 goto __331 31643 __331: 31644 if 0 != 0 { 31645 goto __330 31646 } 31647 goto __332 31648 __332: 31649 ; 31650 return TCL_ERROR 31651 __325: 31652 ; 31653 goto __323 31654 __322: 31655 switch uint32(*(*int32)(unsafe.Pointer(bp + 1440))) { 31656 case uint32(0): 31657 goto __335 31658 case uint32(1): 31659 goto __336 31660 case uint32(2): 31661 goto __337 31662 case uint32(3): 31663 goto __338 31664 } 31665 goto __334 31666 __335: 31667 wMask = wMask | int64(SQLITE_TRACE_STMT) 31668 goto __334 31669 __336: 31670 wMask = wMask | int64(SQLITE_TRACE_PROFILE) 31671 goto __334 31672 __337: 31673 wMask = wMask | int64(SQLITE_TRACE_ROW) 31674 goto __334 31675 __338: 31676 wMask = wMask | int64(SQLITE_TRACE_CLOSE) 31677 goto __334 31678 __334: 31679 ; 31680 __323: 31681 ; 31682 goto __319 31683 __319: 31684 i4++ 31685 goto __318 31686 goto __320 31687 __320: 31688 ; 31689 goto __316 31690 __315: 31691 wMask = int64(SQLITE_TRACE_STMT) 31692 __316: 31693 ; 31694 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31695 goto __339 31696 } 31697 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 31698 __339: 31699 ; 31700 zTraceV2 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1424) 31701 if !(zTraceV2 != 0 && *(*int32)(unsafe.Pointer(bp + 1424)) > 0) { 31702 goto __340 31703 } 31704 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 31705 libc.Xmemcpy(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, zTraceV2, uint64(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 31706 goto __341 31707 __340: 31708 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = uintptr(0) 31709 __341: 31710 ; 31711 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 31712 goto __342 31713 } 31714 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31715 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(wMask), *(*uintptr)(unsafe.Pointer(&struct { 31716 f func(*libc.TLS, uint32, uintptr, uintptr, uintptr) int32 31717 }{DbTraceV2Handler})), pDb) 31718 goto __343 31719 __342: 31720 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(0), uintptr(0), uintptr(0)) 31721 __343: 31722 ; 31723 __313: 31724 ; 31725 __311: 31726 ; 31727 goto __3 31728 31729 __39: 31730 zBegin = ts + 13159 31731 if !(objc != 3 && objc != 4) { 31732 goto __344 31733 } 31734 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13186) 31735 return TCL_ERROR 31736 __344: 31737 ; 31738 if !((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0 && objc == 4) { 31739 goto __345 31740 } 31741 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) { 31742 goto __346 31743 } 31744 return TCL_ERROR 31745 __346: 31746 ; 31747 switch uint32(*(*int32)(unsafe.Pointer(bp + 1456))) { 31748 case uint32(0): 31749 goto __348 31750 case uint32(1): 31751 goto __349 31752 case uint32(2): 31753 goto __350 31754 } 31755 goto __347 31756 __348: 31757 ; 31758 goto __347 31759 __349: 31760 zBegin = ts + 13217 31761 goto __347 31762 __350: 31763 zBegin = ts + 13233 31764 goto __347 31765 __347: 31766 ; 31767 __345: 31768 ; 31769 pScript2 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 31770 31771 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 31772 rc = sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zBegin, uintptr(0), uintptr(0), uintptr(0)) 31773 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 31774 if !(rc != SQLITE_OK) { 31775 goto __351 31776 } 31777 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+936, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31778 return TCL_ERROR 31779 __351: 31780 ; 31781 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction++ 31782 31783 addDatabaseRef(tls, pDb) 31784 if !(DbUseNre(tls) != 0) { 31785 goto __352 31786 } 31787 tcl.XTcl_NRAddCallback(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 31788 f func(*libc.TLS, uintptr, uintptr, int32) int32 31789 }{DbTransPostCmd})), *(*uintptr)(unsafe.Pointer(bp + 1464)), uintptr(0), uintptr(0), uintptr(0)) 31790 tcl.XTcl_NREvalObj(tls, interp, pScript2, 0) 31791 goto __353 31792 __352: 31793 rc = DbTransPostCmd(tls, bp+1464, interp, tcl.XTcl_EvalObjEx(tls, interp, pScript2, 0)) 31794 __353: 31795 ; 31796 goto __3 31797 31798 __40: 31799 if !(objc != 2 && objc != 3) { 31800 goto __354 31801 } 31802 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 31803 rc = TCL_ERROR 31804 goto __355 31805 __354: 31806 xNotify = uintptr(0) 31807 pNotifyArg = uintptr(0) 31808 31809 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify != 0) { 31810 goto __356 31811 } 31812 __357: 31813 _objPtr5 = (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify 31814 if !(libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr5)).FrefCount, 1) <= 1) { 31815 goto __360 31816 } 31817 tcl.XTclFreeObj(tls, _objPtr5) 31818 __360: 31819 ; 31820 goto __358 31821 __358: 31822 if 0 != 0 { 31823 goto __357 31824 } 31825 goto __359 31826 __359: 31827 ; 31828 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 31829 __356: 31830 ; 31831 if !(objc == 3) { 31832 goto __361 31833 } 31834 xNotify = *(*uintptr)(unsafe.Pointer(&struct { 31835 f func(*libc.TLS, uintptr, int32) 31836 }{DbUnlockNotify})) 31837 pNotifyArg = pDb 31838 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 31839 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount++ 31840 __361: 31841 ; 31842 if !(sqlite3.Xsqlite3_unlock_notify(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, xNotify, pNotifyArg) != 0) { 31843 goto __362 31844 } 31845 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+952, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31846 rc = TCL_ERROR 31847 __362: 31848 ; 31849 __355: 31850 ; 31851 goto __3 31852 31853 __41: 31854 if !(objc < 3) { 31855 goto __363 31856 } 31857 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13258) 31858 __363: 31859 ; 31860 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) { 31861 goto __364 31862 } 31863 return TCL_ERROR 31864 __364: 31865 ; 31866 switch uint32(*(*int32)(unsafe.Pointer(bp + 1472))) { 31867 case uint32(0): 31868 goto __366 31869 31870 case uint32(2): 31871 goto __367 31872 31873 case uint32(1): 31874 goto __368 31875 31876 case uint32(3): 31877 goto __369 31878 case uint32(4): 31879 goto __370 31880 } 31881 goto __365 31882 __366: 31883 nCol2 = sqlite3.Xsqlite3_preupdate_count(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 31884 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol2)) 31885 goto __365 31886 31887 __367: 31888 if !(objc > 4) { 31889 goto __371 31890 } 31891 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13277) 31892 return TCL_ERROR 31893 __371: 31894 ; 31895 DbHookCmd(tls, interp, pDb, func() uintptr { 31896 if objc == 4 { 31897 return *(*uintptr)(unsafe.Pointer(objv + 3*8)) 31898 } 31899 return uintptr(0) 31900 }(), pDb+112) 31901 goto __365 31902 31903 __368: 31904 if !(objc != 3) { 31905 goto __372 31906 } 31907 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+584) 31908 return TCL_ERROR 31909 __372: 31910 ; 31911 pRet1 = tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_preupdate_depth(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 31912 tcl.XTcl_SetObjResult(tls, interp, pRet1) 31913 goto __365 31914 31915 __369: 31916 __370: 31917 if !(objc != 4) { 31918 goto __373 31919 } 31920 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+13291) 31921 return TCL_ERROR 31922 __373: 31923 ; 31924 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1476) != 0) { 31925 goto __374 31926 } 31927 return TCL_ERROR 31928 __374: 31929 ; 31930 if !(*(*int32)(unsafe.Pointer(bp + 1472)) == 4) { 31931 goto __375 31932 } 31933 rc = sqlite3.Xsqlite3_preupdate_old(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 31934 goto __376 31935 __375: 31936 ; 31937 rc = sqlite3.Xsqlite3_preupdate_new(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 31938 __376: 31939 ; 31940 if !(rc == SQLITE_OK) { 31941 goto __377 31942 } 31943 pObj1 = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1480))), -1) 31944 tcl.XTcl_SetObjResult(tls, interp, pObj1) 31945 goto __378 31946 __377: 31947 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+968, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31948 return TCL_ERROR 31949 __378: 31950 ; 31951 __365: 31952 ; 31953 goto __3 31954 31955 __42: 31956 __43: 31957 __44: 31958 ppHook = uintptr(0) 31959 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 41) { 31960 goto __379 31961 } 31962 ppHook = pDb + 128 31963 __379: 31964 ; 31965 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 39) { 31966 goto __380 31967 } 31968 ppHook = pDb + 104 31969 __380: 31970 ; 31971 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 30) { 31972 goto __381 31973 } 31974 ppHook = pDb + 120 31975 __381: 31976 ; 31977 if !(objc > 3) { 31978 goto __382 31979 } 31980 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 31981 return TCL_ERROR 31982 __382: 31983 ; 31984 DbHookCmd(tls, interp, pDb, func() uintptr { 31985 if objc == 3 { 31986 return *(*uintptr)(unsafe.Pointer(objv + 2*8)) 31987 } 31988 return uintptr(0) 31989 }(), ppHook) 31990 goto __3 31991 31992 __45: 31993 i5 = 2 31994 __383: 31995 if !(i5 < objc) { 31996 goto __385 31997 } 31998 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8))) 31999 32000 if !(libc.Xstrcmp(tls, zArg, ts+13297) == 0 && i5+1 < objc) { 32001 goto __386 32002 } 32003 i5++ 32004 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8)), pDb+228) != 0) { 32005 goto __388 32006 } 32007 return TCL_ERROR 32008 __388: 32009 ; 32010 goto __387 32011 __386: 32012 if !(libc.Xstrcmp(tls, zArg, ts+13317) == 0) { 32013 goto __389 32014 } 32015 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+1488, ts+9889, 32016 libc.VaList(bp+984, func() uintptr { 32017 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 32018 return (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpStmt 32019 } 32020 return uintptr(0) 32021 }())) 32022 tcl.XTcl_SetResult(tls, interp, bp+1488, uintptr(1)) 32023 goto __390 32024 __389: 32025 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+992, ts+13332, zArg, uintptr(0))) 32026 return TCL_ERROR 32027 __390: 32028 ; 32029 __387: 32030 ; 32031 goto __384 32032 __384: 32033 i5++ 32034 goto __383 32035 goto __385 32036 __385: 32037 ; 32038 if !(i5 == 2) { 32039 goto __391 32040 } 32041 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_libversion(tls), uintptr(0)) 32042 __391: 32043 ; 32044 goto __3 32045 32046 __3: 32047 ; 32048 return rc 32049 } 32050 32051 type DbConfigChoices = struct { 32052 FzName uintptr 32053 Fop int32 32054 F__ccgo_pad1 [4]byte 32055 } 32056 32057 var DB_strs = [43]uintptr{ 32058 ts + 13351, ts + 13362, ts + 13369, 32059 ts + 13383, ts + 13388, ts + 13394, 32060 ts + 9490, ts + 13402, ts + 13410, 32061 ts + 13427, ts + 13439, ts + 13448, 32062 ts + 13455, ts + 13460, ts + 13472, 32063 ts + 13494, ts + 13504, ts + 4896, 32064 ts + 13516, ts + 13523, ts + 10868, 32065 ts + 13532, ts + 13542, ts + 13560, 32066 ts + 13570, ts + 13580, ts + 13590, 32067 ts + 9564, ts + 13598, ts + 13604, 32068 ts + 13612, ts + 13626, ts + 13636, 32069 ts + 13643, ts + 13651, ts + 13665, 32070 ts + 13671, ts + 13680, ts + 13692, 32071 ts + 13706, ts + 13718, ts + 13726, 32072 uintptr(0), 32073 } 32074 var aDbConfig = [16]DbConfigChoices{ 32075 {FzName: ts + 13735, Fop: SQLITE_DBCONFIG_DEFENSIVE}, 32076 {FzName: ts + 13745, Fop: SQLITE_DBCONFIG_DQS_DDL}, 32077 {FzName: ts + 13753, Fop: SQLITE_DBCONFIG_DQS_DML}, 32078 {FzName: ts + 13761, Fop: SQLITE_DBCONFIG_ENABLE_FKEY}, 32079 {FzName: ts + 13773, Fop: SQLITE_DBCONFIG_ENABLE_QPSG}, 32080 {FzName: ts + 13785, Fop: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 32081 {FzName: ts + 13800, Fop: SQLITE_DBCONFIG_ENABLE_VIEW}, 32082 {FzName: ts + 13812, Fop: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 32083 {FzName: ts + 13827, Fop: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 32084 {FzName: ts + 13846, Fop: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 32085 {FzName: ts + 13865, Fop: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 32086 {FzName: ts + 13880, Fop: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 32087 {FzName: ts + 13897, Fop: SQLITE_DBCONFIG_RESET_DATABASE}, 32088 {FzName: ts + 13912, Fop: SQLITE_DBCONFIG_TRIGGER_EQP}, 32089 {FzName: ts + 13924, Fop: SQLITE_DBCONFIG_TRUSTED_SCHEMA}, 32090 {FzName: ts + 13939, Fop: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 32091 } 32092 var TTYPE_strs = [5]uintptr{ 32093 ts + 13955, ts + 13590, ts + 13965, ts + 9490, uintptr(0), 32094 } 32095 var TTYPE_strs1 = [4]uintptr{ 32096 ts + 13969, ts + 13978, ts + 13988, uintptr(0), 32097 } 32098 var azSub = [6]uintptr{ts + 1965, ts + 13998, ts + 14004, ts + 14009, ts + 14013, uintptr(0)} 32099 32100 func DbObjCmdAdaptor(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 32101 return tcl.XTcl_NRCallObjProc(tls, interp, *(*uintptr)(unsafe.Pointer(&struct { 32102 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 32103 }{DbObjCmd})), cd, objc, objv) 32104 } 32105 32106 func sqliteCmdUsage(tls *libc.TLS, interp uintptr, objv uintptr) int32 { 32107 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 32108 ts+14017) 32109 return TCL_ERROR 32110 } 32111 32112 func DbMain(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 32113 bp := tls.Alloc(336) 32114 defer tls.Free(336) 32115 32116 var p uintptr 32117 var zArg uintptr 32118 var zErrMsg uintptr 32119 var i int32 32120 var zFile uintptr = uintptr(0) 32121 var zVfs uintptr = uintptr(0) 32122 var flags int32 32123 *(*int32)(unsafe.Pointer(bp + 112)) = 1 32124 32125 var rc int32 32126 32127 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX 32128 32129 if objc == 1 { 32130 return sqliteCmdUsage(tls, interp, objv) 32131 } 32132 if objc == 2 { 32133 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 32134 if libc.Xstrcmp(tls, zArg, ts+14163) == 0 { 32135 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_libversion(tls), uintptr(0))) 32136 return TCL_OK 32137 } 32138 if libc.Xstrcmp(tls, zArg, ts+14172) == 0 { 32139 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3_sourceid(tls), uintptr(0))) 32140 return TCL_OK 32141 } 32142 if libc.Xstrcmp(tls, zArg, ts+14182) == 0 { 32143 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+14193, uintptr(0))) 32144 return TCL_OK 32145 } 32146 if int32(*(*uint8)(unsafe.Pointer(zArg))) == '-' { 32147 return sqliteCmdUsage(tls, interp, objv) 32148 } 32149 } 32150 for i = 2; i < objc; i++ { 32151 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 32152 if int32(*(*uint8)(unsafe.Pointer(zArg))) != '-' { 32153 if zFile != uintptr(0) { 32154 return sqliteCmdUsage(tls, interp, objv) 32155 } 32156 zFile = zArg 32157 continue 32158 } 32159 if i == objc-1 { 32160 return sqliteCmdUsage(tls, interp, objv) 32161 } 32162 i++ 32163 if libc.Xstrcmp(tls, zArg, ts+14195) == 0 { 32164 } else if libc.Xstrcmp(tls, zArg, ts+14200) == 0 { 32165 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 32166 } else if libc.Xstrcmp(tls, zArg, ts+12434) == 0 { 32167 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0 { 32168 return TCL_ERROR 32169 } 32170 if *(*int32)(unsafe.Pointer(bp + 88)) != 0 { 32171 flags = flags & libc.CplInt32(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE) 32172 flags = flags | SQLITE_OPEN_READONLY 32173 } else { 32174 flags = flags & libc.CplInt32(SQLITE_OPEN_READONLY) 32175 flags = flags | SQLITE_OPEN_READWRITE 32176 } 32177 } else if libc.Xstrcmp(tls, zArg, ts+14205) == 0 { 32178 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+92) != 0 { 32179 return TCL_ERROR 32180 } 32181 if *(*int32)(unsafe.Pointer(bp + 92)) != 0 && flags&SQLITE_OPEN_READONLY == 0 { 32182 flags = flags | SQLITE_OPEN_CREATE 32183 } else { 32184 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 32185 } 32186 } else if libc.Xstrcmp(tls, zArg, ts+14213) == 0 { 32187 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+96) != 0 { 32188 return TCL_ERROR 32189 } 32190 if *(*int32)(unsafe.Pointer(bp + 96)) != 0 { 32191 flags = flags | SQLITE_OPEN_NOFOLLOW 32192 } else { 32193 flags = flags & libc.CplInt32(SQLITE_OPEN_NOFOLLOW) 32194 } 32195 } else if libc.Xstrcmp(tls, zArg, ts+14223) == 0 { 32196 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+100) != 0 { 32197 return TCL_ERROR 32198 } 32199 if *(*int32)(unsafe.Pointer(bp + 100)) != 0 { 32200 flags = flags | SQLITE_OPEN_NOMUTEX 32201 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 32202 } else { 32203 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 32204 } 32205 } else if libc.Xstrcmp(tls, zArg, ts+14232) == 0 { 32206 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+104) != 0 { 32207 return TCL_ERROR 32208 } 32209 if *(*int32)(unsafe.Pointer(bp + 104)) != 0 { 32210 flags = flags | SQLITE_OPEN_FULLMUTEX 32211 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 32212 } else { 32213 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 32214 } 32215 } else if libc.Xstrcmp(tls, zArg, ts+14243) == 0 { 32216 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+108) != 0 { 32217 return TCL_ERROR 32218 } 32219 if *(*int32)(unsafe.Pointer(bp + 108)) != 0 { 32220 flags = flags | SQLITE_OPEN_URI 32221 } else { 32222 flags = flags & libc.CplInt32(SQLITE_OPEN_URI) 32223 } 32224 } else if libc.Xstrcmp(tls, zArg, ts+14248) == 0 { 32225 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+112) != 0 { 32226 return TCL_ERROR 32227 } 32228 } else { 32229 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+12444, zArg, uintptr(0))) 32230 return TCL_ERROR 32231 } 32232 } 32233 zErrMsg = uintptr(0) 32234 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqliteDb{}))) 32235 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(SqliteDb{}))) 32236 if zFile == uintptr(0) { 32237 zFile = ts + 584 32238 } 32239 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 32240 zFile = tcl.XTcl_TranslateFileName(tls, interp, zFile, bp+120) 32241 } 32242 rc = sqlite3.Xsqlite3_open_v2(tls, zFile, p, flags, zVfs) 32243 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 32244 tcl.XTcl_DStringFree(tls, bp+120) 32245 } 32246 if (*SqliteDb)(unsafe.Pointer(p)).Fdb != 0 { 32247 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) { 32248 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb))) 32249 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) 32250 (*SqliteDb)(unsafe.Pointer(p)).Fdb = uintptr(0) 32251 } 32252 } else { 32253 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+80, sqlite3.Xsqlite3_errstr(tls, rc))) 32254 } 32255 if (*SqliteDb)(unsafe.Pointer(p)).Fdb == uintptr(0) { 32256 tcl.XTcl_SetResult(tls, interp, zErrMsg, uintptr(1)) 32257 tcl.XTcl_Free(tls, p) 32258 sqlite3.Xsqlite3_free(tls, zErrMsg) 32259 return TCL_ERROR 32260 } 32261 (*SqliteDb)(unsafe.Pointer(p)).FmaxStmt = NUM_PREPARED_STMTS 32262 (*SqliteDb)(unsafe.Pointer(p)).FopenFlags = flags & SQLITE_OPEN_URI 32263 (*SqliteDb)(unsafe.Pointer(p)).Finterp = interp 32264 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 32265 if DbUseNre(tls) != 0 { 32266 tcl.XTcl_NRCreateCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 32267 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 32268 }{DbObjCmdAdaptor})), *(*uintptr)(unsafe.Pointer(&struct { 32269 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 32270 }{DbObjCmd})), 32271 p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 32272 } else { 32273 tcl.XTcl_CreateObjCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 32274 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 32275 }{DbObjCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 32276 } 32277 (*SqliteDb)(unsafe.Pointer(p)).FnRef = 1 32278 return TCL_OK 32279 } 32280 32281 func Sqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 32282 var rc int32 32283 if 1 != 0 { 32284 rc = TCL_OK 32285 } else { 32286 rc = TCL_ERROR 32287 } 32288 if rc == TCL_OK { 32289 tcl.XTcl_CreateObjCommand(tls, interp, ts+14267, *(*uintptr)(unsafe.Pointer(&struct { 32290 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 32291 }{DbMain})), uintptr(0), uintptr(0)) 32292 32293 tcl.XTcl_CreateObjCommand(tls, interp, ts+14275, *(*uintptr)(unsafe.Pointer(&struct { 32294 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 32295 }{DbMain})), uintptr(0), uintptr(0)) 32296 rc = tcl.XTcl_PkgProvideEx(tls, interp, ts+14267, ts+14282, uintptr(0)) 32297 } 32298 return rc 32299 } 32300 32301 func Tclsqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 32302 return Sqlite3_Init(tls, interp) 32303 } 32304 32305 func Sqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32306 return TCL_OK 32307 } 32308 32309 func Tclsqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32310 return TCL_OK 32311 } 32312 32313 func Sqlite3_SafeInit(tls *libc.TLS, interp uintptr) int32 { 32314 return TCL_ERROR 32315 } 32316 32317 func Sqlite3_SafeUnload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32318 return TCL_ERROR 32319 } 32320 32321 func Sqlite_Init(tls *libc.TLS, interp uintptr) int32 { 32322 return Sqlite3_Init(tls, interp) 32323 } 32324 32325 func Tclsqlite_Init(tls *libc.TLS, interp uintptr) int32 { 32326 return Sqlite3_Init(tls, interp) 32327 } 32328 32329 func Sqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32330 return TCL_OK 32331 } 32332 32333 func Tclsqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 32334 return TCL_OK 32335 } 32336 32337 func tclsh_main_loop(tls *libc.TLS) uintptr { 32338 return uintptr(unsafe.Pointer(&zMainloop)) 32339 } 32340 32341 var zMainloop = *(*[431]uint8)(unsafe.Pointer(ts + 14289)) 32342 32343 func main1(tls *libc.TLS, argc int32, argv uintptr) int32 { 32344 bp := tls.Alloc(64) 32345 defer tls.Free(64) 32346 32347 var interp uintptr 32348 var i int32 32349 var zScript uintptr = uintptr(0) 32350 32351 if libc.Xgetenv(tls, ts+14720) != 0 { 32352 if libc.Xisatty(tls, 0) != 0 && libc.Xisatty(tls, 2) != 0 { 32353 libc.Xfprintf(tls, libc.Xstderr, 32354 ts+14739, 32355 libc.VaList(bp, libc.Xgetpid(tls))) 32356 libc.Xfgetc(tls, libc.Xstdin) 32357 } else { 32358 libc.Xraise(tls, SIGTRAP) 32359 } 32360 } 32361 32362 sqlite3.Xsqlite3_shutdown(tls) 32363 32364 tcl.XTcl_FindExecutable(tls, *(*uintptr)(unsafe.Pointer(argv))) 32365 tcl.XTcl_SetSystemEncoding(tls, uintptr(0), ts+14801) 32366 interp = tcl.XTcl_CreateInterp(tls) 32367 Sqlite3_Init(tls, interp) 32368 32369 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]uint8{})), bp+32, ts+1333, libc.VaList(bp+8, argc-1)) 32370 tcl.XTcl_SetVar2(tls, interp, ts+14807, uintptr(0), bp+32, TCL_GLOBAL_ONLY) 32371 tcl.XTcl_SetVar2(tls, interp, ts+14812, uintptr(0), *(*uintptr)(unsafe.Pointer(argv)), TCL_GLOBAL_ONLY) 32372 tcl.XTcl_SetVar2(tls, interp, ts+14818, uintptr(0), ts+584, TCL_GLOBAL_ONLY) 32373 for i = 1; i < argc; i++ { 32374 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) 32375 } 32376 zScript = sqlite3TestInit(tls, interp) 32377 if zScript == uintptr(0) { 32378 zScript = tclsh_main_loop(tls) 32379 } 32380 if tcl.XTcl_GlobalEval(tls, interp, zScript) != TCL_OK { 32381 var zInfo uintptr = tcl.XTcl_GetVar2(tls, interp, ts+14823, uintptr(0), TCL_GLOBAL_ONLY) 32382 if zInfo == uintptr(0) { 32383 zInfo = tcl.XTcl_GetStringResult(tls, interp) 32384 } 32385 libc.Xfprintf(tls, libc.Xstderr, ts+14833, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv)), zInfo)) 32386 return 1 32387 } 32388 return 0 32389 } 32390 32391 type sqlite3_value = sqlite3_value1 32392 32393 type sqlite3_context = sqlite3_context1 32394 32395 type _IO_cookie_io_functions_t = struct { 32396 Fread uintptr 32397 Fwrite uintptr 32398 Fseek uintptr 32399 Fclose uintptr 32400 } 32401 32402 type cookie_io_functions_t = _IO_cookie_io_functions_t 32403 type off64_t = int64 32404 type fpos64_t = _G_fpos64_t 32405 type ino64_t = uint64 32406 32407 type fd_set1 = struct{ Ffds_bits [16]int64 } 32408 32409 type blkcnt64_t = int64 32410 type fsblkcnt64_t = uint64 32411 type fsfilcnt64_t = uint64 32412 32413 type comparison_fn_t = uintptr 32414 type PreUpdate = PreUpdate1 32415 32416 type Vdbe = Vdbe1 32417 32418 type Mem = sqlite3_value1 32419 32420 type Op = VdbeOp1 32421 32422 type Bool = uint32 32423 32424 type AuxData1 = struct { 32425 FiAuxOp int32 32426 FiAuxArg int32 32427 FpAux uintptr 32428 FxDeleteAux uintptr 32429 FpNextAux uintptr 32430 } 32431 32432 type AuxData = AuxData1 32433 32434 type VdbeCursor1 = struct { 32435 FeCurType u8 32436 FiDb i8 32437 FnullRow u8 32438 FdeferredMoveto u8 32439 FisTable u8 32440 F__ccgo_pad1 [3]byte 32441 FisEphemeral uint8 32442 F__ccgo_pad2 [1]byte 32443 FseekHit u16 32444 F__ccgo_pad3 [4]byte 32445 Fub struct{ FpBtx uintptr } 32446 FseqCount i64 32447 FcacheStatus u32 32448 FseekResult int32 32449 FpAltCursor uintptr 32450 Fuc struct{ FpCursor uintptr } 32451 FpKeyInfo uintptr 32452 FiHdrOffset u32 32453 FpgnoRoot Pgno 32454 FnField i16 32455 FnHdrParsed u16 32456 F__ccgo_pad4 [4]byte 32457 FmovetoTarget i64 32458 FaOffset uintptr 32459 FaRow uintptr 32460 FpayloadSize u32 32461 FszRow u32 32462 FaType [1]u32 32463 F__ccgo_pad5 [4]byte 32464 } 32465 32466 type VdbeCursor = VdbeCursor1 32467 32468 type VdbeFrame1 = struct { 32469 Fv uintptr 32470 FpParent uintptr 32471 FaOp uintptr 32472 FanExec uintptr 32473 FaMem uintptr 32474 FapCsr uintptr 32475 FaOnce uintptr 32476 Ftoken uintptr 32477 FlastRowid i64 32478 FpAuxData uintptr 32479 FnCursor int32 32480 Fpc int32 32481 FnOp int32 32482 FnMem int32 32483 FnChildMem int32 32484 FnChildCsr int32 32485 FnChange i64 32486 FnDbChange i64 32487 } 32488 32489 type VdbeFrame = VdbeFrame1 32490 32491 type MemValue = struct{ Fr float64 } 32492 32493 type bft = uint32 32494 32495 type ScanStatus1 = struct { 32496 FaddrExplain int32 32497 FaddrLoop int32 32498 FaddrVisit int32 32499 FiSelectID int32 32500 FnEst LogEst 32501 F__ccgo_pad1 [6]byte 32502 FzName uintptr 32503 } 32504 32505 type ScanStatus = ScanStatus1 32506 32507 type DblquoteStr1 = struct { 32508 FpNextStr uintptr 32509 Fz [8]uint8 32510 } 32511 32512 type DblquoteStr = DblquoteStr1 32513 32514 type ValueList1 = struct { 32515 FpCsr uintptr 32516 FpOut uintptr 32517 } 32518 32519 type ValueList = ValueList1 32520 32521 func testHexToInt(tls *libc.TLS, h int32) int32 { 32522 if h >= '0' && h <= '9' { 32523 return h - '0' 32524 } else if h >= 'a' && h <= 'f' { 32525 return h - 'a' + 10 32526 } else { 32527 return h - 'A' + 10 32528 } 32529 return int32(0) 32530 } 32531 32532 func sqlite3TestTextToPtr(tls *libc.TLS, z uintptr) uintptr { 32533 bp := tls.Alloc(20) 32534 defer tls.Free(20) 32535 32536 if int32(*(*uint8)(unsafe.Pointer(z))) == '0' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == 'x' { 32537 z += uintptr(2) 32538 } 32539 *(*u64)(unsafe.Pointer(bp + 8)) = uint64(0) 32540 for *(*uint8)(unsafe.Pointer(z)) != 0 { 32541 *(*u64)(unsafe.Pointer(bp + 8)) = *(*u64)(unsafe.Pointer(bp + 8))<<4 + u64(testHexToInt(tls, int32(*(*uint8)(unsafe.Pointer(z))))) 32542 z++ 32543 } 32544 if uint64(unsafe.Sizeof(uintptr(0))) == uint64(unsafe.Sizeof(u64(0))) { 32545 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 32546 } else { 32547 *(*u32)(unsafe.Pointer(bp + 16)) = u32(*(*u64)(unsafe.Pointer(bp + 8))) 32548 libc.Xmemcpy(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0)))) 32549 } 32550 return *(*uintptr)(unsafe.Pointer(bp)) 32551 } 32552 32553 func get_sqlite_pointer(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 32554 bp := tls.Alloc(212) 32555 defer tls.Free(212) 32556 32557 var p uintptr 32558 32559 if objc != 2 { 32560 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+14841) 32561 return TCL_ERROR 32562 } 32563 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 32564 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 32565 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 32566 return TCL_ERROR 32567 } 32568 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData 32569 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+112, ts+9889, libc.VaList(bp+24, (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb)) 32570 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+112, 0)) 32571 return TCL_OK 32572 } 32573 32574 func getDbPointer(tls *libc.TLS, interp uintptr, zA uintptr, ppDb uintptr) int32 { 32575 bp := tls.Alloc(64) 32576 defer tls.Free(64) 32577 32578 var p uintptr 32579 32580 if tcl.XTcl_GetCommandInfo(tls, interp, zA, bp) != 0 { 32581 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 32582 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 32583 } else { 32584 *(*uintptr)(unsafe.Pointer(ppDb)) = sqlite3TestTextToPtr(tls, zA) 32585 } 32586 return TCL_OK 32587 } 32588 32589 func sqlite3TestErrCode(tls *libc.TLS, interp uintptr, db uintptr, rc int32) int32 { 32590 bp := tls.Alloc(248) 32591 defer tls.Free(248) 32592 32593 if sqlite3.Xsqlite3_threadsafe(tls) == 0 && rc != SQLITE_MISUSE && rc != SQLITE_OK && 32594 sqlite3.Xsqlite3_errcode(tls, db) != rc { 32595 var r2 int32 = sqlite3.Xsqlite3_errcode(tls, db) 32596 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+48, 32597 ts+14879, 32598 libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), rc, sqlite3.Xsqlite3ErrName(tls, r2), r2)) 32599 tcl.XTcl_ResetResult(tls, interp) 32600 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 32601 return 1 32602 } 32603 return 0 32604 } 32605 32606 func getStmtPointer(tls *libc.TLS, interp uintptr, zArg uintptr, ppStmt uintptr) int32 { 32607 *(*uintptr)(unsafe.Pointer(ppStmt)) = sqlite3TestTextToPtr(tls, zArg) 32608 return TCL_OK 32609 } 32610 32611 func sqlite3TestMakePointerStr(tls *libc.TLS, interp uintptr, zPtr uintptr, p uintptr) int32 { 32612 bp := tls.Alloc(8) 32613 defer tls.Free(8) 32614 32615 sqlite3.Xsqlite3_snprintf(tls, 100, zPtr, ts+9889, libc.VaList(bp, p)) 32616 return TCL_OK 32617 } 32618 32619 func exec_printf_cb(tls *libc.TLS, pArg uintptr, argc int32, argv uintptr, name uintptr) int32 { 32620 var str uintptr = pArg 32621 var i int32 32622 32623 if (*Tcl_DString)(unsafe.Pointer(str)).Flength == 0 { 32624 for i = 0; i < argc; i++ { 32625 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 32626 if *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) != 0 { 32627 return *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) 32628 } 32629 return ts + 5846 32630 }()) 32631 } 32632 } 32633 for i = 0; i < argc; i++ { 32634 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 32635 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 32636 return *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 32637 } 32638 return ts + 5846 32639 }()) 32640 } 32641 return 0 32642 } 32643 32644 func test_io_trace(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32645 return TCL_OK 32646 } 32647 32648 func clang_sanitize_address(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32649 var res int32 = 0 32650 if res == 0 && libc.Xgetenv(tls, ts+14937) != uintptr(0) { 32651 res = 1 32652 } 32653 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 32654 return TCL_OK 32655 } 32656 32657 func test_exec_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32658 bp := tls.Alloc(310) 32659 defer tls.Free(310) 32660 32661 var rc int32 32662 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 32663 var zSql uintptr 32664 32665 if argc != 4 { 32666 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32667 ts+14975, 0)) 32668 return TCL_ERROR 32669 } 32670 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 32671 return TCL_ERROR 32672 } 32673 tcl.XTcl_DStringInit(tls, bp+56) 32674 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 32675 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 32676 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32677 }{exec_printf_cb})), bp+56, bp+272) 32678 sqlite3.Xsqlite3_free(tls, zSql) 32679 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 32680 tcl.XTcl_AppendElement(tls, interp, bp+280) 32681 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32682 if rc == SQLITE_OK { 32683 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 32684 } 32685 return *(*uintptr)(unsafe.Pointer(bp + 272)) 32686 }()) 32687 tcl.XTcl_DStringFree(tls, bp+56) 32688 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 32689 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 32690 } 32691 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 32692 return TCL_ERROR 32693 } 32694 return TCL_OK 32695 } 32696 32697 func test_exec_hex(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32698 bp := tls.Alloc(806) 32699 defer tls.Free(806) 32700 32701 var rc int32 32702 var i int32 32703 var j int32 32704 *(*uintptr)(unsafe.Pointer(bp + 768)) = uintptr(0) 32705 var zHex uintptr 32706 32707 if argc != 3 { 32708 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32709 ts+14993, 0)) 32710 return TCL_ERROR 32711 } 32712 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 32713 return TCL_ERROR 32714 } 32715 zHex = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 32716 i = libc.AssignInt32(&j, 0) 32717 __1: 32718 if !(uint64(i) < uint64(unsafe.Sizeof([501]uint8{}))-uint64(1) && *(*uint8)(unsafe.Pointer(zHex + uintptr(j))) != 0) { 32719 goto __3 32720 } 32721 { 32722 if int32(*(*uint8)(unsafe.Pointer(zHex + uintptr(j)))) == '%' && *(*uint8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 && *(*uint8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 { 32723 *(*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)))))) 32724 j = j + 2 32725 } else { 32726 *(*uint8)(unsafe.Pointer(bp + 48 + uintptr(i))) = *(*uint8)(unsafe.Pointer(zHex + uintptr(j))) 32727 } 32728 32729 } 32730 goto __2 32731 __2: 32732 i++ 32733 j++ 32734 goto __1 32735 goto __3 32736 __3: 32737 ; 32738 *(*uint8)(unsafe.Pointer(bp + 48 + uintptr(i))) = uint8(0) 32739 tcl.XTcl_DStringInit(tls, bp+552) 32740 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48, *(*uintptr)(unsafe.Pointer(&struct { 32741 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32742 }{exec_printf_cb})), bp+552, bp+768) 32743 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+776, ts+1333, libc.VaList(bp+32, rc)) 32744 tcl.XTcl_AppendElement(tls, interp, bp+776) 32745 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32746 if rc == SQLITE_OK { 32747 return (*Tcl_DString)(unsafe.Pointer(bp + 552)).Fstring 32748 } 32749 return *(*uintptr)(unsafe.Pointer(bp + 768)) 32750 }()) 32751 tcl.XTcl_DStringFree(tls, bp+552) 32752 if *(*uintptr)(unsafe.Pointer(bp + 768)) != 0 { 32753 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 768))) 32754 } 32755 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 40)), rc) != 0 { 32756 return TCL_ERROR 32757 } 32758 return TCL_OK 32759 } 32760 32761 func db_enter(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32762 bp := tls.Alloc(40) 32763 defer tls.Free(40) 32764 32765 if argc != 2 { 32766 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32767 ts+15001, 0)) 32768 return TCL_ERROR 32769 } 32770 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32771 return TCL_ERROR 32772 } 32773 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32774 return TCL_OK 32775 } 32776 32777 func db_leave(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32778 bp := tls.Alloc(40) 32779 defer tls.Free(40) 32780 32781 if argc != 2 { 32782 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32783 ts+15001, 0)) 32784 return TCL_ERROR 32785 } 32786 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32787 return TCL_ERROR 32788 } 32789 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 32790 return TCL_OK 32791 } 32792 32793 func test_exec(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32794 bp := tls.Alloc(310) 32795 defer tls.Free(310) 32796 32797 var rc int32 32798 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 32799 var zSql uintptr 32800 var i int32 32801 var j int32 32802 32803 if argc != 3 { 32804 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32805 ts+15005, 0)) 32806 return TCL_ERROR 32807 } 32808 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 32809 return TCL_ERROR 32810 } 32811 tcl.XTcl_DStringInit(tls, bp+56) 32812 zSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 32813 for i = libc.AssignInt32(&j, 0); *(*uint8)(unsafe.Pointer(zSql + uintptr(i))) != 0; { 32814 if int32(*(*uint8)(unsafe.Pointer(zSql + uintptr(i)))) == '%' { 32815 *(*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)))))) 32816 i = i + 3 32817 } else { 32818 *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = *(*uint8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&i, 1)))) 32819 } 32820 } 32821 *(*uint8)(unsafe.Pointer(zSql + uintptr(j))) = uint8(0) 32822 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 32823 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 32824 }{exec_printf_cb})), bp+56, bp+272) 32825 sqlite3.Xsqlite3_free(tls, zSql) 32826 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 32827 tcl.XTcl_AppendElement(tls, interp, bp+280) 32828 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32829 if rc == SQLITE_OK { 32830 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 32831 } 32832 return *(*uintptr)(unsafe.Pointer(bp + 272)) 32833 }()) 32834 tcl.XTcl_DStringFree(tls, bp+56) 32835 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 32836 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 32837 } 32838 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 32839 return TCL_ERROR 32840 } 32841 return TCL_OK 32842 } 32843 32844 func test_exec_nr(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32845 bp := tls.Alloc(48) 32846 defer tls.Free(48) 32847 32848 var rc int32 32849 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 32850 if argc != 3 { 32851 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32852 ts+15005, 0)) 32853 return TCL_ERROR 32854 } 32855 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 32856 return TCL_ERROR 32857 } 32858 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), uintptr(0), uintptr(0), bp+40) 32859 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 32860 return TCL_ERROR 32861 } 32862 return TCL_OK 32863 } 32864 32865 func test_mprintf_z(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32866 bp := tls.Alloc(40) 32867 defer tls.Free(40) 32868 32869 var zResult uintptr = uintptr(0) 32870 var i int32 32871 32872 for i = 2; i < argc && (i == 2 || zResult != 0); i++ { 32873 zResult = sqlite3.Xsqlite3_mprintf(tls, ts+15013, libc.VaList(bp, zResult, *(*uintptr)(unsafe.Pointer(argv + 1*8)), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 32874 } 32875 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zResult, 0)) 32876 sqlite3.Xsqlite3_free(tls, zResult) 32877 return TCL_OK 32878 } 32879 32880 func test_mprintf_n(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32881 bp := tls.Alloc(20) 32882 defer tls.Free(20) 32883 32884 var zStr uintptr 32885 *(*int32)(unsafe.Pointer(bp + 16)) = 0 32886 zStr = sqlite3.Xsqlite3_mprintf(tls, ts+15020, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+16)) 32887 sqlite3.Xsqlite3_free(tls, zStr) 32888 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 32889 return TCL_OK 32890 } 32891 32892 func test_snprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32893 bp := tls.Alloc(124) 32894 defer tls.Free(124) 32895 32896 var n int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 32897 var zFormat uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 32898 var a1 int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 32899 if uint64(n) > uint64(unsafe.Sizeof([100]uint8{})) { 32900 n = int32(unsafe.Sizeof([100]uint8{})) 32901 } 32902 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+24, ts+15025, 0) 32903 sqlite3.Xsqlite3_snprintf(tls, n, bp+24, zFormat, libc.VaList(bp, a1)) 32904 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, 0)) 32905 return TCL_OK 32906 } 32907 32908 func test_get_table_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32909 bp := tls.Alloc(350) 32910 defer tls.Free(350) 32911 32912 var rc int32 32913 *(*uintptr)(unsafe.Pointer(bp + 304)) = uintptr(0) 32914 *(*int32)(unsafe.Pointer(bp + 312)) = 0 32915 *(*int32)(unsafe.Pointer(bp + 316)) = 0 32916 32917 var i int32 32918 32919 var zSql uintptr 32920 *(*int32)(unsafe.Pointer(bp + 64)) = -1 32921 if argc == 5 { 32922 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+64) != 0 { 32923 return TCL_ERROR 32924 } 32925 } 32926 if argc != 4 && argc != 5 { 32927 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 32928 ts+15052, 0)) 32929 return TCL_ERROR 32930 } 32931 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) != 0 { 32932 return TCL_ERROR 32933 } 32934 tcl.XTcl_DStringInit(tls, bp+80) 32935 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 32936 if argc == 5 { 32937 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, uintptr(0), uintptr(0), bp+304) 32938 } else { 32939 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, bp+312, bp+316, bp+304) 32940 *(*int32)(unsafe.Pointer(bp + 64)) = (*(*int32)(unsafe.Pointer(bp + 312)) + 1) * *(*int32)(unsafe.Pointer(bp + 316)) 32941 } 32942 sqlite3.Xsqlite3_free(tls, zSql) 32943 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+320, ts+1333, libc.VaList(bp+40, rc)) 32944 tcl.XTcl_AppendElement(tls, interp, bp+320) 32945 if rc == SQLITE_OK { 32946 if argc == 4 { 32947 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+320, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 312)))) 32948 tcl.XTcl_AppendElement(tls, interp, bp+320) 32949 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+320, ts+1333, libc.VaList(bp+56, *(*int32)(unsafe.Pointer(bp + 316)))) 32950 tcl.XTcl_AppendElement(tls, interp, bp+320) 32951 } 32952 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 32953 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 32954 if *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) != 0 { 32955 return *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) 32956 } 32957 return ts + 5846 32958 }()) 32959 } 32960 } else { 32961 tcl.XTcl_AppendElement(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 304))) 32962 } 32963 sqlite3.Xsqlite3_free_table(tls, *(*uintptr)(unsafe.Pointer(bp + 296))) 32964 if *(*uintptr)(unsafe.Pointer(bp + 304)) != 0 { 32965 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 304))) 32966 } 32967 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 72)), rc) != 0 { 32968 return TCL_ERROR 32969 } 32970 return TCL_OK 32971 } 32972 32973 func test_last_rowid(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32974 bp := tls.Alloc(94) 32975 defer tls.Free(94) 32976 32977 if argc != 2 { 32978 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15078, 0)) 32979 return TCL_ERROR 32980 } 32981 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 32982 return TCL_ERROR 32983 } 32984 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))))) 32985 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 32986 return SQLITE_OK 32987 } 32988 32989 func test_key(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32990 return TCL_OK 32991 } 32992 32993 func test_rekey(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32994 return TCL_OK 32995 } 32996 32997 func sqlite_test_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 32998 bp := tls.Alloc(40) 32999 defer tls.Free(40) 33000 33001 var rc int32 33002 if argc != 2 { 33003 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33004 ts+15083, 0)) 33005 return TCL_ERROR 33006 } 33007 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 33008 return TCL_ERROR 33009 } 33010 rc = sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33011 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33012 return TCL_OK 33013 } 33014 33015 func sqlite_test_close_v2(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33016 bp := tls.Alloc(40) 33017 defer tls.Free(40) 33018 33019 var rc int32 33020 if argc != 2 { 33021 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33022 ts+15083, 0)) 33023 return TCL_ERROR 33024 } 33025 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 33026 return TCL_ERROR 33027 } 33028 rc = sqlite3.Xsqlite3_close_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33029 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33030 return TCL_OK 33031 } 33032 33033 func t1_ifnullFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33034 var i int32 33035 for i = 0; i < argc; i++ { 33036 if SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) { 33037 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 33038 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))), 33039 n, libc.UintptrFromInt32(-1)) 33040 break 33041 } 33042 } 33043 } 33044 33045 func hex8Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 33046 bp := tls.Alloc(208) 33047 defer tls.Free(208) 33048 33049 var z uintptr 33050 var i int32 33051 33052 z = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33053 for i = 0; uint64(i) < uint64(unsafe.Sizeof([200]uint8{}))/uint64(2)-uint64(2) && *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 33054 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)))))) 33055 } 33056 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = uint8(0) 33057 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 33058 } 33059 33060 func hex16Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 33061 bp := tls.Alloc(408) 33062 defer tls.Free(408) 33063 33064 var z uintptr 33065 var i int32 33066 33067 z = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 33068 for i = 0; uint64(i) < uint64(unsafe.Sizeof([400]uint8{}))/uint64(4)-uint64(4) && *(*uint16)(unsafe.Pointer(z + uintptr(i)*2)) != 0; i++ { 33069 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)) 33070 } 33071 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i*4))) = uint8(0) 33072 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 33073 } 33074 33075 type dstr = struct { 33076 FnAlloc int32 33077 FnUsed int32 33078 Fz uintptr 33079 } 33080 33081 func dstrAppend(tls *libc.TLS, p uintptr, z uintptr, divider int32) { 33082 var n int32 = int32(libc.Xstrlen(tls, z)) 33083 if (*dstr)(unsafe.Pointer(p)).FnUsed+n+2 > (*dstr)(unsafe.Pointer(p)).FnAlloc { 33084 var zNew uintptr 33085 (*dstr)(unsafe.Pointer(p)).FnAlloc = (*dstr)(unsafe.Pointer(p)).FnAlloc*2 + n + 200 33086 zNew = sqlite3.Xsqlite3_realloc(tls, (*dstr)(unsafe.Pointer(p)).Fz, (*dstr)(unsafe.Pointer(p)).FnAlloc) 33087 if zNew == uintptr(0) { 33088 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(p)).Fz) 33089 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(dstr{}))) 33090 return 33091 } 33092 (*dstr)(unsafe.Pointer(p)).Fz = zNew 33093 } 33094 if divider != 0 && (*dstr)(unsafe.Pointer(p)).FnUsed > 0 { 33095 *(*uint8)(unsafe.Pointer((*dstr)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*dstr)(unsafe.Pointer(p)).FnUsed, 1)))) = uint8(divider) 33096 } 33097 libc.Xmemcpy(tls, (*dstr)(unsafe.Pointer(p)).Fz+uintptr((*dstr)(unsafe.Pointer(p)).FnUsed), z, uint64(n+1)) 33098 *(*int32)(unsafe.Pointer(p + 4)) += n 33099 } 33100 33101 func execFuncCallback(tls *libc.TLS, pData uintptr, argc int32, argv uintptr, NotUsed uintptr) int32 { 33102 var p uintptr = pData 33103 var i int32 33104 for i = 0; i < argc; i++ { 33105 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) == uintptr(0) { 33106 dstrAppend(tls, p, ts+5846, ' ') 33107 } else { 33108 dstrAppend(tls, p, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ' ') 33109 } 33110 } 33111 return 0 33112 } 33113 33114 func sqlite3ExecFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33115 bp := tls.Alloc(16) 33116 defer tls.Free(16) 33117 33118 libc.Xmemset(tls, bp, 0, uint64(unsafe.Sizeof(dstr{}))) 33119 sqlite3.Xsqlite3_exec(tls, sqlite3.Xsqlite3_user_data(tls, context), 33120 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 33121 *(*uintptr)(unsafe.Pointer(&struct { 33122 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 33123 }{execFuncCallback})), bp, uintptr(0)) 33124 sqlite3.Xsqlite3_result_text(tls, context, (*dstr)(unsafe.Pointer(bp)).Fz, (*dstr)(unsafe.Pointer(bp)).FnUsed, libc.UintptrFromInt32(-1)) 33125 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(bp)).Fz) 33126 } 33127 33128 func tkt2213Function(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33129 var nText int32 33130 var zText1 uintptr 33131 var zText2 uintptr 33132 var zText3 uintptr 33133 33134 nText = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 33135 zText1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33136 zText2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33137 zText3 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33138 33139 if zText1 != zText2 || zText2 != zText3 { 33140 sqlite3.Xsqlite3_result_error(tls, context, ts+15099, -1) 33141 } else { 33142 var zCopy uintptr = sqlite3.Xsqlite3_malloc(tls, nText) 33143 libc.Xmemcpy(tls, zCopy, zText1, uint64(nText)) 33144 sqlite3.Xsqlite3_result_text(tls, context, zCopy, nText, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 33145 } 33146 } 33147 33148 func ptrChngFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33149 var p1 uintptr 33150 var p2 uintptr 33151 var zCmd uintptr 33152 if argc != 4 { 33153 return 33154 } 33155 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 33156 if zCmd == uintptr(0) { 33157 return 33158 } 33159 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 33160 p1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33161 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 33162 p1 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 33163 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 33164 p1 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 33165 } else { 33166 return 33167 } 33168 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 33169 if zCmd == uintptr(0) { 33170 return 33171 } 33172 if libc.Xstrcmp(tls, zCmd, ts+15127) == 0 { 33173 sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 33174 } else if libc.Xstrcmp(tls, zCmd, ts+15133) == 0 { 33175 sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 33176 } else if libc.Xstrcmp(tls, zCmd, ts+15141) == 0 { 33177 } else { 33178 return 33179 } 33180 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 33181 if zCmd == uintptr(0) { 33182 return 33183 } 33184 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 33185 p2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 33186 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 33187 p2 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 33188 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 33189 p2 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 33190 } else { 33191 return 33192 } 33193 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(p1 != p2)) 33194 } 33195 33196 func nondeterministicFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33197 sqlite3.Xsqlite3_result_int(tls, context, libc.PostIncInt32(&cnt, 1)) 33198 } 33199 33200 var cnt int32 = 0 33201 33202 func intrealFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33203 bp := tls.Alloc(8) 33204 defer tls.Free(8) 33205 33206 var v sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 33207 sqlite3.Xsqlite3_result_int64(tls, context, v) 33208 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_RESULT_INTREAL, libc.VaList(bp, context)) 33209 } 33210 33211 func test_create_function(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33212 bp := tls.Alloc(40) 33213 defer tls.Free(40) 33214 33215 var rc int32 33216 33217 if argc != 2 { 33218 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33219 ts+15078, 0)) 33220 return TCL_ERROR 33221 } 33222 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 33223 return TCL_ERROR 33224 } 33225 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15146, -1, SQLITE_UTF8, uintptr(0), 33226 *(*uintptr)(unsafe.Pointer(&struct { 33227 f func(*libc.TLS, uintptr, int32, uintptr) 33228 }{t1_ifnullFunc})), uintptr(0), uintptr(0)) 33229 if rc == SQLITE_OK { 33230 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15157, 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 33231 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 33232 f func(*libc.TLS, uintptr, int32, uintptr) 33233 }{hex8Func})), uintptr(0), uintptr(0)) 33234 } 33235 if rc == SQLITE_OK { 33236 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15162, 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 33237 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 33238 f func(*libc.TLS, uintptr, int32, uintptr) 33239 }{hex16Func})), uintptr(0), uintptr(0)) 33240 } 33241 if rc == SQLITE_OK { 33242 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15168, 1, SQLITE_ANY, uintptr(0), 33243 *(*uintptr)(unsafe.Pointer(&struct { 33244 f func(*libc.TLS, uintptr, int32, uintptr) 33245 }{tkt2213Function})), uintptr(0), uintptr(0)) 33246 } 33247 if rc == SQLITE_OK { 33248 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15180, 4, SQLITE_ANY, uintptr(0), 33249 *(*uintptr)(unsafe.Pointer(&struct { 33250 f func(*libc.TLS, uintptr, int32, uintptr) 33251 }{ptrChngFunction})), uintptr(0), uintptr(0)) 33252 } 33253 33254 if rc == SQLITE_OK { 33255 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15195, -1, SQLITE_UTF8, 33256 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 33257 f func(*libc.TLS, uintptr, int32, uintptr) 33258 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 33259 } 33260 if rc == SQLITE_OK { 33261 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15204, -1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 33262 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 33263 f func(*libc.TLS, uintptr, int32, uintptr) 33264 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 33265 } 33266 33267 if rc == SQLITE_OK { 33268 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15213, 1, SQLITE_UTF8, 33269 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 33270 f func(*libc.TLS, uintptr, int32, uintptr) 33271 }{intrealFunction})), uintptr(0), uintptr(0)) 33272 } 33273 33274 if rc == SQLITE_OK { 33275 var zUtf16 uintptr 33276 var pVal uintptr 33277 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 33278 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 33279 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+15221, uint8(SQLITE_UTF8), uintptr(0)) 33280 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, func() uint8 { 33281 if int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&sqlite3.Xsqlite3one))))) == 0 { 33282 return uint8(SQLITE_UTF16BE) 33283 } 33284 return uint8(SQLITE_UTF16LE) 33285 }()) 33286 if (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FmallocFailed != 0 { 33287 rc = SQLITE_NOMEM 33288 } else { 33289 rc = sqlite3.Xsqlite3_create_function16(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zUtf16, 33290 1, SQLITE_UTF16, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct { 33291 f func(*libc.TLS, uintptr, int32, uintptr) 33292 }{sqlite3ExecFunc})), uintptr(0), uintptr(0)) 33293 } 33294 sqlite3.Xsqlite3ValueFree(tls, pVal) 33295 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 33296 } 33297 33298 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 33299 return TCL_ERROR 33300 } 33301 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33302 return TCL_OK 33303 } 33304 33305 func test_drop_modules(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33306 bp := tls.Alloc(40) 33307 defer tls.Free(40) 33308 33309 if argc < 2 { 33310 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33311 ts+15078, 0)) 33312 return TCL_ERROR 33313 } 33314 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 33315 return TCL_ERROR 33316 } 33317 sqlite3.Xsqlite3_drop_modules(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), func() uintptr { 33318 if argc > 2 { 33319 return argv + uintptr(2)*8 33320 } 33321 return uintptr(0) 33322 }()) 33323 return TCL_OK 33324 } 33325 33326 type t1CountCtx1 = struct{ Fn int32 } 33327 33328 type t1CountCtx = t1CountCtx1 33329 33330 func t1CountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33331 bp := tls.Alloc(9) 33332 defer tls.Free(9) 33333 33334 var p uintptr 33335 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 33336 if (argc == 0 || SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv)))) && p != 0 { 33337 (*t1CountCtx)(unsafe.Pointer(p)).Fn++ 33338 } 33339 if argc > 0 { 33340 var v int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 33341 if v == 40 { 33342 sqlite3.Xsqlite3_result_error(tls, context, ts+15235, -1) 33343 } else if v == 41 { 33344 *(*[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)} 33345 sqlite3.Xsqlite3_result_error16(tls, context, bp+uintptr(1-libc.Bool32(int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&sqlite3.Xsqlite3one))))) == 0)), -1) 33346 } 33347 } 33348 } 33349 33350 func t1CountFinalize(tls *libc.TLS, context uintptr) { 33351 var p uintptr 33352 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 33353 if p != 0 { 33354 if (*t1CountCtx)(unsafe.Pointer(p)).Fn == 42 { 33355 sqlite3.Xsqlite3_result_error(tls, context, ts+15265, -1) 33356 } else { 33357 sqlite3.Xsqlite3_result_int(tls, context, func() int32 { 33358 if p != 0 { 33359 return (*t1CountCtx)(unsafe.Pointer(p)).Fn 33360 } 33361 return 0 33362 }()) 33363 } 33364 } 33365 } 33366 33367 func legacyCountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 33368 } 33369 33370 func legacyCountFinalize(tls *libc.TLS, context uintptr) { 33371 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_aggregate_count(tls, context)) 33372 } 33373 33374 func test_create_aggregate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33375 bp := tls.Alloc(40) 33376 defer tls.Free(40) 33377 33378 var rc int32 33379 if argc != 2 { 33380 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33381 ts+15083, 0)) 33382 return TCL_ERROR 33383 } 33384 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 33385 return TCL_ERROR 33386 } 33387 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 0, SQLITE_UTF8, uintptr(0), uintptr(0), 33388 *(*uintptr)(unsafe.Pointer(&struct { 33389 f func(*libc.TLS, uintptr, int32, uintptr) 33390 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 33391 if rc == SQLITE_OK { 33392 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 1, SQLITE_UTF8, uintptr(0), uintptr(0), 33393 *(*uintptr)(unsafe.Pointer(&struct { 33394 f func(*libc.TLS, uintptr, int32, uintptr) 33395 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 33396 } 33397 if rc == SQLITE_OK { 33398 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15294, 0, SQLITE_ANY, uintptr(0), uintptr(0), 33399 *(*uintptr)(unsafe.Pointer(&struct { 33400 f func(*libc.TLS, uintptr, int32, uintptr) 33401 }{legacyCountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{legacyCountFinalize}))) 33402 } 33403 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 33404 return TCL_ERROR 33405 } 33406 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 33407 return TCL_OK 33408 } 33409 33410 func test_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33411 bp := tls.Alloc(40) 33412 defer tls.Free(40) 33413 33414 if argc != 2 { 33415 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33416 ts+15307, 0)) 33417 return TCL_ERROR 33418 } 33419 libc.Xprintf(tls, ts+389, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 33420 return TCL_OK 33421 } 33422 33423 func sqlite3_mprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33424 bp := tls.Alloc(84) 33425 defer tls.Free(84) 33426 33427 var i int32 33428 var z uintptr 33429 if argc != 5 { 33430 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33431 ts+15314, 0)) 33432 return TCL_ERROR 33433 } 33434 for i = 2; i < 5; i++ { 33435 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 33436 return TCL_ERROR 33437 } 33438 } 33439 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)))) 33440 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33441 sqlite3.Xsqlite3_free(tls, z) 33442 return TCL_OK 33443 } 33444 33445 func sqlite3_mprintf_int64(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33446 bp := tls.Alloc(112) 33447 defer tls.Free(112) 33448 33449 var i int32 33450 33451 var z uintptr 33452 if argc != 5 { 33453 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33454 ts+15314, 0)) 33455 return TCL_ERROR 33456 } 33457 for i = 2; i < 5; i++ { 33458 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 { 33459 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15335, 0)) 33460 return TCL_ERROR 33461 } 33462 } 33463 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)))) 33464 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33465 sqlite3.Xsqlite3_free(tls, z) 33466 return TCL_OK 33467 } 33468 33469 func sqlite3_mprintf_long(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33470 bp := tls.Alloc(112) 33471 defer tls.Free(112) 33472 33473 var i int32 33474 33475 var z uintptr 33476 if argc != 5 { 33477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33478 ts+15314, 0)) 33479 return TCL_ERROR 33480 } 33481 for i = 2; i < 5; i++ { 33482 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 33483 return TCL_ERROR 33484 } 33485 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) = int64(*(*int32)(unsafe.Pointer(bp + 72 + uintptr(i-2)*4))) 33486 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) &= int64(uint64(1)<<(uint64(unsafe.Sizeof(int32(0)))*uint64(8)) - uint64(1)) 33487 } 33488 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)))) 33489 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33490 sqlite3.Xsqlite3_free(tls, z) 33491 return TCL_OK 33492 } 33493 33494 func sqlite3_mprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33495 bp := tls.Alloc(84) 33496 defer tls.Free(84) 33497 33498 var i int32 33499 var z uintptr 33500 if argc < 4 || argc > 5 { 33501 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33502 ts+15374, 0)) 33503 return TCL_ERROR 33504 } 33505 for i = 2; i < 4; i++ { 33506 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 33507 return TCL_ERROR 33508 } 33509 } 33510 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 { 33511 if argc > 4 { 33512 return *(*uintptr)(unsafe.Pointer(argv + 4*8)) 33513 } 33514 return uintptr(0) 33515 }())) 33516 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33517 sqlite3.Xsqlite3_free(tls, z) 33518 return TCL_OK 33519 } 33520 33521 func sqlite3_snprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33522 bp := tls.Alloc(104) 33523 defer tls.Free(104) 33524 33525 var i int32 33526 33527 var z uintptr 33528 if argc < 5 || argc > 6 { 33529 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33530 ts+15400, 0)) 33531 return TCL_ERROR 33532 } 33533 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+88) != 0 { 33534 return TCL_ERROR 33535 } 33536 if *(*int32)(unsafe.Pointer(bp + 88)) < 0 { 33537 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15430, 0)) 33538 return TCL_ERROR 33539 } 33540 for i = 3; i < 5; i++ { 33541 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+92+uintptr(i-3)*4) != 0 { 33542 return TCL_ERROR 33543 } 33544 } 33545 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 88))+1) 33546 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 { 33547 if argc > 4 { 33548 return *(*uintptr)(unsafe.Pointer(argv + 5*8)) 33549 } 33550 return uintptr(0) 33551 }())) 33552 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33553 sqlite3.Xsqlite3_free(tls, z) 33554 return TCL_OK 33555 } 33556 33557 func sqlite3_mprintf_double(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33558 bp := tls.Alloc(96) 33559 defer tls.Free(96) 33560 33561 var i int32 33562 33563 var z uintptr 33564 if argc != 5 { 33565 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33566 ts+15453, 0)) 33567 return TCL_ERROR 33568 } 33569 for i = 2; i < 4; i++ { 33570 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 33571 return TCL_ERROR 33572 } 33573 } 33574 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+88) != 0 { 33575 return TCL_ERROR 33576 } 33577 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)))) 33578 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 33579 sqlite3.Xsqlite3_free(tls, z) 33580 return TCL_OK 33581 } 33582 33583 func sqlite3_mprintf_scaled(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33584 bp := tls.Alloc(72) 33585 defer tls.Free(72) 33586 33587 var i int32 33588 33589 var z uintptr 33590 if argc != 4 { 33591 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33592 ts+15477, 0)) 33593 return TCL_ERROR 33594 } 33595 for i = 2; i < 4; i++ { 33596 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+56+uintptr(i-2)*8) != 0 { 33597 return TCL_ERROR 33598 } 33599 } 33600 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)))) 33601 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 33602 sqlite3.Xsqlite3_free(tls, z) 33603 return TCL_OK 33604 } 33605 33606 func sqlite3_mprintf_stronly(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33607 bp := tls.Alloc(56) 33608 defer tls.Free(56) 33609 33610 var z uintptr 33611 if argc != 3 { 33612 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33613 ts+15500, 0)) 33614 return TCL_ERROR 33615 } 33616 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 33617 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 33618 sqlite3.Xsqlite3_free(tls, z) 33619 return TCL_OK 33620 } 33621 33622 func sqlite3_mprintf_hexdouble(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 33623 bp := tls.Alloc(112) 33624 defer tls.Free(112) 33625 33626 var z uintptr 33627 33628 if argc != 3 { 33629 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 33630 ts+15500, 0)) 33631 return TCL_ERROR 33632 } 33633 if libc.Xsscanf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), ts+15516, libc.VaList(bp+32, bp+88, bp+92)) != 2 { 33634 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+15525, 0)) 33635 return TCL_ERROR 33636 } 33637 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 88))) 33638 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = *(*sqlite_uint64)(unsafe.Pointer(bp + 104))<<32 + sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 92))) 33639 libc.Xmemcpy(tls, bp+96, bp+104, uint64(unsafe.Sizeof(float64(0)))) 33640 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+64, *(*float64)(unsafe.Pointer(bp + 96)))) 33641 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 33642 sqlite3.Xsqlite3_free(tls, z) 33643 return TCL_OK 33644 } 33645 33646 func test_enable_shared(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33647 bp := tls.Alloc(4) 33648 defer tls.Free(4) 33649 33650 var rc int32 33651 33652 var ret int32 = 0 33653 33654 if objc != 2 && objc != 1 { 33655 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15569) 33656 return TCL_ERROR 33657 } 33658 ret = sqlite3.Xsqlite3Config.FsharedCacheEnabled 33659 33660 if objc == 2 { 33661 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 33662 return TCL_ERROR 33663 } 33664 rc = sqlite3.Xsqlite3_enable_shared_cache(tls, *(*int32)(unsafe.Pointer(bp))) 33665 if rc != SQLITE_OK { 33666 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 33667 return TCL_ERROR 33668 } 33669 } 33670 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(ret != 0))) 33671 return TCL_OK 33672 } 33673 33674 func test_extended_result_codes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33675 bp := tls.Alloc(12) 33676 defer tls.Free(12) 33677 33678 if objc != 3 { 33679 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15579) 33680 return TCL_ERROR 33681 } 33682 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 33683 return TCL_ERROR 33684 } 33685 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33686 return TCL_ERROR 33687 } 33688 sqlite3.Xsqlite3_extended_result_codes(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 33689 return TCL_OK 33690 } 33691 33692 func test_libversion_number(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33693 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_libversion_number(tls))) 33694 return TCL_OK 33695 } 33696 33697 func test_table_column_metadata(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33698 bp := tls.Alloc(52) 33699 defer tls.Free(52) 33700 33701 var zDb uintptr 33702 var zTbl uintptr 33703 var zCol uintptr 33704 var rc int32 33705 var pRet uintptr 33706 33707 if objc != 5 && objc != 4 { 33708 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15590) 33709 return TCL_ERROR 33710 } 33711 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33712 return TCL_ERROR 33713 } 33714 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33715 zTbl = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 33716 if objc == 5 { 33717 zCol = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 33718 } else { 33719 zCol = uintptr(0) 33720 } 33721 33722 if libc.Xstrlen(tls, zDb) == uint64(0) { 33723 zDb = uintptr(0) 33724 } 33725 33726 rc = sqlite3.Xsqlite3_table_column_metadata(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDb, zTbl, zCol, 33727 bp+24, bp+32, bp+40, bp+44, bp+48) 33728 33729 if rc != SQLITE_OK { 33730 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 33731 return TCL_ERROR 33732 } 33733 33734 pRet = tcl.XTcl_NewObj(tls) 33735 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), -1)) 33736 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), -1)) 33737 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 33738 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 44)))) 33739 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 48)))) 33740 tcl.XTcl_SetObjResult(tls, interp, pRet) 33741 33742 return TCL_OK 33743 } 33744 33745 func blobHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 33746 bp := tls.Alloc(8) 33747 defer tls.Free(8) 33748 33749 var z uintptr 33750 33751 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 33752 if *(*int32)(unsafe.Pointer(bp)) == 0 { 33753 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 33754 } else { 33755 var channel Tcl_Channel 33756 var instanceData ClientData 33757 33758 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 33759 if !(channel != 0) { 33760 return TCL_ERROR 33761 } 33762 33763 tcl.XTcl_Flush(tls, channel) 33764 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 33765 33766 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 33767 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 33768 } 33769 33770 return TCL_OK 33771 } 33772 33773 func test_blob_reopen(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33774 bp := tls.Alloc(16) 33775 defer tls.Free(16) 33776 33777 var rc int32 33778 33779 if objc != 3 { 33780 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15616) 33781 return TCL_ERROR 33782 } 33783 33784 if blobHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 33785 return TCL_ERROR 33786 } 33787 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 33788 return TCL_ERROR 33789 } 33790 33791 rc = sqlite3.Xsqlite3_blob_reopen(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 8))) 33792 if rc != SQLITE_OK { 33793 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 33794 } 33795 33796 return func() int32 { 33797 if rc == SQLITE_OK { 33798 return TCL_OK 33799 } 33800 return TCL_ERROR 33801 }() 33802 } 33803 33804 type TestCollationX1 = struct { 33805 Finterp uintptr 33806 FpCmp uintptr 33807 FpDel uintptr 33808 } 33809 33810 type TestCollationX = TestCollationX1 33811 33812 func testCreateCollationDel(tls *libc.TLS, pCtx uintptr) { 33813 var p uintptr = pCtx 33814 33815 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, (*TestCollationX)(unsafe.Pointer(p)).FpDel, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) 33816 if rc != TCL_OK { 33817 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 33818 } 33819 33820 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33821 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpCmp 33822 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33823 tcl.XTclFreeObj(tls, _objPtr) 33824 } 33825 } 33826 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 33827 var _objPtr uintptr = (*TestCollationX)(unsafe.Pointer(p)).FpDel 33828 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33829 tcl.XTclFreeObj(tls, _objPtr) 33830 } 33831 } 33832 sqlite3.Xsqlite3_free(tls, p) 33833 } 33834 33835 func testCreateCollationCmp(tls *libc.TLS, pCtx uintptr, nLeft int32, zLeft uintptr, nRight int32, zRight uintptr) int32 { 33836 bp := tls.Alloc(4) 33837 defer tls.Free(4) 33838 33839 var p uintptr = pCtx 33840 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpCmp) 33841 *(*int32)(unsafe.Pointer(bp)) = 0 33842 33843 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 33844 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zLeft, nLeft)) 33845 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zRight, nRight)) 33846 33847 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, pScript, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) || 33848 TCL_OK != tcl.XTcl_GetIntFromObj(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp), bp) { 33849 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 33850 } 33851 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33852 var _objPtr uintptr = pScript 33853 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33854 tcl.XTclFreeObj(tls, _objPtr) 33855 } 33856 } 33857 33858 return *(*int32)(unsafe.Pointer(bp)) 33859 } 33860 33861 func test_create_collation_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33862 bp := tls.Alloc(24) 33863 defer tls.Free(24) 33864 33865 var p uintptr 33866 33867 var rc int32 33868 33869 if objc != 5 { 33870 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15630) 33871 return TCL_ERROR 33872 } 33873 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33874 return TCL_ERROR 33875 } 33876 33877 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TestCollationX{}))) 33878 (*TestCollationX)(unsafe.Pointer(p)).FpCmp = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 33879 (*TestCollationX)(unsafe.Pointer(p)).FpDel = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 33880 (*TestCollationX)(unsafe.Pointer(p)).Finterp = interp 33881 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpCmp)).FrefCount++ 33882 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpDel)).FrefCount++ 33883 33884 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 16, 33885 p, *(*uintptr)(unsafe.Pointer(&struct { 33886 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33887 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 33888 if rc != SQLITE_MISUSE { 33889 tcl.XTcl_AppendResult(tls, interp, 33890 libc.VaList(bp, ts+15663, uintptr(0))) 33891 return TCL_ERROR 33892 } 33893 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), SQLITE_UTF8, 33894 p, *(*uintptr)(unsafe.Pointer(&struct { 33895 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 33896 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 33897 return TCL_OK 33898 } 33899 33900 type CreateFunctionV21 = struct { 33901 Finterp uintptr 33902 FpFunc uintptr 33903 FpStep uintptr 33904 FpFinal uintptr 33905 FpDestroy uintptr 33906 } 33907 33908 type CreateFunctionV2 = CreateFunctionV21 33909 33910 func cf2Func(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 33911 } 33912 33913 func cf2Step(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 33914 } 33915 33916 func cf2Final(tls *libc.TLS, ctx uintptr) { 33917 } 33918 33919 func cf2Destroy(tls *libc.TLS, pUser uintptr) { 33920 var p uintptr = pUser 33921 33922 if (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp != 0 && (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33923 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy, 0) 33924 if rc != TCL_OK { 33925 tcl.XTcl_BackgroundError(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp) 33926 } 33927 } 33928 33929 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 33930 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 33931 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc 33932 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33933 tcl.XTclFreeObj(tls, _objPtr) 33934 } 33935 } 33936 } 33937 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 33938 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 33939 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep 33940 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33941 tcl.XTclFreeObj(tls, _objPtr) 33942 } 33943 } 33944 } 33945 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 33946 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 33947 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal 33948 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33949 tcl.XTclFreeObj(tls, _objPtr) 33950 } 33951 } 33952 } 33953 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 33954 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 33955 var _objPtr uintptr = (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy 33956 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 33957 tcl.XTclFreeObj(tls, _objPtr) 33958 } 33959 } 33960 } 33961 sqlite3.Xsqlite3_free(tls, p) 33962 } 33963 33964 func test_create_function_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 33965 bp := tls.Alloc(180) 33966 defer tls.Free(180) 33967 33968 var zFunc uintptr 33969 33970 var p uintptr 33971 var i int32 33972 var rc int32 33973 33974 *(*[6]EncTable)(unsafe.Pointer(bp + 32)) = [6]EncTable{ 33975 {FzEnc: ts + 15728, Fenc: SQLITE_UTF8}, 33976 {FzEnc: ts + 15733, Fenc: SQLITE_UTF16}, 33977 {FzEnc: ts + 15739, Fenc: SQLITE_UTF16LE}, 33978 {FzEnc: ts + 15747, Fenc: SQLITE_UTF16BE}, 33979 {FzEnc: ts + 12774, Fenc: SQLITE_ANY}, 33980 {FzEnc: ts + 14193}, 33981 } 33982 33983 if objc < 5 || objc%2 == 0 { 33984 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15755) 33985 return TCL_ERROR 33986 } 33987 33988 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 33989 return TCL_ERROR 33990 } 33991 zFunc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33992 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 33993 return TCL_ERROR 33994 } 33995 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+32, int32(unsafe.Sizeof(EncTable{})), 33996 ts+15784, 0, bp+128) != 0 { 33997 return TCL_ERROR 33998 } 33999 *(*int32)(unsafe.Pointer(bp + 128)) = (*EncTable)(unsafe.Pointer(bp + 32 + uintptr(*(*int32)(unsafe.Pointer(bp + 128)))*16)).Fenc 34000 34001 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CreateFunctionV2{}))) 34002 34003 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(CreateFunctionV2{}))) 34004 (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp = interp 34005 34006 for i = 5; i < objc; i = i + 2 { 34007 *(*[5]uintptr)(unsafe.Pointer(bp + 136)) = [5]uintptr{ts + 15793, ts + 15799, ts + 15805, ts + 15812, uintptr(0)} 34008 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 { 34009 sqlite3.Xsqlite3_free(tls, p) 34010 return TCL_ERROR 34011 } 34012 34013 switch *(*int32)(unsafe.Pointer(bp + 176)) { 34014 case 0: 34015 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 34016 break 34017 case 1: 34018 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 34019 break 34020 case 2: 34021 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 34022 break 34023 case 3: 34024 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 34025 break 34026 } 34027 } 34028 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 34029 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc) 34030 } 34031 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 34032 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep) 34033 } 34034 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 34035 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal) 34036 } 34037 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 34038 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy) 34039 } 34040 34041 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 34042 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc)).FrefCount++ 34043 } 34044 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 34045 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpStep)).FrefCount++ 34046 } 34047 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 34048 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal)).FrefCount++ 34049 } 34050 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 34051 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy)).FrefCount++ 34052 } 34053 34054 rc = sqlite3.Xsqlite3_create_function_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zFunc, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 128)), p, 34055 func() uintptr { 34056 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 34057 return *(*uintptr)(unsafe.Pointer(&struct { 34058 f func(*libc.TLS, uintptr, int32, uintptr) 34059 }{cf2Func})) 34060 } 34061 return uintptr(0) 34062 }(), 34063 func() uintptr { 34064 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 34065 return *(*uintptr)(unsafe.Pointer(&struct { 34066 f func(*libc.TLS, uintptr, int32, uintptr) 34067 }{cf2Step})) 34068 } 34069 return uintptr(0) 34070 }(), 34071 func() uintptr { 34072 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 34073 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Final})) 34074 } 34075 return uintptr(0) 34076 }(), 34077 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Destroy}))) 34078 if rc != SQLITE_OK { 34079 tcl.XTcl_ResetResult(tls, interp) 34080 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 34081 return TCL_ERROR 34082 } 34083 return TCL_OK 34084 } 34085 34086 type EncTable = struct { 34087 FzEnc uintptr 34088 Fenc int32 34089 F__ccgo_pad1 [4]byte 34090 } 34091 34092 func test_load_extension(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 34093 bp := tls.Alloc(88) 34094 defer tls.Free(88) 34095 34096 var db uintptr 34097 _ = db 34098 var rc int32 34099 var zDb uintptr 34100 var zFile uintptr 34101 _ = zFile 34102 var zProc uintptr = uintptr(0) 34103 _ = zProc 34104 var zErr uintptr = uintptr(0) 34105 34106 if objc != 4 && objc != 3 { 34107 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15828) 34108 return TCL_ERROR 34109 } 34110 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34111 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34112 if objc == 4 { 34113 zProc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 34114 } 34115 34116 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+24) != 0) { 34117 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 34118 return TCL_ERROR 34119 } 34120 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)).Fdb 34121 34122 rc = SQLITE_ERROR 34123 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+15850, 0) 34124 _ = zProc 34125 _ = zFile 34126 if rc != SQLITE_OK { 34127 tcl.XTcl_SetResult(tls, interp, func() uintptr { 34128 if zErr != 0 { 34129 return zErr 34130 } 34131 return ts + 584 34132 }(), uintptr(1)) 34133 rc = TCL_ERROR 34134 } else { 34135 rc = TCL_OK 34136 } 34137 sqlite3.Xsqlite3_free(tls, zErr) 34138 34139 return rc 34140 } 34141 34142 func test_enable_load(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 34143 bp := tls.Alloc(100) 34144 defer tls.Free(100) 34145 34146 var db uintptr 34147 _ = db 34148 var zDb uintptr 34149 34150 if objc != 3 { 34151 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15892) 34152 return TCL_ERROR 34153 } 34154 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34155 34156 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+32) != 0) { 34157 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 34158 return TCL_ERROR 34159 } 34160 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 32)).FobjClientData)).Fdb 34161 34162 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+96) != 0 { 34163 return TCL_ERROR 34164 } 34165 34166 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+15850)) 34167 return TCL_ERROR 34168 } 34169 34170 func sqlite_abort(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34171 libc.Xexit(tls, 255) 34172 34173 return TCL_OK 34174 } 34175 34176 func testFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 34177 var zArg0 uintptr 34178 __1: 34179 if !(argc >= 2) { 34180 goto __2 34181 } 34182 zArg0 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 34183 if !(zArg0 != 0) { 34184 goto __3 34185 } 34186 if !(0 == sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2577)) { 34187 goto __5 34188 } 34189 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 34190 goto __6 34191 __5: 34192 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+3973) == 0) { 34193 goto __7 34194 } 34195 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 34196 goto __8 34197 __7: 34198 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+15908) == 0) { 34199 goto __9 34200 } 34201 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), -1, 34202 libc.UintptrFromInt32(-1)) 34203 goto __10 34204 __9: 34205 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2562) == 0) { 34206 goto __11 34207 } 34208 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 34209 goto __12 34210 __11: 34211 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+7939) == 0) { 34212 goto __13 34213 } 34214 sqlite3.Xsqlite3_result_null(tls, context) 34215 goto __14 34216 __13: 34217 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+10013) == 0) { 34218 goto __15 34219 } 34220 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv + uintptr(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))*8))) 34221 goto __16 34222 __15: 34223 goto error_out 34224 __16: 34225 ; 34226 __14: 34227 ; 34228 __12: 34229 ; 34230 __10: 34231 ; 34232 __8: 34233 ; 34234 __6: 34235 ; 34236 goto __4 34237 __3: 34238 goto error_out 34239 __4: 34240 ; 34241 argc = argc - 2 34242 argv += 8 * uintptr(2) 34243 goto __1 34244 __2: 34245 ; 34246 return 34247 34248 error_out: 34249 sqlite3.Xsqlite3_result_error(tls, context, 34250 ts+15915, -1) 34251 } 34252 34253 func test_register_func(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34254 bp := tls.Alloc(56) 34255 defer tls.Free(56) 34256 34257 var rc int32 34258 if argc != 3 { 34259 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34260 ts+15983, 0)) 34261 return TCL_ERROR 34262 } 34263 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 34264 return TCL_ERROR 34265 } 34266 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), -1, SQLITE_UTF8, uintptr(0), 34267 *(*uintptr)(unsafe.Pointer(&struct { 34268 f func(*libc.TLS, uintptr, int32, uintptr) 34269 }{testFunc})), uintptr(0), uintptr(0)) 34270 if rc != 0 { 34271 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 34272 return TCL_ERROR 34273 } 34274 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 34275 return TCL_ERROR 34276 } 34277 return TCL_OK 34278 } 34279 34280 func test_finalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34281 bp := tls.Alloc(40) 34282 defer tls.Free(40) 34283 34284 var rc int32 34285 var db uintptr = uintptr(0) 34286 34287 if objc != 2 { 34288 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34289 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34290 return TCL_ERROR 34291 } 34292 34293 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34294 return TCL_ERROR 34295 } 34296 34297 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 { 34298 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34299 } 34300 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34301 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 34302 if db != 0 && sqlite3TestErrCode(tls, interp, db, rc) != 0 { 34303 return TCL_ERROR 34304 } 34305 return TCL_OK 34306 } 34307 34308 func test_stmt_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34309 bp := tls.Alloc(16) 34310 defer tls.Free(16) 34311 34312 var iValue int32 34313 var i int32 34314 *(*int32)(unsafe.Pointer(bp + 8)) = 0 34315 34316 var zOpName uintptr 34317 34318 if objc != 4 { 34319 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16009) 34320 return TCL_ERROR 34321 } 34322 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34323 return TCL_ERROR 34324 } 34325 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34326 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 34327 FzName uintptr 34328 Fop int32 34329 F__ccgo_pad1 [4]byte 34330 }{}))); i++ { 34331 if libc.Xstrcmp(tls, aOp[i].FzName, zOpName) == 0 { 34332 *(*int32)(unsafe.Pointer(bp + 8)) = aOp[i].Fop 34333 break 34334 } 34335 } 34336 if i >= int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 34337 FzName uintptr 34338 Fop int32 34339 F__ccgo_pad1 [4]byte 34340 }{}))) { 34341 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 34342 return TCL_ERROR 34343 } 34344 } 34345 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 34346 return TCL_ERROR 34347 } 34348 iValue = sqlite3.Xsqlite3_stmt_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 34349 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iValue)) 34350 return TCL_OK 34351 } 34352 34353 var aOp = [7]struct { 34354 FzName uintptr 34355 Fop int32 34356 F__ccgo_pad1 [4]byte 34357 }{ 34358 {FzName: ts + 16034, Fop: SQLITE_STMTSTATUS_FULLSCAN_STEP}, 34359 {FzName: ts + 16066, Fop: SQLITE_STMTSTATUS_SORT}, 34360 {FzName: ts + 16089, Fop: SQLITE_STMTSTATUS_AUTOINDEX}, 34361 {FzName: ts + 16117, Fop: SQLITE_STMTSTATUS_VM_STEP}, 34362 {FzName: ts + 16143, Fop: SQLITE_STMTSTATUS_REPREPARE}, 34363 {FzName: ts + 16171, Fop: SQLITE_STMTSTATUS_RUN}, 34364 {FzName: ts + 16193, Fop: SQLITE_STMTSTATUS_MEMUSED}, 34365 } 34366 34367 func test_config_sorterref(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34368 bp := tls.Alloc(12) 34369 defer tls.Free(12) 34370 34371 if objc != 2 { 34372 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 34373 return TCL_ERROR 34374 } 34375 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 34376 return TCL_ERROR 34377 } 34378 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_SORTERREF_SIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 34379 return TCL_OK 34380 } 34381 34382 func vfsCurrentTimeInt64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34383 bp := tls.Alloc(8) 34384 defer tls.Free(8) 34385 34386 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 34387 if objc != 1 { 34388 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 34389 return TCL_ERROR 34390 } 34391 (*struct { 34392 f func(*libc.TLS, uintptr, uintptr) int32 34393 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTimeInt64})).f(tls, pVfs, bp) 34394 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*i64)(unsafe.Pointer(bp)))) 34395 return TCL_OK 34396 } 34397 34398 func test_snapshot_get(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34399 bp := tls.Alloc(116) 34400 defer tls.Free(116) 34401 34402 var rc int32 34403 34404 var zName uintptr 34405 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 34406 34407 if objc != 3 { 34408 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 34409 return TCL_ERROR 34410 } 34411 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34412 return TCL_ERROR 34413 } 34414 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34415 34416 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 34417 if rc != SQLITE_OK { 34418 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34419 return TCL_ERROR 34420 } else { 34421 if sqlite3TestMakePointerStr(tls, interp, bp+16, *(*uintptr)(unsafe.Pointer(bp + 8))) != 0 { 34422 return TCL_ERROR 34423 } 34424 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 34425 } 34426 return TCL_OK 34427 } 34428 34429 func test_snapshot_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34430 bp := tls.Alloc(8) 34431 defer tls.Free(8) 34432 34433 var rc int32 34434 34435 var zName uintptr 34436 34437 if objc != 3 { 34438 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 34439 return TCL_ERROR 34440 } 34441 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34442 return TCL_ERROR 34443 } 34444 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34445 34446 rc = sqlite3.Xsqlite3_snapshot_recover(tls, *(*uintptr)(unsafe.Pointer(bp)), zName) 34447 if rc != SQLITE_OK { 34448 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34449 return TCL_ERROR 34450 } else { 34451 tcl.XTcl_ResetResult(tls, interp) 34452 } 34453 return TCL_OK 34454 } 34455 34456 func test_snapshot_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34457 bp := tls.Alloc(8) 34458 defer tls.Free(8) 34459 34460 var rc int32 34461 34462 var zName uintptr 34463 var pSnapshot uintptr 34464 34465 if objc != 4 { 34466 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 34467 return TCL_ERROR 34468 } 34469 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34470 return TCL_ERROR 34471 } 34472 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34473 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)))) 34474 34475 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, pSnapshot) 34476 if rc != SQLITE_OK { 34477 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34478 return TCL_ERROR 34479 } else { 34480 tcl.XTcl_ResetResult(tls, interp) 34481 } 34482 return TCL_OK 34483 } 34484 34485 func test_snapshot_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34486 var pSnapshot uintptr 34487 if objc != 2 { 34488 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16254) 34489 return TCL_ERROR 34490 } 34491 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 34492 sqlite3.Xsqlite3_snapshot_free(tls, pSnapshot) 34493 return TCL_OK 34494 } 34495 34496 func test_snapshot_cmp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34497 var res int32 34498 var p1 uintptr 34499 var p2 uintptr 34500 if objc != 3 { 34501 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 34502 return TCL_ERROR 34503 } 34504 p1 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 34505 p2 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 34506 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 34507 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 34508 return TCL_OK 34509 } 34510 34511 func test_snapshot_get_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34512 bp := tls.Alloc(16) 34513 defer tls.Free(16) 34514 34515 var rc int32 34516 34517 var zName uintptr 34518 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 34519 34520 if objc != 3 { 34521 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 34522 return TCL_ERROR 34523 } 34524 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 34525 return TCL_ERROR 34526 } 34527 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34528 34529 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 34530 if rc != SQLITE_OK { 34531 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34532 return TCL_ERROR 34533 } else { 34534 tcl.XTcl_SetObjResult(tls, interp, 34535 tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), int32(unsafe.Sizeof(sqlite3_snapshot{})))) 34536 sqlite3.Xsqlite3_snapshot_free(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 34537 } 34538 return TCL_OK 34539 } 34540 34541 func test_snapshot_open_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34542 bp := tls.Alloc(28) 34543 defer tls.Free(28) 34544 34545 var rc int32 34546 34547 var zName uintptr 34548 var pBlob uintptr 34549 34550 if objc != 4 { 34551 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 34552 return TCL_ERROR 34553 } 34554 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 34555 return TCL_ERROR 34556 } 34557 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 34558 pBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) 34559 if uint64(*(*int32)(unsafe.Pointer(bp + 24))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) { 34560 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 34561 return TCL_ERROR 34562 } 34563 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zName, pBlob) 34564 if rc != SQLITE_OK { 34565 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34566 return TCL_ERROR 34567 } 34568 return TCL_OK 34569 } 34570 34571 func test_snapshot_cmp_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34572 bp := tls.Alloc(24) 34573 defer tls.Free(24) 34574 34575 var res int32 34576 var p1 uintptr 34577 var p2 uintptr 34578 34579 if objc != 3 { 34580 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 34581 return TCL_ERROR 34582 } 34583 34584 p1 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 34585 p2 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) 34586 34587 if uint64(*(*int32)(unsafe.Pointer(bp + 16))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) || *(*int32)(unsafe.Pointer(bp + 16)) != *(*int32)(unsafe.Pointer(bp + 20)) { 34588 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 34589 return TCL_ERROR 34590 } 34591 34592 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 34593 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 34594 return TCL_OK 34595 } 34596 34597 func test_delete_database(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34598 var rc int32 34599 var zFile uintptr 34600 if objc != 2 { 34601 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16296) 34602 return TCL_ERROR 34603 } 34604 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34605 rc = sqlite3_delete_database(tls, zFile) 34606 34607 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 34608 return TCL_OK 34609 } 34610 34611 func test_atomic_batch_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34612 bp := tls.Alloc(32) 34613 defer tls.Free(32) 34614 34615 var zFile uintptr = uintptr(0) 34616 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 34617 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 34618 var bRes int32 = 0 34619 var dc int32 = 0 34620 var rc int32 34621 34622 if objc != 2 { 34623 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16301) 34624 return TCL_ERROR 34625 } 34626 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 34627 34628 rc = sqlite3.Xsqlite3_open(tls, zFile, bp+16) 34629 if rc != SQLITE_OK { 34630 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 34631 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 34632 return TCL_ERROR 34633 } 34634 34635 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 34636 dc = (*struct { 34637 f func(*libc.TLS, uintptr) int32 34638 })(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))) 34639 if dc&SQLITE_IOCAP_BATCH_ATOMIC != 0 { 34640 bRes = 1 34641 } 34642 34643 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bRes)) 34644 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 34645 return TCL_OK 34646 } 34647 34648 func test_next_stmt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34649 bp := tls.Alloc(114) 34650 defer tls.Free(114) 34651 34652 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 34653 34654 if objc != 3 { 34655 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34656 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16306, 0)) 34657 return TCL_ERROR 34658 } 34659 34660 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 34661 return TCL_ERROR 34662 } 34663 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+56) != 0 { 34664 return TCL_ERROR 34665 } 34666 *(*uintptr)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_next_stmt(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56))) 34667 if *(*uintptr)(unsafe.Pointer(bp + 56)) != 0 { 34668 if sqlite3TestMakePointerStr(tls, interp, bp+64, *(*uintptr)(unsafe.Pointer(bp + 56))) != 0 { 34669 return TCL_ERROR 34670 } 34671 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+64, 0)) 34672 } 34673 return TCL_OK 34674 } 34675 34676 func test_stmt_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34677 bp := tls.Alloc(40) 34678 defer tls.Free(40) 34679 34680 var rc int32 34681 34682 if objc != 2 { 34683 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34684 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34685 return TCL_ERROR 34686 } 34687 34688 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34689 return TCL_ERROR 34690 } 34691 rc = sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34692 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 34693 return TCL_OK 34694 } 34695 34696 func test_stmt_isexplain(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34697 bp := tls.Alloc(40) 34698 defer tls.Free(40) 34699 34700 var rc int32 34701 34702 if objc != 2 { 34703 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34704 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34705 return TCL_ERROR 34706 } 34707 34708 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34709 return TCL_ERROR 34710 } 34711 rc = sqlite3.Xsqlite3_stmt_isexplain(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34712 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 34713 return TCL_OK 34714 } 34715 34716 func test_stmt_busy(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34717 bp := tls.Alloc(40) 34718 defer tls.Free(40) 34719 34720 var rc int32 34721 34722 if objc != 2 { 34723 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34724 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34725 return TCL_ERROR 34726 } 34727 34728 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34729 return TCL_ERROR 34730 } 34731 rc = sqlite3.Xsqlite3_stmt_busy(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34732 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(rc != 0))) 34733 return TCL_OK 34734 } 34735 34736 func uses_stmt_journal(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34737 bp := tls.Alloc(40) 34738 defer tls.Free(40) 34739 34740 if objc != 2 { 34741 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34742 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 34743 return TCL_ERROR 34744 } 34745 34746 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34747 return TCL_ERROR 34748 } 34749 sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34750 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)) + 200))&0x20>>5) != 0))) 34751 return TCL_OK 34752 } 34753 34754 func test_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34755 bp := tls.Alloc(40) 34756 defer tls.Free(40) 34757 34758 var rc int32 34759 34760 if objc != 2 { 34761 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34762 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34763 return TCL_ERROR 34764 } 34765 34766 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34767 return TCL_ERROR 34768 } 34769 34770 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34771 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 && sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 34772 return TCL_ERROR 34773 } 34774 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 34775 34776 return TCL_OK 34777 } 34778 34779 func test_expired(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34780 bp := tls.Alloc(40) 34781 defer tls.Free(40) 34782 34783 if objc != 2 { 34784 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34785 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 34786 return TCL_ERROR 34787 } 34788 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34789 return TCL_ERROR 34790 } 34791 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(sqlite3.Xsqlite3_expired(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) != 0))) 34792 return TCL_OK 34793 } 34794 34795 func test_transfer_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34796 bp := tls.Alloc(48) 34797 defer tls.Free(48) 34798 34799 if objc != 3 { 34800 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34801 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16321, 0)) 34802 return TCL_ERROR 34803 } 34804 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34805 return TCL_ERROR 34806 } 34807 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+40) != 0 { 34808 return TCL_ERROR 34809 } 34810 tcl.XTcl_SetObjResult(tls, interp, 34811 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_transfer_bindings(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))))) 34812 return TCL_OK 34813 } 34814 34815 func test_changes(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34816 bp := tls.Alloc(40) 34817 defer tls.Free(40) 34818 34819 if objc != 2 { 34820 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 34821 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 34822 return TCL_ERROR 34823 } 34824 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 34825 return TCL_ERROR 34826 } 34827 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_changes(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 34828 return TCL_OK 34829 } 34830 34831 var sqlite_static_bind_value uintptr = uintptr(0) 34832 var sqlite_static_bind_nbyte int32 = 0 34833 34834 func test_bind(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34835 bp := tls.Alloc(142) 34836 defer tls.Free(142) 34837 34838 var rc int32 34839 34840 if argc != 5 { 34841 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34842 ts+16340, 0)) 34843 return TCL_ERROR 34844 } 34845 if getStmtPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 34846 return TCL_ERROR 34847 } 34848 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+88) != 0 { 34849 return TCL_ERROR 34850 } 34851 if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+7939) == 0 { 34852 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88))) 34853 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16376) == 0 { 34854 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, -1, uintptr(0)) 34855 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16383) == 0 { 34856 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, 34857 sqlite_static_bind_nbyte, uintptr(0)) 34858 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16397) == 0 { 34859 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)) 34860 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16404) == 0 { 34861 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), ts+16411, 10, uintptr(0)) 34862 } else { 34863 tcl.XTcl_AppendResult(tls, interp, 34864 libc.VaList(bp+32, ts+16422, 0)) 34865 return TCL_ERROR 34866 } 34867 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), rc) != 0 { 34868 return TCL_ERROR 34869 } 34870 if rc != 0 { 34871 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+92, ts+16476, libc.VaList(bp+48, rc)) 34872 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 34873 return TCL_ERROR 34874 } 34875 return TCL_OK 34876 } 34877 34878 var pTestCollateInterp uintptr 34879 34880 func test_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 34881 bp := tls.Alloc(4) 34882 defer tls.Free(4) 34883 34884 var i uintptr = pTestCollateInterp 34885 var encin int32 = int32(pCtx) 34886 34887 var n int32 34888 var pVal uintptr 34889 var pX uintptr 34890 34891 pX = tcl.XTcl_NewStringObj(tls, ts+16482, -1) 34892 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 34893 34894 switch encin { 34895 case SQLITE_UTF8: 34896 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 34897 break 34898 case SQLITE_UTF16LE: 34899 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 34900 break 34901 case SQLITE_UTF16BE: 34902 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 34903 break 34904 default: 34905 } 34906 34907 sqlite3.Xsqlite3BeginBenignMalloc(tls) 34908 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 34909 if pVal != 0 { 34910 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nA, zA, uint8(encin), uintptr(0)) 34911 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 34912 tcl.XTcl_ListObjAppendElement(tls, i, pX, 34913 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 34914 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nB, zB, uint8(encin), uintptr(0)) 34915 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 34916 tcl.XTcl_ListObjAppendElement(tls, i, pX, 34917 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 34918 sqlite3.Xsqlite3ValueFree(tls, pVal) 34919 } 34920 sqlite3.Xsqlite3EndBenignMalloc(tls) 34921 34922 tcl.XTcl_EvalObjEx(tls, i, pX, 0) 34923 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 34924 var _objPtr uintptr = pX 34925 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 34926 tcl.XTclFreeObj(tls, _objPtr) 34927 } 34928 } 34929 tcl.XTcl_GetIntFromObj(tls, i, tcl.XTcl_GetObjResult(tls, i), bp) 34930 return *(*int32)(unsafe.Pointer(bp)) 34931 } 34932 34933 func test_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34934 bp := tls.Alloc(60) 34935 defer tls.Free(60) 34936 34937 var pVal uintptr 34938 var rc int32 34939 var zUtf16 uintptr 34940 34941 if !(objc != 5) { 34942 goto __1 34943 } 34944 goto bad_args 34945 __1: 34946 ; 34947 pTestCollateInterp = interp 34948 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 34949 goto __2 34950 } 34951 return TCL_ERROR 34952 __2: 34953 ; 34954 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56)) { 34955 goto __3 34956 } 34957 return TCL_ERROR 34958 __3: 34959 ; 34960 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF8, 34961 uintptr(SQLITE_UTF8), func() uintptr { 34962 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 34963 return *(*uintptr)(unsafe.Pointer(&struct { 34964 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34965 }{test_collate_func})) 34966 } 34967 return uintptr(0) 34968 }()) 34969 if !(rc == SQLITE_OK) { 34970 goto __4 34971 } 34972 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+56)) { 34973 goto __5 34974 } 34975 return TCL_ERROR 34976 __5: 34977 ; 34978 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF16LE, 34979 uintptr(SQLITE_UTF16LE), func() uintptr { 34980 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 34981 return *(*uintptr)(unsafe.Pointer(&struct { 34982 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 34983 }{test_collate_func})) 34984 } 34985 return uintptr(0) 34986 }()) 34987 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+56)) { 34988 goto __6 34989 } 34990 return TCL_ERROR 34991 __6: 34992 ; 34993 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 34994 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 34995 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+16482, uint8(SQLITE_UTF8), uintptr(0)) 34996 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, func() uint8 { 34997 if int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&sqlite3.Xsqlite3one))))) == 0 { 34998 return uint8(SQLITE_UTF16BE) 34999 } 35000 return uint8(SQLITE_UTF16LE) 35001 }()) 35002 if !((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FmallocFailed != 0) { 35003 goto __7 35004 } 35005 rc = SQLITE_NOMEM 35006 goto __8 35007 __7: 35008 rc = sqlite3.Xsqlite3_create_collation16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zUtf16, SQLITE_UTF16BE, 35009 uintptr(SQLITE_UTF16BE), func() uintptr { 35010 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 35011 return *(*uintptr)(unsafe.Pointer(&struct { 35012 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 35013 }{test_collate_func})) 35014 } 35015 return uintptr(0) 35016 }()) 35017 __8: 35018 ; 35019 sqlite3.Xsqlite3ValueFree(tls, pVal) 35020 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 35021 __4: 35022 ; 35023 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0) { 35024 goto __9 35025 } 35026 return TCL_ERROR 35027 __9: 35028 ; 35029 if !(rc != SQLITE_OK) { 35030 goto __10 35031 } 35032 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35033 return TCL_ERROR 35034 __10: 35035 ; 35036 return TCL_OK 35037 35038 bad_args: 35039 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+14949, 35040 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 35041 return TCL_ERROR 35042 } 35043 35044 func test_utf16bin_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 35045 var nCmp int32 = func() int32 { 35046 if nA > nB { 35047 return nB 35048 } 35049 return nA 35050 }() 35051 var res int32 = libc.Xmemcmp(tls, zA, zB, uint64(nCmp)) 35052 if res == 0 { 35053 res = nA - nB 35054 } 35055 return res 35056 } 35057 35058 func test_utf16bin_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35059 bp := tls.Alloc(8) 35060 defer tls.Free(8) 35061 35062 var rc int32 35063 35064 if !(objc != 2) { 35065 goto __1 35066 } 35067 goto bad_args 35068 __1: 35069 ; 35070 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 35071 goto __2 35072 } 35073 return TCL_ERROR 35074 __2: 35075 ; 35076 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16552, SQLITE_UTF16, uintptr(0), 35077 *(*uintptr)(unsafe.Pointer(&struct { 35078 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 35079 }{test_utf16bin_collate_func}))) 35080 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 35081 goto __3 35082 } 35083 return TCL_ERROR 35084 __3: 35085 ; 35086 return TCL_OK 35087 35088 bad_args: 35089 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 35090 return TCL_ERROR 35091 } 35092 35093 var zNeededCollation [200]uint8 35094 var pzNeededCollation uintptr = 0 35095 35096 func test_collate_needed_cb(tls *libc.TLS, pCtx uintptr, db uintptr, eTextRep int32, pName uintptr) { 35097 var enc int32 = int32((*sqlite31)(unsafe.Pointer(db)).Fenc) 35098 var i int32 35099 var z uintptr 35100 z = pName 35101 i = 0 35102 for ; *(*uint8)(unsafe.Pointer(z)) != 0 || *(*uint8)(unsafe.Pointer(z + 1)) != 0; z++ { 35103 if *(*uint8)(unsafe.Pointer(z)) != 0 { 35104 zNeededCollation[libc.PostIncInt32(&i, 1)] = *(*uint8)(unsafe.Pointer(z)) 35105 } 35106 } 35107 zNeededCollation[i] = uint8(0) 35108 sqlite3.Xsqlite3_create_collation(tls, 35109 db, ts+16482, int32((*sqlite31)(unsafe.Pointer(db)).Fenc), uintptr(intptr_t(enc)), *(*uintptr)(unsafe.Pointer(&struct { 35110 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 35111 }{test_collate_func}))) 35112 } 35113 35114 func test_collate_needed(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35115 bp := tls.Alloc(8) 35116 defer tls.Free(8) 35117 35118 var rc int32 35119 35120 if !(objc != 2) { 35121 goto __1 35122 } 35123 goto bad_args 35124 __1: 35125 ; 35126 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 35127 goto __2 35128 } 35129 return TCL_ERROR 35130 __2: 35131 ; 35132 rc = sqlite3.Xsqlite3_collation_needed16(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 35133 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 35134 }{test_collate_needed_cb}))) 35135 zNeededCollation[0] = uint8(0) 35136 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 35137 goto __3 35138 } 35139 return TCL_ERROR 35140 __3: 35141 ; 35142 return TCL_OK 35143 35144 bad_args: 35145 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 35146 return TCL_ERROR 35147 } 35148 35149 var unaligned_string_counter int32 = 0 35150 35151 func alignmentCollFunc(tls *libc.TLS, NotUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 35152 var rc int32 35153 var n int32 35154 if nKey1 < nKey2 { 35155 n = nKey1 35156 } else { 35157 n = nKey2 35158 } 35159 if nKey1 > 0 && 1 == 1&int32(pKey1) { 35160 unaligned_string_counter++ 35161 } 35162 if nKey2 > 0 && 1 == 1&int32(pKey2) { 35163 unaligned_string_counter++ 35164 } 35165 rc = libc.Xmemcmp(tls, pKey1, pKey2, uint64(n)) 35166 if rc == 0 { 35167 rc = nKey1 - nKey2 35168 } 35169 return rc 35170 } 35171 35172 func add_alignment_test_collations(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35173 bp := tls.Alloc(8) 35174 defer tls.Free(8) 35175 35176 if objc >= 2 { 35177 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35178 return TCL_ERROR 35179 } 35180 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16561, SQLITE_UTF16, 35181 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 35182 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 35183 }{alignmentCollFunc}))) 35184 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16577, SQLITE_UTF16_ALIGNED, 35185 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 35186 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 35187 }{alignmentCollFunc}))) 35188 } 35189 return SQLITE_OK 35190 } 35191 35192 func test_function_utf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 35193 var interp uintptr 35194 var pX uintptr 35195 var pVal uintptr 35196 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 35197 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 35198 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 35199 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 35200 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 35201 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 35202 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 35203 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35204 var _objPtr uintptr = pX 35205 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 35206 tcl.XTclFreeObj(tls, _objPtr) 35207 } 35208 } 35209 sqlite3.Xsqlite3_result_text(tls, pCtx, tcl.XTcl_GetStringResult(tls, interp), -1, libc.UintptrFromInt32(-1)) 35210 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 35211 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 35212 uint8(SQLITE_UTF8), uintptr(0)) 35213 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16be(tls, pVal), 35214 -1, libc.UintptrFromInt32(-1)) 35215 sqlite3.Xsqlite3ValueFree(tls, pVal) 35216 } 35217 35218 func test_function_utf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 35219 var interp uintptr 35220 var pX uintptr 35221 var pVal uintptr 35222 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 35223 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 35224 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 35225 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 35226 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 35227 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 35228 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 35229 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35230 var _objPtr uintptr = pX 35231 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 35232 tcl.XTclFreeObj(tls, _objPtr) 35233 } 35234 } 35235 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 35236 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 35237 uint8(SQLITE_UTF8), uintptr(0)) 35238 sqlite3.Xsqlite3_result_text(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, pVal), -1, libc.UintptrFromInt32(-1)) 35239 sqlite3.Xsqlite3ValueFree(tls, pVal) 35240 } 35241 35242 func test_function_utf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 35243 var interp uintptr 35244 var pX uintptr 35245 var pVal uintptr 35246 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 35247 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 35248 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 35249 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 35250 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 35251 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 35252 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 35253 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35254 var _objPtr uintptr = pX 35255 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 35256 tcl.XTclFreeObj(tls, _objPtr) 35257 } 35258 } 35259 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 35260 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 35261 uint8(SQLITE_UTF8), uintptr(0)) 35262 sqlite3.Xsqlite3_result_text16(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 35263 -1, libc.UintptrFromInt32(-1)) 35264 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 35265 -1, libc.UintptrFromInt32(-1)) 35266 sqlite3.Xsqlite3_result_text16le(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 35267 -1, libc.UintptrFromInt32(-1)) 35268 sqlite3.Xsqlite3ValueFree(tls, pVal) 35269 } 35270 35271 func test_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35272 bp := tls.Alloc(44) 35273 defer tls.Free(44) 35274 35275 if !(objc != 5) { 35276 goto __1 35277 } 35278 goto bad_args 35279 __1: 35280 ; 35281 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0) { 35282 goto __2 35283 } 35284 return TCL_ERROR 35285 __2: 35286 ; 35287 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40)) { 35288 goto __3 35289 } 35290 return TCL_ERROR 35291 __3: 35292 ; 35293 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 35294 goto __4 35295 } 35296 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF8, 35297 interp, *(*uintptr)(unsafe.Pointer(&struct { 35298 f func(*libc.TLS, uintptr, int32, uintptr) 35299 }{test_function_utf8})), uintptr(0), uintptr(0)) 35300 __4: 35301 ; 35302 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+40)) { 35303 goto __5 35304 } 35305 return TCL_ERROR 35306 __5: 35307 ; 35308 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 35309 goto __6 35310 } 35311 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16LE, 35312 interp, *(*uintptr)(unsafe.Pointer(&struct { 35313 f func(*libc.TLS, uintptr, int32, uintptr) 35314 }{test_function_utf16le})), uintptr(0), uintptr(0)) 35315 __6: 35316 ; 35317 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40)) { 35318 goto __7 35319 } 35320 return TCL_ERROR 35321 __7: 35322 ; 35323 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 35324 goto __8 35325 } 35326 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16BE, 35327 interp, *(*uintptr)(unsafe.Pointer(&struct { 35328 f func(*libc.TLS, uintptr, int32, uintptr) 35329 }{test_function_utf16be})), uintptr(0), uintptr(0)) 35330 __8: 35331 ; 35332 return TCL_OK 35333 bad_args: 35334 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35335 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 35336 return TCL_ERROR 35337 } 35338 35339 func test_errstr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35340 var zCode uintptr 35341 var i int32 35342 if objc != 1 { 35343 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16605) 35344 } 35345 35346 zCode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 35347 for i = 0; i < 200; i++ { 35348 if 0 == libc.Xstrcmp(tls, sqlite3.Xsqlite3ErrName(tls, i), zCode) { 35349 break 35350 } 35351 } 35352 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, i), uintptr(0)) 35353 return TCL_OK 35354 } 35355 35356 func test_breakpoint(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35357 return TCL_OK 35358 } 35359 35360 func test_bind_zeroblob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35361 bp := tls.Alloc(16) 35362 defer tls.Free(16) 35363 35364 var rc int32 35365 35366 if objc != 4 { 35367 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 35368 return TCL_ERROR 35369 } 35370 35371 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35372 return TCL_ERROR 35373 } 35374 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 35375 return TCL_ERROR 35376 } 35377 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 35378 return TCL_ERROR 35379 } 35380 35381 rc = sqlite3.Xsqlite3_bind_zeroblob(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 35382 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp))), rc) != 0 { 35383 return TCL_ERROR 35384 } 35385 if rc != SQLITE_OK { 35386 return TCL_ERROR 35387 } 35388 35389 return TCL_OK 35390 } 35391 35392 func test_bind_zeroblob64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35393 bp := tls.Alloc(40) 35394 defer tls.Free(40) 35395 35396 var rc int32 35397 35398 if objc != 4 { 35399 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 35400 return TCL_ERROR 35401 } 35402 35403 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 35404 return TCL_ERROR 35405 } 35406 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 35407 return TCL_ERROR 35408 } 35409 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+32) != 0 { 35410 return TCL_ERROR 35411 } 35412 35413 rc = sqlite3.Xsqlite3_bind_zeroblob64(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 24)), uint64(*(*Tcl_WideInt)(unsafe.Pointer(bp + 32)))) 35414 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), rc) != 0 { 35415 return TCL_ERROR 35416 } 35417 if rc != SQLITE_OK { 35418 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35419 return TCL_ERROR 35420 } 35421 35422 return TCL_OK 35423 } 35424 35425 func test_bind_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35426 bp := tls.Alloc(48) 35427 defer tls.Free(48) 35428 35429 var rc int32 35430 35431 if objc != 4 { 35432 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35433 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35434 return TCL_ERROR 35435 } 35436 35437 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35438 return TCL_ERROR 35439 } 35440 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35441 return TCL_ERROR 35442 } 35443 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 35444 return TCL_ERROR 35445 } 35446 35447 rc = sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*int32)(unsafe.Pointer(bp + 44))) 35448 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35449 return TCL_ERROR 35450 } 35451 if rc != SQLITE_OK { 35452 return TCL_ERROR 35453 } 35454 35455 return TCL_OK 35456 } 35457 35458 func test_intarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35459 var i int32 35460 35461 sqlite3.Xsqlite3_free(tls, p) 35462 p = uintptr(0) 35463 if objc > 1 { 35464 p = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(objc-1))) 35465 if p == uintptr(0) { 35466 return TCL_ERROR 35467 } 35468 for i = 0; i < objc-1; i++ { 35469 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p+uintptr(i)*4) != 0 { 35470 sqlite3.Xsqlite3_free(tls, p) 35471 p = uintptr(0) 35472 return TCL_ERROR 35473 } 35474 } 35475 } 35476 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p))) 35477 return TCL_OK 35478 } 35479 35480 var p uintptr = uintptr(0) 35481 35482 func test_int64array_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35483 bp := tls.Alloc(8) 35484 defer tls.Free(8) 35485 35486 var i int32 35487 35488 sqlite3.Xsqlite3_free(tls, p1) 35489 p1 = uintptr(0) 35490 if objc > 1 { 35491 p1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(objc-1))) 35492 if p1 == uintptr(0) { 35493 return TCL_ERROR 35494 } 35495 for i = 0; i < objc-1; i++ { 35496 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), bp) != 0 { 35497 sqlite3.Xsqlite3_free(tls, p1) 35498 p1 = uintptr(0) 35499 return TCL_ERROR 35500 } 35501 *(*sqlite3_int64)(unsafe.Pointer(p1 + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 35502 } 35503 } 35504 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p1))) 35505 return TCL_OK 35506 } 35507 35508 var p1 uintptr = uintptr(0) 35509 35510 func test_doublearray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35511 var i int32 35512 35513 sqlite3.Xsqlite3_free(tls, p2) 35514 p2 = uintptr(0) 35515 if objc > 1 { 35516 p2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(objc-1))) 35517 if p2 == uintptr(0) { 35518 return TCL_ERROR 35519 } 35520 for i = 0; i < objc-1; i++ { 35521 if tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p2+uintptr(i)*8) != 0 { 35522 sqlite3.Xsqlite3_free(tls, p2) 35523 p2 = uintptr(0) 35524 return TCL_ERROR 35525 } 35526 } 35527 } 35528 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p2))) 35529 return TCL_OK 35530 } 35531 35532 var p2 uintptr = uintptr(0) 35533 35534 func test_textarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35535 bp := tls.Alloc(8) 35536 defer tls.Free(8) 35537 35538 var i int32 35539 35540 for i = 0; i < n; i++ { 35541 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*8))) 35542 } 35543 sqlite3.Xsqlite3_free(tls, p3) 35544 p3 = uintptr(0) 35545 if objc > 1 { 35546 p3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(objc-1))) 35547 if p3 == uintptr(0) { 35548 return TCL_ERROR 35549 } 35550 for i = 0; i < objc-1; i++ { 35551 *(*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))))) 35552 } 35553 } 35554 n = objc - 1 35555 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p3))) 35556 return TCL_OK 35557 } 35558 35559 var n int32 = 0 35560 var p3 uintptr = uintptr(0) 35561 35562 func test_bind_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35563 bp := tls.Alloc(56) 35564 defer tls.Free(56) 35565 35566 var rc int32 35567 35568 if objc != 4 { 35569 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35570 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35571 return TCL_ERROR 35572 } 35573 35574 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35575 return TCL_ERROR 35576 } 35577 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35578 return TCL_ERROR 35579 } 35580 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 35581 return TCL_ERROR 35582 } 35583 35584 rc = sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 48))) 35585 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35586 return TCL_ERROR 35587 } 35588 if rc != SQLITE_OK { 35589 return TCL_ERROR 35590 } 35591 35592 return TCL_OK 35593 } 35594 35595 func test_bind_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35596 bp := tls.Alloc(64) 35597 defer tls.Free(64) 35598 35599 *(*float64)(unsafe.Pointer(bp + 48)) = float64(0) 35600 var rc int32 35601 var zVal uintptr 35602 var i int32 35603 35604 if objc != 4 { 35605 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35606 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 35607 return TCL_ERROR 35608 } 35609 35610 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35611 return TCL_ERROR 35612 } 35613 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35614 return TCL_ERROR 35615 } 35616 35617 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35618 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 35619 FzName uintptr 35620 FiUpper uint32 35621 FiLower uint32 35622 }{})); i++ { 35623 if libc.Xstrcmp(tls, aSpecialFp[i].FzName, zVal) == 0 { 35624 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) = sqlite3_uint64(aSpecialFp[i].FiUpper) 35625 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) <<= 32 35626 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) |= sqlite3_uint64(aSpecialFp[i].FiLower) 35627 35628 libc.Xmemcpy(tls, bp+48, bp+56, uint64(8)) 35629 break 35630 } 35631 } 35632 if uint64(i) >= uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 35633 FzName uintptr 35634 FiUpper uint32 35635 FiLower uint32 35636 }{})) && tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 35637 return TCL_ERROR 35638 } 35639 rc = sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*float64)(unsafe.Pointer(bp + 48))) 35640 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35641 return TCL_ERROR 35642 } 35643 if rc != SQLITE_OK { 35644 return TCL_ERROR 35645 } 35646 35647 return TCL_OK 35648 } 35649 35650 var aSpecialFp = [10]struct { 35651 FzName uintptr 35652 FiUpper uint32 35653 FiLower uint32 35654 }{ 35655 {FzName: ts + 16643, FiUpper: uint32(0x7fffffff), FiLower: 0xffffffff}, 35656 {FzName: ts + 16647, FiUpper: uint32(0x7ff7ffff), FiLower: 0xffffffff}, 35657 {FzName: ts + 16652, FiUpper: 0xffffffff, FiLower: 0xffffffff}, 35658 {FzName: ts + 16657, FiUpper: 0xfff7ffff, FiLower: 0xffffffff}, 35659 {FzName: ts + 16663, FiUpper: uint32(0x7ff00000)}, 35660 {FzName: ts + 16668, FiUpper: 0xfff00000}, 35661 {FzName: ts + 16673, FiLower: uint32(0x00000001)}, 35662 {FzName: ts + 16681, FiUpper: 0x80000000, FiLower: uint32(0x00000001)}, 35663 {FzName: ts + 16690, FiUpper: uint32(0x7ff80000)}, 35664 {FzName: ts + 16695, FiUpper: 0xfff80000}, 35665 } 35666 35667 func test_bind_null(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35668 bp := tls.Alloc(44) 35669 defer tls.Free(44) 35670 35671 var rc int32 35672 35673 if objc != 3 { 35674 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35675 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16701, 0)) 35676 return TCL_ERROR 35677 } 35678 35679 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 35680 return TCL_ERROR 35681 } 35682 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 35683 return TCL_ERROR 35684 } 35685 35686 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 35687 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 35688 return TCL_ERROR 35689 } 35690 if rc != SQLITE_OK { 35691 return TCL_ERROR 35692 } 35693 35694 return TCL_OK 35695 } 35696 35697 func test_bind_text(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35698 bp := tls.Alloc(84) 35699 defer tls.Free(84) 35700 35701 *(*int32)(unsafe.Pointer(bp + 76)) = 0 35702 35703 var value uintptr 35704 var rc int32 35705 var toFree uintptr = uintptr(0) 35706 35707 if objc != 5 { 35708 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35709 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 35710 return TCL_ERROR 35711 } 35712 35713 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 35714 return TCL_ERROR 35715 } 35716 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 35717 return TCL_ERROR 35718 } 35719 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 35720 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 35721 return TCL_ERROR 35722 } 35723 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 { 35724 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+1)) 35725 if toFree == uintptr(0) { 35726 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 35727 return TCL_ERROR 35728 } 35729 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 35730 *(*uint8)(unsafe.Pointer(toFree + uintptr(*(*int32)(unsafe.Pointer(bp + 76))))) = uint8(0) 35731 value = toFree 35732 } 35733 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)) 35734 libc.Xfree(tls, toFree) 35735 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35736 return TCL_ERROR 35737 } 35738 if rc != SQLITE_OK { 35739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 35740 return TCL_ERROR 35741 } 35742 35743 return TCL_OK 35744 } 35745 35746 func test_bind_text16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35747 bp := tls.Alloc(84) 35748 defer tls.Free(84) 35749 35750 var value uintptr 35751 var toFree uintptr = uintptr(0) 35752 var rc int32 35753 *(*int32)(unsafe.Pointer(bp + 76)) = 0 35754 35755 var xDel uintptr = func() uintptr { 35756 if objc == 6 { 35757 return uintptr(0) 35758 } 35759 return libc.UintptrFromInt32(-1) 35760 }() 35761 var oStmt uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-4)*8)) 35762 var oN uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)) 35763 var oString uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)) 35764 var oBytes uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 35765 35766 if objc != 5 && objc != 6 { 35767 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35768 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 35769 return TCL_ERROR 35770 } 35771 35772 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, oStmt), bp+64) != 0 { 35773 return TCL_ERROR 35774 } 35775 if tcl.XTcl_GetIntFromObj(tls, interp, oN, bp+72) != 0 { 35776 return TCL_ERROR 35777 } 35778 value = tcl.XTcl_GetByteArrayFromObj(tls, oString, bp+76) 35779 if tcl.XTcl_GetIntFromObj(tls, interp, oBytes, bp+80) != 0 { 35780 return TCL_ERROR 35781 } 35782 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 && xDel == libc.UintptrFromInt32(-1) { 35783 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+3)) 35784 if toFree == uintptr(0) { 35785 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 35786 return TCL_ERROR 35787 } 35788 libc.Xmemcpy(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76)))) 35789 libc.Xmemset(tls, toFree+uintptr(*(*int32)(unsafe.Pointer(bp + 76))), 0, uint64(3)) 35790 value = toFree 35791 } 35792 rc = sqlite3.Xsqlite3_bind_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDel) 35793 libc.Xfree(tls, toFree) 35794 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35795 return TCL_ERROR 35796 } 35797 if rc != SQLITE_OK { 35798 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 35799 return TCL_ERROR 35800 } 35801 35802 return TCL_OK 35803 } 35804 35805 func test_bind_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35806 bp := tls.Alloc(284) 35807 defer tls.Free(284) 35808 35809 var value uintptr 35810 var rc int32 35811 var xDestructor sqlite3_destructor_type = libc.UintptrFromInt32(-1) 35812 35813 if objc != 5 && objc != 6 { 35814 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 35815 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16729, 0)) 35816 return TCL_ERROR 35817 } 35818 35819 if objc == 6 { 35820 xDestructor = uintptr(0) 35821 objv += 8 35822 } 35823 35824 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 35825 return TCL_ERROR 35826 } 35827 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 35828 return TCL_ERROR 35829 } 35830 35831 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 35832 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 35833 return TCL_ERROR 35834 } 35835 35836 if *(*int32)(unsafe.Pointer(bp + 80)) > *(*int32)(unsafe.Pointer(bp + 76)) { 35837 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+84, 35838 ts+16748, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 76)))) 35839 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+84, uintptr(0))) 35840 return TCL_ERROR 35841 } 35842 35843 rc = sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDestructor) 35844 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 35845 return TCL_ERROR 35846 } 35847 if rc != SQLITE_OK { 35848 return TCL_ERROR 35849 } 35850 35851 return TCL_OK 35852 } 35853 35854 func test_bind_value_from_preupdate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35855 bp := tls.Alloc(48) 35856 defer tls.Free(48) 35857 35858 var z3 uintptr = uintptr(0) 35859 var db uintptr = uintptr(0) 35860 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 35861 35862 if objc != 5 { 35863 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16782) 35864 return TCL_ERROR 35865 } 35866 35867 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 35868 return TCL_ERROR 35869 } 35870 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+32) != 0 { 35871 return TCL_ERROR 35872 } 35873 z3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35874 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+36) != 0 { 35875 return TCL_ERROR 35876 } 35877 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 35878 35879 if int32(*(*uint8)(unsafe.Pointer(z3))) == 'n' { 35880 sqlite3.Xsqlite3_preupdate_new(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 35881 } else if int32(*(*uint8)(unsafe.Pointer(z3))) == 'o' { 35882 sqlite3.Xsqlite3_preupdate_old(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 35883 } else { 35884 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16801, z3, uintptr(0))) 35885 return TCL_ERROR 35886 } 35887 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))) 35888 35889 return TCL_OK 35890 } 35891 35892 func test_bind_value_from_select(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35893 bp := tls.Alloc(72) 35894 defer tls.Free(72) 35895 35896 var zSql uintptr = uintptr(0) 35897 var db uintptr = uintptr(0) 35898 var rc int32 = SQLITE_OK 35899 35900 if objc != 4 { 35901 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16828) 35902 return TCL_ERROR 35903 } 35904 35905 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 35906 return TCL_ERROR 35907 } 35908 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) != 0 { 35909 return TCL_ERROR 35910 } 35911 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35912 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 35913 35914 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 35915 if rc != SQLITE_OK { 35916 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16842, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 35917 return TCL_ERROR 35918 } 35919 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 35920 var pVal uintptr = sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 35921 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56)), pVal) 35922 } 35923 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 35924 if rc != SQLITE_OK { 35925 tcl.XTcl_AppendResult(tls, interp, 35926 libc.VaList(bp+24, ts+16857, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 35927 return TCL_ERROR 35928 } 35929 35930 return TCL_OK 35931 } 35932 35933 func test_carray_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 35934 bp := tls.Alloc(112) 35935 defer tls.Free(112) 35936 35937 var eType int32 35938 var nData int32 35939 var aData uintptr 35940 var isTransient int32 35941 var isStatic int32 35942 35943 var i int32 35944 var j int32 35945 var rc int32 35946 var xDel uintptr 35947 var z uintptr 35948 35949 var a uintptr 35950 35951 var a1 uintptr 35952 35953 var a2 uintptr 35954 var v3 uintptr 35955 var a3 uintptr 35956 eType = 0 35957 nData = 0 35958 aData = uintptr(0) 35959 isTransient = 0 35960 isStatic = 0 35961 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 35962 35963 if !(aStaticData != 0) { 35964 goto __1 35965 } 35966 35967 if !(eStaticType == 3) { 35968 goto __2 35969 } 35970 i = 0 35971 __3: 35972 if !(i < nStaticData) { 35973 goto __5 35974 } 35975 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aStaticData + uintptr(i)*8))) 35976 goto __4 35977 __4: 35978 i++ 35979 goto __3 35980 goto __5 35981 __5: 35982 ; 35983 __2: 35984 ; 35985 sqlite3.Xsqlite3_free(tls, aStaticData) 35986 aStaticData = uintptr(0) 35987 nStaticData = 0 35988 eStaticType = 0 35989 __1: 35990 ; 35991 if !(objc == 1) { 35992 goto __6 35993 } 35994 return TCL_OK 35995 __6: 35996 ; 35997 i = 1 35998 __7: 35999 if !(i < objc && int32(*(*uint8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)))))) == '-') { 36000 goto __9 36001 } 36002 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 36003 if !(libc.Xstrcmp(tls, z, ts+16878) == 0) { 36004 goto __10 36005 } 36006 isTransient = 1 36007 xDel = libc.UintptrFromInt32(-1) 36008 goto __11 36009 __10: 36010 if !(libc.Xstrcmp(tls, z, ts+16889) == 0) { 36011 goto __12 36012 } 36013 isStatic = 1 36014 xDel = uintptr(0) 36015 goto __13 36016 __12: 36017 if !(libc.Xstrcmp(tls, z, ts+16897) == 0) { 36018 goto __14 36019 } 36020 eType = 0 36021 goto __15 36022 __14: 36023 if !(libc.Xstrcmp(tls, z, ts+16904) == 0) { 36024 goto __16 36025 } 36026 eType = 1 36027 goto __17 36028 __16: 36029 if !(libc.Xstrcmp(tls, z, ts+16911) == 0) { 36030 goto __18 36031 } 36032 eType = 2 36033 goto __19 36034 __18: 36035 if !(libc.Xstrcmp(tls, z, ts+16919) == 0) { 36036 goto __20 36037 } 36038 eType = 3 36039 goto __21 36040 __20: 36041 if !(libc.Xstrcmp(tls, z, ts+16925) == 0) { 36042 goto __22 36043 } 36044 goto __9 36045 goto __23 36046 __22: 36047 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+12444, z, uintptr(0))) 36048 return TCL_ERROR 36049 __23: 36050 ; 36051 __21: 36052 ; 36053 __19: 36054 ; 36055 __17: 36056 ; 36057 __15: 36058 ; 36059 __13: 36060 ; 36061 __11: 36062 ; 36063 goto __8 36064 __8: 36065 i++ 36066 goto __7 36067 goto __9 36068 __9: 36069 ; 36070 if !(eType == 3 && !(isStatic != 0) && !(isTransient != 0)) { 36071 goto __24 36072 } 36073 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+16928, 36074 uintptr(0))) 36075 return TCL_ERROR 36076 __24: 36077 ; 36078 if !(isStatic != 0 && isTransient != 0) { 36079 goto __25 36080 } 36081 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+16975, 36082 uintptr(0))) 36083 return TCL_ERROR 36084 __25: 36085 ; 36086 if !(objc-i < 2) { 36087 goto __26 36088 } 36089 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17013) 36090 return TCL_ERROR 36091 __26: 36092 ; 36093 if !(getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))), bp+80) != 0) { 36094 goto __27 36095 } 36096 return TCL_ERROR 36097 __27: 36098 ; 36099 i++ 36100 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0) { 36101 goto __28 36102 } 36103 return TCL_ERROR 36104 __28: 36105 ; 36106 i++ 36107 nData = objc - i 36108 switch eType + 4*libc.Bool32(nData <= 0) { 36109 case 0: 36110 goto __30 36111 case 1: 36112 goto __31 36113 case 2: 36114 goto __32 36115 case 3: 36116 goto __33 36117 case 4: 36118 goto __34 36119 } 36120 goto __29 36121 __30: 36122 a = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nData))) 36123 if !(a == uintptr(0)) { 36124 goto __35 36125 } 36126 rc = SQLITE_NOMEM 36127 goto carray_bind_done 36128 __35: 36129 ; 36130 j = 0 36131 __36: 36132 if !(j < nData) { 36133 goto __38 36134 } 36135 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+92) != 0) { 36136 goto __39 36137 } 36138 sqlite3.Xsqlite3_free(tls, a) 36139 return TCL_ERROR 36140 __39: 36141 ; 36142 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = *(*int32)(unsafe.Pointer(bp + 92)) 36143 goto __37 36144 __37: 36145 j++ 36146 goto __36 36147 goto __38 36148 __38: 36149 ; 36150 aData = a 36151 goto __29 36152 36153 __31: 36154 a1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(nData))) 36155 if !(a1 == uintptr(0)) { 36156 goto __40 36157 } 36158 rc = SQLITE_NOMEM 36159 goto carray_bind_done 36160 __40: 36161 ; 36162 j = 0 36163 __41: 36164 if !(j < nData) { 36165 goto __43 36166 } 36167 if !(tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+96) != 0) { 36168 goto __44 36169 } 36170 sqlite3.Xsqlite3_free(tls, a1) 36171 return TCL_ERROR 36172 __44: 36173 ; 36174 *(*sqlite3_int64)(unsafe.Pointer(a1 + uintptr(j)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) 36175 goto __42 36176 __42: 36177 j++ 36178 goto __41 36179 goto __43 36180 __43: 36181 ; 36182 aData = a1 36183 goto __29 36184 36185 __32: 36186 a2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(nData))) 36187 if !(a2 == uintptr(0)) { 36188 goto __45 36189 } 36190 rc = SQLITE_NOMEM 36191 goto carray_bind_done 36192 __45: 36193 ; 36194 j = 0 36195 __46: 36196 if !(j < nData) { 36197 goto __48 36198 } 36199 if !(tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+104) != 0) { 36200 goto __49 36201 } 36202 sqlite3.Xsqlite3_free(tls, a2) 36203 return TCL_ERROR 36204 __49: 36205 ; 36206 *(*float64)(unsafe.Pointer(a2 + uintptr(j)*8)) = *(*float64)(unsafe.Pointer(bp + 104)) 36207 goto __47 36208 __47: 36209 j++ 36210 goto __46 36211 goto __48 36212 __48: 36213 ; 36214 aData = a2 36215 goto __29 36216 36217 __33: 36218 a3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nData))) 36219 if !(a3 == uintptr(0)) { 36220 goto __50 36221 } 36222 rc = SQLITE_NOMEM 36223 goto carray_bind_done 36224 __50: 36225 ; 36226 j = 0 36227 __51: 36228 if !(j < nData) { 36229 goto __53 36230 } 36231 v3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8))) 36232 *(*uintptr)(unsafe.Pointer(a3 + uintptr(j)*8)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+56, v3)) 36233 goto __52 36234 __52: 36235 j++ 36236 goto __51 36237 goto __53 36238 __53: 36239 ; 36240 aData = a3 36241 goto __29 36242 36243 __34: 36244 aData = ts + 584 36245 xDel = uintptr(0) 36246 isTransient = 0 36247 isStatic = 0 36248 goto __29 36249 36250 __29: 36251 ; 36252 if !(isStatic != 0) { 36253 goto __54 36254 } 36255 aStaticData = aData 36256 nStaticData = nData 36257 eStaticType = eType 36258 __54: 36259 ; 36260 rc = sqlite3_carray_bind(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), aData, nData, eType, xDel) 36261 if !(isTransient != 0) { 36262 goto __55 36263 } 36264 if !(eType == 3) { 36265 goto __56 36266 } 36267 i = 0 36268 __57: 36269 if !(i < nData) { 36270 goto __59 36271 } 36272 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8))) 36273 goto __58 36274 __58: 36275 i++ 36276 goto __57 36277 goto __59 36278 __59: 36279 ; 36280 __56: 36281 ; 36282 sqlite3.Xsqlite3_free(tls, aData) 36283 __55: 36284 ; 36285 carray_bind_done: 36286 if !(rc != 0) { 36287 goto __60 36288 } 36289 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, sqlite3.Xsqlite3_errstr(tls, rc), uintptr(0))) 36290 return TCL_ERROR 36291 __60: 36292 ; 36293 return TCL_OK 36294 } 36295 36296 var aStaticData uintptr = uintptr(0) 36297 var nStaticData int32 = 0 36298 var eStaticType int32 = 0 36299 36300 func test_bind_parameter_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36301 bp := tls.Alloc(8) 36302 defer tls.Free(8) 36303 36304 if objc != 2 { 36305 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36306 return TCL_ERROR 36307 } 36308 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36309 return TCL_ERROR 36310 } 36311 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))))) 36312 return TCL_OK 36313 } 36314 36315 func test_bind_parameter_name(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36316 bp := tls.Alloc(12) 36317 defer tls.Free(12) 36318 36319 if objc != 3 { 36320 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17047) 36321 return TCL_ERROR 36322 } 36323 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36324 return TCL_ERROR 36325 } 36326 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 36327 return TCL_ERROR 36328 } 36329 tcl.XTcl_SetObjResult(tls, interp, 36330 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))), -1)) 36331 return TCL_OK 36332 } 36333 36334 func test_bind_parameter_index(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36335 bp := tls.Alloc(8) 36336 defer tls.Free(8) 36337 36338 if objc != 3 { 36339 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17054) 36340 return TCL_ERROR 36341 } 36342 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36343 return TCL_ERROR 36344 } 36345 tcl.XTcl_SetObjResult(tls, interp, 36346 tcl.XTcl_NewIntObj(tls, 36347 sqlite3.Xsqlite3_bind_parameter_index(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))))) 36348 return TCL_OK 36349 } 36350 36351 func test_clear_bindings(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36352 bp := tls.Alloc(8) 36353 defer tls.Free(8) 36354 36355 if objc != 2 { 36356 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 36357 return TCL_ERROR 36358 } 36359 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36360 return TCL_ERROR 36361 } 36362 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_clear_bindings(tls, *(*uintptr)(unsafe.Pointer(bp))))) 36363 return TCL_OK 36364 } 36365 36366 func test_sleep(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36367 bp := tls.Alloc(4) 36368 defer tls.Free(4) 36369 36370 if objc != 2 { 36371 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+13117) 36372 return TCL_ERROR 36373 } 36374 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 36375 return TCL_ERROR 36376 } 36377 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_sleep(tls, *(*int32)(unsafe.Pointer(bp))))) 36378 return TCL_OK 36379 } 36380 36381 func test_ex_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36382 bp := tls.Alloc(56) 36383 defer tls.Free(56) 36384 36385 var rc int32 36386 36387 if objc != 2 { 36388 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36389 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36390 return TCL_ERROR 36391 } 36392 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36393 return TCL_ERROR 36394 } 36395 rc = sqlite3.Xsqlite3_extended_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 36396 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36397 return TCL_OK 36398 } 36399 36400 func test_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36401 bp := tls.Alloc(56) 36402 defer tls.Free(56) 36403 36404 var rc int32 36405 36406 if objc != 2 { 36407 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36408 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36409 return TCL_ERROR 36410 } 36411 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36412 return TCL_ERROR 36413 } 36414 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 36415 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36416 return TCL_OK 36417 } 36418 36419 func test_errmsg(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36420 bp := tls.Alloc(40) 36421 defer tls.Free(40) 36422 36423 var zErr uintptr 36424 36425 if objc != 2 { 36426 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36427 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36428 return TCL_ERROR 36429 } 36430 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36431 return TCL_ERROR 36432 } 36433 36434 zErr = sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36435 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErr, -1)) 36436 return TCL_OK 36437 } 36438 36439 func test_error_offset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36440 bp := tls.Alloc(40) 36441 defer tls.Free(40) 36442 36443 var iByteOffset int32 36444 36445 if objc != 2 { 36446 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36447 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36448 return TCL_ERROR 36449 } 36450 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36451 return TCL_ERROR 36452 } 36453 36454 iByteOffset = sqlite3.Xsqlite3_error_offset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36455 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iByteOffset)) 36456 return TCL_OK 36457 } 36458 36459 func test_errmsg16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36460 bp := tls.Alloc(40) 36461 defer tls.Free(40) 36462 36463 var zErr uintptr 36464 var z uintptr 36465 var bytes int32 = 0 36466 36467 if objc != 2 { 36468 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36469 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36470 return TCL_ERROR 36471 } 36472 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36473 return TCL_ERROR 36474 } 36475 36476 zErr = sqlite3.Xsqlite3_errmsg16(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36477 if zErr != 0 { 36478 z = zErr 36479 for bytes = 0; *(*uint8)(unsafe.Pointer(z + uintptr(bytes))) != 0 || *(*uint8)(unsafe.Pointer(z + uintptr(bytes+1))) != 0; bytes = bytes + 2 { 36480 } 36481 } 36482 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zErr, bytes)) 36483 return TCL_OK 36484 } 36485 36486 func test_prepare(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36487 bp := tls.Alloc(162) 36488 defer tls.Free(162) 36489 36490 var zSql uintptr 36491 36492 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 36493 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 36494 36495 var rc int32 36496 36497 if objc != 5 && objc != 4 { 36498 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36499 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36500 return TCL_ERROR 36501 } 36502 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36503 return TCL_ERROR 36504 } 36505 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36506 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 36507 return TCL_ERROR 36508 } 36509 36510 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, func() uintptr { 36511 if objc >= 5 { 36512 return bp + 104 36513 } 36514 return uintptr(0) 36515 }()) 36516 tcl.XTcl_ResetResult(tls, interp) 36517 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36518 return TCL_ERROR 36519 } 36520 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 36521 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36522 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 36523 } 36524 if int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) < *(*int32)(unsafe.Pointer(bp + 88)) { 36525 *(*int32)(unsafe.Pointer(bp + 88)) = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) 36526 } 36527 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) 36528 } 36529 if rc != SQLITE_OK { 36530 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 36531 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36532 return TCL_ERROR 36533 } 36534 36535 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 36536 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 36537 return TCL_ERROR 36538 } 36539 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 36540 } 36541 return TCL_OK 36542 } 36543 36544 func test_prepare_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36545 bp := tls.Alloc(162) 36546 defer tls.Free(162) 36547 36548 var zSql uintptr 36549 var zCopy uintptr = uintptr(0) 36550 36551 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 36552 var pzTail uintptr 36553 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 36554 36555 var rc int32 36556 36557 if objc != 5 && objc != 4 { 36558 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36559 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 36560 return TCL_ERROR 36561 } 36562 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36563 return TCL_ERROR 36564 } 36565 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36566 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 36567 return TCL_ERROR 36568 } 36569 36570 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36571 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36572 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36573 } else { 36574 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 36575 zCopy = libc.Xmalloc(tls, uint64(n)) 36576 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 36577 } 36578 if objc >= 5 { 36579 pzTail = bp + 96 36580 } else { 36581 pzTail = uintptr(0) 36582 } 36583 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 88)), bp+104, pzTail) 36584 if objc >= 5 { 36585 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 36586 } 36587 libc.Xfree(tls, zCopy) 36588 36589 tcl.XTcl_ResetResult(tls, interp) 36590 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36591 return TCL_ERROR 36592 } 36593 if rc == SQLITE_OK && objc >= 5 && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 36594 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36595 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 36596 } 36597 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) 36598 } 36599 if rc != SQLITE_OK { 36600 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 36601 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36602 return TCL_ERROR 36603 } 36604 36605 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 36606 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 36607 return TCL_ERROR 36608 } 36609 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 36610 } 36611 return TCL_OK 36612 } 36613 36614 func test_prepare_v3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36615 bp := tls.Alloc(162) 36616 defer tls.Free(162) 36617 36618 var zSql uintptr 36619 var zCopy uintptr = uintptr(0) 36620 36621 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 36622 var pzTail uintptr 36623 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 36624 36625 var rc int32 36626 36627 if objc != 6 && objc != 5 { 36628 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36629 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17110, 0)) 36630 return TCL_ERROR 36631 } 36632 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36633 return TCL_ERROR 36634 } 36635 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36636 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 36637 return TCL_ERROR 36638 } 36639 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+92) != 0 { 36640 return TCL_ERROR 36641 } 36642 36643 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36644 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36645 libc.Xmemcpy(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 36646 } else { 36647 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 36648 zCopy = libc.Xmalloc(tls, uint64(n)) 36649 libc.Xmemcpy(tls, zCopy, zSql, uint64(n)) 36650 } 36651 if objc >= 6 { 36652 pzTail = bp + 96 36653 } else { 36654 pzTail = uintptr(0) 36655 } 36656 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) 36657 libc.Xfree(tls, zCopy) 36658 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 36659 36660 tcl.XTcl_ResetResult(tls, interp) 36661 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36662 return TCL_ERROR 36663 } 36664 if rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 && objc >= 6 { 36665 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 36666 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 36667 } 36668 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) 36669 } 36670 if rc != SQLITE_OK { 36671 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 36672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36673 return TCL_ERROR 36674 } 36675 36676 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 36677 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 36678 return TCL_ERROR 36679 } 36680 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 36681 } 36682 return TCL_OK 36683 } 36684 36685 func test_prepare_tkt3134(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36686 bp := tls.Alloc(146) 36687 defer tls.Free(146) 36688 36689 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 36690 36691 var rc int32 36692 36693 if objc != 2 { 36694 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36695 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 36696 return TCL_ERROR 36697 } 36698 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 36699 return TCL_ERROR 36700 } 36701 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), uintptr(unsafe.Pointer(&zSql))+1, 0, bp+88, uintptr(0)) 36702 36703 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 36704 return TCL_ERROR 36705 } 36706 if rc != SQLITE_OK { 36707 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+96, ts+16476, libc.VaList(bp+32, rc)) 36708 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 36709 return TCL_ERROR 36710 } 36711 36712 if *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 36713 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 88))) != 0 { 36714 return TCL_ERROR 36715 } 36716 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 36717 } 36718 return TCL_OK 36719 } 36720 36721 var zSql = *(*[10]uint8)(unsafe.Pointer(ts + 17138)) 36722 36723 func test_prepare16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36724 bp := tls.Alloc(130) 36725 defer tls.Free(130) 36726 36727 var zSql uintptr 36728 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 36729 var pTail uintptr = uintptr(0) 36730 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 36731 36732 var rc int32 36733 36734 if objc != 5 && objc != 4 { 36735 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36736 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36737 return TCL_ERROR 36738 } 36739 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36740 return TCL_ERROR 36741 } 36742 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 36743 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 36744 return TCL_ERROR 36745 } 36746 36747 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 36748 if objc >= 5 { 36749 return bp + 72 36750 } 36751 return uintptr(0) 36752 }()) 36753 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36754 return TCL_ERROR 36755 } 36756 if rc != 0 { 36757 return TCL_ERROR 36758 } 36759 36760 if objc >= 5 { 36761 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 36762 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 36763 } else { 36764 *(*int32)(unsafe.Pointer(bp + 56)) = 0 36765 } 36766 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 36767 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 36768 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 36769 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36770 var _objPtr uintptr = pTail 36771 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36772 tcl.XTclFreeObj(tls, _objPtr) 36773 } 36774 } 36775 } 36776 36777 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 36778 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 36779 return TCL_ERROR 36780 } 36781 } 36782 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 36783 return TCL_OK 36784 } 36785 36786 func test_prepare16_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36787 bp := tls.Alloc(130) 36788 defer tls.Free(130) 36789 36790 var zSql uintptr 36791 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 36792 var pTail uintptr = uintptr(0) 36793 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 36794 36795 var rc int32 36796 36797 if objc != 5 && objc != 4 { 36798 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36799 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 36800 return TCL_ERROR 36801 } 36802 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36803 return TCL_ERROR 36804 } 36805 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 36806 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 36807 return TCL_ERROR 36808 } 36809 36810 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 36811 if objc >= 5 { 36812 return bp + 72 36813 } 36814 return uintptr(0) 36815 }()) 36816 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36817 return TCL_ERROR 36818 } 36819 if rc != 0 { 36820 return TCL_ERROR 36821 } 36822 36823 if objc >= 5 { 36824 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 36825 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 36826 } else { 36827 *(*int32)(unsafe.Pointer(bp + 56)) = 0 36828 } 36829 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 36830 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 36831 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 36832 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36833 var _objPtr uintptr = pTail 36834 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 36835 tcl.XTclFreeObj(tls, _objPtr) 36836 } 36837 } 36838 } 36839 36840 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 36841 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 36842 return TCL_ERROR 36843 } 36844 } 36845 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 36846 return TCL_OK 36847 } 36848 36849 func test_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36850 bp := tls.Alloc(156) 36851 defer tls.Free(156) 36852 36853 var zFilename uintptr 36854 36855 if objc != 3 && objc != 2 && objc != 1 { 36856 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36857 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 36858 return TCL_ERROR 36859 } 36860 36861 if objc > 1 { 36862 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36863 } else { 36864 zFilename = uintptr(0) 36865 } 36866 sqlite3.Xsqlite3_open(tls, zFilename, bp+48) 36867 36868 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 36869 return TCL_ERROR 36870 } 36871 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 36872 return TCL_OK 36873 } 36874 36875 func test_open_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36876 bp := tls.Alloc(484) 36877 defer tls.Free(484) 36878 36879 var zFilename uintptr 36880 var zVfs uintptr 36881 var flags int32 = 0 36882 36883 var rc int32 36884 36885 var i int32 36886 36887 if objc != 4 { 36888 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17171) 36889 return TCL_ERROR 36890 } 36891 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36892 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 36893 if int32(*(*uint8)(unsafe.Pointer(zVfs))) == 0x00 { 36894 zVfs = uintptr(0) 36895 } 36896 36897 rc = tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16, bp+24) 36898 if rc != TCL_OK { 36899 return rc 36900 } 36901 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 16)); i++ { 36902 *(*[21]OpenFlag)(unsafe.Pointer(bp + 32)) = [21]OpenFlag{ 36903 {FzFlag: ts + 17190, Fflag: SQLITE_OPEN_READONLY}, 36904 {FzFlag: ts + 17211, Fflag: SQLITE_OPEN_READWRITE}, 36905 {FzFlag: ts + 17233, Fflag: SQLITE_OPEN_CREATE}, 36906 {FzFlag: ts + 17252, Fflag: SQLITE_OPEN_DELETEONCLOSE}, 36907 {FzFlag: ts + 17278, Fflag: SQLITE_OPEN_EXCLUSIVE}, 36908 {FzFlag: ts + 17300, Fflag: SQLITE_OPEN_AUTOPROXY}, 36909 {FzFlag: ts + 17322, Fflag: SQLITE_OPEN_MAIN_DB}, 36910 {FzFlag: ts + 17342, Fflag: SQLITE_OPEN_TEMP_DB}, 36911 {FzFlag: ts + 17362, Fflag: SQLITE_OPEN_TRANSIENT_DB}, 36912 {FzFlag: ts + 17387, Fflag: SQLITE_OPEN_MAIN_JOURNAL}, 36913 {FzFlag: ts + 17412, Fflag: SQLITE_OPEN_TEMP_JOURNAL}, 36914 {FzFlag: ts + 17437, Fflag: SQLITE_OPEN_SUBJOURNAL}, 36915 {FzFlag: ts + 17460, Fflag: SQLITE_OPEN_SUPER_JOURNAL}, 36916 {FzFlag: ts + 17486, Fflag: SQLITE_OPEN_NOMUTEX}, 36917 {FzFlag: ts + 17506, Fflag: SQLITE_OPEN_FULLMUTEX}, 36918 {FzFlag: ts + 17528, Fflag: SQLITE_OPEN_SHAREDCACHE}, 36919 {FzFlag: ts + 17552, Fflag: SQLITE_OPEN_PRIVATECACHE}, 36920 {FzFlag: ts + 17577, Fflag: SQLITE_OPEN_WAL}, 36921 {FzFlag: ts + 17593, Fflag: SQLITE_OPEN_URI}, 36922 {FzFlag: ts + 17609, Fflag: SQLITE_OPEN_EXRESCODE}, 36923 {}, 36924 } 36925 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)) + uintptr(i)*8)), bp+32, int32(unsafe.Sizeof(OpenFlag{})), 36926 ts+17631, 0, bp+368) 36927 if rc != TCL_OK { 36928 return rc 36929 } 36930 flags = flags | (*OpenFlag)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 368)))*16)).Fflag 36931 } 36932 36933 rc = sqlite3.Xsqlite3_open_v2(tls, zFilename, bp+376, flags, zVfs) 36934 if sqlite3TestMakePointerStr(tls, interp, bp+384, *(*uintptr)(unsafe.Pointer(bp + 376))) != 0 { 36935 return TCL_ERROR 36936 } 36937 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+384, 0)) 36938 return TCL_OK 36939 } 36940 36941 type OpenFlag = struct { 36942 FzFlag uintptr 36943 Fflag int32 36944 F__ccgo_pad1 [4]byte 36945 } 36946 36947 func test_open16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36948 bp := tls.Alloc(156) 36949 defer tls.Free(156) 36950 36951 var zFilename uintptr 36952 36953 if objc != 3 { 36954 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36955 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 36956 return TCL_ERROR 36957 } 36958 36959 zFilename = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 36960 sqlite3.Xsqlite3_open16(tls, zFilename, bp+48) 36961 36962 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 36963 return TCL_ERROR 36964 } 36965 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 36966 return TCL_OK 36967 } 36968 36969 func test_complete16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36970 var zBuf uintptr 36971 36972 if objc != 2 { 36973 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17636) 36974 return TCL_ERROR 36975 } 36976 36977 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 36978 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_complete16(tls, zBuf))) 36979 return TCL_OK 36980 } 36981 36982 func test_normalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36983 var zSql uintptr 36984 var zNorm uintptr 36985 36986 if objc != 2 { 36987 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9535) 36988 return TCL_ERROR 36989 } 36990 36991 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36992 zNorm = sqlite3_normalize(tls, zSql) 36993 if zNorm != 0 { 36994 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zNorm, -1)) 36995 sqlite3.Xsqlite3_free(tls, zNorm) 36996 } 36997 return TCL_OK 36998 } 36999 37000 func test_step(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37001 bp := tls.Alloc(40) 37002 defer tls.Free(40) 37003 37004 var rc int32 37005 37006 if objc != 2 { 37007 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37008 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+16315, 0)) 37009 return TCL_ERROR 37010 } 37011 37012 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37013 return TCL_ERROR 37014 } 37015 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 37016 37017 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37018 return TCL_OK 37019 } 37020 37021 func test_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37022 bp := tls.Alloc(8) 37023 defer tls.Free(8) 37024 37025 if objc != 2 { 37026 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 37027 return TCL_ERROR 37028 } 37029 37030 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37031 return TCL_ERROR 37032 } 37033 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 37034 return TCL_OK 37035 } 37036 37037 func test_ex_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37038 bp := tls.Alloc(8) 37039 defer tls.Free(8) 37040 37041 var z uintptr 37042 37043 if objc != 2 { 37044 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 37045 return TCL_ERROR 37046 } 37047 37048 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37049 return TCL_ERROR 37050 } 37051 z = sqlite3.Xsqlite3_expanded_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 37052 tcl.XTcl_SetResult(tls, interp, z, uintptr(1)) 37053 sqlite3.Xsqlite3_free(tls, z) 37054 return TCL_OK 37055 } 37056 37057 func test_column_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37058 bp := tls.Alloc(40) 37059 defer tls.Free(40) 37060 37061 if objc != 2 { 37062 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37063 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37064 return TCL_ERROR 37065 } 37066 37067 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37068 return TCL_ERROR 37069 } 37070 37071 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 37072 return TCL_OK 37073 } 37074 37075 func test_column_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37076 bp := tls.Alloc(44) 37077 defer tls.Free(44) 37078 37079 var tp int32 37080 37081 if objc != 3 { 37082 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37083 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37084 return TCL_ERROR 37085 } 37086 37087 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37088 return TCL_ERROR 37089 } 37090 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37091 return TCL_ERROR 37092 } 37093 37094 tp = sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 37095 switch tp { 37096 case SQLITE_INTEGER: 37097 tcl.XTcl_SetResult(tls, interp, ts+2413, uintptr(0)) 37098 break 37099 case SQLITE_NULL: 37100 tcl.XTcl_SetResult(tls, interp, ts+5846, uintptr(0)) 37101 break 37102 case SQLITE_FLOAT: 37103 tcl.XTcl_SetResult(tls, interp, ts+17662, uintptr(0)) 37104 break 37105 case SQLITE_TEXT: 37106 tcl.XTcl_SetResult(tls, interp, ts+17668, uintptr(0)) 37107 break 37108 case SQLITE_BLOB: 37109 tcl.XTcl_SetResult(tls, interp, ts+17673, uintptr(0)) 37110 break 37111 default: 37112 } 37113 37114 return TCL_OK 37115 } 37116 37117 func test_column_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37118 bp := tls.Alloc(44) 37119 defer tls.Free(44) 37120 37121 var iVal i64 37122 37123 if objc != 3 { 37124 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37125 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37126 return TCL_ERROR 37127 } 37128 37129 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37130 return TCL_ERROR 37131 } 37132 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37133 return TCL_ERROR 37134 } 37135 37136 iVal = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 37137 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iVal)) 37138 return TCL_OK 37139 } 37140 37141 func test_column_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37142 bp := tls.Alloc(44) 37143 defer tls.Free(44) 37144 37145 var len int32 37146 var pBlob uintptr 37147 37148 if objc != 3 { 37149 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37150 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37151 return TCL_ERROR 37152 } 37153 37154 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37155 return TCL_ERROR 37156 } 37157 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37158 return TCL_ERROR 37159 } 37160 37161 len = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 37162 pBlob = sqlite3.Xsqlite3_column_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 37163 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pBlob, len)) 37164 return TCL_OK 37165 } 37166 37167 func test_column_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37168 bp := tls.Alloc(44) 37169 defer tls.Free(44) 37170 37171 var rVal float64 37172 37173 if objc != 3 { 37174 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37175 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37176 return TCL_ERROR 37177 } 37178 37179 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37180 return TCL_ERROR 37181 } 37182 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37183 return TCL_ERROR 37184 } 37185 37186 rVal = sqlite3.Xsqlite3_column_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 37187 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewDoubleObj(tls, rVal)) 37188 return TCL_OK 37189 } 37190 37191 func test_data_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37192 bp := tls.Alloc(40) 37193 defer tls.Free(40) 37194 37195 if objc != 2 { 37196 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37197 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37198 return TCL_ERROR 37199 } 37200 37201 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37202 return TCL_ERROR 37203 } 37204 37205 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_data_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 37206 return TCL_OK 37207 } 37208 37209 func test_stmt_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37210 bp := tls.Alloc(44) 37211 defer tls.Free(44) 37212 37213 var xFunc uintptr 37214 var zRet uintptr 37215 37216 xFunc = clientData 37217 if objc != 3 { 37218 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37219 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37220 return TCL_ERROR 37221 } 37222 37223 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37224 return TCL_ERROR 37225 } 37226 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37227 return TCL_ERROR 37228 } 37229 zRet = (*struct { 37230 f func(*libc.TLS, uintptr, int32) uintptr 37231 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 37232 if zRet != 0 { 37233 tcl.XTcl_SetResult(tls, interp, zRet, uintptr(0)) 37234 } 37235 return TCL_OK 37236 } 37237 37238 func test_global_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37239 var rc int32 37240 if objc != 1 { 37241 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 37242 return TCL_ERROR 37243 } 37244 rc = sqlite3.Xsqlite3_global_recover(tls) 37245 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37246 return TCL_OK 37247 } 37248 37249 func test_stmt_utf16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37250 bp := tls.Alloc(44) 37251 defer tls.Free(44) 37252 37253 var pRet uintptr 37254 var zName16 uintptr 37255 var xFunc uintptr 37256 37257 xFunc = clientData 37258 if objc != 3 { 37259 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37260 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37261 return TCL_ERROR 37262 } 37263 37264 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37265 return TCL_ERROR 37266 } 37267 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37268 return TCL_ERROR 37269 } 37270 37271 zName16 = (*struct { 37272 f func(*libc.TLS, uintptr, int32) uintptr 37273 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 37274 if zName16 != 0 { 37275 var n int32 37276 var z uintptr = zName16 37277 for n = 0; *(*uint8)(unsafe.Pointer(z + uintptr(n))) != 0 || *(*uint8)(unsafe.Pointer(z + uintptr(n+1))) != 0; n = n + 2 { 37278 } 37279 pRet = tcl.XTcl_NewByteArrayObj(tls, zName16, n+2) 37280 tcl.XTcl_SetObjResult(tls, interp, pRet) 37281 } 37282 37283 return TCL_OK 37284 } 37285 37286 func test_stmt_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37287 bp := tls.Alloc(44) 37288 defer tls.Free(44) 37289 37290 var xFunc uintptr 37291 37292 xFunc = clientData 37293 if objc != 3 { 37294 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37295 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 37296 return TCL_ERROR 37297 } 37298 37299 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37300 return TCL_ERROR 37301 } 37302 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37303 return TCL_ERROR 37304 } 37305 37306 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*struct { 37307 f func(*libc.TLS, uintptr, int32) int32 37308 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))))) 37309 return TCL_OK 37310 } 37311 37312 func test_interrupt(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37313 bp := tls.Alloc(40) 37314 defer tls.Free(40) 37315 37316 if argc != 2 { 37317 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15001, 0)) 37318 return TCL_ERROR 37319 } 37320 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 37321 return TCL_ERROR 37322 } 37323 sqlite3.Xsqlite3_interrupt(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 37324 return TCL_OK 37325 } 37326 37327 func delete_function(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37328 bp := tls.Alloc(40) 37329 defer tls.Free(40) 37330 37331 var rc int32 37332 37333 if argc != 3 { 37334 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 37335 ts+17678, 0)) 37336 return TCL_ERROR 37337 } 37338 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 37339 return TCL_ERROR 37340 } 37341 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)) 37342 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37343 return TCL_OK 37344 } 37345 37346 func delete_collation(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37347 bp := tls.Alloc(40) 37348 defer tls.Free(40) 37349 37350 var rc int32 37351 37352 if argc != 3 { 37353 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 37354 ts+17678, 0)) 37355 return TCL_ERROR 37356 } 37357 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 37358 return TCL_ERROR 37359 } 37360 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), SQLITE_UTF8, uintptr(0), uintptr(0)) 37361 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37362 return TCL_OK 37363 } 37364 37365 func get_autocommit(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37366 bp := tls.Alloc(94) 37367 defer tls.Free(94) 37368 37369 if argc != 2 { 37370 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 37371 ts+15001, 0)) 37372 return TCL_ERROR 37373 } 37374 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 37375 return TCL_ERROR 37376 } 37377 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))))) 37378 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 37379 return TCL_OK 37380 } 37381 37382 func test_busy_timeout(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37383 bp := tls.Alloc(60) 37384 defer tls.Free(60) 37385 37386 var rc int32 37387 37388 if argc != 3 { 37389 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 37390 ts+15001, 0)) 37391 return TCL_ERROR 37392 } 37393 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 37394 return TCL_ERROR 37395 } 37396 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 37397 return TCL_ERROR 37398 } 37399 rc = sqlite3.Xsqlite3_busy_timeout(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56))) 37400 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 37401 return TCL_OK 37402 } 37403 37404 func tcl_variable_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37405 var pVar uintptr 37406 if objc != 2 { 37407 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17696) 37408 return TCL_ERROR 37409 } 37410 pVar = tcl.XTcl_GetVar2Ex(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0), TCL_LEAVE_ERR_MSG) 37411 if pVar == uintptr(0) { 37412 return TCL_ERROR 37413 } 37414 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 37415 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname, -1)) 37416 } 37417 return TCL_OK 37418 } 37419 37420 func test_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37421 bp := tls.Alloc(4) 37422 defer tls.Free(4) 37423 37424 var amt int32 37425 if objc != 1 && objc != 2 { 37426 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 37427 return TCL_ERROR 37428 } 37429 if objc == 2 { 37430 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37431 return TCL_ERROR 37432 } 37433 } else { 37434 *(*int32)(unsafe.Pointer(bp)) = -1 37435 } 37436 amt = sqlite3.Xsqlite3_release_memory(tls, *(*int32)(unsafe.Pointer(bp))) 37437 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, amt)) 37438 return TCL_OK 37439 } 37440 37441 func test_db_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37442 bp := tls.Alloc(8) 37443 defer tls.Free(8) 37444 37445 var rc int32 37446 if objc != 2 { 37447 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37448 return TCL_ERROR 37449 } 37450 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37451 return TCL_ERROR 37452 } 37453 rc = sqlite3.Xsqlite3_db_release_memory(tls, *(*uintptr)(unsafe.Pointer(bp))) 37454 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37455 return TCL_OK 37456 } 37457 37458 func test_db_cacheflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37459 bp := tls.Alloc(8) 37460 defer tls.Free(8) 37461 37462 var rc int32 37463 if objc != 2 { 37464 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37465 return TCL_ERROR 37466 } 37467 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37468 return TCL_ERROR 37469 } 37470 rc = sqlite3.Xsqlite3_db_cacheflush(tls, *(*uintptr)(unsafe.Pointer(bp))) 37471 if rc != 0 { 37472 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 37473 return TCL_ERROR 37474 } 37475 37476 tcl.XTcl_ResetResult(tls, interp) 37477 return TCL_OK 37478 } 37479 37480 func test_system_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37481 bp := tls.Alloc(8) 37482 defer tls.Free(8) 37483 37484 var iErrno int32 37485 if objc != 2 { 37486 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37487 return TCL_ERROR 37488 } 37489 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37490 return TCL_ERROR 37491 } 37492 iErrno = sqlite3.Xsqlite3_system_errno(tls, *(*uintptr)(unsafe.Pointer(bp))) 37493 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iErrno)) 37494 return TCL_OK 37495 } 37496 37497 func test_db_filename(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37498 bp := tls.Alloc(24) 37499 defer tls.Free(24) 37500 37501 var zDbName uintptr 37502 if objc != 3 { 37503 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 37504 return TCL_ERROR 37505 } 37506 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 37507 return TCL_ERROR 37508 } 37509 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37510 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_db_filename(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbName), uintptr(0))) 37511 return TCL_OK 37512 } 37513 37514 func test_db_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37515 bp := tls.Alloc(8) 37516 defer tls.Free(8) 37517 37518 var zDbName uintptr 37519 if objc != 3 { 37520 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 37521 return TCL_ERROR 37522 } 37523 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37524 return TCL_ERROR 37525 } 37526 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37527 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_db_readonly(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName))) 37528 return TCL_OK 37529 } 37530 37531 func test_soft_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37532 bp := tls.Alloc(8) 37533 defer tls.Free(8) 37534 37535 var amt sqlite3_int64 37536 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 37537 if objc != 1 && objc != 2 { 37538 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 37539 return TCL_ERROR 37540 } 37541 if objc == 2 { 37542 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37543 return TCL_ERROR 37544 } 37545 } 37546 amt = sqlite3.Xsqlite3_soft_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 37547 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 37548 return TCL_OK 37549 } 37550 37551 func test_hard_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37552 bp := tls.Alloc(8) 37553 defer tls.Free(8) 37554 37555 var amt sqlite3_int64 37556 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 37557 if objc != 1 && objc != 2 { 37558 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 37559 return TCL_ERROR 37560 } 37561 if objc == 2 { 37562 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 37563 return TCL_ERROR 37564 } 37565 } 37566 amt = sqlite3.Xsqlite3_hard_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 37567 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 37568 return TCL_OK 37569 } 37570 37571 func test_thread_cleanup(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37572 sqlite3.Xsqlite3_thread_cleanup(tls) 37573 return TCL_OK 37574 } 37575 37576 func test_pager_refcounts(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37577 bp := tls.Alloc(40) 37578 defer tls.Free(40) 37579 37580 var i int32 37581 var v int32 37582 var a uintptr 37583 var pResult uintptr 37584 37585 if objc != 2 { 37586 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37587 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37588 return TCL_ERROR 37589 } 37590 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37591 return TCL_ERROR 37592 } 37593 pResult = tcl.XTcl_NewObj(tls) 37594 for i = 0; i < (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FnDb; i++ { 37595 if (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt == uintptr(0) { 37596 v = -1 37597 } else { 37598 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 37599 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt)) 37600 v = *(*int32)(unsafe.Pointer(a)) 37601 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 37602 } 37603 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, v)) 37604 } 37605 tcl.XTcl_SetObjResult(tls, interp, pResult) 37606 return TCL_OK 37607 } 37608 37609 func working_64bit_int(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37610 var pTestObj uintptr 37611 var working int32 = 0 37612 37613 pTestObj = tcl.XTcl_NewWideIntObj(tls, int64(1000000)*int64(1234567890)) 37614 working = libc.Bool32(libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, pTestObj), ts+17709) == 0) 37615 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37616 var _objPtr uintptr = pTestObj 37617 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 37618 tcl.XTclFreeObj(tls, _objPtr) 37619 } 37620 } 37621 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(working != 0))) 37622 return TCL_OK 37623 } 37624 37625 func vfs_unlink_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37626 bp := tls.Alloc(496) 37627 defer tls.Free(496) 37628 37629 var i int32 37630 var pMain uintptr 37631 37632 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(0)) 37633 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 37634 (*sqlite3_vfs)(unsafe.Pointer(bp + 168)).FzName = ts + 17732 37635 37636 pMain = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37637 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 37638 37639 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 0) 37640 37641 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 37642 37643 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 1) 37644 37645 if pMain != 0 { 37646 sqlite3.Xsqlite3_vfs_register(tls, pMain, 1) 37647 37648 } 37649 37650 for i = 0; uint64(i) < uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 37651 *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37652 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 37653 sqlite3.Xsqlite3_vfs_unregister(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8))) 37654 37655 } 37656 } 37657 37658 sqlite3.Xsqlite3_vfs_register(tls, pMain, 0) 37659 37660 sqlite3.Xsqlite3_vfs_unregister(tls, pMain) 37661 37662 for i = int32(uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)); i >= 0; i-- { 37663 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 37664 sqlite3.Xsqlite3_vfs_register(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)), 1) 37665 37666 } 37667 } 37668 37669 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 37670 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 37671 37672 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 37673 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 37674 37675 return TCL_OK 37676 } 37677 37678 func vfs_initfail_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37679 bp := tls.Alloc(168) 37680 defer tls.Free(168) 37681 37682 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 37683 37684 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37685 return TCL_ERROR 37686 } 37687 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 37688 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37689 return TCL_ERROR 37690 } 37691 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 37692 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 37693 return TCL_ERROR 37694 } 37695 return TCL_OK 37696 } 37697 37698 var apVfs [20]uintptr 37699 var nVfs int32 = 0 37700 37701 func vfs_unregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37702 var i int32 37703 for i = 0; i < int32(uint64(unsafe.Sizeof(apVfs))/uint64(unsafe.Sizeof(uintptr(0)))); i++ { 37704 apVfs[i] = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 37705 if apVfs[i] == uintptr(0) { 37706 break 37707 } 37708 sqlite3.Xsqlite3_vfs_unregister(tls, apVfs[i]) 37709 } 37710 nVfs = i 37711 return TCL_OK 37712 } 37713 37714 func vfs_reregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37715 var i int32 37716 for i = nVfs - 1; i >= 0; i-- { 37717 sqlite3.Xsqlite3_vfs_register(tls, apVfs[i], 1) 37718 } 37719 return TCL_OK 37720 } 37721 37722 func file_control_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37723 bp := tls.Alloc(44) 37724 defer tls.Free(44) 37725 37726 *(*int32)(unsafe.Pointer(bp + 40)) = 0 37727 37728 var rc int32 37729 _ = rc 37730 37731 if objc != 2 { 37732 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37733 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37734 return TCL_ERROR 37735 } 37736 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37737 return TCL_ERROR 37738 } 37739 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), uintptr(0), 0, bp+40) 37740 37741 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+17738, SQLITE_FCNTL_LOCKSTATE, bp+40) 37742 37743 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+85, -1, bp+40) 37744 37745 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+8931, -1, bp+40) 37746 37747 return TCL_OK 37748 } 37749 37750 func file_control_lasterrno_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37751 bp := tls.Alloc(76) 37752 defer tls.Free(76) 37753 37754 *(*int32)(unsafe.Pointer(bp + 72)) = 0 37755 37756 var rc int32 37757 37758 if objc != 2 { 37759 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37760 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 37761 return TCL_ERROR 37762 } 37763 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37764 return TCL_ERROR 37765 } 37766 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_LAST_ERRNO, bp+72) 37767 if rc != 0 { 37768 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 37769 return TCL_ERROR 37770 } 37771 if *(*int32)(unsafe.Pointer(bp + 72)) != 0 { 37772 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17751, 37773 tcl.XTcl_GetStringFromObj(tls, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 72))), uintptr(0)), ts+4894, 0)) 37774 return TCL_ERROR 37775 } 37776 return TCL_OK 37777 } 37778 37779 func file_control_data_version(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37780 bp := tls.Alloc(120) 37781 defer tls.Free(120) 37782 37783 var zDb uintptr 37784 37785 var rc int32 37786 37787 if objc != 3 && objc != 2 { 37788 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17779) 37789 return TCL_ERROR 37790 } 37791 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 37792 return TCL_ERROR 37793 } 37794 if objc == 3 { 37795 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37796 } else { 37797 zDb = uintptr(0) 37798 } 37799 37800 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, SQLITE_FCNTL_DATA_VERSION, bp+16) 37801 if rc != 0 { 37802 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37803 return TCL_ERROR 37804 } else { 37805 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+20, ts+17791, libc.VaList(bp, *(*uint32)(unsafe.Pointer(bp + 16)))) 37806 tcl.XTcl_SetResult(tls, interp, bp+20, uintptr(1)) 37807 return TCL_OK 37808 } 37809 return int32(0) 37810 } 37811 37812 func file_control_chunksize_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37813 bp := tls.Alloc(12) 37814 defer tls.Free(12) 37815 37816 var zDb uintptr 37817 37818 var rc int32 37819 37820 if objc != 4 { 37821 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 37822 return TCL_ERROR 37823 } 37824 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37825 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 37826 return TCL_ERROR 37827 } 37828 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37829 if int32(*(*uint8)(unsafe.Pointer(zDb))) == 0 { 37830 zDb = uintptr(0) 37831 } 37832 37833 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_CHUNK_SIZE, bp+8) 37834 if rc != 0 { 37835 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37836 return TCL_ERROR 37837 } 37838 return TCL_OK 37839 } 37840 37841 func file_control_sizehint_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37842 bp := tls.Alloc(16) 37843 defer tls.Free(16) 37844 37845 var zDb uintptr 37846 37847 var rc int32 37848 37849 if objc != 4 { 37850 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 37851 return TCL_ERROR 37852 } 37853 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37854 tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 37855 return TCL_ERROR 37856 } 37857 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37858 if int32(*(*uint8)(unsafe.Pointer(zDb))) == 0 { 37859 zDb = uintptr(0) 37860 } 37861 37862 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_SIZE_HINT, bp+8) 37863 if rc != 0 { 37864 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 37865 return TCL_ERROR 37866 } 37867 return TCL_OK 37868 } 37869 37870 func file_control_lockproxy_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37871 bp := tls.Alloc(40) 37872 defer tls.Free(40) 37873 37874 if objc != 3 { 37875 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37876 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17809, 0)) 37877 return TCL_ERROR 37878 } 37879 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37880 return TCL_ERROR 37881 } 37882 37883 return TCL_OK 37884 } 37885 37886 func file_control_persist_wal(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37887 bp := tls.Alloc(176) 37888 defer tls.Free(176) 37889 37890 var rc int32 37891 37892 if objc != 3 { 37893 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37894 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 37895 return TCL_ERROR 37896 } 37897 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37898 return TCL_ERROR 37899 } 37900 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 37901 return TCL_ERROR 37902 } 37903 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_PERSIST_WAL, bp+72) 37904 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 37905 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 37906 return TCL_OK 37907 } 37908 37909 func file_control_powersafe_overwrite(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37910 bp := tls.Alloc(176) 37911 defer tls.Free(176) 37912 37913 var rc int32 37914 37915 if objc != 3 { 37916 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37917 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17817, 0)) 37918 return TCL_ERROR 37919 } 37920 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37921 return TCL_ERROR 37922 } 37923 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 37924 return TCL_ERROR 37925 } 37926 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_POWERSAFE_OVERWRITE, bp+72) 37927 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+76, ts+17826, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 37928 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 37929 return TCL_OK 37930 } 37931 37932 func file_control_vfsname(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37933 bp := tls.Alloc(64) 37934 defer tls.Free(64) 37935 37936 var zDbName uintptr = ts + 85 37937 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 37938 37939 if objc != 2 && objc != 3 { 37940 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37941 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37942 return TCL_ERROR 37943 } 37944 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 37945 return TCL_ERROR 37946 } 37947 if objc == 3 { 37948 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37949 } 37950 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_VFSNAME, bp+56) 37951 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 37952 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 37953 return TCL_OK 37954 } 37955 37956 func file_control_reservebytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37957 bp := tls.Alloc(12) 37958 defer tls.Free(12) 37959 37960 var zDbName uintptr = ts + 85 37961 *(*int32)(unsafe.Pointer(bp + 8)) = 0 37962 var rc int32 37963 37964 if objc != 3 { 37965 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17844) 37966 return TCL_ERROR 37967 } 37968 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 37969 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 37970 return TCL_ERROR 37971 } 37972 37973 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName, SQLITE_FCNTL_RESERVE_BYTES, bp+8) 37974 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 37975 return TCL_OK 37976 } 37977 37978 func file_control_tempfilename(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 37979 bp := tls.Alloc(64) 37980 defer tls.Free(64) 37981 37982 var zDbName uintptr = ts + 85 37983 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 37984 37985 if objc != 2 && objc != 3 { 37986 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37987 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 37988 return TCL_ERROR 37989 } 37990 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 37991 return TCL_ERROR 37992 } 37993 if objc == 3 { 37994 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 37995 } 37996 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_TEMPFILENAME, bp+56) 37997 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 37998 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 37999 return TCL_OK 38000 } 38001 38002 func file_control_external_reader(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38003 bp := tls.Alloc(44) 38004 defer tls.Free(44) 38005 38006 var zName uintptr = ts + 85 38007 *(*int32)(unsafe.Pointer(bp + 40)) = 0 38008 var rc int32 = SQLITE_OK 38009 38010 if objc != 2 && objc != 3 { 38011 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38012 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17832, 0)) 38013 return TCL_ERROR 38014 } 38015 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 38016 return TCL_ERROR 38017 } 38018 if objc == 3 { 38019 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38020 } 38021 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, SQLITE_FCNTL_EXTERNAL_READER, bp+40) 38022 if rc != SQLITE_OK { 38023 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 38024 return TCL_ERROR 38025 } 38026 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 38027 return TCL_OK 38028 } 38029 38030 func vfs_list(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38031 var pVfs uintptr 38032 var pRet uintptr = tcl.XTcl_NewObj(tls) 38033 if objc != 1 { 38034 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 38035 return TCL_ERROR 38036 } 38037 for pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)); pVfs != 0; pVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpNext { 38038 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 38039 } 38040 tcl.XTcl_SetObjResult(tls, interp, pRet) 38041 return TCL_OK 38042 } 38043 38044 func test_limit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38045 bp := tls.Alloc(68) 38046 defer tls.Free(68) 38047 38048 var rc int32 38049 var i int32 38050 var id int32 = 0 38051 38052 var zId uintptr 38053 38054 if objc != 4 { 38055 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38056 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17849, 0)) 38057 return TCL_ERROR 38058 } 38059 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 38060 return TCL_ERROR 38061 } 38062 zId = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38063 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 38064 FzName uintptr 38065 Fid int32 38066 F__ccgo_pad1 [4]byte 38067 }{})); i++ { 38068 if libc.Xstrcmp(tls, zId, aId[i].FzName) == 0 { 38069 id = aId[i].Fid 38070 break 38071 } 38072 } 38073 if uint64(i) >= uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 38074 FzName uintptr 38075 Fid int32 38076 F__ccgo_pad1 [4]byte 38077 }{})) { 38078 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17862, zId, uintptr(0))) 38079 return TCL_ERROR 38080 } 38081 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 38082 return TCL_ERROR 38083 } 38084 rc = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), id, *(*int32)(unsafe.Pointer(bp + 64))) 38085 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 38086 return TCL_OK 38087 } 38088 38089 var aId = [14]struct { 38090 FzName uintptr 38091 Fid int32 38092 F__ccgo_pad1 [4]byte 38093 }{ 38094 {FzName: ts + 17883}, 38095 {FzName: ts + 17903, Fid: SQLITE_LIMIT_SQL_LENGTH}, 38096 {FzName: ts + 17927, Fid: SQLITE_LIMIT_COLUMN}, 38097 {FzName: ts + 17947, Fid: SQLITE_LIMIT_EXPR_DEPTH}, 38098 {FzName: ts + 17971, Fid: SQLITE_LIMIT_COMPOUND_SELECT}, 38099 {FzName: ts + 18000, Fid: SQLITE_LIMIT_VDBE_OP}, 38100 {FzName: ts + 18021, Fid: SQLITE_LIMIT_FUNCTION_ARG}, 38101 {FzName: ts + 18047, Fid: SQLITE_LIMIT_ATTACHED}, 38102 {FzName: ts + 18069, Fid: SQLITE_LIMIT_LIKE_PATTERN_LENGTH}, 38103 {FzName: ts + 18102, Fid: SQLITE_LIMIT_VARIABLE_NUMBER}, 38104 {FzName: ts + 18131, Fid: SQLITE_LIMIT_TRIGGER_DEPTH}, 38105 {FzName: ts + 18158, Fid: SQLITE_LIMIT_WORKER_THREADS}, 38106 {FzName: ts + 18186, Fid: -1}, 38107 {FzName: ts + 18208, Fid: SQLITE_LIMIT_WORKER_THREADS + 1}, 38108 } 38109 38110 func save_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38111 var rc int32 = sqlite3.Xsqlite3_test_control(tls, 9999, 0) 38112 _ = rc 38113 38114 rc = sqlite3.Xsqlite3_test_control(tls, -1, 0) 38115 38116 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SAVE, 0) 38117 return TCL_OK 38118 } 38119 38120 func restore_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38121 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_RESTORE, 0) 38122 return TCL_OK 38123 } 38124 38125 func reset_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38126 sqlite3.Xsqlite3_randomness(tls, 0, uintptr(0)) 38127 return TCL_OK 38128 } 38129 38130 func prng_seed(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38131 bp := tls.Alloc(32) 38132 defer tls.Free(32) 38133 38134 *(*int32)(unsafe.Pointer(bp + 16)) = 0 38135 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 38136 if objc != 2 && objc != 3 { 38137 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18228) 38138 return TCL_ERROR 38139 } 38140 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 38141 return TCL_ERROR 38142 } 38143 if objc == 3 && getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) != 0 { 38144 return TCL_ERROR 38145 } 38146 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SEED, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 24)))) 38147 return TCL_OK 38148 } 38149 38150 func extra_schema_checks(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38151 bp := tls.Alloc(12) 38152 defer tls.Free(12) 38153 38154 *(*int32)(unsafe.Pointer(bp + 8)) = 0 38155 if objc != 2 { 38156 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 38157 return TCL_ERROR 38158 } 38159 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 38160 return TCL_ERROR 38161 } 38162 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 38163 return TCL_OK 38164 } 38165 38166 func database_may_be_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38167 bp := tls.Alloc(8) 38168 defer tls.Free(8) 38169 38170 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 0)) 38171 return TCL_OK 38172 } 38173 38174 func database_never_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38175 bp := tls.Alloc(8) 38176 defer tls.Free(8) 38177 38178 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 1)) 38179 return TCL_OK 38180 } 38181 38182 func test_pcache_stats(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38183 bp := tls.Alloc(16) 38184 defer tls.Free(16) 38185 38186 var pRet uintptr 38187 38188 sqlite3.Xsqlite3PcacheStats(tls, bp, bp+4, bp+8, bp+12) 38189 38190 pRet = tcl.XTcl_NewObj(tls) 38191 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18246, -1)) 38192 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp)))) 38193 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18254, -1)) 38194 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 38195 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18258, -1)) 38196 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 38197 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18262, -1)) 38198 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 38199 38200 tcl.XTcl_SetObjResult(tls, interp, pRet) 38201 38202 return TCL_OK 38203 } 38204 38205 func test_unlock_notify_cb(tls *libc.TLS, aArg uintptr, nArg int32) { 38206 var ii int32 38207 for ii = 0; ii < nArg; ii++ { 38208 tcl.XTcl_EvalEx(tls, *(*uintptr)(unsafe.Pointer(aArg + uintptr(ii)*8)), ts+13692, -1, TCL_EVAL_GLOBAL) 38209 } 38210 } 38211 38212 func test_unlock_notify(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38213 bp := tls.Alloc(8) 38214 defer tls.Free(8) 38215 38216 var rc int32 38217 38218 if objc != 2 { 38219 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 38220 return TCL_ERROR 38221 } 38222 38223 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38224 return TCL_ERROR 38225 } 38226 rc = sqlite3.Xsqlite3_unlock_notify(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct { 38227 f func(*libc.TLS, uintptr, int32) 38228 }{test_unlock_notify_cb})), interp) 38229 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 38230 return TCL_OK 38231 } 38232 38233 func test_wal_checkpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38234 bp := tls.Alloc(8) 38235 defer tls.Free(8) 38236 38237 var zDb uintptr = uintptr(0) 38238 38239 var rc int32 38240 38241 if objc != 3 && objc != 2 { 38242 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18273) 38243 return TCL_ERROR 38244 } 38245 38246 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38247 return TCL_ERROR 38248 } 38249 if objc == 3 { 38250 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38251 } 38252 rc = sqlite3.Xsqlite3_wal_checkpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 38253 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 38254 return TCL_OK 38255 } 38256 38257 func test_wal_checkpoint_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38258 bp := tls.Alloc(96) 38259 defer tls.Free(96) 38260 38261 var zDb uintptr = uintptr(0) 38262 38263 var rc int32 38264 38265 *(*int32)(unsafe.Pointer(bp + 88)) = -555 38266 *(*int32)(unsafe.Pointer(bp + 92)) = -555 38267 var pRet uintptr 38268 38269 *(*[5]uintptr)(unsafe.Pointer(bp + 48)) = [5]uintptr{ts + 18283, ts + 18291, ts + 18296, ts + 18304, uintptr(0)} 38270 38271 if objc != 3 && objc != 4 { 38272 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18313) 38273 return TCL_ERROR 38274 } 38275 38276 if objc == 4 { 38277 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 38278 } 38279 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) && 38280 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) { 38281 return TCL_ERROR 38282 } 38283 38284 rc = sqlite3.Xsqlite3_wal_checkpoint_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zDb, *(*int32)(unsafe.Pointer(bp + 40)), bp+88, bp+92) 38285 if rc != SQLITE_OK && rc != SQLITE_BUSY { 38286 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 38287 tcl.XTcl_ResetResult(tls, interp) 38288 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErrCode, ts+9645, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0)) 38289 return TCL_ERROR 38290 } 38291 38292 pRet = tcl.XTcl_NewObj(tls) 38293 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, func() int32 { 38294 if rc == SQLITE_BUSY { 38295 return 1 38296 } 38297 return 0 38298 }())) 38299 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 88)))) 38300 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 92)))) 38301 tcl.XTcl_SetObjResult(tls, interp, pRet) 38302 38303 return TCL_OK 38304 } 38305 38306 func test_wal_autocheckpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38307 bp := tls.Alloc(12) 38308 defer tls.Free(12) 38309 38310 var rc int32 38311 38312 if objc != 3 { 38313 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18333) 38314 return TCL_ERROR 38315 } 38316 38317 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 38318 tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 38319 return TCL_ERROR 38320 } 38321 38322 rc = sqlite3.Xsqlite3_wal_autocheckpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 38323 tcl.XTcl_ResetResult(tls, interp) 38324 if rc != SQLITE_OK { 38325 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 38326 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErrCode, -1)) 38327 return TCL_ERROR 38328 } 38329 38330 return TCL_OK 38331 } 38332 38333 type LogCallback = struct { 38334 FpInterp uintptr 38335 FpObj uintptr 38336 } 38337 38338 var logcallback = LogCallback{} 38339 38340 func xLogcallback(tls *libc.TLS, unused uintptr, err int32, zMsg uintptr) { 38341 var pNew uintptr = tcl.XTcl_DuplicateObj(tls, logcallback.FpObj) 38342 (*Tcl_Obj)(unsafe.Pointer(pNew)).FrefCount++ 38343 tcl.XTcl_ListObjAppendElement(tls, 38344 uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, err), -1)) 38345 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, zMsg, -1)) 38346 tcl.XTcl_EvalObjEx(tls, logcallback.FpInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT) 38347 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 38348 var _objPtr uintptr = pNew 38349 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 38350 tcl.XTclFreeObj(tls, _objPtr) 38351 } 38352 } 38353 } 38354 38355 func test_sqlite3_log(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 38356 bp := tls.Alloc(32) 38357 defer tls.Free(32) 38358 38359 if objc > 2 { 38360 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10187) 38361 return TCL_ERROR 38362 } 38363 if logcallback.FpObj != 0 { 38364 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 38365 var _objPtr uintptr = logcallback.FpObj 38366 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 38367 tcl.XTclFreeObj(tls, _objPtr) 38368 } 38369 } 38370 logcallback.FpObj = uintptr(0) 38371 logcallback.FpInterp = uintptr(0) 38372 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp, uintptr(0), uintptr(0))) 38373 } 38374 if objc > 1 { 38375 logcallback.FpObj = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 38376 (*Tcl_Obj)(unsafe.Pointer(logcallback.FpObj)).FrefCount++ 38377 logcallback.FpInterp = interp 38378 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct { 38379 f func(*libc.TLS, uintptr, int32, uintptr) 38380 }{xLogcallback})), uintptr(0))) 38381 } 38382 return TCL_OK 38383 } 38384 38385 func runAsObjProc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38386 bp := tls.Alloc(112) 38387 defer tls.Free(112) 38388 38389 if objc < 2 { 38390 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18342) 38391 return TCL_ERROR 38392 } 38393 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 38394 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 38395 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 38396 return TCL_ERROR 38397 } 38398 if (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjProc == uintptr(0) { 38399 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18354, 38400 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 38401 return TCL_ERROR 38402 } 38403 return (*struct { 38404 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 38405 })(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) 38406 } 38407 38408 func printExplainQueryPlan(tls *libc.TLS, pStmt uintptr) int32 { 38409 bp := tls.Alloc(48) 38410 defer tls.Free(48) 38411 38412 var zSql uintptr 38413 var zExplain uintptr 38414 38415 var rc int32 38416 38417 zSql = sqlite3.Xsqlite3_sql(tls, pStmt) 38418 if zSql == uintptr(0) { 38419 return SQLITE_ERROR 38420 } 38421 38422 zExplain = sqlite3.Xsqlite3_mprintf(tls, ts+330, libc.VaList(bp, zSql)) 38423 if zExplain == uintptr(0) { 38424 return SQLITE_NOMEM 38425 } 38426 38427 rc = sqlite3.Xsqlite3_prepare_v2(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt), zExplain, -1, bp+40, uintptr(0)) 38428 sqlite3.Xsqlite3_free(tls, zExplain) 38429 if rc != SQLITE_OK { 38430 return rc 38431 } 38432 38433 for SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 38434 var iSelectid int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 38435 var iOrder int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 38436 var iFrom int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 38437 var zDetail uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 3) 38438 38439 libc.Xprintf(tls, ts+18379, libc.VaList(bp+8, iSelectid, iOrder, iFrom, zDetail)) 38440 } 38441 38442 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 38443 } 38444 38445 func test_print_eqp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38446 bp := tls.Alloc(8) 38447 defer tls.Free(8) 38448 38449 var rc int32 38450 38451 if objc != 2 { 38452 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 38453 return TCL_ERROR 38454 } 38455 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38456 return TCL_ERROR 38457 } 38458 rc = printExplainQueryPlan(tls, *(*uintptr)(unsafe.Pointer(bp))) 38459 38460 libc.Xfflush(tls, libc.Xstdout) 38461 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 38462 return TCL_OK 38463 } 38464 38465 type timex = struct { 38466 Fmodes uint32 38467 F__ccgo_pad1 [4]byte 38468 Foffset int64 38469 Ffreq int64 38470 Fmaxerror int64 38471 Festerror int64 38472 Fstatus int32 38473 F__ccgo_pad2 [4]byte 38474 Fconstant int64 38475 Fprecision int64 38476 Ftolerance int64 38477 Ftime struct { 38478 Ftv_sec int64 38479 Ftv_usec int64 38480 } 38481 Ftick int64 38482 Fppsfreq int64 38483 Fjitter int64 38484 Fshift int32 38485 F__ccgo_pad3 [4]byte 38486 Fstabil int64 38487 Fjitcnt int64 38488 Fcalcnt int64 38489 Ferrcnt int64 38490 Fstbcnt int64 38491 Ftai int32 38492 __164 uint32 38493 __168 uint32 38494 __172 uint32 38495 __176 uint32 38496 __180 uint32 38497 __184 uint32 38498 __188 uint32 38499 __192 uint32 38500 __196 uint32 38501 __200 uint32 38502 __204 uint32 38503 } 38504 38505 func testLocaltime(tls *libc.TLS, aliasT uintptr, aliasTM uintptr) int32 { 38506 var t time_t = *(*time_t)(unsafe.Pointer(aliasT)) 38507 var pTm uintptr = aliasTM 38508 var altT time_t 38509 var iJD sqlite3_int64 38510 var Z int32 38511 var A int32 38512 var B int32 38513 var C int32 38514 var D int32 38515 var E int32 38516 var X1 int32 38517 var S int32 38518 38519 if t/int64(86400)&int64(1) != 0 { 38520 altT = t + int64(1800) 38521 } else { 38522 altT = t - int64(1800) 38523 } 38524 iJD = altT + 210866760000 38525 Z = int32((iJD + int64(43200)) / int64(86400)) 38526 A = libc.Int32FromFloat64((float64(Z) - 1867216.25) / 36524.25) 38527 A = Z + 1 + A - A/4 38528 B = A + 1524 38529 C = libc.Int32FromFloat64((float64(B) - 122.1) / 365.25) 38530 D = 36525 * (C & 32767) / 100 38531 E = libc.Int32FromFloat64(float64(B-D) / 30.6001) 38532 X1 = libc.Int32FromFloat64(30.6001 * float64(E)) 38533 (*tm)(unsafe.Pointer(pTm)).Ftm_mday = B - D - X1 38534 (*tm)(unsafe.Pointer(pTm)).Ftm_mon = func() int32 { 38535 if E < 14 { 38536 return E - 2 38537 } 38538 return E - 14 38539 }() 38540 (*tm)(unsafe.Pointer(pTm)).Ftm_year = func() int32 { 38541 if (*tm)(unsafe.Pointer(pTm)).Ftm_mon > 1 { 38542 return C - 4716 38543 } 38544 return C - 4715 38545 }() - 1900 38546 S = int32((iJD + int64(43200)) % int64(86400)) 38547 (*tm)(unsafe.Pointer(pTm)).Ftm_hour = S / 3600 38548 (*tm)(unsafe.Pointer(pTm)).Ftm_min = S / 60 % 60 38549 (*tm)(unsafe.Pointer(pTm)).Ftm_sec = S % 60 38550 return libc.Bool32(t == int64(959609760)) 38551 } 38552 38553 func test_test_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38554 bp := tls.Alloc(192) 38555 defer tls.Free(192) 38556 38557 *(*[4]Verb)(unsafe.Pointer(bp + 72)) = [4]Verb{ 38558 {FzName: ts + 18392, Fi: SQLITE_TESTCTRL_LOCALTIME_FAULT}, 38559 {FzName: ts + 18424, Fi: SQLITE_TESTCTRL_SORTER_MMAP}, 38560 {FzName: ts + 18452, Fi: SQLITE_TESTCTRL_IMPOSTER}, 38561 {FzName: ts + 18477, Fi: SQLITE_TESTCTRL_INTERNAL_FUNCTIONS}, 38562 } 38563 38564 var iFlag int32 38565 var rc int32 38566 38567 if objc < 2 { 38568 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18512) 38569 return TCL_ERROR 38570 } 38571 38572 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 38573 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+72, int32(unsafe.Sizeof(Verb{})), ts+18525, 0, bp+136) 38574 if rc != TCL_OK { 38575 return rc 38576 } 38577 38578 iFlag = (*Verb)(unsafe.Pointer(bp + 72 + uintptr(*(*int32)(unsafe.Pointer(bp + 136)))*16)).Fi 38579 switch iFlag { 38580 case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: 38581 { 38582 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 38583 if objc != 3 { 38584 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 38585 return TCL_ERROR 38586 } 38587 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+144) != 0 { 38588 return TCL_ERROR 38589 } 38590 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(bp + 144)))) 38591 break 38592 38593 } 38594 case SQLITE_TESTCTRL_LOCALTIME_FAULT: 38595 { 38596 if objc != 3 { 38597 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18530) 38598 return TCL_ERROR 38599 } 38600 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+152) != 0 { 38601 return TCL_ERROR 38602 } 38603 sqlite3.Xsqlite3_test_control(tls, iFlag, libc.VaList(bp+8, *(*int32)(unsafe.Pointer(bp + 152)), *(*uintptr)(unsafe.Pointer(&struct { 38604 f func(*libc.TLS, uintptr, uintptr) int32 38605 }{testLocaltime})))) 38606 break 38607 38608 } 38609 38610 case SQLITE_TESTCTRL_SORTER_MMAP: 38611 { 38612 if objc != 4 { 38613 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18536) 38614 return TCL_ERROR 38615 } 38616 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+160) != 0 { 38617 return TCL_ERROR 38618 } 38619 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168) != 0 { 38620 return TCL_ERROR 38621 } 38622 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_SORTER_MMAP, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 160)), *(*int32)(unsafe.Pointer(bp + 168)))) 38623 break 38624 38625 } 38626 38627 case SQLITE_TESTCTRL_IMPOSTER: 38628 { 38629 var zDbName uintptr 38630 38631 if objc != 6 { 38632 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18545) 38633 return TCL_ERROR 38634 } 38635 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+176) != 0 { 38636 return TCL_ERROR 38637 } 38638 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 38639 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+184) != 0 { 38640 return TCL_ERROR 38641 } 38642 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+188) != 0 { 38643 return TCL_ERROR 38644 } 38645 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)))) 38646 break 38647 38648 } 38649 } 38650 38651 tcl.XTcl_ResetResult(tls, interp) 38652 return TCL_OK 38653 } 38654 38655 type Verb = struct { 38656 FzName uintptr 38657 Fi int32 38658 F__ccgo_pad1 [4]byte 38659 } 38660 38661 type rlim_t = uint64 38662 type rlim64_t = uint64 38663 38664 type rlimit = struct { 38665 Frlim_cur rlim_t 38666 Frlim_max rlim_t 38667 } 38668 38669 type rlimit64 = struct { 38670 Frlim_cur rlim64_t 38671 Frlim_max rlim64_t 38672 } 38673 38674 type rusage = struct { 38675 Fru_utime struct { 38676 Ftv_sec int64 38677 Ftv_usec int64 38678 } 38679 Fru_stime struct { 38680 Ftv_sec int64 38681 Ftv_usec int64 38682 } 38683 F__32 struct{ Fru_maxrss int64 } 38684 F__40 struct{ Fru_ixrss int64 } 38685 F__48 struct{ Fru_idrss int64 } 38686 F__56 struct{ Fru_isrss int64 } 38687 F__64 struct{ Fru_minflt int64 } 38688 F__72 struct{ Fru_majflt int64 } 38689 F__80 struct{ Fru_nswap int64 } 38690 F__88 struct{ Fru_inblock int64 } 38691 F__96 struct{ Fru_oublock int64 } 38692 F__104 struct{ Fru_msgsnd int64 } 38693 F__112 struct{ Fru_msgrcv int64 } 38694 F__120 struct{ Fru_nsignals int64 } 38695 F__128 struct{ Fru_nvcsw int64 } 38696 F__136 struct{ Fru_nivcsw int64 } 38697 } 38698 38699 func test_getrusage(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38700 bp := tls.Alloc(1216) 38701 defer tls.Free(1216) 38702 38703 libc.Xmemset(tls, bp+48, 0, uint64(unsafe.Sizeof(rusage{}))) 38704 libc.Xgetrusage(tls, RUSAGE_SELF, bp+48) 38705 38706 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1024]uint8{})), bp+192, 38707 ts+18566, 38708 libc.VaList(bp, int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_usec), 38709 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_sec), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_usec), 38710 int32(*(*int64)(unsafe.Pointer(bp + 48 + 64))), int32(*(*int64)(unsafe.Pointer(bp + 48 + 72))))) 38711 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+192, -1)) 38712 return TCL_OK 38713 } 38714 38715 func optimization_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38716 bp := tls.Alloc(68) 38717 defer tls.Free(68) 38718 38719 var i int32 38720 38721 var zOpt uintptr 38722 38723 var mask int32 = 0 38724 38725 if objc != 4 { 38726 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18626) 38727 return TCL_ERROR 38728 } 38729 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 38730 return TCL_ERROR 38731 } 38732 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 38733 return TCL_ERROR 38734 } 38735 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38736 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38737 FzOptName uintptr 38738 Fmask int32 38739 F__ccgo_pad1 [4]byte 38740 }{})); i++ { 38741 if libc.Xstrcmp(tls, zOpt, aOpt[i].FzOptName) == 0 { 38742 mask = aOpt[i].Fmask 38743 break 38744 } 38745 } 38746 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 38747 mask = ^mask 38748 } 38749 if uint64(i) >= uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38750 FzOptName uintptr 38751 Fmask int32 38752 F__ccgo_pad1 [4]byte 38753 }{})) { 38754 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18641, 38755 uintptr(0))) 38756 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 38757 FzOptName uintptr 38758 Fmask int32 38759 F__ccgo_pad1 [4]byte 38760 }{})); i++ { 38761 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+4894, aOpt[i].FzOptName, uintptr(0))) 38762 } 38763 return TCL_ERROR 38764 } 38765 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_OPTIMIZATIONS, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 56)), mask)) 38766 return TCL_OK 38767 } 38768 38769 var aOpt = [14]struct { 38770 FzOptName uintptr 38771 Fmask int32 38772 F__ccgo_pad1 [4]byte 38773 }{ 38774 {FzOptName: ts + 18682, Fmask: libc.Int32FromUint32(SQLITE_AllOpts)}, 38775 {FzOptName: ts + 18686}, 38776 {FzOptName: ts + 18691, Fmask: SQLITE_QueryFlattener}, 38777 {FzOptName: ts + 18707, Fmask: SQLITE_GroupByOrder}, 38778 {FzOptName: ts + 18721, Fmask: SQLITE_FactorOutConst}, 38779 {FzOptName: ts + 18738, Fmask: SQLITE_DistinctOpt}, 38780 {FzOptName: ts + 18751, Fmask: SQLITE_CoverIdxScan}, 38781 {FzOptName: ts + 18766, Fmask: SQLITE_OrderByIdxJoin}, 38782 {FzOptName: ts + 18784, Fmask: SQLITE_Transitive}, 38783 {FzOptName: ts + 18795, Fmask: SQLITE_OmitNoopJoin}, 38784 {FzOptName: ts + 18810, Fmask: SQLITE_Stat4}, 38785 {FzOptName: ts + 18816, Fmask: SQLITE_SkipScan}, 38786 {FzOptName: ts + 18826, Fmask: SQLITE_PushDown}, 38787 {FzOptName: ts + 18836, Fmask: SQLITE_BalancedMerge}, 38788 } 38789 38790 func tclLoadStaticExtensionCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38791 bp := tls.Alloc(80) 38792 defer tls.Free(80) 38793 38794 var zName uintptr 38795 var i int32 38796 var j int32 38797 var rc int32 38798 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 38799 if objc < 3 { 38800 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18851) 38801 return TCL_ERROR 38802 } 38803 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 38804 return TCL_ERROR 38805 } 38806 for j = 2; j < objc; j++ { 38807 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(j)*8))) 38808 for i = 0; i < int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 38809 FzExtName uintptr 38810 FpInit uintptr 38811 }{}))); i++ { 38812 if libc.Xstrcmp(tls, zName, aExtension[i].FzExtName) == 0 { 38813 break 38814 } 38815 } 38816 if i >= int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 38817 FzExtName uintptr 38818 FpInit uintptr 38819 }{}))) { 38820 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18863, zName, uintptr(0))) 38821 return TCL_ERROR 38822 } 38823 if aExtension[i].FpInit != 0 { 38824 rc = (*struct { 38825 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 38826 })(unsafe.Pointer(&struct{ uintptr }{aExtension[i].FpInit})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), bp+72, uintptr(0)) 38827 } else { 38828 rc = SQLITE_OK 38829 } 38830 if rc != SQLITE_OK && rc != SQLITE_OK|int32(1)<<8 || *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 38831 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18883, zName, ts+18902, *(*uintptr)(unsafe.Pointer(bp + 72)), 38832 uintptr(0))) 38833 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38834 return TCL_ERROR 38835 } 38836 } 38837 return TCL_OK 38838 } 38839 38840 var aExtension = [22]struct { 38841 FzExtName uintptr 38842 FpInit uintptr 38843 }{ 38844 {FzExtName: ts + 18912, FpInit: 0}, 38845 {FzExtName: ts + 18919, FpInit: 0}, 38846 {FzExtName: ts + 4060, FpInit: 0}, 38847 {FzExtName: ts + 18929, FpInit: 0}, 38848 {FzExtName: ts + 4815, FpInit: 0}, 38849 {FzExtName: ts + 4838, FpInit: 0}, 38850 {FzExtName: ts + 4896, FpInit: 0}, 38851 {FzExtName: ts + 4974, FpInit: 0}, 38852 {FzExtName: ts + 18937, FpInit: 0}, 38853 {FzExtName: ts + 5483, FpInit: 0}, 38854 {FzExtName: ts + 5507, FpInit: 0}, 38855 {FzExtName: ts + 18944, FpInit: 0}, 38856 {FzExtName: ts + 6087, FpInit: 0}, 38857 {FzExtName: ts + 6162, FpInit: 0}, 38858 {FzExtName: ts + 6535, FpInit: 0}, 38859 {FzExtName: ts + 6831, FpInit: 0}, 38860 {FzExtName: ts + 6846, FpInit: 0}, 38861 {FzExtName: ts + 18953, FpInit: 0}, 38862 {FzExtName: ts + 18960, FpInit: 0}, 38863 {FzExtName: ts + 18969, FpInit: 0}, 38864 {FzExtName: ts + 8921, FpInit: 0}, 38865 {FzExtName: ts + 9463, FpInit: 0}, 38866 } 38867 38868 func sorter_test_fakeheap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38869 bp := tls.Alloc(4) 38870 defer tls.Free(4) 38871 38872 if objc != 2 { 38873 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 38874 return TCL_ERROR 38875 } 38876 38877 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 38878 return TCL_ERROR 38879 } 38880 38881 if *(*int32)(unsafe.Pointer(bp)) != 0 { 38882 if sqlite3.Xsqlite3Config.FpHeap == uintptr(0) { 38883 sqlite3.Xsqlite3Config.FpHeap = libc.UintptrFromInt64(int64(-1)) 38884 } 38885 } else { 38886 if sqlite3.Xsqlite3Config.FpHeap == libc.UintptrFromInt64(int64(-1)) { 38887 sqlite3.Xsqlite3Config.FpHeap = uintptr(0) 38888 } 38889 } 38890 38891 tcl.XTcl_ResetResult(tls, interp) 38892 return TCL_OK 38893 } 38894 38895 func sorter_test_sort4_helper(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38896 bp := tls.Alloc(80) 38897 defer tls.Free(80) 38898 38899 var zSql1 uintptr 38900 var zSql2 uintptr 38901 38902 var iStep int32 38903 var iCksum1 uint32 38904 var iCksum2 uint32 38905 var rc int32 38906 var iB int32 38907 38908 var a int32 38909 var a1 int32 38910 iCksum1 = uint32(0) 38911 iCksum2 = uint32(0) 38912 38913 if !(objc != 5) { 38914 goto __1 38915 } 38916 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18976) 38917 return TCL_ERROR 38918 __1: 38919 ; 38920 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0) { 38921 goto __2 38922 } 38923 return TCL_ERROR 38924 __2: 38925 ; 38926 zSql1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38927 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0) { 38928 goto __3 38929 } 38930 return TCL_ERROR 38931 __3: 38932 ; 38933 zSql2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 38934 38935 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql1, -1, bp+72, uintptr(0)) 38936 if !(rc != SQLITE_OK) { 38937 goto __4 38938 } 38939 goto sql_error 38940 __4: 38941 ; 38942 iB = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) - 1 38943 iStep = 0 38944 __5: 38945 if !(iStep < *(*int32)(unsafe.Pointer(bp + 64)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 38946 goto __7 38947 } 38948 a = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 38949 if !(a != sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), iB)) { 38950 goto __8 38951 } 38952 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18995, 0)) 38953 return TCL_ERROR 38954 __8: 38955 ; 38956 iCksum1 = iCksum1 + (iCksum1<<3 + uint32(a)) 38957 goto __6 38958 __6: 38959 iStep++ 38960 goto __5 38961 goto __7 38962 __7: 38963 ; 38964 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38965 if !(rc != SQLITE_OK) { 38966 goto __9 38967 } 38968 goto sql_error 38969 __9: 38970 ; 38971 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql2, -1, bp+72, uintptr(0)) 38972 if !(rc != SQLITE_OK) { 38973 goto __10 38974 } 38975 goto sql_error 38976 __10: 38977 ; 38978 iStep = 0 38979 __11: 38980 if !(SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 38981 goto __13 38982 } 38983 a1 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 38984 iCksum2 = iCksum2 + (iCksum2<<3 + uint32(a1)) 38985 goto __12 38986 __12: 38987 iStep++ 38988 goto __11 38989 goto __13 38990 __13: 38991 ; 38992 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 38993 if !(rc != SQLITE_OK) { 38994 goto __14 38995 } 38996 goto sql_error 38997 __14: 38998 ; 38999 if !(iCksum1 != iCksum2) { 39000 goto __15 39001 } 39002 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19014, 0)) 39003 return TCL_ERROR 39004 __15: 39005 ; 39006 return TCL_OK 39007 sql_error: 39008 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19032, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 56))), 0)) 39009 return TCL_ERROR 39010 } 39011 39012 func test_bad_behavior(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39013 bp := tls.Alloc(44) 39014 defer tls.Free(44) 39015 39016 var xyz int32 39017 var i int32 = *(*int32)(unsafe.Pointer(clientData)) 39018 var j int32 39019 39020 var a uintptr 39021 if objc != 2 { 39022 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19044) 39023 return TCL_ERROR 39024 } 39025 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 39026 return TCL_ERROR 39027 } 39028 switch *(*int32)(unsafe.Pointer(bp)) { 39029 case 1: 39030 { 39031 xyz = 0x7fffff00 - i 39032 xyz = xyz + 0x100 39033 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, xyz)) 39034 break 39035 39036 } 39037 case 2: 39038 { 39039 *(*int32)(unsafe.Pointer(bp + 4 + 1*4)) = 5 39040 if *(*int32)(unsafe.Pointer(bp + 4 + uintptr(i)*4)) > 0 { 39041 *(*int32)(unsafe.Pointer(bp + 4 + 1*4))++ 39042 } 39043 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4 + 1*4)))) 39044 break 39045 39046 } 39047 case 3: 39048 { 39049 a = libc.Xmalloc(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(10)) 39050 for j = 0; j < 10; j++ { 39051 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = j 39052 } 39053 libc.Xfree(tls, a) 39054 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 39055 break 39056 39057 } 39058 case 4: 39059 { 39060 tcl.XTcl_Panic(tls, ts+19049, 0) 39061 break 39062 39063 } 39064 } 39065 return TCL_OK 39066 } 39067 39068 func test_register_dbstat_vtab(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39069 bp := tls.Alloc(64) 39070 defer tls.Free(64) 39071 39072 var zDb uintptr 39073 39074 if objc != 2 { 39075 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 39076 return TCL_ERROR 39077 } 39078 39079 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 39080 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp) != 0 { 39081 var db uintptr = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)).Fdb 39082 sqlite3.Xsqlite3DbstatRegister(tls, db) 39083 } 39084 return TCL_OK 39085 } 39086 39087 func test_sqlite3_db_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39088 bp := tls.Alloc(28) 39089 defer tls.Free(28) 39090 39091 var i int32 39092 *(*int32)(unsafe.Pointer(bp + 24)) = 0 39093 var zSetting uintptr 39094 39095 if objc != 4 && objc != 3 { 39096 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19066) 39097 return TCL_ERROR 39098 } 39099 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 39100 return TCL_ERROR 39101 } 39102 zSetting = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39103 if sqlite3.Xsqlite3_strglob(tls, ts+19085, zSetting) == 0 { 39104 zSetting += uintptr(7) 39105 } 39106 if sqlite3.Xsqlite3_strglob(tls, ts+19094, zSetting) == 0 { 39107 zSetting += uintptr(9) 39108 } 39109 if sqlite3.Xsqlite3_strglob(tls, ts+19105, zSetting) == 0 { 39110 zSetting += uintptr(7) 39111 } 39112 for i = 0; i < int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 39113 FzName uintptr 39114 FeVal int32 39115 F__ccgo_pad1 [4]byte 39116 }{}))); i++ { 39117 if libc.Xstrcmp(tls, zSetting, aSetting[i].FzName) == 0 { 39118 break 39119 } 39120 } 39121 if i >= int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 39122 FzName uintptr 39123 FeVal int32 39124 F__ccgo_pad1 [4]byte 39125 }{}))) { 39126 tcl.XTcl_SetObjResult(tls, interp, 39127 tcl.XTcl_NewStringObj(tls, ts+19114, -1)) 39128 return TCL_ERROR 39129 } 39130 if objc == 4 { 39131 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 39132 return TCL_ERROR 39133 } 39134 } else { 39135 *(*int32)(unsafe.Pointer(bp + 24)) = -1 39136 } 39137 sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), aSetting[i].FeVal, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 24)), bp+24)) 39138 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 24)))) 39139 return TCL_OK 39140 } 39141 39142 var aSetting = [14]struct { 39143 FzName uintptr 39144 FeVal int32 39145 F__ccgo_pad1 [4]byte 39146 }{ 39147 {FzName: ts + 19148, FeVal: SQLITE_DBCONFIG_ENABLE_FKEY}, 39148 {FzName: ts + 19153, FeVal: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 39149 {FzName: ts + 19161, FeVal: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 39150 {FzName: ts + 19176, FeVal: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 39151 {FzName: ts + 19191, FeVal: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 39152 {FzName: ts + 19208, FeVal: SQLITE_DBCONFIG_ENABLE_QPSG}, 39153 {FzName: ts + 19213, FeVal: SQLITE_DBCONFIG_TRIGGER_EQP}, 39154 {FzName: ts + 19225, FeVal: SQLITE_DBCONFIG_RESET_DATABASE}, 39155 {FzName: ts + 19234, FeVal: SQLITE_DBCONFIG_DEFENSIVE}, 39156 {FzName: ts + 19244, FeVal: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 39157 {FzName: ts + 19260, FeVal: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 39158 {FzName: ts + 19279, FeVal: SQLITE_DBCONFIG_DQS_DML}, 39159 {FzName: ts + 19287, FeVal: SQLITE_DBCONFIG_DQS_DDL}, 39160 {FzName: ts + 19295, FeVal: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 39161 } 39162 39163 func test_sqlite3_txn_state(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39164 bp := tls.Alloc(8) 39165 defer tls.Free(8) 39166 39167 var zSchema uintptr 39168 var iTxn int32 39169 39170 if objc != 2 && objc != 3 { 39171 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19314) 39172 return TCL_ERROR 39173 } 39174 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 39175 return TCL_ERROR 39176 } 39177 if objc == 3 { 39178 zSchema = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39179 } else { 39180 zSchema = uintptr(0) 39181 } 39182 iTxn = sqlite3.Xsqlite3_txn_state(tls, *(*uintptr)(unsafe.Pointer(bp)), zSchema) 39183 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iTxn)) 39184 return TCL_OK 39185 } 39186 39187 func test_dbconfig_maindbname_icecube(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39188 bp := tls.Alloc(16) 39189 defer tls.Free(16) 39190 39191 var rc int32 39192 39193 if objc != 2 { 39194 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 39195 return TCL_ERROR 39196 } else { 39197 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 39198 return TCL_ERROR 39199 } 39200 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), SQLITE_DBCONFIG_MAINDBNAME, libc.VaList(bp, ts+19326)) 39201 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39202 return TCL_OK 39203 } 39204 return int32(0) 39205 } 39206 39207 func test_mmap_warm(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39208 bp := tls.Alloc(8) 39209 defer tls.Free(8) 39210 39211 if objc != 2 && objc != 3 { 39212 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19334) 39213 return TCL_ERROR 39214 } else { 39215 var rc int32 39216 39217 var zDb uintptr = uintptr(0) 39218 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 39219 return TCL_ERROR 39220 } 39221 if objc == 3 { 39222 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39223 } 39224 rc = sqlite3_mmap_warm(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 39225 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 39226 return TCL_OK 39227 } 39228 return int32(0) 39229 } 39230 39231 func test_write_db(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39232 bp := tls.Alloc(32) 39233 defer tls.Free(32) 39234 39235 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 39236 *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) = int64(0) 39237 var aData uintptr = uintptr(0) 39238 *(*int32)(unsafe.Pointer(bp + 16)) = 0 39239 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 39240 var rc int32 39241 39242 if objc != 4 { 39243 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19346) 39244 return TCL_ERROR 39245 } 39246 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 39247 return TCL_ERROR 39248 } 39249 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 39250 return TCL_ERROR 39251 } 39252 aData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16) 39253 39254 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 39255 rc = (*struct { 39256 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 39257 })(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))) 39258 39259 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 39260 return TCL_OK 39261 } 39262 39263 func test_register_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39264 if objc != 1 { 39265 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 39266 return TCL_ERROR 39267 } else { 39268 var rc int32 = sqlite3_register_cksumvfs(tls, uintptr(0)) 39269 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 39270 } 39271 return TCL_OK 39272 } 39273 39274 func test_unregister_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39275 if objc != 1 { 39276 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 39277 return TCL_ERROR 39278 } else { 39279 var rc int32 = sqlite3_unregister_cksumvfs(tls) 39280 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 39281 } 39282 return TCL_OK 39283 } 39284 39285 func test_decode_hexdb(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39286 bp := tls.Alloc(296) 39287 defer tls.Free(296) 39288 39289 var zIn uintptr = uintptr(0) 39290 var a uintptr = uintptr(0) 39291 *(*int32)(unsafe.Pointer(bp + 216)) = 0 39292 var lineno int32 = 0 39293 var i int32 39294 var iNext int32 39295 var iOffset int32 = 0 39296 39297 var rc int32 39298 39299 if objc != 2 { 39300 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19361) 39301 return TCL_ERROR 39302 } 39303 zIn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 39304 for i = 0; *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) != 0; i = iNext { 39305 lineno++ 39306 for iNext = i; *(*uint8)(unsafe.Pointer(zIn + uintptr(iNext))) != 0 && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iNext)))) != '\n'; iNext++ { 39307 } 39308 if int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(iNext)))) == '\n' { 39309 iNext++ 39310 } 39311 for int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == ' ' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '\t' { 39312 i++ 39313 } 39314 if a == uintptr(0) { 39315 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19367, libc.VaList(bp, bp+216, bp+220)) 39316 if rc != 2 { 39317 continue 39318 } 39319 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 { 39320 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19389, uintptr(0))) 39321 return TCL_ERROR 39322 } 39323 *(*int32)(unsafe.Pointer(bp + 216)) = (*(*int32)(unsafe.Pointer(bp + 216)) + *(*int32)(unsafe.Pointer(bp + 220)) - 1) & ^(*(*int32)(unsafe.Pointer(bp + 220)) - 1) 39324 if *(*int32)(unsafe.Pointer(bp + 216)) < 512 { 39325 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19410, uintptr(0))) 39326 return TCL_ERROR 39327 } 39328 a = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 39329 if a == uintptr(0) { 39330 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+2069, uintptr(0))) 39331 return TCL_ERROR 39332 } 39333 libc.Xmemset(tls, a, 0, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 39334 continue 39335 } 39336 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19427, libc.VaList(bp+64, bp+224, bp+228)) 39337 if rc == 2 { 39338 iOffset = *(*int32)(unsafe.Pointer(bp + 228)) 39339 continue 39340 } 39341 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19447, 39342 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, 39343 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)) 39344 if rc == 17 { 39345 *(*int32)(unsafe.Pointer(bp + 228)) = iOffset + *(*int32)(unsafe.Pointer(bp + 224)) 39346 if *(*int32)(unsafe.Pointer(bp + 228))+16 <= *(*int32)(unsafe.Pointer(bp + 216)) { 39347 var ii int32 39348 for ii = 0; ii < 16; ii++ { 39349 *(*uint8)(unsafe.Pointer(a + uintptr(*(*int32)(unsafe.Pointer(bp + 228))+ii))) = uint8(*(*uint32)(unsafe.Pointer(bp + 232 + uintptr(ii)*4)) & uint32(0xff)) 39350 } 39351 } 39352 continue 39353 } 39354 } 39355 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, a, *(*int32)(unsafe.Pointer(bp + 216)))) 39356 libc.Xfree(tls, a) 39357 return TCL_OK 39358 } 39359 39360 type AutovacPageData1 = struct { 39361 Finterp uintptr 39362 FzScript uintptr 39363 } 39364 39365 type AutovacPageData = AutovacPageData1 39366 39367 func test_autovacuum_pages_callback(tls *libc.TLS, pClientData uintptr, zSchema uintptr, nFilePages uint32, nFreePages uint32, nBytePerPage uint32) uint32 { 39368 bp := tls.Alloc(344) 39369 defer tls.Free(344) 39370 39371 var pData uintptr = pClientData 39372 39373 tcl.XTcl_DStringInit(tls, bp+24) 39374 tcl.XTcl_DStringAppend(tls, bp+24, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, -1) 39375 tcl.XTcl_DStringAppendElement(tls, bp+24, zSchema) 39376 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+240, ts+17791, libc.VaList(bp, nFilePages)) 39377 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 39378 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+240, ts+17791, libc.VaList(bp+8, nFreePages)) 39379 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 39380 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+240, ts+17791, libc.VaList(bp+16, nBytePerPage)) 39381 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 39382 tcl.XTcl_ResetResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp) 39383 tcl.XTcl_Eval(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+24)).Fstring) 39384 tcl.XTcl_DStringFree(tls, bp+24) 39385 *(*uint32)(unsafe.Pointer(bp + 340)) = nFreePages 39386 tcl.XTcl_GetIntFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp), bp+340) 39387 return *(*uint32)(unsafe.Pointer(bp + 340)) 39388 } 39389 39390 func test_autovacuum_pages(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39391 bp := tls.Alloc(1048) 39392 defer tls.Free(1048) 39393 39394 var pData uintptr 39395 39396 var rc int32 39397 var zScript uintptr 39398 if objc != 2 && objc != 3 { 39399 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19501) 39400 return TCL_ERROR 39401 } 39402 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) != 0 { 39403 return TCL_ERROR 39404 } 39405 if objc == 3 { 39406 zScript = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39407 } else { 39408 zScript = uintptr(0) 39409 } 39410 if zScript != 0 { 39411 var nScript size_t = libc.Xstrlen(tls, zScript) 39412 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(AutovacPageData{}))+nScript+uint64(1)) 39413 if pData == uintptr(0) { 39414 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, uintptr(0))) 39415 return TCL_ERROR 39416 } 39417 (*AutovacPageData)(unsafe.Pointer(pData)).Finterp = interp 39418 (*AutovacPageData)(unsafe.Pointer(pData)).FzScript = pData + 1*16 39419 libc.Xmemcpy(tls, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, zScript, nScript+uint64(1)) 39420 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), *(*uintptr)(unsafe.Pointer(&struct { 39421 f func(*libc.TLS, uintptr, uintptr, uint32, uint32, uint32) uint32 39422 }{test_autovacuum_pages_callback})), 39423 pData, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 39424 } else { 39425 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), uintptr(0), uintptr(0), uintptr(0)) 39426 } 39427 if rc != 0 { 39428 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]uint8{})), bp+48, 39429 ts+19513, libc.VaList(bp+16, rc)) 39430 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+48, uintptr(0))) 39431 return TCL_ERROR 39432 } 39433 return TCL_OK 39434 } 39435 39436 func Sqlitetest1_Init(tls *libc.TLS, interp uintptr) int32 { 39437 var i int32 39438 39439 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd1))/uint64(unsafe.Sizeof(struct { 39440 FzName uintptr 39441 FxProc uintptr 39442 }{})); i++ { 39443 tcl.XTcl_CreateCommand(tls, interp, aCmd1[i].FzName, aCmd1[i].FxProc, uintptr(0), uintptr(0)) 39444 } 39445 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd1))/uint64(unsafe.Sizeof(struct { 39446 FzName uintptr 39447 FxProc uintptr 39448 FclientData uintptr 39449 }{})); i++ { 39450 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd1[i].FzName, 39451 aObjCmd1[i].FxProc, aObjCmd1[i].FclientData, uintptr(0)) 39452 } 39453 tcl.XTcl_LinkVar(tls, interp, ts+19551, 39454 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_search_count)), TCL_LINK_INT) 39455 tcl.XTcl_LinkVar(tls, interp, ts+19571, 39456 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_found_count)), TCL_LINK_INT) 39457 tcl.XTcl_LinkVar(tls, interp, ts+19590, 39458 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sort_count)), TCL_LINK_INT) 39459 tcl.XTcl_LinkVar(tls, interp, ts+19608, 39460 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_max_blobsize)), TCL_LINK_INT) 39461 tcl.XTcl_LinkVar(tls, interp, ts+19629, 39462 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_like_count)), TCL_LINK_INT) 39463 tcl.XTcl_LinkVar(tls, interp, ts+19647, 39464 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_interrupt_count)), TCL_LINK_INT) 39465 tcl.XTcl_LinkVar(tls, interp, ts+19670, 39466 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_open_file_count)), TCL_LINK_INT) 39467 tcl.XTcl_LinkVar(tls, interp, ts+19693, 39468 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_current_time)), TCL_LINK_INT) 39469 tcl.XTcl_LinkVar(tls, interp, ts+19713, 39470 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_xferopt_count)), TCL_LINK_INT) 39471 tcl.XTcl_LinkVar(tls, interp, ts+19735, 39472 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_readdb_count)), TCL_LINK_INT) 39473 tcl.XTcl_LinkVar(tls, interp, ts+19762, 39474 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writedb_count)), TCL_LINK_INT) 39475 tcl.XTcl_LinkVar(tls, interp, ts+19790, 39476 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writej_count)), TCL_LINK_INT) 39477 tcl.XTcl_LinkVar(tls, interp, ts+19817, 39478 uintptr(unsafe.Pointer(&unaligned_string_counter)), TCL_LINK_INT) 39479 tcl.XTcl_LinkVar(tls, interp, ts+19842, 39480 uintptr(unsafe.Pointer(&pzNeededCollation)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 39481 { 39482 tcl.XTcl_LinkVar(tls, interp, ts+19871, 39483 uintptr(unsafe.Pointer(&query_plan)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 39484 39485 } 39486 tcl.XTcl_LinkVar(tls, interp, ts+19889, 39487 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_opentemp_count)), TCL_LINK_INT) 39488 tcl.XTcl_LinkVar(tls, interp, ts+19911, 39489 uintptr(unsafe.Pointer(&sqlite_static_bind_value)), TCL_LINK_STRING) 39490 tcl.XTcl_LinkVar(tls, interp, ts+19936, 39491 uintptr(unsafe.Pointer(&sqlite_static_bind_nbyte)), TCL_LINK_INT) 39492 tcl.XTcl_LinkVar(tls, interp, ts+19961, 39493 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_temp_directory)), TCL_LINK_STRING) 39494 tcl.XTcl_LinkVar(tls, interp, ts+19983, 39495 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_data_directory)), TCL_LINK_STRING) 39496 tcl.XTcl_LinkVar(tls, interp, ts+20005, 39497 uintptr(unsafe.Pointer(&bitmask_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39498 tcl.XTcl_LinkVar(tls, interp, ts+20018, 39499 uintptr(unsafe.Pointer(&longdouble_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 39500 tcl.XTcl_LinkVar(tls, interp, ts+20034, 39501 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sync_count)), TCL_LINK_INT) 39502 tcl.XTcl_LinkVar(tls, interp, ts+20052, 39503 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_fullsync_count)), TCL_LINK_INT) 39504 return TCL_OK 39505 } 39506 39507 var iZero int32 = 0 39508 var aCmd1 = [39]struct { 39509 FzName uintptr 39510 FxProc uintptr 39511 }{ 39512 {FzName: ts + 20074, FxProc: 0}, 39513 {FzName: ts + 20083, FxProc: 0}, 39514 {FzName: ts + 20092, FxProc: 0}, 39515 {FzName: ts + 20112, FxProc: 0}, 39516 {FzName: ts + 20134, FxProc: 0}, 39517 {FzName: ts + 20155, FxProc: 0}, 39518 {FzName: ts + 20175, FxProc: 0}, 39519 {FzName: ts + 20196, FxProc: 0}, 39520 {FzName: ts + 20220, FxProc: 0}, 39521 {FzName: ts + 20243, FxProc: 0}, 39522 {FzName: ts + 20266, FxProc: 0}, 39523 {FzName: ts + 20292, FxProc: 0}, 39524 {FzName: ts + 20315, FxProc: 0}, 39525 {FzName: ts + 20338, FxProc: 0}, 39526 {FzName: ts + 20359, FxProc: 0}, 39527 {FzName: ts + 20385, FxProc: 0}, 39528 {FzName: ts + 20405, FxProc: 0}, 39529 {FzName: ts + 20422, FxProc: 0}, 39530 {FzName: ts + 20435, FxProc: 0}, 39531 {FzName: ts + 20451, FxProc: 0}, 39532 {FzName: ts + 20476, FxProc: 0}, 39533 {FzName: ts + 20490, FxProc: 0}, 39534 {FzName: ts + 20507, FxProc: 0}, 39535 {FzName: ts + 20531, FxProc: 0}, 39536 {FzName: ts + 20556, FxProc: 0}, 39537 {FzName: ts + 20577, FxProc: 0}, 39538 {FzName: ts + 20607, FxProc: 0}, 39539 {FzName: ts + 20620, FxProc: 0}, 39540 {FzName: ts + 20632, FxProc: 0}, 39541 {FzName: ts + 20643, FxProc: 0}, 39542 {FzName: ts + 20655, FxProc: 0}, 39543 {FzName: ts + 20669, FxProc: 0}, 39544 {FzName: ts + 20687, FxProc: 0}, 39545 {FzName: ts + 20710, FxProc: 0}, 39546 {FzName: ts + 20734, FxProc: 0}, 39547 {FzName: ts + 20757, FxProc: 0}, 39548 {FzName: ts + 20778, FxProc: 0}, 39549 {FzName: ts + 20785, FxProc: 0}, 39550 {FzName: ts + 20800, FxProc: 0}, 39551 } 39552 var aObjCmd1 = [165]struct { 39553 FzName uintptr 39554 FxProc uintptr 39555 FclientData uintptr 39556 }{ 39557 {FzName: ts + 20823, FxProc: 0}, 39558 {FzName: ts + 20841, FxProc: 0}, 39559 {FzName: ts + 20859, FxProc: 0, FclientData: 0}, 39560 {FzName: ts + 20872, FxProc: 0}, 39561 {FzName: ts + 20893, FxProc: 0}, 39562 {FzName: ts + 20920, FxProc: 0}, 39563 {FzName: ts + 20934, FxProc: 0}, 39564 {FzName: ts + 20950, FxProc: 0}, 39565 {FzName: ts + 20967, FxProc: 0}, 39566 {FzName: ts + 20982, FxProc: 0}, 39567 {FzName: ts + 20999, FxProc: 0}, 39568 {FzName: ts + 21021, FxProc: 0}, 39569 {FzName: ts + 21045, FxProc: 0}, 39570 {FzName: ts + 21064, FxProc: 0}, 39571 {FzName: ts + 21084, FxProc: 0}, 39572 {FzName: ts + 21102, FxProc: 0}, 39573 {FzName: ts + 21120, FxProc: 0}, 39574 {FzName: ts + 21140, FxProc: 0}, 39575 {FzName: ts + 21158, FxProc: 0}, 39576 {FzName: ts + 21189, FxProc: 0}, 39577 {FzName: ts + 21223, FxProc: 0}, 39578 {FzName: ts + 21243, FxProc: 0}, 39579 {FzName: ts + 21272, FxProc: 0}, 39580 {FzName: ts + 21300, FxProc: 0}, 39581 {FzName: ts + 21329, FxProc: 0}, 39582 {FzName: ts + 21352, FxProc: 0}, 39583 {FzName: ts + 21366, FxProc: 0}, 39584 {FzName: ts + 21382, FxProc: 0}, 39585 {FzName: ts + 21407, FxProc: 0}, 39586 {FzName: ts + 21422, FxProc: 0}, 39587 {FzName: ts + 21443, FxProc: 0}, 39588 {FzName: ts + 21460, FxProc: 0}, 39589 {FzName: ts + 21473, FxProc: 0}, 39590 {FzName: ts + 21488, FxProc: 0}, 39591 {FzName: ts + 21504, FxProc: 0}, 39592 {FzName: ts + 21523, FxProc: 0}, 39593 {FzName: ts + 21541, FxProc: 0}, 39594 {FzName: ts + 21557, FxProc: 0}, 39595 {FzName: ts + 21575, FxProc: 0}, 39596 {FzName: ts + 21594, FxProc: 0}, 39597 {FzName: ts + 21613, FxProc: 0}, 39598 {FzName: ts + 21637, FxProc: 0}, 39599 {FzName: ts + 21658, FxProc: 0}, 39600 {FzName: ts + 21675, FxProc: 0}, 39601 {FzName: ts + 21695, FxProc: 0}, 39602 {FzName: ts + 21709, FxProc: 0}, 39603 {FzName: ts + 21725, FxProc: 0}, 39604 {FzName: ts + 21751, FxProc: 0}, 39605 {FzName: ts + 21767, FxProc: 0}, 39606 {FzName: ts + 21780, FxProc: 0}, 39607 {FzName: ts + 21792, FxProc: 0}, 39608 {FzName: ts + 21813, FxProc: 0}, 39609 {FzName: ts + 21831, FxProc: 0}, 39610 {FzName: ts + 21853, FxProc: 0}, 39611 {FzName: ts + 21876, FxProc: 0}, 39612 {FzName: ts + 21894, FxProc: 0}, 39613 {FzName: ts + 21912, FxProc: 0}, 39614 {FzName: ts + 21935, FxProc: 0}, 39615 {FzName: ts + 21961, FxProc: 0}, 39616 {FzName: ts + 21983, FxProc: 0}, 39617 {FzName: ts + 22004, FxProc: 0}, 39618 {FzName: ts + 22024, FxProc: 0}, 39619 {FzName: ts + 22044, FxProc: 0}, 39620 {FzName: ts + 22068, FxProc: 0}, 39621 {FzName: ts + 22094, FxProc: 0}, 39622 {FzName: ts + 22120, FxProc: 0}, 39623 {FzName: ts + 22143, FxProc: 0}, 39624 {FzName: ts + 22167, FxProc: 0}, 39625 {FzName: ts + 22190, FxProc: 0}, 39626 {FzName: ts + 22220, FxProc: 0}, 39627 {FzName: ts + 22250, FxProc: 0}, 39628 {FzName: ts + 22264, FxProc: 0}, 39629 {FzName: ts + 22292, FxProc: 0}, 39630 {FzName: ts + 22308, FxProc: 0}, 39631 {FzName: ts + 22327, FxProc: 0}, 39632 {FzName: ts + 22344, FxProc: 0}, 39633 {FzName: ts + 22354, FxProc: 0}, 39634 {FzName: ts + 22374, FxProc: 0}, 39635 {FzName: ts + 22397, FxProc: 0}, 39636 {FzName: ts + 22421, FxProc: 0}, 39637 {FzName: ts + 22442, FxProc: 0}, 39638 {FzName: ts + 22454, FxProc: 0}, 39639 {FzName: ts + 22475, FxProc: 0}, 39640 {FzName: ts + 22494, FxProc: 0}, 39641 {FzName: ts + 22514, FxProc: 0}, 39642 {FzName: ts + 22534, FxProc: 0}, 39643 {FzName: ts + 22556, FxProc: 0}, 39644 {FzName: ts + 22577, FxProc: 0, FclientData: 0}, 39645 {FzName: ts + 22597, FxProc: 0, FclientData: 0}, 39646 {FzName: ts + 22617, FxProc: 0, FclientData: 0}, 39647 {FzName: ts + 22636, FxProc: 0, FclientData: 0}, 39648 {FzName: ts + 22657, FxProc: 0, FclientData: 0}, 39649 {FzName: ts + 22681, FxProc: 0, FclientData: 0}, 39650 {FzName: ts + 22710, FxProc: 0, FclientData: 0}, 39651 {FzName: ts + 22736, FxProc: 0, FclientData: 0}, 39652 {FzName: ts + 22763, FxProc: 0, FclientData: 0}, 39653 {FzName: ts + 22786, FxProc: 0, FclientData: 0}, 39654 {FzName: ts + 22808, FxProc: 0, FclientData: 0}, 39655 {FzName: ts + 22830, FxProc: 0}, 39656 {FzName: ts + 22860, FxProc: 0, FclientData: 0}, 39657 {FzName: ts + 22886, 39658 FxProc: 0, FclientData: 0}, 39659 {FzName: ts + 22917, FxProc: 0, FclientData: 0}, 39660 {FzName: ts + 22945, FxProc: 0, FclientData: 0}, 39661 {FzName: ts + 22974, FxProc: 0}, 39662 {FzName: ts + 23002, FxProc: 0}, 39663 {FzName: ts + 23025, FxProc: 0}, 39664 {FzName: ts + 23043, FxProc: 0}, 39665 {FzName: ts + 23059, FxProc: 0}, 39666 {FzName: ts + 23077, FxProc: 0}, 39667 {FzName: ts + 23096, FxProc: 0}, 39668 {FzName: ts + 23115, FxProc: 0}, 39669 {FzName: ts + 23133, FxProc: 0}, 39670 {FzName: ts + 23161, FxProc: 0}, 39671 {FzName: ts + 23189, FxProc: 0}, 39672 {FzName: ts + 23217, FxProc: 0}, 39673 {FzName: ts + 23244, FxProc: 0}, 39674 {FzName: ts + 23270, FxProc: 0}, 39675 {FzName: ts + 23295, FxProc: 0}, 39676 {FzName: ts + 23328, FxProc: 0}, 39677 {FzName: ts + 23349, FxProc: 0}, 39678 {FzName: ts + 23375, FxProc: 0}, 39679 {FzName: ts + 23401, FxProc: 0}, 39680 {FzName: ts + 23430, FxProc: 0}, 39681 {FzName: ts + 23447, FxProc: 0}, 39682 {FzName: ts + 23474, FxProc: 0}, 39683 {FzName: ts + 23491, FxProc: 0}, 39684 {FzName: ts + 23515, FxProc: 0}, 39685 {FzName: ts + 23533, FxProc: 0}, 39686 {FzName: ts + 23559, FxProc: 0}, 39687 {FzName: ts + 23579, FxProc: 0}, 39688 {FzName: ts + 23597, FxProc: 0}, 39689 {FzName: ts + 23625, FxProc: 0}, 39690 {FzName: ts + 23653, FxProc: 0}, 39691 {FzName: ts + 23679, FxProc: 0}, 39692 {FzName: ts + 23709, FxProc: 0}, 39693 {FzName: ts + 23729, FxProc: 0}, 39694 {FzName: ts + 23742, FxProc: 0}, 39695 {FzName: ts + 23764, FxProc: 0}, 39696 {FzName: ts + 23787, FxProc: 0}, 39697 {FzName: ts + 23813, FxProc: 0}, 39698 {FzName: ts + 23840, FxProc: 0}, 39699 {FzName: ts + 23857, FxProc: 0}, 39700 {FzName: ts + 23882, FxProc: 0}, 39701 {FzName: ts + 23903, FxProc: 0}, 39702 {FzName: ts + 23913, FxProc: 0}, 39703 {FzName: ts + 23935, FxProc: 0}, 39704 {FzName: ts + 23956, FxProc: 0}, 39705 {FzName: ts + 23981, FxProc: 0}, 39706 {FzName: ts + 24004, FxProc: 0}, 39707 {FzName: ts + 24025, FxProc: 0}, 39708 {FzName: ts + 24047, FxProc: 0}, 39709 {FzName: ts + 24069, FxProc: 0}, 39710 {FzName: ts + 24090, FxProc: 0}, 39711 {FzName: ts + 24115, FxProc: 0}, 39712 {FzName: ts + 24141, FxProc: 0}, 39713 {FzName: ts + 24168, FxProc: 0}, 39714 {FzName: ts + 24194, FxProc: 0}, 39715 {FzName: ts + 24218, FxProc: 0}, 39716 {FzName: ts + 24237, FxProc: 0}, 39717 {FzName: ts + 24255, FxProc: 0}, 39718 {FzName: ts + 24280, FxProc: 0}, 39719 {FzName: ts + 24305, FxProc: 0}, 39720 {FzName: ts + 24318, FxProc: 0}, 39721 {FzName: ts + 24332, FxProc: 0}, 39722 {FzName: ts + 24358, FxProc: 0}, 39723 } 39724 var bitmask_size int32 = int32(uint64(unsafe.Sizeof(Bitmask(0))) * uint64(8)) 39725 var longdouble_size int32 = int32(unsafe.Sizeof(float64(0))) 39726 var query_plan uintptr = ts + 24386 39727 39728 var test_pagesize int32 = 1024 39729 39730 func pager_test_reiniter(tls *libc.TLS, pNotUsed uintptr) { 39731 return 39732 } 39733 39734 func pager_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39735 bp := tls.Alloc(192) 39736 defer tls.Free(192) 39737 39738 var rc int32 39739 39740 if argc != 3 { 39741 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39742 ts+24412, 0)) 39743 return TCL_ERROR 39744 } 39745 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39746 return TCL_ERROR 39747 } 39748 rc = sqlite3.Xsqlite3PagerOpen(tls, sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)), bp+80, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, 0, 39749 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB, 39750 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{pager_test_reiniter}))) 39751 if rc != SQLITE_OK { 39752 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39753 return TCL_ERROR 39754 } 39755 sqlite3.Xsqlite3PagerSetCachesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 39756 *(*u32)(unsafe.Pointer(bp + 88)) = u32(test_pagesize) 39757 sqlite3.Xsqlite3PagerSetPagesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), bp+88, -1) 39758 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+92, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39759 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, 0)) 39760 return TCL_OK 39761 } 39762 39763 func pager_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39764 bp := tls.Alloc(48) 39765 defer tls.Free(48) 39766 39767 var pPager uintptr 39768 var rc int32 39769 if argc != 2 { 39770 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39771 ts+24430, 0)) 39772 return TCL_ERROR 39773 } 39774 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39775 rc = sqlite3.Xsqlite3PagerClose(tls, pPager, uintptr(0)) 39776 if rc != SQLITE_OK { 39777 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39778 return TCL_ERROR 39779 } 39780 return TCL_OK 39781 } 39782 39783 func pager_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39784 bp := tls.Alloc(48) 39785 defer tls.Free(48) 39786 39787 var pPager uintptr 39788 var rc int32 39789 if argc != 2 { 39790 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39791 ts+24430, 0)) 39792 return TCL_ERROR 39793 } 39794 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39795 rc = sqlite3.Xsqlite3PagerRollback(tls, pPager) 39796 if rc != SQLITE_OK { 39797 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39798 return TCL_ERROR 39799 } 39800 return TCL_OK 39801 } 39802 39803 func pager_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39804 bp := tls.Alloc(64) 39805 defer tls.Free(64) 39806 39807 var pPager uintptr 39808 var rc int32 39809 if argc != 2 { 39810 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39811 ts+24430, 0)) 39812 return TCL_ERROR 39813 } 39814 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39815 rc = sqlite3.Xsqlite3PagerCommitPhaseOne(tls, pPager, uintptr(0), 0) 39816 if rc != SQLITE_OK { 39817 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39818 return TCL_ERROR 39819 } 39820 rc = sqlite3.Xsqlite3PagerCommitPhaseTwo(tls, pPager) 39821 if rc != SQLITE_OK { 39822 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39823 return TCL_ERROR 39824 } 39825 return TCL_OK 39826 } 39827 39828 func pager_stmt_begin(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39829 bp := tls.Alloc(48) 39830 defer tls.Free(48) 39831 39832 var pPager uintptr 39833 var rc int32 39834 if argc != 2 { 39835 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39836 ts+24430, 0)) 39837 return TCL_ERROR 39838 } 39839 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39840 rc = sqlite3.Xsqlite3PagerOpenSavepoint(tls, pPager, 1) 39841 if rc != SQLITE_OK { 39842 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39843 return TCL_ERROR 39844 } 39845 return TCL_OK 39846 } 39847 39848 func pager_stmt_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39849 bp := tls.Alloc(48) 39850 defer tls.Free(48) 39851 39852 var pPager uintptr 39853 var rc int32 39854 if argc != 2 { 39855 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39856 ts+24430, 0)) 39857 return TCL_ERROR 39858 } 39859 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39860 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_ROLLBACK, 0) 39861 sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 39862 if rc != SQLITE_OK { 39863 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39864 return TCL_ERROR 39865 } 39866 return TCL_OK 39867 } 39868 39869 func pager_stmt_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39870 bp := tls.Alloc(48) 39871 defer tls.Free(48) 39872 39873 var pPager uintptr 39874 var rc int32 39875 if argc != 2 { 39876 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39877 ts+24430, 0)) 39878 return TCL_ERROR 39879 } 39880 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39881 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 39882 if rc != SQLITE_OK { 39883 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39884 return TCL_ERROR 39885 } 39886 return TCL_OK 39887 } 39888 39889 func pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39890 bp := tls.Alloc(140) 39891 defer tls.Free(140) 39892 39893 var pPager uintptr 39894 var i int32 39895 var a uintptr 39896 if argc != 2 { 39897 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39898 ts+24430, 0)) 39899 return TCL_ERROR 39900 } 39901 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39902 a = sqlite3.Xsqlite3PagerStats(tls, pPager) 39903 for i = 0; i < 9; i++ { 39904 tcl.XTcl_AppendElement(tls, interp, zName[i]) 39905 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 39906 tcl.XTcl_AppendElement(tls, interp, bp+40) 39907 } 39908 return TCL_OK 39909 } 39910 39911 var zName = [9]uintptr{ 39912 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 39913 ts + 24448, ts + 24452, ts + 24457, 39914 } 39915 39916 func pager_pagecount(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39917 bp := tls.Alloc(160) 39918 defer tls.Free(160) 39919 39920 var pPager uintptr 39921 39922 if argc != 2 { 39923 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39924 ts+24430, 0)) 39925 return TCL_ERROR 39926 } 39927 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39928 sqlite3.Xsqlite3PagerPagecount(tls, pPager, bp+56) 39929 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+60, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 56)))) 39930 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 39931 return TCL_OK 39932 } 39933 39934 func page_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39935 bp := tls.Alloc(188) 39936 defer tls.Free(188) 39937 39938 var pPager uintptr 39939 39940 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 39941 39942 var rc int32 39943 if argc != 3 { 39944 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39945 ts+24462, 0)) 39946 return TCL_ERROR 39947 } 39948 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39949 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 39950 return TCL_ERROR 39951 } 39952 rc = sqlite3.Xsqlite3PagerSharedLock(tls, pPager) 39953 if rc == SQLITE_OK { 39954 rc = sqlite3.Xsqlite3PagerGet(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 72))), bp+80, 0) 39955 } 39956 if rc != SQLITE_OK { 39957 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39958 return TCL_ERROR 39959 } 39960 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 39961 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 39962 return TCL_OK 39963 } 39964 39965 func page_lookup(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39966 bp := tls.Alloc(160) 39967 defer tls.Free(160) 39968 39969 var pPager uintptr 39970 39971 var pPage uintptr 39972 39973 if argc != 3 { 39974 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39975 ts+24462, 0)) 39976 return TCL_ERROR 39977 } 39978 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 39979 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 39980 return TCL_ERROR 39981 } 39982 pPage = sqlite3.Xsqlite3PagerLookup(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 56)))) 39983 if pPage != 0 { 39984 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+60, ts+9889, libc.VaList(bp+32, pPage)) 39985 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 39986 } 39987 return TCL_OK 39988 } 39989 39990 func pager_truncate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39991 bp := tls.Alloc(36) 39992 defer tls.Free(36) 39993 39994 var pPager uintptr 39995 39996 if argc != 3 { 39997 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39998 ts+24462, 0)) 39999 return TCL_ERROR 40000 } 40001 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40002 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 40003 return TCL_ERROR 40004 } 40005 sqlite3.Xsqlite3PagerTruncateImage(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 32)))) 40006 return TCL_OK 40007 } 40008 40009 func page_unref(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40010 bp := tls.Alloc(32) 40011 defer tls.Free(32) 40012 40013 var pPage uintptr 40014 if argc != 2 { 40015 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40016 ts+24472, 0)) 40017 return TCL_ERROR 40018 } 40019 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40020 sqlite3.Xsqlite3PagerUnref(tls, pPage) 40021 return TCL_OK 40022 } 40023 40024 func page_read(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40025 bp := tls.Alloc(148) 40026 defer tls.Free(148) 40027 40028 var pPage uintptr 40029 if argc != 2 { 40030 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40031 ts+24472, 0)) 40032 return TCL_ERROR 40033 } 40034 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40035 libc.Xmemcpy(tls, bp+48, sqlite3.Xsqlite3PagerGetData(tls, pPage), uint64(unsafe.Sizeof([100]uint8{}))) 40036 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 40037 return TCL_OK 40038 } 40039 40040 func page_number(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40041 bp := tls.Alloc(156) 40042 defer tls.Free(156) 40043 40044 var pPage uintptr 40045 if argc != 2 { 40046 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40047 ts+24472, 0)) 40048 return TCL_ERROR 40049 } 40050 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40051 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+56, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3PagerPagenumber(tls, pPage))) 40052 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40053 return TCL_OK 40054 } 40055 40056 func page_write(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40057 bp := tls.Alloc(48) 40058 defer tls.Free(48) 40059 40060 var pPage uintptr 40061 var pData uintptr 40062 var rc int32 40063 if argc != 3 { 40064 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40065 ts+24479, 0)) 40066 return TCL_ERROR 40067 } 40068 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40069 rc = sqlite3.Xsqlite3PagerWrite(tls, pPage) 40070 if rc != SQLITE_OK { 40071 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40072 return TCL_ERROR 40073 } 40074 pData = sqlite3.Xsqlite3PagerGetData(tls, pPage) 40075 libc.Xstrncpy(tls, pData, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(test_pagesize-1)) 40076 *(*uint8)(unsafe.Pointer(pData + uintptr(test_pagesize-1))) = uint8(0) 40077 return TCL_OK 40078 } 40079 40080 func fake_big_file(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40081 bp := tls.Alloc(96) 40082 defer tls.Free(96) 40083 40084 var pVfs uintptr 40085 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 40086 var rc int32 40087 40088 var offset i64 40089 var zFile uintptr 40090 var nFile int32 40091 if argc != 3 { 40092 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40093 ts+24491, 0)) 40094 return TCL_ERROR 40095 } 40096 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 40097 return TCL_ERROR 40098 } 40099 40100 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 40101 nFile = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 40102 zFile = sqlite3.Xsqlite3_malloc(tls, nFile+2) 40103 if zFile == uintptr(0) { 40104 return TCL_ERROR 40105 } 40106 libc.Xmemcpy(tls, zFile, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(nFile+1)) 40107 *(*uint8)(unsafe.Pointer(zFile + uintptr(nFile+1))) = uint8(0) 40108 rc = sqlite3.Xsqlite3OsOpenMalloc(tls, pVfs, zFile, bp+88, 40109 SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB, uintptr(0)) 40110 if rc != 0 { 40111 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+24510, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40112 sqlite3.Xsqlite3_free(tls, zFile) 40113 return TCL_ERROR 40114 } 40115 offset = i64(*(*int32)(unsafe.Pointer(bp + 80))) 40116 offset = offset * int64(1024*1024) 40117 rc = sqlite3.Xsqlite3OsWrite(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), ts+24524, 14, offset) 40118 sqlite3.Xsqlite3OsCloseFree(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 40119 sqlite3.Xsqlite3_free(tls, zFile) 40120 if rc != 0 { 40121 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, ts+24538, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40122 return TCL_ERROR 40123 } 40124 return TCL_OK 40125 } 40126 40127 func testPendingByte(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40128 bp := tls.Alloc(44) 40129 defer tls.Free(44) 40130 40131 var rc int32 40132 if argc != 2 { 40133 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40134 ts+24553, uintptr(0))) 40135 return TCL_ERROR 40136 } 40137 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 40138 return TCL_ERROR 40139 } 40140 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PENDING_BYTE, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 40)))) 40141 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 40142 return TCL_OK 40143 } 40144 40145 var faultSimInterp uintptr = uintptr(0) 40146 var faultSimScriptSize int32 = 0 40147 var faultSimScript uintptr 40148 40149 func faultSimCallback(tls *libc.TLS, x int32) int32 { 40150 bp := tls.Alloc(38) 40151 defer tls.Free(38) 40152 40153 var i int32 40154 var isNeg int32 40155 var rc int32 40156 if x == 0 { 40157 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), ts+14193, uint64(2)) 40158 } else { 40159 if x < 0 { 40160 isNeg = 1 40161 x = -x 40162 } else { 40163 isNeg = 0 40164 } 40165 *(*uint8)(unsafe.Pointer(bp + 8 + 29)) = uint8(0) 40166 i = int32(uint64(unsafe.Sizeof([30]uint8{})) - uint64(2)) 40167 __1: 40168 if !(i > 0 && x > 0) { 40169 goto __3 40170 } 40171 { 40172 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i))) = uint8(x%10 + '0') 40173 40174 } 40175 goto __2 40176 __2: 40177 i-- 40178 x = x / 10 40179 goto __1 40180 goto __3 40181 __3: 40182 ; 40183 if isNeg != 0 { 40184 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(libc.PostDecInt32(&i, 1)))) = uint8('-') 40185 } 40186 libc.Xmemcpy(tls, faultSimScript+uintptr(faultSimScriptSize), bp+8+uintptr(i)+uintptr(1), uint64(unsafe.Sizeof([30]uint8{}))-uint64(i)) 40187 } 40188 rc = tcl.XTcl_Eval(tls, faultSimInterp, faultSimScript) 40189 if rc != 0 { 40190 libc.Xfprintf(tls, libc.Xstderr, ts+24568, libc.VaList(bp, faultSimScript)) 40191 rc = SQLITE_ERROR 40192 } else { 40193 rc = libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, faultSimInterp)) 40194 } 40195 tcl.XTcl_ResetResult(tls, faultSimInterp) 40196 return rc 40197 } 40198 40199 func faultInstallCmd(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40200 bp := tls.Alloc(64) 40201 defer tls.Free(64) 40202 40203 var zScript uintptr 40204 var nScript int32 40205 var rc int32 40206 if argc != 1 && argc != 2 { 40207 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40208 ts+24604, uintptr(0))) 40209 } 40210 if argc == 2 { 40211 zScript = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 40212 } else { 40213 zScript = ts + 584 40214 } 40215 nScript = int32(libc.Xstrlen(tls, zScript)) 40216 if faultSimScript != 0 { 40217 libc.Xfree(tls, faultSimScript) 40218 faultSimScript = uintptr(0) 40219 } 40220 if nScript == 0 { 40221 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_FAULT_INSTALL, libc.VaList(bp+32, 0)) 40222 } else { 40223 faultSimScript = libc.Xmalloc(tls, uint64(nScript+100)) 40224 if faultSimScript == uintptr(0) { 40225 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2069, uintptr(0))) 40226 return SQLITE_ERROR 40227 } 40228 libc.Xmemcpy(tls, faultSimScript, zScript, uint64(nScript)) 40229 *(*uint8)(unsafe.Pointer(faultSimScript + uintptr(nScript))) = uint8(' ') 40230 faultSimScriptSize = nScript + 1 40231 faultSimInterp = interp 40232 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})))) 40233 } 40234 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 40235 return SQLITE_OK 40236 } 40237 40238 func testBitvecBuiltinTest(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40239 bp := tls.Alloc(452) 40240 defer tls.Free(452) 40241 40242 var rc int32 40243 var nProg int32 = 0 40244 40245 var z uintptr 40246 if argc != 3 { 40247 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40248 ts+24613, uintptr(0))) 40249 } 40250 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 40251 return TCL_ERROR 40252 } 40253 z = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 40254 for nProg < 99 && *(*uint8)(unsafe.Pointer(z)) != 0 { 40255 for *(*uint8)(unsafe.Pointer(z)) != 0 && !(int32(sqlite3.Xsqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z))])&0x04 != 0) { 40256 z++ 40257 } 40258 if int32(*(*uint8)(unsafe.Pointer(z))) == 0 { 40259 break 40260 } 40261 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(libc.PostIncInt32(&nProg, 1))*4)) = libc.Xatoi(tls, z) 40262 for int32(sqlite3.Xsqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z))])&0x04 != 0 { 40263 z++ 40264 } 40265 } 40266 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(nProg)*4)) = 0 40267 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BITVEC_TEST, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 48)), bp+52)) 40268 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 40269 return TCL_OK 40270 } 40271 40272 func Sqlitetest2_Init(tls *libc.TLS, interp uintptr) int32 { 40273 var i int32 40274 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd2))/uint64(unsafe.Sizeof(struct { 40275 FzName uintptr 40276 FxProc uintptr 40277 }{})); i++ { 40278 tcl.XTcl_CreateCommand(tls, interp, aCmd2[i].FzName, aCmd2[i].FxProc, uintptr(0), uintptr(0)) 40279 } 40280 tcl.XTcl_LinkVar(tls, interp, ts+24628, 40281 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_pending)), TCL_LINK_INT) 40282 tcl.XTcl_LinkVar(tls, interp, ts+24652, 40283 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_persist)), TCL_LINK_INT) 40284 tcl.XTcl_LinkVar(tls, interp, ts+24676, 40285 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hit)), TCL_LINK_INT) 40286 tcl.XTcl_LinkVar(tls, interp, ts+24696, 40287 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hardhit)), TCL_LINK_INT) 40288 tcl.XTcl_LinkVar(tls, interp, ts+24720, 40289 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull_pending)), TCL_LINK_INT) 40290 tcl.XTcl_LinkVar(tls, interp, ts+24744, 40291 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull)), TCL_LINK_INT) 40292 tcl.XTcl_LinkVar(tls, interp, ts+24760, 40293 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3PendingByte)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 40294 return TCL_OK 40295 } 40296 40297 var aCmd2 = [20]struct { 40298 FzName uintptr 40299 FxProc uintptr 40300 }{ 40301 {FzName: ts + 24780, FxProc: 0}, 40302 {FzName: ts + 24791, FxProc: 0}, 40303 {FzName: ts + 24803, FxProc: 0}, 40304 {FzName: ts + 24816, FxProc: 0}, 40305 {FzName: ts + 24831, FxProc: 0}, 40306 {FzName: ts + 24848, FxProc: 0}, 40307 {FzName: ts + 24866, FxProc: 0}, 40308 {FzName: ts + 24886, FxProc: 0}, 40309 {FzName: ts + 24898, FxProc: 0}, 40310 {FzName: ts + 24914, FxProc: 0}, 40311 {FzName: ts + 24923, FxProc: 0}, 40312 {FzName: ts + 24935, FxProc: 0}, 40313 {FzName: ts + 24946, FxProc: 0}, 40314 {FzName: ts + 24956, FxProc: 0}, 40315 {FzName: ts + 24967, FxProc: 0}, 40316 {FzName: ts + 24979, FxProc: 0}, 40317 {FzName: ts + 24994, FxProc: 0}, 40318 {FzName: ts + 25008, FxProc: 0}, 40319 {FzName: ts + 25033, FxProc: 0}, 40320 {FzName: ts + 25067, FxProc: 0}, 40321 } 40322 40323 type Btree = Btree1 40324 type BtCursor = BtCursor1 40325 type BtShared = BtShared1 40326 40327 type MemPage1 = struct { 40328 FisInit u8 40329 FintKey u8 40330 FintKeyLeaf u8 40331 F__ccgo_pad1 [1]byte 40332 Fpgno Pgno 40333 Fleaf u8 40334 FhdrOffset u8 40335 FchildPtrSize u8 40336 Fmax1bytePayload u8 40337 FnOverflow u8 40338 F__ccgo_pad2 [1]byte 40339 FmaxLocal u16 40340 FminLocal u16 40341 FcellOffset u16 40342 FnFree int32 40343 FnCell u16 40344 FmaskPage u16 40345 FaiOvfl [4]u16 40346 F__ccgo_pad3 [4]byte 40347 FapOvfl [4]uintptr 40348 FpBt uintptr 40349 FaData uintptr 40350 FaDataEnd uintptr 40351 FaCellIdx uintptr 40352 FaDataOfst uintptr 40353 FpDbPage uintptr 40354 FxCellSize uintptr 40355 FxParseCell uintptr 40356 } 40357 40358 type MemPage = MemPage1 40359 type BtLock1 = struct { 40360 FpBtree uintptr 40361 FiTable Pgno 40362 FeLock u8 40363 F__ccgo_pad1 [3]byte 40364 FpNext uintptr 40365 } 40366 40367 type BtLock = BtLock1 40368 type CellInfo1 = struct { 40369 FnKey i64 40370 FpPayload uintptr 40371 FnPayload u32 40372 FnLocal u16 40373 FnSize u16 40374 } 40375 40376 type CellInfo = CellInfo1 40377 40378 type IntegrityCk1 = struct { 40379 FpBt uintptr 40380 FpPager uintptr 40381 FaPgRef uintptr 40382 FnPage Pgno 40383 FmxErr int32 40384 FnErr int32 40385 FbOomFault int32 40386 FzPfx uintptr 40387 Fv1 Pgno 40388 Fv2 int32 40389 FerrMsg StrAccum 40390 Fheap uintptr 40391 Fdb uintptr 40392 } 40393 40394 type IntegrityCk = IntegrityCk1 40395 40396 var sDb sqlite31 40397 var nRefSqlite3 int32 = 0 40398 40399 func btree_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40400 bp := tls.Alloc(188) 40401 defer tls.Free(188) 40402 40403 var rc int32 40404 40405 var n int32 40406 var zFilename uintptr 40407 if argc != 3 { 40408 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40409 ts+25102, 0)) 40410 return TCL_ERROR 40411 } 40412 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 40413 return TCL_ERROR 40414 } 40415 nRefSqlite3++ 40416 if nRefSqlite3 == 1 { 40417 sDb.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 40418 sDb.Fmutex = sqlite3.Xsqlite3MutexAlloc(tls, SQLITE_MUTEX_RECURSIVE) 40419 sqlite3.Xsqlite3_mutex_enter(tls, sDb.Fmutex) 40420 } 40421 n = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 40422 zFilename = sqlite3.Xsqlite3_malloc(tls, n+2) 40423 if zFilename == uintptr(0) { 40424 return TCL_ERROR 40425 } 40426 libc.Xmemcpy(tls, zFilename, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint64(n+1)) 40427 *(*uint8)(unsafe.Pointer(zFilename + uintptr(n+1))) = uint8(0) 40428 rc = sqlite3.Xsqlite3BtreeOpen(tls, sDb.FpVfs, zFilename, uintptr(unsafe.Pointer(&sDb)), bp+80, 0, 40429 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB) 40430 sqlite3.Xsqlite3_free(tls, zFilename) 40431 if rc != SQLITE_OK { 40432 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40433 return TCL_ERROR 40434 } 40435 sqlite3.Xsqlite3BtreeSetCacheSize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 40436 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 40437 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 40438 return TCL_OK 40439 } 40440 40441 func btree_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40442 bp := tls.Alloc(48) 40443 defer tls.Free(48) 40444 40445 var pBt uintptr 40446 var rc int32 40447 if argc != 2 { 40448 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40449 ts+24430, 0)) 40450 return TCL_ERROR 40451 } 40452 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40453 rc = sqlite3.Xsqlite3BtreeClose(tls, pBt) 40454 if rc != SQLITE_OK { 40455 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40456 return TCL_ERROR 40457 } 40458 nRefSqlite3-- 40459 if nRefSqlite3 == 0 { 40460 sqlite3.Xsqlite3_mutex_leave(tls, sDb.Fmutex) 40461 sqlite3.Xsqlite3_mutex_free(tls, sDb.Fmutex) 40462 sDb.Fmutex = uintptr(0) 40463 sDb.FpVfs = uintptr(0) 40464 } 40465 return TCL_OK 40466 } 40467 40468 func btree_begin_transaction(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40469 bp := tls.Alloc(48) 40470 defer tls.Free(48) 40471 40472 var pBt uintptr 40473 var rc int32 40474 if argc != 2 { 40475 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40476 ts+24430, 0)) 40477 return TCL_ERROR 40478 } 40479 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40480 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40481 rc = sqlite3.Xsqlite3BtreeBeginTrans(tls, pBt, 1, uintptr(0)) 40482 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40483 if rc != SQLITE_OK { 40484 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40485 return TCL_ERROR 40486 } 40487 return TCL_OK 40488 } 40489 40490 func btree_pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40491 bp := tls.Alloc(140) 40492 defer tls.Free(140) 40493 40494 var pBt uintptr 40495 var i int32 40496 var a uintptr 40497 40498 if argc != 2 { 40499 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40500 ts+24430, 0)) 40501 return TCL_ERROR 40502 } 40503 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40504 40505 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40506 40507 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40508 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 40509 for i = 0; i < 11; i++ { 40510 tcl.XTcl_AppendElement(tls, interp, zName1[i]) 40511 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 40512 tcl.XTcl_AppendElement(tls, interp, bp+40) 40513 } 40514 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40515 40516 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40517 return TCL_OK 40518 } 40519 40520 var zName1 = [11]uintptr{ 40521 ts + 24435, ts + 24439, ts + 18254, ts + 11809, ts + 9558, ts + 24444, 40522 ts + 24448, ts + 24452, ts + 24457, ts + 25126, ts + 25131, 40523 } 40524 40525 func btree_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40526 bp := tls.Alloc(110) 40527 defer tls.Free(110) 40528 40529 var pBt uintptr 40530 40531 var pCur uintptr 40532 var rc int32 = SQLITE_OK 40533 40534 if argc != 4 { 40535 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40536 ts+25137, 0)) 40537 return TCL_ERROR 40538 } 40539 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40540 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 40541 return TCL_ERROR 40542 } 40543 if tcl.XTcl_GetBoolean(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+76) != 0 { 40544 return TCL_ERROR 40545 } 40546 if *(*int32)(unsafe.Pointer(bp + 76)) != 0 { 40547 *(*int32)(unsafe.Pointer(bp + 76)) = BTREE_WRCSR 40548 } 40549 pCur = tcl.XTcl_Alloc(tls, uint32(sqlite3.Xsqlite3BtreeCursorSize(tls))) 40550 libc.Xmemset(tls, pCur, 0, uint64(sqlite3.Xsqlite3BtreeCursorSize(tls))) 40551 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40552 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40553 rc = sqlite3.Xsqlite3BtreeLockTable(tls, pBt, *(*int32)(unsafe.Pointer(bp + 72)), libc.BoolUint8(!!(*(*int32)(unsafe.Pointer(bp + 76)) != 0))) 40554 if rc == SQLITE_OK { 40555 rc = sqlite3.Xsqlite3BtreeCursor(tls, pBt, uint32(*(*int32)(unsafe.Pointer(bp + 72))), *(*int32)(unsafe.Pointer(bp + 76)), uintptr(0), pCur) 40556 } 40557 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40558 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40559 if rc != 0 { 40560 tcl.XTcl_Free(tls, pCur) 40561 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40562 return TCL_ERROR 40563 } 40564 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+80, ts+9889, libc.VaList(bp+48, pCur)) 40565 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 40566 return SQLITE_OK 40567 } 40568 40569 func btree_close_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40570 bp := tls.Alloc(48) 40571 defer tls.Free(48) 40572 40573 var pCur uintptr 40574 var rc int32 40575 40576 if argc != 2 { 40577 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40578 ts+24430, 0)) 40579 return TCL_ERROR 40580 } 40581 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40582 { 40583 var pBt uintptr = (*BtCursor)(unsafe.Pointer(pCur)).FpBtree 40584 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40585 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40586 rc = sqlite3.Xsqlite3BtreeCloseCursor(tls, pCur) 40587 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40588 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40589 40590 } 40591 tcl.XTcl_Free(tls, pCur) 40592 if rc != 0 { 40593 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40594 return TCL_ERROR 40595 } 40596 return SQLITE_OK 40597 } 40598 40599 func btree_next(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40600 bp := tls.Alloc(172) 40601 defer tls.Free(172) 40602 40603 var pCur uintptr 40604 var rc int32 40605 var res int32 = 0 40606 40607 if argc != 2 { 40608 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40609 ts+24430, 0)) 40610 return TCL_ERROR 40611 } 40612 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40613 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40614 rc = sqlite3.Xsqlite3BtreeNext(tls, pCur, 0) 40615 if rc == SQLITE_DONE { 40616 res = 1 40617 rc = SQLITE_OK 40618 } 40619 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40620 if rc != 0 { 40621 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40622 return TCL_ERROR 40623 } 40624 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+72, ts+1333, libc.VaList(bp+48, res)) 40625 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 40626 return SQLITE_OK 40627 } 40628 40629 func btree_first(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40630 bp := tls.Alloc(176) 40631 defer tls.Free(176) 40632 40633 var pCur uintptr 40634 var rc int32 40635 *(*int32)(unsafe.Pointer(bp + 72)) = 0 40636 40637 if argc != 2 { 40638 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40639 ts+24430, 0)) 40640 return TCL_ERROR 40641 } 40642 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40643 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40644 rc = sqlite3.Xsqlite3BtreeFirst(tls, pCur, bp+72) 40645 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40646 if rc != 0 { 40647 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 40648 return TCL_ERROR 40649 } 40650 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+76, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 72)))) 40651 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+76, 0)) 40652 return SQLITE_OK 40653 } 40654 40655 func btree_eof(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40656 bp := tls.Alloc(106) 40657 defer tls.Free(106) 40658 40659 var pCur uintptr 40660 var rc int32 40661 40662 if argc != 2 { 40663 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40664 ts+24430, 0)) 40665 return TCL_ERROR 40666 } 40667 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40668 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40669 rc = sqlite3.Xsqlite3BtreeEof(tls, pCur) 40670 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40671 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+56, ts+1333, libc.VaList(bp+32, rc)) 40672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40673 return SQLITE_OK 40674 } 40675 40676 func btree_payload_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40677 bp := tls.Alloc(106) 40678 defer tls.Free(106) 40679 40680 var pCur uintptr 40681 var n u32 40682 40683 if argc != 2 { 40684 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40685 ts+24430, 0)) 40686 return TCL_ERROR 40687 } 40688 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40689 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40690 n = sqlite3.Xsqlite3BtreePayloadSize(tls, pCur) 40691 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40692 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+56, ts+17791, libc.VaList(bp+32, n)) 40693 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 40694 return SQLITE_OK 40695 } 40696 40697 func btree_varint_test(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40698 bp := tls.Alloc(516) 40699 defer tls.Free(516) 40700 40701 var in u64 40702 40703 var n1 int32 40704 var n2 int32 40705 var i int32 40706 var j int32 40707 40708 if argc != 5 { 40709 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40710 ts+25161, 0)) 40711 return TCL_ERROR 40712 } 40713 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+184) != 0 { 40714 return TCL_ERROR 40715 } 40716 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+188) != 0 { 40717 return TCL_ERROR 40718 } 40719 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+192) != 0 { 40720 return TCL_ERROR 40721 } 40722 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+196) != 0 { 40723 return TCL_ERROR 40724 } 40725 in = u64(*(*u32)(unsafe.Pointer(bp + 184))) 40726 in = in * u64(*(*u32)(unsafe.Pointer(bp + 188))) 40727 for i = 0; i < int32(*(*u32)(unsafe.Pointer(bp + 192))); i++ { 40728 n1 = sqlite3.Xsqlite3PutVarint(tls, bp+200, in) 40729 if n1 > 9 || n1 < 1 { 40730 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40731 ts+25196, libc.VaList(bp+32, n1)) 40732 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+300, 0)) 40733 return TCL_ERROR 40734 } 40735 n2 = int32(sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504)) 40736 if n1 != n2 { 40737 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40738 ts+25246, libc.VaList(bp+56, n1, n2)) 40739 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, bp+300, 0)) 40740 return TCL_ERROR 40741 } 40742 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 40743 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40744 ts+25294, libc.VaList(bp+88, in, *(*u64)(unsafe.Pointer(bp + 504)))) 40745 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, bp+300, 0)) 40746 return TCL_ERROR 40747 } 40748 if in&uint64(0xffffffff) == in { 40749 n2 = int32(func() uint8 { 40750 if int32(*(*uint8)(unsafe.Pointer(bp + 200))) < int32(u8(0x80)) { 40751 return uint8(func() int32 { *(*u32)(unsafe.Pointer(bp + 512)) = u32(*(*uint8)(unsafe.Pointer(bp + 200))); return 1 }()) 40752 } 40753 return sqlite3.Xsqlite3GetVarint32(tls, bp+200, bp+512) 40754 }()) 40755 *(*u64)(unsafe.Pointer(bp + 504)) = u64(*(*u32)(unsafe.Pointer(bp + 512))) 40756 if n1 != n2 { 40757 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40758 ts+25333, 40759 libc.VaList(bp+120, n1, n2)) 40760 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+136, bp+300, 0)) 40761 return TCL_ERROR 40762 } 40763 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 40764 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]uint8{})), bp+300, 40765 ts+25383, 40766 libc.VaList(bp+152, in, *(*u64)(unsafe.Pointer(bp + 504)))) 40767 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+168, bp+300, 0)) 40768 return TCL_ERROR 40769 } 40770 } 40771 40772 for j = 0; j < 19; j++ { 40773 sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504) 40774 } 40775 in = in + u64(*(*u32)(unsafe.Pointer(bp + 196))) 40776 } 40777 return TCL_OK 40778 } 40779 40780 func btree_from_db(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40781 bp := tls.Alloc(236) 40782 defer tls.Free(236) 40783 40784 var db uintptr 40785 var pBt uintptr 40786 var iDb int32 = 0 40787 40788 if argc != 2 && argc != 3 { 40789 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40790 ts+25439, 0)) 40791 return TCL_ERROR 40792 } 40793 40794 if 1 != tcl.XTcl_GetCommandInfo(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) { 40795 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25455, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+11945, 0)) 40796 return TCL_ERROR 40797 } 40798 if argc == 3 { 40799 iDb = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 40800 } 40801 40802 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 72)).FobjClientData)) 40803 40804 pBt = (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(db)).FaDb + uintptr(iDb)*32)).FpBt 40805 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+136, ts+9889, libc.VaList(bp+64, pBt)) 40806 tcl.XTcl_SetResult(tls, interp, bp+136, uintptr(1)) 40807 return TCL_OK 40808 } 40809 40810 func btree_ismemdb(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40811 bp := tls.Alloc(32) 40812 defer tls.Free(32) 40813 40814 var pBt uintptr 40815 var res int32 40816 var pFile uintptr 40817 40818 if argc != 2 { 40819 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 40820 ts+24430, 0)) 40821 return TCL_ERROR 40822 } 40823 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40824 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40825 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40826 pFile = sqlite3.Xsqlite3PagerFile(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 40827 res = libc.Bool32((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods == uintptr(0)) 40828 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40829 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40830 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(res != 0))) 40831 return SQLITE_OK 40832 } 40833 40834 func btree_set_cache_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 40835 bp := tls.Alloc(36) 40836 defer tls.Free(36) 40837 40838 var pBt uintptr 40839 40840 if argc != 3 { 40841 tcl.XTcl_AppendResult(tls, 40842 interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+25476, 0)) 40843 return TCL_ERROR 40844 } 40845 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 40846 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 40847 return TCL_ERROR 40848 } 40849 40850 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40851 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 40852 sqlite3.Xsqlite3BtreeSetCacheSize(tls, pBt, *(*int32)(unsafe.Pointer(bp + 32))) 40853 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 40854 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 40855 return TCL_OK 40856 } 40857 40858 func btree_insert(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40859 bp := tls.Alloc(68) 40860 defer tls.Free(68) 40861 40862 var pCur uintptr 40863 40864 if objc != 4 && objc != 3 { 40865 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+25488) 40866 return TCL_ERROR 40867 } 40868 40869 libc.Xmemset(tls, bp+16, 0, uint64(unsafe.Sizeof(BtreePayload{}))) 40870 if objc == 4 { 40871 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 40872 return TCL_ERROR 40873 } 40874 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 40875 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16+36) 40876 } else { 40877 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpKey = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) 40878 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 40879 } 40880 pCur = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 40881 40882 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 40883 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40884 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3BtreeInsert(tls, pCur, bp+16, 0, 0) 40885 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 40886 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 40887 40888 tcl.XTcl_ResetResult(tls, interp) 40889 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 40890 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, *(*int32)(unsafe.Pointer(bp + 64))), 0)) 40891 return TCL_ERROR 40892 } 40893 return TCL_OK 40894 } 40895 40896 func Sqlitetest3_Init(tls *libc.TLS, interp uintptr) int32 { 40897 var i int32 40898 40899 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd3))/uint64(unsafe.Sizeof(struct { 40900 FzName uintptr 40901 FxProc uintptr 40902 }{})); i++ { 40903 tcl.XTcl_CreateCommand(tls, interp, aCmd3[i].FzName, aCmd3[i].FxProc, uintptr(0), uintptr(0)) 40904 } 40905 40906 tcl.XTcl_CreateObjCommand(tls, interp, ts+25512, *(*uintptr)(unsafe.Pointer(&struct { 40907 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 40908 }{btree_insert})), uintptr(0), uintptr(0)) 40909 40910 return TCL_OK 40911 } 40912 40913 var aCmd3 = [14]struct { 40914 FzName uintptr 40915 FxProc uintptr 40916 }{ 40917 {FzName: ts + 25525, FxProc: 0}, 40918 {FzName: ts + 25536, FxProc: 0}, 40919 {FzName: ts + 25548, FxProc: 0}, 40920 {FzName: ts + 25572, FxProc: 0}, 40921 {FzName: ts + 25590, FxProc: 0}, 40922 {FzName: ts + 25603, FxProc: 0}, 40923 {FzName: ts + 25622, FxProc: 0}, 40924 {FzName: ts + 25633, FxProc: 0}, 40925 {FzName: ts + 25643, FxProc: 0}, 40926 {FzName: ts + 25662, FxProc: 0}, 40927 {FzName: ts + 25674, FxProc: 0}, 40928 {FzName: ts + 25692, FxProc: 0}, 40929 {FzName: ts + 25706, FxProc: 0}, 40930 {FzName: ts + 25720, FxProc: 0}, 40931 } 40932 40933 type sched_param = struct{ Fsched_priority int32 } 40934 40935 type cpu_set_t = struct{ F__bits [16]uint64 } 40936 40937 type _pthread_cleanup_buffer = struct { 40938 F__routine uintptr 40939 F__arg uintptr 40940 F__canceltype int32 40941 F__ccgo_pad1 [4]byte 40942 F__prev uintptr 40943 } 40944 40945 type __pthread_cleanup_frame = struct { 40946 F__cancel_routine uintptr 40947 F__cancel_arg uintptr 40948 F__do_it int32 40949 F__cancel_type int32 40950 } 40951 40952 type Thread = struct { 40953 FzFilename uintptr 40954 FxOp uintptr 40955 FzArg uintptr 40956 Fopnum int32 40957 Fbusy int32 40958 Fcompleted int32 40959 F__ccgo_pad1 [4]byte 40960 Fdb uintptr 40961 FpStmt uintptr 40962 FzErr uintptr 40963 FzStaticErr uintptr 40964 Frc int32 40965 Fargc int32 40966 Fargv [100]uintptr 40967 Fcolv [100]uintptr 40968 } 40969 40970 var threadset [26]Thread 40971 40972 func test_barrier(tls *libc.TLS) { 40973 var pMutex uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_APP1) 40974 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 40975 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 40976 } 40977 40978 func test_thread_main(tls *libc.TLS, pArg uintptr) uintptr { 40979 var p uintptr = pArg 40980 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 40981 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40982 } 40983 sqlite3.Xsqlite3_open(tls, (*Thread)(unsafe.Pointer(p)).FzFilename, p+40) 40984 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread)(unsafe.Pointer(p)).Fdb) { 40985 (*Thread)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread)(unsafe.Pointer(p)).Fdb)) 40986 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 40987 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 40988 } 40989 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 40990 test_barrier(tls) 40991 (*Thread)(unsafe.Pointer(p)).Fcompleted = 1 40992 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 40993 libc.Xsched_yield(tls) 40994 } 40995 test_barrier(tls) 40996 for (*Thread)(unsafe.Pointer(p)).FxOp != 0 { 40997 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 40998 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 40999 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 41000 } 41001 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread)(unsafe.Pointer(p)).FxOp})).f(tls, p) 41002 test_barrier(tls) 41003 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 41004 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 41005 libc.Xsched_yield(tls) 41006 } 41007 test_barrier(tls) 41008 } 41009 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 41010 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 41011 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41012 } 41013 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 41014 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 41015 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 41016 } 41017 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 41018 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 41019 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 41020 } 41021 test_barrier(tls) 41022 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 41023 sqlite3.Xsqlite3_thread_cleanup(tls) 41024 return uintptr(0) 41025 } 41026 41027 func parse_thread_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 41028 bp := tls.Alloc(16) 41029 defer tls.Free(16) 41030 41031 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) { 41032 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 41033 return -1 41034 } 41035 return int32(*(*uint8)(unsafe.Pointer(zArg))) - 'A' 41036 } 41037 41038 func tcl_thread_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41039 bp := tls.Alloc(96) 41040 defer tls.Free(96) 41041 41042 var i int32 41043 41044 var rc int32 41045 41046 if argc != 3 { 41047 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41048 ts+25780, 0)) 41049 return TCL_ERROR 41050 } 41051 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41052 if i < 0 { 41053 return TCL_ERROR 41054 } 41055 if threadset[i].Fbusy != 0 { 41056 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 41057 return TCL_ERROR 41058 } 41059 threadset[i].Fbusy = 1 41060 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 41061 threadset[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 41062 threadset[i].Fopnum = 1 41063 threadset[i].Fcompleted = 0 41064 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 41065 f func(*libc.TLS, uintptr) uintptr 41066 }{test_thread_main})), uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41067 if rc != 0 { 41068 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 41069 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 41070 threadset[i].Fbusy = 0 41071 return TCL_ERROR 41072 } 41073 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 41074 return TCL_OK 41075 } 41076 41077 func test_thread_wait(tls *libc.TLS, p uintptr) { 41078 test_barrier(tls) 41079 for (*Thread)(unsafe.Pointer(p)).Fopnum > (*Thread)(unsafe.Pointer(p)).Fcompleted { 41080 libc.Xsched_yield(tls) 41081 } 41082 test_barrier(tls) 41083 } 41084 41085 func tcl_thread_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41086 bp := tls.Alloc(48) 41087 defer tls.Free(48) 41088 41089 var i int32 41090 41091 if argc != 2 { 41092 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41093 ts+25849, 0)) 41094 return TCL_ERROR 41095 } 41096 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41097 if i < 0 { 41098 return TCL_ERROR 41099 } 41100 if !(threadset[i].Fbusy != 0) { 41101 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41102 return TCL_ERROR 41103 } 41104 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41105 return TCL_OK 41106 } 41107 41108 func test_stop_thread(tls *libc.TLS, p uintptr) { 41109 test_thread_wait(tls, p) 41110 (*Thread)(unsafe.Pointer(p)).FxOp = uintptr(0) 41111 (*Thread)(unsafe.Pointer(p)).Fopnum++ 41112 test_thread_wait(tls, p) 41113 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzArg) 41114 (*Thread)(unsafe.Pointer(p)).FzArg = uintptr(0) 41115 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzFilename) 41116 (*Thread)(unsafe.Pointer(p)).FzFilename = uintptr(0) 41117 (*Thread)(unsafe.Pointer(p)).Fbusy = 0 41118 } 41119 41120 func tcl_thread_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41121 bp := tls.Alloc(48) 41122 defer tls.Free(48) 41123 41124 var i int32 41125 41126 if argc != 2 { 41127 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41128 ts+25849, 0)) 41129 return TCL_ERROR 41130 } 41131 if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 41132 for i = 0; i < N_THREAD; i++ { 41133 if threadset[i].Fbusy != 0 { 41134 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41135 } 41136 } 41137 } else { 41138 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41139 if i < 0 { 41140 return TCL_ERROR 41141 } 41142 if !(threadset[i].Fbusy != 0) { 41143 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41144 return TCL_ERROR 41145 } 41146 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41147 } 41148 return TCL_OK 41149 } 41150 41151 func tcl_thread_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41152 bp := tls.Alloc(172) 41153 defer tls.Free(172) 41154 41155 var i int32 41156 41157 if argc != 2 { 41158 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41159 ts+25849, 0)) 41160 return TCL_ERROR 41161 } 41162 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41163 if i < 0 { 41164 return TCL_ERROR 41165 } 41166 if !(threadset[i].Fbusy != 0) { 41167 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41168 return TCL_ERROR 41169 } 41170 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41171 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset[i].Fargc)) 41172 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 41173 return TCL_OK 41174 } 41175 41176 func tcl_thread_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41177 bp := tls.Alloc(84) 41178 defer tls.Free(84) 41179 41180 var i int32 41181 41182 if argc != 3 { 41183 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41184 ts+25868, 0)) 41185 return TCL_ERROR 41186 } 41187 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41188 if i < 0 { 41189 return TCL_ERROR 41190 } 41191 if !(threadset[i].Fbusy != 0) { 41192 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41193 return TCL_ERROR 41194 } 41195 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 41196 return TCL_ERROR 41197 } 41198 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41199 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 41200 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 41201 return TCL_ERROR 41202 } 41203 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)) 41204 return TCL_OK 41205 } 41206 41207 func tcl_thread_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41208 bp := tls.Alloc(84) 41209 defer tls.Free(84) 41210 41211 var i int32 41212 41213 if argc != 3 { 41214 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41215 ts+25868, 0)) 41216 return TCL_ERROR 41217 } 41218 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41219 if i < 0 { 41220 return TCL_ERROR 41221 } 41222 if !(threadset[i].Fbusy != 0) { 41223 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41224 return TCL_ERROR 41225 } 41226 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 41227 return TCL_ERROR 41228 } 41229 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41230 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 41231 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 41232 return TCL_ERROR 41233 } 41234 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)) 41235 return TCL_OK 41236 } 41237 41238 func tcl_thread_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41239 bp := tls.Alloc(64) 41240 defer tls.Free(64) 41241 41242 var i int32 41243 var zName uintptr 41244 41245 if argc != 2 { 41246 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41247 ts+25849, 0)) 41248 return TCL_ERROR 41249 } 41250 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41251 if i < 0 { 41252 return TCL_ERROR 41253 } 41254 if !(threadset[i].Fbusy != 0) { 41255 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41256 return TCL_ERROR 41257 } 41258 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41259 zName = sqlite3.Xsqlite3ErrName(tls, threadset[i].Frc) 41260 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 41261 return TCL_OK 41262 } 41263 41264 func tcl_thread_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41265 bp := tls.Alloc(64) 41266 defer tls.Free(64) 41267 41268 var i int32 41269 41270 if argc != 2 { 41271 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41272 ts+25849, 0)) 41273 return TCL_ERROR 41274 } 41275 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41276 if i < 0 { 41277 return TCL_ERROR 41278 } 41279 if !(threadset[i].Fbusy != 0) { 41280 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41281 return TCL_ERROR 41282 } 41283 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41284 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset[i].FzErr, 0)) 41285 return TCL_OK 41286 } 41287 41288 func do_compile(tls *libc.TLS, p uintptr) { 41289 if (*Thread)(unsafe.Pointer(p)).Fdb == uintptr(0) { 41290 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 41291 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41292 return 41293 } 41294 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 41295 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 41296 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41297 } 41298 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_prepare(tls, (*Thread)(unsafe.Pointer(p)).Fdb, (*Thread)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 41299 } 41300 41301 func tcl_thread_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41302 bp := tls.Alloc(56) 41303 defer tls.Free(56) 41304 41305 var i int32 41306 if argc != 3 { 41307 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41308 ts+25921, 0)) 41309 return TCL_ERROR 41310 } 41311 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41312 if i < 0 { 41313 return TCL_ERROR 41314 } 41315 if !(threadset[i].Fbusy != 0) { 41316 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41317 return TCL_ERROR 41318 } 41319 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41320 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile})) 41321 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 41322 threadset[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 41323 test_barrier(tls) 41324 threadset[i].Fopnum++ 41325 return TCL_OK 41326 } 41327 41328 func do_step(tls *libc.TLS, p uintptr) { 41329 var i int32 41330 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41331 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41332 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41333 return 41334 } 41335 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_step(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 41336 if (*Thread)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 41337 (*Thread)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 41338 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt); i++ { 41339 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 41340 } 41341 for i = 0; i < (*Thread)(unsafe.Pointer(p)).Fargc; i++ { 41342 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 41343 } 41344 } 41345 } 41346 41347 func tcl_thread_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41348 bp := tls.Alloc(48) 41349 defer tls.Free(48) 41350 41351 var i int32 41352 if argc != 2 { 41353 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41354 ts+25958, 0)) 41355 return TCL_ERROR 41356 } 41357 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41358 if i < 0 { 41359 return TCL_ERROR 41360 } 41361 if !(threadset[i].Fbusy != 0) { 41362 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41363 return TCL_ERROR 41364 } 41365 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41366 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step})) 41367 test_barrier(tls) 41368 threadset[i].Fopnum++ 41369 return TCL_OK 41370 } 41371 41372 func do_finalize(tls *libc.TLS, p uintptr) { 41373 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 41374 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 41375 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 41376 return 41377 } 41378 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 41379 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 41380 } 41381 41382 func tcl_thread_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41383 bp := tls.Alloc(48) 41384 defer tls.Free(48) 41385 41386 var i int32 41387 if argc != 2 { 41388 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41389 ts+25958, 0)) 41390 return TCL_ERROR 41391 } 41392 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41393 if i < 0 { 41394 return TCL_ERROR 41395 } 41396 if !(threadset[i].Fbusy != 0) { 41397 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41398 return TCL_ERROR 41399 } 41400 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41401 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize})) 41402 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 41403 threadset[i].FzArg = uintptr(0) 41404 test_barrier(tls) 41405 threadset[i].Fopnum++ 41406 return TCL_OK 41407 } 41408 41409 func tcl_thread_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41410 bp := tls.Alloc(64) 41411 defer tls.Free(64) 41412 41413 var i int32 41414 var j int32 41415 var temp uintptr 41416 if argc != 3 { 41417 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41418 ts+25963, 0)) 41419 return TCL_ERROR 41420 } 41421 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41422 if i < 0 { 41423 return TCL_ERROR 41424 } 41425 if !(threadset[i].Fbusy != 0) { 41426 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41427 return TCL_ERROR 41428 } 41429 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41430 j = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 41431 if j < 0 { 41432 return TCL_ERROR 41433 } 41434 if !(threadset[j].Fbusy != 0) { 41435 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 41436 return TCL_ERROR 41437 } 41438 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(j)*1680) 41439 temp = threadset[i].Fdb 41440 threadset[i].Fdb = threadset[j].Fdb 41441 threadset[j].Fdb = temp 41442 return TCL_OK 41443 } 41444 41445 func tcl_thread_db_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41446 bp := tls.Alloc(164) 41447 defer tls.Free(164) 41448 41449 var i int32 41450 41451 if argc != 2 { 41452 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41453 ts+25849, 0)) 41454 return TCL_ERROR 41455 } 41456 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41457 if i < 0 { 41458 return TCL_ERROR 41459 } 41460 if !(threadset[i].Fbusy != 0) { 41461 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41462 return TCL_ERROR 41463 } 41464 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41465 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].Fdb) 41466 threadset[i].Fdb = uintptr(0) 41467 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 41468 return TCL_OK 41469 } 41470 41471 func tcl_thread_db_put(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41472 bp := tls.Alloc(48) 41473 defer tls.Free(48) 41474 41475 var i int32 41476 if argc != 3 { 41477 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41478 ts+25972, 0)) 41479 return TCL_ERROR 41480 } 41481 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41482 if i < 0 { 41483 return TCL_ERROR 41484 } 41485 if !(threadset[i].Fbusy != 0) { 41486 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41487 return TCL_ERROR 41488 } 41489 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41490 41491 threadset[i].Fdb = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 41492 return TCL_OK 41493 } 41494 41495 func tcl_thread_stmt_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41496 bp := tls.Alloc(164) 41497 defer tls.Free(164) 41498 41499 var i int32 41500 41501 if argc != 2 { 41502 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41503 ts+25849, 0)) 41504 return TCL_ERROR 41505 } 41506 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41507 if i < 0 { 41508 return TCL_ERROR 41509 } 41510 if !(threadset[i].Fbusy != 0) { 41511 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 41512 return TCL_ERROR 41513 } 41514 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 41515 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].FpStmt) 41516 threadset[i].FpStmt = uintptr(0) 41517 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 41518 return TCL_OK 41519 } 41520 41521 func Sqlitetest4_Init(tls *libc.TLS, interp uintptr) int32 { 41522 var i int32 41523 41524 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd4))/uint64(unsafe.Sizeof(struct { 41525 FzName uintptr 41526 FxProc uintptr 41527 }{})); i++ { 41528 tcl.XTcl_CreateCommand(tls, interp, aCmd4[i].FzName, aCmd4[i].FxProc, uintptr(0), uintptr(0)) 41529 } 41530 return TCL_OK 41531 } 41532 41533 var aCmd4 = [15]struct { 41534 FzName uintptr 41535 FxProc uintptr 41536 }{ 41537 {FzName: ts + 25979, FxProc: 0}, 41538 {FzName: ts + 25993, FxProc: 0}, 41539 {FzName: ts + 26005, FxProc: 0}, 41540 {FzName: ts + 26017, FxProc: 0}, 41541 {FzName: ts + 26029, FxProc: 0}, 41542 {FzName: ts + 26041, FxProc: 0}, 41543 {FzName: ts + 26056, FxProc: 0}, 41544 {FzName: ts + 26070, FxProc: 0}, 41545 {FzName: ts + 26083, FxProc: 0}, 41546 {FzName: ts + 26098, FxProc: 0}, 41547 {FzName: ts + 26110, FxProc: 0}, 41548 {FzName: ts + 26126, FxProc: 0}, 41549 {FzName: ts + 26138, FxProc: 0}, 41550 {FzName: ts + 26152, FxProc: 0}, 41551 {FzName: ts + 26166, FxProc: 0}, 41552 } 41553 41554 func binarize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41555 bp := tls.Alloc(4) 41556 defer tls.Free(4) 41557 41558 var bytes uintptr 41559 var pRet uintptr 41560 41561 bytes = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 41562 pRet = tcl.XTcl_NewByteArrayObj(tls, bytes, *(*int32)(unsafe.Pointer(bp))+1) 41563 tcl.XTcl_SetObjResult(tls, interp, pRet) 41564 return TCL_OK 41565 } 41566 41567 func test_value_overhead(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41568 bp := tls.Alloc(96) 41569 defer tls.Free(96) 41570 41571 var i int32 41572 41573 if objc != 3 { 41574 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 41575 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+26182, 0)) 41576 return TCL_ERROR 41577 } 41578 41579 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32) != 0 { 41580 return TCL_ERROR 41581 } 41582 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+36) != 0 { 41583 return TCL_ERROR 41584 } 41585 41586 (*Mem)(unsafe.Pointer(bp + 40)).Fflags = u16(MEM_Str | MEM_Term | MEM_Static) 41587 (*Mem)(unsafe.Pointer(bp + 40)).Fz = ts + 26209 41588 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = u8(SQLITE_UTF8) 41589 41590 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 41591 if *(*int32)(unsafe.Pointer(bp + 36)) != 0 { 41592 sqlite3.Xsqlite3_value_text(tls, bp+40) 41593 } 41594 } 41595 41596 return TCL_OK 41597 } 41598 41599 func name_to_enc(tls *libc.TLS, interp uintptr, pObj uintptr) u8 { 41600 bp := tls.Alloc(104) 41601 defer tls.Free(104) 41602 41603 *(*[5]EncName)(unsafe.Pointer(bp + 24)) = [5]EncName{ 41604 {FzName: ts + 26221, Fenc: u8(SQLITE_UTF8)}, 41605 {FzName: ts + 26226, Fenc: u8(SQLITE_UTF16LE)}, 41606 {FzName: ts + 26234, Fenc: u8(SQLITE_UTF16BE)}, 41607 {FzName: ts + 26242, Fenc: u8(SQLITE_UTF16)}, 41608 {}, 41609 } 41610 var pEnc uintptr 41611 var z uintptr = tcl.XTcl_GetString(tls, pObj) 41612 for pEnc = bp + 24; (*EncName)(unsafe.Pointer(pEnc)).FzName != 0; pEnc += 16 { 41613 if 0 == sqlite3.Xsqlite3StrICmp(tls, z, (*EncName)(unsafe.Pointer(pEnc)).FzName) { 41614 break 41615 } 41616 } 41617 if !(int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) != 0) { 41618 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26248, z, 0)) 41619 } 41620 if int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) == SQLITE_UTF16 { 41621 return func() uint8 { 41622 if int32(*(*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(&sqlite3.Xsqlite3one))))) == 0 { 41623 return uint8(SQLITE_UTF16BE) 41624 } 41625 return uint8(SQLITE_UTF16LE) 41626 }() 41627 } 41628 return (*EncName)(unsafe.Pointer(pEnc)).Fenc 41629 } 41630 41631 type EncName = struct { 41632 FzName uintptr 41633 Fenc u8 41634 F__ccgo_pad1 [7]byte 41635 } 41636 41637 func test_translate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41638 bp := tls.Alloc(44) 41639 defer tls.Free(44) 41640 41641 var enc_from u8 41642 var enc_to u8 41643 var pVal uintptr 41644 var z uintptr 41645 41646 var xDel uintptr = uintptr(0) 41647 41648 if objc != 4 && objc != 5 { 41649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 41650 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), 41651 ts+26267, 0)) 41652 return TCL_ERROR 41653 } 41654 if objc == 5 { 41655 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 41656 } 41657 41658 enc_from = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41659 if !(enc_from != 0) { 41660 return TCL_ERROR 41661 } 41662 enc_to = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 41663 if !(enc_to != 0) { 41664 return TCL_ERROR 41665 } 41666 41667 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 41668 41669 if int32(enc_from) == SQLITE_UTF8 { 41670 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 41671 if objc == 5 { 41672 z = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, z)) 41673 } 41674 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 41675 } else { 41676 z = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) 41677 if objc == 5 { 41678 var zTmp uintptr = z 41679 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 40))) 41680 libc.Xmemcpy(tls, z, zTmp, uint64(*(*int32)(unsafe.Pointer(bp + 40)))) 41681 } 41682 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 41683 } 41684 41685 z = sqlite3.Xsqlite3ValueText(tls, pVal, enc_to) 41686 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3ValueBytes(tls, pVal, enc_to) + func() int32 { 41687 if int32(enc_to) == SQLITE_UTF8 { 41688 return 1 41689 } 41690 return 2 41691 }() 41692 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, z, *(*int32)(unsafe.Pointer(bp + 40)))) 41693 41694 sqlite3.Xsqlite3ValueFree(tls, pVal) 41695 41696 return TCL_OK 41697 } 41698 41699 func test_translate_selftest(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41700 sqlite3.Xsqlite3UtfSelfTest(tls) 41701 return SQLITE_OK 41702 } 41703 41704 func Sqlitetest5_Init(tls *libc.TLS, interp uintptr) int32 { 41705 var i int32 41706 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd5))/uint64(unsafe.Sizeof(struct { 41707 FzName uintptr 41708 FxProc uintptr 41709 }{})); i++ { 41710 tcl.XTcl_CreateObjCommand(tls, interp, aCmd5[i].FzName, aCmd5[i].FxProc, uintptr(0), uintptr(0)) 41711 } 41712 return SQLITE_OK 41713 } 41714 41715 var aCmd5 = [4]struct { 41716 FzName uintptr 41717 FxProc uintptr 41718 }{ 41719 {FzName: ts + 26302, FxProc: 0}, 41720 {FzName: ts + 26311, FxProc: 0}, 41721 {FzName: ts + 26331, FxProc: 0}, 41722 {FzName: ts + 26346, FxProc: 0}, 41723 } 41724 41725 type CrashFile1 = struct { 41726 FpMethod uintptr 41727 FpRealFile uintptr 41728 FzName uintptr 41729 Fflags int32 41730 F__ccgo_pad1 [4]byte 41731 FzData uintptr 41732 FnData int32 41733 F__ccgo_pad2 [4]byte 41734 FiSize i64 41735 } 41736 41737 type CrashFile = CrashFile1 41738 type CrashGlobal1 = struct { 41739 FpWriteList uintptr 41740 FpWriteListEnd uintptr 41741 FiSectorSize int32 41742 FiDeviceCharacteristics int32 41743 FiCrash int32 41744 FzCrashFile [500]uint8 41745 } 41746 41747 type CrashGlobal = CrashGlobal1 41748 type WriteBuffer1 = struct { 41749 FiOffset i64 41750 FnBuf int32 41751 F__ccgo_pad1 [4]byte 41752 FzBuf uintptr 41753 FpFile uintptr 41754 FpNext uintptr 41755 } 41756 41757 type WriteBuffer = WriteBuffer1 41758 41759 var g = CrashGlobal{FiSectorSize: SQLITE_DEFAULT_SECTOR_SIZE} 41760 41761 var sqlite3CrashTestEnable int32 = 0 41762 41763 func crash_malloc(tls *libc.TLS, nByte int32) uintptr { 41764 return tcl.XTcl_AttemptAlloc(tls, uint32(size_t(nByte))) 41765 } 41766 41767 func crash_free(tls *libc.TLS, p uintptr) { 41768 tcl.XTcl_Free(tls, p) 41769 } 41770 41771 func crash_realloc(tls *libc.TLS, p uintptr, n int32) uintptr { 41772 return tcl.XTcl_AttemptRealloc(tls, p, uint32(size_t(n))) 41773 } 41774 41775 func writeDbFile(tls *libc.TLS, p uintptr, z uintptr, iAmt i64, iOff i64) int32 { 41776 var rc int32 = SQLITE_OK 41777 var iSkip int32 = 0 41778 if iAmt-i64(iSkip) > int64(0) { 41779 rc = sqlite3.Xsqlite3OsWrite(tls, (*CrashFile)(unsafe.Pointer(p)).FpRealFile, z+uintptr(iSkip), int32(iAmt-i64(iSkip)), iOff+i64(iSkip)) 41780 } 41781 return rc 41782 } 41783 41784 func writeListSync(tls *libc.TLS, pFile uintptr, isCrash int32) int32 { 41785 bp := tls.Alloc(16) 41786 defer tls.Free(16) 41787 41788 var rc int32 = SQLITE_OK 41789 var iDc int32 = g.FiDeviceCharacteristics 41790 var pWrite uintptr 41791 var ppPtr uintptr 41792 41793 var pFinal uintptr = uintptr(0) 41794 if !(isCrash != 0) { 41795 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41796 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile { 41797 pFinal = pWrite 41798 } 41799 } 41800 } else if iDc&(SQLITE_IOCAP_SEQUENTIAL|SQLITE_IOCAP_SAFE_APPEND) != 0 { 41801 var nWrite int32 = 0 41802 41803 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41804 nWrite++ 41805 } 41806 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 41807 *(*int32)(unsafe.Pointer(bp)) = func() int32 { 41808 if *(*int32)(unsafe.Pointer(bp)) < 0 { 41809 return -1 * *(*int32)(unsafe.Pointer(bp)) 41810 } 41811 return *(*int32)(unsafe.Pointer(bp)) 41812 }() % nWrite 41813 for pWrite = g.FpWriteList; *(*int32)(unsafe.Pointer(bp)) > 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41814 *(*int32)(unsafe.Pointer(bp))-- 41815 } 41816 pFinal = pWrite 41817 } 41818 41819 ppPtr = uintptr(unsafe.Pointer(&g)) 41820 for pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)); rc == SQLITE_OK && pWrite != 0; pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)) { 41821 var pRealFile uintptr = (*CrashFile)(unsafe.Pointer((*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile)).FpRealFile 41822 41823 var eAction int32 = 0 41824 if !(isCrash != 0) { 41825 eAction = 2 41826 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile || iDc&SQLITE_IOCAP_SEQUENTIAL != 0 { 41827 eAction = 1 41828 } 41829 } else { 41830 sqlite3.Xsqlite3_randomness(tls, 1, bp+4) 41831 41832 if iDc&SQLITE_IOCAP_ATOMIC != 0 || (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf == uintptr(0) { 41833 *(*uint8)(unsafe.Pointer(bp + 4)) &= uint8(0x01) 41834 } 41835 41836 if iDc&SQLITE_IOCAP_SEQUENTIAL != 0 && pWrite != pFinal { 41837 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(0) 41838 } 41839 41840 if iDc&SQLITE_IOCAP_SAFE_APPEND != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 41841 sqlite3.Xsqlite3OsFileSize(tls, pRealFile, bp+8) 41842 if *(*i64)(unsafe.Pointer(bp + 8)) == (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset { 41843 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(0) 41844 } 41845 } 41846 41847 if int32(*(*uint8)(unsafe.Pointer(bp + 4)))&0x06 == 0x06 { 41848 eAction = 3 41849 } else { 41850 eAction = func() int32 { 41851 if int32(*(*uint8)(unsafe.Pointer(bp + 4)))&0x01 != 0 { 41852 return 2 41853 } 41854 return 1 41855 }() 41856 } 41857 } 41858 41859 switch eAction { 41860 case 1: 41861 { 41862 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 41863 rc = writeDbFile(tls, 41864 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf, int64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf), (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 41865 } else { 41866 rc = sqlite3.Xsqlite3OsTruncate(tls, pRealFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 41867 } 41868 *(*uintptr)(unsafe.Pointer(ppPtr)) = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext 41869 crash_free(tls, pWrite) 41870 break 41871 41872 } 41873 case 2: 41874 { 41875 ppPtr = pWrite + 32 41876 break 41877 41878 } 41879 case 3: 41880 { 41881 var zGarbage uintptr 41882 var iFirst int32 = int32((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset / i64(g.FiSectorSize)) 41883 var iLast int32 = int32(((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset + i64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf) - int64(1)) / i64(g.FiSectorSize)) 41884 41885 zGarbage = crash_malloc(tls, g.FiSectorSize) 41886 if zGarbage != 0 { 41887 var i sqlite3_int64 41888 for i = sqlite3_int64(iFirst); rc == SQLITE_OK && i <= sqlite3_int64(iLast); i++ { 41889 sqlite3.Xsqlite3_randomness(tls, g.FiSectorSize, zGarbage) 41890 rc = writeDbFile(tls, 41891 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, zGarbage, int64(g.FiSectorSize), i*sqlite3_int64(g.FiSectorSize)) 41892 } 41893 crash_free(tls, zGarbage) 41894 } else { 41895 rc = SQLITE_NOMEM 41896 } 41897 41898 ppPtr = pWrite + 32 41899 break 41900 41901 } 41902 41903 default: 41904 } 41905 41906 if pWrite == pFinal { 41907 break 41908 } 41909 } 41910 41911 if rc == SQLITE_OK && isCrash != 0 { 41912 libc.Xexit(tls, -1) 41913 } 41914 41915 for pWrite = g.FpWriteList; pWrite != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 41916 } 41917 g.FpWriteListEnd = pWrite 41918 41919 return rc 41920 } 41921 41922 func writeListAppend(tls *libc.TLS, pFile uintptr, iOffset sqlite3_int64, zBuf uintptr, nBuf int32) int32 { 41923 var pNew uintptr 41924 41925 pNew = crash_malloc(tls, int32(uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf))) 41926 if pNew == uintptr(0) { 41927 libc.Xfprintf(tls, libc.Xstderr, ts+26365, 0) 41928 } 41929 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf)) 41930 (*WriteBuffer)(unsafe.Pointer(pNew)).FiOffset = iOffset 41931 (*WriteBuffer)(unsafe.Pointer(pNew)).FnBuf = nBuf 41932 (*WriteBuffer)(unsafe.Pointer(pNew)).FpFile = pFile 41933 if zBuf != 0 { 41934 (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf = pNew + 1*40 41935 libc.Xmemcpy(tls, (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf, zBuf, uint64(nBuf)) 41936 } 41937 41938 if g.FpWriteList != 0 { 41939 (*WriteBuffer)(unsafe.Pointer(g.FpWriteListEnd)).FpNext = pNew 41940 } else { 41941 g.FpWriteList = pNew 41942 } 41943 g.FpWriteListEnd = pNew 41944 41945 return SQLITE_OK 41946 } 41947 41948 func cfClose(tls *libc.TLS, pFile uintptr) int32 { 41949 var pCrash uintptr = pFile 41950 writeListSync(tls, pCrash, 0) 41951 sqlite3.Xsqlite3OsClose(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FpRealFile) 41952 return SQLITE_OK 41953 } 41954 41955 func cfRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 41956 var pCrash uintptr = pFile 41957 var nCopy int32 = func() int32 { 41958 if i64(iAmt) < (*CrashFile)(unsafe.Pointer(pCrash)).FiSize-iOfst { 41959 return int32(i64(iAmt)) 41960 } 41961 return int32((*CrashFile)(unsafe.Pointer(pCrash)).FiSize - iOfst) 41962 }() 41963 41964 if nCopy > 0 { 41965 libc.Xmemcpy(tls, zBuf, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), uint64(nCopy)) 41966 } 41967 41968 if nCopy < iAmt { 41969 return SQLITE_IOERR | int32(2)<<8 41970 } 41971 41972 return SQLITE_OK 41973 } 41974 41975 func cfWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 41976 var pCrash uintptr = pFile 41977 if sqlite_int64(iAmt)+iOfst > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 41978 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(sqlite_int64(iAmt) + iOfst)) 41979 } 41980 for (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > i64((*CrashFile)(unsafe.Pointer(pCrash)).FnData) { 41981 var zNew uintptr 41982 var nNew int32 = (*CrashFile)(unsafe.Pointer(pCrash)).FnData*2 + 4096 41983 zNew = crash_realloc(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData, nNew) 41984 if !(zNew != 0) { 41985 return SQLITE_NOMEM 41986 } 41987 libc.Xmemset(tls, zNew+uintptr((*CrashFile)(unsafe.Pointer(pCrash)).FnData), 0, uint64(nNew-(*CrashFile)(unsafe.Pointer(pCrash)).FnData)) 41988 (*CrashFile)(unsafe.Pointer(pCrash)).FnData = nNew 41989 (*CrashFile)(unsafe.Pointer(pCrash)).FzData = zNew 41990 } 41991 libc.Xmemcpy(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), zBuf, uint64(iAmt)) 41992 return writeListAppend(tls, pFile, iOfst, zBuf, iAmt) 41993 } 41994 41995 func cfTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 41996 var pCrash uintptr = pFile 41997 41998 if (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > size { 41999 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(size)) 42000 } 42001 return writeListAppend(tls, pFile, size, uintptr(0), 0) 42002 } 42003 42004 func cfSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 42005 var pCrash uintptr = pFile 42006 var isCrash int32 = 0 42007 42008 var zName uintptr = (*CrashFile)(unsafe.Pointer(pCrash)).FzName 42009 var zCrashFile uintptr = uintptr(unsafe.Pointer(&g)) + 28 42010 var nName int32 = int32(libc.Xstrlen(tls, zName)) 42011 var nCrashFile int32 = int32(libc.Xstrlen(tls, zCrashFile)) 42012 42013 if nCrashFile > 0 && int32(*(*uint8)(unsafe.Pointer(zCrashFile + uintptr(nCrashFile-1)))) == '*' { 42014 nCrashFile-- 42015 if nName > nCrashFile { 42016 nName = nCrashFile 42017 } 42018 } 42019 42020 if nName == nCrashFile && 0 == libc.Xmemcmp(tls, zName, zCrashFile, uint64(nName)) { 42021 if libc.PreDecInt32(&g.FiCrash, 1) == 0 { 42022 isCrash = 1 42023 } 42024 } 42025 42026 return writeListSync(tls, pCrash, isCrash) 42027 } 42028 42029 func cfFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 42030 var pCrash uintptr = pFile 42031 *(*sqlite_int64)(unsafe.Pointer(pSize)) = (*CrashFile)(unsafe.Pointer(pCrash)).FiSize 42032 return SQLITE_OK 42033 } 42034 42035 func cfLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 42036 return sqlite3.Xsqlite3OsLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 42037 } 42038 42039 func cfUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 42040 return sqlite3.Xsqlite3OsUnlock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 42041 } 42042 42043 func cfCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 42044 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, pResOut) 42045 } 42046 42047 func cfFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 42048 if op == SQLITE_FCNTL_SIZE_HINT { 42049 var pCrash uintptr = pFile 42050 var nByte i64 = *(*i64)(unsafe.Pointer(pArg)) 42051 if nByte > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 42052 if SQLITE_OK == writeListAppend(tls, pFile, nByte, uintptr(0), 0) { 42053 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(nByte)) 42054 } 42055 } 42056 return SQLITE_OK 42057 } 42058 return sqlite3.Xsqlite3OsFileControl(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, op, pArg) 42059 } 42060 42061 func cfSectorSize(tls *libc.TLS, pFile uintptr) int32 { 42062 return g.FiSectorSize 42063 } 42064 42065 func cfDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 42066 return g.FiDeviceCharacteristics 42067 } 42068 42069 func cfShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 42070 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 42071 return (*struct { 42072 f func(*libc.TLS, uintptr, int32, int32, int32) int32 42073 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 42074 } 42075 42076 func cfShmBarrier(tls *libc.TLS, pFile uintptr) { 42077 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 42078 (*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) 42079 } 42080 42081 func cfShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 42082 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 42083 return (*struct { 42084 f func(*libc.TLS, uintptr, int32) int32 42085 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, delFlag) 42086 } 42087 42088 func cfShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, sz int32, w int32, pp uintptr) int32 { 42089 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 42090 return (*struct { 42091 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 42092 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iRegion, sz, w, pp) 42093 } 42094 42095 var CrashFileVtab = sqlite3_io_methods{ 42096 FiVersion: 2, 42097 FxClose: 0, 42098 FxRead: 0, 42099 FxWrite: 0, 42100 FxTruncate: 0, 42101 FxSync: 0, 42102 FxFileSize: 0, 42103 FxLock: 0, 42104 FxUnlock: 0, 42105 FxCheckReservedLock: 0, 42106 FxFileControl: 0, 42107 FxSectorSize: 0, 42108 FxDeviceCharacteristics: 0, 42109 FxShmMap: 0, 42110 FxShmLock: 0, 42111 FxShmBarrier: 0, 42112 FxShmUnmap: 0, 42113 } 42114 42115 type crashAppData = struct{ FpOrig uintptr } 42116 42117 func cfOpen(tls *libc.TLS, pCfVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 42118 bp := tls.Alloc(8) 42119 defer tls.Free(8) 42120 42121 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42122 var rc int32 42123 var pWrapper uintptr = pFile 42124 var pReal uintptr = pWrapper + 1*56 42125 42126 libc.Xmemset(tls, pWrapper, 0, uint64(unsafe.Sizeof(CrashFile{}))) 42127 rc = sqlite3.Xsqlite3OsOpen(tls, pVfs, zName, pReal, flags, pOutFlags) 42128 42129 if rc == SQLITE_OK { 42130 (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod = uintptr(unsafe.Pointer(&CrashFileVtab)) 42131 (*CrashFile)(unsafe.Pointer(pWrapper)).FzName = zName 42132 (*CrashFile)(unsafe.Pointer(pWrapper)).FpRealFile = pReal 42133 rc = sqlite3.Xsqlite3OsFileSize(tls, pReal, bp) 42134 (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize = i64(int32(*(*i64)(unsafe.Pointer(bp)))) 42135 (*CrashFile)(unsafe.Pointer(pWrapper)).Fflags = flags 42136 } 42137 if rc == SQLITE_OK { 42138 (*CrashFile)(unsafe.Pointer(pWrapper)).FnData = int32(int64(4096) + (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize) 42139 (*CrashFile)(unsafe.Pointer(pWrapper)).FzData = crash_malloc(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FnData) 42140 if (*CrashFile)(unsafe.Pointer(pWrapper)).FzData != 0 { 42141 var iOff i64 42142 42143 libc.Xmemset(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData, 0, uint64((*CrashFile)(unsafe.Pointer(pWrapper)).FnData)) 42144 for iOff = int64(0); iOff < (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize; iOff = iOff + int64(512) { 42145 var nRead int32 = int32((*CrashFile)(unsafe.Pointer(pWrapper)).FiSize - iOff) 42146 if nRead > 512 { 42147 nRead = 512 42148 } 42149 rc = sqlite3.Xsqlite3OsRead(tls, pReal, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData+uintptr(iOff), nRead, iOff) 42150 } 42151 } else { 42152 rc = SQLITE_NOMEM 42153 } 42154 } 42155 if rc != SQLITE_OK && (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod != 0 { 42156 sqlite3.Xsqlite3OsClose(tls, pFile) 42157 } 42158 return rc 42159 } 42160 42161 func cfDelete(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, dirSync int32) int32 { 42162 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42163 return (*struct { 42164 f func(*libc.TLS, uintptr, uintptr, int32) int32 42165 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDelete})).f(tls, pVfs, zPath, dirSync) 42166 } 42167 42168 func cfAccess(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 42169 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42170 return (*struct { 42171 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42172 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxAccess})).f(tls, pVfs, zPath, flags, pResOut) 42173 } 42174 42175 func cfFullPathname(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) int32 { 42176 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42177 return (*struct { 42178 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42179 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})).f(tls, pVfs, zPath, nPathOut, zPathOut) 42180 } 42181 42182 func cfDlOpen(tls *libc.TLS, pCfVfs uintptr, zPath uintptr) uintptr { 42183 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42184 return (*struct { 42185 f func(*libc.TLS, uintptr, uintptr) uintptr 42186 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlOpen})).f(tls, pVfs, zPath) 42187 } 42188 42189 func cfDlError(tls *libc.TLS, pCfVfs uintptr, nByte int32, zErrMsg uintptr) { 42190 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42191 (*struct { 42192 f func(*libc.TLS, uintptr, int32, uintptr) 42193 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlError})).f(tls, pVfs, nByte, zErrMsg) 42194 } 42195 42196 func cfDlSym(tls *libc.TLS, pCfVfs uintptr, pH uintptr, zSym uintptr) uintptr { 42197 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42198 return (*struct { 42199 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 42200 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlSym})).f(tls, pVfs, pH, zSym) 42201 } 42202 42203 func cfDlClose(tls *libc.TLS, pCfVfs uintptr, pHandle uintptr) { 42204 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42205 (*struct { 42206 f func(*libc.TLS, uintptr, uintptr) 42207 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlClose})).f(tls, pVfs, pHandle) 42208 } 42209 42210 func cfRandomness(tls *libc.TLS, pCfVfs uintptr, nByte int32, zBufOut uintptr) int32 { 42211 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42212 return (*struct { 42213 f func(*libc.TLS, uintptr, int32, uintptr) int32 42214 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxRandomness})).f(tls, pVfs, nByte, zBufOut) 42215 } 42216 42217 func cfSleep(tls *libc.TLS, pCfVfs uintptr, nMicro int32) int32 { 42218 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42219 return (*struct { 42220 f func(*libc.TLS, uintptr, int32) int32 42221 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSleep})).f(tls, pVfs, nMicro) 42222 } 42223 42224 func cfCurrentTime(tls *libc.TLS, pCfVfs uintptr, pTimeOut uintptr) int32 { 42225 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42226 return (*struct { 42227 f func(*libc.TLS, uintptr, uintptr) int32 42228 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTime})).f(tls, pVfs, pTimeOut) 42229 } 42230 42231 func cfGetLastError(tls *libc.TLS, pCfVfs uintptr, n int32, z uintptr) int32 { 42232 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 42233 return (*struct { 42234 f func(*libc.TLS, uintptr, int32, uintptr) int32 42235 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetLastError})).f(tls, pVfs, n, z) 42236 } 42237 42238 func processDevSymArgs(tls *libc.TLS, interp uintptr, objc int32, objv uintptr, piDeviceChar uintptr, piSectorSize uintptr) int32 { 42239 bp := tls.Alloc(316) 42240 defer tls.Free(316) 42241 42242 *(*[14]DeviceFlag)(unsafe.Pointer(bp + 88)) = [14]DeviceFlag{ 42243 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 42244 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 42245 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 42246 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 42247 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 42248 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 42249 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 42250 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 42251 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 42252 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 42253 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 42254 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 42255 {FzName: ts + 26529, FiValue: SQLITE_IOCAP_BATCH_ATOMIC}, 42256 {}, 42257 } 42258 var i int32 42259 var iDc int32 = 0 42260 *(*int32)(unsafe.Pointer(bp + 68)) = 0 42261 var setSectorsize int32 = 0 42262 var setDeviceChar int32 = 0 42263 42264 for i = 0; i < objc; i = i + 2 { 42265 var zOpt uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+64) 42266 42267 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) && 42268 (*(*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) { 42269 tcl.XTcl_AppendResult(tls, interp, 42270 libc.VaList(bp, ts+26571, zOpt, 42271 ts+26585, 0)) 42272 return TCL_ERROR 42273 } 42274 if i == objc-1 { 42275 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26633, zOpt, ts+11945, 0)) 42276 return TCL_ERROR 42277 } 42278 42279 if int32(*(*uint8)(unsafe.Pointer(zOpt + 1))) == 's' { 42280 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+68) != 0 { 42281 return TCL_ERROR 42282 } 42283 setSectorsize = 1 42284 } else { 42285 var j int32 42286 42287 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+72, bp+80) != 0 { 42288 return TCL_ERROR 42289 } 42290 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 72)); j++ { 42291 var rc int32 42292 42293 var pFlag uintptr = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(j)*8))) 42294 (*Tcl_Obj)(unsafe.Pointer(pFlag)).FrefCount++ 42295 tcl.XTcl_UtfToLower(tls, tcl.XTcl_GetString(tls, pFlag)) 42296 42297 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 42298 interp, pFlag, bp+88, int32(unsafe.Sizeof(DeviceFlag{})), ts+26664, 0, bp+312) 42299 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 42300 var _objPtr uintptr = pFlag 42301 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 42302 tcl.XTclFreeObj(tls, _objPtr) 42303 } 42304 } 42305 if rc != 0 { 42306 return TCL_ERROR 42307 } 42308 42309 iDc = iDc | (*DeviceFlag)(unsafe.Pointer(bp+88+uintptr(*(*int32)(unsafe.Pointer(bp + 312)))*16)).FiValue 42310 } 42311 setDeviceChar = 1 42312 } 42313 } 42314 42315 if setDeviceChar != 0 { 42316 *(*int32)(unsafe.Pointer(piDeviceChar)) = iDc 42317 } 42318 if setSectorsize != 0 { 42319 *(*int32)(unsafe.Pointer(piSectorSize)) = *(*int32)(unsafe.Pointer(bp + 68)) 42320 } 42321 42322 return TCL_OK 42323 } 42324 42325 type DeviceFlag = struct { 42326 FzName uintptr 42327 FiValue int32 42328 F__ccgo_pad1 [4]byte 42329 } 42330 42331 func crashNowCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42332 if objc != 1 { 42333 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 42334 return TCL_ERROR 42335 } 42336 writeListSync(tls, uintptr(0), 1) 42337 42338 return TCL_OK 42339 } 42340 42341 func crashEnableCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42342 bp := tls.Alloc(8) 42343 defer tls.Free(8) 42344 42345 *(*int32)(unsafe.Pointer(bp + 4)) = 0 42346 42347 if objc != 2 && objc != 3 { 42348 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26677) 42349 return TCL_ERROR 42350 } 42351 42352 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 42353 return TCL_ERROR 42354 } 42355 if objc == 3 && tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 42356 return TCL_ERROR 42357 } 42358 42359 if *(*int32)(unsafe.Pointer(bp)) != 0 && crashVfs.FpAppData != 0 || !(*(*int32)(unsafe.Pointer(bp)) != 0) && !(int32(crashVfs.FpAppData) != 0) { 42360 return TCL_OK 42361 } 42362 42363 if crashVfs.FpAppData == uintptr(0) { 42364 var pOriginalVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 42365 crashVfs.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FmxPathname 42366 crashVfs.FpAppData = pOriginalVfs 42367 crashVfs.FszOsFile = int32(uint64(unsafe.Sizeof(CrashFile{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FszOsFile)) 42368 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&crashVfs)), *(*int32)(unsafe.Pointer(bp + 4))) 42369 } else { 42370 crashVfs.FpAppData = uintptr(0) 42371 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&crashVfs))) 42372 } 42373 42374 return TCL_OK 42375 } 42376 42377 var crashVfs = sqlite3_vfs{ 42378 FiVersion: 2, 42379 FzName: ts + 26694, 42380 FxOpen: 0, 42381 FxDelete: 0, 42382 FxAccess: 0, 42383 FxFullPathname: 0, 42384 FxDlOpen: 0, 42385 FxDlError: 0, 42386 FxDlSym: 0, 42387 FxDlClose: 0, 42388 FxRandomness: 0, 42389 FxSleep: 0, 42390 FxCurrentTime: 0, 42391 FxGetLastError: 0, 42392 } 42393 42394 func crashParamsObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42395 bp := tls.Alloc(48) 42396 defer tls.Free(48) 42397 42398 var zCrashFile uintptr 42399 42400 *(*int32)(unsafe.Pointer(bp + 40)) = -1 42401 *(*int32)(unsafe.Pointer(bp + 44)) = -1 42402 42403 if !(objc < 3) { 42404 goto __1 42405 } 42406 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26700) 42407 goto error 42408 __1: 42409 ; 42410 zCrashFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+32) 42411 if !(uint64(*(*int32)(unsafe.Pointer(bp + 32))) >= uint64(unsafe.Sizeof([500]uint8{}))) { 42412 goto __2 42413 } 42414 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26726, zCrashFile, ts+11945, 0)) 42415 goto error 42416 __2: 42417 ; 42418 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+36) != 0) { 42419 goto __3 42420 } 42421 goto error 42422 __3: 42423 ; 42424 if !(processDevSymArgs(tls, interp, objc-3, objv+1*8, bp+40, bp+44) != 0) { 42425 goto __4 42426 } 42427 return TCL_ERROR 42428 __4: 42429 ; 42430 if !(*(*int32)(unsafe.Pointer(bp + 40)) >= 0) { 42431 goto __5 42432 } 42433 g.FiDeviceCharacteristics = *(*int32)(unsafe.Pointer(bp + 40)) 42434 __5: 42435 ; 42436 if !(*(*int32)(unsafe.Pointer(bp + 44)) >= 0) { 42437 goto __6 42438 } 42439 g.FiSectorSize = *(*int32)(unsafe.Pointer(bp + 44)) 42440 __6: 42441 ; 42442 g.FiCrash = *(*int32)(unsafe.Pointer(bp + 36)) 42443 libc.Xmemcpy(tls, uintptr(unsafe.Pointer(&g))+28, zCrashFile, uint64(*(*int32)(unsafe.Pointer(bp + 32))+1)) 42444 sqlite3CrashTestEnable = 1 42445 return TCL_OK 42446 42447 error: 42448 return TCL_ERROR 42449 } 42450 42451 func devSymObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42452 bp := tls.Alloc(8) 42453 defer tls.Free(8) 42454 42455 *(*int32)(unsafe.Pointer(bp)) = -1 42456 *(*int32)(unsafe.Pointer(bp + 4)) = -1 42457 42458 if processDevSymArgs(tls, interp, objc-1, objv+1*8, bp, bp+4) != 0 { 42459 return TCL_ERROR 42460 } 42461 devsym_register(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 42462 42463 return TCL_OK 42464 } 42465 42466 func writeCrashObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42467 bp := tls.Alloc(4) 42468 defer tls.Free(4) 42469 42470 *(*int32)(unsafe.Pointer(bp)) = 0 42471 42472 if objc != 2 { 42473 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26750) 42474 return TCL_ERROR 42475 } 42476 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 42477 return TCL_ERROR 42478 } 42479 42480 devsym_crash_on_write(tls, *(*int32)(unsafe.Pointer(bp))) 42481 return TCL_OK 42482 } 42483 42484 func dsUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42485 if objc != 1 { 42486 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 42487 return TCL_ERROR 42488 } 42489 42490 devsym_unregister(tls) 42491 return TCL_OK 42492 } 42493 42494 func jtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42495 bp := tls.Alloc(48) 42496 defer tls.Free(48) 42497 42498 var zParent uintptr = uintptr(0) 42499 42500 if objc != 2 && objc != 3 { 42501 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26757) 42502 return TCL_ERROR 42503 } 42504 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 42505 if objc == 3 { 42506 if libc.Xstrcmp(tls, zParent, ts+26779) != 0 { 42507 tcl.XTcl_AppendResult(tls, interp, 42508 libc.VaList(bp, ts+11851, zParent, ts+26788, 0)) 42509 return TCL_ERROR 42510 } 42511 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 42512 } 42513 42514 if !(int32(*(*uint8)(unsafe.Pointer(zParent))) != 0) { 42515 zParent = uintptr(0) 42516 } 42517 if jt_register(tls, zParent, libc.Bool32(objc == 3)) != 0 { 42518 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26808, 0)) 42519 return TCL_ERROR 42520 } 42521 42522 return TCL_OK 42523 } 42524 42525 func jtUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 42526 if objc != 1 { 42527 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 42528 return TCL_ERROR 42529 } 42530 42531 jt_unregister(tls) 42532 return TCL_OK 42533 } 42534 42535 func Sqlitetest6_Init(tls *libc.TLS, interp uintptr) int32 { 42536 tcl.XTcl_CreateObjCommand(tls, interp, ts+26829, *(*uintptr)(unsafe.Pointer(&struct { 42537 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42538 }{crashEnableCmd})), uintptr(0), uintptr(0)) 42539 tcl.XTcl_CreateObjCommand(tls, interp, ts+26850, *(*uintptr)(unsafe.Pointer(&struct { 42540 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42541 }{crashParamsObjCmd})), uintptr(0), uintptr(0)) 42542 tcl.XTcl_CreateObjCommand(tls, interp, ts+26870, *(*uintptr)(unsafe.Pointer(&struct { 42543 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42544 }{crashNowCmd})), uintptr(0), uintptr(0)) 42545 tcl.XTcl_CreateObjCommand(tls, interp, ts+26888, *(*uintptr)(unsafe.Pointer(&struct { 42546 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42547 }{devSymObjCmd})), uintptr(0), uintptr(0)) 42548 tcl.XTcl_CreateObjCommand(tls, interp, ts+26912, *(*uintptr)(unsafe.Pointer(&struct { 42549 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42550 }{writeCrashObjCmd})), uintptr(0), uintptr(0)) 42551 tcl.XTcl_CreateObjCommand(tls, interp, ts+26935, *(*uintptr)(unsafe.Pointer(&struct { 42552 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42553 }{dsUnregisterObjCmd})), uintptr(0), uintptr(0)) 42554 tcl.XTcl_CreateObjCommand(tls, interp, ts+26953, *(*uintptr)(unsafe.Pointer(&struct { 42555 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42556 }{jtObjCmd})), uintptr(0), uintptr(0)) 42557 tcl.XTcl_CreateObjCommand(tls, interp, ts+26969, *(*uintptr)(unsafe.Pointer(&struct { 42558 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 42559 }{jtUnregisterObjCmd})), uintptr(0), uintptr(0)) 42560 return TCL_OK 42561 } 42562 42563 type Thread1 = struct { 42564 FzFilename uintptr 42565 FxOp uintptr 42566 FzArg uintptr 42567 Fopnum int32 42568 Fbusy int32 42569 Fcompleted int32 42570 F__ccgo_pad1 [4]byte 42571 Fdb uintptr 42572 FpStmt uintptr 42573 FzErr uintptr 42574 FzStaticErr uintptr 42575 Frc int32 42576 Fargc int32 42577 Fargv [100]uintptr 42578 Fcolv [100]uintptr 42579 FnServer int32 42580 F__ccgo_pad2 [4]byte 42581 } 42582 42583 var threadset1 [26]Thread1 42584 42585 func client_main(tls *libc.TLS, pArg uintptr) uintptr { 42586 var p uintptr = pArg 42587 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 42588 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42589 } 42590 sqlite3_client_open(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename, p+40) 42591 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) { 42592 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread1)(unsafe.Pointer(p)).Fdb)) 42593 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42594 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 42595 } 42596 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42597 (*Thread1)(unsafe.Pointer(p)).Fcompleted = 1 42598 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42599 libc.Xsched_yield(tls) 42600 } 42601 for (*Thread1)(unsafe.Pointer(p)).FxOp != 0 { 42602 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 42603 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 42604 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 42605 } 42606 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread1)(unsafe.Pointer(p)).FxOp})).f(tls, p) 42607 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 42608 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42609 libc.Xsched_yield(tls) 42610 } 42611 } 42612 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 42613 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42614 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42615 } 42616 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 42617 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 42618 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 42619 } 42620 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 42621 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 42622 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 42623 } 42624 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 42625 sqlite3.Xsqlite3_thread_cleanup(tls) 42626 return uintptr(0) 42627 } 42628 42629 func parse_client_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 42630 bp := tls.Alloc(16) 42631 defer tls.Free(16) 42632 42633 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) { 42634 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25741, 0)) 42635 return -1 42636 } 42637 return int32(*(*uint8)(unsafe.Pointer(zArg))) - 'A' 42638 } 42639 42640 func tcl_client_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42641 bp := tls.Alloc(96) 42642 defer tls.Free(96) 42643 42644 var i int32 42645 42646 var rc int32 42647 42648 if argc != 3 { 42649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42650 ts+25780, 0)) 42651 return TCL_ERROR 42652 } 42653 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42654 if i < 0 { 42655 return TCL_ERROR 42656 } 42657 if threadset1[i].Fbusy != 0 { 42658 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25793, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25801, 0)) 42659 return TCL_ERROR 42660 } 42661 threadset1[i].Fbusy = 1 42662 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 42663 threadset1[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42664 threadset1[i].Fopnum = 1 42665 threadset1[i].Fcompleted = 0 42666 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 42667 f func(*libc.TLS, uintptr) uintptr 42668 }{client_main})), uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42669 if rc != 0 { 42670 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25821, 0)) 42671 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 42672 threadset1[i].Fbusy = 0 42673 return TCL_ERROR 42674 } 42675 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 42676 if threadset1[i].FnServer == 0 { 42677 threadset1[i].FnServer = 1 42678 sqlite3_server_start2(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688+1680) 42679 } 42680 return TCL_OK 42681 } 42682 42683 func client_wait(tls *libc.TLS, p uintptr) { 42684 for (*Thread1)(unsafe.Pointer(p)).Fopnum > (*Thread1)(unsafe.Pointer(p)).Fcompleted { 42685 libc.Xsched_yield(tls) 42686 } 42687 } 42688 42689 func tcl_client_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42690 bp := tls.Alloc(48) 42691 defer tls.Free(48) 42692 42693 var i int32 42694 42695 if argc != 2 { 42696 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42697 ts+25849, 0)) 42698 return TCL_ERROR 42699 } 42700 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42701 if i < 0 { 42702 return TCL_ERROR 42703 } 42704 if !(threadset1[i].Fbusy != 0) { 42705 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42706 return TCL_ERROR 42707 } 42708 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42709 return TCL_OK 42710 } 42711 42712 func stop_thread(tls *libc.TLS, p uintptr) { 42713 client_wait(tls, p) 42714 (*Thread1)(unsafe.Pointer(p)).FxOp = uintptr(0) 42715 (*Thread1)(unsafe.Pointer(p)).Fopnum++ 42716 client_wait(tls, p) 42717 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzArg) 42718 (*Thread1)(unsafe.Pointer(p)).FzArg = uintptr(0) 42719 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename) 42720 (*Thread1)(unsafe.Pointer(p)).FzFilename = uintptr(0) 42721 (*Thread1)(unsafe.Pointer(p)).Fbusy = 0 42722 } 42723 42724 func tcl_client_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42725 bp := tls.Alloc(48) 42726 defer tls.Free(48) 42727 42728 var i int32 42729 42730 if argc != 2 { 42731 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42732 ts+25849, 0)) 42733 return TCL_ERROR 42734 } 42735 if int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 42736 for i = 0; i < N_THREAD; i++ { 42737 if threadset1[i].Fbusy != 0 { 42738 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42739 } 42740 } 42741 } else { 42742 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42743 if i < 0 { 42744 return TCL_ERROR 42745 } 42746 if !(threadset1[i].Fbusy != 0) { 42747 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42748 return TCL_ERROR 42749 } 42750 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42751 } 42752 42753 for i = 0; i < N_THREAD && threadset1[i].Fbusy == 0; i++ { 42754 } 42755 if i >= N_THREAD { 42756 sqlite3_server_stop(tls) 42757 for 1 != 0 { 42758 for i = 0; i < N_THREAD && threadset1[i].FnServer == 0; i++ { 42759 } 42760 if i == N_THREAD { 42761 break 42762 } 42763 libc.Xsched_yield(tls) 42764 } 42765 } 42766 return TCL_OK 42767 } 42768 42769 func tcl_client_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42770 bp := tls.Alloc(172) 42771 defer tls.Free(172) 42772 42773 var i int32 42774 42775 if argc != 2 { 42776 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42777 ts+25849, 0)) 42778 return TCL_ERROR 42779 } 42780 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42781 if i < 0 { 42782 return TCL_ERROR 42783 } 42784 if !(threadset1[i].Fbusy != 0) { 42785 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42786 return TCL_ERROR 42787 } 42788 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42789 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset1[i].Fargc)) 42790 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 42791 return TCL_OK 42792 } 42793 42794 func tcl_client_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42795 bp := tls.Alloc(84) 42796 defer tls.Free(84) 42797 42798 var i int32 42799 42800 if argc != 3 { 42801 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42802 ts+25868, 0)) 42803 return TCL_ERROR 42804 } 42805 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42806 if i < 0 { 42807 return TCL_ERROR 42808 } 42809 if !(threadset1[i].Fbusy != 0) { 42810 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42811 return TCL_ERROR 42812 } 42813 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 42814 return TCL_ERROR 42815 } 42816 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42817 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 42818 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 42819 return TCL_ERROR 42820 } 42821 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)) 42822 return TCL_OK 42823 } 42824 42825 func tcl_client_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42826 bp := tls.Alloc(84) 42827 defer tls.Free(84) 42828 42829 var i int32 42830 42831 if argc != 3 { 42832 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42833 ts+25868, 0)) 42834 return TCL_ERROR 42835 } 42836 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42837 if i < 0 { 42838 return TCL_ERROR 42839 } 42840 if !(threadset1[i].Fbusy != 0) { 42841 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42842 return TCL_ERROR 42843 } 42844 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 42845 return TCL_ERROR 42846 } 42847 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42848 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 42849 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25874, 0)) 42850 return TCL_ERROR 42851 } 42852 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)) 42853 return TCL_OK 42854 } 42855 42856 func tcl_client_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42857 bp := tls.Alloc(64) 42858 defer tls.Free(64) 42859 42860 var i int32 42861 var zName uintptr 42862 42863 if argc != 2 { 42864 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42865 ts+25849, 0)) 42866 return TCL_ERROR 42867 } 42868 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42869 if i < 0 { 42870 return TCL_ERROR 42871 } 42872 if !(threadset1[i].Fbusy != 0) { 42873 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42874 return TCL_ERROR 42875 } 42876 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42877 zName = sqlite3.Xsqlite3ErrName(tls, threadset1[i].Frc) 42878 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 42879 return TCL_OK 42880 } 42881 42882 func tcl_client_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42883 bp := tls.Alloc(64) 42884 defer tls.Free(64) 42885 42886 var i int32 42887 42888 if argc != 2 { 42889 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42890 ts+25849, 0)) 42891 return TCL_ERROR 42892 } 42893 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42894 if i < 0 { 42895 return TCL_ERROR 42896 } 42897 if !(threadset1[i].Fbusy != 0) { 42898 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42899 return TCL_ERROR 42900 } 42901 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42902 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset1[i].FzErr, 0)) 42903 return TCL_OK 42904 } 42905 42906 func do_compile1(tls *libc.TLS, p uintptr) { 42907 if (*Thread1)(unsafe.Pointer(p)).Fdb == uintptr(0) { 42908 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25901) 42909 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42910 return 42911 } 42912 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 42913 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42914 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42915 } 42916 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_prepare(tls, (*Thread1)(unsafe.Pointer(p)).Fdb, (*Thread1)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 42917 } 42918 42919 func tcl_client_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42920 bp := tls.Alloc(56) 42921 defer tls.Free(56) 42922 42923 var i int32 42924 if argc != 3 { 42925 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42926 ts+25921, 0)) 42927 return TCL_ERROR 42928 } 42929 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42930 if i < 0 { 42931 return TCL_ERROR 42932 } 42933 if !(threadset1[i].Fbusy != 0) { 42934 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42935 return TCL_ERROR 42936 } 42937 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42938 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile1})) 42939 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 42940 threadset1[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42941 threadset1[i].Fopnum++ 42942 return TCL_OK 42943 } 42944 42945 func do_step1(tls *libc.TLS, p uintptr) { 42946 var i int32 42947 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42948 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 42949 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42950 return 42951 } 42952 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_step(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42953 if (*Thread1)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 42954 (*Thread1)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42955 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt); i++ { 42956 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 42957 } 42958 for i = 0; i < (*Thread1)(unsafe.Pointer(p)).Fargc; i++ { 42959 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 42960 } 42961 } 42962 } 42963 42964 func tcl_client_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42965 bp := tls.Alloc(48) 42966 defer tls.Free(48) 42967 42968 var i int32 42969 if argc != 2 { 42970 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42971 ts+25958, 0)) 42972 return TCL_ERROR 42973 } 42974 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42975 if i < 0 { 42976 return TCL_ERROR 42977 } 42978 if !(threadset1[i].Fbusy != 0) { 42979 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 42980 return TCL_ERROR 42981 } 42982 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 42983 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step1})) 42984 threadset1[i].Fopnum++ 42985 return TCL_OK 42986 } 42987 42988 func do_finalize1(tls *libc.TLS, p uintptr) { 42989 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 42990 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 42991 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 42992 return 42993 } 42994 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 42995 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42996 } 42997 42998 func tcl_client_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42999 bp := tls.Alloc(48) 43000 defer tls.Free(48) 43001 43002 var i int32 43003 if argc != 2 { 43004 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43005 ts+25958, 0)) 43006 return TCL_ERROR 43007 } 43008 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43009 if i < 0 { 43010 return TCL_ERROR 43011 } 43012 if !(threadset1[i].Fbusy != 0) { 43013 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 43014 return TCL_ERROR 43015 } 43016 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 43017 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize1})) 43018 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 43019 threadset1[i].FzArg = uintptr(0) 43020 threadset1[i].Fopnum++ 43021 return TCL_OK 43022 } 43023 43024 func do_reset(tls *libc.TLS, p uintptr) { 43025 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 43026 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+25929) 43027 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 43028 return 43029 } 43030 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_reset(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 43031 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 43032 } 43033 43034 func tcl_client_reset(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43035 bp := tls.Alloc(48) 43036 defer tls.Free(48) 43037 43038 var i int32 43039 if argc != 2 { 43040 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43041 ts+25958, 0)) 43042 return TCL_ERROR 43043 } 43044 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43045 if i < 0 { 43046 return TCL_ERROR 43047 } 43048 if !(threadset1[i].Fbusy != 0) { 43049 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 43050 return TCL_ERROR 43051 } 43052 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 43053 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_reset})) 43054 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 43055 threadset1[i].FzArg = uintptr(0) 43056 threadset1[i].Fopnum++ 43057 return TCL_OK 43058 } 43059 43060 func tcl_client_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43061 bp := tls.Alloc(64) 43062 defer tls.Free(64) 43063 43064 var i int32 43065 var j int32 43066 var temp uintptr 43067 if argc != 3 { 43068 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43069 ts+25963, 0)) 43070 return TCL_ERROR 43071 } 43072 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43073 if i < 0 { 43074 return TCL_ERROR 43075 } 43076 if !(threadset1[i].Fbusy != 0) { 43077 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25853, 0)) 43078 return TCL_ERROR 43079 } 43080 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 43081 j = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 43082 if j < 0 { 43083 return TCL_ERROR 43084 } 43085 if !(threadset1[j].Fbusy != 0) { 43086 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25853, 0)) 43087 return TCL_ERROR 43088 } 43089 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(j)*1688) 43090 temp = threadset1[i].Fdb 43091 threadset1[i].Fdb = threadset1[j].Fdb 43092 threadset1[j].Fdb = temp 43093 return TCL_OK 43094 } 43095 43096 func Sqlitetest7_Init(tls *libc.TLS, interp uintptr) int32 { 43097 var i int32 43098 43099 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd6))/uint64(unsafe.Sizeof(struct { 43100 FzName uintptr 43101 FxProc uintptr 43102 }{})); i++ { 43103 tcl.XTcl_CreateCommand(tls, interp, aCmd6[i].FzName, aCmd6[i].FxProc, uintptr(0), uintptr(0)) 43104 } 43105 return TCL_OK 43106 } 43107 43108 var aCmd6 = [13]struct { 43109 FzName uintptr 43110 FxProc uintptr 43111 }{ 43112 {FzName: ts + 26987, FxProc: 0}, 43113 {FzName: ts + 27001, FxProc: 0}, 43114 {FzName: ts + 27013, FxProc: 0}, 43115 {FzName: ts + 27025, FxProc: 0}, 43116 {FzName: ts + 27037, FxProc: 0}, 43117 {FzName: ts + 27049, FxProc: 0}, 43118 {FzName: ts + 27064, FxProc: 0}, 43119 {FzName: ts + 27078, FxProc: 0}, 43120 {FzName: ts + 27091, FxProc: 0}, 43121 {FzName: ts + 27106, FxProc: 0}, 43122 {FzName: ts + 27118, FxProc: 0}, 43123 {FzName: ts + 27131, FxProc: 0}, 43124 {FzName: ts + 27147, FxProc: 0}, 43125 } 43126 43127 type echo_vtab1 = struct { 43128 Fbase sqlite3_vtab 43129 Finterp uintptr 43130 Fdb uintptr 43131 FisPattern int32 43132 FinTransaction int32 43133 FzThis uintptr 43134 FzTableName uintptr 43135 FzLogName uintptr 43136 FnCol int32 43137 F__ccgo_pad1 [4]byte 43138 FaIndex uintptr 43139 FaCol uintptr 43140 } 43141 43142 type echo_vtab = echo_vtab1 43143 type echo_cursor1 = struct { 43144 Fbase sqlite3_vtab_cursor 43145 FpStmt uintptr 43146 } 43147 43148 type echo_cursor = echo_cursor1 43149 43150 func simulateVtabError(tls *libc.TLS, p uintptr, zMethod uintptr) int32 { 43151 bp := tls.Alloc(152) 43152 defer tls.Free(152) 43153 43154 var zErr uintptr 43155 43156 *(*uint8)(unsafe.Pointer(bp + 24 + 127)) = uint8(0) 43157 sqlite3.Xsqlite3_snprintf(tls, 127, bp+24, ts+27159, libc.VaList(bp, zMethod, (*echo_vtab)(unsafe.Pointer(p)).FzTableName)) 43158 zErr = tcl.XTcl_GetVar2(tls, (*echo_vtab)(unsafe.Pointer(p)).Finterp, bp+24, uintptr(0), TCL_GLOBAL_ONLY) 43159 if zErr != 0 { 43160 (*echo_vtab)(unsafe.Pointer(p)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+16, zErr)) 43161 } 43162 return libc.Bool32(zErr != uintptr(0)) 43163 } 43164 43165 func dequoteString(tls *libc.TLS, z uintptr) { 43166 var quote int32 43167 var i int32 43168 var j int32 43169 if z == uintptr(0) { 43170 return 43171 } 43172 quote = int32(*(*uint8)(unsafe.Pointer(z))) 43173 switch quote { 43174 case '\'': 43175 break 43176 case '"': 43177 break 43178 case '`': 43179 break 43180 case '[': 43181 quote = ']' 43182 break 43183 default: 43184 return 43185 } 43186 i = 1 43187 j = 0 43188 for ; *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 43189 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == quote { 43190 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == quote { 43191 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(quote) 43192 i++ 43193 } else { 43194 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(0) 43195 break 43196 } 43197 } else { 43198 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(i))) 43199 } 43200 } 43201 } 43202 43203 func getColumnNames(tls *libc.TLS, db uintptr, zTab uintptr, paCol uintptr, pnCol uintptr) int32 { 43204 bp := tls.Alloc(24) 43205 defer tls.Free(24) 43206 43207 var aCol uintptr 43208 var zSql uintptr 43209 43210 var rc int32 43211 var nCol int32 43212 var zName uintptr 43213 var ii int32 43214 var nBytes int32 43215 var zSpace uintptr 43216 aCol = uintptr(0) 43217 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 43218 rc = SQLITE_OK 43219 nCol = 0 43220 43221 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27203, libc.VaList(bp, zTab)) 43222 if !!(zSql != 0) { 43223 goto __1 43224 } 43225 rc = SQLITE_NOMEM 43226 goto out 43227 __1: 43228 ; 43229 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 43230 sqlite3.Xsqlite3_free(tls, zSql) 43231 43232 if !(rc == SQLITE_OK) { 43233 goto __2 43234 } 43235 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 43236 43237 nBytes = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(nCol)) 43238 ii = 0 43239 __3: 43240 if !(ii < nCol) { 43241 goto __5 43242 } 43243 zName = sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii) 43244 if !!(zName != 0) { 43245 goto __6 43246 } 43247 rc = SQLITE_NOMEM 43248 goto out 43249 __6: 43250 ; 43251 nBytes = nBytes + (int32(libc.Xstrlen(tls, zName)) + 1) 43252 goto __4 43253 __4: 43254 ii++ 43255 goto __3 43256 goto __5 43257 __5: 43258 ; 43259 aCol = sqlite3.Xsqlite3MallocZero(tls, uint64(nBytes)) 43260 if !!(aCol != 0) { 43261 goto __7 43262 } 43263 rc = SQLITE_NOMEM 43264 goto out 43265 __7: 43266 ; 43267 zSpace = aCol + uintptr(nCol)*8 43268 ii = 0 43269 __8: 43270 if !(ii < nCol) { 43271 goto __10 43272 } 43273 *(*uintptr)(unsafe.Pointer(aCol + uintptr(ii)*8)) = zSpace 43274 sqlite3.Xsqlite3_snprintf(tls, nBytes, zSpace, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii))) 43275 zSpace += uintptr(int32(libc.Xstrlen(tls, zSpace)) + 1) 43276 goto __9 43277 __9: 43278 ii++ 43279 goto __8 43280 goto __10 43281 __10: 43282 ; 43283 __2: 43284 ; 43285 *(*uintptr)(unsafe.Pointer(paCol)) = aCol 43286 *(*int32)(unsafe.Pointer(pnCol)) = nCol 43287 43288 out: 43289 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 43290 return rc 43291 } 43292 43293 func getIndexArray(tls *libc.TLS, db uintptr, zTab uintptr, nCol int32, paIndex uintptr) int32 { 43294 bp := tls.Alloc(32) 43295 defer tls.Free(32) 43296 43297 var aIndex uintptr 43298 var rc int32 43299 var zSql uintptr 43300 var cid int32 43301 var zIdx uintptr 43302 43303 var rc2 int32 43304 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 43305 aIndex = uintptr(0) 43306 43307 aIndex = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(nCol)) 43308 if !!(aIndex != 0) { 43309 goto __1 43310 } 43311 rc = SQLITE_NOMEM 43312 goto get_index_array_out 43313 __1: 43314 ; 43315 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27220, libc.VaList(bp, zTab)) 43316 if !!(zSql != 0) { 43317 goto __2 43318 } 43319 rc = SQLITE_NOMEM 43320 goto get_index_array_out 43321 __2: 43322 ; 43323 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 43324 sqlite3.Xsqlite3_free(tls, zSql) 43325 43326 __3: 43327 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW) { 43328 goto __4 43329 } 43330 zIdx = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 43331 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 43332 if !(zIdx == uintptr(0)) { 43333 goto __5 43334 } 43335 goto __3 43336 __5: 43337 ; 43338 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27242, libc.VaList(bp+8, zIdx)) 43339 if !!(zSql != 0) { 43340 goto __6 43341 } 43342 rc = SQLITE_NOMEM 43343 goto get_index_array_out 43344 __6: 43345 ; 43346 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+24, uintptr(0)) 43347 sqlite3.Xsqlite3_free(tls, zSql) 43348 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW) { 43349 goto __7 43350 } 43351 cid = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 43352 43353 *(*int32)(unsafe.Pointer(aIndex + uintptr(cid)*4)) = 1 43354 __7: 43355 ; 43356 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0) { 43357 goto __8 43358 } 43359 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 43360 __8: 43361 ; 43362 if !(rc != SQLITE_OK) { 43363 goto __9 43364 } 43365 goto get_index_array_out 43366 __9: 43367 ; 43368 goto __3 43369 __4: 43370 ; 43371 get_index_array_out: 43372 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { 43373 goto __10 43374 } 43375 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 43376 if !(rc == SQLITE_OK) { 43377 goto __11 43378 } 43379 rc = rc2 43380 __11: 43381 ; 43382 __10: 43383 ; 43384 if !(rc != SQLITE_OK) { 43385 goto __12 43386 } 43387 sqlite3.Xsqlite3_free(tls, aIndex) 43388 aIndex = uintptr(0) 43389 __12: 43390 ; 43391 *(*uintptr)(unsafe.Pointer(paIndex)) = aIndex 43392 return rc 43393 } 43394 43395 func appendToEchoModule(tls *libc.TLS, interp uintptr, zArg uintptr) { 43396 var flags int32 = TCL_APPEND_VALUE | TCL_LIST_ELEMENT | TCL_GLOBAL_ONLY 43397 tcl.XTcl_SetVar2(tls, interp, ts+27264, uintptr(0), func() uintptr { 43398 if zArg != 0 { 43399 return zArg 43400 } 43401 return ts + 584 43402 }(), flags) 43403 } 43404 43405 func echoDeclareVtab(tls *libc.TLS, pVtab uintptr, db uintptr) int32 { 43406 bp := tls.Alloc(8) 43407 defer tls.Free(8) 43408 43409 var rc int32 = SQLITE_OK 43410 43411 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 { 43412 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 43413 rc = sqlite3.Xsqlite3_prepare(tls, db, 43414 ts+27276, 43415 -1, bp, uintptr(0)) 43416 if rc == SQLITE_OK { 43417 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, -1, uintptr(0)) 43418 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) == SQLITE_ROW { 43419 var rc2 int32 43420 var zCreateTable uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 43421 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 43422 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 43423 if rc == SQLITE_OK { 43424 rc = rc2 43425 } 43426 } else { 43427 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 43428 if rc == SQLITE_OK { 43429 rc = SQLITE_ERROR 43430 } 43431 } 43432 if rc == SQLITE_OK { 43433 rc = getColumnNames(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, pVtab+88, pVtab+72) 43434 } 43435 if rc == SQLITE_OK { 43436 rc = getIndexArray(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, (*echo_vtab)(unsafe.Pointer(pVtab)).FnCol, pVtab+80) 43437 } 43438 } 43439 } 43440 43441 return rc 43442 } 43443 43444 func echoDestructor(tls *libc.TLS, pVtab uintptr) int32 { 43445 var p uintptr = pVtab 43446 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaIndex) 43447 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaCol) 43448 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis) 43449 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzTableName) 43450 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzLogName) 43451 sqlite3.Xsqlite3_free(tls, p) 43452 return 0 43453 } 43454 43455 type EchoModule1 = struct { 43456 Finterp uintptr 43457 Fdb uintptr 43458 } 43459 43460 type EchoModule = EchoModule1 43461 43462 func echoConstructor(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43463 bp := tls.Alloc(32) 43464 defer tls.Free(32) 43465 43466 var rc int32 43467 var i int32 43468 var pVtab uintptr 43469 43470 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_vtab{}))) 43471 if !(pVtab != 0) { 43472 return SQLITE_NOMEM 43473 } 43474 (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp = (*EchoModule)(unsafe.Pointer(pAux)).Finterp 43475 (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb = db 43476 43477 (*echo_vtab)(unsafe.Pointer(pVtab)).FzThis = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 43478 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzThis) != 0) { 43479 echoDestructor(tls, pVtab) 43480 return SQLITE_NOMEM 43481 } 43482 43483 if argc > 3 { 43484 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 43485 dequoteString(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 43486 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 && int32(*(*uint8)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName))) == '*' { 43487 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)) 43488 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 43489 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = z 43490 (*echo_vtab)(unsafe.Pointer(pVtab)).FisPattern = 1 43491 } 43492 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) != 0) { 43493 echoDestructor(tls, pVtab) 43494 return SQLITE_NOMEM 43495 } 43496 } 43497 43498 for i = 0; i < argc; i++ { 43499 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 43500 } 43501 43502 rc = echoDeclareVtab(tls, pVtab, db) 43503 if rc != SQLITE_OK { 43504 echoDestructor(tls, pVtab) 43505 return rc 43506 } 43507 43508 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 43509 return SQLITE_OK 43510 } 43511 43512 func echoCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43513 bp := tls.Alloc(24) 43514 defer tls.Free(24) 43515 43516 var rc int32 = SQLITE_OK 43517 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27345) 43518 rc = echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 43519 43520 if rc == SQLITE_OK && argc == 5 { 43521 var zSql uintptr 43522 var pVtab uintptr = *(*uintptr)(unsafe.Pointer(ppVtab)) 43523 (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) 43524 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27353, libc.VaList(bp+8, (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName)) 43525 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 43526 sqlite3.Xsqlite3_free(tls, zSql) 43527 if rc != SQLITE_OK { 43528 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, sqlite3.Xsqlite3_errmsg(tls, db))) 43529 } 43530 } 43531 43532 if *(*uintptr)(unsafe.Pointer(ppVtab)) != 0 && rc != SQLITE_OK { 43533 echoDestructor(tls, *(*uintptr)(unsafe.Pointer(ppVtab))) 43534 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 43535 } 43536 43537 if rc == SQLITE_OK { 43538 (*echo_vtab)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppVtab)))).FinTransaction = 1 43539 } 43540 43541 return rc 43542 } 43543 43544 func echoConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 43545 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27377) 43546 return echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 43547 } 43548 43549 func echoDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 43550 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27386) 43551 return echoDestructor(tls, pVtab) 43552 } 43553 43554 func echoDestroy(tls *libc.TLS, pVtab uintptr) int32 { 43555 bp := tls.Alloc(8) 43556 defer tls.Free(8) 43557 43558 var rc int32 = SQLITE_OK 43559 var p uintptr = pVtab 43560 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27398) 43561 43562 if p != 0 && (*echo_vtab)(unsafe.Pointer(p)).FzLogName != 0 { 43563 var zSql uintptr 43564 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27407, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzLogName)) 43565 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 43566 sqlite3.Xsqlite3_free(tls, zSql) 43567 } 43568 43569 if rc == SQLITE_OK { 43570 rc = echoDestructor(tls, pVtab) 43571 } 43572 return rc 43573 } 43574 43575 func echoOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 43576 var pCur uintptr 43577 if simulateVtabError(tls, pVTab, ts+27421) != 0 { 43578 return SQLITE_ERROR 43579 } 43580 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_cursor{}))) 43581 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 43582 return func() int32 { 43583 if pCur != 0 { 43584 return SQLITE_OK 43585 } 43586 return SQLITE_NOMEM 43587 }() 43588 } 43589 43590 func echoClose(tls *libc.TLS, cur uintptr) int32 { 43591 var rc int32 43592 var pCur uintptr = cur 43593 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt 43594 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43595 sqlite3.Xsqlite3_free(tls, pCur) 43596 rc = sqlite3.Xsqlite3_finalize(tls, pStmt) 43597 return rc 43598 } 43599 43600 func echoEof(tls *libc.TLS, cur uintptr) int32 { 43601 return func() int32 { 43602 if (*echo_cursor)(unsafe.Pointer(cur)).FpStmt != 0 { 43603 return 0 43604 } 43605 return 1 43606 }() 43607 } 43608 43609 func echoNext(tls *libc.TLS, cur uintptr) int32 { 43610 var rc int32 = SQLITE_OK 43611 var pCur uintptr = cur 43612 43613 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27427) != 0 { 43614 return SQLITE_ERROR 43615 } 43616 43617 if (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt != 0 { 43618 rc = sqlite3.Xsqlite3_step(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43619 if rc == SQLITE_ROW { 43620 rc = SQLITE_OK 43621 } else { 43622 rc = sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43623 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43624 } 43625 } 43626 43627 return rc 43628 } 43629 43630 func echoColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 43631 var iCol int32 = i + 1 43632 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 43633 43634 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27433) != 0 { 43635 return SQLITE_ERROR 43636 } 43637 43638 if !(pStmt != 0) { 43639 sqlite3.Xsqlite3_result_null(tls, ctx) 43640 } else { 43641 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, pStmt, iCol)) 43642 } 43643 return SQLITE_OK 43644 } 43645 43646 func echoRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 43647 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 43648 43649 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+2304) != 0 { 43650 return SQLITE_ERROR 43651 } 43652 43653 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 43654 return SQLITE_OK 43655 } 43656 43657 func hashString(tls *libc.TLS, zString uintptr) int32 { 43658 var val u32 = u32(0) 43659 var ii int32 43660 for ii = 0; *(*uint8)(unsafe.Pointer(zString + uintptr(ii))) != 0; ii++ { 43661 val = val<<3 + u32(int32(*(*uint8)(unsafe.Pointer(zString + uintptr(ii))))) 43662 } 43663 return int32(val & u32(0x7fffffff)) 43664 } 43665 43666 func echoFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 43667 var rc int32 43668 var i int32 43669 43670 var pCur uintptr = pVtabCursor 43671 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 43672 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 43673 43674 if simulateVtabError(tls, pVtab, ts+27441) != 0 { 43675 return SQLITE_ERROR 43676 } 43677 43678 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27441) 43679 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, idxStr) 43680 for i = 0; i < argc; i++ { 43681 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 43682 } 43683 43684 sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 43685 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 43686 43687 rc = sqlite3.Xsqlite3_prepare(tls, db, idxStr, -1, pCur+8, uintptr(0)) 43688 43689 for i = 0; rc == SQLITE_OK && i < argc; i++ { 43690 rc = sqlite3.Xsqlite3_bind_value(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt, i+1, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 43691 } 43692 43693 if rc == SQLITE_OK { 43694 rc = echoNext(tls, pVtabCursor) 43695 } 43696 43697 return rc 43698 } 43699 43700 func string_concat(tls *libc.TLS, pzStr uintptr, zAppend uintptr, doFree int32, pRc uintptr) { 43701 bp := tls.Alloc(24) 43702 defer tls.Free(24) 43703 43704 var zIn uintptr = *(*uintptr)(unsafe.Pointer(pzStr)) 43705 if !(zAppend != 0) && doFree != 0 && *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 43706 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 43707 } 43708 if *(*int32)(unsafe.Pointer(pRc)) != SQLITE_OK { 43709 sqlite3.Xsqlite3_free(tls, zIn) 43710 zIn = uintptr(0) 43711 } else { 43712 if zIn != 0 { 43713 var zTemp uintptr = zIn 43714 zIn = sqlite3.Xsqlite3_mprintf(tls, ts+27340, libc.VaList(bp, zIn, zAppend)) 43715 sqlite3.Xsqlite3_free(tls, zTemp) 43716 } else { 43717 zIn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zAppend)) 43718 } 43719 if !(zIn != 0) { 43720 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 43721 } 43722 } 43723 *(*uintptr)(unsafe.Pointer(pzStr)) = zIn 43724 if doFree != 0 { 43725 sqlite3.Xsqlite3_free(tls, zAppend) 43726 } 43727 } 43728 43729 func echoSelectList(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) uintptr { 43730 bp := tls.Alloc(24) 43731 defer tls.Free(24) 43732 43733 var zRet uintptr = uintptr(0) 43734 if sqlite3.Xsqlite3_libversion_number(tls) < 3010000 { 43735 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27449, 0) 43736 } else { 43737 var i int32 43738 for i = 0; i < (*echo_vtab)(unsafe.Pointer(pTab)).FnCol; i++ { 43739 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed&(uint64(1)<<func() int32 { 43740 if i >= 63 { 43741 return 63 43742 } 43743 return i 43744 }()) != 0 { 43745 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27453, libc.VaList(bp, zRet, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pTab)).FaCol + uintptr(i)*8)))) 43746 } else { 43747 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27460, libc.VaList(bp+16, zRet)) 43748 } 43749 if !(zRet != 0) { 43750 break 43751 } 43752 } 43753 } 43754 return zRet 43755 } 43756 43757 func echoBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 43758 bp := tls.Alloc(100) 43759 defer tls.Free(100) 43760 43761 var ii int32 43762 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 43763 var zCol uintptr = uintptr(0) 43764 var zNew uintptr 43765 var nArg int32 = 0 43766 var zSep uintptr = ts + 9392 43767 var pVtab uintptr = tab 43768 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 43769 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 43770 43771 var nRow int32 = 0 43772 var useIdx int32 = 0 43773 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 43774 var useCost int32 = 0 43775 var cost float64 = float64(0) 43776 var isIgnoreUsable int32 = 0 43777 if tcl.XTcl_GetVar2(tls, interp, ts+27469, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 43778 isIgnoreUsable = 1 43779 } 43780 43781 if simulateVtabError(tls, pVtab, ts+27495) != 0 { 43782 return SQLITE_ERROR 43783 } 43784 43785 if tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY) != 0 { 43786 cost = libc.Xatof(tls, tcl.XTcl_GetVar2(tls, interp, ts+27506, uintptr(0), TCL_GLOBAL_ONLY)) 43787 useCost = 1 43788 } else { 43789 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27523, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43790 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43791 return SQLITE_NOMEM 43792 } 43793 *(*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)) 43794 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 43795 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 43796 return *(*int32)(unsafe.Pointer(bp + 96)) 43797 } 43798 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 43799 nRow = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 43800 *(*int32)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 43801 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 43802 return *(*int32)(unsafe.Pointer(bp + 96)) 43803 } 43804 } 43805 43806 zCol = echoSelectList(tls, pVtab, pIdxInfo) 43807 if !(zCol != 0) { 43808 return SQLITE_NOMEM 43809 } 43810 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27547, libc.VaList(bp+8, zCol, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43811 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43812 return SQLITE_NOMEM 43813 } 43814 43815 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 43816 var pConstraint uintptr 43817 var pUsage uintptr 43818 var iCol int32 43819 43820 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 43821 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 43822 43823 if !(isIgnoreUsable != 0) && !(int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) != 0) { 43824 continue 43825 } 43826 43827 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn 43828 if iCol < 0 || *(*int32)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaIndex + uintptr(iCol)*4)) != 0 { 43829 var zNewCol uintptr 43830 if iCol >= 0 { 43831 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 43832 } else { 43833 zNewCol = ts + 6427 43834 } 43835 var zOp uintptr = uintptr(0) 43836 useIdx = 1 43837 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) { 43838 case SQLITE_INDEX_CONSTRAINT_EQ: 43839 zOp = ts + 27570 43840 break 43841 fallthrough 43842 case SQLITE_INDEX_CONSTRAINT_LT: 43843 zOp = ts + 27572 43844 break 43845 fallthrough 43846 case SQLITE_INDEX_CONSTRAINT_GT: 43847 zOp = ts + 27574 43848 break 43849 fallthrough 43850 case SQLITE_INDEX_CONSTRAINT_LE: 43851 zOp = ts + 27576 43852 break 43853 fallthrough 43854 case SQLITE_INDEX_CONSTRAINT_GE: 43855 zOp = ts + 27579 43856 break 43857 fallthrough 43858 case SQLITE_INDEX_CONSTRAINT_MATCH: 43859 zOp = ts + 27582 43860 break 43861 fallthrough 43862 case SQLITE_INDEX_CONSTRAINT_LIKE: 43863 zOp = ts + 27587 43864 break 43865 fallthrough 43866 case SQLITE_INDEX_CONSTRAINT_GLOB: 43867 zOp = ts + 27592 43868 break 43869 fallthrough 43870 case SQLITE_INDEX_CONSTRAINT_REGEXP: 43871 zOp = ts + 6831 43872 break 43873 } 43874 if zOp != 0 { 43875 if int32(*(*uint8)(unsafe.Pointer(zOp))) == 'L' { 43876 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27597, 43877 libc.VaList(bp+24, zSep, zNewCol)) 43878 } else { 43879 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27632, libc.VaList(bp+40, zSep, zNewCol, zOp)) 43880 } 43881 string_concat(tls, bp+88, zNew, 1, bp+96) 43882 zSep = ts + 9419 43883 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&nArg, 1) 43884 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 43885 } 43886 } 43887 } 43888 43889 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) { 43890 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn 43891 var zNewCol uintptr 43892 if iCol >= 0 { 43893 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 43894 } else { 43895 zNewCol = ts + 6427 43896 } 43897 var zDir uintptr 43898 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 43899 zDir = ts + 27644 43900 } else { 43901 zDir = ts + 27649 43902 } 43903 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27653, libc.VaList(bp+64, zNewCol, zDir)) 43904 string_concat(tls, bp+88, zNew, 1, bp+96) 43905 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 43906 } 43907 43908 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27495) 43909 43910 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(bp + 88))) 43911 43912 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 43913 return *(*int32)(unsafe.Pointer(bp + 96)) 43914 } 43915 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = hashString(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 43916 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = *(*uintptr)(unsafe.Pointer(bp + 88)) 43917 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 43918 if useCost != 0 { 43919 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = cost 43920 } else if useIdx != 0 { 43921 for ii = 0; uint64(ii) < uint64(unsafe.Sizeof(int32(0)))*uint64(8)-uint64(1); ii++ { 43922 if nRow&(int32(1)<<ii) != 0 { 43923 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(ii) 43924 } 43925 } 43926 } else { 43927 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(nRow) 43928 } 43929 return *(*int32)(unsafe.Pointer(bp + 96)) 43930 } 43931 43932 func echoUpdate(tls *libc.TLS, tab uintptr, nData int32, apData uintptr, pRowid uintptr) int32 { 43933 bp := tls.Alloc(136) 43934 defer tls.Free(136) 43935 43936 var pVtab uintptr = tab 43937 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 43938 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 43939 43940 *(*uintptr)(unsafe.Pointer(bp + 128)) = uintptr(0) 43941 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 43942 var bindArgZero int32 = 0 43943 var bindArgOne int32 = 0 43944 var i int32 43945 43946 if simulateVtabError(tls, pVtab, ts+27669) != 0 { 43947 return SQLITE_ERROR 43948 } 43949 43950 if nData > 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 43951 var zSep uintptr = ts + 27677 43952 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27682, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43953 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 43954 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43955 } 43956 43957 bindArgOne = libc.Bool32(*(*uintptr)(unsafe.Pointer(apData + 1*8)) != 0 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER) 43958 bindArgZero = 1 43959 43960 if bindArgOne != 0 { 43961 string_concat(tls, bp+96, ts+27692, 0, bp+104) 43962 zSep = ts + 4758 43963 } 43964 for i = 2; i < nData; i++ { 43965 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) == uintptr(0) { 43966 continue 43967 } 43968 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, 43969 ts+27707, libc.VaList(bp+8, zSep, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(i-2)*8)), i)), 1, bp+104) 43970 zSep = ts + 4758 43971 } 43972 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, ts+27717, libc.VaList(bp+32, nData)), 1, bp+104) 43973 } else if nData == 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 43974 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27734, libc.VaList(bp+40, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43975 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 43976 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43977 } 43978 bindArgZero = 1 43979 } else if nData > 2 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_NULL { 43980 var ii int32 43981 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 43982 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 43983 43984 *(*uintptr)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_mprintf(tls, ts+27766, libc.VaList(bp+48, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 43985 if !(*(*uintptr)(unsafe.Pointer(bp + 112)) != 0) { 43986 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 43987 } 43988 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER { 43989 bindArgOne = 1 43990 *(*uintptr)(unsafe.Pointer(bp + 120)) = sqlite3.Xsqlite3_mprintf(tls, ts+3405, 0) 43991 string_concat(tls, bp+112, ts+6427, 0, bp+104) 43992 } 43993 43994 for ii = 2; ii < nData; ii++ { 43995 string_concat(tls, bp+112, 43996 sqlite3.Xsqlite3_mprintf(tls, ts+27783, libc.VaList(bp+56, func() uintptr { 43997 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 43998 return ts + 97 43999 } 44000 return ts + 584 44001 }(), *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(ii-2)*8)))), 1, bp+104) 44002 string_concat(tls, bp+120, 44003 sqlite3.Xsqlite3_mprintf(tls, ts+27788, libc.VaList(bp+72, func() uintptr { 44004 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 44005 return ts + 97 44006 } 44007 return ts + 584 44008 }(), ii)), 1, bp+104) 44009 } 44010 44011 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 112)), 1, bp+104) 44012 string_concat(tls, bp+96, ts+27794, 0, bp+104) 44013 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 120)), 1, bp+104) 44014 string_concat(tls, bp+96, ts+585, 0, bp+104) 44015 } else { 44016 return SQLITE_ERROR 44017 } 44018 44019 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 44020 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_prepare(tls, db, *(*uintptr)(unsafe.Pointer(bp + 96)), -1, bp+128, uintptr(0)) 44021 } 44022 44023 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 96))) 44024 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 44025 if bindArgZero != 0 { 44026 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), nData, *(*uintptr)(unsafe.Pointer(apData))) 44027 } 44028 if bindArgOne != 0 { 44029 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), 1, *(*uintptr)(unsafe.Pointer(apData + 1*8))) 44030 } 44031 for i = 2; i < nData && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK; i++ { 44032 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) != 0 { 44033 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), i, *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8))) 44034 } 44035 } 44036 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 44037 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 44038 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 44039 } else { 44040 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 44041 } 44042 } 44043 44044 if pRowid != 0 && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 44045 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 44046 } 44047 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 44048 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27183, libc.VaList(bp+88, sqlite3.Xsqlite3_errmsg(tls, db))) 44049 } 44050 44051 return *(*int32)(unsafe.Pointer(bp + 104)) 44052 } 44053 44054 func echoTransactionCall(tls *libc.TLS, tab uintptr, zCall uintptr) int32 { 44055 bp := tls.Alloc(8) 44056 defer tls.Free(8) 44057 44058 var z uintptr 44059 var pVtab uintptr = tab 44060 z = sqlite3.Xsqlite3_mprintf(tls, ts+27804, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 44061 if z == uintptr(0) { 44062 return SQLITE_NOMEM 44063 } 44064 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, zCall) 44065 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, z) 44066 sqlite3.Xsqlite3_free(tls, z) 44067 return SQLITE_OK 44068 } 44069 44070 func echoBegin(tls *libc.TLS, tab uintptr) int32 { 44071 var rc int32 44072 var pVtab uintptr = tab 44073 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 44074 var zVal uintptr 44075 44076 if simulateVtabError(tls, pVtab, ts+27813) != 0 { 44077 return SQLITE_ERROR 44078 } 44079 44080 rc = echoTransactionCall(tls, tab, ts+27813) 44081 44082 if rc == SQLITE_OK { 44083 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27820, uintptr(0), TCL_GLOBAL_ONLY) 44084 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 44085 rc = SQLITE_ERROR 44086 } 44087 } 44088 if rc == SQLITE_OK { 44089 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 1 44090 } 44091 return rc 44092 } 44093 44094 func echoSync(tls *libc.TLS, tab uintptr) int32 { 44095 var rc int32 44096 var pVtab uintptr = tab 44097 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 44098 var zVal uintptr 44099 44100 if simulateVtabError(tls, pVtab, ts+27843) != 0 { 44101 return SQLITE_ERROR 44102 } 44103 44104 rc = echoTransactionCall(tls, tab, ts+27843) 44105 44106 if rc == SQLITE_OK { 44107 zVal = tcl.XTcl_GetVar2(tls, interp, ts+27849, uintptr(0), TCL_GLOBAL_ONLY) 44108 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 44109 rc = -1 44110 } 44111 } 44112 return rc 44113 } 44114 44115 func echoCommit(tls *libc.TLS, tab uintptr) int32 { 44116 var pVtab uintptr = tab 44117 var rc int32 44118 44119 if simulateVtabError(tls, pVtab, ts+27871) != 0 { 44120 return SQLITE_ERROR 44121 } 44122 44123 sqlite3.Xsqlite3BeginBenignMalloc(tls) 44124 rc = echoTransactionCall(tls, tab, ts+27871) 44125 sqlite3.Xsqlite3EndBenignMalloc(tls) 44126 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 44127 return rc 44128 } 44129 44130 func echoRollback(tls *libc.TLS, tab uintptr) int32 { 44131 var rc int32 44132 var pVtab uintptr = tab 44133 44134 rc = echoTransactionCall(tls, tab, ts+27879) 44135 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 44136 return rc 44137 } 44138 44139 func overloadedGlobFunction(tls *libc.TLS, pContext uintptr, nArg int32, apArg uintptr) { 44140 bp := tls.Alloc(216) 44141 defer tls.Free(216) 44142 44143 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pContext) 44144 44145 var i int32 44146 var rc int32 44147 tcl.XTcl_DStringInit(tls, bp) 44148 tcl.XTcl_DStringAppendElement(tls, bp, ts+27889) 44149 for i = 0; i < nArg; i++ { 44150 tcl.XTcl_DStringAppendElement(tls, bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)))) 44151 } 44152 rc = tcl.XTcl_Eval(tls, interp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 44153 tcl.XTcl_DStringFree(tls, bp) 44154 if rc != 0 { 44155 sqlite3.Xsqlite3_result_error(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), -1) 44156 } else { 44157 sqlite3.Xsqlite3_result_text(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), 44158 -1, libc.UintptrFromInt32(-1)) 44159 } 44160 tcl.XTcl_ResetResult(tls, interp) 44161 } 44162 44163 func echoFindFunction(tls *libc.TLS, vtab uintptr, nArg int32, zFuncName uintptr, pxFunc uintptr, ppArg uintptr) int32 { 44164 bp := tls.Alloc(64) 44165 defer tls.Free(64) 44166 44167 var pVtab uintptr = vtab 44168 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 44169 44170 if libc.Xstrcmp(tls, zFuncName, ts+27592) != 0 { 44171 return 0 44172 } 44173 if tcl.XTcl_GetCommandInfo(tls, interp, ts+27889, bp) == 0 { 44174 return 0 44175 } 44176 *(*uintptr)(unsafe.Pointer(pxFunc)) = *(*uintptr)(unsafe.Pointer(&struct { 44177 f func(*libc.TLS, uintptr, int32, uintptr) 44178 }{overloadedGlobFunction})) 44179 *(*uintptr)(unsafe.Pointer(ppArg)) = interp 44180 return 1 44181 } 44182 44183 func echoRename(tls *libc.TLS, vtab uintptr, zNewName uintptr) int32 { 44184 bp := tls.Alloc(24) 44185 defer tls.Free(24) 44186 44187 var rc int32 = SQLITE_OK 44188 var p uintptr = vtab 44189 44190 if simulateVtabError(tls, p, ts+27910) != 0 { 44191 return SQLITE_ERROR 44192 } 44193 44194 if (*echo_vtab)(unsafe.Pointer(p)).FisPattern != 0 { 44195 var nThis int32 = int32(libc.Xstrlen(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis)) 44196 var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27918, 44197 libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzTableName, zNewName, (*echo_vtab)(unsafe.Pointer(p)).FzTableName+uintptr(nThis))) 44198 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 44199 sqlite3.Xsqlite3_free(tls, zSql) 44200 } 44201 44202 return rc 44203 } 44204 44205 func echoSavepoint(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 44206 return SQLITE_OK 44207 } 44208 44209 func echoRelease(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 44210 return SQLITE_OK 44211 } 44212 44213 func echoRollbackTo(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 44214 return SQLITE_OK 44215 } 44216 44217 var echoModule = sqlite3_module{ 44218 FiVersion: 1, 44219 FxCreate: 0, 44220 FxConnect: 0, 44221 FxBestIndex: 0, 44222 FxDisconnect: 0, 44223 FxDestroy: 0, 44224 FxOpen: 0, 44225 FxClose: 0, 44226 FxFilter: 0, 44227 FxNext: 0, 44228 FxEof: 0, 44229 FxColumn: 0, 44230 FxRowid: 0, 44231 FxUpdate: 0, 44232 FxBegin: 0, 44233 FxSync: 0, 44234 FxCommit: 0, 44235 FxRollback: 0, 44236 FxFindFunction: 0, 44237 FxRename: 0, 44238 } 44239 44240 var echoModuleV2 = sqlite3_module{ 44241 FiVersion: 2, 44242 FxCreate: 0, 44243 FxConnect: 0, 44244 FxBestIndex: 0, 44245 FxDisconnect: 0, 44246 FxDestroy: 0, 44247 FxOpen: 0, 44248 FxClose: 0, 44249 FxFilter: 0, 44250 FxNext: 0, 44251 FxEof: 0, 44252 FxColumn: 0, 44253 FxRowid: 0, 44254 FxUpdate: 0, 44255 FxBegin: 0, 44256 FxSync: 0, 44257 FxCommit: 0, 44258 FxRollback: 0, 44259 FxFindFunction: 0, 44260 FxRename: 0, 44261 FxSavepoint: 0, 44262 FxRelease: 0, 44263 FxRollbackTo: 0, 44264 } 44265 44266 func moduleDestroy(tls *libc.TLS, p uintptr) { 44267 var pMod uintptr = p 44268 sqlite3.Xsqlite3_create_function(tls, (*EchoModule)(unsafe.Pointer(pMod)).Fdb, ts+27948, 44269 SQLITE_ANY, 1, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 44270 sqlite3.Xsqlite3_free(tls, p) 44271 } 44272 44273 func register_echo_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44274 bp := tls.Alloc(8) 44275 defer tls.Free(8) 44276 44277 var rc int32 44278 44279 var pMod uintptr 44280 if objc != 2 { 44281 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 44282 return TCL_ERROR 44283 } 44284 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 44285 return TCL_ERROR 44286 } 44287 44288 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 44289 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 44290 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 44291 rc = sqlite3.Xsqlite3_create_module_v2(tls, 44292 *(*uintptr)(unsafe.Pointer(bp)), ts+27986, uintptr(unsafe.Pointer(&echoModule)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 44293 44294 if rc == SQLITE_OK { 44295 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 44296 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 44297 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 44298 rc = sqlite3.Xsqlite3_create_module_v2(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+27991, 44299 uintptr(unsafe.Pointer(&echoModuleV2)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 44300 } 44301 44302 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44303 return TCL_OK 44304 } 44305 44306 func declare_vtab(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44307 bp := tls.Alloc(8) 44308 defer tls.Free(8) 44309 44310 var rc int32 44311 if objc != 3 { 44312 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 44313 return TCL_ERROR 44314 } 44315 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 44316 return TCL_ERROR 44317 } 44318 rc = sqlite3.Xsqlite3_declare_vtab(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 44319 if rc != SQLITE_OK { 44320 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 44321 return TCL_ERROR 44322 } 44323 return TCL_OK 44324 } 44325 44326 func Sqlitetest8_Init(tls *libc.TLS, interp uintptr) int32 { 44327 var i int32 44328 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd2))/uint64(unsafe.Sizeof(struct { 44329 FzName uintptr 44330 FxProc uintptr 44331 FclientData uintptr 44332 }{})); i++ { 44333 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd2[i].FzName, 44334 aObjCmd2[i].FxProc, aObjCmd2[i].FclientData, uintptr(0)) 44335 } 44336 return TCL_OK 44337 } 44338 44339 var aObjCmd2 = [2]struct { 44340 FzName uintptr 44341 FxProc uintptr 44342 FclientData uintptr 44343 }{ 44344 {FzName: ts + 27999, FxProc: 0}, 44345 {FzName: ts + 28020, FxProc: 0}, 44346 } 44347 44348 func c_collation_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44349 bp := tls.Alloc(32) 44350 defer tls.Free(32) 44351 44352 var zErrFunction uintptr 44353 44354 var rc int32 44355 zErrFunction = ts + 28041 44356 if !(objc != 1) { 44357 goto __1 44358 } 44359 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44360 return TCL_ERROR 44361 __1: 44362 ; 44363 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 44364 if !(rc != SQLITE_OK) { 44365 goto __2 44366 } 44367 zErrFunction = ts + 21460 44368 goto error_out 44369 __2: 44370 ; 44371 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), ts+13402, 456, uintptr(0), uintptr(0)) 44372 if !(rc != SQLITE_MISUSE) { 44373 goto __3 44374 } 44375 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 44376 zErrFunction = ts + 28045 44377 goto error_out 44378 __3: 44379 ; 44380 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 44381 return TCL_OK 44382 44383 error_out: 44384 tcl.XTcl_ResetResult(tls, interp) 44385 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 44386 return TCL_ERROR 44387 } 44388 44389 func c_realloc_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44390 bp := tls.Alloc(24) 44391 defer tls.Free(24) 44392 44393 var p uintptr 44394 var zErrFunction uintptr 44395 zErrFunction = ts + 28041 44396 44397 if !(objc != 1) { 44398 goto __1 44399 } 44400 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44401 return TCL_ERROR 44402 __1: 44403 ; 44404 p = sqlite3.Xsqlite3_malloc(tls, 5) 44405 if !!(p != 0) { 44406 goto __2 44407 } 44408 zErrFunction = ts + 28095 44409 goto error_out 44410 __2: 44411 ; 44412 p = sqlite3.Xsqlite3_realloc(tls, p, -1) 44413 if !(p != 0) { 44414 goto __3 44415 } 44416 zErrFunction = ts + 28110 44417 goto error_out 44418 __3: 44419 ; 44420 return TCL_OK 44421 44422 error_out: 44423 tcl.XTcl_ResetResult(tls, interp) 44424 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 44425 return TCL_ERROR 44426 } 44427 44428 func c_misuse_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44429 bp := tls.Alloc(40) 44430 defer tls.Free(40) 44431 44432 var zErrFunction uintptr 44433 44434 var rc int32 44435 zErrFunction = ts + 28041 44436 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 44437 44438 if !(objc != 1) { 44439 goto __1 44440 } 44441 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44442 return TCL_ERROR 44443 __1: 44444 ; 44445 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 44446 if !(rc != SQLITE_OK) { 44447 goto __2 44448 } 44449 zErrFunction = ts + 21460 44450 goto error_out 44451 __2: 44452 ; 44453 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 44454 44455 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 44456 if !(rc != SQLITE_MISUSE) { 44457 goto __3 44458 } 44459 zErrFunction = ts + 21366 44460 goto error_out 44461 __3: 44462 ; 44463 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 44464 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 44465 if !(rc != SQLITE_MISUSE) { 44466 goto __4 44467 } 44468 zErrFunction = ts + 21541 44469 goto error_out 44470 __4: 44471 ; 44472 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 44473 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 44474 if !(rc != SQLITE_MISUSE) { 44475 goto __5 44476 } 44477 zErrFunction = ts + 21575 44478 goto error_out 44479 __5: 44480 ; 44481 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 44482 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 44483 if !(rc != SQLITE_MISUSE) { 44484 goto __6 44485 } 44486 zErrFunction = ts + 21557 44487 goto error_out 44488 __6: 44489 ; 44490 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 44491 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 44492 if !(rc != SQLITE_MISUSE) { 44493 goto __7 44494 } 44495 zErrFunction = ts + 21637 44496 goto error_out 44497 __7: 44498 ; 44499 return TCL_OK 44500 44501 error_out: 44502 tcl.XTcl_ResetResult(tls, interp) 44503 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28070, zErrFunction, 0)) 44504 return TCL_ERROR 44505 } 44506 44507 func Sqlitetest9_Init(tls *libc.TLS, interp uintptr) int32 { 44508 var i int32 44509 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd3))/uint64(unsafe.Sizeof(struct { 44510 FzName uintptr 44511 FxProc uintptr 44512 FclientData uintptr 44513 }{})); i++ { 44514 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd3[i].FzName, 44515 aObjCmd3[i].FxProc, aObjCmd3[i].FclientData, uintptr(0)) 44516 } 44517 return TCL_OK 44518 } 44519 44520 var aObjCmd3 = [3]struct { 44521 FzName uintptr 44522 FxProc uintptr 44523 FclientData uintptr 44524 }{ 44525 {FzName: ts + 28126, FxProc: 0}, 44526 {FzName: ts + 28140, FxProc: 0}, 44527 {FzName: ts + 28155, FxProc: 0}, 44528 } 44529 44530 func Sqlitetestasync_Init(tls *libc.TLS, interp uintptr) int32 { 44531 return TCL_OK 44532 } 44533 44534 func resetAutoExtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44535 sqlite3.Xsqlite3_reset_auto_extension(tls) 44536 return SQLITE_OK 44537 } 44538 44539 func Sqlitetest_autoext_Init(tls *libc.TLS, interp uintptr) int32 { 44540 tcl.XTcl_CreateObjCommand(tls, interp, ts+28172, 44541 *(*uintptr)(unsafe.Pointer(&struct { 44542 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44543 }{resetAutoExtObjCmd})), uintptr(0), uintptr(0)) 44544 return TCL_OK 44545 } 44546 44547 func backupTestCmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44548 bp := tls.Alloc(196) 44549 defer tls.Free(196) 44550 44551 *(*[5]BackupSubCommand)(unsafe.Pointer(bp)) = [5]BackupSubCommand{ 44552 {FzCmd: ts + 9485, FnArg: 1, FzArg: ts + 28201}, 44553 {FzCmd: ts + 28207, FeCmd: uint32(1), FzArg: ts + 584}, 44554 {FzCmd: ts + 28214, FeCmd: uint32(2), FzArg: ts + 584}, 44555 {FzCmd: ts + 28224, FeCmd: uint32(3), FzArg: ts + 584}, 44556 {}, 44557 } 44558 44559 var p uintptr = clientData 44560 44561 var rc int32 44562 44563 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 44564 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(BackupSubCommand{})), ts+11691, 0, bp+120) 44565 if rc != TCL_OK { 44566 return rc 44567 } 44568 if objc != 2+(*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FnArg { 44569 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FzArg) 44570 return TCL_ERROR 44571 } 44572 44573 switch (*BackupSubCommand)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FeCmd { 44574 case uint32(1): 44575 { 44576 var zCmdName uintptr 44577 44578 zCmdName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))) 44579 tcl.XTcl_GetCommandInfo(tls, interp, zCmdName, bp+128) 44580 (*Tcl_CmdInfo)(unsafe.Pointer(bp + 128)).FdeleteProc = uintptr(0) 44581 tcl.XTcl_SetCommandInfo(tls, interp, zCmdName, bp+128) 44582 tcl.XTcl_DeleteCommand(tls, interp, zCmdName) 44583 44584 rc = sqlite3.Xsqlite3_backup_finish(tls, p) 44585 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44586 break 44587 44588 } 44589 44590 case uint32(0): 44591 { 44592 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+192) { 44593 return TCL_ERROR 44594 } 44595 rc = sqlite3.Xsqlite3_backup_step(tls, p, *(*int32)(unsafe.Pointer(bp + 192))) 44596 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 44597 break 44598 44599 } 44600 44601 case uint32(2): 44602 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_remaining(tls, p))) 44603 break 44604 44605 case uint32(3): 44606 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_pagecount(tls, p))) 44607 break 44608 } 44609 44610 return TCL_OK 44611 } 44612 44613 type BackupSubCommand = struct { 44614 FzCmd uintptr 44615 FeCmd uint32 44616 FnArg int32 44617 FzArg uintptr 44618 } 44619 44620 func backupTestFinish(tls *libc.TLS, clientData ClientData) { 44621 var pBackup uintptr = clientData 44622 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 44623 } 44624 44625 func backupTestInit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 44626 bp := tls.Alloc(32) 44627 defer tls.Free(32) 44628 44629 var pBackup uintptr 44630 44631 var zDestName uintptr 44632 var zSrcName uintptr 44633 var zCmd uintptr 44634 44635 if objc != 6 { 44636 tcl.XTcl_WrongNumArgs(tls, 44637 interp, 1, objv, ts+28234) 44638 return TCL_ERROR 44639 } 44640 44641 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 44642 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+16) 44643 zDestName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 44644 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))), bp+24) 44645 zSrcName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 44646 44647 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDestName, *(*uintptr)(unsafe.Pointer(bp + 24)), zSrcName) 44648 if !(pBackup != 0) { 44649 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28280, 0)) 44650 return TCL_ERROR 44651 } 44652 44653 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 44654 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44655 }{backupTestCmd})), pBackup, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{backupTestFinish}))) 44656 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 44657 return TCL_OK 44658 } 44659 44660 func Sqlitetestbackup_Init(tls *libc.TLS, interp uintptr) int32 { 44661 tcl.XTcl_CreateObjCommand(tls, interp, ts+28309, *(*uintptr)(unsafe.Pointer(&struct { 44662 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 44663 }{backupTestInit})), uintptr(0), uintptr(0)) 44664 return TCL_OK 44665 } 44666 44667 type tcl_vtab1 = struct { 44668 Fbase sqlite3_vtab 44669 Finterp uintptr 44670 FpCmd uintptr 44671 Fdb uintptr 44672 } 44673 44674 type tcl_vtab = tcl_vtab1 44675 type tcl_cursor1 = struct { 44676 Fbase sqlite3_vtab_cursor 44677 FpStmt uintptr 44678 } 44679 44680 type tcl_cursor = tcl_cursor1 44681 44682 func tclDequote(tls *libc.TLS, z uintptr) { 44683 var q uint8 = *(*uint8)(unsafe.Pointer(z)) 44684 44685 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 44686 var iIn int32 = 1 44687 var iOut int32 = 0 44688 if int32(q) == '[' { 44689 q = uint8(']') 44690 } 44691 44692 for *(*uint8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 44693 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 44694 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 44695 iIn++ 44696 break 44697 } else { 44698 iIn = iIn + 2 44699 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 44700 } 44701 } else { 44702 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 44703 } 44704 } 44705 44706 *(*uint8)(unsafe.Pointer(z + uintptr(iOut))) = uint8(0) 44707 } 44708 } 44709 44710 func tclConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 44711 bp := tls.Alloc(8) 44712 defer tls.Free(8) 44713 44714 var interp uintptr = pAux 44715 var pTab uintptr = uintptr(0) 44716 var zCmd uintptr = uintptr(0) 44717 var pScript uintptr = uintptr(0) 44718 var rc int32 = SQLITE_OK 44719 44720 if argc != 4 { 44721 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 44722 return SQLITE_ERROR 44723 } 44724 44725 zCmd = sqlite3.Xsqlite3_malloc64(tls, libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 44726 pTab = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(tcl_vtab{}))) 44727 if zCmd != 0 && pTab != 0 { 44728 libc.Xmemcpy(tls, zCmd, *(*uintptr)(unsafe.Pointer(argv + 3*8)), libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 44729 tclDequote(tls, zCmd) 44730 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(tcl_vtab{}))) 44731 44732 (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd = tcl.XTcl_NewStringObj(tls, zCmd, -1) 44733 (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp = interp 44734 (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb = db 44735 (*Tcl_Obj)(unsafe.Pointer((*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd)).FrefCount++ 44736 44737 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44738 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44739 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27377, -1)) 44740 44741 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44742 if rc != TCL_OK { 44743 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetStringResult(tls, interp))) 44744 rc = SQLITE_ERROR 44745 } else { 44746 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, tcl.XTcl_GetStringResult(tls, interp)) 44747 } 44748 44749 if rc != SQLITE_OK { 44750 sqlite3.Xsqlite3_free(tls, pTab) 44751 pTab = uintptr(0) 44752 } 44753 } else { 44754 rc = SQLITE_NOMEM 44755 } 44756 44757 sqlite3.Xsqlite3_free(tls, zCmd) 44758 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 44759 return rc 44760 } 44761 44762 func tclDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 44763 var pTab uintptr = pVtab 44764 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44765 var _objPtr uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd 44766 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44767 tcl.XTclFreeObj(tls, _objPtr) 44768 } 44769 } 44770 sqlite3.Xsqlite3_free(tls, pTab) 44771 return SQLITE_OK 44772 } 44773 44774 func tclOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 44775 var pCur uintptr 44776 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(tcl_cursor{}))) 44777 if pCur == uintptr(0) { 44778 return SQLITE_NOMEM 44779 } 44780 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(tcl_cursor{}))) 44781 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 44782 return SQLITE_OK 44783 } 44784 44785 func tclClose(tls *libc.TLS, cur uintptr) int32 { 44786 var pCur uintptr = cur 44787 if pCur != 0 { 44788 sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCur)).FpStmt) 44789 sqlite3.Xsqlite3_free(tls, pCur) 44790 } 44791 return SQLITE_OK 44792 } 44793 44794 func tclNext(tls *libc.TLS, pVtabCursor uintptr) int32 { 44795 bp := tls.Alloc(8) 44796 defer tls.Free(8) 44797 44798 var pCsr uintptr = pVtabCursor 44799 if (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt != 0 { 44800 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 44801 var rc int32 = sqlite3.Xsqlite3_step(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 44802 if rc != SQLITE_ROW { 44803 var zErr uintptr 44804 rc = sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 44805 (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 44806 if rc != SQLITE_OK { 44807 zErr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 44808 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 44809 } 44810 } 44811 } 44812 return SQLITE_OK 44813 } 44814 44815 func tclFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 44816 bp := tls.Alloc(56) 44817 defer tls.Free(56) 44818 44819 var pCsr uintptr = pVtabCursor 44820 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 44821 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 44822 var pScript uintptr 44823 var pArg uintptr 44824 var ii int32 44825 var rc int32 44826 44827 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 44828 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 44829 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27441, -1)) 44830 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewIntObj(tls, idxNum)) 44831 if idxStr != 0 { 44832 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, idxStr, -1)) 44833 } else { 44834 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 44835 } 44836 44837 pArg = tcl.XTcl_NewObj(tls) 44838 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 44839 for ii = 0; ii < argc; ii++ { 44840 var zVal uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8))) 44841 var pVal uintptr 44842 if zVal == uintptr(0) { 44843 pVal = tcl.XTcl_NewObj(tls) 44844 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) { 44845 var pVal2 uintptr = uintptr(0) 44846 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 44847 if zVal != 0 { 44848 pVal2 = tcl.XTcl_NewStringObj(tls, zVal, -1) 44849 } else { 44850 pVal2 = tcl.XTcl_NewObj(tls) 44851 } 44852 tcl.XTcl_ListObjAppendElement(tls, interp, pVal, pVal2) 44853 } 44854 } else { 44855 pVal = tcl.XTcl_NewStringObj(tls, zVal, -1) 44856 } 44857 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pVal) 44858 } 44859 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pArg) 44860 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44861 var _objPtr uintptr = pArg 44862 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44863 tcl.XTclFreeObj(tls, _objPtr) 44864 } 44865 } 44866 44867 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 44868 if rc != TCL_OK { 44869 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44870 rc = SQLITE_ERROR 44871 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 44872 } else { 44873 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 44874 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 44875 44876 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+40, bp+48) 44877 if rc != TCL_OK { 44878 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 44879 rc = SQLITE_ERROR 44880 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 44881 } else { 44882 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 40)); ii = ii + 2 { 44883 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii)*8))) 44884 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii+1)*8)) 44885 if sqlite3.Xsqlite3_stricmp(tls, ts+1947, zCmd) == 0 { 44886 var zSql uintptr = tcl.XTcl_GetString(tls, p) 44887 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 44888 if rc != SQLITE_OK { 44889 var zErr uintptr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 44890 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+16, zErr)) 44891 } 44892 } else { 44893 rc = SQLITE_ERROR 44894 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+24, zCmd)) 44895 } 44896 } 44897 } 44898 } 44899 44900 if rc == SQLITE_OK { 44901 rc = tclNext(tls, pVtabCursor) 44902 } 44903 return rc 44904 } 44905 44906 func tclColumn(tls *libc.TLS, pVtabCursor uintptr, ctx uintptr, i int32) int32 { 44907 var pCsr uintptr = pVtabCursor 44908 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 44909 return SQLITE_OK 44910 } 44911 44912 func tclRowid(tls *libc.TLS, pVtabCursor uintptr, pRowid uintptr) int32 { 44913 var pCsr uintptr = pVtabCursor 44914 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, 0) 44915 return SQLITE_OK 44916 } 44917 44918 func tclEof(tls *libc.TLS, pVtabCursor uintptr) int32 { 44919 var pCsr uintptr = pVtabCursor 44920 return libc.Bool32((*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 44921 } 44922 44923 func testBestIndexObjConstraints(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 44924 var ii int32 44925 var pRes uintptr = tcl.XTcl_NewObj(tls) 44926 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 44927 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 44928 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 44929 var pElem uintptr = tcl.XTcl_NewObj(tls) 44930 var zOp uintptr = ts + 3405 44931 44932 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 44933 44934 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) { 44935 case SQLITE_INDEX_CONSTRAINT_EQ: 44936 zOp = ts + 28365 44937 break 44938 case SQLITE_INDEX_CONSTRAINT_GT: 44939 zOp = ts + 28368 44940 break 44941 case SQLITE_INDEX_CONSTRAINT_LE: 44942 zOp = ts + 28371 44943 break 44944 case SQLITE_INDEX_CONSTRAINT_LT: 44945 zOp = ts + 28374 44946 break 44947 case SQLITE_INDEX_CONSTRAINT_GE: 44948 zOp = ts + 28377 44949 break 44950 case SQLITE_INDEX_CONSTRAINT_MATCH: 44951 zOp = ts + 28380 44952 break 44953 case SQLITE_INDEX_CONSTRAINT_LIKE: 44954 zOp = ts + 27587 44955 break 44956 case SQLITE_INDEX_CONSTRAINT_GLOB: 44957 zOp = ts + 27592 44958 break 44959 case SQLITE_INDEX_CONSTRAINT_REGEXP: 44960 zOp = ts + 6831 44961 break 44962 case SQLITE_INDEX_CONSTRAINT_NE: 44963 zOp = ts + 28386 44964 break 44965 case SQLITE_INDEX_CONSTRAINT_ISNOT: 44966 zOp = ts + 28389 44967 break 44968 case SQLITE_INDEX_CONSTRAINT_ISNOTNULL: 44969 zOp = ts + 28395 44970 break 44971 case SQLITE_INDEX_CONSTRAINT_ISNULL: 44972 zOp = ts + 28405 44973 break 44974 case SQLITE_INDEX_CONSTRAINT_IS: 44975 zOp = ts + 5851 44976 break 44977 case SQLITE_INDEX_CONSTRAINT_LIMIT: 44978 zOp = ts + 28412 44979 break 44980 case SQLITE_INDEX_CONSTRAINT_OFFSET: 44981 zOp = ts + 28418 44982 break 44983 } 44984 44985 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+6194, -1)) 44986 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, zOp, -1)) 44987 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 44988 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)) 44989 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28432, -1)) 44990 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable))) 44991 44992 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 44993 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44994 var _objPtr uintptr = pElem 44995 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 44996 tcl.XTclFreeObj(tls, _objPtr) 44997 } 44998 } 44999 } 45000 45001 tcl.XTcl_SetObjResult(tls, interp, pRes) 45002 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 45003 var _objPtr uintptr = pRes 45004 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 45005 tcl.XTclFreeObj(tls, _objPtr) 45006 } 45007 } 45008 } 45009 45010 func testBestIndexObjOrderby(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 45011 var ii int32 45012 var pRes uintptr = tcl.XTcl_NewObj(tls) 45013 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 45014 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; ii++ { 45015 var pOrder uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(ii)*8 45016 var pElem uintptr = tcl.XTcl_NewObj(tls) 45017 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 45018 45019 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28425, -1)) 45020 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).FiColumn)) 45021 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28439, -1)) 45022 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).Fdesc))) 45023 45024 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 45025 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 45026 var _objPtr uintptr = pElem 45027 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 45028 tcl.XTclFreeObj(tls, _objPtr) 45029 } 45030 } 45031 } 45032 45033 tcl.XTcl_SetObjResult(tls, interp, pRes) 45034 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 45035 var _objPtr uintptr = pRes 45036 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 45037 tcl.XTclFreeObj(tls, _objPtr) 45038 } 45039 } 45040 } 45041 45042 func testBestIndexObj(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45043 bp := tls.Alloc(80) 45044 defer tls.Free(80) 45045 45046 *(*[7]uintptr)(unsafe.Pointer(bp)) = [7]uintptr{ 45047 ts + 28444, 45048 ts + 28456, 45049 ts + 28464, 45050 ts + 28469, 45051 ts + 28478, 45052 ts + 28481, 45053 uintptr(0), 45054 } 45055 45056 var pIdxInfo uintptr = clientData 45057 45058 if objc < 2 { 45059 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 45060 return TCL_ERROR 45061 } 45062 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(uintptr(0))), ts+2014, 0, bp+56) != 0 { 45063 return TCL_ERROR 45064 } 45065 45066 if *(*int32)(unsafe.Pointer(bp + 56)) < 4 && objc != 2 { 45067 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 45068 return TCL_ERROR 45069 } 45070 if *(*int32)(unsafe.Pointer(bp + 56)) == 4 && objc != 4 { 45071 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28491) 45072 return TCL_ERROR 45073 } 45074 if *(*int32)(unsafe.Pointer(bp + 56)) == 5 && objc != 3 && objc != 4 { 45075 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28505) 45076 return TCL_ERROR 45077 } 45078 45079 switch *(*int32)(unsafe.Pointer(bp + 56)) { 45080 case 0: 45081 testBestIndexObjConstraints(tls, interp, pIdxInfo) 45082 break 45083 45084 case 1: 45085 testBestIndexObjOrderby(tls, interp, pIdxInfo) 45086 break 45087 45088 case 2: 45089 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 45090 break 45091 45092 case 3: 45093 { 45094 var bDistinct int32 = sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo) 45095 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bDistinct)) 45096 break 45097 45098 } 45099 45100 case 4: 45101 { 45102 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+60) != 0 || 45103 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 45104 return TCL_ERROR 45105 } 45106 tcl.XTcl_SetObjResult(tls, interp, 45107 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_vtab_in(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 60)), *(*int32)(unsafe.Pointer(bp + 64))))) 45108 break 45109 45110 } 45111 45112 case 5: 45113 { 45114 *(*int32)(unsafe.Pointer(bp + 68)) = 0 45115 var rc int32 45116 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 45117 var zVal uintptr = ts + 584 45118 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+68) != 0 { 45119 return TCL_ERROR 45120 } 45121 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 45122 if rc != SQLITE_OK && rc != SQLITE_NOTFOUND { 45123 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45124 return TCL_ERROR 45125 } 45126 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 45127 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 45128 } else if objc == 4 { 45129 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 45130 } 45131 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zVal, -1)) 45132 break 45133 45134 } 45135 } 45136 45137 return TCL_OK 45138 } 45139 45140 func tclBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45141 bp := tls.Alloc(108) 45142 defer tls.Free(108) 45143 45144 var pTab uintptr = tab 45145 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 45146 var rc int32 = SQLITE_OK 45147 45148 var pScript uintptr 45149 45150 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 45151 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 45152 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27495, -1)) 45153 45154 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([24]uint8{})), bp+56, ts+28521, libc.VaList(bp, libc.PostIncInt32(&iNext, 1))) 45155 tcl.XTcl_CreateObjCommand(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(&struct { 45156 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 45157 }{testBestIndexObj})), pIdxInfo, uintptr(0)) 45158 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+56, -1)) 45159 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 45160 tcl.XTcl_DeleteCommand(tls, interp, bp+56) 45161 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 45162 var _objPtr uintptr = pScript 45163 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 45164 tcl.XTclFreeObj(tls, _objPtr) 45165 } 45166 } 45167 45168 if rc != TCL_OK { 45169 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 45170 rc = SQLITE_ERROR 45171 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 45172 } else { 45173 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 45174 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 45175 45176 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) 45177 if rc != TCL_OK { 45178 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 45179 rc = SQLITE_ERROR 45180 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zErr)) 45181 } else { 45182 var ii int32 45183 var iArgv int32 = 1 45184 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 80)); ii = ii + 2 { 45185 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii)*8))) 45186 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii+1)*8)) 45187 if sqlite3.Xsqlite3_stricmp(tls, ts+28533, zCmd) == 0 { 45188 rc = tcl.XTcl_GetDoubleFromObj(tls, interp, p, pIdxInfo+64) 45189 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28456, zCmd) == 0 { 45190 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+60) 45191 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28538, zCmd) == 0 { 45192 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+40) 45193 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28545, zCmd) == 0 { 45194 sqlite3.Xsqlite3_free(tls, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr) 45195 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+24, tcl.XTcl_GetString(tls, p))) 45196 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 45197 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28552, zCmd) == 0 { 45198 *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) = int64(0) 45199 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, p, bp+96) 45200 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = sqlite3_int64(tRowcnt(*(*Tcl_WideInt)(unsafe.Pointer(bp + 96)))) 45201 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28557, zCmd) == 0 || 45202 sqlite3.Xsqlite3_stricmp(tls, ts+28561, zCmd) == 0 { 45203 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, bp+104) 45204 if rc == SQLITE_OK { 45205 if *(*int32)(unsafe.Pointer(bp + 104)) < 0 || *(*int32)(unsafe.Pointer(bp + 104)) >= (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint { 45206 rc = SQLITE_ERROR 45207 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28566, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 104)))) 45208 } else { 45209 var bOmit int32 = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(zCmd))) == 'o' || int32(*(*uint8)(unsafe.Pointer(zCmd))) == 'O') 45210 (*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) 45211 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).Fomit = uint8(bOmit) 45212 } 45213 } 45214 } else { 45215 rc = SQLITE_ERROR 45216 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28350, libc.VaList(bp+40, zCmd)) 45217 } 45218 if rc != SQLITE_OK && (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg == uintptr(0) { 45219 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 45220 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, zErr)) 45221 } 45222 } 45223 } 45224 } 45225 45226 return rc 45227 } 45228 45229 var iNext int32 = 43 45230 45231 var tclModule = sqlite3_module{ 45232 FxCreate: 0, 45233 FxConnect: 0, 45234 FxBestIndex: 0, 45235 FxDisconnect: 0, 45236 FxDestroy: 0, 45237 FxOpen: 0, 45238 FxClose: 0, 45239 FxFilter: 0, 45240 FxNext: 0, 45241 FxEof: 0, 45242 FxColumn: 0, 45243 FxRowid: 0, 45244 } 45245 45246 func register_tcl_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45247 bp := tls.Alloc(8) 45248 defer tls.Free(8) 45249 45250 if objc != 2 { 45251 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 45252 return TCL_ERROR 45253 } 45254 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 45255 return TCL_ERROR 45256 } 45257 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+28581, uintptr(unsafe.Pointer(&tclModule)), interp) 45258 return TCL_OK 45259 } 45260 45261 func Sqlitetesttcl_Init(tls *libc.TLS, interp uintptr) int32 { 45262 var i int32 45263 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd4))/uint64(unsafe.Sizeof(struct { 45264 FzName uintptr 45265 FxProc uintptr 45266 FclientData uintptr 45267 }{})); i++ { 45268 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd4[i].FzName, 45269 aObjCmd4[i].FxProc, aObjCmd4[i].FclientData, uintptr(0)) 45270 } 45271 return TCL_OK 45272 } 45273 45274 var aObjCmd4 = [1]struct { 45275 FzName uintptr 45276 FxProc uintptr 45277 FclientData uintptr 45278 }{ 45279 {FzName: ts + 28585, FxProc: 0}, 45280 } 45281 45282 func ptrToText(tls *libc.TLS, p uintptr) uintptr { 45283 bp := tls.Alloc(8) 45284 defer tls.Free(8) 45285 45286 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof(buf))-uint64(1)), uintptr(unsafe.Pointer(&buf)), ts+9889, libc.VaList(bp, p)) 45287 return uintptr(unsafe.Pointer(&buf)) 45288 } 45289 45290 var buf [100]uint8 45291 45292 func blobHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 45293 bp := tls.Alloc(8) 45294 defer tls.Free(8) 45295 45296 var z uintptr 45297 45298 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 45299 if *(*int32)(unsafe.Pointer(bp)) == 0 { 45300 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 45301 } else if *(*int32)(unsafe.Pointer(bp)) > 9 && 0 == libc.Xmemcmp(tls, ts+28605, z, uint64(9)) { 45302 var channel Tcl_Channel 45303 var instanceData ClientData 45304 45305 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 45306 if !(channel != 0) { 45307 return TCL_ERROR 45308 } 45309 45310 tcl.XTcl_Flush(tls, channel) 45311 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 45312 45313 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 45314 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 45315 } else { 45316 *(*uintptr)(unsafe.Pointer(ppBlob)) = sqlite3TestTextToPtr(tls, z) 45317 } 45318 45319 return TCL_OK 45320 } 45321 45322 func blobStringFromObj(tls *libc.TLS, pObj uintptr) uintptr { 45323 bp := tls.Alloc(4) 45324 defer tls.Free(4) 45325 45326 var z uintptr 45327 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 45328 return func() uintptr { 45329 if *(*int32)(unsafe.Pointer(bp)) != 0 { 45330 return z 45331 } 45332 return uintptr(0) 45333 }() 45334 } 45335 45336 func test_blob_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45337 bp := tls.Alloc(40) 45338 defer tls.Free(40) 45339 45340 var zDb uintptr 45341 var zTable uintptr 45342 var zColumn uintptr 45343 45344 var zVarname uintptr 45345 45346 *(*uintptr)(unsafe.Pointer(bp + 32)) = bp 45347 var rc int32 45348 45349 if objc != 8 { 45350 var zUsage uintptr = ts + 28615 45351 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zUsage) 45352 return TCL_ERROR 45353 } 45354 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 45355 return TCL_ERROR 45356 } 45357 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 45358 zTable = blobStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 45359 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 45360 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+16) != 0 { 45361 return TCL_ERROR 45362 } 45363 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp) != 0 { 45364 return TCL_ERROR 45365 } 45366 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 7*8)), bp+24) 45367 45368 if *(*int32)(unsafe.Pointer(bp + 24)) > 0 { 45369 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) 45370 tcl.XTcl_SetVar2(tls, interp, zVarname, uintptr(0), ptrToText(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0) 45371 } else { 45372 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)) 45373 } 45374 45375 if rc == SQLITE_OK { 45376 tcl.XTcl_ResetResult(tls, interp) 45377 } else { 45378 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45379 return TCL_ERROR 45380 } 45381 return TCL_OK 45382 } 45383 45384 func test_blob_close(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45385 bp := tls.Alloc(8) 45386 defer tls.Free(8) 45387 45388 var rc int32 45389 45390 if objc != 2 { 45391 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 45392 return TCL_ERROR 45393 } 45394 45395 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 45396 return TCL_ERROR 45397 } 45398 rc = sqlite3.Xsqlite3_blob_close(tls, *(*uintptr)(unsafe.Pointer(bp))) 45399 45400 if rc != 0 { 45401 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45402 } else { 45403 tcl.XTcl_ResetResult(tls, interp) 45404 } 45405 return TCL_OK 45406 } 45407 45408 func test_blob_bytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45409 bp := tls.Alloc(8) 45410 defer tls.Free(8) 45411 45412 var nByte int32 45413 45414 if objc != 2 { 45415 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 45416 return TCL_ERROR 45417 } 45418 45419 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 45420 return TCL_ERROR 45421 } 45422 nByte = sqlite3.Xsqlite3_blob_bytes(tls, *(*uintptr)(unsafe.Pointer(bp))) 45423 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nByte)) 45424 45425 return TCL_OK 45426 } 45427 45428 func test_blob_read(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45429 bp := tls.Alloc(32) 45430 defer tls.Free(32) 45431 45432 var zBuf uintptr = uintptr(0) 45433 var rc int32 45434 45435 if objc != 4 { 45436 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28667) 45437 return TCL_ERROR 45438 } 45439 45440 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 45441 return TCL_ERROR 45442 } 45443 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) || 45444 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) { 45445 return TCL_ERROR 45446 } 45447 45448 if *(*int32)(unsafe.Pointer(bp + 28)) > 0 { 45449 zBuf = tcl.XTcl_AttemptAlloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 45450 if zBuf == uintptr(0) { 45451 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28684, 0)) 45452 return TCL_ERROR 45453 } 45454 } 45455 rc = sqlite3.Xsqlite3_blob_read(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zBuf, *(*int32)(unsafe.Pointer(bp + 28)), *(*int32)(unsafe.Pointer(bp + 24))) 45456 if rc == SQLITE_OK { 45457 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zBuf, *(*int32)(unsafe.Pointer(bp + 28)))) 45458 } else { 45459 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45460 } 45461 tcl.XTcl_Free(tls, zBuf) 45462 45463 return func() int32 { 45464 if rc == SQLITE_OK { 45465 return TCL_OK 45466 } 45467 return TCL_ERROR 45468 }() 45469 } 45470 45471 func test_blob_write(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 45472 bp := tls.Alloc(16) 45473 defer tls.Free(16) 45474 45475 var rc int32 45476 var zBuf uintptr 45477 45478 if objc != 4 && objc != 5 { 45479 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28745) 45480 return TCL_ERROR 45481 } 45482 45483 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 45484 return TCL_ERROR 45485 } 45486 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) { 45487 return TCL_ERROR 45488 } 45489 45490 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) 45491 if objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+12) != 0 { 45492 return TCL_ERROR 45493 } 45494 rc = sqlite3.Xsqlite3_blob_write(tls, *(*uintptr)(unsafe.Pointer(bp)), zBuf, *(*int32)(unsafe.Pointer(bp + 12)), *(*int32)(unsafe.Pointer(bp + 8))) 45495 if rc != SQLITE_OK { 45496 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 45497 } 45498 45499 return func() int32 { 45500 if rc == SQLITE_OK { 45501 return TCL_OK 45502 } 45503 return TCL_ERROR 45504 }() 45505 } 45506 45507 func Sqlitetest_blob_Init(tls *libc.TLS, interp uintptr) int32 { 45508 var i int32 45509 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd5))/uint64(unsafe.Sizeof(struct { 45510 FzName uintptr 45511 FxProc uintptr 45512 }{})); i++ { 45513 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd5[i].FzName, aObjCmd5[i].FxProc, uintptr(0), uintptr(0)) 45514 } 45515 return TCL_OK 45516 } 45517 45518 var aObjCmd5 = [5]struct { 45519 FzName uintptr 45520 FxProc uintptr 45521 }{ 45522 {FzName: ts + 28772, FxProc: 0}, 45523 {FzName: ts + 28790, FxProc: 0}, 45524 {FzName: ts + 28809, FxProc: 0}, 45525 {FzName: ts + 28828, FxProc: 0}, 45526 {FzName: ts + 28846, FxProc: 0}, 45527 } 45528 45529 func sqlite3BtreeSharedCacheReport(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 45530 var pBt uintptr 45531 var pRet uintptr = tcl.XTcl_NewObj(tls) 45532 for pBt = sqlite3.Xsqlite3SharedCacheList; pBt != 0; pBt = (*BtShared)(unsafe.Pointer(pBt)).FpNext { 45533 var zFile uintptr = sqlite3.Xsqlite3PagerFilename(tls, (*BtShared)(unsafe.Pointer(pBt)).FpPager, 1) 45534 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, zFile, -1)) 45535 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, (*BtShared)(unsafe.Pointer(pBt)).FnRef)) 45536 } 45537 tcl.XTcl_SetObjResult(tls, interp, pRet) 45538 return TCL_OK 45539 } 45540 45541 func sqlite3BtreeCursorList(tls *libc.TLS, p uintptr) { 45542 } 45543 45544 func set_options(tls *libc.TLS, interp uintptr) { 45545 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28880, ts+28899, 45546 TCL_GLOBAL_ONLY) 45547 45548 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28901, ts+14193, TCL_GLOBAL_ONLY) 45549 45550 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28909, ts+14193, TCL_GLOBAL_ONLY) 45551 45552 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28927, ts+28940, TCL_GLOBAL_ONLY) 45553 45554 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28944, ts+28899, TCL_GLOBAL_ONLY) 45555 45556 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28951, ts+14193, TCL_GLOBAL_ONLY) 45557 45558 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28963, ts+14193, TCL_GLOBAL_ONLY) 45559 45560 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28969, ts+14193, TCL_GLOBAL_ONLY) 45561 45562 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+28991, ts+14193, TCL_GLOBAL_ONLY) 45563 45564 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29003, ts+28899, TCL_GLOBAL_ONLY) 45565 45566 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29011, ts+28899, TCL_GLOBAL_ONLY) 45567 45568 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29015, ts+28899, TCL_GLOBAL_ONLY) 45569 45570 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29040, ts+28899, TCL_GLOBAL_ONLY) 45571 45572 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29045, 45573 ts+29060, TCL_GLOBAL_ONLY) 45574 45575 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29062, ts+14193, TCL_GLOBAL_ONLY) 45576 45577 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29071, ts+14193, TCL_GLOBAL_ONLY) 45578 45579 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29081, ts+14193, TCL_GLOBAL_ONLY) 45580 45581 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29093, ts+14193, TCL_GLOBAL_ONLY) 45582 45583 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13460, ts+28899, TCL_GLOBAL_ONLY) 45584 45585 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29107, ts+28899, TCL_GLOBAL_ONLY) 45586 45587 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29115, ts+14193, TCL_GLOBAL_ONLY) 45588 45589 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29120, ts+14193, TCL_GLOBAL_ONLY) 45590 45591 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29125, ts+28899, TCL_GLOBAL_ONLY) 45592 45593 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13580, ts+28899, TCL_GLOBAL_ONLY) 45594 45595 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29141, ts+28899, TCL_GLOBAL_ONLY) 45596 45597 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29150, ts+28899, TCL_GLOBAL_ONLY) 45598 45599 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29156, ts+28899, TCL_GLOBAL_ONLY) 45600 45601 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29167, ts+28899, TCL_GLOBAL_ONLY) 45602 45603 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+1957, ts+28899, TCL_GLOBAL_ONLY) 45604 45605 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29178, ts+14193, TCL_GLOBAL_ONLY) 45606 45607 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29188, ts+14193, TCL_GLOBAL_ONLY) 45608 45609 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29200, ts+28899, TCL_GLOBAL_ONLY) 45610 45611 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29208, ts+28899, TCL_GLOBAL_ONLY) 45612 45613 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29214, ts+14193, TCL_GLOBAL_ONLY) 45614 45615 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29224, ts+14193, TCL_GLOBAL_ONLY) 45616 45617 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10121, ts+28899, TCL_GLOBAL_ONLY) 45618 45619 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29241, ts+28899, TCL_GLOBAL_ONLY) 45620 45621 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29246, ts+28899, TCL_GLOBAL_ONLY) 45622 45623 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13044, ts+28899, TCL_GLOBAL_ONLY) 45624 45625 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29254, ts+28899, TCL_GLOBAL_ONLY) 45626 45627 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29264, ts+28899, TCL_GLOBAL_ONLY) 45628 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29275, 45629 ts+14193, TCL_GLOBAL_ONLY) 45630 45631 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29294, ts+28899, TCL_GLOBAL_ONLY) 45632 45633 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29306, ts+28899, TCL_GLOBAL_ONLY) 45634 45635 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29319, ts+28899, TCL_GLOBAL_ONLY) 45636 45637 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29327, ts+28899, TCL_GLOBAL_ONLY) 45638 45639 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29332, ts+28899, TCL_GLOBAL_ONLY) 45640 45641 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29338, ts+28899, TCL_GLOBAL_ONLY) 45642 45643 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29342, ts+28899, TCL_GLOBAL_ONLY) 45644 45645 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29357, ts+14193, 45646 TCL_GLOBAL_ONLY) 45647 45648 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29377, ts+28899, TCL_GLOBAL_ONLY) 45649 45650 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13439, ts+28899, TCL_GLOBAL_ONLY) 45651 45652 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29397, ts+28899, TCL_GLOBAL_ONLY) 45653 45654 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29406, ts+28899, TCL_GLOBAL_ONLY) 45655 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29415, ts+28899, TCL_GLOBAL_ONLY) 45656 45657 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29425, ts+28899, TCL_GLOBAL_ONLY) 45658 45659 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29434, ts+28899, TCL_GLOBAL_ONLY) 45660 45661 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29443, ts+28899, TCL_GLOBAL_ONLY) 45662 45663 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29454, ts+28899, TCL_GLOBAL_ONLY) 45664 45665 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+4974, ts+28899, TCL_GLOBAL_ONLY) 45666 45667 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29461, ts+28899, TCL_GLOBAL_ONLY) 45668 45669 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29475, ts+28899, TCL_GLOBAL_ONLY) 45670 45671 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29486, ts+14193, TCL_GLOBAL_ONLY) 45672 45673 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29491, ts+14193, TCL_GLOBAL_ONLY) 45674 45675 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29496, ts+14193, TCL_GLOBAL_ONLY) 45676 45677 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29501, ts+28899, TCL_GLOBAL_ONLY) 45678 45679 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29506, ts+14193, TCL_GLOBAL_ONLY) 45680 45681 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29519, ts+28899, TCL_GLOBAL_ONLY) 45682 45683 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29533, ts+28899, TCL_GLOBAL_ONLY) 45684 45685 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29542, ts+14193, TCL_GLOBAL_ONLY) 45686 45687 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29546, ts+14193, TCL_GLOBAL_ONLY) 45688 45689 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+10868, ts+28899, TCL_GLOBAL_ONLY) 45690 45691 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29561, ts+28899, TCL_GLOBAL_ONLY) 45692 45693 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29573, ts+14193, TCL_GLOBAL_ONLY) 45694 45695 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29586, ts+28899, TCL_GLOBAL_ONLY) 45696 45697 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29595, ts+14193, TCL_GLOBAL_ONLY) 45698 45699 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29604, ts+28899, TCL_GLOBAL_ONLY) 45700 45701 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29614, ts+28899, TCL_GLOBAL_ONLY) 45702 45703 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29624, 45704 func() uintptr { 45705 if uint64(unsafe.Sizeof(float64(0))) > uint64(unsafe.Sizeof(float64(0))) { 45706 return ts + 28899 45707 } 45708 return ts + 14193 45709 }(), 45710 TCL_GLOBAL_ONLY) 45711 45712 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29636, ts+28899, TCL_GLOBAL_ONLY) 45713 45714 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29645, ts+28899, TCL_GLOBAL_ONLY) 45715 45716 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29658, ts+28899, TCL_GLOBAL_ONLY) 45717 45718 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29668, ts+14193, TCL_GLOBAL_ONLY) 45719 45720 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29678, ts+28899, TCL_GLOBAL_ONLY) 45721 45722 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29685, ts+28899, TCL_GLOBAL_ONLY) 45723 45724 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29689, ts+28899, TCL_GLOBAL_ONLY) 45725 45726 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29703, ts+28899, TCL_GLOBAL_ONLY) 45727 45728 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+9564, ts+28899, TCL_GLOBAL_ONLY) 45729 45730 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29710, ts+28899, TCL_GLOBAL_ONLY) 45731 45732 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29718, ts+28899, TCL_GLOBAL_ONLY) 45733 45734 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29724, ts+14193, TCL_GLOBAL_ONLY) 45735 45736 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29739, ts+28899, TCL_GLOBAL_ONLY) 45737 45738 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29754, ts+28899, TCL_GLOBAL_ONLY) 45739 45740 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29769, ts+28899, TCL_GLOBAL_ONLY) 45741 45742 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+18810, ts+28899, TCL_GLOBAL_ONLY) 45743 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29777, ts+28899, TCL_GLOBAL_ONLY) 45744 45745 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29786, ts+14193, TCL_GLOBAL_ONLY) 45746 45747 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29797, ts+14193, TCL_GLOBAL_ONLY) 45748 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29816, ts+14193, TCL_GLOBAL_ONLY) 45749 45750 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29837, ts+28899, TCL_GLOBAL_ONLY) 45751 45752 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29850, ts+28899, TCL_GLOBAL_ONLY) 45753 45754 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29859, ts+28899, TCL_GLOBAL_ONLY) 45755 45756 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29866, 45757 func() uintptr { 45758 if 1 != 0 { 45759 return ts + 28899 45760 } 45761 return ts + 14193 45762 }(), TCL_GLOBAL_ONLY) 45763 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29877, 45764 func() uintptr { 45765 if SQLITE_THREADSAFE == 1 { 45766 return ts + 28899 45767 } 45768 return ts + 14193 45769 }(), TCL_GLOBAL_ONLY) 45770 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29889, 45771 func() uintptr { 45772 if SQLITE_THREADSAFE == 2 { 45773 return ts + 28899 45774 } 45775 return ts + 14193 45776 }(), TCL_GLOBAL_ONLY) 45777 45778 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29901, ts+28899, TCL_GLOBAL_ONLY) 45779 45780 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13665, ts+28899, TCL_GLOBAL_ONLY) 45781 45782 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29908, ts+28899, TCL_GLOBAL_ONLY) 45783 45784 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29916, ts+28899, TCL_GLOBAL_ONLY) 45785 45786 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+15733, ts+28899, TCL_GLOBAL_ONLY) 45787 45788 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29929, ts+28899, TCL_GLOBAL_ONLY) 45789 45790 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29936, ts+28899, TCL_GLOBAL_ONLY) 45791 45792 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29941, ts+28899, TCL_GLOBAL_ONLY) 45793 45794 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29946, ts+28899, TCL_GLOBAL_ONLY) 45795 45796 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29950, ts+28899, TCL_GLOBAL_ONLY) 45797 45798 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29954, ts+14193, TCL_GLOBAL_ONLY) 45799 45800 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+13692, ts+28899, TCL_GLOBAL_ONLY) 45801 45802 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29974, ts+14193, TCL_GLOBAL_ONLY) 45803 45804 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+29993, ts+14193, TCL_GLOBAL_ONLY) 45805 45806 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30007, ts+14193, TCL_GLOBAL_ONLY) 45807 45808 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30016, ts+14193, TCL_GLOBAL_ONLY) 45809 45810 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30040, ts+14193, TCL_GLOBAL_ONLY) 45811 45812 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30061, ts+14193, TCL_GLOBAL_ONLY) 45813 45814 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30068, ts+14193, TCL_GLOBAL_ONLY) 45815 45816 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30081, ts+14193, TCL_GLOBAL_ONLY) 45817 45818 tcl.XTcl_SetVar2(tls, interp, ts+28865, ts+30091, ts+28899, TCL_GLOBAL_ONLY) 45819 45820 { 45821 tcl.XTcl_LinkVar(tls, interp, ts+30102, uintptr(unsafe.Pointer(&cv_MAX_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45822 } 45823 45824 { 45825 tcl.XTcl_LinkVar(tls, interp, ts+30120, uintptr(unsafe.Pointer(&cv_MAX_COLUMN)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45826 } 45827 45828 { 45829 tcl.XTcl_LinkVar(tls, interp, ts+30138, uintptr(unsafe.Pointer(&cv_MAX_SQL_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45830 } 45831 45832 { 45833 tcl.XTcl_LinkVar(tls, interp, ts+30160, uintptr(unsafe.Pointer(&cv_MAX_EXPR_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45834 } 45835 45836 { 45837 tcl.XTcl_LinkVar(tls, interp, ts+30182, uintptr(unsafe.Pointer(&cv_MAX_COMPOUND_SELECT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45838 } 45839 45840 { 45841 tcl.XTcl_LinkVar(tls, interp, ts+30209, uintptr(unsafe.Pointer(&cv_MAX_VDBE_OP)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45842 } 45843 45844 { 45845 tcl.XTcl_LinkVar(tls, interp, ts+30228, uintptr(unsafe.Pointer(&cv_MAX_FUNCTION_ARG)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45846 } 45847 45848 { 45849 tcl.XTcl_LinkVar(tls, interp, ts+30252, uintptr(unsafe.Pointer(&cv_MAX_VARIABLE_NUMBER)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45850 } 45851 45852 { 45853 tcl.XTcl_LinkVar(tls, interp, ts+30279, uintptr(unsafe.Pointer(&cv_MAX_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45854 } 45855 45856 { 45857 tcl.XTcl_LinkVar(tls, interp, ts+30300, uintptr(unsafe.Pointer(&cv_MAX_PAGE_COUNT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45858 } 45859 45860 { 45861 tcl.XTcl_LinkVar(tls, interp, ts+30322, uintptr(unsafe.Pointer(&cv_MAX_LIKE_PATTERN_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45862 } 45863 45864 { 45865 tcl.XTcl_LinkVar(tls, interp, ts+30353, uintptr(unsafe.Pointer(&cv_MAX_TRIGGER_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45866 } 45867 45868 { 45869 tcl.XTcl_LinkVar(tls, interp, ts+30378, uintptr(unsafe.Pointer(&cv_DEFAULT_CACHE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45870 } 45871 45872 { 45873 tcl.XTcl_LinkVar(tls, interp, ts+30404, uintptr(unsafe.Pointer(&cv_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45874 } 45875 45876 { 45877 tcl.XTcl_LinkVar(tls, interp, ts+30429, uintptr(unsafe.Pointer(&cv_DEFAULT_FILE_FORMAT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45878 } 45879 45880 { 45881 tcl.XTcl_LinkVar(tls, interp, ts+30456, uintptr(unsafe.Pointer(&cv_DEFAULT_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45882 } 45883 45884 { 45885 tcl.XTcl_LinkVar(tls, interp, ts+30483, uintptr(unsafe.Pointer(&cv_DEFAULT_WAL_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45886 } 45887 45888 { 45889 tcl.XTcl_LinkVar(tls, interp, ts+30514, uintptr(unsafe.Pointer(&cv_MAX_ATTACHED)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45890 } 45891 45892 { 45893 tcl.XTcl_LinkVar(tls, interp, ts+30534, uintptr(unsafe.Pointer(&cv_MAX_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45894 } 45895 45896 { 45897 tcl.XTcl_LinkVar(tls, interp, ts+30563, uintptr(unsafe.Pointer(&cv_MAX_WORKER_THREADS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 45898 } 45899 45900 { 45901 tcl.XTcl_LinkVar(tls, interp, ts+30589, uintptr(unsafe.Pointer(&cv_TEMP_STORE)), 45902 TCL_LINK_INT|TCL_LINK_READ_ONLY) 45903 45904 } 45905 45906 { 45907 tcl.XTcl_LinkVar(tls, interp, ts+30600, uintptr(unsafe.Pointer(&cv___GNUC__)), 45908 TCL_LINK_INT|TCL_LINK_READ_ONLY) 45909 45910 } 45911 } 45912 45913 var cv_MAX_LENGTH int32 = SQLITE_MAX_LENGTH 45914 var cv_MAX_COLUMN int32 = SQLITE_MAX_COLUMN 45915 var cv_MAX_SQL_LENGTH int32 = SQLITE_MAX_SQL_LENGTH 45916 var cv_MAX_EXPR_DEPTH int32 = SQLITE_MAX_EXPR_DEPTH 45917 var cv_MAX_COMPOUND_SELECT int32 = SQLITE_MAX_COMPOUND_SELECT 45918 var cv_MAX_VDBE_OP int32 = SQLITE_MAX_VDBE_OP 45919 var cv_MAX_FUNCTION_ARG int32 = SQLITE_MAX_FUNCTION_ARG 45920 var cv_MAX_VARIABLE_NUMBER int32 = SQLITE_MAX_VARIABLE_NUMBER 45921 var cv_MAX_PAGE_SIZE int32 = SQLITE_MAX_PAGE_SIZE 45922 var cv_MAX_PAGE_COUNT int32 = SQLITE_MAX_PAGE_COUNT 45923 var cv_MAX_LIKE_PATTERN_LENGTH int32 = SQLITE_MAX_LIKE_PATTERN_LENGTH 45924 var cv_MAX_TRIGGER_DEPTH int32 = SQLITE_MAX_TRIGGER_DEPTH 45925 var cv_DEFAULT_CACHE_SIZE int32 = -2000 45926 var cv_DEFAULT_PAGE_SIZE int32 = SQLITE_DEFAULT_PAGE_SIZE 45927 var cv_DEFAULT_FILE_FORMAT int32 = SQLITE_DEFAULT_FILE_FORMAT 45928 var cv_DEFAULT_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 45929 var cv_DEFAULT_WAL_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 45930 var cv_MAX_ATTACHED int32 = SQLITE_MAX_ATTACHED 45931 var cv_MAX_DEFAULT_PAGE_SIZE int32 = SQLITE_MAX_DEFAULT_PAGE_SIZE 45932 var cv_MAX_WORKER_THREADS int32 = SQLITE_MAX_WORKER_THREADS 45933 var cv_TEMP_STORE int32 = SQLITE_TEMP_STORE 45934 var cv___GNUC__ int32 = 1 45935 45936 func Sqliteconfig_Init(tls *libc.TLS, interp uintptr) int32 { 45937 set_options(tls, interp) 45938 return TCL_OK 45939 } 45940 45941 func sqlite3Delete83Name(tls *libc.TLS, z uintptr) { 45942 var i int32 45943 var sz int32 45944 sz = int32(libc.Xstrlen(tls, z)) 45945 for i = sz - 1; i > 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '.'; i-- { 45946 } 45947 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' && sz > i+4 { 45948 libc.Xmemmove(tls, z+uintptr(i+1), z+uintptr(sz-3), uint64(4)) 45949 } 45950 } 45951 45952 func sqlite3DeleteUnlinkIfExists(tls *libc.TLS, pVfs uintptr, zFile uintptr, pbExists uintptr) int32 { 45953 var rc int32 = SQLITE_ERROR 45954 45955 rc = libc.Xaccess(tls, zFile, F_OK) 45956 if rc != 0 { 45957 if *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) == ENOENT { 45958 if pbExists != 0 { 45959 *(*int32)(unsafe.Pointer(pbExists)) = 0 45960 } 45961 rc = SQLITE_OK 45962 } 45963 } else { 45964 if pbExists != 0 { 45965 *(*int32)(unsafe.Pointer(pbExists)) = 1 45966 } 45967 rc = libc.Xunlink(tls, zFile) 45968 } 45969 return rc 45970 } 45971 45972 func sqlite3_delete_database(tls *libc.TLS, zFile uintptr) int32 { 45973 bp := tls.Alloc(156) 45974 defer tls.Free(156) 45975 45976 var zBuf uintptr 45977 var nBuf int32 45978 var rc int32 = 0 45979 var i int32 45980 45981 *(*[4]uintptr)(unsafe.Pointer(bp + 24)) = [4]uintptr{ts, ts + 30609, ts + 30620, ts + 30627} 45982 45983 *(*[6]MFile)(unsafe.Pointer(bp + 56)) = [6]MFile{ 45984 {FzFmt: ts + 30634}, 45985 {FzFmt: ts + 30641}, 45986 {FzFmt: ts + 30656}, 45987 {FzFmt: ts + 30634, Fb83: 1}, 45988 {FzFmt: ts + 30641, FiOffset: SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET, Fb83: 1}, 45989 {FzFmt: ts + 30656, FiOffset: SQLITE_MULTIPLEX_WAL_8_3_OFFSET, Fb83: 1}, 45990 } 45991 45992 var pVfs uintptr = uintptr(0) 45993 45994 nBuf = int32(libc.Xstrlen(tls, zFile)) + 100 45995 zBuf = sqlite3.Xsqlite3_malloc(tls, nBuf) 45996 if zBuf == uintptr(0) { 45997 return SQLITE_NOMEM 45998 } 45999 46000 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([4]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 46001 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, *(*uintptr)(unsafe.Pointer(bp + 24 + uintptr(i)*8)), libc.VaList(bp, zFile)) 46002 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 46003 if rc == 0 && i != 0 { 46004 sqlite3Delete83Name(tls, zBuf) 46005 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 46006 } 46007 } 46008 46009 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([6]MFile{}))/uint64(unsafe.Sizeof(MFile{})); i++ { 46010 var p uintptr = bp + 56 + uintptr(i)*16 46011 var iChunk int32 46012 for iChunk = 1; iChunk <= MX_CHUNK_NUMBER; iChunk++ { 46013 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, (*MFile)(unsafe.Pointer(p)).FzFmt, libc.VaList(bp+8, zFile, iChunk+(*MFile)(unsafe.Pointer(p)).FiOffset)) 46014 if (*MFile)(unsafe.Pointer(p)).Fb83 != 0 { 46015 sqlite3Delete83Name(tls, zBuf) 46016 } 46017 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, bp+152) 46018 if *(*int32)(unsafe.Pointer(bp + 152)) == 0 || rc != 0 { 46019 break 46020 } 46021 } 46022 } 46023 46024 sqlite3.Xsqlite3_free(tls, zBuf) 46025 return func() int32 { 46026 if rc != 0 { 46027 return SQLITE_ERROR 46028 } 46029 return SQLITE_OK 46030 }() 46031 } 46032 46033 type MFile = struct { 46034 FzFmt uintptr 46035 FiOffset int32 46036 Fb83 int32 46037 } 46038 46039 func Sqlitetest_demovfs_Init(tls *libc.TLS, interp uintptr) int32 { 46040 return TCL_OK 46041 } 46042 46043 type devsym_file1 = struct { 46044 Fbase sqlite3_file 46045 FpReal uintptr 46046 } 46047 46048 type devsym_file = devsym_file1 46049 46050 type DevsymGlobal = struct { 46051 FpVfs uintptr 46052 FiDeviceChar int32 46053 FiSectorSize int32 46054 FnWriteCrash int32 46055 F__ccgo_pad1 [4]byte 46056 } 46057 46058 var g1 = DevsymGlobal{FiSectorSize: 512} 46059 46060 func devsymClose(tls *libc.TLS, pFile uintptr) int32 { 46061 var p uintptr = pFile 46062 sqlite3.Xsqlite3OsClose(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 46063 return SQLITE_OK 46064 } 46065 46066 func devsymRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 46067 var p uintptr = pFile 46068 return sqlite3.Xsqlite3OsRead(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 46069 } 46070 46071 func devsymWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 46072 var p uintptr = pFile 46073 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 46074 } 46075 46076 func devsymTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 46077 var p uintptr = pFile 46078 return sqlite3.Xsqlite3OsTruncate(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, size) 46079 } 46080 46081 func devsymSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 46082 var p uintptr = pFile 46083 return sqlite3.Xsqlite3OsSync(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags) 46084 } 46085 46086 func devsymFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 46087 var p uintptr = pFile 46088 return sqlite3.Xsqlite3OsFileSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pSize) 46089 } 46090 46091 func devsymLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 46092 var p uintptr = pFile 46093 return sqlite3.Xsqlite3OsLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 46094 } 46095 46096 func devsymUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 46097 var p uintptr = pFile 46098 return sqlite3.Xsqlite3OsUnlock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 46099 } 46100 46101 func devsymCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 46102 var p uintptr = pFile 46103 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pResOut) 46104 } 46105 46106 func devsymFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 46107 var p uintptr = pFile 46108 return sqlite3.Xsqlite3OsFileControl(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, op, pArg) 46109 } 46110 46111 func devsymSectorSize(tls *libc.TLS, pFile uintptr) int32 { 46112 return g1.FiSectorSize 46113 } 46114 46115 func devsymDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 46116 return g1.FiDeviceChar 46117 } 46118 46119 func devsymShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 46120 var p uintptr = pFile 46121 return (*struct { 46122 f func(*libc.TLS, uintptr, int32, int32, int32) int32 46123 })(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) 46124 } 46125 46126 func devsymShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 46127 var p uintptr = pFile 46128 return (*struct { 46129 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 46130 })(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) 46131 } 46132 46133 func devsymShmBarrier(tls *libc.TLS, pFile uintptr) { 46134 var p uintptr = pFile 46135 (*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) 46136 } 46137 46138 func devsymShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 46139 var p uintptr = pFile 46140 return (*struct { 46141 f func(*libc.TLS, uintptr, int32) int32 46142 })(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) 46143 } 46144 46145 func devsymOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 46146 var rc int32 46147 var p uintptr = pFile 46148 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 46149 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 46150 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 46151 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&devsym_io_methods)) 46152 } 46153 return rc 46154 } 46155 46156 var devsym_io_methods = sqlite3_io_methods{ 46157 FiVersion: 2, 46158 FxClose: 0, 46159 FxRead: 0, 46160 FxWrite: 0, 46161 FxTruncate: 0, 46162 FxSync: 0, 46163 FxFileSize: 0, 46164 FxLock: 0, 46165 FxUnlock: 0, 46166 FxCheckReservedLock: 0, 46167 FxFileControl: 0, 46168 FxSectorSize: 0, 46169 FxDeviceCharacteristics: 0, 46170 FxShmMap: 0, 46171 FxShmLock: 0, 46172 FxShmBarrier: 0, 46173 FxShmUnmap: 0, 46174 } 46175 46176 func devsymDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 46177 return sqlite3.Xsqlite3OsDelete(tls, g1.FpVfs, zPath, dirSync) 46178 } 46179 46180 func devsymAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 46181 return sqlite3.Xsqlite3OsAccess(tls, g1.FpVfs, zPath, flags, pResOut) 46182 } 46183 46184 func devsymFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 46185 return sqlite3.Xsqlite3OsFullPathname(tls, g1.FpVfs, zPath, nOut, zOut) 46186 } 46187 46188 func devsymRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 46189 return sqlite3.Xsqlite3OsRandomness(tls, g1.FpVfs, nByte, zBufOut) 46190 } 46191 46192 func devsymSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 46193 return sqlite3.Xsqlite3OsSleep(tls, g1.FpVfs, nMicro) 46194 } 46195 46196 func devsymCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 46197 return (*struct { 46198 f func(*libc.TLS, uintptr, uintptr) int32 46199 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FxCurrentTime})).f(tls, g1.FpVfs, pTimeOut) 46200 } 46201 46202 func writecrashSectorSize(tls *libc.TLS, pFile uintptr) int32 { 46203 var p uintptr = pFile 46204 return sqlite3.Xsqlite3OsSectorSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 46205 } 46206 46207 func writecrashDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 46208 var p uintptr = pFile 46209 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 46210 } 46211 46212 func writecrashWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 46213 var p uintptr = pFile 46214 if g1.FnWriteCrash > 0 { 46215 g1.FnWriteCrash-- 46216 if g1.FnWriteCrash == 0 { 46217 libc.Xabort(tls) 46218 } 46219 } 46220 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 46221 } 46222 46223 func writecrashOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 46224 var rc int32 46225 var p uintptr = pFile 46226 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 46227 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 46228 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 46229 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&writecrash_io_methods)) 46230 } 46231 return rc 46232 } 46233 46234 var writecrash_io_methods = sqlite3_io_methods{ 46235 FiVersion: 2, 46236 FxClose: 0, 46237 FxRead: 0, 46238 FxWrite: 0, 46239 FxTruncate: 0, 46240 FxSync: 0, 46241 FxFileSize: 0, 46242 FxLock: 0, 46243 FxUnlock: 0, 46244 FxCheckReservedLock: 0, 46245 FxFileControl: 0, 46246 FxSectorSize: 0, 46247 FxDeviceCharacteristics: 0, 46248 FxShmMap: 0, 46249 FxShmLock: 0, 46250 FxShmBarrier: 0, 46251 FxShmUnmap: 0, 46252 } 46253 46254 var devsym_vfs = sqlite3_vfs{ 46255 FiVersion: 2, 46256 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 46257 FmxPathname: DEVSYM_MAX_PATHNAME, 46258 FzName: ts + 30667, 46259 FxOpen: 0, 46260 FxDelete: 0, 46261 FxAccess: 0, 46262 FxFullPathname: 0, 46263 FxRandomness: 0, 46264 FxSleep: 0, 46265 FxCurrentTime: 0, 46266 } 46267 46268 var writecrash_vfs = sqlite3_vfs{ 46269 FiVersion: 2, 46270 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 46271 FmxPathname: DEVSYM_MAX_PATHNAME, 46272 FzName: ts + 30674, 46273 FxOpen: 0, 46274 FxDelete: 0, 46275 FxAccess: 0, 46276 FxFullPathname: 0, 46277 FxRandomness: 0, 46278 FxSleep: 0, 46279 FxCurrentTime: 0, 46280 } 46281 46282 func devsym_register(tls *libc.TLS, iDeviceChar int32, iSectorSize int32) { 46283 if g1.FpVfs == uintptr(0) { 46284 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 46285 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 46286 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 46287 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 46288 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 46289 } 46290 if iDeviceChar >= 0 { 46291 g1.FiDeviceChar = iDeviceChar 46292 } else { 46293 g1.FiDeviceChar = 0 46294 } 46295 if iSectorSize >= 0 { 46296 g1.FiSectorSize = iSectorSize 46297 } else { 46298 g1.FiSectorSize = 512 46299 } 46300 } 46301 46302 func devsym_unregister(tls *libc.TLS) { 46303 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&devsym_vfs))) 46304 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&writecrash_vfs))) 46305 g1.FpVfs = uintptr(0) 46306 g1.FiDeviceChar = 0 46307 g1.FiSectorSize = 0 46308 } 46309 46310 func devsym_crash_on_write(tls *libc.TLS, nWrite int32) { 46311 if g1.FpVfs == uintptr(0) { 46312 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 46313 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 46314 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 46315 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 46316 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 46317 } 46318 g1.FnWriteCrash = nWrite 46319 } 46320 46321 type Tcl_StatBuf = stat 46322 46323 type stat64 = struct { 46324 Fst_dev uint64 46325 Fst_ino uint64 46326 Fst_nlink uint64 46327 Fst_mode uint32 46328 Fst_uid uint32 46329 Fst_gid uint32 46330 F__pad2 int32 46331 Fst_rdev uint64 46332 Fst_size int64 46333 Fst_blksize int64 46334 Fst_blocks int64 46335 Fst_atim struct { 46336 Ftv_sec int64 46337 Ftv_nsec int64 46338 } 46339 Fst_mtim struct { 46340 Ftv_sec int64 46341 Ftv_nsec int64 46342 } 46343 Fst_ctim struct { 46344 Ftv_sec int64 46345 Ftv_nsec int64 46346 } 46347 F__glibc_reserved4 uint64 46348 F__glibc_reserved5 uint64 46349 F__glibc_reserved6 uint64 46350 } 46351 46352 type statx_timestamp = struct { 46353 Ftv_sec int64 46354 Ftv_nsec uint32 46355 F__reserved int32 46356 } 46357 46358 type statx = struct { 46359 Fstx_mask uint32 46360 Fstx_blksize uint32 46361 Fstx_attributes uint64 46362 Fstx_nlink uint32 46363 Fstx_uid uint32 46364 Fstx_gid uint32 46365 Fstx_mode uint16 46366 F__spare0 [1]uint16 46367 Fstx_ino uint64 46368 Fstx_size uint64 46369 Fstx_blocks uint64 46370 Fstx_attributes_mask uint64 46371 Fstx_atime struct { 46372 Ftv_sec int64 46373 Ftv_nsec uint32 46374 F__reserved int32 46375 } 46376 Fstx_btime struct { 46377 Ftv_sec int64 46378 Ftv_nsec uint32 46379 F__reserved int32 46380 } 46381 Fstx_ctime struct { 46382 Ftv_sec int64 46383 Ftv_nsec uint32 46384 F__reserved int32 46385 } 46386 Fstx_mtime struct { 46387 Ftv_sec int64 46388 Ftv_nsec uint32 46389 F__reserved int32 46390 } 46391 Fstx_rdev_major uint32 46392 Fstx_rdev_minor uint32 46393 Fstx_dev_major uint32 46394 Fstx_dev_minor uint32 46395 Fstx_mnt_id uint64 46396 F__spare2 uint64 46397 F__spare3 [12]uint64 46398 } 46399 46400 type flock64 = struct { 46401 Fl_type int16 46402 Fl_whence int16 46403 F__ccgo_pad1 [4]byte 46404 Fl_start int64 46405 Fl_len int64 46406 Fl_pid int32 46407 F__ccgo_pad2 [4]byte 46408 } 46409 46410 type iovec = struct { 46411 Fiov_base uintptr 46412 Fiov_len size_t 46413 } 46414 46415 type f_owner_ex = struct { 46416 Ftype uint32 46417 Fpid int32 46418 } 46419 46420 type file_handle = struct { 46421 F__ccgo_pad1 [0]uint32 46422 Fhandle_bytes uint32 46423 Fhandle_type int32 46424 } 46425 46426 type dirent64 = struct { 46427 Fd_ino uint64 46428 Fd_off int64 46429 Fd_reclen uint16 46430 Fd_type uint8 46431 Fd_name [256]uint8 46432 F__ccgo_pad1 [5]byte 46433 } 46434 46435 type fs_vtab1 = struct { 46436 Fbase sqlite3_vtab 46437 Fdb uintptr 46438 FzDb uintptr 46439 FzTbl uintptr 46440 } 46441 46442 type fs_vtab = fs_vtab1 46443 type fs_cursor1 = struct { 46444 Fbase sqlite3_vtab_cursor 46445 FpStmt uintptr 46446 FzBuf uintptr 46447 FnBuf int32 46448 FnAlloc int32 46449 } 46450 46451 type fs_cursor = fs_cursor1 46452 46453 type FsdirVtab1 = struct{ Fbase sqlite3_vtab } 46454 46455 type FsdirVtab = FsdirVtab1 46456 type FsdirCsr1 = struct { 46457 Fbase sqlite3_vtab_cursor 46458 FzDir uintptr 46459 FpDir uintptr 46460 FiRowid sqlite3_int64 46461 FpEntry uintptr 46462 } 46463 46464 type FsdirCsr = FsdirCsr1 46465 46466 func fsdirConnect1(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46467 var pTab uintptr 46468 46469 if argc != 3 { 46470 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46471 return SQLITE_ERROR 46472 } 46473 46474 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FsdirVtab{}))) 46475 if !(pTab != 0) { 46476 return SQLITE_NOMEM 46477 } 46478 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FsdirVtab{}))) 46479 46480 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 46481 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30685) 46482 46483 return SQLITE_OK 46484 } 46485 46486 func fsdirDisconnect1(tls *libc.TLS, pVtab uintptr) int32 { 46487 sqlite3.Xsqlite3_free(tls, pVtab) 46488 return SQLITE_OK 46489 } 46490 46491 func fsdirBestIndex1(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46492 var ii int32 46493 46494 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 46495 46496 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46497 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46498 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 { 46499 var pUsage uintptr 46500 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46501 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 46502 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46503 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 46504 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 46505 break 46506 } 46507 } 46508 46509 return SQLITE_OK 46510 } 46511 46512 func fsdirOpen1(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46513 var pCur uintptr 46514 46515 pCur = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(FsdirCsr{}))+uint64(256))) 46516 if pCur == uintptr(0) { 46517 return SQLITE_NOMEM 46518 } 46519 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FsdirCsr{}))) 46520 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46521 return SQLITE_OK 46522 } 46523 46524 func fsdirClose1(tls *libc.TLS, cur uintptr) int32 { 46525 var pCur uintptr = cur 46526 if (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir != 0 { 46527 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir) 46528 } 46529 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FzDir) 46530 sqlite3.Xsqlite3_free(tls, pCur) 46531 return SQLITE_OK 46532 } 46533 46534 func fsdirNext1(tls *libc.TLS, cur uintptr) int32 { 46535 var pCsr uintptr = cur 46536 46537 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 46538 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry = libc.Xreaddir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46539 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry == uintptr(0) { 46540 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46541 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 46542 } 46543 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid++ 46544 } 46545 46546 return SQLITE_OK 46547 } 46548 46549 func fsdirFilter1(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46550 var pCsr uintptr = pVtabCursor 46551 var zDir uintptr 46552 var nDir int32 46553 46554 if idxNum != 1 || argc != 1 { 46555 return SQLITE_ERROR 46556 } 46557 46558 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 46559 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 46560 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 46561 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 46562 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 46563 } 46564 46565 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46566 nDir = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 46567 (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir = sqlite3.Xsqlite3_malloc(tls, nDir+1) 46568 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir == uintptr(0) { 46569 return SQLITE_NOMEM 46570 } 46571 libc.Xmemcpy(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, zDir, uint64(nDir+1)) 46572 46573 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = libc.Xopendir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 46574 return fsdirNext1(tls, pVtabCursor) 46575 } 46576 46577 func fsdirEof1(tls *libc.TLS, cur uintptr) int32 { 46578 var pCsr uintptr = cur 46579 return libc.Bool32((*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir == uintptr(0)) 46580 } 46581 46582 func fsdirColumn1(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46583 var pCsr uintptr = cur 46584 switch i { 46585 case 0: 46586 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, -1, uintptr(0)) 46587 break 46588 46589 case 1: 46590 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry+19, -1, libc.UintptrFromInt32(-1)) 46591 break 46592 46593 default: 46594 } 46595 46596 return SQLITE_OK 46597 } 46598 46599 func fsdirRowid1(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46600 var pCsr uintptr = cur 46601 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid 46602 return SQLITE_OK 46603 } 46604 46605 type FstreeVtab1 = struct { 46606 Fbase sqlite3_vtab 46607 Fdb uintptr 46608 } 46609 46610 type FstreeVtab = FstreeVtab1 46611 type FstreeCsr1 = struct { 46612 Fbase sqlite3_vtab_cursor 46613 FpStmt uintptr 46614 Ffd int32 46615 F__ccgo_pad1 [4]byte 46616 } 46617 46618 type FstreeCsr = FstreeCsr1 46619 46620 func fstreeConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46621 var pTab uintptr 46622 46623 if argc != 3 { 46624 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46625 return SQLITE_ERROR 46626 } 46627 46628 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeVtab{}))) 46629 if !(pTab != 0) { 46630 return SQLITE_NOMEM 46631 } 46632 libc.Xmemset(tls, pTab, 0, uint64(unsafe.Sizeof(FstreeVtab{}))) 46633 (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb = db 46634 46635 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 46636 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30714) 46637 46638 return SQLITE_OK 46639 } 46640 46641 func fstreeDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 46642 sqlite3.Xsqlite3_free(tls, pVtab) 46643 return SQLITE_OK 46644 } 46645 46646 func fstreeBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46647 var ii int32 46648 46649 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46650 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46651 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 || 46652 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE || 46653 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 46654 var pUsage uintptr 46655 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46656 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) 46657 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46658 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100000.0 46659 return SQLITE_OK 46660 } 46661 } 46662 46663 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 46664 return SQLITE_OK 46665 } 46666 46667 func fstreeOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46668 var pCur uintptr 46669 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeCsr{}))) 46670 if pCur == uintptr(0) { 46671 return SQLITE_NOMEM 46672 } 46673 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(FstreeCsr{}))) 46674 (*FstreeCsr)(unsafe.Pointer(pCur)).Ffd = -1 46675 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46676 return SQLITE_OK 46677 } 46678 46679 func fstreeCloseFd(tls *libc.TLS, pCsr uintptr) { 46680 if (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd >= 0 { 46681 libc.Xclose(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd) 46682 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = -1 46683 } 46684 } 46685 46686 func fstreeClose(tls *libc.TLS, cur uintptr) int32 { 46687 var pCsr uintptr = cur 46688 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46689 fstreeCloseFd(tls, pCsr) 46690 sqlite3.Xsqlite3_free(tls, pCsr) 46691 return SQLITE_OK 46692 } 46693 46694 func fstreeNext(tls *libc.TLS, cur uintptr) int32 { 46695 var pCsr uintptr = cur 46696 var rc int32 46697 46698 fstreeCloseFd(tls, pCsr) 46699 rc = sqlite3.Xsqlite3_step(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46700 if rc != SQLITE_ROW { 46701 rc = sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46702 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46703 } else { 46704 rc = SQLITE_OK 46705 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = libc.Xopen(tls, sqlite3.Xsqlite3_column_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0), O_RDONLY, 0) 46706 } 46707 46708 return rc 46709 } 46710 46711 func fstreeFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46712 bp := tls.Alloc(2) 46713 defer tls.Free(2) 46714 46715 var pCsr uintptr = pVtabCursor 46716 var pTab uintptr = (*FstreeCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 46717 var rc int32 46718 var zSql uintptr = ts + 30750 46719 var zRoot uintptr 46720 var nRoot int32 46721 var zPrefix uintptr 46722 var nPrefix int32 46723 var zDir uintptr 46724 var nDir int32 46725 *(*[2]uint8)(unsafe.Pointer(bp)) = [2]uint8{uint8(0), uint8(0)} 46726 46727 zRoot = ts + 30982 46728 nRoot = 1 46729 zPrefix = ts + 584 46730 nPrefix = 0 46731 46732 zDir = zRoot 46733 nDir = nRoot 46734 46735 fstreeCloseFd(tls, pCsr) 46736 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 46737 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46738 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 46739 if rc != SQLITE_OK { 46740 return rc 46741 } 46742 46743 if idxNum != 0 { 46744 var zQuery uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 46745 switch idxNum { 46746 case SQLITE_INDEX_CONSTRAINT_GLOB: 46747 *(*uint8)(unsafe.Pointer(bp)) = uint8('*') 46748 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8('?') 46749 break 46750 fallthrough 46751 case SQLITE_INDEX_CONSTRAINT_LIKE: 46752 *(*uint8)(unsafe.Pointer(bp)) = uint8('_') 46753 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8('%') 46754 break 46755 } 46756 46757 if sqlite3.Xsqlite3_strnicmp(tls, zQuery, zPrefix, nPrefix) == 0 { 46758 var i int32 46759 for i = nPrefix; *(*uint8)(unsafe.Pointer(zQuery + uintptr(i))) != 0; i++ { 46760 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))) { 46761 break 46762 } 46763 if int32(*(*uint8)(unsafe.Pointer(zQuery + uintptr(i)))) == '/' { 46764 nDir = i 46765 } 46766 } 46767 zDir = zQuery 46768 } 46769 } 46770 if nDir == 0 { 46771 nDir = 1 46772 } 46773 46774 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 1, zDir, nDir, libc.UintptrFromInt32(-1)) 46775 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 2, zRoot, nRoot, libc.UintptrFromInt32(-1)) 46776 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 3, zPrefix, nPrefix, libc.UintptrFromInt32(-1)) 46777 46778 return fstreeNext(tls, pVtabCursor) 46779 } 46780 46781 func fstreeEof(tls *libc.TLS, cur uintptr) int32 { 46782 var pCsr uintptr = cur 46783 return libc.Bool32((*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 46784 } 46785 46786 func fstreeColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46787 bp := tls.Alloc(144) 46788 defer tls.Free(144) 46789 46790 var pCsr uintptr = cur 46791 if i == 0 { 46792 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0)) 46793 } else { 46794 libc.Xfstat(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, bp) 46795 46796 if (*stat)(unsafe.Pointer(bp)).Fst_mode&uint32(0170000) == uint32(0100000) { 46797 if i == 1 { 46798 sqlite3.Xsqlite3_result_int64(tls, ctx, (*stat)(unsafe.Pointer(bp)).Fst_size) 46799 } else { 46800 var nRead int32 46801 var aBuf uintptr = sqlite3.Xsqlite3_malloc(tls, int32((*stat)(unsafe.Pointer(bp)).Fst_mode+uint32(1))) 46802 if !(aBuf != 0) { 46803 return SQLITE_NOMEM 46804 } 46805 nRead = int32(libc.Xread(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, aBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_mode))) 46806 if uint32(nRead) != (*stat)(unsafe.Pointer(bp)).Fst_mode { 46807 return SQLITE_IOERR 46808 } 46809 sqlite3.Xsqlite3_result_blob(tls, ctx, aBuf, nRead, libc.UintptrFromInt32(-1)) 46810 sqlite3.Xsqlite3_free(tls, aBuf) 46811 } 46812 } 46813 } 46814 46815 return SQLITE_OK 46816 } 46817 46818 func fstreeRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46819 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 46820 return SQLITE_OK 46821 } 46822 46823 func fsConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46824 var pVtab uintptr 46825 var nByte int32 46826 var zTbl uintptr 46827 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 46828 46829 if argc != 4 { 46830 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28324, 0) 46831 return SQLITE_ERROR 46832 } 46833 zTbl = *(*uintptr)(unsafe.Pointer(argv + 3*8)) 46834 46835 nByte = int32(uint64(unsafe.Sizeof(fs_vtab{})) + uint64(int32(libc.Xstrlen(tls, zTbl))) + uint64(1) + uint64(int32(libc.Xstrlen(tls, zDb))) + uint64(1)) 46836 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(nByte)) 46837 if !(pVtab != 0) { 46838 return SQLITE_NOMEM 46839 } 46840 46841 (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl = pVtab + 1*48 46842 (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb = (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl + uintptr(libc.Xstrlen(tls, zTbl)+uint64(1)) 46843 (*fs_vtab)(unsafe.Pointer(pVtab)).Fdb = db 46844 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl, zTbl, libc.Xstrlen(tls, zTbl)) 46845 libc.Xmemcpy(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb, zDb, libc.Xstrlen(tls, zDb)) 46846 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 46847 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30984) 46848 46849 return SQLITE_OK 46850 } 46851 46852 func fsDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 46853 sqlite3.Xsqlite3_free(tls, pVtab) 46854 return SQLITE_OK 46855 } 46856 46857 func fsOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46858 var pCur uintptr 46859 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(fs_cursor{}))) 46860 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46861 return SQLITE_OK 46862 } 46863 46864 func fsClose(tls *libc.TLS, cur uintptr) int32 { 46865 var pCur uintptr = cur 46866 sqlite3.Xsqlite3_finalize(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 46867 sqlite3.Xsqlite3_free(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf) 46868 sqlite3.Xsqlite3_free(tls, pCur) 46869 return SQLITE_OK 46870 } 46871 46872 func fsNext(tls *libc.TLS, cur uintptr) int32 { 46873 var pCur uintptr = cur 46874 var rc int32 46875 46876 rc = sqlite3.Xsqlite3_step(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 46877 if rc == SQLITE_ROW || rc == SQLITE_DONE { 46878 rc = SQLITE_OK 46879 } 46880 46881 return rc 46882 } 46883 46884 func fsFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46885 bp := tls.Alloc(32) 46886 defer tls.Free(32) 46887 46888 var rc int32 46889 var pCur uintptr = pVtabCursor 46890 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 46891 46892 if idxNum == 1 { 46893 var zStmt uintptr = sqlite3.Xsqlite3_mprintf(tls, 46894 ts+31021, libc.VaList(bp, (*fs_vtab)(unsafe.Pointer(p)).FzDb, (*fs_vtab)(unsafe.Pointer(p)).FzTbl)) 46895 if !(zStmt != 0) { 46896 return SQLITE_NOMEM 46897 } 46898 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 46899 sqlite3.Xsqlite3_free(tls, zStmt) 46900 if rc == SQLITE_OK { 46901 sqlite3.Xsqlite3_bind_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1, *(*uintptr)(unsafe.Pointer(argv))) 46902 } 46903 } else { 46904 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)) 46905 if !(zStmt != 0) { 46906 return SQLITE_NOMEM 46907 } 46908 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 46909 sqlite3.Xsqlite3_free(tls, zStmt) 46910 } 46911 46912 if rc == SQLITE_OK { 46913 rc = fsNext(tls, pVtabCursor) 46914 } 46915 return rc 46916 } 46917 46918 func fsColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 46919 bp := tls.Alloc(144) 46920 defer tls.Free(144) 46921 46922 var pCur uintptr = cur 46923 46924 if i == 0 { 46925 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0)) 46926 } else { 46927 var zFile uintptr = sqlite3.Xsqlite3_column_text(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1) 46928 46929 var fd int32 46930 var n int32 46931 fd = libc.Xopen(tls, zFile, O_RDONLY, 0) 46932 if fd < 0 { 46933 return SQLITE_IOERR 46934 } 46935 libc.Xfstat(tls, fd, bp) 46936 46937 if (*stat)(unsafe.Pointer(bp)).Fst_size >= int64((*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc) { 46938 var nNew sqlite3_int64 = (*stat)(unsafe.Pointer(bp)).Fst_size * int64(2) 46939 var zNew uintptr 46940 if nNew < int64(1024) { 46941 nNew = int64(1024) 46942 } 46943 46944 zNew = sqlite3.Xsqlite3Realloc(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64(nNew)) 46945 if zNew == uintptr(0) { 46946 libc.Xclose(tls, fd) 46947 return SQLITE_NOMEM 46948 } 46949 (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf = zNew 46950 (*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc = int32(nNew) 46951 } 46952 46953 n = int32(libc.Xread(tls, fd, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_size))) 46954 libc.Xclose(tls, fd) 46955 if int64(n) != (*stat)(unsafe.Pointer(bp)).Fst_size { 46956 return SQLITE_ERROR 46957 } 46958 (*fs_cursor)(unsafe.Pointer(pCur)).FnBuf = int32((*stat)(unsafe.Pointer(bp)).Fst_size) 46959 *(*uint8)(unsafe.Pointer((*fs_cursor)(unsafe.Pointer(pCur)).FzBuf + uintptr((*fs_cursor)(unsafe.Pointer(pCur)).FnBuf))) = uint8(0) 46960 46961 sqlite3.Xsqlite3_result_text(tls, ctx, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 46962 } 46963 return SQLITE_OK 46964 } 46965 46966 func fsRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 46967 var pCur uintptr = cur 46968 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0) 46969 return SQLITE_OK 46970 } 46971 46972 func fsEof(tls *libc.TLS, cur uintptr) int32 { 46973 var pCur uintptr = cur 46974 return libc.Bool32(sqlite3.Xsqlite3_data_count(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) == 0) 46975 } 46976 46977 func fsBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 46978 var ii int32 46979 46980 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46981 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46982 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn < 0 && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 46983 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 46984 var pUsage uintptr 46985 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 46986 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 46987 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 46988 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 46989 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 46990 break 46991 } 46992 } 46993 46994 return SQLITE_OK 46995 } 46996 46997 var fsModule = sqlite3_module{ 46998 FxCreate: 0, 46999 FxConnect: 0, 47000 FxBestIndex: 0, 47001 FxDisconnect: 0, 47002 FxDestroy: 0, 47003 FxOpen: 0, 47004 FxClose: 0, 47005 FxFilter: 0, 47006 FxNext: 0, 47007 FxEof: 0, 47008 FxColumn: 0, 47009 FxRowid: 0, 47010 } 47011 47012 var fsdirModule = sqlite3_module{ 47013 FxCreate: 0, 47014 FxConnect: 0, 47015 FxBestIndex: 0, 47016 FxDisconnect: 0, 47017 FxDestroy: 0, 47018 FxOpen: 0, 47019 FxClose: 0, 47020 FxFilter: 0, 47021 FxNext: 0, 47022 FxEof: 0, 47023 FxColumn: 0, 47024 FxRowid: 0, 47025 } 47026 47027 var fstreeModule = sqlite3_module{ 47028 FxCreate: 0, 47029 FxConnect: 0, 47030 FxBestIndex: 0, 47031 FxDisconnect: 0, 47032 FxDestroy: 0, 47033 FxOpen: 0, 47034 FxClose: 0, 47035 FxFilter: 0, 47036 FxNext: 0, 47037 FxEof: 0, 47038 FxColumn: 0, 47039 FxRowid: 0, 47040 } 47041 47042 func register_fs_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47043 bp := tls.Alloc(8) 47044 defer tls.Free(8) 47045 47046 if objc != 2 { 47047 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 47048 return TCL_ERROR 47049 } 47050 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 47051 return TCL_ERROR 47052 } 47053 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31055, uintptr(unsafe.Pointer(&fsModule)), interp) 47054 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+5325, uintptr(unsafe.Pointer(&fsdirModule)), uintptr(0)) 47055 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31058, uintptr(unsafe.Pointer(&fstreeModule)), uintptr(0)) 47056 return TCL_OK 47057 } 47058 47059 func Sqlitetestfs_Init(tls *libc.TLS, interp uintptr) int32 { 47060 var i int32 47061 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd6))/uint64(unsafe.Sizeof(struct { 47062 FzName uintptr 47063 FxProc uintptr 47064 FclientData uintptr 47065 }{})); i++ { 47066 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd6[i].FzName, 47067 aObjCmd6[i].FxProc, aObjCmd6[i].FclientData, uintptr(0)) 47068 } 47069 return TCL_OK 47070 } 47071 47072 var aObjCmd6 = [1]struct { 47073 FzName uintptr 47074 FxProc uintptr 47075 FclientData uintptr 47076 }{ 47077 {FzName: ts + 31065, FxProc: 0}, 47078 } 47079 47080 type fd_set2 = struct{ F__fds_bits [16]int64 } 47081 47082 func testContextMalloc(tls *libc.TLS, context uintptr, nByte int32) uintptr { 47083 var z uintptr = sqlite3.Xsqlite3_malloc(tls, nByte) 47084 if !(z != 0) && nByte > 0 { 47085 sqlite3.Xsqlite3_result_error_nomem(tls, context) 47086 } 47087 return z 47088 } 47089 47090 func randStr(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47091 bp := tls.Alloc(1004) 47092 defer tls.Free(1004) 47093 47094 var iMin int32 47095 var iMax int32 47096 var n int32 47097 47098 var i int32 47099 47100 iMin = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 47101 if iMin < 0 { 47102 iMin = 0 47103 } 47104 if uint64(iMin) >= uint64(unsafe.Sizeof([1000]uint8{})) { 47105 iMin = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 47106 } 47107 iMax = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 47108 if iMax < iMin { 47109 iMax = iMin 47110 } 47111 if uint64(iMax) >= uint64(unsafe.Sizeof([1000]uint8{})) { 47112 iMax = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 47113 } 47114 n = iMin 47115 if iMax > iMin { 47116 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 47117 *(*int32)(unsafe.Pointer(bp)) &= 0x7fffffff 47118 n = n + *(*int32)(unsafe.Pointer(bp))%(iMax+1-iMin) 47119 } 47120 47121 sqlite3.Xsqlite3_randomness(tls, n, bp+4) 47122 for i = 0; i < n; i++ { 47123 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))) = zSrc[uint64(*(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))))%(uint64(unsafe.Sizeof(zSrc))-uint64(1))] 47124 } 47125 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(n))) = uint8(0) 47126 sqlite3.Xsqlite3_result_text(tls, context, bp+4, n, libc.UintptrFromInt32(-1)) 47127 } 47128 47129 var zSrc = *(*[79]uint8)(unsafe.Pointer(ts + 31084)) 47130 47131 var test_destructor_count_var int32 = 0 47132 47133 func destructor(tls *libc.TLS, p uintptr) { 47134 var zVal uintptr = p 47135 47136 zVal-- 47137 sqlite3.Xsqlite3_free(tls, zVal) 47138 test_destructor_count_var-- 47139 } 47140 47141 func test_destructor(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47142 var zVal uintptr 47143 var len int32 47144 47145 test_destructor_count_var++ 47146 47147 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 47148 return 47149 } 47150 len = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 47151 zVal = testContextMalloc(tls, pCtx, len+3) 47152 if !(zVal != 0) { 47153 return 47154 } 47155 *(*uint8)(unsafe.Pointer(zVal + uintptr(len+1))) = uint8(0) 47156 *(*uint8)(unsafe.Pointer(zVal + uintptr(len+2))) = uint8(0) 47157 zVal++ 47158 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 47159 sqlite3.Xsqlite3_result_text(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 47160 } 47161 47162 func test_destructor16(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47163 var zVal uintptr 47164 var len int32 47165 47166 test_destructor_count_var++ 47167 47168 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 47169 return 47170 } 47171 len = sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 47172 zVal = testContextMalloc(tls, pCtx, len+3) 47173 if !(zVal != 0) { 47174 return 47175 } 47176 *(*uint8)(unsafe.Pointer(zVal + uintptr(len+1))) = uint8(0) 47177 *(*uint8)(unsafe.Pointer(zVal + uintptr(len+2))) = uint8(0) 47178 zVal++ 47179 libc.Xmemcpy(tls, zVal, sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len)) 47180 sqlite3.Xsqlite3_result_text16(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 47181 } 47182 47183 func test_destructor_count(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47184 sqlite3.Xsqlite3_result_int(tls, pCtx, test_destructor_count_var) 47185 } 47186 47187 func test_agg_errmsg16_step(tls *libc.TLS, a uintptr, b int32, c uintptr) { 47188 } 47189 47190 func test_agg_errmsg16_final(tls *libc.TLS, ctx uintptr) { 47191 var z uintptr 47192 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 47193 sqlite3.Xsqlite3_aggregate_context(tls, ctx, 2048) 47194 z = sqlite3.Xsqlite3_errmsg16(tls, db) 47195 sqlite3.Xsqlite3_result_text16(tls, ctx, z, -1, libc.UintptrFromInt32(-1)) 47196 } 47197 47198 func free_test_auxdata(tls *libc.TLS, p uintptr) { 47199 sqlite3.Xsqlite3_free(tls, p) 47200 } 47201 47202 func test_auxdata(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47203 var i int32 47204 var zRet uintptr = testContextMalloc(tls, pCtx, nArg*2) 47205 if !(zRet != 0) { 47206 return 47207 } 47208 libc.Xmemset(tls, zRet, 0, uint64(nArg*2)) 47209 for i = 0; i < nArg; i++ { 47210 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 47211 if z != 0 { 47212 var n int32 47213 var zAux uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, i) 47214 if zAux != 0 { 47215 *(*uint8)(unsafe.Pointer(zRet + uintptr(i*2))) = uint8('1') 47216 47217 } else { 47218 *(*uint8)(unsafe.Pointer(zRet + uintptr(i*2))) = uint8('0') 47219 } 47220 n = int32(libc.Xstrlen(tls, z)) + 1 47221 zAux = testContextMalloc(tls, pCtx, n) 47222 if zAux != 0 { 47223 libc.Xmemcpy(tls, zAux, z, uint64(n)) 47224 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, i, zAux, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 47225 } 47226 *(*uint8)(unsafe.Pointer(zRet + uintptr(i*2+1))) = uint8(' ') 47227 } 47228 } 47229 sqlite3.Xsqlite3_result_text(tls, pCtx, zRet, 2*nArg-1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 47230 } 47231 47232 func test_error(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47233 sqlite3.Xsqlite3_result_error(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1) 47234 if nArg == 2 { 47235 sqlite3.Xsqlite3_result_error_code(tls, pCtx, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 47236 } 47237 } 47238 47239 func counterFunc(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47240 var pCounter uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, 0) 47241 if pCounter == uintptr(0) { 47242 pCounter = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(int32(0)))) 47243 if pCounter == uintptr(0) { 47244 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 47245 return 47246 } 47247 *(*int32)(unsafe.Pointer(pCounter)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 47248 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, 0, pCounter, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47249 } else { 47250 *(*int32)(unsafe.Pointer(pCounter))++ 47251 } 47252 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(pCounter))) 47253 } 47254 47255 func test_isolation(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47256 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 47257 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47258 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 47259 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47260 sqlite3.Xsqlite3_result_value(tls, pCtx, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 47261 } 47262 47263 func test_eval(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47264 bp := tls.Alloc(16) 47265 defer tls.Free(16) 47266 47267 var rc int32 47268 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, pCtx) 47269 var zSql uintptr 47270 47271 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47272 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 47273 if rc == SQLITE_OK { 47274 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 47275 if rc == SQLITE_ROW { 47276 sqlite3.Xsqlite3_result_value(tls, pCtx, sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0)) 47277 } 47278 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 47279 } 47280 if rc != 0 { 47281 var zErr uintptr 47282 47283 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+31163, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 47284 sqlite3.Xsqlite3_result_text(tls, pCtx, zErr, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47285 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 47286 } 47287 } 47288 47289 func testHexChar(tls *libc.TLS, c uint8) int32 { 47290 if int32(c) >= '0' && int32(c) <= '9' { 47291 return int32(c) - '0' 47292 } else if int32(c) >= 'a' && int32(c) <= 'f' { 47293 return int32(c) - 'a' + 10 47294 } else if int32(c) >= 'A' && int32(c) <= 'F' { 47295 return int32(c) - 'A' + 10 47296 } 47297 return 0 47298 } 47299 47300 func testHexToBin(tls *libc.TLS, zIn uintptr, zOut uintptr) { 47301 for *(*uint8)(unsafe.Pointer(zIn)) != 0 && *(*uint8)(unsafe.Pointer(zIn + 1)) != 0 { 47302 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zOut, 1))) = uint8(testHexChar(tls, *(*uint8)(unsafe.Pointer(zIn)))<<4 + testHexChar(tls, *(*uint8)(unsafe.Pointer(zIn + 1)))) 47303 zIn += uintptr(2) 47304 } 47305 } 47306 47307 func testHexToUtf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47308 var n int32 47309 var zIn uintptr 47310 var zOut uintptr 47311 47312 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 47313 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47314 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 47315 if zOut == uintptr(0) { 47316 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 47317 } else { 47318 testHexToBin(tls, zIn, zOut) 47319 sqlite3.Xsqlite3_result_text16be(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47320 } 47321 } 47322 47323 func testHexToUtf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47324 var n int32 47325 var zIn uintptr 47326 var zOut uintptr 47327 47328 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 47329 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47330 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 47331 if zOut == uintptr(0) { 47332 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 47333 } else { 47334 testHexToBin(tls, zIn, zOut) 47335 sqlite3.Xsqlite3_result_text(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47336 } 47337 } 47338 47339 func testHexToUtf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 47340 var n int32 47341 var zIn uintptr 47342 var zOut uintptr 47343 47344 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 47345 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 47346 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 47347 if zOut == uintptr(0) { 47348 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 47349 } else { 47350 testHexToBin(tls, zIn, zOut) 47351 sqlite3.Xsqlite3_result_text16le(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 47352 } 47353 } 47354 47355 func real2hex(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47356 bp := tls.Alloc(28) 47357 defer tls.Free(28) 47358 47359 var i int32 47360 var bigEndian int32 47361 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(1) 47362 bigEndian = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(bp))) == 0) 47363 *(*float64)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 47364 for i = 0; i < 8; i++ { 47365 if bigEndian != 0 { 47366 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = *(*uint8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 47367 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i*2+1))) = *(*uint8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 47368 } else { 47369 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2))) = *(*uint8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 47370 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2+1))) = *(*uint8)(unsafe.Pointer(ts + 31194 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 47371 } 47372 } 47373 *(*uint8)(unsafe.Pointer(bp + 8 + 16)) = uint8(0) 47374 sqlite3.Xsqlite3_result_text(tls, context, bp+8, -1, libc.UintptrFromInt32(-1)) 47375 } 47376 47377 func test_extract(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47378 bp := tls.Alloc(72) 47379 defer tls.Free(72) 47380 47381 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 47382 var pRec uintptr 47383 var pEndHdr uintptr 47384 var pHdr uintptr 47385 var pBody uintptr 47386 47387 var iIdx int32 47388 var iCurrent int32 = 0 47389 47390 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 47391 iIdx = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 47392 47393 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp)) 47394 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp)))) 47395 47396 for iCurrent = 0; pHdr < pEndHdr && iCurrent <= iIdx; iCurrent++ { 47397 libc.Xmemset(tls, bp+8, 0, uint64(unsafe.Sizeof(Mem{}))) 47398 (*Mem)(unsafe.Pointer(bp + 8)).Fdb = db 47399 (*Mem)(unsafe.Pointer(bp + 8)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 47400 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+64)) 47401 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 64))), bp+8) 47402 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 64))))) 47403 47404 if iCurrent == iIdx { 47405 sqlite3.Xsqlite3_result_value(tls, context, bp+8) 47406 } 47407 47408 if (*Mem)(unsafe.Pointer(bp+8)).FszMalloc != 0 { 47409 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+8)).FzMalloc) 47410 } 47411 } 47412 } 47413 47414 func test_decode(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47415 bp := tls.Alloc(123) 47416 defer tls.Free(123) 47417 47418 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 47419 var pRec uintptr 47420 var pEndHdr uintptr 47421 var pHdr uintptr 47422 var pBody uintptr 47423 47424 var pRet uintptr 47425 47426 pRet = tcl.XTcl_NewObj(tls) 47427 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 47428 47429 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 47430 47431 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp+32)) 47432 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp + 32)))) 47433 for pHdr < pEndHdr { 47434 var pVal uintptr = uintptr(0) 47435 47436 libc.Xmemset(tls, bp+40, 0, uint64(unsafe.Sizeof(Mem{}))) 47437 (*Mem)(unsafe.Pointer(bp + 40)).Fdb = db 47438 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 47439 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+96)) 47440 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 96))), bp+40) 47441 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 96))))) 47442 47443 switch sqlite3.Xsqlite3_value_type(tls, bp+40) { 47444 case SQLITE_TEXT: 47445 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, bp+40), -1) 47446 break 47447 47448 case SQLITE_BLOB: 47449 { 47450 *(*[16]uint8)(unsafe.Pointer(bp + 107)) = [16]uint8{ 47451 uint8('0'), uint8('1'), uint8('2'), uint8('3'), uint8('4'), uint8('5'), uint8('6'), uint8('7'), 47452 uint8('8'), uint8('9'), uint8('a'), uint8('b'), uint8('c'), uint8('d'), uint8('e'), uint8('f'), 47453 } 47454 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, bp+40) 47455 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, bp+40) 47456 var i int32 47457 pVal = tcl.XTcl_NewStringObj(tls, ts+6334, -1) 47458 for i = 0; i < n; i++ { 47459 *(*uint8)(unsafe.Pointer(bp + 104)) = *(*uint8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))>>4&0x0F))) 47460 *(*uint8)(unsafe.Pointer(bp + 104 + 1)) = *(*uint8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))&0x0F))) 47461 *(*uint8)(unsafe.Pointer(bp + 104 + 2)) = uint8(0) 47462 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp, bp+104, 0)) 47463 } 47464 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp+16, ts+5624, 0)) 47465 break 47466 47467 } 47468 47469 case SQLITE_FLOAT: 47470 pVal = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, bp+40)) 47471 break 47472 47473 case SQLITE_INTEGER: 47474 pVal = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, bp+40)) 47475 break 47476 47477 case SQLITE_NULL: 47478 pVal = tcl.XTcl_NewStringObj(tls, ts+5846, -1) 47479 break 47480 47481 default: 47482 } 47483 47484 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, pVal) 47485 47486 if (*Mem)(unsafe.Pointer(bp+40)).FszMalloc != 0 { 47487 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+40)).FzMalloc) 47488 } 47489 } 47490 47491 sqlite3.Xsqlite3_result_text(tls, context, tcl.XTcl_GetString(tls, pRet), -1, libc.UintptrFromInt32(-1)) 47492 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 47493 var _objPtr uintptr = pRet 47494 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 47495 tcl.XTclFreeObj(tls, _objPtr) 47496 } 47497 } 47498 } 47499 47500 func test_zeroblob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47501 var nZero int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 47502 sqlite3.Xsqlite3_result_zeroblob(tls, context, nZero) 47503 } 47504 47505 func test_getsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47506 sqlite3.Xsqlite3_result_int(tls, context, int32(sqlite3.Xsqlite3_value_subtype(tls, *(*uintptr)(unsafe.Pointer(argv))))) 47507 } 47508 47509 func test_frombind(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47510 var m sqlite3_uint64 = uint64(0) 47511 var i int32 47512 for i = 0; i < argc && i < 63; i++ { 47513 if sqlite3.Xsqlite3_value_frombind(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) != 0 { 47514 m = m | uint64(1)<<i 47515 } 47516 } 47517 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3_int64(m)) 47518 } 47519 47520 func test_setsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 47521 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv))) 47522 sqlite3.Xsqlite3_result_subtype(tls, context, uint32(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 47523 } 47524 47525 func registerTestFunctions(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 47526 var i int32 47527 47528 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aFuncs))/uint64(unsafe.Sizeof(struct { 47529 FzName uintptr 47530 FnArg int8 47531 F__ccgo_pad1 [3]byte 47532 FeTextRep uint32 47533 FxFunc uintptr 47534 }{})); i++ { 47535 sqlite3.Xsqlite3_create_function(tls, db, aFuncs[i].FzName, int32(aFuncs[i].FnArg), 47536 int32(aFuncs[i].FeTextRep), uintptr(0), aFuncs[i].FxFunc, uintptr(0), uintptr(0)) 47537 } 47538 47539 sqlite3.Xsqlite3_create_function(tls, db, ts+31211, 0, SQLITE_ANY, uintptr(0), uintptr(0), 47540 *(*uintptr)(unsafe.Pointer(&struct { 47541 f func(*libc.TLS, uintptr, int32, uintptr) 47542 }{test_agg_errmsg16_step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_agg_errmsg16_final}))) 47543 47544 return SQLITE_OK 47545 } 47546 47547 var aFuncs = [20]struct { 47548 FzName uintptr 47549 FnArg int8 47550 F__ccgo_pad1 [3]byte 47551 FeTextRep uint32 47552 FxFunc uintptr 47553 }{ 47554 {FzName: ts + 31229, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47555 {FzName: ts + 31237, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47556 {FzName: ts + 31253, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47557 {FzName: ts + 31271, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47558 {FzName: ts + 31286, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47559 {FzName: ts + 31301, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47560 {FzName: ts + 31313, FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47561 {FzName: ts + 31335, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47562 {FzName: ts + 31348, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47563 {FzName: ts + 31348, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47564 {FzName: ts + 31359, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47565 {FzName: ts + 31369, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47566 {FzName: ts + 31384, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47567 {FzName: ts + 31397, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47568 {FzName: ts + 31406, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47569 {FzName: ts + 31418, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47570 {FzName: ts + 31431, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8 | SQLITE_DETERMINISTIC), FxFunc: 0}, 47571 {FzName: ts + 31445, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47572 {FzName: ts + 31461, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47573 {FzName: ts + 31477, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 47574 } 47575 47576 func autoinstall_test_funcs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47577 var rc int32 = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47578 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47579 }{registerTestFunctions}))) 47580 if rc == SQLITE_OK { 47581 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47582 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47583 }{Md5_Register}))) 47584 } 47585 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 47586 return TCL_OK 47587 } 47588 47589 func tStep(tls *libc.TLS, a uintptr, b int32, c uintptr) { 47590 } 47591 47592 func tFinal(tls *libc.TLS, a uintptr) { 47593 } 47594 47595 func abuse_create_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47596 bp := tls.Alloc(24) 47597 defer tls.Free(24) 47598 47599 var rc int32 47600 var mxArg int32 47601 47602 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0) { 47603 goto __1 47604 } 47605 return TCL_ERROR 47606 __1: 47607 ; 47608 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47609 f func(*libc.TLS, uintptr, int32, uintptr) 47610 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 47611 f func(*libc.TLS, uintptr, int32, uintptr) 47612 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 47613 if !(rc != SQLITE_MISUSE) { 47614 goto __2 47615 } 47616 goto abuse_err 47617 __2: 47618 ; 47619 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47620 f func(*libc.TLS, uintptr, int32, uintptr) 47621 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 47622 f func(*libc.TLS, uintptr, int32, uintptr) 47623 }{tStep})), uintptr(0)) 47624 if !(rc != SQLITE_MISUSE) { 47625 goto __3 47626 } 47627 goto abuse_err 47628 __3: 47629 ; 47630 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47631 f func(*libc.TLS, uintptr, int32, uintptr) 47632 }{tStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 47633 if !(rc != SQLITE_MISUSE) { 47634 goto __4 47635 } 47636 goto abuse_err 47637 __4: 47638 ; 47639 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}))) 47640 if !(rc != SQLITE_MISUSE) { 47641 goto __5 47642 } 47643 goto abuse_err 47644 __5: 47645 ; 47646 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 1, SQLITE_UTF8, uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47647 f func(*libc.TLS, uintptr, int32, uintptr) 47648 }{tStep})), uintptr(0)) 47649 if !(rc != SQLITE_MISUSE) { 47650 goto __6 47651 } 47652 goto abuse_err 47653 __6: 47654 ; 47655 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, -2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47656 f func(*libc.TLS, uintptr, int32, uintptr) 47657 }{tStep})), uintptr(0), uintptr(0)) 47658 if !(rc != SQLITE_MISUSE) { 47659 goto __7 47660 } 47661 goto abuse_err 47662 __7: 47663 ; 47664 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31491, 128, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47665 f func(*libc.TLS, uintptr, int32, uintptr) 47666 }{tStep})), uintptr(0), uintptr(0)) 47667 if !(rc != SQLITE_MISUSE) { 47668 goto __8 47669 } 47670 goto abuse_err 47671 __8: 47672 ; 47673 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 47674 ts+31494, 47675 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47676 f func(*libc.TLS, uintptr, int32, uintptr) 47677 }{tStep})), uintptr(0), uintptr(0)) 47678 if !(rc != SQLITE_MISUSE) { 47679 goto __9 47680 } 47681 goto abuse_err 47682 __9: 47683 ; 47684 sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, 10000) 47685 mxArg = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, -1) 47686 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 47687 ts+31751, 47688 mxArg, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47689 f func(*libc.TLS, uintptr, int32, uintptr) 47690 }{tStep})), uintptr(0), uintptr(0)) 47691 if !(rc != SQLITE_OK) { 47692 goto __10 47693 } 47694 goto abuse_err 47695 __10: 47696 ; 47697 return TCL_OK 47698 47699 abuse_err: 47700 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32007, 47701 uintptr(0))) 47702 return TCL_ERROR 47703 } 47704 47705 func rankfunc(tls *libc.TLS, pCtx uintptr, nVal int32, apVal uintptr) { 47706 var aMatchinfo uintptr 47707 var nMatchinfo int32 47708 var nCol int32 47709 var nPhrase int32 47710 var iPhrase int32 47711 var score float64 47712 var nHitCount int32 47713 var nGlobalHitCount int32 47714 var weight float64 47715 var iCol int32 47716 47717 var aPhraseinfo uintptr 47718 nCol = 0 47719 nPhrase = 0 47720 score = 0.0 47721 47722 if !(nVal < 1) { 47723 goto __1 47724 } 47725 goto wrong_number_args 47726 __1: 47727 ; 47728 aMatchinfo = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal))) 47729 nMatchinfo = int32(uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal)))) / uint64(unsafe.Sizeof(int32(0)))) 47730 if !(nMatchinfo >= 2) { 47731 goto __2 47732 } 47733 nPhrase = *(*int32)(unsafe.Pointer(aMatchinfo)) 47734 nCol = *(*int32)(unsafe.Pointer(aMatchinfo + 1*4)) 47735 __2: 47736 ; 47737 if !(nMatchinfo != 2+3*nCol*nPhrase) { 47738 goto __3 47739 } 47740 sqlite3.Xsqlite3_result_error(tls, pCtx, 47741 ts+32050, -1) 47742 return 47743 __3: 47744 ; 47745 if !(nVal != 1+nCol) { 47746 goto __4 47747 } 47748 goto wrong_number_args 47749 __4: 47750 ; 47751 iPhrase = 0 47752 __5: 47753 if !(iPhrase < nPhrase) { 47754 goto __7 47755 } 47756 47757 aPhraseinfo = aMatchinfo + uintptr(2+iPhrase*nCol*3)*4 47758 iCol = 0 47759 __8: 47760 if !(iCol < nCol) { 47761 goto __10 47762 } 47763 nHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol)*4)) 47764 nGlobalHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol+1)*4)) 47765 weight = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(iCol+1)*8))) 47766 if !(nHitCount > 0) { 47767 goto __11 47768 } 47769 score = score + float64(nHitCount)/float64(nGlobalHitCount)*weight 47770 __11: 47771 ; 47772 goto __9 47773 __9: 47774 iCol++ 47775 goto __8 47776 goto __10 47777 __10: 47778 ; 47779 goto __6 47780 __6: 47781 iPhrase++ 47782 goto __5 47783 goto __7 47784 __7: 47785 ; 47786 sqlite3.Xsqlite3_result_double(tls, pCtx, score) 47787 return 47788 47789 wrong_number_args: 47790 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+32099, -1) 47791 } 47792 47793 func install_fts3_rank_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47794 bp := tls.Alloc(8) 47795 defer tls.Free(8) 47796 47797 if objc != 2 { 47798 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 47799 return TCL_ERROR 47800 } 47801 47802 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 47803 return TCL_ERROR 47804 } 47805 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+32144, -1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 47806 f func(*libc.TLS, uintptr, int32, uintptr) 47807 }{rankfunc})), uintptr(0), uintptr(0)) 47808 return TCL_OK 47809 } 47810 47811 func Sqlitetest_func_Init(tls *libc.TLS, interp uintptr) int32 { 47812 var i int32 47813 47814 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd7))/uint64(unsafe.Sizeof(struct { 47815 FzName uintptr 47816 FxProc uintptr 47817 }{})); i++ { 47818 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd7[i].FzName, aObjCmd7[i].FxProc, uintptr(0), uintptr(0)) 47819 } 47820 sqlite3.Xsqlite3_initialize(tls) 47821 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47822 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47823 }{registerTestFunctions}))) 47824 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 47825 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 47826 }{Md5_Register}))) 47827 return TCL_OK 47828 } 47829 47830 var aObjCmd7 = [3]struct { 47831 FzName uintptr 47832 FxProc uintptr 47833 }{ 47834 {FzName: ts + 32149, FxProc: 0}, 47835 {FzName: ts + 32176, FxProc: 0}, 47836 {FzName: ts + 32198, FxProc: 0}, 47837 } 47838 47839 type fd_set3 = struct{ Ffds_bits [16]int64 } 47840 47841 func sqlite3TestBinToHex(tls *libc.TLS, zBuf uintptr, N int32) { 47842 bp := tls.Alloc(17) 47843 defer tls.Free(17) 47844 47845 *(*[17]uint8)(unsafe.Pointer(bp)) = *(*[17]uint8)(unsafe.Pointer(ts + 32225)) 47846 var i int32 47847 var j int32 47848 var c uint8 47849 i = N * 2 47850 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = uint8(0) 47851 for j = N - 1; j >= 0; j-- { 47852 c = *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) 47853 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)&0xf))) 47854 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)>>4))) 47855 } 47856 47857 } 47858 47859 func sqlite3TestHexToBin(tls *libc.TLS, zIn uintptr, N int32, aOut uintptr) int32 { 47860 bp := tls.Alloc(256) 47861 defer tls.Free(256) 47862 47863 *(*[256]uint8)(unsafe.Pointer(bp)) = [256]uint8{ 47864 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47865 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47866 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47867 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), 47868 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), 47869 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47870 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), 47871 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47872 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47873 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47874 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47875 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47876 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47877 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47878 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47879 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 47880 } 47881 var i int32 47882 var j int32 47883 var hi int32 = 1 47884 var c uint8 47885 47886 for i = libc.AssignInt32(&j, 0); i < N; i++ { 47887 c = *(*uint8)(unsafe.Pointer(bp + uintptr(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))))) 47888 if int32(c) == 0 { 47889 continue 47890 } 47891 if hi != 0 { 47892 *(*uint8)(unsafe.Pointer(aOut + uintptr(j))) = uint8((int32(c) - 1) << 4) 47893 hi = 0 47894 } else { 47895 *(*uint8)(unsafe.Pointer(aOut + uintptr(libc.PostIncInt32(&j, 1)))) |= uint8(int32(c) - 1) 47896 hi = 1 47897 } 47898 } 47899 return j 47900 } 47901 47902 func hexio_read(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47903 bp := tls.Alloc(48) 47904 defer tls.Free(48) 47905 47906 var got int32 47907 var zFile uintptr 47908 var zBuf uintptr 47909 var in uintptr 47910 47911 if objc != 4 { 47912 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32242) 47913 return TCL_ERROR 47914 } 47915 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 47916 return TCL_ERROR 47917 } 47918 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 47919 return TCL_ERROR 47920 } 47921 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 47922 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 44))*2+1) 47923 if zBuf == uintptr(0) { 47924 return TCL_ERROR 47925 } 47926 in = libc.Xfopen(tls, zFile, ts+4402) 47927 if in == uintptr(0) { 47928 in = libc.Xfopen(tls, zFile, ts+32262) 47929 } 47930 if in == uintptr(0) { 47931 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32264, zFile, 0)) 47932 return TCL_ERROR 47933 } 47934 libc.Xfseek(tls, in, int64(*(*int32)(unsafe.Pointer(bp + 40))), SEEK_SET) 47935 got = int32(libc.Xfread(tls, zBuf, uint64(1), uint64(*(*int32)(unsafe.Pointer(bp + 44))), in)) 47936 libc.Xfclose(tls, in) 47937 if got < 0 { 47938 got = 0 47939 } 47940 sqlite3TestBinToHex(tls, zBuf, got) 47941 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zBuf, 0)) 47942 sqlite3.Xsqlite3_free(tls, zBuf) 47943 return TCL_OK 47944 } 47945 47946 func hexio_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47947 bp := tls.Alloc(32) 47948 defer tls.Free(32) 47949 47950 var nOut int32 47951 var written int32 47952 var zFile uintptr 47953 var zIn uintptr 47954 var aOut uintptr 47955 var out uintptr 47956 47957 if objc != 4 { 47958 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32288) 47959 return TCL_ERROR 47960 } 47961 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 47962 return TCL_ERROR 47963 } 47964 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 47965 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) 47966 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp + 28))/2) 47967 if aOut == uintptr(0) { 47968 return TCL_ERROR 47969 } 47970 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp + 28)), aOut) 47971 out = libc.Xfopen(tls, zFile, ts+32312) 47972 if out == uintptr(0) { 47973 out = libc.Xfopen(tls, zFile, ts+32316) 47974 } 47975 if out == uintptr(0) { 47976 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32319, zFile, 0)) 47977 return TCL_ERROR 47978 } 47979 libc.Xfseek(tls, out, int64(*(*int32)(unsafe.Pointer(bp + 24))), SEEK_SET) 47980 written = int32(libc.Xfwrite(tls, aOut, uint64(1), uint64(nOut), out)) 47981 sqlite3.Xsqlite3_free(tls, aOut) 47982 libc.Xfclose(tls, out) 47983 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, written)) 47984 return TCL_OK 47985 } 47986 47987 func hexio_get_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47988 bp := tls.Alloc(8) 47989 defer tls.Free(8) 47990 47991 var val int32 47992 47993 var nOut int32 47994 var zIn uintptr 47995 var aOut uintptr 47996 47997 if objc != 2 { 47998 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32344) 47999 return TCL_ERROR 48000 } 48001 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 48002 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp))/2) 48003 if aOut == uintptr(0) { 48004 return TCL_ERROR 48005 } 48006 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp)), aOut) 48007 if nOut >= 4 { 48008 libc.Xmemcpy(tls, bp+4, aOut, uint64(4)) 48009 } else { 48010 libc.Xmemset(tls, bp+4, 0, uint64(unsafe.Sizeof([4]uint8{}))) 48011 libc.Xmemcpy(tls, bp+4+uintptr(4-nOut), aOut, uint64(nOut)) 48012 } 48013 sqlite3.Xsqlite3_free(tls, aOut) 48014 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))) 48015 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, val)) 48016 return TCL_OK 48017 } 48018 48019 func hexio_render_int16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48020 bp := tls.Alloc(14) 48021 defer tls.Free(14) 48022 48023 if objc != 2 { 48024 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 48025 return TCL_ERROR 48026 } 48027 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 48028 return TCL_ERROR 48029 } 48030 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 48031 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp))) 48032 sqlite3TestBinToHex(tls, bp+4, 2) 48033 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 4)) 48034 return TCL_OK 48035 } 48036 48037 func hexio_render_int32(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48038 bp := tls.Alloc(14) 48039 defer tls.Free(14) 48040 48041 if objc != 2 { 48042 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 48043 return TCL_ERROR 48044 } 48045 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 48046 return TCL_ERROR 48047 } 48048 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 24) 48049 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 16) 48050 *(*uint8)(unsafe.Pointer(bp + 4 + 2)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 48051 *(*uint8)(unsafe.Pointer(bp + 4 + 3)) = uint8(*(*int32)(unsafe.Pointer(bp))) 48052 sqlite3TestBinToHex(tls, bp+4, 4) 48053 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 8)) 48054 return TCL_OK 48055 } 48056 48057 func utf8_to_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48058 bp := tls.Alloc(16) 48059 defer tls.Free(16) 48060 48061 tcl.XTcl_AppendResult(tls, interp, 48062 libc.VaList(bp, ts+32352, 0)) 48063 return TCL_ERROR 48064 } 48065 48066 func getFts3Varint(tls *libc.TLS, p uintptr, v uintptr) int32 { 48067 var q uintptr = p 48068 var x sqlite_uint64 = uint64(0) 48069 var y sqlite_uint64 = uint64(1) 48070 for int32(*(*uint8)(unsafe.Pointer(q)))&0x80 == 0x80 { 48071 x = x + y*sqlite_uint64(int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))))&0x7f) 48072 y <<= 7 48073 } 48074 x = x + y*sqlite_uint64(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1)))) 48075 *(*sqlite_int64)(unsafe.Pointer(v)) = sqlite_int64(x) 48076 return int32((int64(q) - int64(p)) / 1) 48077 } 48078 48079 func putFts3Varint(tls *libc.TLS, p uintptr, v sqlite_int64) int32 { 48080 var q uintptr = p 48081 var vu sqlite_uint64 = sqlite_uint64(v) 48082 for __ccgo := true; __ccgo; __ccgo = vu != uint64(0) { 48083 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))) = uint8(vu&uint64(0x7f) | uint64(0x80)) 48084 vu >>= 7 48085 } 48086 *(*uint8)(unsafe.Pointer(q + libc.UintptrFromInt32(-1))) &= uint8(0x7f) 48087 48088 return int32((int64(q) - int64(p)) / 1) 48089 } 48090 48091 func read_fts3varint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48092 bp := tls.Alloc(16) 48093 defer tls.Free(16) 48094 48095 var zBlob uintptr 48096 48097 var nVal int32 48098 48099 if objc != 3 { 48100 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32406) 48101 return TCL_ERROR 48102 } 48103 zBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 48104 48105 nVal = getFts3Varint(tls, zBlob, bp+8) 48106 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))), 0) 48107 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nVal)) 48108 return TCL_OK 48109 } 48110 48111 func make_fts3record(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 48112 bp := tls.Alloc(28) 48113 defer tls.Free(28) 48114 48115 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 48116 *(*int32)(unsafe.Pointer(bp)) = 0 48117 var aOut uintptr = uintptr(0) 48118 var nOut int32 = 0 48119 var nAlloc int32 = 0 48120 var i int32 48121 48122 if objc != 2 { 48123 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32419) 48124 return TCL_ERROR 48125 } 48126 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 48127 return TCL_ERROR 48128 } 48129 48130 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 48131 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+16) { 48132 if nOut+10 > nAlloc { 48133 var nNew int32 48134 if nAlloc != 0 { 48135 nNew = nAlloc * 2 48136 } else { 48137 nNew = 128 48138 } 48139 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 48140 if aNew == uintptr(0) { 48141 sqlite3.Xsqlite3_free(tls, aOut) 48142 return TCL_ERROR 48143 } 48144 aOut = aNew 48145 nAlloc = nNew 48146 } 48147 nOut = nOut + putFts3Varint(tls, aOut+uintptr(nOut), *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 48148 } else { 48149 *(*int32)(unsafe.Pointer(bp + 24)) = 0 48150 var zVal uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+24) 48151 for nOut+*(*int32)(unsafe.Pointer(bp + 24)) > nAlloc { 48152 var nNew int32 48153 if nAlloc != 0 { 48154 nNew = nAlloc * 2 48155 } else { 48156 nNew = 128 48157 } 48158 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 48159 if aNew == uintptr(0) { 48160 sqlite3.Xsqlite3_free(tls, aOut) 48161 return TCL_ERROR 48162 } 48163 aOut = aNew 48164 nAlloc = nNew 48165 } 48166 libc.Xmemcpy(tls, aOut+uintptr(nOut), zVal, uint64(*(*int32)(unsafe.Pointer(bp + 24)))) 48167 nOut = nOut + *(*int32)(unsafe.Pointer(bp + 24)) 48168 } 48169 } 48170 48171 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, aOut, nOut)) 48172 sqlite3.Xsqlite3_free(tls, aOut) 48173 return TCL_OK 48174 } 48175 48176 func Sqlitetest_hexio_Init(tls *libc.TLS, interp uintptr) int32 { 48177 var i int32 48178 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd8))/uint64(unsafe.Sizeof(struct { 48179 FzName uintptr 48180 FxProc uintptr 48181 }{})); i++ { 48182 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd8[i].FzName, aObjCmd8[i].FxProc, uintptr(0), uintptr(0)) 48183 } 48184 return TCL_OK 48185 } 48186 48187 var aObjCmd8 = [8]struct { 48188 FzName uintptr 48189 FxProc uintptr 48190 }{ 48191 {FzName: ts + 32424, FxProc: 0}, 48192 {FzName: ts + 32435, FxProc: 0}, 48193 {FzName: ts + 32447, FxProc: 0}, 48194 {FzName: ts + 32461, FxProc: 0}, 48195 {FzName: ts + 32480, FxProc: 0}, 48196 {FzName: ts + 32499, FxProc: 0}, 48197 {FzName: ts + 32512, FxProc: 0}, 48198 {FzName: ts + 32528, FxProc: 0}, 48199 } 48200 48201 type Wrapped = struct { 48202 Fpcache sqlite3_pcache_methods2 48203 Fmem sqlite3_mem_methods 48204 Fmutex sqlite3_mutex_methods 48205 Fmem_init int32 48206 Fmem_fail int32 48207 Fmutex_init int32 48208 Fmutex_fail int32 48209 Fpcache_init int32 48210 Fpcache_fail int32 48211 } 48212 48213 var wrapped Wrapped 48214 48215 func wrMemInit(tls *libc.TLS, pAppData uintptr) int32 { 48216 var rc int32 48217 if wrapped.Fmem_fail != 0 { 48218 rc = SQLITE_ERROR 48219 } else { 48220 rc = (*struct { 48221 f func(*libc.TLS, uintptr) int32 48222 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxInit})).f(tls, wrapped.Fmem.FpAppData) 48223 } 48224 if rc == SQLITE_OK { 48225 wrapped.Fmem_init = 1 48226 } 48227 return rc 48228 } 48229 48230 func wrMemShutdown(tls *libc.TLS, pAppData uintptr) { 48231 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxShutdown})).f(tls, wrapped.Fmem.FpAppData) 48232 wrapped.Fmem_init = 0 48233 } 48234 48235 func wrMemMalloc(tls *libc.TLS, n int32) uintptr { 48236 return (*struct { 48237 f func(*libc.TLS, int32) uintptr 48238 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxMalloc})).f(tls, n) 48239 } 48240 48241 func wrMemFree(tls *libc.TLS, p uintptr) { 48242 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxFree})).f(tls, p) 48243 } 48244 48245 func wrMemRealloc(tls *libc.TLS, p uintptr, n int32) uintptr { 48246 return (*struct { 48247 f func(*libc.TLS, uintptr, int32) uintptr 48248 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRealloc})).f(tls, p, n) 48249 } 48250 48251 func wrMemSize(tls *libc.TLS, p uintptr) int32 { 48252 return (*struct { 48253 f func(*libc.TLS, uintptr) int32 48254 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxSize})).f(tls, p) 48255 } 48256 48257 func wrMemRoundup(tls *libc.TLS, n int32) int32 { 48258 return (*struct{ f func(*libc.TLS, int32) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRoundup})).f(tls, n) 48259 } 48260 48261 func wrMutexInit(tls *libc.TLS) int32 { 48262 var rc int32 48263 if wrapped.Fmutex_fail != 0 { 48264 rc = SQLITE_ERROR 48265 } else { 48266 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexInit})).f(tls) 48267 } 48268 if rc == SQLITE_OK { 48269 wrapped.Fmutex_init = 1 48270 } 48271 return rc 48272 } 48273 48274 func wrMutexEnd(tls *libc.TLS) int32 { 48275 (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnd})).f(tls) 48276 wrapped.Fmutex_init = 0 48277 return SQLITE_OK 48278 } 48279 48280 func wrMutexAlloc(tls *libc.TLS, e int32) uintptr { 48281 return (*struct { 48282 f func(*libc.TLS, int32) uintptr 48283 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexAlloc})).f(tls, e) 48284 } 48285 48286 func wrMutexFree(tls *libc.TLS, p uintptr) { 48287 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexFree})).f(tls, p) 48288 } 48289 48290 func wrMutexEnter(tls *libc.TLS, p uintptr) { 48291 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnter})).f(tls, p) 48292 } 48293 48294 func wrMutexTry(tls *libc.TLS, p uintptr) int32 { 48295 return (*struct { 48296 f func(*libc.TLS, uintptr) int32 48297 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexTry})).f(tls, p) 48298 } 48299 48300 func wrMutexLeave(tls *libc.TLS, p uintptr) { 48301 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexLeave})).f(tls, p) 48302 } 48303 48304 func wrMutexHeld(tls *libc.TLS, p uintptr) int32 { 48305 return (*struct { 48306 f func(*libc.TLS, uintptr) int32 48307 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexHeld})).f(tls, p) 48308 } 48309 48310 func wrMutexNotheld(tls *libc.TLS, p uintptr) int32 { 48311 return (*struct { 48312 f func(*libc.TLS, uintptr) int32 48313 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexNotheld})).f(tls, p) 48314 } 48315 48316 func wrPCacheInit(tls *libc.TLS, pArg uintptr) int32 { 48317 var rc int32 48318 if wrapped.Fpcache_fail != 0 { 48319 rc = SQLITE_ERROR 48320 } else { 48321 rc = (*struct { 48322 f func(*libc.TLS, uintptr) int32 48323 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxInit})).f(tls, wrapped.Fpcache.FpArg) 48324 } 48325 if rc == SQLITE_OK { 48326 wrapped.Fpcache_init = 1 48327 } 48328 return rc 48329 } 48330 48331 func wrPCacheShutdown(tls *libc.TLS, pArg uintptr) { 48332 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxShutdown})).f(tls, wrapped.Fpcache.FpArg) 48333 wrapped.Fpcache_init = 0 48334 } 48335 48336 func wrPCacheCreate(tls *libc.TLS, a int32, b int32, c int32) uintptr { 48337 return (*struct { 48338 f func(*libc.TLS, int32, int32, int32) uintptr 48339 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCreate})).f(tls, a, b, c) 48340 } 48341 48342 func wrPCacheCachesize(tls *libc.TLS, p uintptr, n int32) { 48343 (*struct { 48344 f func(*libc.TLS, uintptr, int32) 48345 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCachesize})).f(tls, p, n) 48346 } 48347 48348 func wrPCachePagecount(tls *libc.TLS, p uintptr) int32 { 48349 return (*struct { 48350 f func(*libc.TLS, uintptr) int32 48351 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxPagecount})).f(tls, p) 48352 } 48353 48354 func wrPCacheFetch(tls *libc.TLS, p uintptr, a uint32, b int32) uintptr { 48355 return (*struct { 48356 f func(*libc.TLS, uintptr, uint32, int32) uintptr 48357 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxFetch})).f(tls, p, a, b) 48358 } 48359 48360 func wrPCacheUnpin(tls *libc.TLS, p uintptr, a uintptr, b int32) { 48361 (*struct { 48362 f func(*libc.TLS, uintptr, uintptr, int32) 48363 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxUnpin})).f(tls, p, a, b) 48364 } 48365 48366 func wrPCacheRekey(tls *libc.TLS, p uintptr, a uintptr, b uint32, c uint32) { 48367 (*struct { 48368 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 48369 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxRekey})).f(tls, p, a, b, c) 48370 } 48371 48372 func wrPCacheTruncate(tls *libc.TLS, p uintptr, a uint32) { 48373 (*struct { 48374 f func(*libc.TLS, uintptr, uint32) 48375 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxTruncate})).f(tls, p, a) 48376 } 48377 48378 func wrPCacheDestroy(tls *libc.TLS, p uintptr) { 48379 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxDestroy})).f(tls, p) 48380 } 48381 48382 func installInitWrappers(tls *libc.TLS) { 48383 bp := tls.Alloc(288) 48384 defer tls.Free(288) 48385 48386 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 48)) = sqlite3_mutex_methods{ 48387 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 { 48388 f func(*libc.TLS, int32) uintptr 48389 }{wrMutexAlloc})), 48390 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 { 48391 f func(*libc.TLS, uintptr) int32 48392 }{wrMutexTry})), 48393 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexLeave})), FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 48394 f func(*libc.TLS, uintptr) int32 48395 }{wrMutexHeld})), FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 48396 f func(*libc.TLS, uintptr) int32 48397 }{wrMutexNotheld})), 48398 } 48399 *(*sqlite3_pcache_methods2)(unsafe.Pointer(bp + 184)) = sqlite3_pcache_methods2{ 48400 FiVersion: 1, 48401 FxInit: *(*uintptr)(unsafe.Pointer(&struct { 48402 f func(*libc.TLS, uintptr) int32 48403 }{wrPCacheInit})), FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheShutdown})), FxCreate: *(*uintptr)(unsafe.Pointer(&struct { 48404 f func(*libc.TLS, int32, int32, int32) uintptr 48405 }{wrPCacheCreate})), 48406 FxCachesize: *(*uintptr)(unsafe.Pointer(&struct { 48407 f func(*libc.TLS, uintptr, int32) 48408 }{wrPCacheCachesize})), FxPagecount: *(*uintptr)(unsafe.Pointer(&struct { 48409 f func(*libc.TLS, uintptr) int32 48410 }{wrPCachePagecount})), FxFetch: *(*uintptr)(unsafe.Pointer(&struct { 48411 f func(*libc.TLS, uintptr, uint32, int32) uintptr 48412 }{wrPCacheFetch})), 48413 FxUnpin: *(*uintptr)(unsafe.Pointer(&struct { 48414 f func(*libc.TLS, uintptr, uintptr, int32) 48415 }{wrPCacheUnpin})), FxRekey: *(*uintptr)(unsafe.Pointer(&struct { 48416 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 48417 }{wrPCacheRekey})), FxTruncate: *(*uintptr)(unsafe.Pointer(&struct { 48418 f func(*libc.TLS, uintptr, uint32) 48419 }{wrPCacheTruncate})), 48420 FxDestroy: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheDestroy})), 48421 } 48422 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 120)) = sqlite3_mem_methods{ 48423 FxMalloc: *(*uintptr)(unsafe.Pointer(&struct { 48424 f func(*libc.TLS, int32) uintptr 48425 }{wrMemMalloc})), FxFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemFree})), FxRealloc: *(*uintptr)(unsafe.Pointer(&struct { 48426 f func(*libc.TLS, uintptr, int32) uintptr 48427 }{wrMemRealloc})), 48428 FxSize: *(*uintptr)(unsafe.Pointer(&struct { 48429 f func(*libc.TLS, uintptr) int32 48430 }{wrMemSize})), FxRoundup: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{wrMemRoundup})), FxInit: *(*uintptr)(unsafe.Pointer(&struct { 48431 f func(*libc.TLS, uintptr) int32 48432 }{wrMemInit})), 48433 FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemShutdown})), 48434 } 48435 48436 libc.Xmemset(tls, uintptr(unsafe.Pointer(&wrapped)), 0, uint64(unsafe.Sizeof(wrapped))) 48437 48438 sqlite3.Xsqlite3_shutdown(tls) 48439 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 48440 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 48441 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 48442 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+24, bp+48)) 48443 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+120)) 48444 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+40, bp+184)) 48445 } 48446 48447 func init_wrapper_install(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48448 bp := tls.Alloc(24) 48449 defer tls.Free(24) 48450 48451 var i int32 48452 installInitWrappers(tls) 48453 for i = 1; i < objc; i++ { 48454 var z uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 48455 if libc.Xstrcmp(tls, z, ts+32544) == 0 { 48456 wrapped.Fmem_fail = 1 48457 } else if libc.Xstrcmp(tls, z, ts+29150) == 0 { 48458 wrapped.Fmutex_fail = 1 48459 } else if libc.Xstrcmp(tls, z, ts+32548) == 0 { 48460 wrapped.Fpcache_fail = 1 48461 } else { 48462 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32555, z, ts+11945)) 48463 return TCL_ERROR 48464 } 48465 } 48466 return TCL_OK 48467 } 48468 48469 func init_wrapper_uninstall(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48470 bp := tls.Alloc(24) 48471 defer tls.Free(24) 48472 48473 if objc != 1 { 48474 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48475 return TCL_ERROR 48476 } 48477 48478 sqlite3.Xsqlite3_shutdown(tls) 48479 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 48480 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 48481 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 48482 return TCL_OK 48483 } 48484 48485 func init_wrapper_clear(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48486 if objc != 1 { 48487 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48488 return TCL_ERROR 48489 } 48490 48491 wrapped.Fmem_fail = 0 48492 wrapped.Fmutex_fail = 0 48493 wrapped.Fpcache_fail = 0 48494 return TCL_OK 48495 } 48496 48497 func init_wrapper_query(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48498 var pRet uintptr 48499 48500 if objc != 1 { 48501 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 48502 return TCL_ERROR 48503 } 48504 48505 pRet = tcl.XTcl_NewObj(tls) 48506 if wrapped.Fmutex_init != 0 { 48507 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+29150, -1)) 48508 } 48509 if wrapped.Fmem_init != 0 { 48510 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32544, -1)) 48511 } 48512 if wrapped.Fpcache_init != 0 { 48513 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32548, -1)) 48514 } 48515 48516 tcl.XTcl_SetObjResult(tls, interp, pRet) 48517 return TCL_OK 48518 } 48519 48520 func Sqlitetest_init_Init(tls *libc.TLS, interp uintptr) int32 { 48521 var i int32 48522 48523 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd9))/uint64(unsafe.Sizeof(struct { 48524 FzName uintptr 48525 FxProc uintptr 48526 }{})); i++ { 48527 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd9[i].FzName, aObjCmd9[i].FxProc, uintptr(0), uintptr(0)) 48528 } 48529 48530 return TCL_OK 48531 } 48532 48533 var aObjCmd9 = [4]struct { 48534 FzName uintptr 48535 FxProc uintptr 48536 }{ 48537 {FzName: ts + 32575, FxProc: 0}, 48538 {FzName: ts + 32596, FxProc: 0}, 48539 {FzName: ts + 32615, FxProc: 0}, 48540 {FzName: ts + 32638, FxProc: 0}, 48541 } 48542 48543 type sqlite3_intarray1 = struct { 48544 Fn int32 48545 F__ccgo_pad1 [4]byte 48546 Fa uintptr 48547 FxFree uintptr 48548 } 48549 48550 type sqlite3_intarray = sqlite3_intarray1 48551 48552 type intarray_vtab1 = struct { 48553 Fbase sqlite3_vtab 48554 FpContent uintptr 48555 } 48556 48557 type intarray_vtab = intarray_vtab1 48558 type intarray_cursor1 = struct { 48559 Fbase sqlite3_vtab_cursor 48560 Fi int32 48561 F__ccgo_pad1 [4]byte 48562 } 48563 48564 type intarray_cursor = intarray_cursor1 48565 48566 func intarrayFree(tls *libc.TLS, p uintptr) { 48567 if (*sqlite3_intarray)(unsafe.Pointer(p)).FxFree != 0 { 48568 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(p)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(p)).Fa) 48569 } 48570 sqlite3.Xsqlite3_free(tls, p) 48571 } 48572 48573 func intarrayDestroy(tls *libc.TLS, p uintptr) int32 { 48574 var pVtab uintptr = p 48575 sqlite3.Xsqlite3_free(tls, pVtab) 48576 return 0 48577 } 48578 48579 func intarrayCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 48580 var rc int32 = SQLITE_NOMEM 48581 var pVtab uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_vtab{}))) 48582 48583 if pVtab != 0 { 48584 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(intarray_vtab{}))) 48585 (*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent = pAux 48586 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+32657) 48587 } 48588 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 48589 return rc 48590 } 48591 48592 func intarrayOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 48593 var rc int32 = SQLITE_NOMEM 48594 var pCur uintptr 48595 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_cursor{}))) 48596 if pCur != 0 { 48597 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(intarray_cursor{}))) 48598 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 48599 rc = SQLITE_OK 48600 } 48601 return rc 48602 } 48603 48604 func intarrayClose(tls *libc.TLS, cur uintptr) int32 { 48605 var pCur uintptr = cur 48606 sqlite3.Xsqlite3_free(tls, pCur) 48607 return SQLITE_OK 48608 } 48609 48610 func intarrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 48611 var pCur uintptr = cur 48612 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 48613 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 { 48614 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))) 48615 } 48616 return SQLITE_OK 48617 } 48618 48619 func intarrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 48620 var pCur uintptr = cur 48621 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*intarray_cursor)(unsafe.Pointer(pCur)).Fi) 48622 return SQLITE_OK 48623 } 48624 48625 func intarrayEof(tls *libc.TLS, cur uintptr) int32 { 48626 var pCur uintptr = cur 48627 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 48628 return libc.Bool32((*intarray_cursor)(unsafe.Pointer(pCur)).Fi >= (*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fn) 48629 } 48630 48631 func intarrayNext(tls *libc.TLS, cur uintptr) int32 { 48632 var pCur uintptr = cur 48633 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi++ 48634 return SQLITE_OK 48635 } 48636 48637 func intarrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 48638 var pCur uintptr = pVtabCursor 48639 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi = 0 48640 return SQLITE_OK 48641 } 48642 48643 func intarrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 48644 return SQLITE_OK 48645 } 48646 48647 var intarrayModule = sqlite3_module{ 48648 FxCreate: 0, 48649 FxConnect: 0, 48650 FxBestIndex: 0, 48651 FxDisconnect: 0, 48652 FxDestroy: 0, 48653 FxOpen: 0, 48654 FxClose: 0, 48655 FxFilter: 0, 48656 FxNext: 0, 48657 FxEof: 0, 48658 FxColumn: 0, 48659 FxRowid: 0, 48660 } 48661 48662 func sqlite3_intarray_create(tls *libc.TLS, db uintptr, zName uintptr, ppReturn uintptr) int32 { 48663 bp := tls.Alloc(16) 48664 defer tls.Free(16) 48665 48666 var rc int32 = SQLITE_OK 48667 var p uintptr 48668 48669 *(*uintptr)(unsafe.Pointer(ppReturn)) = libc.AssignUintptr(&p, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_intarray{})))) 48670 if p == uintptr(0) { 48671 return SQLITE_NOMEM 48672 } 48673 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(sqlite3_intarray{}))) 48674 rc = sqlite3.Xsqlite3_create_module_v2(tls, db, zName, uintptr(unsafe.Pointer(&intarrayModule)), p, 48675 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{intarrayFree}))) 48676 if rc == SQLITE_OK { 48677 var zSql uintptr 48678 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+32699, 48679 libc.VaList(bp, zName, zName)) 48680 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 48681 sqlite3.Xsqlite3_free(tls, zSql) 48682 } 48683 return rc 48684 } 48685 48686 func sqlite3_intarray_bind(tls *libc.TLS, pIntArray uintptr, nElements int32, aElements uintptr, xFree uintptr) int32 { 48687 if (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree != 0 { 48688 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa) 48689 } 48690 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fn = nElements 48691 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa = aElements 48692 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree = xFree 48693 return SQLITE_OK 48694 } 48695 48696 func test_intarray_create(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48697 bp := tls.Alloc(148) 48698 defer tls.Free(148) 48699 48700 var zName uintptr 48701 48702 var rc int32 = SQLITE_OK 48703 48704 if objc != 3 { 48705 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 48706 return TCL_ERROR 48707 } 48708 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 48709 return TCL_ERROR 48710 } 48711 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 48712 rc = sqlite3_intarray_create(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, bp+40) 48713 if rc != SQLITE_OK { 48714 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 48715 return TCL_ERROR 48716 } 48717 sqlite3TestMakePointerStr(tls, interp, bp+48, *(*uintptr)(unsafe.Pointer(bp + 40))) 48718 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, bp+48, uintptr(0))) 48719 return TCL_OK 48720 } 48721 48722 func test_intarray_bind(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48723 bp := tls.Alloc(40) 48724 defer tls.Free(40) 48725 48726 var pArray uintptr 48727 var rc int32 = SQLITE_OK 48728 var i int32 48729 var n int32 48730 var a uintptr 48731 48732 if objc < 2 { 48733 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32737) 48734 return TCL_ERROR 48735 } 48736 pArray = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 48737 n = objc - 2 48738 a = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(n)) 48739 if a == uintptr(0) { 48740 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32746, uintptr(0))) 48741 return TCL_ERROR 48742 } 48743 for i = 0; i < n; i++ { 48744 *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) = int64(0) 48745 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + uintptr(i+2)*8)), bp+32) 48746 *(*sqlite3_int64)(unsafe.Pointer(a + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) 48747 } 48748 rc = sqlite3_intarray_bind(tls, pArray, n, a, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 48749 if rc != SQLITE_OK { 48750 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 48751 return TCL_ERROR 48752 } 48753 return TCL_OK 48754 } 48755 48756 func Sqlitetestintarray_Init(tls *libc.TLS, interp uintptr) int32 { 48757 var i int32 48758 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd10))/uint64(unsafe.Sizeof(struct { 48759 FzName uintptr 48760 FxProc uintptr 48761 FclientData uintptr 48762 }{})); i++ { 48763 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd10[i].FzName, 48764 aObjCmd10[i].FxProc, aObjCmd10[i].FclientData, uintptr(0)) 48765 } 48766 return TCL_OK 48767 } 48768 48769 var aObjCmd10 = [2]struct { 48770 FzName uintptr 48771 FxProc uintptr 48772 FclientData uintptr 48773 }{ 48774 {FzName: ts + 32759, FxProc: 0}, 48775 {FzName: ts + 32783, FxProc: 0}, 48776 } 48777 48778 type jt_file1 = struct { 48779 Fbase sqlite3_file 48780 FzName uintptr 48781 Fflags int32 48782 FeLock int32 48783 FnPage u32 48784 FnPagesize u32 48785 FpWritable uintptr 48786 FaCksum uintptr 48787 FnSync int32 48788 F__ccgo_pad1 [4]byte 48789 FiMaxOff sqlite3_int64 48790 FpNext uintptr 48791 FpReal uintptr 48792 } 48793 48794 type jt_file = jt_file1 48795 48796 var jt_vfs = sqlite3_vfs{ 48797 FiVersion: 2, 48798 FszOsFile: int32(unsafe.Sizeof(jt_file{})), 48799 FmxPathname: JT_MAX_PATHNAME, 48800 FzName: ts + 32805, 48801 FxOpen: 0, 48802 FxDelete: 0, 48803 FxAccess: 0, 48804 FxFullPathname: 0, 48805 FxDlOpen: 0, 48806 FxDlError: 0, 48807 FxDlSym: 0, 48808 FxDlClose: 0, 48809 FxRandomness: 0, 48810 FxSleep: 0, 48811 FxCurrentTime: 0, 48812 FxGetLastError: 0, 48813 FxCurrentTimeInt64: 0, 48814 } 48815 48816 var jt_io_methods = sqlite3_io_methods{ 48817 FiVersion: 1, 48818 FxClose: 0, 48819 FxRead: 0, 48820 FxWrite: 0, 48821 FxTruncate: 0, 48822 FxSync: 0, 48823 FxFileSize: 0, 48824 FxLock: 0, 48825 FxUnlock: 0, 48826 FxCheckReservedLock: 0, 48827 FxFileControl: 0, 48828 FxSectorSize: 0, 48829 FxDeviceCharacteristics: 0, 48830 } 48831 48832 type JtGlobal = struct { 48833 FpVfs uintptr 48834 FpList uintptr 48835 } 48836 48837 var g2 = JtGlobal{} 48838 48839 func enterJtMutex(tls *libc.TLS) { 48840 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 48841 } 48842 48843 func leaveJtMutex(tls *libc.TLS) { 48844 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 48845 } 48846 48847 func stop_ioerr_simulation(tls *libc.TLS, piSave uintptr, piSave2 uintptr) { 48848 *(*int32)(unsafe.Pointer(piSave)) = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 48849 *(*int32)(unsafe.Pointer(piSave2)) = sqlite3.Xsqlite3_io_error_hit 48850 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(-1)) 48851 sqlite3.Xsqlite3_io_error_hit = 0 48852 } 48853 48854 func start_ioerr_simulation(tls *libc.TLS, iSave int32, iSave2 int32) { 48855 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, iSave) 48856 sqlite3.Xsqlite3_io_error_hit = iSave2 48857 } 48858 48859 func closeTransaction(tls *libc.TLS, p uintptr) { 48860 sqlite3.Xsqlite3BitvecDestroy(tls, (*jt_file)(unsafe.Pointer(p)).FpWritable) 48861 sqlite3.Xsqlite3_free(tls, (*jt_file)(unsafe.Pointer(p)).FaCksum) 48862 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 48863 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 48864 (*jt_file)(unsafe.Pointer(p)).FnSync = 0 48865 } 48866 48867 func jtClose(tls *libc.TLS, pFile uintptr) int32 { 48868 var pp uintptr 48869 var p uintptr = pFile 48870 48871 closeTransaction(tls, p) 48872 enterJtMutex(tls) 48873 if (*jt_file)(unsafe.Pointer(p)).FzName != 0 { 48874 for pp = uintptr(unsafe.Pointer(&g2)) + 8; *(*uintptr)(unsafe.Pointer(pp)) != p; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 48875 } 48876 *(*uintptr)(unsafe.Pointer(pp)) = (*jt_file)(unsafe.Pointer(p)).FpNext 48877 } 48878 leaveJtMutex(tls) 48879 sqlite3.Xsqlite3OsClose(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 48880 return SQLITE_OK 48881 } 48882 48883 func jtRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48884 var p uintptr = pFile 48885 return sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48886 } 48887 48888 func locateDatabaseHandle(tls *libc.TLS, zJournal uintptr, noLock int32) uintptr { 48889 var pMain uintptr = uintptr(0) 48890 enterJtMutex(tls) 48891 for pMain = g2.FpList; pMain != 0; pMain = (*jt_file)(unsafe.Pointer(pMain)).FpNext { 48892 var nName int32 = int32(libc.Xstrlen(tls, zJournal) - libc.Xstrlen(tls, ts+32808)) 48893 if (*jt_file)(unsafe.Pointer(pMain)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && 48894 int32(libc.Xstrlen(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName)) == nName && 48895 0 == libc.Xmemcmp(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName, zJournal, uint64(nName)) && 48896 ((*jt_file)(unsafe.Pointer(pMain)).FeLock >= SQLITE_LOCK_RESERVED || noLock != 0) { 48897 break 48898 } 48899 } 48900 leaveJtMutex(tls) 48901 return pMain 48902 } 48903 48904 func decodeUint32(tls *libc.TLS, z uintptr) u32 { 48905 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)))) 48906 } 48907 48908 func genCksum(tls *libc.TLS, z uintptr, n int32) u32 { 48909 var i int32 48910 var cksum u32 = u32(0) 48911 for i = 0; i < n; i++ { 48912 cksum = cksum + u32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) + cksum<<3 48913 } 48914 return cksum 48915 } 48916 48917 func decodeJournalHdr(tls *libc.TLS, zBuf uintptr, pnRec uintptr, pnPage uintptr, pnSector uintptr, pnPagesize uintptr) int32 { 48918 bp := tls.Alloc(8) 48919 defer tls.Free(8) 48920 48921 *(*[8]uint8)(unsafe.Pointer(bp)) = [8]uint8{uint8(0xd9), uint8(0xd5), uint8(0x05), uint8(0xf9), uint8(0x20), uint8(0xa1), uint8(0x63), uint8(0xd7)} 48922 if libc.Xmemcmp(tls, bp, zBuf, uint64(8)) != 0 { 48923 return SQLITE_ERROR 48924 } 48925 if pnRec != 0 { 48926 *(*u32)(unsafe.Pointer(pnRec)) = decodeUint32(tls, zBuf+8) 48927 } 48928 if pnPage != 0 { 48929 *(*u32)(unsafe.Pointer(pnPage)) = decodeUint32(tls, zBuf+16) 48930 } 48931 if pnSector != 0 { 48932 *(*u32)(unsafe.Pointer(pnSector)) = decodeUint32(tls, zBuf+20) 48933 } 48934 if pnPagesize != 0 { 48935 *(*u32)(unsafe.Pointer(pnPagesize)) = decodeUint32(tls, zBuf+24) 48936 } 48937 return SQLITE_OK 48938 } 48939 48940 func openTransaction(tls *libc.TLS, pMain uintptr, pJournal uintptr) int32 { 48941 bp := tls.Alloc(8) 48942 defer tls.Free(8) 48943 48944 var aData uintptr 48945 var p uintptr = (*jt_file)(unsafe.Pointer(pMain)).FpReal 48946 var rc int32 = SQLITE_OK 48947 48948 closeTransaction(tls, pMain) 48949 aData = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48950 (*jt_file)(unsafe.Pointer(pMain)).FpWritable = sqlite3.Xsqlite3BitvecCreate(tls, (*jt_file)(unsafe.Pointer(pMain)).FnPage) 48951 (*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)))) 48952 (*jt_file)(unsafe.Pointer(pJournal)).FiMaxOff = int64(0) 48953 48954 if !(int32((*jt_file)(unsafe.Pointer(pMain)).FpWritable) != 0) || !(int32((*jt_file)(unsafe.Pointer(pMain)).FaCksum) != 0) || !(aData != 0) { 48955 rc = SQLITE_IOERR | int32(12)<<8 48956 } else if (*jt_file)(unsafe.Pointer(pMain)).FnPage > u32(0) { 48957 var iTrunk u32 48958 48959 stop_ioerr_simulation(tls, bp, bp+4) 48960 48961 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), int64(0)) 48962 if rc == SQLITE_OK { 48963 var nDbsize u32 = decodeUint32(tls, aData+28) 48964 if nDbsize > u32(0) && libc.Xmemcmp(tls, aData+24, aData+92, uint64(4)) == 0 { 48965 var iPg u32 48966 for iPg = nDbsize + u32(1); iPg <= (*jt_file)(unsafe.Pointer(pMain)).FnPage; iPg++ { 48967 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, iPg) 48968 } 48969 } 48970 } 48971 iTrunk = decodeUint32(tls, aData+32) 48972 for rc == SQLITE_OK && iTrunk > u32(0) { 48973 var nLeaf u32 48974 var iLeaf u32 48975 var iOff sqlite3_int64 = i64(iTrunk-u32(1)) * i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 48976 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 48977 nLeaf = decodeUint32(tls, aData+4) 48978 for iLeaf = u32(0); rc == SQLITE_OK && iLeaf < nLeaf; iLeaf++ { 48979 var pgno u32 = decodeUint32(tls, aData+uintptr(u32(8)+u32(4)*iLeaf)) 48980 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 48981 } 48982 iTrunk = decodeUint32(tls, aData) 48983 } 48984 48985 if rc == SQLITE_OK { 48986 var ii int32 48987 for ii = 0; rc == SQLITE_OK && ii < int32((*jt_file)(unsafe.Pointer(pMain)).FnPage); ii++ { 48988 var iOff i64 = i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) * i64(ii) 48989 if iOff == i64(sqlite3.Xsqlite3PendingByte) { 48990 continue 48991 } 48992 rc = sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(pMain)).FpReal, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 48993 *(*u32)(unsafe.Pointer((*jt_file)(unsafe.Pointer(pMain)).FaCksum + uintptr(ii)*4)) = genCksum(tls, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 48994 if ii+1 == int32((*jt_file)(unsafe.Pointer(pMain)).FnPage) && rc == SQLITE_IOERR|int32(2)<<8 { 48995 rc = SQLITE_OK 48996 } 48997 } 48998 } 48999 49000 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 49001 } 49002 49003 sqlite3.Xsqlite3_free(tls, aData) 49004 return rc 49005 } 49006 49007 func readJournalFile(tls *libc.TLS, p uintptr, pMain uintptr) int32 { 49008 bp := tls.Alloc(52) 49009 defer tls.Free(52) 49010 49011 var rc int32 49012 49013 var pReal uintptr 49014 var iOff sqlite3_int64 49015 var iSize sqlite3_int64 49016 var aPage uintptr 49017 49018 var cksum u32 49019 _ = cksum 49020 var pgno u32 49021 49022 var ii u32 49023 rc = SQLITE_OK 49024 pReal = (*jt_file)(unsafe.Pointer(p)).FpReal 49025 iOff = int64(0) 49026 iSize = (*jt_file)(unsafe.Pointer(p)).FiMaxOff 49027 49028 aPage = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 49029 if !!(aPage != 0) { 49030 goto __1 49031 } 49032 return SQLITE_IOERR | int32(12)<<8 49033 __1: 49034 ; 49035 stop_ioerr_simulation(tls, bp, bp+4) 49036 49037 __2: 49038 if !(rc == SQLITE_OK && iOff < iSize) { 49039 goto __3 49040 } 49041 49042 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 49043 if !(rc != SQLITE_OK || 49044 decodeJournalHdr(tls, bp+8, bp+36, bp+40, bp+44, bp+48) != 0) { 49045 goto __4 49046 } 49047 goto finish_rjf 49048 __4: 49049 ; 49050 iOff = iOff + sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) 49051 49052 if !(*(*u32)(unsafe.Pointer(bp + 36)) == u32(0)) { 49053 goto __5 49054 } 49055 49056 if !(iSize >= iOff+sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44)))) { 49057 goto __6 49058 } 49059 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 49060 if !(rc != SQLITE_OK || 0 == decodeJournalHdr(tls, bp+8, uintptr(0), uintptr(0), uintptr(0), uintptr(0))) { 49061 goto __7 49062 } 49063 goto __2 49064 __7: 49065 ; 49066 __6: 49067 ; 49068 *(*u32)(unsafe.Pointer(bp + 36)) = u32((iSize - iOff) / sqlite3_int64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize+u32(8))) 49069 __5: 49070 ; 49071 ii = u32(0) 49072 __8: 49073 if !(rc == SQLITE_OK && ii < *(*u32)(unsafe.Pointer(bp + 36)) && iOff < iSize) { 49074 goto __10 49075 } 49076 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 4, iOff) 49077 if !(rc == SQLITE_OK) { 49078 goto __11 49079 } 49080 pgno = decodeUint32(tls, bp+8) 49081 if !(pgno > u32(0) && pgno <= (*jt_file)(unsafe.Pointer(pMain)).FnPage) { 49082 goto __12 49083 } 49084 if !(0 == sqlite3.Xsqlite3BitvecTest(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno)) { 49085 goto __13 49086 } 49087 rc = sqlite3.Xsqlite3OsRead(tls, pReal, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff+int64(4)) 49088 if !(rc == SQLITE_OK) { 49089 goto __14 49090 } 49091 cksum = genCksum(tls, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 49092 49093 __14: 49094 ; 49095 __13: 49096 ; 49097 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 49098 __12: 49099 ; 49100 iOff = iOff + sqlite3_int64(u32(8)+(*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 49101 __11: 49102 ; 49103 goto __9 49104 __9: 49105 ii++ 49106 goto __8 49107 goto __10 49108 __10: 49109 ; 49110 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))) 49111 goto __2 49112 __3: 49113 ; 49114 finish_rjf: 49115 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 49116 sqlite3.Xsqlite3_free(tls, aPage) 49117 if !(rc == SQLITE_IOERR|int32(2)<<8) { 49118 goto __15 49119 } 49120 rc = SQLITE_OK 49121 __15: 49122 ; 49123 return rc 49124 } 49125 49126 func jtWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 49127 var rc int32 49128 var p uintptr = pFile 49129 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 49130 if iOfst == int64(0) { 49131 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 49132 49133 if iAmt == 28 { 49134 closeTransaction(tls, pMain) 49135 } else if iAmt != 12 { 49136 var z uintptr = zBuf 49137 (*jt_file)(unsafe.Pointer(pMain)).FnPage = decodeUint32(tls, z+16) 49138 (*jt_file)(unsafe.Pointer(pMain)).FnPagesize = decodeUint32(tls, z+24) 49139 if SQLITE_OK != libc.AssignInt32(&rc, openTransaction(tls, pMain, p)) { 49140 return rc 49141 } 49142 } 49143 } 49144 if (*jt_file)(unsafe.Pointer(p)).FiMaxOff < iOfst+sqlite_int64(iAmt) { 49145 (*jt_file)(unsafe.Pointer(p)).FiMaxOff = iOfst + sqlite_int64(iAmt) 49146 } 49147 } 49148 49149 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 49150 if iAmt < int32((*jt_file)(unsafe.Pointer(p)).FnPagesize) && 49151 (*jt_file)(unsafe.Pointer(p)).FnPagesize%u32(iAmt) == u32(0) && 49152 iOfst >= sqlite_int64(sqlite3.Xsqlite3PendingByte+512) && 49153 iOfst+sqlite_int64(iAmt) <= sqlite_int64(u32(sqlite3.Xsqlite3PendingByte)+(*jt_file)(unsafe.Pointer(p)).FnPagesize) { 49154 } else { 49155 var pgno u32 = u32(iOfst/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)) 49156 _ = pgno 49157 49158 } 49159 } 49160 49161 rc = sqlite3.Xsqlite3OsWrite(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 49162 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && iAmt == 12 { 49163 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 49164 var rc2 int32 = readJournalFile(tls, p, pMain) 49165 if rc == SQLITE_OK { 49166 rc = rc2 49167 } 49168 } 49169 return rc 49170 } 49171 49172 func jtTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 49173 var p uintptr = pFile 49174 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && size == int64(0) { 49175 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 49176 closeTransaction(tls, pMain) 49177 } 49178 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 49179 var pgno u32 49180 var locking_page u32 = u32(sqlite3.Xsqlite3PendingByte)/(*jt_file)(unsafe.Pointer(p)).FnPagesize + u32(1) 49181 _ = locking_page 49182 for pgno = u32(size/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)); pgno <= (*jt_file)(unsafe.Pointer(p)).FnPage; pgno++ { 49183 } 49184 } 49185 return sqlite3.Xsqlite3OsTruncate(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, size) 49186 } 49187 49188 func jtSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 49189 var p uintptr = pFile 49190 49191 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 49192 var rc int32 49193 var pMain uintptr 49194 49195 pMain = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 49196 49197 if pMain != 0 && (*jt_file)(unsafe.Pointer(pMain)).FpWritable != 0 { 49198 (*jt_file)(unsafe.Pointer(pMain)).FnSync++ 49199 rc = readJournalFile(tls, p, pMain) 49200 if rc != SQLITE_OK { 49201 return rc 49202 } 49203 } 49204 } 49205 49206 return sqlite3.Xsqlite3OsSync(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, flags) 49207 } 49208 49209 func jtFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 49210 var p uintptr = pFile 49211 return sqlite3.Xsqlite3OsFileSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pSize) 49212 } 49213 49214 func jtLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 49215 var rc int32 49216 var p uintptr = pFile 49217 rc = sqlite3.Xsqlite3OsLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 49218 if rc == SQLITE_OK && eLock > (*jt_file)(unsafe.Pointer(p)).FeLock { 49219 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 49220 } 49221 return rc 49222 } 49223 49224 func jtUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 49225 var rc int32 49226 var p uintptr = pFile 49227 rc = sqlite3.Xsqlite3OsUnlock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 49228 if rc == SQLITE_OK && eLock < (*jt_file)(unsafe.Pointer(p)).FeLock { 49229 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 49230 } 49231 return rc 49232 } 49233 49234 func jtCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 49235 var p uintptr = pFile 49236 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pResOut) 49237 } 49238 49239 func jtFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 49240 var p uintptr = pFile 49241 return (*struct { 49242 f func(*libc.TLS, uintptr, int32, uintptr) int32 49243 })(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) 49244 } 49245 49246 func jtSectorSize(tls *libc.TLS, pFile uintptr) int32 { 49247 var p uintptr = pFile 49248 return sqlite3.Xsqlite3OsSectorSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 49249 } 49250 49251 func jtDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 49252 var p uintptr = pFile 49253 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 49254 } 49255 49256 func jtOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 49257 var rc int32 49258 var p uintptr = pFile 49259 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 49260 (*jt_file)(unsafe.Pointer(p)).FpReal = p + 1*80 49261 (*sqlite3_file)(unsafe.Pointer((*jt_file)(unsafe.Pointer(p)).FpReal)).FpMethods = uintptr(0) 49262 rc = sqlite3.Xsqlite3OsOpen(tls, g2.FpVfs, zName, (*jt_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 49263 49264 if rc == SQLITE_OK { 49265 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&jt_io_methods)) 49266 (*jt_file)(unsafe.Pointer(p)).FeLock = 0 49267 (*jt_file)(unsafe.Pointer(p)).FzName = zName 49268 (*jt_file)(unsafe.Pointer(p)).Fflags = flags 49269 (*jt_file)(unsafe.Pointer(p)).FpNext = uintptr(0) 49270 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 49271 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 49272 enterJtMutex(tls) 49273 if zName != 0 { 49274 (*jt_file)(unsafe.Pointer(p)).FpNext = g2.FpList 49275 g2.FpList = p 49276 } 49277 leaveJtMutex(tls) 49278 } 49279 return rc 49280 } 49281 49282 func jtDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 49283 var nPath int32 = int32(libc.Xstrlen(tls, zPath)) 49284 if nPath > 8 && 0 == libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nPath-8)) { 49285 var pMain uintptr = locateDatabaseHandle(tls, zPath, 0) 49286 if pMain != 0 { 49287 closeTransaction(tls, pMain) 49288 } 49289 } 49290 49291 return sqlite3.Xsqlite3OsDelete(tls, g2.FpVfs, zPath, dirSync) 49292 } 49293 49294 func jtAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 49295 return sqlite3.Xsqlite3OsAccess(tls, g2.FpVfs, zPath, flags, pResOut) 49296 } 49297 49298 func jtFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 49299 return sqlite3.Xsqlite3OsFullPathname(tls, g2.FpVfs, zPath, nOut, zOut) 49300 } 49301 49302 func jtDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 49303 return (*struct { 49304 f func(*libc.TLS, uintptr, uintptr) uintptr 49305 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlOpen})).f(tls, g2.FpVfs, zPath) 49306 } 49307 49308 func jtDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 49309 (*struct { 49310 f func(*libc.TLS, uintptr, int32, uintptr) 49311 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlError})).f(tls, g2.FpVfs, nByte, zErrMsg) 49312 } 49313 49314 func jtDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 49315 return (*struct { 49316 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 49317 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlSym})).f(tls, g2.FpVfs, p, zSym) 49318 } 49319 49320 func jtDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 49321 (*struct { 49322 f func(*libc.TLS, uintptr, uintptr) 49323 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlClose})).f(tls, g2.FpVfs, pHandle) 49324 } 49325 49326 func jtRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 49327 return sqlite3.Xsqlite3OsRandomness(tls, g2.FpVfs, nByte, zBufOut) 49328 } 49329 49330 func jtSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 49331 return sqlite3.Xsqlite3OsSleep(tls, g2.FpVfs, nMicro) 49332 } 49333 49334 func jtCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 49335 return (*struct { 49336 f func(*libc.TLS, uintptr, uintptr) int32 49337 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTime})).f(tls, g2.FpVfs, pTimeOut) 49338 } 49339 49340 func jtCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 49341 return (*struct { 49342 f func(*libc.TLS, uintptr, uintptr) int32 49343 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64})).f(tls, g2.FpVfs, pTimeOut) 49344 } 49345 49346 func jtGetLastError(tls *libc.TLS, pVfs uintptr, n int32, z uintptr) int32 { 49347 return (*struct { 49348 f func(*libc.TLS, uintptr, int32, uintptr) int32 49349 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxGetLastError})).f(tls, g2.FpVfs, n, z) 49350 } 49351 49352 func jt_register(tls *libc.TLS, zWrap uintptr, isDefault int32) int32 { 49353 g2.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, zWrap) 49354 if g2.FpVfs == uintptr(0) { 49355 return SQLITE_ERROR 49356 } 49357 jt_vfs.FszOsFile = int32(uint64(unsafe.Sizeof(jt_file{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FszOsFile)) 49358 if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FiVersion == 1 { 49359 jt_vfs.FiVersion = 1 49360 } else if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64 == uintptr(0) { 49361 jt_vfs.FxCurrentTimeInt64 = uintptr(0) 49362 } 49363 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&jt_vfs)), isDefault) 49364 return SQLITE_OK 49365 } 49366 49367 func jt_unregister(tls *libc.TLS) { 49368 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&jt_vfs))) 49369 } 49370 49371 type MemFault = struct { 49372 FiCountdown int32 49373 FnRepeat int32 49374 FnBenign int32 49375 FnFail int32 49376 FnOkBefore int32 49377 FnOkAfter int32 49378 Fenable u8 49379 F__ccgo_pad1 [3]byte 49380 FisInstalled int32 49381 FisBenignMode int32 49382 F__ccgo_pad2 [4]byte 49383 Fm sqlite3_mem_methods 49384 } 49385 49386 var memfault MemFault 49387 49388 func sqlite3Fault(tls *libc.TLS) { 49389 cnt1++ 49390 } 49391 49392 var cnt1 int32 = 0 49393 49394 func sqlite3FirstFault(tls *libc.TLS) { 49395 cnt2++ 49396 } 49397 49398 var cnt2 int32 = 0 49399 49400 func faultsimStep(tls *libc.TLS) int32 { 49401 if !(int32(memfault.Fenable) != 0) { 49402 memfault.FnOkAfter++ 49403 return 0 49404 } 49405 if memfault.FiCountdown > 0 { 49406 memfault.FiCountdown-- 49407 memfault.FnOkBefore++ 49408 return 0 49409 } 49410 if memfault.FnFail == 0 { 49411 sqlite3FirstFault(tls) 49412 } 49413 sqlite3Fault(tls) 49414 memfault.FnFail++ 49415 if memfault.FisBenignMode > 0 { 49416 memfault.FnBenign++ 49417 } 49418 memfault.FnRepeat-- 49419 if memfault.FnRepeat <= 0 { 49420 memfault.Fenable = u8(0) 49421 } 49422 return 1 49423 } 49424 49425 func faultsimMalloc(tls *libc.TLS, n int32) uintptr { 49426 var p uintptr = uintptr(0) 49427 if !(faultsimStep(tls) != 0) { 49428 p = (*struct { 49429 f func(*libc.TLS, int32) uintptr 49430 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxMalloc})).f(tls, n) 49431 } 49432 return p 49433 } 49434 49435 func faultsimRealloc(tls *libc.TLS, pOld uintptr, n int32) uintptr { 49436 var p uintptr = uintptr(0) 49437 if !(faultsimStep(tls) != 0) { 49438 p = (*struct { 49439 f func(*libc.TLS, uintptr, int32) uintptr 49440 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxRealloc})).f(tls, pOld, n) 49441 } 49442 return p 49443 } 49444 49445 func faultsimConfig(tls *libc.TLS, nDelay int32, nRepeat int32) { 49446 memfault.FiCountdown = nDelay 49447 memfault.FnRepeat = nRepeat 49448 memfault.FnBenign = 0 49449 memfault.FnFail = 0 49450 memfault.FnOkBefore = 0 49451 memfault.FnOkAfter = 0 49452 memfault.Fenable = u8(libc.Bool32(nDelay >= 0)) 49453 49454 memfault.FisBenignMode = 0 49455 } 49456 49457 func faultsimFailures(tls *libc.TLS) int32 { 49458 return memfault.FnFail 49459 } 49460 49461 func faultsimBenignFailures(tls *libc.TLS) int32 { 49462 return memfault.FnBenign 49463 } 49464 49465 func faultsimPending(tls *libc.TLS) int32 { 49466 if memfault.Fenable != 0 { 49467 return memfault.FiCountdown 49468 } else { 49469 return -1 49470 } 49471 return int32(0) 49472 } 49473 49474 func faultsimBeginBenign(tls *libc.TLS) { 49475 memfault.FisBenignMode++ 49476 } 49477 49478 func faultsimEndBenign(tls *libc.TLS) { 49479 memfault.FisBenignMode-- 49480 } 49481 49482 func faultsimInstall(tls *libc.TLS, install int32) int32 { 49483 bp := tls.Alloc(200) 49484 defer tls.Free(200) 49485 49486 var rc int32 49487 49488 install = func() int32 { 49489 if install != 0 { 49490 return 1 49491 } 49492 return 0 49493 }() 49494 49495 if install == memfault.FisInstalled { 49496 return SQLITE_ERROR 49497 } 49498 49499 if install != 0 { 49500 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp, uintptr(unsafe.Pointer(&memfault))+40)) 49501 49502 if rc == SQLITE_OK { 49503 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)) = memfault.Fm 49504 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxMalloc = *(*uintptr)(unsafe.Pointer(&struct { 49505 f func(*libc.TLS, int32) uintptr 49506 }{faultsimMalloc})) 49507 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxRealloc = *(*uintptr)(unsafe.Pointer(&struct { 49508 f func(*libc.TLS, uintptr, int32) uintptr 49509 }{faultsimRealloc})) 49510 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, bp+72)) 49511 } 49512 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 49513 libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimBeginBenign})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimEndBenign})))) 49514 } else { 49515 libc.Xmemset(tls, bp+136, 0, uint64(unsafe.Sizeof(sqlite3_mem_methods{}))) 49516 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+136)) 49517 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+40, bp+136)) 49518 49519 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+48, uintptr(unsafe.Pointer(&memfault))+40)) 49520 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 49521 libc.VaList(bp+56, uintptr(0), uintptr(0))) 49522 } 49523 49524 if rc == SQLITE_OK { 49525 memfault.FisInstalled = 1 49526 } 49527 return rc 49528 } 49529 49530 func pointerToText(tls *libc.TLS, p uintptr, z uintptr) { 49531 bp := tls.Alloc(20) 49532 defer tls.Free(20) 49533 *(*uintptr)(unsafe.Pointer(bp + 8)) = p 49534 49535 var i int32 49536 var k int32 49537 49538 if *(*uintptr)(unsafe.Pointer(bp + 8)) == uintptr(0) { 49539 libc.Xstrcpy(tls, z, ts+14193) 49540 return 49541 } 49542 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 49543 libc.Xmemcpy(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0)))) 49544 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 49545 libc.Xmemcpy(tls, bp+16, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 49546 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = sqlite3_uint64(*(*uint32)(unsafe.Pointer(bp + 16))) 49547 } else { 49548 } 49549 i = 0 49550 k = int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) - uint64(1)) 49551 __1: 49552 if !(uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2)) { 49553 goto __3 49554 } 49555 { 49556 *(*uint8)(unsafe.Pointer(z + uintptr(k))) = zHex[*(*sqlite3_uint64)(unsafe.Pointer(bp))&uint64(0xf)] 49557 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 4 49558 49559 } 49560 goto __2 49561 __2: 49562 i++ 49563 k-- 49564 goto __1 49565 goto __3 49566 __3: 49567 ; 49568 *(*uint8)(unsafe.Pointer(z + 16)) = uint8(0) 49569 } 49570 49571 var zHex = *(*[17]uint8)(unsafe.Pointer(ts + 31194)) 49572 49573 func hexToInt(tls *libc.TLS, h int32) int32 { 49574 if h >= '0' && h <= '9' { 49575 return h - '0' 49576 } else if h >= 'a' && h <= 'f' { 49577 return h - 'a' + 10 49578 } else { 49579 return -1 49580 } 49581 return int32(0) 49582 } 49583 49584 func textToPointer(tls *libc.TLS, z uintptr, pp uintptr) int32 { 49585 bp := tls.Alloc(12) 49586 defer tls.Free(12) 49587 49588 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(0) 49589 var i int32 49590 49591 for i = 0; uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) && *(*uint8)(unsafe.Pointer(z)) != 0; i++ { 49592 var v int32 49593 v = hexToInt(tls, int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) 49594 if v < 0 { 49595 return TCL_ERROR 49596 } 49597 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = *(*sqlite3_uint64)(unsafe.Pointer(bp))*uint64(16) + sqlite3_uint64(v) 49598 } 49599 if int32(*(*uint8)(unsafe.Pointer(z))) != 0 { 49600 return TCL_ERROR 49601 } 49602 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 49603 libc.Xmemcpy(tls, pp, bp, uint64(unsafe.Sizeof(sqlite3_uint64(0)))) 49604 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 49605 *(*uint32)(unsafe.Pointer(bp + 8)) = uint32(*(*sqlite3_uint64)(unsafe.Pointer(bp))) 49606 libc.Xmemcpy(tls, pp, bp+8, uint64(unsafe.Sizeof(uint32(0)))) 49607 } else { 49608 } 49609 return TCL_OK 49610 } 49611 49612 func test_malloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49613 bp := tls.Alloc(120) 49614 defer tls.Free(120) 49615 49616 var p uintptr 49617 49618 if objc != 2 { 49619 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32817) 49620 return TCL_ERROR 49621 } 49622 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 49623 return TCL_ERROR 49624 } 49625 p = sqlite3.Xsqlite3_malloc(tls, int32(uint32(*(*int32)(unsafe.Pointer(bp + 16))))) 49626 pointerToText(tls, p, bp+20) 49627 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+20, uintptr(0))) 49628 return TCL_OK 49629 } 49630 49631 func test_realloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49632 bp := tls.Alloc(156) 49633 defer tls.Free(156) 49634 49635 var p uintptr 49636 49637 if objc != 3 { 49638 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32824) 49639 return TCL_ERROR 49640 } 49641 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 49642 return TCL_ERROR 49643 } 49644 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 49645 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49646 return TCL_ERROR 49647 } 49648 p = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), int32(uint32(*(*int32)(unsafe.Pointer(bp + 40))))) 49649 pointerToText(tls, p, bp+56) 49650 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+56, uintptr(0))) 49651 return TCL_OK 49652 } 49653 49654 func test_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49655 bp := tls.Alloc(32) 49656 defer tls.Free(32) 49657 49658 if objc != 2 { 49659 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32851) 49660 return TCL_ERROR 49661 } 49662 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 49663 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49664 return TCL_ERROR 49665 } 49666 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 49667 return TCL_OK 49668 } 49669 49670 func test_memset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49671 bp := tls.Alloc(172) 49672 defer tls.Free(172) 49673 49674 var i int32 49675 var zHex uintptr 49676 var zOut uintptr 49677 49678 if objc != 4 { 49679 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32857) 49680 return TCL_ERROR 49681 } 49682 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 49683 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49684 return TCL_ERROR 49685 } 49686 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 49687 return TCL_ERROR 49688 } 49689 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 49690 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 49691 return TCL_ERROR 49692 } 49693 zHex = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+68) 49694 if uint64(*(*int32)(unsafe.Pointer(bp + 68))) > uint64(unsafe.Sizeof([100]uint8{}))*uint64(2) { 49695 *(*int32)(unsafe.Pointer(bp + 68)) = int32(uint64(unsafe.Sizeof([100]uint8{})) * uint64(2)) 49696 } 49697 *(*int32)(unsafe.Pointer(bp + 68)) = sqlite3TestHexToBin(tls, zHex, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 49698 if *(*int32)(unsafe.Pointer(bp + 68)) == 0 { 49699 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+32896, uintptr(0))) 49700 return TCL_ERROR 49701 } 49702 zOut = *(*uintptr)(unsafe.Pointer(bp + 56)) 49703 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 49704 *(*uint8)(unsafe.Pointer(zOut + uintptr(i))) = *(*uint8)(unsafe.Pointer(bp + 72 + uintptr(i%*(*int32)(unsafe.Pointer(bp + 68))))) 49705 } 49706 return TCL_OK 49707 } 49708 49709 func test_memget(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49710 bp := tls.Alloc(168) 49711 defer tls.Free(168) 49712 49713 var n int32 49714 var zBin uintptr 49715 49716 if objc != 3 { 49717 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32904) 49718 return TCL_ERROR 49719 } 49720 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 49721 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32837, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 49722 return TCL_ERROR 49723 } 49724 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 49725 return TCL_ERROR 49726 } 49727 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 49728 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+32874, uintptr(0))) 49729 return TCL_ERROR 49730 } 49731 zBin = *(*uintptr)(unsafe.Pointer(bp + 56)) 49732 for *(*int32)(unsafe.Pointer(bp + 64)) > 0 { 49733 if uint64(*(*int32)(unsafe.Pointer(bp + 64))) > (uint64(unsafe.Sizeof([100]uint8{}))-uint64(1))/uint64(2) { 49734 n = int32((uint64(unsafe.Sizeof([100]uint8{})) - uint64(1)) / uint64(2)) 49735 } else { 49736 n = *(*int32)(unsafe.Pointer(bp + 64)) 49737 } 49738 libc.Xmemcpy(tls, bp+68, zBin, uint64(n)) 49739 zBin += uintptr(n) 49740 *(*int32)(unsafe.Pointer(bp + 64)) -= n 49741 sqlite3TestBinToHex(tls, bp+68, n) 49742 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+68, uintptr(0))) 49743 } 49744 return TCL_OK 49745 } 49746 49747 func test_memory_used(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49748 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_used(tls))) 49749 return TCL_OK 49750 } 49751 49752 func test_memory_highwater(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49753 bp := tls.Alloc(4) 49754 defer tls.Free(4) 49755 49756 *(*int32)(unsafe.Pointer(bp)) = 0 49757 if objc != 1 && objc != 2 { 49758 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32917) 49759 return TCL_ERROR 49760 } 49761 if objc == 2 { 49762 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49763 return TCL_ERROR 49764 } 49765 } 49766 tcl.XTcl_SetObjResult(tls, interp, 49767 tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_highwater(tls, *(*int32)(unsafe.Pointer(bp))))) 49768 return TCL_OK 49769 } 49770 49771 func test_memdebug_backtrace(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49772 bp := tls.Alloc(4) 49773 defer tls.Free(4) 49774 49775 if objc != 2 { 49776 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32925) 49777 return TCL_ERROR 49778 } 49779 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 49780 return TCL_ERROR 49781 } 49782 return TCL_OK 49783 } 49784 49785 func test_memdebug_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49786 if objc != 2 { 49787 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 49788 return TCL_ERROR 49789 } 49790 return TCL_OK 49791 } 49792 49793 func test_memdebug_malloc_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49794 var nMalloc int32 = -1 49795 if objc != 1 { 49796 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 49797 return TCL_ERROR 49798 } 49799 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nMalloc)) 49800 return TCL_OK 49801 } 49802 49803 func test_memdebug_fail(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49804 bp := tls.Alloc(36) 49805 defer tls.Free(36) 49806 49807 var ii int32 49808 49809 *(*int32)(unsafe.Pointer(bp + 32)) = 1 49810 var pBenignCnt uintptr = uintptr(0) 49811 var nBenign int32 49812 var nFail int32 = 0 49813 49814 if objc < 2 { 49815 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32939) 49816 return TCL_ERROR 49817 } 49818 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24) != 0 { 49819 return TCL_ERROR 49820 } 49821 49822 for ii = 2; ii < objc; ii = ii + 2 { 49823 var zOption uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii)*8)), bp+28) 49824 var zErr uintptr = uintptr(0) 49825 49826 if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32957, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 49827 if ii == objc-1 { 49828 zErr = ts + 12638 49829 } else { 49830 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)), bp+32) != 0 { 49831 return TCL_ERROR 49832 } 49833 } 49834 } else if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+32965, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 49835 if ii == objc-1 { 49836 zErr = ts + 12638 49837 } else { 49838 pBenignCnt = *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)) 49839 } 49840 } else { 49841 zErr = ts + 12444 49842 } 49843 49844 if zErr != 0 { 49845 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErr, zOption, 0)) 49846 return TCL_ERROR 49847 } 49848 } 49849 49850 nBenign = faultsimBenignFailures(tls) 49851 nFail = faultsimFailures(tls) 49852 faultsimConfig(tls, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32))) 49853 49854 if pBenignCnt != 0 { 49855 tcl.XTcl_ObjSetVar2(tls, interp, pBenignCnt, uintptr(0), tcl.XTcl_NewIntObj(tls, nBenign), 0) 49856 } 49857 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nFail)) 49858 return TCL_OK 49859 } 49860 49861 func test_memdebug_pending(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49862 var nPending int32 49863 if objc != 1 { 49864 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 49865 return TCL_ERROR 49866 } 49867 nPending = faultsimPending(tls) 49868 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPending)) 49869 return TCL_OK 49870 } 49871 49872 var sqlite3_memdebug_title_count int32 = 0 49873 49874 func test_memdebug_settitle(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49875 sqlite3_memdebug_title_count++ 49876 if objc != 2 { 49877 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32976) 49878 return TCL_ERROR 49879 } 49880 return TCL_OK 49881 } 49882 49883 var aMallocLog Tcl_HashTable 49884 var mallocLogEnabled int32 = 0 49885 49886 type MallocLog1 = struct { 49887 FnCall int32 49888 FnByte int32 49889 } 49890 49891 type MallocLog = MallocLog1 49892 49893 func test_memdebug_log_clear(tls *libc.TLS) { 49894 bp := tls.Alloc(24) 49895 defer tls.Free(24) 49896 49897 var pEntry uintptr 49898 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp) { 49899 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 49900 tcl.XTcl_Free(tls, pLog) 49901 } 49902 tcl.XTcl_DeleteHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog))) 49903 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 49904 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 49905 return uint64(1) 49906 } 49907 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 49908 }())) 49909 } 49910 49911 func test_memdebug_log(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49912 bp := tls.Alloc(128) 49913 defer tls.Free(128) 49914 49915 if !(isInit != 0) { 49916 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 49917 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 49918 return uint64(1) 49919 } 49920 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 49921 }())) 49922 isInit = 1 49923 } 49924 49925 if objc < 2 { 49926 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 49927 } 49928 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 { 49929 return TCL_ERROR 49930 } 49931 49932 switch uint32(*(*int32)(unsafe.Pointer(bp))) { 49933 case uint32(0): 49934 mallocLogEnabled = 1 49935 break 49936 case uint32(1): 49937 mallocLogEnabled = 0 49938 break 49939 case uint32(2): 49940 { 49941 var pEntry uintptr 49942 var pRet uintptr = tcl.XTcl_NewObj(tls) 49943 49944 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp+8); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp+8) { 49945 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 49946 var aKey uintptr = func() uintptr { 49947 if (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == 1 || (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == -1 { 49948 return *(*uintptr)(unsafe.Pointer(pEntry + 32)) 49949 } 49950 return pEntry + 32 49951 }() 49952 var ii int32 49953 49954 *(*uintptr)(unsafe.Pointer(bp + 32)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnCall) 49955 *(*uintptr)(unsafe.Pointer(bp + 32 + 1*8)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnByte) 49956 for ii = 0; ii < MALLOC_LOG_FRAMES; ii++ { 49957 *(*uintptr)(unsafe.Pointer(bp + 32 + uintptr(ii+2)*8)) = tcl.XTcl_NewWideIntObj(tls, *(*Tcl_WideInt)(unsafe.Pointer(aKey + uintptr(ii)*8))) 49958 } 49959 49960 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, 49961 tcl.XTcl_NewListObj(tls, MALLOC_LOG_FRAMES+2, bp+32)) 49962 } 49963 49964 tcl.XTcl_SetObjResult(tls, interp, pRet) 49965 break 49966 49967 } 49968 case uint32(3): 49969 { 49970 test_memdebug_log_clear(tls) 49971 break 49972 49973 } 49974 49975 case uint32(4): 49976 { 49977 break 49978 49979 } 49980 } 49981 49982 return TCL_OK 49983 } 49984 49985 var isInit int32 = 0 49986 var MB_strs = [5]uintptr{ts + 32998, ts + 33004, ts + 33009, ts + 33014, ts + 33020} 49987 49988 func test_config_pagecache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49989 bp := tls.Alloc(56) 49990 defer tls.Free(56) 49991 49992 var pRes uintptr 49993 if objc != 3 { 49994 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33025) 49995 return TCL_ERROR 49996 } 49997 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+48) != 0 { 49998 return TCL_ERROR 49999 } 50000 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+52) != 0 { 50001 return TCL_ERROR 50002 } 50003 libc.Xfree(tls, buf1) 50004 buf1 = uintptr(0) 50005 50006 pRes = tcl.XTcl_NewObj(tls) 50007 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszPage)) 50008 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnPage)) 50009 tcl.XTcl_SetObjResult(tls, interp, pRes) 50010 50011 if *(*int32)(unsafe.Pointer(bp + 48)) < 0 { 50012 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp, uintptr(0), 0, 0)) 50013 } else { 50014 buf1 = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 48))**(*int32)(unsafe.Pointer(bp + 52)))) 50015 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp+24, buf1, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 50016 } 50017 return TCL_OK 50018 } 50019 50020 var buf1 uintptr = uintptr(0) 50021 50022 func test_alt_pcache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50023 bp := tls.Alloc(32) 50024 defer tls.Free(32) 50025 50026 *(*int32)(unsafe.Pointer(bp + 20)) = 0 50027 *(*int32)(unsafe.Pointer(bp + 24)) = 0 50028 *(*int32)(unsafe.Pointer(bp + 28)) = 0 50029 if objc < 2 || objc > 5 { 50030 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 50031 ts+33032) 50032 return TCL_ERROR 50033 } 50034 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 50035 return TCL_ERROR 50036 } 50037 if objc >= 3 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 50038 return TCL_ERROR 50039 } 50040 if objc >= 4 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 50041 return TCL_ERROR 50042 } 50043 if objc >= 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 50044 return TCL_ERROR 50045 } 50046 if *(*int32)(unsafe.Pointer(bp + 20)) < 0 || *(*int32)(unsafe.Pointer(bp + 20)) > 100 { 50047 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33079, 50048 uintptr(0))) 50049 return TCL_ERROR 50050 } 50051 installTestPCache(tls, *(*int32)(unsafe.Pointer(bp + 16)), uint32(*(*int32)(unsafe.Pointer(bp + 20))), uint32(*(*int32)(unsafe.Pointer(bp + 24))), 50052 uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 50053 return TCL_OK 50054 } 50055 50056 func test_config_memstatus(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50057 bp := tls.Alloc(12) 50058 defer tls.Free(12) 50059 50060 var rc int32 50061 if objc != 2 { 50062 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 50063 return TCL_ERROR 50064 } 50065 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 50066 return TCL_ERROR 50067 } 50068 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MEMSTATUS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 50069 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 50070 return TCL_OK 50071 } 50072 50073 func test_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50074 bp := tls.Alloc(24) 50075 defer tls.Free(24) 50076 50077 var pRet uintptr 50078 if objc != 3 { 50079 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33122) 50080 return TCL_ERROR 50081 } 50082 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 50083 return TCL_ERROR 50084 } 50085 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 50086 return TCL_ERROR 50087 } 50088 pRet = tcl.XTcl_NewObj(tls) 50089 tcl.XTcl_ListObjAppendElement(tls, 50090 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszLookaside)) 50091 tcl.XTcl_ListObjAppendElement(tls, 50092 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnLookaside)) 50093 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOOKASIDE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 20)))) 50094 tcl.XTcl_SetObjResult(tls, interp, pRet) 50095 return TCL_OK 50096 } 50097 50098 func test_db_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50099 bp := tls.Alloc(84) 50100 defer tls.Free(84) 50101 50102 var rc int32 50103 50104 if objc != 5 { 50105 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33133) 50106 return TCL_ERROR 50107 } 50108 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 50109 return TCL_ERROR 50110 } 50111 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 50112 return TCL_ERROR 50113 } 50114 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) != 0 { 50115 return TCL_ERROR 50116 } 50117 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 50118 return TCL_ERROR 50119 } 50120 if *(*int32)(unsafe.Pointer(bp + 72)) == 0 { 50121 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)))) 50122 } 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{})) { 50123 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)))) 50124 } else { 50125 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+33150, uintptr(0))) 50126 return TCL_ERROR 50127 } 50128 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 50129 return TCL_OK 50130 } 50131 50132 var azBuf [2][10000]uint8 50133 50134 func test_config_heap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50135 bp := tls.Alloc(56) 50136 defer tls.Free(56) 50137 50138 var rc int32 50139 50140 var aArg uintptr = objv + 1*8 50141 var nArg int32 = objc - 1 50142 50143 if nArg != 2 { 50144 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33188) 50145 return TCL_ERROR 50146 } 50147 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+48) != 0 { 50148 return TCL_ERROR 50149 } 50150 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg + 1*8)), bp+52) != 0 { 50151 return TCL_ERROR 50152 } 50153 50154 if *(*int32)(unsafe.Pointer(bp + 48)) == 0 { 50155 libc.Xfree(tls, zBuf) 50156 zBuf = uintptr(0) 50157 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp, uintptr(0), 0, 0)) 50158 } else { 50159 zBuf = libc.Xrealloc(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp + 48)))) 50160 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp+24, zBuf, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 50161 } 50162 50163 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50164 return TCL_OK 50165 } 50166 50167 var zBuf uintptr 50168 50169 func test_config_heap_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50170 bp := tls.Alloc(12) 50171 defer tls.Free(12) 50172 50173 var rc int32 50174 50175 var aArg uintptr = objv + 1*8 50176 var nArg int32 = objc - 1 50177 50178 if nArg != 1 { 50179 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 50180 return TCL_ERROR 50181 } 50182 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+8) != 0 { 50183 return TCL_ERROR 50184 } 50185 50186 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_WIN32_HEAPSIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 50187 50188 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50189 return TCL_OK 50190 } 50191 50192 func test_config_error(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50193 bp := tls.Alloc(40) 50194 defer tls.Free(40) 50195 50196 if objc != 2 && objc != 1 { 50197 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33204) 50198 return TCL_ERROR 50199 } 50200 if objc == 2 { 50201 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 50202 return TCL_ERROR 50203 } 50204 if sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 99999, 0) != SQLITE_ERROR { 50205 tcl.XTcl_AppendResult(tls, interp, 50206 libc.VaList(bp, ts+33209, 50207 uintptr(0))) 50208 return TCL_ERROR 50209 } 50210 } else { 50211 if sqlite3.Xsqlite3_config(tls, 99999, 0) != SQLITE_ERROR { 50212 tcl.XTcl_AppendResult(tls, interp, 50213 libc.VaList(bp+16, ts+33267, 50214 uintptr(0))) 50215 return TCL_ERROR 50216 } 50217 } 50218 return TCL_OK 50219 } 50220 50221 func test_config_uri(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50222 bp := tls.Alloc(12) 50223 defer tls.Free(12) 50224 50225 var rc int32 50226 50227 if objc != 2 { 50228 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 50229 return TCL_ERROR 50230 } 50231 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 50232 return TCL_ERROR 50233 } 50234 50235 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_URI, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 50236 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50237 50238 return TCL_OK 50239 } 50240 50241 func test_config_cis(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50242 bp := tls.Alloc(12) 50243 defer tls.Free(12) 50244 50245 var rc int32 50246 50247 if objc != 2 { 50248 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 50249 return TCL_ERROR 50250 } 50251 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 50252 return TCL_ERROR 50253 } 50254 50255 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_COVERING_INDEX_SCAN, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 50256 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50257 50258 return TCL_OK 50259 } 50260 50261 func test_config_pmasz(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50262 bp := tls.Alloc(12) 50263 defer tls.Free(12) 50264 50265 var rc int32 50266 50267 if objc != 2 { 50268 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 50269 return TCL_ERROR 50270 } 50271 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 50272 return TCL_ERROR 50273 } 50274 50275 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PMASZ, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 50276 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50277 50278 return TCL_OK 50279 } 50280 50281 func test_dump_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50282 if objc != 2 { 50283 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 50284 return TCL_ERROR 50285 } 50286 50287 switch int32(clientData) { 50288 case 3: 50289 { 50290 } 50291 fallthrough 50292 case 5: 50293 { 50294 } 50295 } 50296 return TCL_OK 50297 } 50298 50299 func test_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50300 bp := tls.Alloc(16) 50301 defer tls.Free(16) 50302 50303 var rc int32 50304 50305 var i int32 50306 *(*int32)(unsafe.Pointer(bp)) = 0 50307 50308 var zOpName uintptr 50309 var pResult uintptr 50310 if objc != 3 { 50311 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33318) 50312 return TCL_ERROR 50313 } 50314 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 50315 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 50316 FzName uintptr 50317 Fop int32 50318 F__ccgo_pad1 [4]byte 50319 }{}))); i++ { 50320 if libc.Xstrcmp(tls, aOp1[i].FzName, zOpName) == 0 { 50321 *(*int32)(unsafe.Pointer(bp)) = aOp1[i].Fop 50322 break 50323 } 50324 } 50325 if i >= int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 50326 FzName uintptr 50327 Fop int32 50328 F__ccgo_pad1 [4]byte 50329 }{}))) { 50330 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 50331 return TCL_ERROR 50332 } 50333 } 50334 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 50335 return TCL_ERROR 50336 } 50337 *(*int32)(unsafe.Pointer(bp + 8)) = 0 50338 *(*int32)(unsafe.Pointer(bp + 12)) = 0 50339 rc = sqlite3.Xsqlite3_status(tls, *(*int32)(unsafe.Pointer(bp)), bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 4))) 50340 pResult = tcl.XTcl_NewObj(tls) 50341 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 50342 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 50343 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 50344 tcl.XTcl_SetObjResult(tls, interp, pResult) 50345 return TCL_OK 50346 } 50347 50348 var aOp1 = [10]struct { 50349 FzName uintptr 50350 Fop int32 50351 F__ccgo_pad1 [4]byte 50352 }{ 50353 {FzName: ts + 33338}, 50354 {FzName: ts + 33364, Fop: SQLITE_STATUS_MALLOC_SIZE}, 50355 {FzName: ts + 33390, Fop: SQLITE_STATUS_PAGECACHE_USED}, 50356 {FzName: ts + 33419, Fop: SQLITE_STATUS_PAGECACHE_OVERFLOW}, 50357 {FzName: ts + 33452, Fop: SQLITE_STATUS_PAGECACHE_SIZE}, 50358 {FzName: ts + 33481, Fop: SQLITE_STATUS_SCRATCH_USED}, 50359 {FzName: ts + 33508, Fop: SQLITE_STATUS_SCRATCH_OVERFLOW}, 50360 {FzName: ts + 33539, Fop: SQLITE_STATUS_SCRATCH_SIZE}, 50361 {FzName: ts + 33566, Fop: SQLITE_STATUS_PARSER_STACK}, 50362 {FzName: ts + 33593, Fop: SQLITE_STATUS_MALLOC_COUNT}, 50363 } 50364 50365 func test_db_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50366 bp := tls.Alloc(24) 50367 defer tls.Free(24) 50368 50369 var rc int32 50370 50371 var i int32 50372 *(*int32)(unsafe.Pointer(bp + 8)) = 0 50373 50374 var zOpName uintptr 50375 50376 var pResult uintptr 50377 if objc != 4 { 50378 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33620) 50379 return TCL_ERROR 50380 } 50381 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 50382 return TCL_ERROR 50383 } 50384 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 50385 if libc.Xmemcmp(tls, zOpName, ts+33643, uint64(7)) == 0 { 50386 zOpName += uintptr(7) 50387 } 50388 if libc.Xmemcmp(tls, zOpName, ts+33651, uint64(9)) == 0 { 50389 zOpName += uintptr(9) 50390 } 50391 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 50392 FzName uintptr 50393 Fop int32 50394 F__ccgo_pad1 [4]byte 50395 }{}))); i++ { 50396 if libc.Xstrcmp(tls, aOp2[i].FzName, zOpName) == 0 { 50397 *(*int32)(unsafe.Pointer(bp + 8)) = aOp2[i].Fop 50398 break 50399 } 50400 } 50401 if i >= int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 50402 FzName uintptr 50403 Fop int32 50404 F__ccgo_pad1 [4]byte 50405 }{}))) { 50406 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 50407 return TCL_ERROR 50408 } 50409 } 50410 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 50411 return TCL_ERROR 50412 } 50413 *(*int32)(unsafe.Pointer(bp + 16)) = 0 50414 *(*int32)(unsafe.Pointer(bp + 20)) = 0 50415 rc = sqlite3.Xsqlite3_db_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+16, bp+20, *(*int32)(unsafe.Pointer(bp + 12))) 50416 pResult = tcl.XTcl_NewObj(tls) 50417 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 50418 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 50419 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 20)))) 50420 tcl.XTcl_SetObjResult(tls, interp, pResult) 50421 return TCL_OK 50422 } 50423 50424 var aOp2 = [13]struct { 50425 FzName uintptr 50426 Fop int32 50427 F__ccgo_pad1 [4]byte 50428 }{ 50429 {FzName: ts + 33661}, 50430 {FzName: ts + 33676, Fop: SQLITE_DBSTATUS_CACHE_USED}, 50431 {FzName: ts + 33687, Fop: SQLITE_DBSTATUS_SCHEMA_USED}, 50432 {FzName: ts + 33699, Fop: SQLITE_DBSTATUS_STMT_USED}, 50433 {FzName: ts + 33709, Fop: SQLITE_DBSTATUS_LOOKASIDE_HIT}, 50434 {FzName: ts + 33723, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE}, 50435 {FzName: ts + 33743, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL}, 50436 {FzName: ts + 33763, Fop: SQLITE_DBSTATUS_CACHE_HIT}, 50437 {FzName: ts + 33773, Fop: SQLITE_DBSTATUS_CACHE_MISS}, 50438 {FzName: ts + 33784, Fop: SQLITE_DBSTATUS_CACHE_WRITE}, 50439 {FzName: ts + 33796, Fop: SQLITE_DBSTATUS_DEFERRED_FKS}, 50440 {FzName: ts + 33809, Fop: SQLITE_DBSTATUS_CACHE_USED_SHARED}, 50441 {FzName: ts + 33827, Fop: SQLITE_DBSTATUS_CACHE_SPILL}, 50442 } 50443 50444 func test_install_malloc_faultsim(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50445 bp := tls.Alloc(4) 50446 defer tls.Free(4) 50447 50448 var rc int32 50449 50450 if objc != 2 { 50451 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 50452 return TCL_ERROR 50453 } 50454 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) { 50455 return TCL_ERROR 50456 } 50457 rc = faultsimInstall(tls, *(*int32)(unsafe.Pointer(bp))) 50458 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50459 return TCL_OK 50460 } 50461 50462 func test_install_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50463 var rc int32 = SQLITE_MISUSE 50464 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 50465 return TCL_OK 50466 } 50467 50468 func test_vfs_oom_test(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50469 bp := tls.Alloc(4) 50470 defer tls.Free(4) 50471 50472 if objc > 2 { 50473 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33839) 50474 return TCL_ERROR 50475 } else if objc == 2 { 50476 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 50477 return TCL_ERROR 50478 } 50479 sqlite3.Xsqlite3_memdebug_vfs_oom_test = *(*int32)(unsafe.Pointer(bp)) 50480 } 50481 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_memdebug_vfs_oom_test)) 50482 return TCL_OK 50483 } 50484 50485 func Sqlitetest_malloc_Init(tls *libc.TLS, interp uintptr) int32 { 50486 var i int32 50487 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd11))/uint64(unsafe.Sizeof(struct { 50488 FzName uintptr 50489 FxProc uintptr 50490 FclientData int32 50491 F__ccgo_pad1 [4]byte 50492 }{})); i++ { 50493 var c ClientData = uintptr(intptr_t(aObjCmd11[i].FclientData)) 50494 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd11[i].FzName, aObjCmd11[i].FxProc, c, uintptr(0)) 50495 } 50496 return TCL_OK 50497 } 50498 50499 var aObjCmd11 = [32]struct { 50500 FzName uintptr 50501 FxProc uintptr 50502 FclientData int32 50503 F__ccgo_pad1 [4]byte 50504 }{ 50505 {FzName: ts + 28095, FxProc: 0}, 50506 {FzName: ts + 28110, FxProc: 0}, 50507 {FzName: ts + 33849, FxProc: 0}, 50508 {FzName: ts + 33862, FxProc: 0}, 50509 {FzName: ts + 33869, FxProc: 0}, 50510 {FzName: ts + 33876, FxProc: 0}, 50511 {FzName: ts + 33896, FxProc: 0}, 50512 {FzName: ts + 33921, FxProc: 0}, 50513 {FzName: ts + 33948, FxProc: 0}, 50514 {FzName: ts + 33970, FxProc: 0}, 50515 {FzName: ts + 33992, FxProc: 0}, 50516 {FzName: ts + 34017, FxProc: 0}, 50517 {FzName: ts + 34043, FxProc: 0}, 50518 {FzName: ts + 34073, FxProc: 0}, 50519 {FzName: ts + 34094, FxProc: 0}, 50520 {FzName: ts + 34119, FxProc: 0}, 50521 {FzName: ts + 34145, FxProc: 0}, 50522 {FzName: ts + 34160, FxProc: 0}, 50523 {FzName: ts + 34178, FxProc: 0}, 50524 {FzName: ts + 34202, FxProc: 0}, 50525 {FzName: ts + 34222, FxProc: 0}, 50526 {FzName: ts + 34247, FxProc: 0}, 50527 {FzName: ts + 34272, FxProc: 0}, 50528 {FzName: ts + 34297, FxProc: 0}, 50529 {FzName: ts + 34318, FxProc: 0}, 50530 {FzName: ts + 34337, FxProc: 0}, 50531 {FzName: ts + 34356, FxProc: 0}, 50532 {FzName: ts + 34377, FxProc: 0}, 50533 {FzName: ts + 34405, FxProc: 0, FclientData: 3}, 50534 {FzName: ts + 34426, FxProc: 0, FclientData: 5}, 50535 {FzName: ts + 34447, FxProc: 0}, 50536 {FzName: ts + 34471, FxProc: 0}, 50537 } 50538 50539 type fd_set4 = struct{ F__fds_bits [16]int64 } 50540 50541 type MD5Context1 = struct { 50542 FisInit int32 50543 Fbuf [4]uint32 50544 Fbits [2]uint32 50545 Fin [64]uint8 50546 } 50547 50548 type MD5Context = MD5Context1 50549 50550 func byteReverse(tls *libc.TLS, buf uintptr, longs uint32) { 50551 var t uint32 50552 for __ccgo := true; __ccgo; __ccgo = libc.PreDecUint32(&longs, 1) != 0 { 50553 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)))) 50554 *(*uint32)(unsafe.Pointer(buf)) = t 50555 buf += uintptr(4) 50556 } 50557 } 50558 50559 func MD5Transform(tls *libc.TLS, buf uintptr, in uintptr) { 50560 var a uint32 50561 var b uint32 50562 var c uint32 50563 var d uint32 50564 50565 a = *(*uint32)(unsafe.Pointer(buf)) 50566 b = *(*uint32)(unsafe.Pointer(buf + 1*4)) 50567 c = *(*uint32)(unsafe.Pointer(buf + 2*4)) 50568 d = *(*uint32)(unsafe.Pointer(buf + 3*4)) 50569 50570 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xd76aa478) 50571 a = a<<7 | a>>(32-7) 50572 a = a + b 50573 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xe8c7b756) 50574 d = d<<12 | d>>(32-12) 50575 d = d + a 50576 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x242070db)) 50577 c = c<<17 | c>>(32-17) 50578 c = c + d 50579 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xc1bdceee) 50580 b = b<<22 | b>>(32-22) 50581 b = b + c 50582 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf57c0faf) 50583 a = a<<7 | a>>(32-7) 50584 a = a + b 50585 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + uint32(0x4787c62a)) 50586 d = d<<12 | d>>(32-12) 50587 d = d + a 50588 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa8304613) 50589 c = c<<17 | c>>(32-17) 50590 c = c + d 50591 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xfd469501) 50592 b = b<<22 | b>>(32-22) 50593 b = b + c 50594 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x698098d8)) 50595 a = a<<7 | a>>(32-7) 50596 a = a + b 50597 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0x8b44f7af) 50598 d = d<<12 | d>>(32-12) 50599 d = d + a 50600 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffff5bb1) 50601 c = c<<17 | c>>(32-17) 50602 c = c + d 50603 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0x895cd7be) 50604 b = b<<22 | b>>(32-22) 50605 b = b + c 50606 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x6b901122)) 50607 a = a<<7 | a>>(32-7) 50608 a = a + b 50609 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xfd987193) 50610 d = d<<12 | d>>(32-12) 50611 d = d + a 50612 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xa679438e) 50613 c = c<<17 | c>>(32-17) 50614 c = c + d 50615 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x49b40821)) 50616 b = b<<22 | b>>(32-22) 50617 b = b + c 50618 50619 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xf61e2562) 50620 a = a<<5 | a>>(32-5) 50621 a = a + b 50622 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xc040b340) 50623 d = d<<9 | d>>(32-9) 50624 d = d + a 50625 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x265e5a51)) 50626 c = c<<14 | c>>(32-14) 50627 c = c + d 50628 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xe9b6c7aa) 50629 b = b<<20 | b>>(32-20) 50630 b = b + c 50631 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xd62f105d) 50632 a = a<<5 | a>>(32-5) 50633 a = a + b 50634 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + uint32(0x02441453)) 50635 d = d<<9 | d>>(32-9) 50636 d = d + a 50637 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xd8a1e681) 50638 c = c<<14 | c>>(32-14) 50639 c = c + d 50640 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xe7d3fbc8) 50641 b = b<<20 | b>>(32-20) 50642 b = b + c 50643 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + uint32(0x21e1cde6)) 50644 a = a<<5 | a>>(32-5) 50645 a = a + b 50646 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xc33707d6) 50647 d = d<<9 | d>>(32-9) 50648 d = d + a 50649 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xf4d50d87) 50650 c = c<<14 | c>>(32-14) 50651 c = c + d 50652 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x455a14ed)) 50653 b = b<<20 | b>>(32-20) 50654 b = b + c 50655 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xa9e3e905) 50656 a = a<<5 | a>>(32-5) 50657 a = a + b 50658 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xfcefa3f8) 50659 d = d<<9 | d>>(32-9) 50660 d = d + a 50661 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x676f02d9)) 50662 c = c<<14 | c>>(32-14) 50663 c = c + d 50664 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0x8d2a4c8a) 50665 b = b<<20 | b>>(32-20) 50666 b = b + c 50667 50668 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfffa3942) 50669 a = a<<4 | a>>(32-4) 50670 a = a + b 50671 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 8*4)) + 0x8771f681) 50672 d = d<<11 | d>>(32-11) 50673 d = d + a 50674 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x6d9d6122)) 50675 c = c<<16 | c>>(32-16) 50676 c = c + d 50677 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xfde5380c) 50678 b = b<<23 | b>>(32-23) 50679 b = b + c 50680 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xa4beea44) 50681 a = a<<4 | a>>(32-4) 50682 a = a + b 50683 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 4*4)) + uint32(0x4bdecfa9)) 50684 d = d<<11 | d>>(32-11) 50685 d = d + a 50686 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xf6bb4b60) 50687 c = c<<16 | c>>(32-16) 50688 c = c + d 50689 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xbebfbc70) 50690 b = b<<23 | b>>(32-23) 50691 b = b + c 50692 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x289b7ec6)) 50693 a = a<<4 | a>>(32-4) 50694 a = a + b 50695 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in)) + 0xeaa127fa) 50696 d = d<<11 | d>>(32-11) 50697 d = d + a 50698 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xd4ef3085) 50699 c = c<<16 | c>>(32-16) 50700 c = c + d 50701 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 6*4)) + uint32(0x04881d05)) 50702 b = b<<23 | b>>(32-23) 50703 b = b + c 50704 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xd9d4d039) 50705 a = a<<4 | a>>(32-4) 50706 a = a + b 50707 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0xe6db99e5) 50708 d = d<<11 | d>>(32-11) 50709 d = d + a 50710 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x1fa27cf8)) 50711 c = c<<16 | c>>(32-16) 50712 c = c + d 50713 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xc4ac5665) 50714 b = b<<23 | b>>(32-23) 50715 b = b + c 50716 50717 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in)) + 0xf4292244) 50718 a = a<<6 | a>>(32-6) 50719 a = a + b 50720 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x432aff97)) 50721 d = d<<10 | d>>(32-10) 50722 d = d + a 50723 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xab9423a7) 50724 c = c<<15 | c>>(32-15) 50725 c = c + d 50726 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfc93a039) 50727 b = b<<21 | b>>(32-21) 50728 b = b + c 50729 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x655b59c3)) 50730 a = a<<6 | a>>(32-6) 50731 a = a + b 50732 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0x8f0ccc92) 50733 d = d<<10 | d>>(32-10) 50734 d = d + a 50735 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffeff47d) 50736 c = c<<15 | c>>(32-15) 50737 c = c + d 50738 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0x85845dd1) 50739 b = b<<21 | b>>(32-21) 50740 b = b + c 50741 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x6fa87e4f)) 50742 a = a<<6 | a>>(32-6) 50743 a = a + b 50744 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xfe2ce6e0) 50745 d = d<<10 | d>>(32-10) 50746 d = d + a 50747 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa3014314) 50748 c = c<<15 | c>>(32-15) 50749 c = c + d 50750 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x4e0811a1)) 50751 b = b<<21 | b>>(32-21) 50752 b = b + c 50753 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf7537e82) 50754 a = a<<6 | a>>(32-6) 50755 a = a + b 50756 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0xbd3af235) 50757 d = d<<10 | d>>(32-10) 50758 d = d + a 50759 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x2ad7d2bb)) 50760 c = c<<15 | c>>(32-15) 50761 c = c + d 50762 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xeb86d391) 50763 b = b<<21 | b>>(32-21) 50764 b = b + c 50765 50766 *(*uint32)(unsafe.Pointer(buf)) += a 50767 *(*uint32)(unsafe.Pointer(buf + 1*4)) += b 50768 *(*uint32)(unsafe.Pointer(buf + 2*4)) += c 50769 *(*uint32)(unsafe.Pointer(buf + 3*4)) += d 50770 } 50771 50772 func MD5Init(tls *libc.TLS, ctx uintptr) { 50773 (*MD5Context)(unsafe.Pointer(ctx)).FisInit = 1 50774 *(*uint32)(unsafe.Pointer(ctx + 4)) = uint32(0x67452301) 50775 *(*uint32)(unsafe.Pointer(ctx + 4 + 1*4)) = 0xefcdab89 50776 *(*uint32)(unsafe.Pointer(ctx + 4 + 2*4)) = 0x98badcfe 50777 *(*uint32)(unsafe.Pointer(ctx + 4 + 3*4)) = uint32(0x10325476) 50778 *(*uint32)(unsafe.Pointer(ctx + 20)) = uint32(0) 50779 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) = uint32(0) 50780 } 50781 50782 func MD5Update(tls *libc.TLS, ctx uintptr, buf uintptr, len uint32) { 50783 var t uint32 50784 50785 t = *(*uint32)(unsafe.Pointer(ctx + 20)) 50786 if libc.AssignPtrUint32(ctx+20, t+len<<3) < t { 50787 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4))++ 50788 } 50789 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) += len >> 29 50790 50791 t = t >> 3 & uint32(0x3f) 50792 50793 if t != 0 { 50794 var p uintptr = ctx + 28 + uintptr(t) 50795 50796 t = uint32(64) - t 50797 if len < t { 50798 libc.Xmemcpy(tls, p, buf, uint64(len)) 50799 return 50800 } 50801 libc.Xmemcpy(tls, p, buf, uint64(t)) 50802 byteReverse(tls, ctx+28, uint32(16)) 50803 MD5Transform(tls, ctx+4, ctx+28) 50804 buf += uintptr(t) 50805 len = len - t 50806 } 50807 50808 for len >= uint32(64) { 50809 libc.Xmemcpy(tls, ctx+28, buf, uint64(64)) 50810 byteReverse(tls, ctx+28, uint32(16)) 50811 MD5Transform(tls, ctx+4, ctx+28) 50812 buf += uintptr(64) 50813 len = len - uint32(64) 50814 } 50815 50816 libc.Xmemcpy(tls, ctx+28, buf, uint64(len)) 50817 } 50818 50819 func MD5Final(tls *libc.TLS, digest uintptr, ctx uintptr) { 50820 var count uint32 50821 var p uintptr 50822 50823 count = *(*uint32)(unsafe.Pointer(ctx + 20)) >> 3 & uint32(0x3F) 50824 50825 p = ctx + 28 + uintptr(count) 50826 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&p, 1))) = uint8(0x80) 50827 50828 count = uint32(64-1) - count 50829 50830 if count < uint32(8) { 50831 libc.Xmemset(tls, p, 0, uint64(count)) 50832 byteReverse(tls, ctx+28, uint32(16)) 50833 MD5Transform(tls, ctx+4, ctx+28) 50834 50835 libc.Xmemset(tls, ctx+28, 0, uint64(56)) 50836 } else { 50837 libc.Xmemset(tls, p, 0, uint64(count-uint32(8))) 50838 } 50839 byteReverse(tls, ctx+28, uint32(14)) 50840 50841 libc.Xmemcpy(tls, ctx+28+uintptr(14*4), ctx+20, uint64(8)) 50842 50843 MD5Transform(tls, ctx+4, ctx+28) 50844 byteReverse(tls, ctx+4, uint32(4)) 50845 libc.Xmemcpy(tls, digest, ctx+4, uint64(16)) 50846 } 50847 50848 func MD5DigestToBase16(tls *libc.TLS, digest uintptr, zBuf uintptr) { 50849 var i int32 50850 var j int32 50851 50852 for j = libc.AssignInt32(&i, 0); i < 16; i++ { 50853 var a int32 = int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i)))) 50854 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a>>4&0xf] 50855 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a&0xf] 50856 } 50857 *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) = uint8(0) 50858 } 50859 50860 var zEncode = *(*[17]uint8)(unsafe.Pointer(ts + 31194)) 50861 50862 func MD5DigestToBase10x8(tls *libc.TLS, digest uintptr, zDigest uintptr) { 50863 bp := tls.Alloc(8) 50864 defer tls.Free(8) 50865 50866 var i int32 50867 var j int32 50868 var x uint32 50869 for i = libc.AssignInt32(&j, 0); i < 16; i = i + 2 { 50870 x = uint32(int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i))))*256 + int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i+1))))) 50871 if i > 0 { 50872 *(*uint8)(unsafe.Pointer(zDigest + uintptr(libc.PostIncInt32(&j, 1)))) = uint8('-') 50873 } 50874 sqlite3.Xsqlite3_snprintf(tls, 50-j, zDigest+uintptr(j), ts+34501, libc.VaList(bp, x)) 50875 j = j + 5 50876 } 50877 *(*uint8)(unsafe.Pointer(zDigest + uintptr(j))) = uint8(0) 50878 } 50879 50880 func md5_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 50881 bp := tls.Alloc(206) 50882 defer tls.Free(206) 50883 50884 var converter uintptr 50885 50886 if argc != 2 { 50887 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 50888 ts+15307, uintptr(0))) 50889 return TCL_ERROR 50890 } 50891 MD5Init(tls, bp+48) 50892 MD5Update(tls, bp+48, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 50893 MD5Final(tls, bp+140, bp+48) 50894 converter = cd 50895 (*struct { 50896 f func(*libc.TLS, uintptr, uintptr) 50897 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+140, bp+156) 50898 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+156, uintptr(0))) 50899 return TCL_OK 50900 } 50901 50902 func md5file_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 50903 bp := tls.Alloc(10428) 50904 defer tls.Free(10428) 50905 50906 var in uintptr 50907 var ofst int32 50908 var amt int32 50909 50910 var converter uintptr 50911 50912 if argc != 2 && argc != 4 { 50913 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 50914 ts+34506, uintptr(0))) 50915 return TCL_ERROR 50916 } 50917 if argc == 4 { 50918 ofst = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 50919 amt = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 50920 } else { 50921 ofst = 0 50922 amt = 2147483647 50923 } 50924 in = libc.Xfopen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4402) 50925 if in == uintptr(0) { 50926 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+34530, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 50927 ts+34552, uintptr(0))) 50928 return TCL_ERROR 50929 } 50930 libc.Xfseek(tls, in, int64(ofst), SEEK_SET) 50931 MD5Init(tls, bp+80) 50932 for amt > 0 { 50933 var n int32 50934 n = int32(libc.Xfread(tls, bp+172, uint64(1), func() uint64 { 50935 if uint64(unsafe.Sizeof([10240]uint8{})) <= uint64(amt) { 50936 return uint64(unsafe.Sizeof([10240]uint8{})) 50937 } 50938 return uint64(amt) 50939 }(), in)) 50940 if n <= 0 { 50941 break 50942 } 50943 MD5Update(tls, bp+80, bp+172, uint32(n)) 50944 amt = amt - n 50945 } 50946 libc.Xfclose(tls, in) 50947 MD5Final(tls, bp+10412, bp+80) 50948 converter = cd 50949 (*struct { 50950 f func(*libc.TLS, uintptr, uintptr) 50951 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+10412, bp+172) 50952 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+172, uintptr(0))) 50953 return TCL_OK 50954 } 50955 50956 func Md5_Init(tls *libc.TLS, interp uintptr) int32 { 50957 tcl.XTcl_CreateCommand(tls, interp, ts+34566, *(*uintptr)(unsafe.Pointer(&struct { 50958 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50959 }{md5_cmd})), 50960 *(*uintptr)(unsafe.Pointer(&struct { 50961 f func(*libc.TLS, uintptr, uintptr) 50962 }{MD5DigestToBase16})), uintptr(0)) 50963 tcl.XTcl_CreateCommand(tls, interp, ts+34570, *(*uintptr)(unsafe.Pointer(&struct { 50964 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50965 }{md5_cmd})), 50966 *(*uintptr)(unsafe.Pointer(&struct { 50967 f func(*libc.TLS, uintptr, uintptr) 50968 }{MD5DigestToBase10x8})), uintptr(0)) 50969 tcl.XTcl_CreateCommand(tls, interp, ts+34579, *(*uintptr)(unsafe.Pointer(&struct { 50970 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50971 }{md5file_cmd})), 50972 *(*uintptr)(unsafe.Pointer(&struct { 50973 f func(*libc.TLS, uintptr, uintptr) 50974 }{MD5DigestToBase16})), uintptr(0)) 50975 tcl.XTcl_CreateCommand(tls, interp, ts+34587, *(*uintptr)(unsafe.Pointer(&struct { 50976 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 50977 }{md5file_cmd})), 50978 *(*uintptr)(unsafe.Pointer(&struct { 50979 f func(*libc.TLS, uintptr, uintptr) 50980 }{MD5DigestToBase10x8})), uintptr(0)) 50981 return TCL_OK 50982 } 50983 50984 func md5step(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 50985 var p uintptr 50986 var i int32 50987 if argc < 1 { 50988 return 50989 } 50990 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 50991 if p == uintptr(0) { 50992 return 50993 } 50994 if !((*MD5Context)(unsafe.Pointer(p)).FisInit != 0) { 50995 MD5Init(tls, p) 50996 } 50997 for i = 0; i < argc; i++ { 50998 var zData uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 50999 if zData != 0 { 51000 MD5Update(tls, p, zData, uint32(int32(libc.Xstrlen(tls, zData)))) 51001 } 51002 } 51003 } 51004 51005 func md5finalize(tls *libc.TLS, context uintptr) { 51006 bp := tls.Alloc(49) 51007 defer tls.Free(49) 51008 51009 var p uintptr 51010 51011 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 51012 MD5Final(tls, bp, p) 51013 MD5DigestToBase16(tls, bp, bp+16) 51014 sqlite3.Xsqlite3_result_text(tls, context, bp+16, -1, libc.UintptrFromInt32(-1)) 51015 } 51016 51017 func Md5_Register(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 51018 var rc int32 = sqlite3.Xsqlite3_create_function(tls, db, ts+34600, -1, SQLITE_UTF8, uintptr(0), uintptr(0), 51019 *(*uintptr)(unsafe.Pointer(&struct { 51020 f func(*libc.TLS, uintptr, int32, uintptr) 51021 }{md5step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{md5finalize}))) 51022 sqlite3.Xsqlite3_overload_function(tls, db, ts+34600, -1) 51023 return rc 51024 } 51025 51026 type multiplexGroup1 = struct { 51027 FaReal uintptr 51028 FnReal int32 51029 F__ccgo_pad1 [4]byte 51030 FzName uintptr 51031 FnName int32 51032 Fflags int32 51033 FszChunk uint32 51034 FbEnabled uint8 51035 FbTruncate uint8 51036 F__ccgo_pad2 [2]byte 51037 } 51038 51039 type multiplexGroup = multiplexGroup1 51040 type multiplexConn1 = struct { 51041 Fbase sqlite3_file 51042 FpGroup uintptr 51043 } 51044 51045 type multiplexConn = multiplexConn1 51046 51047 type multiplexReal = struct { 51048 Fp uintptr 51049 Fz uintptr 51050 } 51051 51052 var gMultiplex struct { 51053 FpOrigVfs uintptr 51054 FsThisVfs sqlite3_vfs 51055 FsIoMethodsV1 sqlite3_io_methods 51056 FsIoMethodsV2 sqlite3_io_methods 51057 FisInitialized int32 51058 F__ccgo_pad1 [4]byte 51059 } 51060 51061 func multiplexStrlen30(tls *libc.TLS, z uintptr) int32 { 51062 var z2 uintptr = z 51063 if z == uintptr(0) { 51064 return 0 51065 } 51066 for *(*uint8)(unsafe.Pointer(z2)) != 0 { 51067 z2++ 51068 } 51069 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 51070 } 51071 51072 func multiplexFilename(tls *libc.TLS, zBase uintptr, nBase int32, flags int32, iChunk int32, zOut uintptr) { 51073 bp := tls.Alloc(8) 51074 defer tls.Free(8) 51075 51076 var n int32 = nBase 51077 libc.Xmemcpy(tls, zOut, zBase, uint64(n+1)) 51078 if iChunk != 0 && iChunk <= MX_CHUNK_NUMBER { 51079 sqlite3.Xsqlite3_snprintf(tls, 4, zOut+uintptr(n), ts+34607, libc.VaList(bp, iChunk)) 51080 n = n + 3 51081 } 51082 51083 *(*uint8)(unsafe.Pointer(zOut + uintptr(n+1))) = uint8(0) 51084 } 51085 51086 func multiplexSubFilename(tls *libc.TLS, pGroup uintptr, iChunk int32) int32 { 51087 if iChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal { 51088 var p uintptr 51089 p = sqlite3.Xsqlite3_realloc64(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal, uint64(iChunk+1)*uint64(unsafe.Sizeof(multiplexReal{}))) 51090 if p == uintptr(0) { 51091 return SQLITE_NOMEM 51092 } 51093 libc.Xmemset(tls, p+uintptr((*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))*uint64(iChunk+1-(*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)) 51094 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = p 51095 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = iChunk + 1 51096 } 51097 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 51098 var z uintptr 51099 var n int32 = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName 51100 z = sqlite3.Xsqlite3_malloc64(tls, uint64(n+5)) 51101 if z == uintptr(0) { 51102 return SQLITE_NOMEM 51103 } 51104 multiplexFilename(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName, (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags, iChunk, z) 51105 (*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)) 51106 sqlite3.Xsqlite3_free(tls, z) 51107 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 51108 return SQLITE_NOMEM 51109 } 51110 } 51111 return SQLITE_OK 51112 } 51113 51114 func multiplexSubOpen(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr, pOutFlags uintptr, createFlag int32) uintptr { 51115 bp := tls.Alloc(20) 51116 defer tls.Free(20) 51117 51118 var pSubOpen uintptr = uintptr(0) 51119 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 51120 51121 *(*int32)(unsafe.Pointer(rc)) = multiplexSubFilename(tls, pGroup, iChunk) 51122 if *(*int32)(unsafe.Pointer(rc)) == SQLITE_OK && libc.AssignUintptr(&pSubOpen, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) == uintptr(0) { 51123 var flags int32 51124 51125 flags = (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags 51126 if createFlag != 0 { 51127 flags = flags | SQLITE_OPEN_CREATE 51128 } else if iChunk == 0 { 51129 } else if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 51130 return uintptr(0) 51131 } else { 51132 *(*int32)(unsafe.Pointer(rc)) = (*struct { 51133 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51134 })(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, 51135 SQLITE_ACCESS_EXISTS, bp+16) 51136 if *(*int32)(unsafe.Pointer(rc)) != 0 || !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) { 51137 if *(*int32)(unsafe.Pointer(rc)) != 0 { 51138 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34612, 51139 libc.VaList(bp, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 51140 } 51141 return uintptr(0) 51142 } 51143 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 51144 } 51145 pSubOpen = sqlite3.Xsqlite3_malloc64(tls, uint64((*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FszOsFile)) 51146 if pSubOpen == uintptr(0) { 51147 *(*int32)(unsafe.Pointer(rc)) = SQLITE_IOERR | int32(12)<<8 51148 return uintptr(0) 51149 } 51150 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = pSubOpen 51151 *(*int32)(unsafe.Pointer(rc)) = (*struct { 51152 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 51153 })(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, 51154 flags, pOutFlags) 51155 if *(*int32)(unsafe.Pointer(rc)) != SQLITE_OK { 51156 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34646, 51157 libc.VaList(bp+8, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 51158 sqlite3.Xsqlite3_free(tls, pSubOpen) 51159 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = uintptr(0) 51160 return uintptr(0) 51161 } 51162 } 51163 return pSubOpen 51164 } 51165 51166 func multiplexSubSize(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr) sqlite3_int64 { 51167 bp := tls.Alloc(8) 51168 defer tls.Free(8) 51169 51170 var pSub uintptr 51171 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 51172 51173 if *(*int32)(unsafe.Pointer(rc)) != 0 { 51174 return int64(0) 51175 } 51176 pSub = multiplexSubOpen(tls, pGroup, iChunk, rc, uintptr(0), 0) 51177 if pSub == uintptr(0) { 51178 return int64(0) 51179 } 51180 *(*int32)(unsafe.Pointer(rc)) = (*struct { 51181 f func(*libc.TLS, uintptr, uintptr) int32 51182 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSub)).FpMethods)).FxFileSize})).f(tls, pSub, bp) 51183 return *(*sqlite3_int64)(unsafe.Pointer(bp)) 51184 } 51185 51186 func multiplexControlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 51187 bp := tls.Alloc(4) 51188 defer tls.Free(4) 51189 51190 var rc int32 = SQLITE_OK 51191 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 51192 var op int32 = 0 51193 51194 if !(db != 0) || argc != 2 { 51195 rc = SQLITE_ERROR 51196 } else { 51197 op = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 51198 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 51199 51200 switch op { 51201 case 1: 51202 op = MULTIPLEX_CTRL_ENABLE 51203 break 51204 fallthrough 51205 case 2: 51206 op = MULTIPLEX_CTRL_SET_CHUNK_SIZE 51207 break 51208 fallthrough 51209 case 3: 51210 op = MULTIPLEX_CTRL_SET_MAX_CHUNKS 51211 break 51212 fallthrough 51213 default: 51214 rc = SQLITE_NOTFOUND 51215 break 51216 } 51217 } 51218 if rc == SQLITE_OK { 51219 rc = sqlite3.Xsqlite3_file_control(tls, db, uintptr(0), op, bp) 51220 } 51221 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 51222 } 51223 51224 func multiplexFuncInit(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 51225 var rc int32 51226 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+34678, 2, SQLITE_ANY, 51227 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 51228 f func(*libc.TLS, uintptr, int32, uintptr) 51229 }{multiplexControlFunc})), uintptr(0), uintptr(0)) 51230 return rc 51231 } 51232 51233 func multiplexSubClose(tls *libc.TLS, pGroup uintptr, iChunk int32, pOrigVfs uintptr) { 51234 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp 51235 if pSubOpen != 0 { 51236 (*struct { 51237 f func(*libc.TLS, uintptr) int32 51238 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 51239 if pOrigVfs != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz != 0 { 51240 (*struct { 51241 f func(*libc.TLS, uintptr, uintptr, int32) int32 51242 })(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) 51243 } 51244 sqlite3.Xsqlite3_free(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) 51245 } 51246 sqlite3.Xsqlite3_free_filename(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz) 51247 libc.Xmemset(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))) 51248 } 51249 51250 func multiplexFreeComponents(tls *libc.TLS, pGroup uintptr) { 51251 var i int32 51252 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 51253 multiplexSubClose(tls, pGroup, i, uintptr(0)) 51254 } 51255 sqlite3.Xsqlite3_free(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal) 51256 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = uintptr(0) 51257 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = 0 51258 } 51259 51260 func multiplexOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 51261 bp := tls.Alloc(20) 51262 defer tls.Free(20) 51263 51264 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51265 var pMultiplexOpen uintptr 51266 var pGroup uintptr = uintptr(0) 51267 var pSubOpen uintptr = uintptr(0) 51268 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 51269 var nName int32 = 0 51270 var sz int32 = 0 51271 var zToFree uintptr = uintptr(0) 51272 51273 _ = pVfs 51274 libc.Xmemset(tls, pConn, 0, uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile)) 51275 51276 pMultiplexOpen = pConn 51277 51278 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51279 if zName != 0 { 51280 nName = multiplexStrlen30(tls, zName) 51281 } else { 51282 nName = 0 51283 } 51284 sz = int32(uint64(unsafe.Sizeof(multiplexGroup{})) + 51285 uint64(nName) + uint64(1)) 51286 pGroup = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 51287 if pGroup == uintptr(0) { 51288 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 51289 } 51290 } 51291 51292 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51293 var zUri uintptr 51294 if flags&SQLITE_OPEN_URI != 0 { 51295 zUri = zName 51296 } else { 51297 zUri = uintptr(0) 51298 } 51299 51300 libc.Xmemset(tls, pGroup, 0, uint64(sz)) 51301 (*multiplexConn)(unsafe.Pointer(pMultiplexOpen)).FpGroup = pGroup 51302 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = libc.Uint8(libc.Uint8FromInt32(-1)) 51303 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(sqlite3.Xsqlite3_uri_boolean(tls, zUri, ts+18304, 51304 libc.Bool32(flags&SQLITE_OPEN_MAIN_DB == 0))) 51305 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(sqlite3.Xsqlite3_uri_int64(tls, zUri, ts+34696, 51306 int64(SQLITE_MULTIPLEX_CHUNK_SIZE)))) 51307 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = ((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk + uint32(0xffff)) & libc.Uint32FromInt32(libc.CplInt32(0xffff)) 51308 if zName != 0 { 51309 var p uintptr = pGroup + 1*40 51310 (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName = p 51311 libc.Xmemcpy(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, zName, uint64(nName+1)) 51312 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName = nName 51313 } 51314 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 51315 for uint32(sqlite3.Xsqlite3PendingByte)%(*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk-uint32(65536) { 51316 *(*uint32)(unsafe.Pointer(pGroup + 32)) += uint32(65536) 51317 } 51318 } 51319 (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags = flags & libc.CplInt32(SQLITE_OPEN_URI) 51320 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, 1) 51321 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51322 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp, pOutFlags, 0) 51323 if pSubOpen == uintptr(0) && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51324 *(*int32)(unsafe.Pointer(bp)) = SQLITE_CANTOPEN 51325 } 51326 } 51327 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51328 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51329 f func(*libc.TLS, uintptr, uintptr) int32 51330 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp+8) 51331 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && zName != 0 { 51332 if flags&SQLITE_OPEN_SUPER_JOURNAL != 0 { 51333 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 51334 } else if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 51335 if flags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 51336 var iChunk int32 = 1 51337 for __ccgo := true; __ccgo; __ccgo = *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 51338 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51339 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51340 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, 51341 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, SQLITE_ACCESS_EXISTS, bp+16) 51342 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 51343 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51344 f func(*libc.TLS, uintptr, uintptr, int32) int32 51345 })(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) 51346 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51347 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, libc.PreIncInt32(&iChunk, 1)) 51348 } 51349 } 51350 } 51351 } 51352 } else { 51353 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51354 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51355 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+1*16)).Fz, 51356 SQLITE_ACCESS_EXISTS, bp+16) 51357 *(*int32)(unsafe.Pointer(bp + 16)) = libc.Bool32(multiplexSubSize(tls, pGroup, 1, bp) > int64(0)) 51358 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) && 51359 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) != sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 51360 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)))) 51361 } 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) { 51362 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 51363 } 51364 } 51365 } 51366 } 51367 51368 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51369 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 51370 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 176 51371 } else { 51372 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 328 51373 } 51374 } else { 51375 multiplexFreeComponents(tls, pGroup) 51376 sqlite3.Xsqlite3_free(tls, pGroup) 51377 } 51378 } 51379 sqlite3.Xsqlite3_free(tls, zToFree) 51380 return *(*int32)(unsafe.Pointer(bp)) 51381 } 51382 51383 func multiplexDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 51384 bp := tls.Alloc(4) 51385 defer tls.Free(4) 51386 51387 var rc int32 51388 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 51389 rc = (*struct { 51390 f func(*libc.TLS, uintptr, uintptr, int32) int32 51391 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 51392 if rc == SQLITE_OK { 51393 var nName int32 = int32(libc.Xstrlen(tls, zName)) 51394 var z uintptr 51395 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nName+5)) 51396 if z == uintptr(0) { 51397 rc = SQLITE_IOERR | int32(12)<<8 51398 } else { 51399 var iChunk int32 = 0 51400 51401 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 51402 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreIncInt32(&iChunk, 1), z) 51403 rc = (*struct { 51404 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51405 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 51406 } 51407 for rc == SQLITE_OK && iChunk > 1 { 51408 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreDecInt32(&iChunk, 1), z) 51409 rc = (*struct { 51410 f func(*libc.TLS, uintptr, uintptr, int32) int32 51411 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 51412 } 51413 if rc == SQLITE_OK { 51414 iChunk = 0 51415 for __ccgo1 := true; __ccgo1; __ccgo1 = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 51416 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreIncInt32(&iChunk, 1), z) 51417 rc = (*struct { 51418 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51419 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 51420 } 51421 for rc == SQLITE_OK && iChunk > 1 { 51422 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreDecInt32(&iChunk, 1), z) 51423 rc = (*struct { 51424 f func(*libc.TLS, uintptr, uintptr, int32) int32 51425 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 51426 } 51427 } 51428 } 51429 sqlite3.Xsqlite3_free(tls, z) 51430 } 51431 return rc 51432 } 51433 51434 func multiplexAccess(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 51435 return (*struct { 51436 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51437 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxAccess})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 51438 } 51439 51440 func multiplexFullPathname(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 51441 return (*struct { 51442 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51443 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxFullPathname})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 51444 } 51445 51446 func multiplexDlOpen(tls *libc.TLS, a uintptr, b uintptr) uintptr { 51447 return (*struct { 51448 f func(*libc.TLS, uintptr, uintptr) uintptr 51449 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlOpen})).f(tls, gMultiplex.FpOrigVfs, b) 51450 } 51451 51452 func multiplexDlError(tls *libc.TLS, a uintptr, b int32, c uintptr) { 51453 (*struct { 51454 f func(*libc.TLS, uintptr, int32, uintptr) 51455 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlError})).f(tls, gMultiplex.FpOrigVfs, b, c) 51456 } 51457 51458 func multiplexDlSym(tls *libc.TLS, a uintptr, b uintptr, c uintptr) uintptr { 51459 return (*struct { 51460 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51461 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlSym})).f(tls, gMultiplex.FpOrigVfs, b, c) 51462 } 51463 51464 func multiplexDlClose(tls *libc.TLS, a uintptr, b uintptr) { 51465 (*struct { 51466 f func(*libc.TLS, uintptr, uintptr) 51467 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlClose})).f(tls, gMultiplex.FpOrigVfs, b) 51468 } 51469 51470 func multiplexRandomness(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 51471 return (*struct { 51472 f func(*libc.TLS, uintptr, int32, uintptr) int32 51473 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxRandomness})).f(tls, gMultiplex.FpOrigVfs, b, c) 51474 } 51475 51476 func multiplexSleep(tls *libc.TLS, a uintptr, b int32) int32 { 51477 return (*struct { 51478 f func(*libc.TLS, uintptr, int32) int32 51479 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxSleep})).f(tls, gMultiplex.FpOrigVfs, b) 51480 } 51481 51482 func multiplexCurrentTime(tls *libc.TLS, a uintptr, b uintptr) int32 { 51483 return (*struct { 51484 f func(*libc.TLS, uintptr, uintptr) int32 51485 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTime})).f(tls, gMultiplex.FpOrigVfs, b) 51486 } 51487 51488 func multiplexGetLastError(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 51489 if (*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError != 0 { 51490 return (*struct { 51491 f func(*libc.TLS, uintptr, int32, uintptr) int32 51492 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError})).f(tls, gMultiplex.FpOrigVfs, b, c) 51493 } else { 51494 return 0 51495 } 51496 return int32(0) 51497 } 51498 51499 func multiplexCurrentTimeInt64(tls *libc.TLS, a uintptr, b uintptr) int32 { 51500 return (*struct { 51501 f func(*libc.TLS, uintptr, uintptr) int32 51502 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTimeInt64})).f(tls, gMultiplex.FpOrigVfs, b) 51503 } 51504 51505 func multiplexClose(tls *libc.TLS, pConn uintptr) int32 { 51506 var p uintptr = pConn 51507 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51508 var rc int32 = SQLITE_OK 51509 multiplexFreeComponents(tls, pGroup) 51510 sqlite3.Xsqlite3_free(tls, pGroup) 51511 return rc 51512 } 51513 51514 func multiplexRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 51515 bp := tls.Alloc(4) 51516 defer tls.Free(4) 51517 51518 var p uintptr = pConn 51519 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51520 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51521 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51522 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51523 if pSubOpen == uintptr(0) { 51524 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 51525 } else { 51526 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51527 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51528 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 51529 } 51530 } else { 51531 for iAmt > 0 { 51532 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51533 var pSubOpen uintptr 51534 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 51535 if pSubOpen != 0 { 51536 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 51537 if extra < 0 { 51538 extra = 0 51539 } 51540 iAmt = iAmt - extra 51541 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51542 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51543 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, 51544 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51545 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 51546 break 51547 } 51548 pBuf = pBuf + uintptr(iAmt) 51549 iOfst = iOfst + sqlite3_int64(iAmt) 51550 iAmt = extra 51551 } else { 51552 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 51553 break 51554 } 51555 } 51556 } 51557 51558 return *(*int32)(unsafe.Pointer(bp)) 51559 } 51560 51561 func multiplexWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 51562 bp := tls.Alloc(4) 51563 defer tls.Free(4) 51564 51565 var p uintptr = pConn 51566 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51567 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51568 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51569 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51570 if pSubOpen == uintptr(0) { 51571 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(3)<<8 51572 } else { 51573 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51574 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51575 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 51576 } 51577 } else { 51578 for *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && iAmt > 0 { 51579 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51580 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 51581 if pSubOpen != 0 { 51582 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 51583 if extra < 0 { 51584 extra = 0 51585 } 51586 iAmt = iAmt - extra 51587 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51588 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 51589 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, 51590 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51591 pBuf = pBuf + uintptr(iAmt) 51592 iOfst = iOfst + sqlite3_int64(iAmt) 51593 iAmt = extra 51594 } 51595 } 51596 } 51597 return *(*int32)(unsafe.Pointer(bp)) 51598 } 51599 51600 func multiplexTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 51601 bp := tls.Alloc(4) 51602 defer tls.Free(4) 51603 51604 var p uintptr = pConn 51605 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51606 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51607 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51608 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51609 if pSubOpen == uintptr(0) { 51610 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 51611 } else { 51612 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51613 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51614 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 51615 } 51616 } else { 51617 var i int32 51618 var iBaseGroup int32 = int32(size / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51619 var pSubOpen uintptr 51620 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 51621 51622 for i = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal - 1; i > iBaseGroup && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i-- { 51623 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 51624 multiplexSubClose(tls, pGroup, i, pOrigVfs) 51625 } else { 51626 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 0) 51627 if pSubOpen != 0 { 51628 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51629 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51630 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, int64(0)) 51631 } 51632 } 51633 } 51634 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 51635 pSubOpen = multiplexSubOpen(tls, pGroup, iBaseGroup, bp, uintptr(0), 0) 51636 if pSubOpen != 0 { 51637 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51638 f func(*libc.TLS, uintptr, sqlite3_int64) int32 51639 })(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)) 51640 } 51641 } 51642 if *(*int32)(unsafe.Pointer(bp)) != 0 { 51643 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 51644 } 51645 } 51646 return *(*int32)(unsafe.Pointer(bp)) 51647 } 51648 51649 func multiplexSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 51650 var p uintptr = pConn 51651 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51652 var rc int32 = SQLITE_OK 51653 var i int32 51654 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 51655 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(i)*16)).Fp 51656 if pSubOpen != 0 { 51657 var rc2 int32 = (*struct { 51658 f func(*libc.TLS, uintptr, int32) int32 51659 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 51660 if rc2 != SQLITE_OK { 51661 rc = rc2 51662 } 51663 } 51664 } 51665 return rc 51666 } 51667 51668 func multiplexFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 51669 bp := tls.Alloc(4) 51670 defer tls.Free(4) 51671 51672 var p uintptr = pConn 51673 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51674 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 51675 var i int32 51676 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 51677 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 51678 if pSubOpen == uintptr(0) { 51679 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(7)<<8 51680 } else { 51681 *(*int32)(unsafe.Pointer(bp)) = (*struct { 51682 f func(*libc.TLS, uintptr, uintptr) int32 51683 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, pSize) 51684 } 51685 } else { 51686 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = int64(0) 51687 for i = 0; *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i++ { 51688 var sz sqlite3_int64 = multiplexSubSize(tls, pGroup, i, bp) 51689 if sz == int64(0) { 51690 break 51691 } 51692 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = sqlite3_int64(i)*sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) + sz 51693 } 51694 } 51695 return *(*int32)(unsafe.Pointer(bp)) 51696 } 51697 51698 func multiplexLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 51699 bp := tls.Alloc(4) 51700 defer tls.Free(4) 51701 51702 var p uintptr = pConn 51703 51704 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51705 if pSubOpen != 0 { 51706 return (*struct { 51707 f func(*libc.TLS, uintptr, int32) int32 51708 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 51709 } 51710 return SQLITE_BUSY 51711 } 51712 51713 func multiplexUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 51714 bp := tls.Alloc(4) 51715 defer tls.Free(4) 51716 51717 var p uintptr = pConn 51718 51719 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51720 if pSubOpen != 0 { 51721 return (*struct { 51722 f func(*libc.TLS, uintptr, int32) int32 51723 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 51724 } 51725 return SQLITE_IOERR | int32(8)<<8 51726 } 51727 51728 func multiplexCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 51729 bp := tls.Alloc(4) 51730 defer tls.Free(4) 51731 51732 var p uintptr = pConn 51733 51734 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51735 if pSubOpen != 0 { 51736 return (*struct { 51737 f func(*libc.TLS, uintptr, uintptr) int32 51738 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 51739 } 51740 return SQLITE_IOERR | int32(14)<<8 51741 } 51742 51743 func multiplexFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 51744 bp := tls.Alloc(44) 51745 defer tls.Free(44) 51746 51747 var p uintptr = pConn 51748 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 51749 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 51750 var pSubOpen uintptr 51751 51752 if !(gMultiplex.FisInitialized != 0) { 51753 return SQLITE_MISUSE 51754 } 51755 switch op { 51756 case MULTIPLEX_CTRL_ENABLE: 51757 if pArg != 0 { 51758 var bEnabled int32 = *(*int32)(unsafe.Pointer(pArg)) 51759 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(bEnabled) 51760 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51761 } 51762 break 51763 case MULTIPLEX_CTRL_SET_CHUNK_SIZE: 51764 if pArg != 0 { 51765 var szChunk uint32 = *(*uint32)(unsafe.Pointer(pArg)) 51766 if szChunk < uint32(1) { 51767 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_MISUSE 51768 } else { 51769 szChunk = szChunk + uint32(MAX_PAGE_SIZE-1) 51770 szChunk = szChunk & libc.Uint32FromInt32(libc.CplInt32(MAX_PAGE_SIZE-1)) 51771 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = szChunk 51772 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51773 } 51774 } 51775 break 51776 case MULTIPLEX_CTRL_SET_MAX_CHUNKS: 51777 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51778 break 51779 case SQLITE_FCNTL_SIZE_HINT: 51780 fallthrough 51781 case SQLITE_FCNTL_CHUNK_SIZE: 51782 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51783 break 51784 case SQLITE_FCNTL_PRAGMA: 51785 { 51786 var aFcntl uintptr = pArg 51787 51788 if *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)) != 0 && sqlite3.Xsqlite3_strnicmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34706, 10) == 0 { 51789 *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) = int64(0) 51790 multiplexFileSize(tls, pConn, bp+32) 51791 51792 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34717) == 0 { 51793 if *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)) != 0 && *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(aFcntl + 2*8)))) != 0 { 51794 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4178) == 0 || 51795 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+28899) == 0 { 51796 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(1) 51797 } else if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4542) == 0 || 51798 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+14193) == 0 { 51799 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(0) 51800 } 51801 } 51802 51803 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, func() uintptr { 51804 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 51805 return ts + 4178 51806 } 51807 return ts + 4542 51808 }(), 0) 51809 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51810 break 51811 } 51812 51813 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34736) == 0 { 51814 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, libc.Bool32(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0))) 51815 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51816 break 51817 } 51818 51819 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34754) == 0 && 51820 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 51821 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+17791, libc.VaList(bp+8, (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 51822 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51823 break 51824 } 51825 51826 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34774) == 0 { 51827 var n int32 = 0 51828 var ii int32 51829 for ii = 0; ii < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; ii++ { 51830 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(ii)*16)).Fp != uintptr(0) { 51831 n++ 51832 } 51833 } 51834 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+16, n)) 51835 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 51836 break 51837 } 51838 } 51839 51840 } 51841 fallthrough 51842 default: 51843 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp+40, uintptr(0), 0) 51844 if pSubOpen != 0 { 51845 *(*int32)(unsafe.Pointer(bp + 40)) = (*struct { 51846 f func(*libc.TLS, uintptr, int32, uintptr) int32 51847 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 51848 if op == SQLITE_FCNTL_VFSNAME && *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 51849 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+34794, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(pArg)))) 51850 } 51851 } 51852 break 51853 } 51854 return *(*int32)(unsafe.Pointer(bp + 40)) 51855 } 51856 51857 func multiplexSectorSize(tls *libc.TLS, pConn uintptr) int32 { 51858 bp := tls.Alloc(4) 51859 defer tls.Free(4) 51860 51861 var p uintptr = pConn 51862 51863 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51864 if pSubOpen != 0 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize != 0 { 51865 return (*struct { 51866 f func(*libc.TLS, uintptr) int32 51867 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 51868 } 51869 return DEFAULT_SECTOR_SIZE 51870 } 51871 51872 func multiplexDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 51873 bp := tls.Alloc(4) 51874 defer tls.Free(4) 51875 51876 var p uintptr = pConn 51877 51878 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51879 if pSubOpen != 0 { 51880 return (*struct { 51881 f func(*libc.TLS, uintptr) int32 51882 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 51883 } 51884 return 0 51885 } 51886 51887 func multiplexShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 51888 bp := tls.Alloc(4) 51889 defer tls.Free(4) 51890 51891 var p uintptr = pConn 51892 51893 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51894 if pSubOpen != 0 { 51895 return (*struct { 51896 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 51897 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 51898 } 51899 return SQLITE_IOERR 51900 } 51901 51902 func multiplexShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 51903 bp := tls.Alloc(4) 51904 defer tls.Free(4) 51905 51906 var p uintptr = pConn 51907 51908 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51909 if pSubOpen != 0 { 51910 return (*struct { 51911 f func(*libc.TLS, uintptr, int32, int32, int32) int32 51912 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 51913 } 51914 return SQLITE_BUSY 51915 } 51916 51917 func multiplexShmBarrier(tls *libc.TLS, pConn uintptr) { 51918 bp := tls.Alloc(4) 51919 defer tls.Free(4) 51920 51921 var p uintptr = pConn 51922 51923 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51924 if pSubOpen != 0 { 51925 (*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) 51926 } 51927 } 51928 51929 func multiplexShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 51930 bp := tls.Alloc(4) 51931 defer tls.Free(4) 51932 51933 var p uintptr = pConn 51934 51935 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 51936 if pSubOpen != 0 { 51937 return (*struct { 51938 f func(*libc.TLS, uintptr, int32) int32 51939 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 51940 } 51941 return SQLITE_OK 51942 } 51943 51944 func sqlite3_multiplex_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 51945 var pOrigVfs uintptr 51946 if gMultiplex.FisInitialized != 0 { 51947 return SQLITE_MISUSE 51948 } 51949 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 51950 if pOrigVfs == uintptr(0) { 51951 return SQLITE_ERROR 51952 } 51953 51954 gMultiplex.FisInitialized = 1 51955 gMultiplex.FpOrigVfs = pOrigVfs 51956 gMultiplex.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 51957 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gMultiplex)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(multiplexConn{}))) 51958 gMultiplex.FsThisVfs.FzName = ts + 34807 51959 gMultiplex.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 51960 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 51961 }{multiplexOpen})) 51962 gMultiplex.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 51963 f func(*libc.TLS, uintptr, uintptr, int32) int32 51964 }{multiplexDelete})) 51965 gMultiplex.FsThisVfs.FxAccess = *(*uintptr)(unsafe.Pointer(&struct { 51966 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51967 }{multiplexAccess})) 51968 gMultiplex.FsThisVfs.FxFullPathname = *(*uintptr)(unsafe.Pointer(&struct { 51969 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 51970 }{multiplexFullPathname})) 51971 gMultiplex.FsThisVfs.FxDlOpen = *(*uintptr)(unsafe.Pointer(&struct { 51972 f func(*libc.TLS, uintptr, uintptr) uintptr 51973 }{multiplexDlOpen})) 51974 gMultiplex.FsThisVfs.FxDlError = *(*uintptr)(unsafe.Pointer(&struct { 51975 f func(*libc.TLS, uintptr, int32, uintptr) 51976 }{multiplexDlError})) 51977 gMultiplex.FsThisVfs.FxDlSym = *(*uintptr)(unsafe.Pointer(&struct { 51978 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51979 }{multiplexDlSym})) 51980 gMultiplex.FsThisVfs.FxDlClose = *(*uintptr)(unsafe.Pointer(&struct { 51981 f func(*libc.TLS, uintptr, uintptr) 51982 }{multiplexDlClose})) 51983 gMultiplex.FsThisVfs.FxRandomness = *(*uintptr)(unsafe.Pointer(&struct { 51984 f func(*libc.TLS, uintptr, int32, uintptr) int32 51985 }{multiplexRandomness})) 51986 gMultiplex.FsThisVfs.FxSleep = *(*uintptr)(unsafe.Pointer(&struct { 51987 f func(*libc.TLS, uintptr, int32) int32 51988 }{multiplexSleep})) 51989 gMultiplex.FsThisVfs.FxCurrentTime = *(*uintptr)(unsafe.Pointer(&struct { 51990 f func(*libc.TLS, uintptr, uintptr) int32 51991 }{multiplexCurrentTime})) 51992 gMultiplex.FsThisVfs.FxGetLastError = *(*uintptr)(unsafe.Pointer(&struct { 51993 f func(*libc.TLS, uintptr, int32, uintptr) int32 51994 }{multiplexGetLastError})) 51995 gMultiplex.FsThisVfs.FxCurrentTimeInt64 = *(*uintptr)(unsafe.Pointer(&struct { 51996 f func(*libc.TLS, uintptr, uintptr) int32 51997 }{multiplexCurrentTimeInt64})) 51998 51999 gMultiplex.FsIoMethodsV1.FiVersion = 1 52000 gMultiplex.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 52001 f func(*libc.TLS, uintptr) int32 52002 }{multiplexClose})) 52003 gMultiplex.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 52004 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52005 }{multiplexRead})) 52006 gMultiplex.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 52007 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52008 }{multiplexWrite})) 52009 gMultiplex.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 52010 f func(*libc.TLS, uintptr, sqlite3_int64) int32 52011 }{multiplexTruncate})) 52012 gMultiplex.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 52013 f func(*libc.TLS, uintptr, int32) int32 52014 }{multiplexSync})) 52015 gMultiplex.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 52016 f func(*libc.TLS, uintptr, uintptr) int32 52017 }{multiplexFileSize})) 52018 gMultiplex.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 52019 f func(*libc.TLS, uintptr, int32) int32 52020 }{multiplexLock})) 52021 gMultiplex.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 52022 f func(*libc.TLS, uintptr, int32) int32 52023 }{multiplexUnlock})) 52024 gMultiplex.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 52025 f func(*libc.TLS, uintptr, uintptr) int32 52026 }{multiplexCheckReservedLock})) 52027 gMultiplex.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 52028 f func(*libc.TLS, uintptr, int32, uintptr) int32 52029 }{multiplexFileControl})) 52030 gMultiplex.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 52031 f func(*libc.TLS, uintptr) int32 52032 }{multiplexSectorSize})) 52033 gMultiplex.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 52034 f func(*libc.TLS, uintptr) int32 52035 }{multiplexDeviceCharacteristics})) 52036 gMultiplex.FsIoMethodsV2 = gMultiplex.FsIoMethodsV1 52037 gMultiplex.FsIoMethodsV2.FiVersion = 2 52038 gMultiplex.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 52039 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 52040 }{multiplexShmMap})) 52041 gMultiplex.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 52042 f func(*libc.TLS, uintptr, int32, int32, int32) int32 52043 }{multiplexShmLock})) 52044 gMultiplex.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{multiplexShmBarrier})) 52045 gMultiplex.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 52046 f func(*libc.TLS, uintptr, int32) int32 52047 }{multiplexShmUnmap})) 52048 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gMultiplex))+8, makeDefault) 52049 52050 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 52051 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 52052 }{multiplexFuncInit}))) 52053 52054 return SQLITE_OK 52055 } 52056 52057 func sqlite3_multiplex_shutdown(tls *libc.TLS, eForce int32) int32 { 52058 var rc int32 = SQLITE_OK 52059 if gMultiplex.FisInitialized == 0 { 52060 return SQLITE_MISUSE 52061 } 52062 gMultiplex.FisInitialized = 0 52063 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gMultiplex))+8) 52064 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gMultiplex)), 0, uint64(unsafe.Sizeof(gMultiplex))) 52065 return rc 52066 } 52067 52068 func test_multiplex_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52069 bp := tls.Alloc(4) 52070 defer tls.Free(4) 52071 52072 var zName uintptr 52073 52074 var rc int32 52075 52076 _ = clientData 52077 52078 if objc != 3 { 52079 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 52080 return TCL_ERROR 52081 } 52082 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52083 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 52084 return TCL_ERROR 52085 } 52086 if int32(*(*uint8)(unsafe.Pointer(zName))) == 0 { 52087 zName = uintptr(0) 52088 } 52089 52090 rc = sqlite3_multiplex_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 52091 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 52092 52093 return TCL_OK 52094 } 52095 52096 func test_multiplex_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52097 var rc int32 52098 52099 _ = clientData 52100 52101 if objc == 2 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+34834) != 0 { 52102 objc = 3 52103 } 52104 if objc != 1 && objc != 2 { 52105 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34841) 52106 return TCL_ERROR 52107 } 52108 52109 rc = sqlite3_multiplex_shutdown(tls, libc.Bool32(objc == 2)) 52110 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 52111 52112 return TCL_OK 52113 } 52114 52115 func test_multiplex_control(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 52116 bp := tls.Alloc(176) 52117 defer tls.Free(176) 52118 52119 var rc int32 52120 52121 var db uintptr 52122 *(*int32)(unsafe.Pointer(bp + 172)) = 0 52123 var pArg uintptr = uintptr(0) 52124 52125 *(*[4]struct { 52126 FzName uintptr 52127 Fop int32 52128 Fargtype int32 52129 })(unsafe.Pointer(bp + 104)) = [4]struct { 52130 FzName uintptr 52131 Fop int32 52132 Fargtype int32 52133 }{ 52134 {FzName: ts + 10145, Fop: MULTIPLEX_CTRL_ENABLE, Fargtype: 1}, 52135 {FzName: ts + 34850, Fop: MULTIPLEX_CTRL_SET_CHUNK_SIZE, Fargtype: 1}, 52136 {FzName: ts + 34861, Fop: MULTIPLEX_CTRL_SET_MAX_CHUNKS, Fargtype: 1}, 52137 {}, 52138 } 52139 52140 if objc != 5 { 52141 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34872) 52142 return TCL_ERROR 52143 } 52144 52145 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) { 52146 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+34908, 0)) 52147 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+11945, 0)) 52148 return TCL_ERROR 52149 } else { 52150 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 40)).FobjClientData)) 52151 } 52152 52153 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 52154 interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+104, int32(unsafe.Sizeof(struct { 52155 FzName uintptr 52156 Fop int32 52157 Fargtype int32 52158 }{})), ts+2014, 0, bp+168) 52159 if rc != TCL_OK { 52160 return rc 52161 } 52162 52163 switch (*struct { 52164 FzName uintptr 52165 Fop int32 52166 Fargtype int32 52167 })(unsafe.Pointer(bp + 104 + uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fargtype { 52168 case 1: 52169 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+172) != 0 { 52170 return TCL_ERROR 52171 } 52172 pArg = bp + 172 52173 break 52174 default: 52175 tcl.XTcl_WrongNumArgs(tls, interp, 4, objv, ts+2523) 52176 return TCL_ERROR 52177 } 52178 52179 rc = sqlite3.Xsqlite3_file_control(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), (*struct { 52180 FzName uintptr 52181 Fop int32 52182 Fargtype int32 52183 })(unsafe.Pointer(bp+104+uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fop, pArg) 52184 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 52185 if rc == SQLITE_OK { 52186 return TCL_OK 52187 } 52188 return TCL_ERROR 52189 } 52190 52191 func Sqlitemultiplex_Init(tls *libc.TLS, interp uintptr) int32 { 52192 var i int32 52193 52194 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd7))/uint64(unsafe.Sizeof(struct { 52195 FzName uintptr 52196 FxProc uintptr 52197 }{})); i++ { 52198 tcl.XTcl_CreateObjCommand(tls, interp, aCmd7[i].FzName, aCmd7[i].FxProc, uintptr(0), uintptr(0)) 52199 } 52200 52201 return TCL_OK 52202 } 52203 52204 var aCmd7 = [3]struct { 52205 FzName uintptr 52206 FxProc uintptr 52207 }{ 52208 {FzName: ts + 34940, FxProc: 0}, 52209 {FzName: ts + 34969, FxProc: 0}, 52210 {FzName: ts + 34996, FxProc: 0}, 52211 } 52212 52213 type sqlite3_mutex = sqlite3_mutex1 52214 52215 var aName = [15]uintptr{ 52216 ts + 35022, ts + 35027, ts + 35037, ts + 35049, 52217 ts + 35060, ts + 35072, ts + 35084, ts + 35095, 52218 ts + 35107, ts + 35119, ts + 35131, ts + 35143, 52219 ts + 35155, ts + 35167, uintptr(0), 52220 } 52221 52222 type test_mutex_globals = struct { 52223 FisInstalled int32 52224 FdisableInit int32 52225 FdisableTry int32 52226 FisInit int32 52227 Fm sqlite3_mutex_methods 52228 FaCounter [14]int32 52229 FaStatic [12]sqlite3_mutex 52230 } 52231 52232 var g3 = test_mutex_globals{} 52233 52234 func counterMutexHeld(tls *libc.TLS, p uintptr) int32 { 52235 return (*struct { 52236 f func(*libc.TLS, uintptr) int32 52237 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexHeld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 52238 } 52239 52240 func counterMutexNotheld(tls *libc.TLS, p uintptr) int32 { 52241 return (*struct { 52242 f func(*libc.TLS, uintptr) int32 52243 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexNotheld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 52244 } 52245 52246 func counterMutexInit(tls *libc.TLS) int32 { 52247 var rc int32 52248 if g3.FdisableInit != 0 { 52249 return g3.FdisableInit 52250 } 52251 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexInit})).f(tls) 52252 g3.FisInit = 1 52253 return rc 52254 } 52255 52256 func counterMutexEnd(tls *libc.TLS) int32 { 52257 g3.FisInit = 0 52258 return (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnd})).f(tls) 52259 } 52260 52261 func counterMutexAlloc(tls *libc.TLS, eType int32) uintptr { 52262 var pReal uintptr 52263 var pRet uintptr = uintptr(0) 52264 52265 pReal = (*struct { 52266 f func(*libc.TLS, int32) uintptr 52267 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexAlloc})).f(tls, eType) 52268 if !(pReal != 0) { 52269 return uintptr(0) 52270 } 52271 52272 if eType == SQLITE_MUTEX_FAST || eType == SQLITE_MUTEX_RECURSIVE { 52273 pRet = libc.Xmalloc(tls, uint64(unsafe.Sizeof(sqlite3_mutex{}))) 52274 } else { 52275 var eStaticType int32 = eType - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_RECURSIVE + 1))) 52276 52277 pRet = uintptr(unsafe.Pointer(&g3)) + 144 + uintptr(eStaticType)*16 52278 } 52279 52280 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FeType = eType 52281 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FpReal = pReal 52282 return pRet 52283 } 52284 52285 func counterMutexFree(tls *libc.TLS, p uintptr) { 52286 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexFree})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 52287 if (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_FAST || (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_RECURSIVE { 52288 libc.Xfree(tls, p) 52289 } 52290 } 52291 52292 func counterMutexEnter(tls *libc.TLS, p uintptr) { 52293 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 52294 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnter})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 52295 } 52296 52297 func counterMutexTry(tls *libc.TLS, p uintptr) int32 { 52298 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 52299 if g3.FdisableTry != 0 { 52300 return SQLITE_BUSY 52301 } 52302 return (*struct { 52303 f func(*libc.TLS, uintptr) int32 52304 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexTry})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 52305 } 52306 52307 func counterMutexLeave(tls *libc.TLS, p uintptr) { 52308 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexLeave})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 52309 } 52310 52311 func test_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52312 var rc int32 52313 52314 if objc != 1 { 52315 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52316 return TCL_ERROR 52317 } 52318 52319 rc = sqlite3.Xsqlite3_shutdown(tls) 52320 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52321 return TCL_OK 52322 } 52323 52324 func test_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52325 var rc int32 52326 52327 if objc != 1 { 52328 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52329 return TCL_ERROR 52330 } 52331 52332 rc = sqlite3.Xsqlite3_initialize(tls) 52333 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52334 return TCL_OK 52335 } 52336 52337 func test_install_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52338 bp := tls.Alloc(136) 52339 defer tls.Free(136) 52340 52341 var rc int32 = SQLITE_OK 52342 52343 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 64)) = sqlite3_mutex_methods{ 52344 FxMutexInit: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexInit})), 52345 FxMutexEnd: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexEnd})), 52346 FxMutexAlloc: *(*uintptr)(unsafe.Pointer(&struct { 52347 f func(*libc.TLS, int32) uintptr 52348 }{counterMutexAlloc})), 52349 FxMutexFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexFree})), 52350 FxMutexEnter: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexEnter})), 52351 FxMutexTry: *(*uintptr)(unsafe.Pointer(&struct { 52352 f func(*libc.TLS, uintptr) int32 52353 }{counterMutexTry})), 52354 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexLeave})), 52355 FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 52356 f func(*libc.TLS, uintptr) int32 52357 }{counterMutexHeld})), 52358 FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 52359 f func(*libc.TLS, uintptr) int32 52360 }{counterMutexNotheld})), 52361 } 52362 52363 if objc != 2 { 52364 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18238) 52365 return TCL_ERROR 52366 } 52367 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+56) { 52368 return TCL_ERROR 52369 } 52370 52371 if *(*int32)(unsafe.Pointer(bp + 56)) == g3.FisInstalled { 52372 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35179, 0)) 52373 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, func() uintptr { 52374 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 52375 return ts + 35199 52376 } 52377 return ts + 35217 52378 }(), 0)) 52379 return TCL_ERROR 52380 } 52381 52382 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 52383 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp+32, uintptr(unsafe.Pointer(&g3))+16)) 52384 if rc == SQLITE_OK { 52385 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+40, bp+64)) 52386 } 52387 g3.FdisableTry = 0 52388 } else { 52389 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+48, uintptr(unsafe.Pointer(&g3))+16)) 52390 libc.Xmemset(tls, uintptr(unsafe.Pointer(&g3))+16, 0, uint64(unsafe.Sizeof(sqlite3_mutex_methods{}))) 52391 } 52392 52393 if rc == SQLITE_OK { 52394 g3.FisInstalled = *(*int32)(unsafe.Pointer(bp + 56)) 52395 } 52396 52397 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52398 return TCL_OK 52399 } 52400 52401 func test_read_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52402 var pRet uintptr 52403 var ii int32 52404 52405 if objc != 1 { 52406 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52407 return TCL_ERROR 52408 } 52409 52410 pRet = tcl.XTcl_NewObj(tls) 52411 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 52412 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 52413 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, aName[ii], -1)) 52414 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)))) 52415 } 52416 tcl.XTcl_SetObjResult(tls, interp, pRet) 52417 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 52418 var _objPtr uintptr = pRet 52419 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 52420 tcl.XTclFreeObj(tls, _objPtr) 52421 } 52422 } 52423 52424 return TCL_OK 52425 } 52426 52427 func test_clear_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52428 var ii int32 52429 52430 if objc != 1 { 52431 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52432 return TCL_ERROR 52433 } 52434 52435 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 52436 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)) = 0 52437 } 52438 return TCL_OK 52439 } 52440 52441 func test_alloc_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52442 bp := tls.Alloc(124) 52443 defer tls.Free(124) 52444 52445 var p uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 52446 52447 sqlite3.Xsqlite3_mutex_free(tls, p) 52448 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]uint8{})), bp+24, ts+9889, libc.VaList(bp, p)) 52449 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, uintptr(0))) 52450 return TCL_OK 52451 } 52452 52453 func test_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52454 bp := tls.Alloc(68) 52455 defer tls.Free(68) 52456 52457 *(*[4]ConfigOption)(unsafe.Pointer(bp)) = [4]ConfigOption{ 52458 {FzName: ts + 35231, FiValue: SQLITE_CONFIG_SINGLETHREAD}, 52459 {FzName: ts + 35244, FiValue: SQLITE_CONFIG_MULTITHREAD}, 52460 {FzName: ts + 35256, FiValue: SQLITE_CONFIG_SERIALIZED}, 52461 {}, 52462 } 52463 var s int32 = int32(unsafe.Sizeof(ConfigOption{})) 52464 52465 var rc int32 52466 52467 if objc != 2 { 52468 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52469 return TCL_ERROR 52470 } 52471 52472 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, s, ts+17631, 0, bp+64) != 0 { 52473 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+64) != 0 { 52474 return TCL_ERROR 52475 } 52476 } else { 52477 *(*int32)(unsafe.Pointer(bp + 64)) = (*ConfigOption)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 64)))*16)).FiValue 52478 } 52479 52480 rc = sqlite3.Xsqlite3_config(tls, *(*int32)(unsafe.Pointer(bp + 64)), 0) 52481 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52482 return TCL_OK 52483 } 52484 52485 type ConfigOption = struct { 52486 FzName uintptr 52487 FiValue int32 52488 F__ccgo_pad1 [4]byte 52489 } 52490 52491 func getDbPointer1(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 52492 bp := tls.Alloc(64) 52493 defer tls.Free(64) 52494 52495 var db uintptr 52496 52497 var zCmd uintptr = tcl.XTcl_GetString(tls, pObj) 52498 if tcl.XTcl_GetCommandInfo(tls, pInterp, zCmd, bp) != 0 { 52499 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)) 52500 } else { 52501 db = sqlite3TestTextToPtr(tls, zCmd) 52502 } 52503 52504 return db 52505 } 52506 52507 func getStaticMutexPointer(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 52508 bp := tls.Alloc(4) 52509 defer tls.Free(4) 52510 52511 if tcl.XTcl_GetIndexFromObjStruct(tls, pInterp, pObj, uintptr(unsafe.Pointer(&aName)), int32(unsafe.Sizeof(uintptr(0))), ts+35267, 0, bp) != 0 { 52512 return uintptr(0) 52513 } 52514 52515 return counterMutexAlloc(tls, *(*int32)(unsafe.Pointer(bp))) 52516 } 52517 52518 func test_enter_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52519 var pMutex uintptr 52520 if objc != 2 { 52521 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 52522 return TCL_ERROR 52523 } 52524 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52525 if !(pMutex != 0) { 52526 return TCL_ERROR 52527 } 52528 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 52529 return TCL_OK 52530 } 52531 52532 func test_leave_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52533 var pMutex uintptr 52534 if objc != 2 { 52535 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 52536 return TCL_ERROR 52537 } 52538 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52539 if !(pMutex != 0) { 52540 return TCL_ERROR 52541 } 52542 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 52543 return TCL_OK 52544 } 52545 52546 func test_enter_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52547 var db uintptr 52548 if objc != 2 { 52549 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 52550 return TCL_ERROR 52551 } 52552 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52553 if !(db != 0) { 52554 return TCL_ERROR 52555 } 52556 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 52557 return TCL_OK 52558 } 52559 52560 func test_leave_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52561 var db uintptr 52562 if objc != 2 { 52563 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 52564 return TCL_ERROR 52565 } 52566 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52567 if !(db != 0) { 52568 return TCL_ERROR 52569 } 52570 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 52571 return TCL_OK 52572 } 52573 52574 func Sqlitetest_mutex_Init(tls *libc.TLS, interp uintptr) int32 { 52575 var i int32 52576 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd8))/uint64(unsafe.Sizeof(struct { 52577 FzName uintptr 52578 FxProc uintptr 52579 }{})); i++ { 52580 tcl.XTcl_CreateObjCommand(tls, interp, aCmd8[i].FzName, aCmd8[i].FxProc, uintptr(0), uintptr(0)) 52581 } 52582 52583 tcl.XTcl_LinkVar(tls, interp, ts+35278, 52584 uintptr(unsafe.Pointer(&g3))+4, TCL_LINK_INT) 52585 tcl.XTcl_LinkVar(tls, interp, ts+35297, 52586 uintptr(unsafe.Pointer(&g3))+8, TCL_LINK_INT) 52587 return SQLITE_OK 52588 } 52589 52590 var aCmd8 = [11]struct { 52591 FzName uintptr 52592 FxProc uintptr 52593 }{ 52594 {FzName: ts + 35315, FxProc: 0}, 52595 {FzName: ts + 35332, FxProc: 0}, 52596 {FzName: ts + 35351, FxProc: 0}, 52597 {FzName: ts + 35366, FxProc: 0}, 52598 {FzName: ts + 35385, FxProc: 0}, 52599 {FzName: ts + 35404, FxProc: 0}, 52600 {FzName: ts + 35419, FxProc: 0}, 52601 {FzName: ts + 35434, FxProc: 0}, 52602 {FzName: ts + 35454, FxProc: 0}, 52603 {FzName: ts + 35477, FxProc: 0}, 52604 {FzName: ts + 35497, FxProc: 0}, 52605 } 52606 52607 type fs_real_file1 = struct { 52608 FpFile uintptr 52609 FzName uintptr 52610 FnDatabase int32 52611 FnJournal int32 52612 FnBlob int32 52613 FnRef int32 52614 FpNext uintptr 52615 FppThis uintptr 52616 } 52617 52618 type fs_real_file = fs_real_file1 52619 52620 type fs_file1 = struct { 52621 Fbase sqlite3_file 52622 FeType int32 52623 F__ccgo_pad1 [4]byte 52624 FpReal uintptr 52625 } 52626 52627 type fs_file = fs_file1 52628 52629 type tmp_file1 = struct { 52630 Fbase sqlite3_file 52631 FnSize int32 52632 FnAlloc int32 52633 FzAlloc uintptr 52634 } 52635 52636 type tmp_file = tmp_file1 52637 52638 type fs_vfs_t1 = struct { 52639 Fbase sqlite3_vfs 52640 FpFileList uintptr 52641 FpParent uintptr 52642 } 52643 52644 type fs_vfs_t = fs_vfs_t1 52645 52646 var fs_vfs = fs_vfs_t{ 52647 Fbase: sqlite3_vfs{ 52648 FiVersion: 1, 52649 FzName: ts + 31055, 52650 FxOpen: 0, 52651 FxDelete: 0, 52652 FxAccess: 0, 52653 FxFullPathname: 0, 52654 FxDlOpen: 0, 52655 FxDlError: 0, 52656 FxDlSym: 0, 52657 FxDlClose: 0, 52658 FxRandomness: 0, 52659 FxSleep: 0, 52660 FxCurrentTime: 0, 52661 }, 52662 } 52663 52664 var fs_io_methods = sqlite3_io_methods{ 52665 FiVersion: 1, 52666 FxClose: 0, 52667 FxRead: 0, 52668 FxWrite: 0, 52669 FxTruncate: 0, 52670 FxSync: 0, 52671 FxFileSize: 0, 52672 FxLock: 0, 52673 FxUnlock: 0, 52674 FxCheckReservedLock: 0, 52675 FxFileControl: 0, 52676 FxSectorSize: 0, 52677 FxDeviceCharacteristics: 0, 52678 } 52679 52680 var tmp_io_methods = sqlite3_io_methods{ 52681 FiVersion: 1, 52682 FxClose: 0, 52683 FxRead: 0, 52684 FxWrite: 0, 52685 FxTruncate: 0, 52686 FxSync: 0, 52687 FxFileSize: 0, 52688 FxLock: 0, 52689 FxUnlock: 0, 52690 FxCheckReservedLock: 0, 52691 FxFileControl: 0, 52692 FxSectorSize: 0, 52693 FxDeviceCharacteristics: 0, 52694 } 52695 52696 func tmpClose(tls *libc.TLS, pFile uintptr) int32 { 52697 var pTmp uintptr = pFile 52698 sqlite3.Xsqlite3_free(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc) 52699 return SQLITE_OK 52700 } 52701 52702 func tmpRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52703 var pTmp uintptr = pFile 52704 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) { 52705 return SQLITE_IOERR | int32(2)<<8 52706 } 52707 libc.Xmemcpy(tls, zBuf, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), uint64(iAmt)) 52708 return SQLITE_OK 52709 } 52710 52711 func tmpWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52712 var pTmp uintptr = pFile 52713 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc) { 52714 var nNew int32 = int32(int64(2) * (sqlite_int64(iAmt) + iOfst + sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc))) 52715 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc, nNew) 52716 if !(zNew != 0) { 52717 return SQLITE_NOMEM 52718 } 52719 (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc = zNew 52720 (*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc = nNew 52721 } 52722 libc.Xmemcpy(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), zBuf, uint64(iAmt)) 52723 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 52724 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) > iOfst+sqlite_int64(iAmt) { 52725 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 52726 } 52727 return int32(iOfst + sqlite_int64(iAmt)) 52728 }() 52729 return SQLITE_OK 52730 } 52731 52732 func tmpTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52733 var pTmp uintptr = pFile 52734 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 52735 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) < size { 52736 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 52737 } 52738 return int32(size) 52739 }() 52740 return SQLITE_OK 52741 } 52742 52743 func tmpSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52744 return SQLITE_OK 52745 } 52746 52747 func tmpFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52748 var pTmp uintptr = pFile 52749 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) 52750 return SQLITE_OK 52751 } 52752 52753 func tmpLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52754 return SQLITE_OK 52755 } 52756 52757 func tmpUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52758 return SQLITE_OK 52759 } 52760 52761 func tmpCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52762 *(*int32)(unsafe.Pointer(pResOut)) = 0 52763 return SQLITE_OK 52764 } 52765 52766 func tmpFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52767 return SQLITE_OK 52768 } 52769 52770 func tmpSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52771 return 0 52772 } 52773 52774 func tmpDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52775 return 0 52776 } 52777 52778 func fsClose1(tls *libc.TLS, pFile uintptr) int32 { 52779 var rc int32 = SQLITE_OK 52780 var p uintptr = pFile 52781 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52782 52783 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef-- 52784 52785 if (*fs_real_file)(unsafe.Pointer(pReal)).FnRef == 0 { 52786 *(*uintptr)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FppThis)) = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 52787 if (*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0 { 52788 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = (*fs_real_file)(unsafe.Pointer(pReal)).FppThis 52789 } 52790 rc = (*struct { 52791 f func(*libc.TLS, uintptr) int32 52792 })(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) 52793 sqlite3.Xsqlite3_free(tls, pReal) 52794 } 52795 52796 return rc 52797 } 52798 52799 func fsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52800 var rc int32 = SQLITE_OK 52801 var p uintptr = pFile 52802 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52803 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52804 52805 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) || 52806 (*fs_file)(unsafe.Pointer(p)).FeType == JOURNAL_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 52807 rc = SQLITE_IOERR | int32(2)<<8 52808 } else if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52809 rc = (*struct { 52810 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52811 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxRead})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 52812 } else { 52813 var iRem int32 = iAmt 52814 var iBuf int32 = 0 52815 var ii int32 = int32(iOfst) 52816 for iRem > 0 && rc == SQLITE_OK { 52817 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 52818 var iRealAmt int32 = func() int32 { 52819 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 52820 return iRem 52821 } 52822 return BLOCKSIZE - iRealOff%BLOCKSIZE 52823 }() 52824 52825 rc = (*struct { 52826 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52827 })(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)) 52828 ii = ii + iRealAmt 52829 iBuf = iBuf + iRealAmt 52830 iRem = iRem - iRealAmt 52831 } 52832 } 52833 52834 return rc 52835 } 52836 52837 func fsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 52838 var rc int32 = SQLITE_OK 52839 var p uintptr = pFile 52840 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52841 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52842 52843 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52844 if sqlite_int64(iAmt)+iOfst+int64(BLOCKSIZE) > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-(*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 52845 rc = SQLITE_FULL 52846 } else { 52847 rc = (*struct { 52848 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52849 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 52850 if rc == SQLITE_OK { 52851 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 52852 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) > sqlite_int64(iAmt)+iOfst { 52853 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 52854 } 52855 return int32(sqlite_int64(iAmt) + iOfst) 52856 }() 52857 } 52858 } 52859 } else { 52860 var iRem int32 = iAmt 52861 var iBuf int32 = 0 52862 var ii int32 = int32(iOfst) 52863 for iRem > 0 && rc == SQLITE_OK { 52864 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 52865 var iRealAmt int32 = func() int32 { 52866 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 52867 return iRem 52868 } 52869 return BLOCKSIZE - iRealOff%BLOCKSIZE 52870 }() 52871 52872 if iRealOff < (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase+BLOCKSIZE { 52873 rc = SQLITE_FULL 52874 } else { 52875 rc = (*struct { 52876 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52877 })(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)) 52878 ii = ii + iRealAmt 52879 iBuf = iBuf + iRealAmt 52880 iRem = iRem - iRealAmt 52881 } 52882 } 52883 if rc == SQLITE_OK { 52884 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 52885 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) > sqlite_int64(iAmt)+iOfst { 52886 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 52887 } 52888 return int32(sqlite_int64(iAmt) + iOfst) 52889 }() 52890 } 52891 } 52892 52893 return rc 52894 } 52895 52896 func fsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 52897 var p uintptr = pFile 52898 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52899 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52900 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 52901 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) < size { 52902 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 52903 } 52904 return int32(size) 52905 }() 52906 } else { 52907 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 52908 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) < size { 52909 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 52910 } 52911 return int32(size) 52912 }() 52913 } 52914 return SQLITE_OK 52915 } 52916 52917 func fsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 52918 bp := tls.Alloc(4) 52919 defer tls.Free(4) 52920 52921 var p uintptr = pFile 52922 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52923 var pRealFile uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 52924 var rc int32 = SQLITE_OK 52925 52926 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52927 *(*uint8)(unsafe.Pointer(bp)) = uint8(uint32((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) & 0xFF000000 >> 24) 52928 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x00FF0000 >> 16) 52929 *(*uint8)(unsafe.Pointer(bp + 2)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x0000FF00 >> 8) 52930 *(*uint8)(unsafe.Pointer(bp + 3)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x000000FF) 52931 rc = (*struct { 52932 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 52933 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, bp, 4, int64(0)) 52934 } 52935 if rc == SQLITE_OK { 52936 rc = (*struct { 52937 f func(*libc.TLS, uintptr, int32) int32 52938 })(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)) 52939 } 52940 52941 return rc 52942 } 52943 52944 func fsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 52945 var p uintptr = pFile 52946 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 52947 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 52948 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) 52949 } else { 52950 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) 52951 } 52952 return SQLITE_OK 52953 } 52954 52955 func fsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52956 return SQLITE_OK 52957 } 52958 52959 func fsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 52960 return SQLITE_OK 52961 } 52962 52963 func fsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 52964 *(*int32)(unsafe.Pointer(pResOut)) = 0 52965 return SQLITE_OK 52966 } 52967 52968 func fsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 52969 if op == SQLITE_FCNTL_PRAGMA { 52970 return SQLITE_NOTFOUND 52971 } 52972 return SQLITE_OK 52973 } 52974 52975 func fsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 52976 return BLOCKSIZE 52977 } 52978 52979 func fsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 52980 return 0 52981 } 52982 52983 func fsOpen1(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 52984 bp := tls.Alloc(12) 52985 defer tls.Free(12) 52986 52987 var pFsVfs uintptr 52988 var p uintptr 52989 var pReal uintptr 52990 var eType int32 52991 var nName int32 52992 var rc int32 52993 var p2 uintptr 52994 52995 var real_flags int32 52996 52997 var pRealFile uintptr 52998 var pParent uintptr 52999 pFsVfs = pVfs 53000 p = pFile 53001 pReal = uintptr(0) 53002 rc = SQLITE_OK 53003 53004 if !(0 == flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL)) { 53005 goto __1 53006 } 53007 p2 = pFile 53008 libc.Xmemset(tls, p2, 0, uint64(unsafe.Sizeof(tmp_file{}))) 53009 (*tmp_file)(unsafe.Pointer(p2)).Fbase.FpMethods = uintptr(unsafe.Pointer(&tmp_io_methods)) 53010 return SQLITE_OK 53011 __1: 53012 ; 53013 eType = func() int32 { 53014 if flags&SQLITE_OPEN_MAIN_DB != 0 { 53015 return DATABASE_FILE 53016 } 53017 return JOURNAL_FILE 53018 }() 53019 (*fs_file)(unsafe.Pointer(p)).Fbase.FpMethods = uintptr(unsafe.Pointer(&fs_io_methods)) 53020 (*fs_file)(unsafe.Pointer(p)).FeType = eType 53021 53022 nName = int32(libc.Xstrlen(tls, zName)) - func() int32 { 53023 if eType == JOURNAL_FILE { 53024 return 8 53025 } 53026 return 0 53027 }() 53028 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 53029 __2: 53030 if !(pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zName, uint64(nName)) != 0) { 53031 goto __4 53032 } 53033 goto __3 53034 __3: 53035 pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 53036 goto __2 53037 goto __4 53038 __4: 53039 ; 53040 if !!(pReal != 0) { 53041 goto __5 53042 } 53043 real_flags = flags&libc.CplInt32(SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB 53044 pParent = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpParent 53045 53046 pReal = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile))) 53047 if !!(pReal != 0) { 53048 goto __6 53049 } 53050 rc = SQLITE_NOMEM 53051 goto open_out 53052 __6: 53053 ; 53054 libc.Xmemset(tls, pReal, 0, uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile)) 53055 (*fs_real_file)(unsafe.Pointer(pReal)).FzName = zName 53056 (*fs_real_file)(unsafe.Pointer(pReal)).FpFile = pReal + 1*48 53057 53058 rc = (*struct { 53059 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53060 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zName, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile, real_flags, pOutFlags) 53061 if !(rc != SQLITE_OK) { 53062 goto __7 53063 } 53064 goto open_out 53065 __7: 53066 ; 53067 pRealFile = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 53068 53069 rc = (*struct { 53070 f func(*libc.TLS, uintptr, uintptr) int32 53071 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxFileSize})).f(tls, pRealFile, bp) 53072 if !(rc != SQLITE_OK) { 53073 goto __8 53074 } 53075 goto open_out 53076 __8: 53077 ; 53078 if !(*(*sqlite3_int64)(unsafe.Pointer(bp)) == int64(0)) { 53079 goto __9 53080 } 53081 rc = (*struct { 53082 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53083 })(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)) 53084 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = BLOBSIZE 53085 goto __10 53086 __9: 53087 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = int32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 53088 rc = (*struct { 53089 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53090 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxRead})).f(tls, pRealFile, bp+8, 4, int64(0)) 53091 (*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))) 53092 if !(rc == SQLITE_OK) { 53093 goto __11 53094 } 53095 rc = (*struct { 53096 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53097 })(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)) 53098 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) { 53099 goto __12 53100 } 53101 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob 53102 __12: 53103 ; 53104 __11: 53105 ; 53106 __10: 53107 ; 53108 if !(rc == SQLITE_OK) { 53109 goto __13 53110 } 53111 (*fs_real_file)(unsafe.Pointer(pReal)).FpNext = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 53112 if !((*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0) { 53113 goto __14 53114 } 53115 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = pReal + 32 53116 __14: 53117 ; 53118 (*fs_real_file)(unsafe.Pointer(pReal)).FppThis = pFsVfs + 168 53119 (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList = pReal 53120 __13: 53121 ; 53122 __5: 53123 ; 53124 open_out: 53125 if !(pReal != 0) { 53126 goto __15 53127 } 53128 if !(rc == SQLITE_OK) { 53129 goto __16 53130 } 53131 (*fs_file)(unsafe.Pointer(p)).FpReal = pReal 53132 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef++ 53133 goto __17 53134 __16: 53135 if !((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods != 0) { 53136 goto __18 53137 } 53138 (*struct { 53139 f func(*libc.TLS, uintptr) int32 53140 })(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) 53141 __18: 53142 ; 53143 sqlite3.Xsqlite3_free(tls, pReal) 53144 __17: 53145 ; 53146 __15: 53147 ; 53148 return rc 53149 } 53150 53151 func fsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 53152 var rc int32 = SQLITE_OK 53153 var pFsVfs uintptr = pVfs 53154 var pReal uintptr 53155 var pF uintptr 53156 var nName int32 = int32(libc.Xstrlen(tls, zPath)) - 8 53157 53158 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 53159 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 { 53160 } 53161 if pReal != 0 { 53162 pF = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 53163 rc = (*struct { 53164 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53165 })(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)) 53166 if rc == SQLITE_OK { 53167 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = 0 53168 } 53169 } 53170 return rc 53171 } 53172 53173 func fsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 53174 var pFsVfs uintptr = pVfs 53175 var pReal uintptr 53176 var isJournal int32 = 0 53177 var nName int32 = int32(libc.Xstrlen(tls, zPath)) 53178 53179 if flags != SQLITE_ACCESS_EXISTS { 53180 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53181 return (*struct { 53182 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53183 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxAccess})).f(tls, pParent, zPath, flags, pResOut) 53184 } 53185 53186 if nName > 8 && libc.Xstrcmp(tls, ts+32808, zPath+uintptr(nName-8)) == 0 { 53187 nName = nName - 8 53188 isJournal = 1 53189 } 53190 53191 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 53192 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 { 53193 } 53194 53195 *(*int32)(unsafe.Pointer(pResOut)) = libc.Bool32(pReal != 0 && (!(isJournal != 0) || (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal > 0)) 53196 return SQLITE_OK 53197 } 53198 53199 func fsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 53200 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53201 return (*struct { 53202 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53203 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zPath, nOut, zOut) 53204 } 53205 53206 func fsDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 53207 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53208 return (*struct { 53209 f func(*libc.TLS, uintptr, uintptr) uintptr 53210 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlOpen})).f(tls, pParent, zPath) 53211 } 53212 53213 func fsDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 53214 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53215 (*struct { 53216 f func(*libc.TLS, uintptr, int32, uintptr) 53217 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlError})).f(tls, pParent, nByte, zErrMsg) 53218 } 53219 53220 func fsDlSym(tls *libc.TLS, pVfs uintptr, pH uintptr, zSym uintptr) uintptr { 53221 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53222 return (*struct { 53223 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 53224 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlSym})).f(tls, pParent, pH, zSym) 53225 } 53226 53227 func fsDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 53228 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53229 (*struct { 53230 f func(*libc.TLS, uintptr, uintptr) 53231 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlClose})).f(tls, pParent, pHandle) 53232 } 53233 53234 func fsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 53235 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53236 return (*struct { 53237 f func(*libc.TLS, uintptr, int32, uintptr) int32 53238 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxRandomness})).f(tls, pParent, nByte, zBufOut) 53239 } 53240 53241 func fsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 53242 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53243 return (*struct { 53244 f func(*libc.TLS, uintptr, int32) int32 53245 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxSleep})).f(tls, pParent, nMicro) 53246 } 53247 53248 func fsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 53249 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 53250 return (*struct { 53251 f func(*libc.TLS, uintptr, uintptr) int32 53252 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxCurrentTime})).f(tls, pParent, pTimeOut) 53253 } 53254 53255 func fs_register(tls *libc.TLS) int32 { 53256 if fs_vfs.FpParent != 0 { 53257 return SQLITE_OK 53258 } 53259 fs_vfs.FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 53260 fs_vfs.Fbase.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(fs_vfs.FpParent)).FmxPathname 53261 fs_vfs.Fbase.FszOsFile = func() int32 { 53262 if uint64(unsafe.Sizeof(tmp_file{})) > uint64(unsafe.Sizeof(fs_file{})) { 53263 return int32(unsafe.Sizeof(tmp_file{})) 53264 } 53265 return int32(unsafe.Sizeof(fs_file{})) 53266 }() 53267 return sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&fs_vfs)), 0) 53268 } 53269 53270 func SqlitetestOnefile_Init(tls *libc.TLS) int32 { 53271 return fs_register(tls) 53272 } 53273 53274 type VfslogVfs1 = struct { 53275 Fbase sqlite3_vfs 53276 FpVfs uintptr 53277 FiNextFileId int32 53278 F__ccgo_pad1 [4]byte 53279 FpLog uintptr 53280 FiOffset sqlite3_int64 53281 FnBuf int32 53282 FaBuf [8192]uint8 53283 F__ccgo_pad2 [4]byte 53284 } 53285 53286 type VfslogVfs = VfslogVfs1 53287 type VfslogFile1 = struct { 53288 Fbase sqlite3_file 53289 FpReal uintptr 53290 FpVfslog uintptr 53291 FiFileId int32 53292 F__ccgo_pad1 [4]byte 53293 } 53294 53295 type VfslogFile = VfslogFile1 53296 53297 var vfslog_vfs = sqlite3_vfs{ 53298 FiVersion: 1, 53299 FszOsFile: int32(unsafe.Sizeof(VfslogFile{})), 53300 FmxPathname: INST_MAX_PATHNAME, 53301 FxOpen: 0, 53302 FxDelete: 0, 53303 FxAccess: 0, 53304 FxFullPathname: 0, 53305 FxDlOpen: 0, 53306 FxDlError: 0, 53307 FxDlSym: 0, 53308 FxDlClose: 0, 53309 FxRandomness: 0, 53310 FxSleep: 0, 53311 FxCurrentTime: 0, 53312 FxGetLastError: 0, 53313 FxCurrentTimeInt64: 0, 53314 } 53315 53316 var vfslog_io_methods = sqlite3_io_methods{ 53317 FiVersion: 2, 53318 FxClose: 0, 53319 FxRead: 0, 53320 FxWrite: 0, 53321 FxTruncate: 0, 53322 FxSync: 0, 53323 FxFileSize: 0, 53324 FxLock: 0, 53325 FxUnlock: 0, 53326 FxCheckReservedLock: 0, 53327 FxFileControl: 0, 53328 FxSectorSize: 0, 53329 FxDeviceCharacteristics: 0, 53330 FxShmMap: 0, 53331 FxShmLock: 0, 53332 FxShmBarrier: 0, 53333 FxShmUnmap: 0, 53334 } 53335 53336 func vfslog_time(tls *libc.TLS) sqlite3_uint64 { 53337 bp := tls.Alloc(16) 53338 defer tls.Free(16) 53339 53340 libc.Xgettimeofday(tls, bp, uintptr(0)) 53341 return sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_usec) + sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_sec)*uint64(1000000) 53342 } 53343 53344 func vfslogClose(tls *libc.TLS, pFile uintptr) int32 { 53345 var t sqlite3_uint64 53346 var rc int32 = SQLITE_OK 53347 var p uintptr = pFile 53348 53349 t = vfslog_time(tls) 53350 if (*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 53351 rc = (*struct { 53352 f func(*libc.TLS, uintptr) int32 53353 })(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) 53354 } 53355 t = vfslog_time(tls) - t 53356 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CLOSE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53357 return rc 53358 } 53359 53360 func vfslogRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 53361 var rc int32 53362 var t sqlite3_uint64 53363 var p uintptr = pFile 53364 t = vfslog_time(tls) 53365 rc = (*struct { 53366 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53367 })(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) 53368 t = vfslog_time(tls) - t 53369 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_READ, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 53370 return rc 53371 } 53372 53373 func vfslogWrite(tls *libc.TLS, pFile uintptr, z uintptr, iAmt int32, iOfst sqlite_int64) int32 { 53374 var rc int32 53375 var t sqlite3_uint64 53376 var p uintptr = pFile 53377 t = vfslog_time(tls) 53378 rc = (*struct { 53379 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53380 })(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) 53381 t = vfslog_time(tls) - t 53382 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_WRITE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 53383 return rc 53384 } 53385 53386 func vfslogTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 53387 var rc int32 53388 var t sqlite3_uint64 53389 var p uintptr = pFile 53390 t = vfslog_time(tls) 53391 rc = (*struct { 53392 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53393 })(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) 53394 t = vfslog_time(tls) - t 53395 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_TRUNCATE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, int32(size)) 53396 return rc 53397 } 53398 53399 func vfslogSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 53400 var rc int32 53401 var t sqlite3_uint64 53402 var p uintptr = pFile 53403 t = vfslog_time(tls) 53404 rc = (*struct { 53405 f func(*libc.TLS, uintptr, int32) int32 53406 })(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) 53407 t = vfslog_time(tls) - t 53408 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SYNC, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, flags, 0) 53409 return rc 53410 } 53411 53412 func vfslogFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 53413 var rc int32 53414 var t sqlite3_uint64 53415 var p uintptr = pFile 53416 t = vfslog_time(tls) 53417 rc = (*struct { 53418 f func(*libc.TLS, uintptr, uintptr) int32 53419 })(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) 53420 t = vfslog_time(tls) - t 53421 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)))) 53422 return rc 53423 } 53424 53425 func vfslogLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 53426 var rc int32 53427 var t sqlite3_uint64 53428 var p uintptr = pFile 53429 t = vfslog_time(tls) 53430 rc = (*struct { 53431 f func(*libc.TLS, uintptr, int32) int32 53432 })(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) 53433 t = vfslog_time(tls) - t 53434 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_LOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 53435 return rc 53436 } 53437 53438 func vfslogUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 53439 var rc int32 53440 var t sqlite3_uint64 53441 var p uintptr = pFile 53442 t = vfslog_time(tls) 53443 rc = (*struct { 53444 f func(*libc.TLS, uintptr, int32) int32 53445 })(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) 53446 t = vfslog_time(tls) - t 53447 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_UNLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 53448 return rc 53449 } 53450 53451 func vfslogCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 53452 var rc int32 53453 var t sqlite3_uint64 53454 var p uintptr = pFile 53455 t = vfslog_time(tls) 53456 rc = (*struct { 53457 f func(*libc.TLS, uintptr, uintptr) int32 53458 })(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) 53459 t = vfslog_time(tls) - t 53460 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CHECKRESERVEDLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, *(*int32)(unsafe.Pointer(pResOut)), 0) 53461 return rc 53462 } 53463 53464 func vfslogFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 53465 bp := tls.Alloc(8) 53466 defer tls.Free(8) 53467 53468 var p uintptr = pFile 53469 var rc int32 = (*struct { 53470 f func(*libc.TLS, uintptr, int32, uintptr) int32 53471 })(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) 53472 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 53473 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35525, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 53474 } 53475 return rc 53476 } 53477 53478 func vfslogSectorSize(tls *libc.TLS, pFile uintptr) int32 { 53479 var rc int32 53480 var t sqlite3_uint64 53481 var p uintptr = pFile 53482 t = vfslog_time(tls) 53483 rc = (*struct { 53484 f func(*libc.TLS, uintptr) int32 53485 })(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) 53486 t = vfslog_time(tls) - t 53487 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SECTORSIZE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53488 return rc 53489 } 53490 53491 func vfslogDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 53492 var rc int32 53493 var t sqlite3_uint64 53494 var p uintptr = pFile 53495 t = vfslog_time(tls) 53496 rc = (*struct { 53497 f func(*libc.TLS, uintptr) int32 53498 })(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) 53499 t = vfslog_time(tls) - t 53500 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_DEVCHAR, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53501 return rc 53502 } 53503 53504 func vfslogShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 53505 var rc int32 53506 var t sqlite3_uint64 53507 var p uintptr = pFile 53508 t = vfslog_time(tls) 53509 rc = (*struct { 53510 f func(*libc.TLS, uintptr, int32, int32, int32) int32 53511 })(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) 53512 t = vfslog_time(tls) - t 53513 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53514 return rc 53515 } 53516 53517 func vfslogShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 53518 var rc int32 53519 var t sqlite3_uint64 53520 var p uintptr = pFile 53521 t = vfslog_time(tls) 53522 rc = (*struct { 53523 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 53524 })(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) 53525 t = vfslog_time(tls) - t 53526 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53527 return rc 53528 } 53529 53530 func vfslogShmBarrier(tls *libc.TLS, pFile uintptr) { 53531 var t sqlite3_uint64 53532 var p uintptr = pFile 53533 t = vfslog_time(tls) 53534 (*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) 53535 t = vfslog_time(tls) - t 53536 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMBARRIER, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), SQLITE_OK, 0, 0) 53537 } 53538 53539 func vfslogShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 53540 var rc int32 53541 var t sqlite3_uint64 53542 var p uintptr = pFile 53543 t = vfslog_time(tls) 53544 rc = (*struct { 53545 f func(*libc.TLS, uintptr, int32) int32 53546 })(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) 53547 t = vfslog_time(tls) - t 53548 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMUNMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53549 return rc 53550 } 53551 53552 func vfslogOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 53553 var rc int32 53554 var t sqlite3_uint64 53555 var p uintptr = pFile 53556 var pLog uintptr = pVfs 53557 53558 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&vfslog_io_methods)) 53559 (*VfslogFile)(unsafe.Pointer(p)).FpReal = p + 1*32 53560 (*VfslogFile)(unsafe.Pointer(p)).FpVfslog = pVfs 53561 (*VfslogFile)(unsafe.Pointer(p)).FiFileId = libc.PreIncInt32(&(*VfslogVfs)(unsafe.Pointer(pLog)).FiNextFileId, 1) 53562 53563 t = vfslog_time(tls) 53564 rc = (*struct { 53565 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53566 })(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) 53567 t = vfslog_time(tls) - t 53568 53569 vfslog_call(tls, pVfs, OS_OPEN, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 53570 vfslog_string(tls, pVfs, zName) 53571 return rc 53572 } 53573 53574 func vfslogDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 53575 var rc int32 53576 var t sqlite3_uint64 53577 t = vfslog_time(tls) 53578 rc = (*struct { 53579 f func(*libc.TLS, uintptr, uintptr, int32) int32 53580 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDelete})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, dirSync) 53581 t = vfslog_time(tls) - t 53582 vfslog_call(tls, pVfs, OS_DELETE, 0, int64(t), rc, dirSync, 0) 53583 vfslog_string(tls, pVfs, zPath) 53584 return rc 53585 } 53586 53587 func vfslogAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 53588 var rc int32 53589 var t sqlite3_uint64 53590 t = vfslog_time(tls) 53591 rc = (*struct { 53592 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53593 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxAccess})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, flags, pResOut) 53594 t = vfslog_time(tls) - t 53595 vfslog_call(tls, pVfs, OS_ACCESS, 0, int64(t), rc, flags, *(*int32)(unsafe.Pointer(pResOut))) 53596 vfslog_string(tls, pVfs, zPath) 53597 return rc 53598 } 53599 53600 func vfslogFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 53601 return (*struct { 53602 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53603 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxFullPathname})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, nOut, zOut) 53604 } 53605 53606 func vfslogDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 53607 return (*struct { 53608 f func(*libc.TLS, uintptr, uintptr) uintptr 53609 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlOpen})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath) 53610 } 53611 53612 func vfslogDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 53613 (*struct { 53614 f func(*libc.TLS, uintptr, int32, uintptr) 53615 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zErrMsg) 53616 } 53617 53618 func vfslogDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 53619 return (*struct { 53620 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 53621 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlSym})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p, zSym) 53622 } 53623 53624 func vfslogDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 53625 (*struct { 53626 f func(*libc.TLS, uintptr, uintptr) 53627 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlClose})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pHandle) 53628 } 53629 53630 func vfslogRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 53631 return (*struct { 53632 f func(*libc.TLS, uintptr, int32, uintptr) int32 53633 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxRandomness})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zBufOut) 53634 } 53635 53636 func vfslogSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 53637 return (*struct { 53638 f func(*libc.TLS, uintptr, int32) int32 53639 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxSleep})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nMicro) 53640 } 53641 53642 func vfslogCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 53643 return (*struct { 53644 f func(*libc.TLS, uintptr, uintptr) int32 53645 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTime})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pTimeOut) 53646 } 53647 53648 func vfslogGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 53649 return (*struct { 53650 f func(*libc.TLS, uintptr, int32, uintptr) int32 53651 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxGetLastError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, a, b) 53652 } 53653 53654 func vfslogCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 53655 return (*struct { 53656 f func(*libc.TLS, uintptr, uintptr) int32 53657 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTimeInt64})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p) 53658 } 53659 53660 func vfslog_flush(tls *libc.TLS, p uintptr) { 53661 var pending int32 = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 53662 var persist int32 = sqlite3.Xsqlite3_io_error_persist 53663 var diskfull int32 = sqlite3.Xsqlite3_diskfull_pending 53664 53665 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(0)) 53666 sqlite3.Xsqlite3_io_error_persist = 0 53667 sqlite3.Xsqlite3_diskfull_pending = 0 53668 53669 if (*VfslogVfs)(unsafe.Pointer(p)).FnBuf != 0 { 53670 (*struct { 53671 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53672 })(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) 53673 *(*sqlite3_int64)(unsafe.Pointer(p + 192)) += sqlite3_int64((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53674 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 0 53675 } 53676 53677 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, pending) 53678 sqlite3.Xsqlite3_io_error_persist = persist 53679 sqlite3.Xsqlite3_diskfull_pending = diskfull 53680 } 53681 53682 func put32bits(tls *libc.TLS, p uintptr, v uint32) { 53683 *(*uint8)(unsafe.Pointer(p)) = uint8(v >> 24) 53684 *(*uint8)(unsafe.Pointer(p + 1)) = uint8(v >> 16) 53685 *(*uint8)(unsafe.Pointer(p + 2)) = uint8(v >> 8) 53686 *(*uint8)(unsafe.Pointer(p + 3)) = uint8(v) 53687 } 53688 53689 func vfslog_call(tls *libc.TLS, pVfs uintptr, eEvent int32, iFileid int32, nClick sqlite3_int64, return_code int32, size int32, offset int32) { 53690 var p uintptr = pVfs 53691 var zRec uintptr 53692 if uint64(24+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]uint8{})) { 53693 vfslog_flush(tls, p) 53694 } 53695 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53696 put32bits(tls, zRec, uint32(eEvent)) 53697 put32bits(tls, zRec+4, uint32(iFileid)) 53698 put32bits(tls, zRec+8, uint32(nClick&int64(0xffff))) 53699 put32bits(tls, zRec+12, uint32(return_code)) 53700 put32bits(tls, zRec+16, uint32(size)) 53701 put32bits(tls, zRec+20, uint32(offset)) 53702 *(*int32)(unsafe.Pointer(p + 200)) += 24 53703 } 53704 53705 func vfslog_string(tls *libc.TLS, pVfs uintptr, zStr uintptr) { 53706 var p uintptr = pVfs 53707 var zRec uintptr 53708 var nStr int32 53709 if zStr != 0 { 53710 nStr = int32(libc.Xstrlen(tls, zStr)) 53711 } else { 53712 nStr = 0 53713 } 53714 if uint64(4+nStr+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]uint8{})) { 53715 vfslog_flush(tls, p) 53716 } 53717 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 53718 put32bits(tls, zRec, uint32(nStr)) 53719 if zStr != 0 { 53720 libc.Xmemcpy(tls, zRec+4, zStr, uint64(nStr)) 53721 } 53722 *(*int32)(unsafe.Pointer(p + 200)) += 4 + nStr 53723 } 53724 53725 func vfslog_finalize(tls *libc.TLS, p uintptr) { 53726 if (*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods != 0 { 53727 vfslog_flush(tls, p) 53728 (*struct { 53729 f func(*libc.TLS, uintptr) int32 53730 })(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) 53731 } 53732 sqlite3.Xsqlite3_free(tls, p) 53733 } 53734 53735 func sqlite3_vfslog_finalize(tls *libc.TLS, zVfs uintptr) int32 { 53736 var pVfs uintptr 53737 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 53738 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 53739 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53740 }{vfslogOpen})) { 53741 return SQLITE_ERROR 53742 } 53743 sqlite3.Xsqlite3_vfs_unregister(tls, pVfs) 53744 vfslog_finalize(tls, pVfs) 53745 return SQLITE_OK 53746 } 53747 53748 func sqlite3_vfslog_new(tls *libc.TLS, zVfs uintptr, zParentVfs uintptr, zLog uintptr) int32 { 53749 bp := tls.Alloc(4) 53750 defer tls.Free(4) 53751 53752 var p uintptr 53753 var pParent uintptr 53754 var nByte int32 53755 53756 var rc int32 53757 var zFile uintptr 53758 var nVfs int32 53759 53760 pParent = sqlite3.Xsqlite3_vfs_find(tls, zParentVfs) 53761 if !(pParent != 0) { 53762 return SQLITE_ERROR 53763 } 53764 53765 nVfs = int32(libc.Xstrlen(tls, zVfs)) 53766 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)) 53767 p = sqlite3.Xsqlite3_malloc(tls, nByte) 53768 libc.Xmemset(tls, p, 0, uint64(nByte)) 53769 53770 (*VfslogVfs)(unsafe.Pointer(p)).FpVfs = pParent 53771 (*VfslogVfs)(unsafe.Pointer(p)).FpLog = p + 1*8400 53772 libc.Xmemcpy(tls, p, uintptr(unsafe.Pointer(&vfslog_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 53773 (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName = (*VfslogVfs)(unsafe.Pointer(p)).FpLog + uintptr((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) 53774 *(*int32)(unsafe.Pointer(p + 4)) += (*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile 53775 libc.Xmemcpy(tls, (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName, zVfs, uint64(nVfs)) 53776 53777 zFile = (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName + uintptr(nVfs+1) 53778 (*struct { 53779 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53780 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zLog, (*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname, zFile) 53781 53782 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SUPER_JOURNAL 53783 (*struct { 53784 f func(*libc.TLS, uintptr, uintptr, int32) int32 53785 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDelete})).f(tls, pParent, zFile, 0) 53786 rc = (*struct { 53787 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53788 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zFile, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, *(*int32)(unsafe.Pointer(bp)), bp) 53789 if rc == SQLITE_OK { 53790 libc.Xmemcpy(tls, p+204, ts+35535, uint64(20)) 53791 (*VfslogVfs)(unsafe.Pointer(p)).FiOffset = int64(0) 53792 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 20 53793 rc = sqlite3.Xsqlite3_vfs_register(tls, p, 1) 53794 } 53795 if rc != 0 { 53796 vfslog_finalize(tls, p) 53797 } 53798 return rc 53799 } 53800 53801 func sqlite3_vfslog_annotate(tls *libc.TLS, zVfs uintptr, zMsg uintptr) int32 { 53802 var pVfs uintptr 53803 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 53804 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 53805 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53806 }{vfslogOpen})) { 53807 return SQLITE_ERROR 53808 } 53809 vfslog_call(tls, pVfs, OS_ANNOTATE, 0, int64(0), 0, 0, 0) 53810 vfslog_string(tls, pVfs, zMsg) 53811 return SQLITE_OK 53812 } 53813 53814 func vfslog_eventname(tls *libc.TLS, eEvent int32) uintptr { 53815 var zEvent uintptr = uintptr(0) 53816 53817 switch eEvent { 53818 case OS_CLOSE: 53819 zEvent = ts + 35556 53820 break 53821 case OS_READ: 53822 zEvent = ts + 35563 53823 break 53824 case OS_WRITE: 53825 zEvent = ts + 35569 53826 break 53827 case OS_TRUNCATE: 53828 zEvent = ts + 35576 53829 break 53830 case OS_SYNC: 53831 zEvent = ts + 27843 53832 break 53833 case OS_FILESIZE: 53834 zEvent = ts + 35586 53835 break 53836 case OS_LOCK: 53837 zEvent = ts + 35596 53838 break 53839 case OS_UNLOCK: 53840 zEvent = ts + 35602 53841 break 53842 case OS_CHECKRESERVEDLOCK: 53843 zEvent = ts + 35610 53844 break 53845 case OS_FILECONTROL: 53846 zEvent = ts + 35624 53847 break 53848 case OS_SECTORSIZE: 53849 zEvent = ts + 35637 53850 break 53851 case OS_DEVCHAR: 53852 zEvent = ts + 35649 53853 break 53854 case OS_OPEN: 53855 zEvent = ts + 27421 53856 break 53857 case OS_DELETE: 53858 zEvent = ts + 35661 53859 break 53860 case OS_ACCESS: 53861 zEvent = ts + 35669 53862 break 53863 case OS_FULLPATHNAME: 53864 zEvent = ts + 35677 53865 break 53866 case OS_RANDOMNESS: 53867 zEvent = ts + 35691 53868 break 53869 case OS_SLEEP: 53870 zEvent = ts + 35703 53871 break 53872 case OS_CURRENTTIME: 53873 zEvent = ts + 35710 53874 break 53875 53876 case OS_SHMUNMAP: 53877 zEvent = ts + 35723 53878 break 53879 case OS_SHMLOCK: 53880 zEvent = ts + 35733 53881 break 53882 case OS_SHMBARRIER: 53883 zEvent = ts + 35742 53884 break 53885 case OS_SHMMAP: 53886 zEvent = ts + 35754 53887 break 53888 53889 case OS_ANNOTATE: 53890 zEvent = ts + 35762 53891 break 53892 } 53893 53894 return zEvent 53895 } 53896 53897 type VfslogVtab1 = struct { 53898 Fbase sqlite3_vtab 53899 FpFd uintptr 53900 FnByte sqlite3_int64 53901 FzFile uintptr 53902 } 53903 53904 type VfslogVtab = VfslogVtab1 53905 type VfslogCsr1 = struct { 53906 Fbase sqlite3_vtab_cursor 53907 FiRowid sqlite3_int64 53908 FiOffset sqlite3_int64 53909 FzTransient uintptr 53910 FnFile int32 53911 F__ccgo_pad1 [4]byte 53912 FazFile uintptr 53913 FaBuf [1024]uint8 53914 } 53915 53916 type VfslogCsr = VfslogCsr1 53917 53918 func get32bits(tls *libc.TLS, p uintptr) uint32 { 53919 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)))) 53920 } 53921 53922 func dequote(tls *libc.TLS, z uintptr) { 53923 var quote uint8 53924 quote = *(*uint8)(unsafe.Pointer(z)) 53925 if int32(quote) == '[' || int32(quote) == '\'' || int32(quote) == '"' || int32(quote) == '`' { 53926 var iIn int32 = 1 53927 var iOut int32 = 0 53928 if int32(quote) == '[' { 53929 quote = uint8(']') 53930 } 53931 for *(*uint8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 53932 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(quote) { 53933 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(quote) { 53934 break 53935 } 53936 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = quote 53937 iIn = iIn + 2 53938 } else { 53939 *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 53940 } 53941 } 53942 *(*uint8)(unsafe.Pointer(z + uintptr(iOut))) = uint8(0) 53943 } 53944 } 53945 53946 func vlogConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 53947 bp := tls.Alloc(12) 53948 defer tls.Free(12) 53949 53950 var pVfs uintptr 53951 53952 var p uintptr 53953 var rc int32 53954 var nByte int32 53955 var zFile uintptr 53956 53957 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 53958 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 53959 nByte = int32(uint64(unsafe.Sizeof(VfslogVtab{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname)) 53960 p = sqlite3.Xsqlite3_malloc(tls, nByte) 53961 if p == uintptr(0) { 53962 return SQLITE_NOMEM 53963 } 53964 libc.Xmemset(tls, p, 0, uint64(nByte)) 53965 53966 (*VfslogVtab)(unsafe.Pointer(p)).FpFd = p + 1*48 53967 (*VfslogVtab)(unsafe.Pointer(p)).FzFile = (*VfslogVtab)(unsafe.Pointer(p)).FpFd + uintptr((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) 53968 53969 zFile = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 53970 if !(zFile != 0) { 53971 sqlite3.Xsqlite3_free(tls, p) 53972 return SQLITE_NOMEM 53973 } 53974 dequote(tls, zFile) 53975 (*struct { 53976 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53977 })(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) 53978 sqlite3.Xsqlite3_free(tls, zFile) 53979 53980 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL 53981 rc = (*struct { 53982 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53983 })(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) 53984 53985 if rc == SQLITE_OK { 53986 (*struct { 53987 f func(*libc.TLS, uintptr, uintptr) int32 53988 })(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) 53989 sqlite3.Xsqlite3_declare_vtab(tls, db, 53990 ts+35773) 53991 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 53992 } else { 53993 sqlite3.Xsqlite3_free(tls, p) 53994 } 53995 53996 return rc 53997 } 53998 53999 func vlogBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 54000 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 54001 return SQLITE_OK 54002 } 54003 54004 func vlogDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 54005 var p uintptr = pVtab 54006 if (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods != 0 { 54007 (*struct { 54008 f func(*libc.TLS, uintptr) int32 54009 })(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) 54010 (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods = uintptr(0) 54011 } 54012 sqlite3.Xsqlite3_free(tls, p) 54013 return SQLITE_OK 54014 } 54015 54016 func vlogOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 54017 var pCsr uintptr 54018 54019 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(VfslogCsr{}))) 54020 if !(pCsr != 0) { 54021 return SQLITE_NOMEM 54022 } 54023 libc.Xmemset(tls, pCsr, 0, uint64(unsafe.Sizeof(VfslogCsr{}))) 54024 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 54025 return SQLITE_OK 54026 } 54027 54028 func vlogClose(tls *libc.TLS, pCursor uintptr) int32 { 54029 var p uintptr = pCursor 54030 var i int32 54031 for i = 0; i < (*VfslogCsr)(unsafe.Pointer(p)).FnFile; i++ { 54032 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(p)).FazFile + uintptr(i)*8))) 54033 } 54034 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FazFile) 54035 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FzTransient) 54036 sqlite3.Xsqlite3_free(tls, p) 54037 return SQLITE_OK 54038 } 54039 54040 func vlogNext(tls *libc.TLS, pCursor uintptr) int32 { 54041 bp := tls.Alloc(4) 54042 defer tls.Free(4) 54043 54044 var pCsr uintptr = pCursor 54045 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 54046 var rc int32 = SQLITE_OK 54047 var nRead int32 54048 54049 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient) 54050 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = uintptr(0) 54051 54052 nRead = 24 54053 if (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead) <= (*VfslogVtab)(unsafe.Pointer(p)).FnByte { 54054 var eEvent int32 54055 rc = (*struct { 54056 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54057 })(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) 54058 54059 eEvent = int32(get32bits(tls, pCsr+48)) 54060 if rc == SQLITE_OK && 54061 (eEvent == OS_OPEN || eEvent == OS_DELETE || eEvent == OS_ACCESS) { 54062 rc = (*struct { 54063 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54064 })(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)) 54065 nRead = nRead + 4 54066 if rc == SQLITE_OK { 54067 var nStr int32 = int32(get32bits(tls, bp)) 54068 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, nStr+1) 54069 rc = (*struct { 54070 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54071 })(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)) 54072 *(*uint8)(unsafe.Pointer(zStr + uintptr(nStr))) = uint8(0) 54073 nRead = nRead + nStr 54074 54075 if eEvent == OS_OPEN { 54076 var iFileid int32 = int32(get32bits(tls, pCsr+48+4)) 54077 if iFileid >= (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile { 54078 var nNew int32 = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(iFileid+1)) 54079 (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile = sqlite3.Xsqlite3_realloc(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile, nNew) 54080 nNew = int32(uint64(nNew) - uint64(unsafe.Sizeof(uintptr(0)))*uint64((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)) 54081 libc.Xmemset(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile+uintptr((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)*8, 0, uint64(nNew)) 54082 (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile = iFileid + 1 54083 } 54084 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8))) 54085 *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8)) = zStr 54086 } else { 54087 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = zStr 54088 } 54089 } 54090 } 54091 } 54092 54093 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 8)) += int64(1) 54094 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 16)) += sqlite3_int64(nRead) 54095 return rc 54096 } 54097 54098 func vlogEof(tls *libc.TLS, pCursor uintptr) int32 { 54099 var pCsr uintptr = pCursor 54100 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 54101 return libc.Bool32((*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset >= (*VfslogVtab)(unsafe.Pointer(p)).FnByte) 54102 } 54103 54104 func vlogFilter(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 54105 var pCsr uintptr = pCursor 54106 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 54107 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset = int64(20) 54108 return vlogNext(tls, pCursor) 54109 } 54110 54111 func vlogColumn(tls *libc.TLS, pCursor uintptr, ctx uintptr, i int32) int32 { 54112 var val uint32 54113 var pCsr uintptr = pCursor 54114 54115 val = get32bits(tls, pCsr+48+uintptr(4*i)) 54116 54117 switch i { 54118 case 0: 54119 { 54120 sqlite3.Xsqlite3_result_text(tls, ctx, vfslog_eventname(tls, int32(val)), -1, uintptr(0)) 54121 break 54122 54123 } 54124 case 1: 54125 { 54126 var zStr uintptr = (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient 54127 if val != uint32(0) && val < uint32((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile) { 54128 zStr = *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(val)*8)) 54129 } 54130 sqlite3.Xsqlite3_result_text(tls, ctx, zStr, -1, libc.UintptrFromInt32(-1)) 54131 break 54132 54133 } 54134 default: 54135 sqlite3.Xsqlite3_result_int(tls, ctx, int32(val)) 54136 break 54137 } 54138 54139 return SQLITE_OK 54140 } 54141 54142 func vlogRowid(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 54143 var pCsr uintptr = pCursor 54144 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid 54145 return SQLITE_OK 54146 } 54147 54148 func sqlite3_vfslog_register(tls *libc.TLS, db uintptr) int32 { 54149 sqlite3.Xsqlite3_create_module(tls, db, ts+35828, uintptr(unsafe.Pointer(&vfslog_module)), uintptr(0)) 54150 return SQLITE_OK 54151 } 54152 54153 var vfslog_module = sqlite3_module{ 54154 FxCreate: 0, 54155 FxConnect: 0, 54156 FxBestIndex: 0, 54157 FxDisconnect: 0, 54158 FxDestroy: 0, 54159 FxOpen: 0, 54160 FxClose: 0, 54161 FxFilter: 0, 54162 FxNext: 0, 54163 FxEof: 0, 54164 FxColumn: 0, 54165 FxRowid: 0, 54166 } 54167 54168 func test_vfslog(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54169 bp := tls.Alloc(144) 54170 defer tls.Free(144) 54171 54172 var db uintptr 54173 54174 var rc int32 = SQLITE_ERROR 54175 54176 if objc < 2 { 54177 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 54178 return TCL_ERROR 54179 } 54180 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 { 54181 return TCL_ERROR 54182 } 54183 54184 switch uint32(*(*int32)(unsafe.Pointer(bp + 72))) { 54185 case uint32(0): 54186 { 54187 var zVfs uintptr 54188 var zMsg uintptr 54189 if objc != 4 { 54190 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+35835) 54191 return TCL_ERROR 54192 } 54193 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 54194 zMsg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 54195 rc = sqlite3_vfslog_annotate(tls, zVfs, zMsg) 54196 if rc != SQLITE_OK { 54197 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35839, 0)) 54198 return TCL_ERROR 54199 } 54200 break 54201 54202 } 54203 case uint32(1): 54204 { 54205 var zVfs uintptr 54206 if objc != 3 { 54207 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35835) 54208 return TCL_ERROR 54209 } 54210 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 54211 rc = sqlite3_vfslog_finalize(tls, zVfs) 54212 if rc != SQLITE_OK { 54213 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+35839, 0)) 54214 return TCL_ERROR 54215 } 54216 break 54217 54218 } 54219 54220 case uint32(2): 54221 { 54222 var zVfs uintptr 54223 var zParent uintptr 54224 var zLog uintptr 54225 if objc != 5 { 54226 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+35846) 54227 return TCL_ERROR 54228 } 54229 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 54230 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 54231 zLog = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 54232 if int32(*(*uint8)(unsafe.Pointer(zParent))) == 0 { 54233 zParent = uintptr(0) 54234 } 54235 rc = sqlite3_vfslog_new(tls, zVfs, zParent, zLog) 54236 if rc != SQLITE_OK { 54237 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+35839, 0)) 54238 return TCL_ERROR 54239 } 54240 break 54241 54242 } 54243 54244 case uint32(3): 54245 { 54246 var zDb uintptr 54247 if objc != 3 { 54248 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 54249 return TCL_ERROR 54250 } 54251 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 54252 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+80) != 0 { 54253 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 80)).FobjClientData)).Fdb 54254 rc = sqlite3_vfslog_register(tls, db) 54255 } 54256 if rc != SQLITE_OK { 54257 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+35865, zDb, uintptr(0))) 54258 return TCL_ERROR 54259 } 54260 break 54261 54262 } 54263 } 54264 54265 return TCL_OK 54266 } 54267 54268 var strs = [5]uintptr{ts + 35886, ts + 35895, ts + 14009, ts + 35904, uintptr(0)} 54269 54270 func SqlitetestOsinst_Init(tls *libc.TLS, interp uintptr) int32 { 54271 tcl.XTcl_CreateObjCommand(tls, interp, ts+35828, *(*uintptr)(unsafe.Pointer(&struct { 54272 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54273 }{test_vfslog})), uintptr(0), uintptr(0)) 54274 return TCL_OK 54275 } 54276 54277 type testpcacheGlobalType1 = struct { 54278 FpDummy uintptr 54279 FnInstance int32 54280 FdiscardChance uint32 54281 FprngSeed uint32 54282 FhighStress uint32 54283 } 54284 54285 type testpcacheGlobalType = testpcacheGlobalType1 54286 54287 var testpcacheGlobal testpcacheGlobalType 54288 54289 func testpcacheInit(tls *libc.TLS, pArg uintptr) int32 { 54290 testpcacheGlobal.FpDummy = sqlite3.Xsqlite3_malloc(tls, 10) 54291 if testpcacheGlobal.FpDummy == uintptr(0) { 54292 return SQLITE_NOMEM 54293 } 54294 return SQLITE_OK 54295 } 54296 54297 func testpcacheShutdown(tls *libc.TLS, pArg uintptr) { 54298 sqlite3.Xsqlite3_free(tls, testpcacheGlobal.FpDummy) 54299 testpcacheGlobal.FpDummy = uintptr(0) 54300 } 54301 54302 type testpcache1 = struct { 54303 FszPage int32 54304 FszExtra int32 54305 FbPurgeable int32 54306 FnFree int32 54307 FnPinned int32 54308 FiRand uint32 54309 FiMagic uint32 54310 F__ccgo_pad1 [4]byte 54311 Fa [217]struct { 54312 Fpage sqlite3_pcache_page 54313 Fkey uint32 54314 FisPinned int32 54315 } 54316 } 54317 54318 type testpcache = testpcache1 54319 type testpcachePage = struct { 54320 Fpage sqlite3_pcache_page 54321 Fkey uint32 54322 FisPinned int32 54323 } 54324 54325 func testpcacheRandom(tls *libc.TLS, p uintptr) uint32 { 54326 var x uint32 = uint32(0) 54327 var i int32 54328 for i = 0; i < 4; i++ { 54329 (*testpcache)(unsafe.Pointer(p)).FiRand = (*testpcache)(unsafe.Pointer(p)).FiRand*uint32(69069) + uint32(5) 54330 x = x<<8 | (*testpcache)(unsafe.Pointer(p)).FiRand>>16&uint32(0xff) 54331 } 54332 return x 54333 } 54334 54335 func testpcacheCreate(tls *libc.TLS, szPage int32, szExtra int32, bPurgeable int32) uintptr { 54336 var nMem int32 54337 var x uintptr 54338 var p uintptr 54339 var i int32 54340 54341 szPage = (szPage + 7) & libc.CplInt32(7) 54342 nMem = int32(uint64(unsafe.Sizeof(testpcache{})) + uint64(TESTPCACHE_NPAGE*(szPage+szExtra))) 54343 p = sqlite3.Xsqlite3_malloc(tls, nMem) 54344 if p == uintptr(0) { 54345 return uintptr(0) 54346 } 54347 x = p + 1*5240 54348 (*testpcache)(unsafe.Pointer(p)).FszPage = szPage 54349 (*testpcache)(unsafe.Pointer(p)).FszExtra = szExtra 54350 (*testpcache)(unsafe.Pointer(p)).FnFree = TESTPCACHE_NPAGE 54351 (*testpcache)(unsafe.Pointer(p)).FnPinned = 0 54352 (*testpcache)(unsafe.Pointer(p)).FiRand = testpcacheGlobal.FprngSeed 54353 (*testpcache)(unsafe.Pointer(p)).FbPurgeable = bPurgeable 54354 (*testpcache)(unsafe.Pointer(p)).FiMagic = uint32(TESTPCACHE_VALID) 54355 i = 0 54356 __1: 54357 if !(i < TESTPCACHE_NPAGE) { 54358 goto __3 54359 } 54360 { 54361 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 54362 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 54363 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpBuf = x 54364 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpExtra = x + uintptr(szPage) 54365 54366 } 54367 goto __2 54368 __2: 54369 i++ 54370 x += uintptr(szPage + szExtra) 54371 goto __1 54372 goto __3 54373 __3: 54374 ; 54375 testpcacheGlobal.FnInstance++ 54376 return p 54377 } 54378 54379 func testpcacheCachesize(tls *libc.TLS, pCache uintptr, newSize int32) { 54380 var p uintptr = pCache 54381 _ = p 54382 54383 } 54384 54385 func testpcachePagecount(tls *libc.TLS, pCache uintptr) int32 { 54386 var p uintptr = pCache 54387 54388 return TESTPCACHE_NPAGE - (*testpcache)(unsafe.Pointer(p)).FnFree 54389 } 54390 54391 func testpcacheFetch(tls *libc.TLS, pCache uintptr, key uint32, createFlag int32) uintptr { 54392 var p uintptr = pCache 54393 var i int32 54394 var j int32 54395 54396 for i = 0; i < TESTPCACHE_NPAGE; i++ { 54397 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == key { 54398 if !((*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0) { 54399 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 54400 54401 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 1 54402 } 54403 return p + 32 + uintptr(i)*24 54404 } 54405 } 54406 54407 if createFlag == 0 { 54408 return uintptr(0) 54409 } 54410 54411 if (*testpcache)(unsafe.Pointer(p)).FnPinned == TESTPCACHE_NPAGE { 54412 return uintptr(0) 54413 } 54414 54415 if (*testpcache)(unsafe.Pointer(p)).FnPinned >= TESTPCACHE_NPAGE-TESTPCACHE_RESERVE && createFlag < 2 { 54416 return uintptr(0) 54417 } 54418 54419 if testpcacheGlobal.FhighStress != 0 && createFlag < 2 { 54420 return uintptr(0) 54421 } 54422 54423 if (*testpcache)(unsafe.Pointer(p)).FnFree > TESTPCACHE_RESERVE || createFlag == 2 && (*testpcache)(unsafe.Pointer(p)).FnFree > 0 { 54424 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 54425 i = 0 54426 __1: 54427 if !(i < TESTPCACHE_NPAGE) { 54428 goto __3 54429 } 54430 { 54431 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey == uint32(0) { 54432 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 54433 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 54434 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 54435 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 54436 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 54437 (*testpcache)(unsafe.Pointer(p)).FnFree-- 54438 54439 return p + 32 + uintptr(j)*24 54440 } 54441 54442 } 54443 goto __2 54444 __2: 54445 i++ 54446 j = (j + 1) % TESTPCACHE_NPAGE 54447 goto __1 54448 goto __3 54449 __3: 54450 } 54451 54452 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable == 0 { 54453 return uintptr(0) 54454 } 54455 54456 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 54457 i = 0 54458 __4: 54459 if !(i < TESTPCACHE_NPAGE) { 54460 goto __6 54461 } 54462 { 54463 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey > uint32(0) && (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).FisPinned == 0 { 54464 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 54465 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 54466 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage)) 54467 libc.Xmemset(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra)) 54468 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 54469 54470 return p + 32 + uintptr(j)*24 54471 } 54472 54473 } 54474 goto __5 54475 __5: 54476 i++ 54477 j = (j + 1) % TESTPCACHE_NPAGE 54478 goto __4 54479 goto __6 54480 __6: 54481 ; 54482 return uintptr(0) 54483 } 54484 54485 func testpcacheUnpin(tls *libc.TLS, pCache uintptr, pOldPage uintptr, discard int32) { 54486 var p uintptr = pCache 54487 var i int32 54488 54489 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable != 0 && 54490 uint32(100)-testpcacheGlobal.FdiscardChance <= testpcacheRandom(tls, p)%uint32(100) { 54491 discard = 1 54492 } 54493 54494 for i = 0; i < TESTPCACHE_NPAGE; i++ { 54495 if p+32+uintptr(i)*24 == pOldPage { 54496 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 54497 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 54498 54499 if discard != 0 { 54500 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 54501 (*testpcache)(unsafe.Pointer(p)).FnFree++ 54502 54503 } 54504 return 54505 } 54506 } 54507 54508 } 54509 54510 func testpcacheRekey(tls *libc.TLS, pCache uintptr, pOldPage uintptr, oldKey uint32, newKey uint32) { 54511 var p uintptr = pCache 54512 var i int32 54513 54514 for i = 0; i < TESTPCACHE_NPAGE; i++ { 54515 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == newKey { 54516 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 54517 (*testpcache)(unsafe.Pointer(p)).FnFree++ 54518 54519 break 54520 } 54521 } 54522 54523 for i = 0; i < TESTPCACHE_NPAGE; i++ { 54524 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == oldKey { 54525 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = newKey 54526 return 54527 } 54528 } 54529 54530 } 54531 54532 func testpcacheTruncate(tls *libc.TLS, pCache uintptr, iLimit uint32) { 54533 var p uintptr = pCache 54534 var i uint32 54535 54536 for i = uint32(0); i < uint32(TESTPCACHE_NPAGE); i++ { 54537 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey >= iLimit { 54538 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 54539 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0 { 54540 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 54541 54542 } 54543 (*testpcache)(unsafe.Pointer(p)).FnFree++ 54544 54545 } 54546 } 54547 } 54548 54549 func testpcacheDestroy(tls *libc.TLS, pCache uintptr) { 54550 var p uintptr = pCache 54551 54552 (*testpcache)(unsafe.Pointer(p)).FiMagic = TESTPCACHE_CLEAR 54553 sqlite3.Xsqlite3_free(tls, p) 54554 testpcacheGlobal.FnInstance-- 54555 } 54556 54557 func installTestPCache(tls *libc.TLS, installFlag int32, discardChance uint32, prngSeed uint32, highStress uint32) { 54558 bp := tls.Alloc(24) 54559 defer tls.Free(24) 54560 54561 testpcacheGlobal.FdiscardChance = discardChance 54562 testpcacheGlobal.FprngSeed = prngSeed ^ prngSeed<<16 54563 testpcacheGlobal.FhighStress = highStress 54564 if installFlag != isInstalled { 54565 if installFlag != 0 { 54566 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp, uintptr(unsafe.Pointer(&defaultPcache)))) 54567 54568 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+8, uintptr(unsafe.Pointer(&testPcache)))) 54569 } else { 54570 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&defaultPcache)))) 54571 } 54572 isInstalled = installFlag 54573 } 54574 } 54575 54576 var testPcache = sqlite3_pcache_methods2{ 54577 FiVersion: 1, 54578 FpArg: 0, 54579 FxInit: 0, 54580 FxShutdown: 0, 54581 FxCreate: 0, 54582 FxCachesize: 0, 54583 FxPagecount: 0, 54584 FxFetch: 0, 54585 FxUnpin: 0, 54586 FxRekey: 0, 54587 FxTruncate: 0, 54588 FxDestroy: 0, 54589 } 54590 var defaultPcache sqlite3_pcache_methods2 54591 var isInstalled int32 = 0 54592 54593 type quota_FILE1 = struct { 54594 Ff uintptr 54595 FiOfst sqlite3_int64 54596 FpFile uintptr 54597 } 54598 54599 type quota_FILE = quota_FILE1 54600 54601 type quotaGroup1 = struct { 54602 FzPattern uintptr 54603 FiLimit sqlite3_int64 54604 FiSize sqlite3_int64 54605 FxCallback uintptr 54606 FpArg uintptr 54607 FxDestroy uintptr 54608 FpNext uintptr 54609 FppPrev uintptr 54610 FpFiles uintptr 54611 } 54612 54613 type quotaGroup = quotaGroup1 54614 type quotaConn1 = struct { 54615 Fbase sqlite3_file 54616 FpFile uintptr 54617 } 54618 54619 type quotaConn = quotaConn1 54620 type quotaFile1 = struct { 54621 FzFilename uintptr 54622 FpGroup uintptr 54623 FiSize sqlite3_int64 54624 FnRef int32 54625 FdeleteOnClose int32 54626 FpNext uintptr 54627 FppPrev uintptr 54628 } 54629 54630 type quotaFile = quotaFile1 54631 54632 var gQuota struct { 54633 FpOrigVfs uintptr 54634 FsThisVfs sqlite3_vfs 54635 FsIoMethodsV1 sqlite3_io_methods 54636 FsIoMethodsV2 sqlite3_io_methods 54637 FisInitialized int32 54638 F__ccgo_pad1 [4]byte 54639 FpMutex uintptr 54640 FpGroup uintptr 54641 } 54642 54643 func quotaEnter(tls *libc.TLS) { 54644 sqlite3.Xsqlite3_mutex_enter(tls, gQuota.FpMutex) 54645 } 54646 54647 func quotaLeave(tls *libc.TLS) { 54648 sqlite3.Xsqlite3_mutex_leave(tls, gQuota.FpMutex) 54649 } 54650 54651 func quotaGroupOpenFileCount(tls *libc.TLS, pGroup uintptr) int32 { 54652 var N int32 = 0 54653 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54654 for pFile != 0 { 54655 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54656 N++ 54657 } 54658 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54659 } 54660 return N 54661 } 54662 54663 func quotaRemoveFile(tls *libc.TLS, pFile uintptr) { 54664 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54665 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54666 *(*uintptr)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FppPrev)) = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54667 if (*quotaFile)(unsafe.Pointer(pFile)).FpNext != 0 { 54668 (*quotaFile)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpNext)).FppPrev = (*quotaFile)(unsafe.Pointer(pFile)).FppPrev 54669 } 54670 sqlite3.Xsqlite3_free(tls, pFile) 54671 } 54672 54673 func quotaRemoveAllFiles(tls *libc.TLS, pGroup uintptr) { 54674 for (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 54675 quotaRemoveFile(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles) 54676 } 54677 } 54678 54679 func quotaGroupDeref(tls *libc.TLS, pGroup uintptr) { 54680 if (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit == int64(0) && quotaGroupOpenFileCount(tls, pGroup) == 0 { 54681 quotaRemoveAllFiles(tls, pGroup) 54682 *(*uintptr)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev)) = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 54683 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext != 0 { 54684 (*quotaGroup)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpNext)).FppPrev = (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev 54685 } 54686 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 { 54687 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54688 } 54689 sqlite3.Xsqlite3_free(tls, pGroup) 54690 } 54691 } 54692 54693 func quotaStrglob(tls *libc.TLS, zGlob uintptr, z uintptr) int32 { 54694 var c int32 54695 var c2 int32 54696 var cx int32 54697 var invert int32 54698 var seen int32 54699 54700 for libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) != 0 { 54701 if c == '*' { 54702 for libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) == '*' || c == '?' { 54703 if c == '?' && int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 54704 return 0 54705 } 54706 } 54707 if c == 0 { 54708 return 1 54709 } else if c == '[' { 54710 for *(*uint8)(unsafe.Pointer(z)) != 0 && quotaStrglob(tls, zGlob-uintptr(1), z) == 0 { 54711 z++ 54712 } 54713 return libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z))) != 0) 54714 } 54715 if c == '/' { 54716 cx = '\\' 54717 } else { 54718 cx = c 54719 } 54720 for libc.AssignInt32(&c2, int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) != 0 { 54721 for c2 != c && c2 != cx { 54722 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 54723 if c2 == 0 { 54724 return 0 54725 } 54726 } 54727 if quotaStrglob(tls, zGlob, z) != 0 { 54728 return 1 54729 } 54730 } 54731 return 0 54732 } else if c == '?' { 54733 if int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 54734 return 0 54735 } 54736 } else if c == '[' { 54737 var prior_c int32 = 0 54738 seen = 0 54739 invert = 0 54740 c = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 54741 if c == 0 { 54742 return 0 54743 } 54744 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54745 if c2 == '^' { 54746 invert = 1 54747 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54748 } 54749 if c2 == ']' { 54750 if c == ']' { 54751 seen = 1 54752 } 54753 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54754 } 54755 for c2 != 0 && c2 != ']' { 54756 if c2 == '-' && int32(*(*uint8)(unsafe.Pointer(zGlob))) != ']' && int32(*(*uint8)(unsafe.Pointer(zGlob))) != 0 && prior_c > 0 { 54757 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54758 if c >= prior_c && c <= c2 { 54759 seen = 1 54760 } 54761 prior_c = 0 54762 } else { 54763 if c == c2 { 54764 seen = 1 54765 } 54766 prior_c = c2 54767 } 54768 c2 = int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 54769 } 54770 if c2 == 0 || seen^invert == 0 { 54771 return 0 54772 } 54773 } else if c == '/' { 54774 if int32(*(*uint8)(unsafe.Pointer(z))) != '/' && int32(*(*uint8)(unsafe.Pointer(z))) != '\\' { 54775 return 0 54776 } 54777 z++ 54778 } else { 54779 if c != int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) { 54780 return 0 54781 } 54782 } 54783 } 54784 return libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z))) == 0) 54785 } 54786 54787 func quotaGroupFind(tls *libc.TLS, zFilename uintptr) uintptr { 54788 var p uintptr 54789 for p = gQuota.FpGroup; p != 0 && quotaStrglob(tls, (*quotaGroup)(unsafe.Pointer(p)).FzPattern, zFilename) == 0; p = (*quotaGroup)(unsafe.Pointer(p)).FpNext { 54790 } 54791 return p 54792 } 54793 54794 func quotaSubOpen(tls *libc.TLS, pConn uintptr) uintptr { 54795 var p uintptr = pConn 54796 return p + 1*16 54797 } 54798 54799 func quotaFindFile(tls *libc.TLS, pGroup uintptr, zName uintptr, createFlag int32) uintptr { 54800 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54801 for pFile != 0 && libc.Xstrcmp(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName) != 0 { 54802 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 54803 } 54804 if pFile == uintptr(0) && createFlag != 0 { 54805 var nName int32 = int32(libc.Xstrlen(tls, zName) & uint64(0x3fffffff)) 54806 pFile = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaFile{}))+uint64(nName)+uint64(1))) 54807 if pFile != 0 { 54808 libc.Xmemset(tls, pFile, 0, uint64(unsafe.Sizeof(quotaFile{}))) 54809 (*quotaFile)(unsafe.Pointer(pFile)).FzFilename = pFile + 1*48 54810 libc.Xmemcpy(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName, uint64(nName+1)) 54811 (*quotaFile)(unsafe.Pointer(pFile)).FpNext = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 54812 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 54813 (*quotaFile)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles)).FppPrev = pFile + 32 54814 } 54815 (*quotaFile)(unsafe.Pointer(pFile)).FppPrev = pGroup + 64 54816 (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles = pFile 54817 (*quotaFile)(unsafe.Pointer(pFile)).FpGroup = pGroup 54818 } 54819 } 54820 return pFile 54821 } 54822 54823 func quota_utf8_to_mbcs(tls *libc.TLS, zUtf8 uintptr) uintptr { 54824 return zUtf8 54825 } 54826 54827 func quota_mbcs_free(tls *libc.TLS, zOld uintptr) { 54828 } 54829 54830 func quotaOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 54831 var rc int32 54832 var pQuotaOpen uintptr 54833 var pFile uintptr 54834 var pGroup uintptr 54835 var pSubOpen uintptr 54836 var pOrigVfs uintptr = gQuota.FpOrigVfs 54837 54838 if flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0 { 54839 return (*struct { 54840 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54841 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 54842 } 54843 54844 quotaEnter(tls) 54845 pGroup = quotaGroupFind(tls, zName) 54846 if pGroup == uintptr(0) { 54847 rc = (*struct { 54848 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54849 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 54850 } else { 54851 pQuotaOpen = pConn 54852 pSubOpen = quotaSubOpen(tls, pConn) 54853 rc = (*struct { 54854 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54855 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pSubOpen, flags, pOutFlags) 54856 if rc == SQLITE_OK { 54857 pFile = quotaFindFile(tls, pGroup, zName, 1) 54858 if pFile == uintptr(0) { 54859 quotaLeave(tls) 54860 (*struct { 54861 f func(*libc.TLS, uintptr) int32 54862 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 54863 return SQLITE_NOMEM 54864 } 54865 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = libc.Bool32(flags&SQLITE_OPEN_DELETEONCLOSE != 0) 54866 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 54867 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).FpFile = pFile 54868 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 54869 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 176 54870 } else { 54871 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 328 54872 } 54873 } 54874 } 54875 quotaLeave(tls) 54876 return rc 54877 } 54878 54879 func quotaDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 54880 var rc int32 54881 var pFile uintptr 54882 var pGroup uintptr 54883 var pOrigVfs uintptr = gQuota.FpOrigVfs 54884 54885 rc = (*struct { 54886 f func(*libc.TLS, uintptr, uintptr, int32) int32 54887 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 54888 54889 if rc == SQLITE_OK { 54890 quotaEnter(tls) 54891 pGroup = quotaGroupFind(tls, zName) 54892 if pGroup != 0 { 54893 pFile = quotaFindFile(tls, pGroup, zName, 0) 54894 if pFile != 0 { 54895 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 54896 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 54897 } else { 54898 quotaRemoveFile(tls, pFile) 54899 quotaGroupDeref(tls, pGroup) 54900 } 54901 } 54902 } 54903 quotaLeave(tls) 54904 } 54905 return rc 54906 } 54907 54908 func quotaClose(tls *libc.TLS, pConn uintptr) int32 { 54909 var p uintptr = pConn 54910 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54911 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54912 var rc int32 54913 rc = (*struct { 54914 f func(*libc.TLS, uintptr) int32 54915 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 54916 quotaEnter(tls) 54917 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 54918 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 54919 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54920 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 54921 (*struct { 54922 f func(*libc.TLS, uintptr, uintptr, int32) int32 54923 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 54924 quotaRemoveFile(tls, pFile) 54925 } 54926 quotaGroupDeref(tls, pGroup) 54927 } 54928 quotaLeave(tls) 54929 return rc 54930 } 54931 54932 func quotaRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 54933 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54934 return (*struct { 54935 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54936 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 54937 } 54938 54939 func quotaWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 54940 var p uintptr = pConn 54941 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54942 var iEnd sqlite3_int64 = iOfst + sqlite3_int64(iAmt) 54943 var pGroup uintptr 54944 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54945 var szNew sqlite3_int64 54946 54947 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 54948 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54949 quotaEnter(tls) 54950 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 54951 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54952 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 54953 (*struct { 54954 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 54955 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 54956 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 54957 } 54958 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 54959 quotaLeave(tls) 54960 return SQLITE_FULL 54961 } 54962 } 54963 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 54964 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 54965 quotaLeave(tls) 54966 } 54967 return (*struct { 54968 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54969 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 54970 } 54971 54972 func quotaTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 54973 var p uintptr = pConn 54974 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54975 var rc int32 = (*struct { 54976 f func(*libc.TLS, uintptr, sqlite3_int64) int32 54977 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 54978 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 54979 var pGroup uintptr 54980 if rc == SQLITE_OK { 54981 quotaEnter(tls) 54982 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 54983 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 54984 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = size 54985 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += size 54986 quotaLeave(tls) 54987 } 54988 return rc 54989 } 54990 54991 func quotaSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 54992 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 54993 return (*struct { 54994 f func(*libc.TLS, uintptr, int32) int32 54995 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 54996 } 54997 54998 func quotaFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 54999 bp := tls.Alloc(8) 55000 defer tls.Free(8) 55001 55002 var p uintptr = pConn 55003 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55004 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 55005 var pGroup uintptr 55006 55007 var rc int32 55008 55009 rc = (*struct { 55010 f func(*libc.TLS, uintptr, uintptr) int32 55011 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp) 55012 if rc == SQLITE_OK { 55013 quotaEnter(tls) 55014 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55015 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55016 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = *(*sqlite3_int64)(unsafe.Pointer(bp)) 55017 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += *(*sqlite3_int64)(unsafe.Pointer(bp)) 55018 quotaLeave(tls) 55019 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = *(*sqlite3_int64)(unsafe.Pointer(bp)) 55020 } 55021 return rc 55022 } 55023 55024 func quotaLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 55025 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55026 return (*struct { 55027 f func(*libc.TLS, uintptr, int32) int32 55028 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 55029 } 55030 55031 func quotaUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 55032 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55033 return (*struct { 55034 f func(*libc.TLS, uintptr, int32) int32 55035 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 55036 } 55037 55038 func quotaCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 55039 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55040 return (*struct { 55041 f func(*libc.TLS, uintptr, uintptr) int32 55042 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 55043 } 55044 55045 func quotaFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 55046 bp := tls.Alloc(8) 55047 defer tls.Free(8) 55048 55049 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55050 var rc int32 = (*struct { 55051 f func(*libc.TLS, uintptr, int32, uintptr) int32 55052 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 55053 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 55054 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35913, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 55055 } 55056 return rc 55057 } 55058 55059 func quotaSectorSize(tls *libc.TLS, pConn uintptr) int32 { 55060 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55061 return (*struct { 55062 f func(*libc.TLS, uintptr) int32 55063 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 55064 } 55065 55066 func quotaDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 55067 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55068 return (*struct { 55069 f func(*libc.TLS, uintptr) int32 55070 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 55071 } 55072 55073 func quotaShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 55074 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55075 return (*struct { 55076 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 55077 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 55078 } 55079 55080 func quotaShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 55081 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55082 return (*struct { 55083 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55084 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 55085 } 55086 55087 func quotaShmBarrier(tls *libc.TLS, pConn uintptr) { 55088 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55089 (*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) 55090 } 55091 55092 func quotaShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 55093 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 55094 return (*struct { 55095 f func(*libc.TLS, uintptr, int32) int32 55096 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 55097 } 55098 55099 func sqlite3_quota_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 55100 var pOrigVfs uintptr 55101 if gQuota.FisInitialized != 0 { 55102 return SQLITE_MISUSE 55103 } 55104 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 55105 if pOrigVfs == uintptr(0) { 55106 return SQLITE_ERROR 55107 } 55108 55109 gQuota.FpMutex = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 55110 if !(int32(gQuota.FpMutex) != 0) { 55111 return SQLITE_NOMEM 55112 } 55113 gQuota.FisInitialized = 1 55114 gQuota.FpOrigVfs = pOrigVfs 55115 gQuota.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 55116 gQuota.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 55117 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 55118 }{quotaOpen})) 55119 gQuota.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 55120 f func(*libc.TLS, uintptr, uintptr, int32) int32 55121 }{quotaDelete})) 55122 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gQuota)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(quotaConn{}))) 55123 gQuota.FsThisVfs.FzName = ts + 35922 55124 gQuota.FsIoMethodsV1.FiVersion = 1 55125 gQuota.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 55126 f func(*libc.TLS, uintptr) int32 55127 }{quotaClose})) 55128 gQuota.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 55129 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55130 }{quotaRead})) 55131 gQuota.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 55132 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55133 }{quotaWrite})) 55134 gQuota.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 55135 f func(*libc.TLS, uintptr, sqlite3_int64) int32 55136 }{quotaTruncate})) 55137 gQuota.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 55138 f func(*libc.TLS, uintptr, int32) int32 55139 }{quotaSync})) 55140 gQuota.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 55141 f func(*libc.TLS, uintptr, uintptr) int32 55142 }{quotaFileSize})) 55143 gQuota.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 55144 f func(*libc.TLS, uintptr, int32) int32 55145 }{quotaLock})) 55146 gQuota.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 55147 f func(*libc.TLS, uintptr, int32) int32 55148 }{quotaUnlock})) 55149 gQuota.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 55150 f func(*libc.TLS, uintptr, uintptr) int32 55151 }{quotaCheckReservedLock})) 55152 gQuota.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 55153 f func(*libc.TLS, uintptr, int32, uintptr) int32 55154 }{quotaFileControl})) 55155 gQuota.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 55156 f func(*libc.TLS, uintptr) int32 55157 }{quotaSectorSize})) 55158 gQuota.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 55159 f func(*libc.TLS, uintptr) int32 55160 }{quotaDeviceCharacteristics})) 55161 gQuota.FsIoMethodsV2 = gQuota.FsIoMethodsV1 55162 gQuota.FsIoMethodsV2.FiVersion = 2 55163 gQuota.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 55164 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 55165 }{quotaShmMap})) 55166 gQuota.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 55167 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55168 }{quotaShmLock})) 55169 gQuota.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{quotaShmBarrier})) 55170 gQuota.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 55171 f func(*libc.TLS, uintptr, int32) int32 55172 }{quotaShmUnmap})) 55173 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gQuota))+8, makeDefault) 55174 return SQLITE_OK 55175 } 55176 55177 func sqlite3_quota_shutdown(tls *libc.TLS) int32 { 55178 var pGroup uintptr 55179 if gQuota.FisInitialized == 0 { 55180 return SQLITE_MISUSE 55181 } 55182 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 55183 if quotaGroupOpenFileCount(tls, pGroup) > 0 { 55184 return SQLITE_MISUSE 55185 } 55186 } 55187 for gQuota.FpGroup != 0 { 55188 pGroup = gQuota.FpGroup 55189 gQuota.FpGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 55190 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = int64(0) 55191 55192 quotaGroupDeref(tls, pGroup) 55193 } 55194 gQuota.FisInitialized = 0 55195 sqlite3.Xsqlite3_mutex_free(tls, gQuota.FpMutex) 55196 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gQuota))+8) 55197 libc.Xmemset(tls, uintptr(unsafe.Pointer(&gQuota)), 0, uint64(unsafe.Sizeof(gQuota))) 55198 return SQLITE_OK 55199 } 55200 55201 func sqlite3_quota_set(tls *libc.TLS, zPattern uintptr, iLimit sqlite3_int64, xCallback uintptr, pArg uintptr, xDestroy uintptr) int32 { 55202 var pGroup uintptr 55203 quotaEnter(tls) 55204 pGroup = gQuota.FpGroup 55205 for pGroup != 0 && libc.Xstrcmp(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern) != 0 { 55206 pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 55207 } 55208 if pGroup == uintptr(0) { 55209 var nPattern int32 = int32(libc.Xstrlen(tls, zPattern) & uint64(0x3fffffff)) 55210 if iLimit <= int64(0) { 55211 quotaLeave(tls) 55212 return SQLITE_OK 55213 } 55214 pGroup = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaGroup{}))+uint64(nPattern)+uint64(1))) 55215 if pGroup == uintptr(0) { 55216 quotaLeave(tls) 55217 return SQLITE_NOMEM 55218 } 55219 libc.Xmemset(tls, pGroup, 0, uint64(unsafe.Sizeof(quotaGroup{}))) 55220 (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern = pGroup + 1*72 55221 libc.Xmemcpy(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern, uint64(nPattern+1)) 55222 if gQuota.FpGroup != 0 { 55223 (*quotaGroup)(unsafe.Pointer(gQuota.FpGroup)).FppPrev = pGroup + 48 55224 } 55225 (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext = gQuota.FpGroup 55226 (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev = uintptr(unsafe.Pointer(&gQuota)) + 496 55227 gQuota.FpGroup = pGroup 55228 } 55229 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = iLimit 55230 (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback = xCallback 55231 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 && (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg != pArg { 55232 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 55233 } 55234 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg = pArg 55235 (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy = xDestroy 55236 quotaGroupDeref(tls, pGroup) 55237 quotaLeave(tls) 55238 return SQLITE_OK 55239 } 55240 55241 func sqlite3_quota_file(tls *libc.TLS, zFilename uintptr) int32 { 55242 bp := tls.Alloc(16) 55243 defer tls.Free(16) 55244 55245 var zFull uintptr = uintptr(0) 55246 var fd uintptr 55247 var rc int32 55248 *(*int32)(unsafe.Pointer(bp)) = 0 55249 55250 var nAlloc int32 = gQuota.FsThisVfs.FszOsFile + gQuota.FsThisVfs.FmxPathname + 2 55251 55252 fd = sqlite3.Xsqlite3_malloc(tls, nAlloc) 55253 if fd == uintptr(0) { 55254 rc = SQLITE_NOMEM 55255 } else { 55256 zFull = fd + uintptr(gQuota.FsThisVfs.FszOsFile) 55257 rc = (*struct { 55258 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55259 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 55260 gQuota.FsThisVfs.FmxPathname+1, zFull) 55261 } 55262 55263 if rc == SQLITE_OK { 55264 *(*uint8)(unsafe.Pointer(zFull + uintptr(libc.Xstrlen(tls, zFull)+uint64(1)))) = uint8(0) 55265 rc = quotaOpen(tls, uintptr(unsafe.Pointer(&gQuota))+8, zFull, fd, 55266 SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_DB, bp) 55267 if rc == SQLITE_OK { 55268 (*struct { 55269 f func(*libc.TLS, uintptr, uintptr) int32 55270 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxFileSize})).f(tls, fd, bp+8) 55271 (*struct { 55272 f func(*libc.TLS, uintptr) int32 55273 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxClose})).f(tls, fd) 55274 } else if rc == SQLITE_CANTOPEN { 55275 var pGroup uintptr 55276 var pFile uintptr 55277 quotaEnter(tls) 55278 pGroup = quotaGroupFind(tls, zFull) 55279 if pGroup != 0 { 55280 pFile = quotaFindFile(tls, pGroup, zFull, 0) 55281 if pFile != 0 { 55282 quotaRemoveFile(tls, pFile) 55283 } 55284 } 55285 quotaLeave(tls) 55286 } 55287 } 55288 55289 sqlite3.Xsqlite3_free(tls, fd) 55290 return rc 55291 } 55292 55293 func sqlite3_quota_fopen(tls *libc.TLS, zFilename uintptr, zMode uintptr) uintptr { 55294 var p uintptr 55295 var zFull uintptr 55296 var zFullTranslated uintptr 55297 var rc int32 55298 var pGroup uintptr 55299 var pFile uintptr 55300 p = uintptr(0) 55301 zFull = uintptr(0) 55302 zFullTranslated = uintptr(0) 55303 55304 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 55305 if !(zFull == uintptr(0)) { 55306 goto __1 55307 } 55308 return uintptr(0) 55309 __1: 55310 ; 55311 rc = (*struct { 55312 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55313 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 55314 gQuota.FsThisVfs.FmxPathname+1, zFull) 55315 if !(rc != 0) { 55316 goto __2 55317 } 55318 goto quota_fopen_error 55319 __2: 55320 ; 55321 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(quota_FILE{}))) 55322 if !(p == uintptr(0)) { 55323 goto __3 55324 } 55325 goto quota_fopen_error 55326 __3: 55327 ; 55328 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(quota_FILE{}))) 55329 zFullTranslated = quota_utf8_to_mbcs(tls, zFull) 55330 if !(zFullTranslated == uintptr(0)) { 55331 goto __4 55332 } 55333 goto quota_fopen_error 55334 __4: 55335 ; 55336 (*quota_FILE)(unsafe.Pointer(p)).Ff = libc.Xfopen(tls, zFullTranslated, zMode) 55337 if !((*quota_FILE)(unsafe.Pointer(p)).Ff == uintptr(0)) { 55338 goto __5 55339 } 55340 goto quota_fopen_error 55341 __5: 55342 ; 55343 quotaEnter(tls) 55344 pGroup = quotaGroupFind(tls, zFull) 55345 if !(pGroup != 0) { 55346 goto __6 55347 } 55348 pFile = quotaFindFile(tls, pGroup, zFull, 1) 55349 if !(pFile == uintptr(0)) { 55350 goto __7 55351 } 55352 quotaLeave(tls) 55353 goto quota_fopen_error 55354 __7: 55355 ; 55356 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 55357 (*quota_FILE)(unsafe.Pointer(p)).FpFile = pFile 55358 __6: 55359 ; 55360 quotaLeave(tls) 55361 sqlite3.Xsqlite3_free(tls, zFull) 55362 return p 55363 55364 quota_fopen_error: 55365 quota_mbcs_free(tls, zFullTranslated) 55366 sqlite3.Xsqlite3_free(tls, zFull) 55367 if !(p != 0 && (*quota_FILE)(unsafe.Pointer(p)).Ff != 0) { 55368 goto __8 55369 } 55370 libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55371 __8: 55372 ; 55373 sqlite3.Xsqlite3_free(tls, p) 55374 return uintptr(0) 55375 } 55376 55377 func sqlite3_quota_fread(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 55378 return libc.Xfread(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55379 } 55380 55381 func sqlite3_quota_fwrite(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 55382 var iOfst sqlite3_int64 55383 var iEnd sqlite3_int64 55384 var szNew sqlite3_int64 55385 var pFile uintptr 55386 var rc size_t 55387 55388 iOfst = libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55389 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 55390 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 55391 if pFile != 0 && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 55392 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55393 quotaEnter(tls) 55394 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 55395 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 55396 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 55397 (*struct { 55398 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 55399 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 55400 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 55401 } 55402 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 55403 iEnd = (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit - (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize + (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55404 nmemb = uint64(iEnd-iOfst) / size 55405 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 55406 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 55407 } 55408 } 55409 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 55410 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 55411 quotaLeave(tls) 55412 } else { 55413 pFile = uintptr(0) 55414 } 55415 rc = libc.Xfwrite(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55416 55417 if rc < nmemb && pFile != 0 { 55418 var nWritten size_t = rc 55419 var iNewEnd sqlite3_int64 = sqlite3_int64(uint64(iOfst) + size*nWritten) 55420 if iNewEnd < iEnd { 55421 iNewEnd = iEnd 55422 } 55423 quotaEnter(tls) 55424 *(*sqlite3_int64)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpGroup + 16)) += iNewEnd - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55425 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iNewEnd 55426 quotaLeave(tls) 55427 } 55428 return rc 55429 } 55430 55431 func sqlite3_quota_fclose(tls *libc.TLS, p uintptr) int32 { 55432 var rc int32 55433 var pFile uintptr 55434 rc = libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55435 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 55436 if pFile != 0 { 55437 quotaEnter(tls) 55438 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 55439 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 55440 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55441 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 55442 (*struct { 55443 f func(*libc.TLS, uintptr, uintptr, int32) int32 55444 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 55445 quotaRemoveFile(tls, pFile) 55446 } 55447 quotaGroupDeref(tls, pGroup) 55448 } 55449 quotaLeave(tls) 55450 } 55451 sqlite3.Xsqlite3_free(tls, p) 55452 return rc 55453 } 55454 55455 func sqlite3_quota_fflush(tls *libc.TLS, p uintptr, doFsync int32) int32 { 55456 var rc int32 55457 rc = libc.Xfflush(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55458 if rc == 0 && doFsync != 0 { 55459 rc = libc.Xfsync(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff)) 55460 } 55461 return libc.Bool32(rc != 0) 55462 } 55463 55464 func sqlite3_quota_fseek(tls *libc.TLS, p uintptr, offset int64, whence int32) int32 { 55465 return libc.Xfseek(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff, offset, whence) 55466 } 55467 55468 func sqlite3_quota_rewind(tls *libc.TLS, p uintptr) { 55469 libc.Xrewind(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55470 } 55471 55472 func sqlite3_quota_ftell(tls *libc.TLS, p uintptr) int64 { 55473 return libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55474 } 55475 55476 func sqlite3_quota_ferror(tls *libc.TLS, p uintptr) int32 { 55477 return libc.Xferror(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 55478 } 55479 55480 func sqlite3_quota_ftruncate(tls *libc.TLS, p uintptr, szNew sqlite3_int64) int32 { 55481 var pFile uintptr = (*quota_FILE)(unsafe.Pointer(p)).FpFile 55482 var rc int32 55483 if libc.AssignUintptr(&pFile, (*quota_FILE)(unsafe.Pointer(p)).FpFile) != uintptr(0) && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 55484 var pGroup uintptr 55485 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 55486 return -1 55487 } 55488 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55489 quotaEnter(tls) 55490 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55491 quotaLeave(tls) 55492 } 55493 rc = libc.Xftruncate(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), szNew) 55494 if pFile != 0 && rc == 0 { 55495 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 55496 quotaEnter(tls) 55497 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 55498 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = szNew 55499 quotaLeave(tls) 55500 } 55501 return rc 55502 } 55503 55504 func sqlite3_quota_file_mtime(tls *libc.TLS, p uintptr, pTime uintptr) int32 { 55505 bp := tls.Alloc(144) 55506 defer tls.Free(144) 55507 55508 var rc int32 55509 55510 rc = libc.Xfstat(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), bp) 55511 if rc == 0 { 55512 *(*time_t)(unsafe.Pointer(pTime)) = (*stat)(unsafe.Pointer(bp)).Fst_mtim.Ftv_sec 55513 } 55514 return rc 55515 } 55516 55517 func sqlite3_quota_file_truesize(tls *libc.TLS, p uintptr) sqlite3_int64 { 55518 bp := tls.Alloc(144) 55519 defer tls.Free(144) 55520 55521 var rc int32 55522 55523 rc = libc.Xfstat(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), bp) 55524 if rc == 0 { 55525 return (*stat)(unsafe.Pointer(bp)).Fst_size 55526 } 55527 return int64(-1) 55528 } 55529 55530 func sqlite3_quota_file_size(tls *libc.TLS, p uintptr) sqlite3_int64 { 55531 if (*quota_FILE)(unsafe.Pointer(p)).FpFile != 0 { 55532 return (*quotaFile)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).FpFile)).FiSize 55533 } 55534 return int64(-1) 55535 } 55536 55537 func sqlite3_quota_file_available(tls *libc.TLS, p uintptr) int64 { 55538 var f uintptr = (*quota_FILE)(unsafe.Pointer(p)).Ff 55539 var pos1 int64 55540 var pos2 int64 55541 var rc int32 55542 pos1 = libc.Xftell(tls, f) 55543 if pos1 < int64(0) { 55544 return int64(-1) 55545 } 55546 rc = libc.Xfseek(tls, f, int64(0), SEEK_END) 55547 if rc != 0 { 55548 return int64(-1) 55549 } 55550 pos2 = libc.Xftell(tls, f) 55551 if pos2 < int64(0) { 55552 return int64(-1) 55553 } 55554 rc = libc.Xfseek(tls, f, pos1, SEEK_SET) 55555 if rc != 0 { 55556 return int64(-1) 55557 } 55558 return pos2 - pos1 55559 } 55560 55561 func sqlite3_quota_remove(tls *libc.TLS, zFilename uintptr) int32 { 55562 var zFull uintptr 55563 var nFull size_t 55564 var rc int32 55565 var pGroup uintptr 55566 var pFile uintptr 55567 var pNextFile uintptr 55568 var diff int32 55569 var c uint8 55570 55571 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 55572 if zFull == uintptr(0) { 55573 return SQLITE_NOMEM 55574 } 55575 rc = (*struct { 55576 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55577 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 55578 gQuota.FsThisVfs.FmxPathname+1, zFull) 55579 if rc != 0 { 55580 sqlite3.Xsqlite3_free(tls, zFull) 55581 return rc 55582 } 55583 55584 nFull = libc.Xstrlen(tls, zFull) 55585 if nFull > uint64(0) && (int32(*(*uint8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '/' || int32(*(*uint8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '\\') { 55586 nFull-- 55587 *(*uint8)(unsafe.Pointer(zFull + uintptr(nFull))) = uint8(0) 55588 } 55589 55590 quotaEnter(tls) 55591 pGroup = quotaGroupFind(tls, zFull) 55592 if pGroup != 0 { 55593 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0 && rc == SQLITE_OK; pFile = pNextFile { 55594 pNextFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 55595 diff = libc.Xstrncmp(tls, zFull, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, nFull) 55596 if diff == 0 && (int32(libc.AssignUint8(&c, *(*uint8)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FzFilename + uintptr(nFull))))) == 0 || int32(c) == '/' || int32(c) == '\\') { 55597 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 55598 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 55599 } else { 55600 rc = (*struct { 55601 f func(*libc.TLS, uintptr, uintptr, int32) int32 55602 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 55603 quotaRemoveFile(tls, pFile) 55604 quotaGroupDeref(tls, pGroup) 55605 } 55606 } 55607 } 55608 } 55609 quotaLeave(tls) 55610 sqlite3.Xsqlite3_free(tls, zFull) 55611 return rc 55612 } 55613 55614 type TclQuotaCallback1 = struct { 55615 Finterp uintptr 55616 FpScript uintptr 55617 } 55618 55619 type TclQuotaCallback = TclQuotaCallback1 55620 55621 func tclQuotaCallback(tls *libc.TLS, zFilename uintptr, piLimit uintptr, iSize sqlite3_int64, pArg uintptr) { 55622 bp := tls.Alloc(16) 55623 defer tls.Free(16) 55624 55625 var p uintptr 55626 var pEval uintptr 55627 var pVarname uintptr 55628 55629 var rc int32 55630 55631 p = pArg 55632 if p == uintptr(0) { 55633 return 55634 } 55635 55636 pVarname = tcl.XTcl_NewStringObj(tls, ts+35928, -1) 55637 (*Tcl_Obj)(unsafe.Pointer(pVarname)).FrefCount++ 55638 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(uint32(0))), bp) 55639 tcl.XTcl_AppendObjToObj(tls, pVarname, tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer(bp))&uint32(0x7FFFFFFF)))) 55640 tcl.XTcl_ObjSetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(piLimit))), 0) 55641 55642 pEval = tcl.XTcl_DuplicateObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript) 55643 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 55644 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zFilename, -1)) 55645 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pVarname) 55646 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewWideIntObj(tls, iSize)) 55647 rc = tcl.XTcl_EvalObjEx(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 55648 55649 if rc == TCL_OK { 55650 var pLimit uintptr = tcl.XTcl_ObjGetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), 0) 55651 rc = tcl.XTcl_GetWideIntFromObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pLimit, bp+8) 55652 *(*sqlite3_int64)(unsafe.Pointer(piLimit)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) 55653 tcl.XTcl_UnsetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetString(tls, pVarname), uintptr(0), 0) 55654 } 55655 55656 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 55657 var _objPtr uintptr = pEval 55658 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55659 tcl.XTclFreeObj(tls, _objPtr) 55660 } 55661 } 55662 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 55663 var _objPtr uintptr = pVarname 55664 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55665 tcl.XTclFreeObj(tls, _objPtr) 55666 } 55667 } 55668 if rc != TCL_OK { 55669 tcl.XTcl_BackgroundError(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp) 55670 } 55671 } 55672 55673 func tclCallbackDestructor(tls *libc.TLS, pObj uintptr) { 55674 var p uintptr = pObj 55675 if p != 0 { 55676 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 55677 var _objPtr uintptr = (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript 55678 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 55679 tcl.XTclFreeObj(tls, _objPtr) 55680 } 55681 } 55682 sqlite3.Xsqlite3_free(tls, p) 55683 } 55684 } 55685 55686 func test_quota_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55687 bp := tls.Alloc(4) 55688 defer tls.Free(4) 55689 55690 var zName uintptr 55691 55692 var rc int32 55693 55694 if objc != 3 { 55695 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34817) 55696 return TCL_ERROR 55697 } 55698 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55699 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55700 return TCL_ERROR 55701 } 55702 if int32(*(*uint8)(unsafe.Pointer(zName))) == 0 { 55703 zName = uintptr(0) 55704 } 55705 55706 rc = sqlite3_quota_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 55707 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55708 55709 return TCL_OK 55710 } 55711 55712 func test_quota_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55713 var rc int32 55714 55715 if objc != 1 { 55716 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 55717 return TCL_ERROR 55718 } 55719 55720 rc = sqlite3_quota_shutdown(tls) 55721 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55722 55723 return TCL_OK 55724 } 55725 55726 func test_quota_set(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55727 bp := tls.Alloc(12) 55728 defer tls.Free(12) 55729 55730 var zPattern uintptr 55731 55732 var pScript uintptr 55733 var rc int32 55734 var p uintptr 55735 55736 var xDestroy uintptr 55737 var xCallback uintptr 55738 55739 if objc != 4 { 55740 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35939) 55741 return TCL_ERROR 55742 } 55743 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55744 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55745 return TCL_ERROR 55746 } 55747 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 55748 tcl.XTcl_GetStringFromObj(tls, pScript, bp+8) 55749 55750 if *(*int32)(unsafe.Pointer(bp + 8)) > 0 { 55751 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TclQuotaCallback{}))) 55752 if !(p != 0) { 55753 tcl.XTcl_SetResult(tls, interp, ts+32746, uintptr(0)) 55754 return TCL_OK 55755 } 55756 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(TclQuotaCallback{}))) 55757 (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp = interp 55758 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 55759 (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript = pScript 55760 xDestroy = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tclCallbackDestructor})) 55761 xCallback = *(*uintptr)(unsafe.Pointer(&struct { 55762 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 55763 }{tclQuotaCallback})) 55764 } else { 55765 p = uintptr(0) 55766 xDestroy = uintptr(0) 55767 xCallback = uintptr(0) 55768 } 55769 55770 rc = sqlite3_quota_set(tls, zPattern, *(*Tcl_WideInt)(unsafe.Pointer(bp)), xCallback, p, xDestroy) 55771 55772 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55773 return TCL_OK 55774 } 55775 55776 func test_quota_file(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55777 var zFilename uintptr 55778 var rc int32 55779 55780 if objc != 2 { 55781 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 55782 return TCL_ERROR 55783 } 55784 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55785 55786 rc = sqlite3_quota_file(tls, zFilename) 55787 55788 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 55789 return TCL_OK 55790 } 55791 55792 func test_quota_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55793 bp := tls.Alloc(1008) 55794 defer tls.Free(1008) 55795 55796 var pResult uintptr 55797 var pGroupTerm uintptr 55798 var pFileTerm uintptr 55799 var pGroup uintptr 55800 var pFile uintptr 55801 55802 pResult = tcl.XTcl_NewObj(tls) 55803 quotaEnter(tls) 55804 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 55805 pGroupTerm = tcl.XTcl_NewObj(tls) 55806 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55807 tcl.XTcl_NewStringObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, -1)) 55808 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55809 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit)) 55810 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 55811 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize)) 55812 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0; pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext { 55813 var i int32 55814 55815 pFileTerm = tcl.XTcl_NewObj(tls) 55816 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]uint8{})), bp+8, ts, libc.VaList(bp, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename)) 55817 for i = 0; *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i))) != 0; i++ { 55818 if int32(*(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i)))) == '\\' { 55819 *(*uint8)(unsafe.Pointer(bp + 8 + uintptr(i))) = uint8('/') 55820 } 55821 } 55822 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55823 tcl.XTcl_NewStringObj(tls, bp+8, -1)) 55824 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55825 tcl.XTcl_NewWideIntObj(tls, (*quotaFile)(unsafe.Pointer(pFile)).FiSize)) 55826 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55827 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FnRef))) 55828 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 55829 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose))) 55830 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, pFileTerm) 55831 } 55832 tcl.XTcl_ListObjAppendElement(tls, interp, pResult, pGroupTerm) 55833 } 55834 quotaLeave(tls) 55835 tcl.XTcl_SetObjResult(tls, interp, pResult) 55836 return TCL_OK 55837 } 55838 55839 func test_quota_fopen(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55840 bp := tls.Alloc(58) 55841 defer tls.Free(58) 55842 55843 var zFilename uintptr 55844 var zMode uintptr 55845 var p uintptr 55846 55847 if objc != 3 { 55848 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35960) 55849 return TCL_ERROR 55850 } 55851 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 55852 zMode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 55853 p = sqlite3_quota_fopen(tls, zFilename, zMode) 55854 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+8, ts+9889, libc.VaList(bp, p)) 55855 tcl.XTcl_SetResult(tls, interp, bp+8, uintptr(1)) 55856 return TCL_OK 55857 } 55858 55859 func test_quota_fread(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55860 bp := tls.Alloc(8) 55861 defer tls.Free(8) 55862 55863 var p uintptr 55864 var zBuf uintptr 55865 55866 var got size_t 55867 55868 if objc != 4 { 55869 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35974) 55870 return TCL_ERROR 55871 } 55872 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55873 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55874 return TCL_ERROR 55875 } 55876 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 55877 return TCL_ERROR 55878 } 55879 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp))**(*int32)(unsafe.Pointer(bp + 4))+1) 55880 if zBuf == uintptr(0) { 55881 tcl.XTcl_SetResult(tls, interp, ts+2069, uintptr(0)) 55882 return TCL_ERROR 55883 } 55884 got = sqlite3_quota_fread(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 55885 *(*uint8)(unsafe.Pointer(zBuf + uintptr(got*size_t(*(*int32)(unsafe.Pointer(bp)))))) = uint8(0) 55886 tcl.XTcl_SetResult(tls, interp, zBuf, uintptr(1)) 55887 sqlite3.Xsqlite3_free(tls, zBuf) 55888 return TCL_OK 55889 } 55890 55891 func test_quota_fwrite(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55892 bp := tls.Alloc(8) 55893 defer tls.Free(8) 55894 55895 var p uintptr 55896 var zBuf uintptr 55897 55898 var got size_t 55899 55900 if objc != 5 { 55901 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35992) 55902 return TCL_ERROR 55903 } 55904 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55905 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55906 return TCL_ERROR 55907 } 55908 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 55909 return TCL_ERROR 55910 } 55911 zBuf = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 55912 got = sqlite3_quota_fwrite(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 55913 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(got))) 55914 return TCL_OK 55915 } 55916 55917 func test_quota_fclose(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55918 var p uintptr 55919 var rc int32 55920 55921 if objc != 2 { 55922 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55923 return TCL_ERROR 55924 } 55925 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55926 rc = sqlite3_quota_fclose(tls, p) 55927 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55928 return TCL_OK 55929 } 55930 55931 func test_quota_fflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55932 bp := tls.Alloc(4) 55933 defer tls.Free(4) 55934 55935 var p uintptr 55936 var rc int32 55937 *(*int32)(unsafe.Pointer(bp)) = 0 55938 55939 if objc != 2 && objc != 3 { 55940 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36018) 55941 return TCL_ERROR 55942 } 55943 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55944 if objc == 3 { 55945 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 55946 return TCL_ERROR 55947 } 55948 } 55949 rc = sqlite3_quota_fflush(tls, p, *(*int32)(unsafe.Pointer(bp))) 55950 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55951 return TCL_OK 55952 } 55953 55954 func test_quota_fseek(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55955 bp := tls.Alloc(20) 55956 defer tls.Free(20) 55957 55958 var p uintptr 55959 55960 var zWhence uintptr 55961 var whence int32 55962 var rc int32 55963 55964 if objc != 4 { 55965 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36036) 55966 return TCL_ERROR 55967 } 55968 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55969 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 55970 return TCL_ERROR 55971 } 55972 zWhence = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 55973 if libc.Xstrcmp(tls, zWhence, ts+36057) == 0 { 55974 whence = SEEK_SET 55975 } else if libc.Xstrcmp(tls, zWhence, ts+36066) == 0 { 55976 whence = SEEK_CUR 55977 } else if libc.Xstrcmp(tls, zWhence, ts+36075) == 0 { 55978 whence = SEEK_END 55979 } else { 55980 tcl.XTcl_AppendResult(tls, interp, 55981 libc.VaList(bp, ts+36084, uintptr(0))) 55982 return TCL_ERROR 55983 } 55984 rc = sqlite3_quota_fseek(tls, p, int64(*(*int32)(unsafe.Pointer(bp + 16))), whence) 55985 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 55986 return TCL_OK 55987 } 55988 55989 func test_quota_rewind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 55990 var p uintptr 55991 if objc != 2 { 55992 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 55993 return TCL_ERROR 55994 } 55995 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 55996 sqlite3_quota_rewind(tls, p) 55997 return TCL_OK 55998 } 55999 56000 func test_quota_ftell(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56001 var p uintptr 56002 var x sqlite3_int64 56003 if objc != 2 { 56004 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 56005 return TCL_ERROR 56006 } 56007 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56008 x = sqlite3_quota_ftell(tls, p) 56009 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 56010 return TCL_OK 56011 } 56012 56013 func test_quota_ftruncate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56014 bp := tls.Alloc(8) 56015 defer tls.Free(8) 56016 56017 var p uintptr 56018 var x sqlite3_int64 56019 56020 var rc int32 56021 if objc != 3 { 56022 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36133) 56023 return TCL_ERROR 56024 } 56025 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56026 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 56027 return TCL_ERROR 56028 } 56029 x = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 56030 rc = sqlite3_quota_ftruncate(tls, p, x) 56031 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 56032 return TCL_OK 56033 } 56034 56035 func test_quota_file_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56036 var p uintptr 56037 var x sqlite3_int64 56038 if objc != 2 { 56039 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 56040 return TCL_ERROR 56041 } 56042 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56043 x = sqlite3_quota_file_size(tls, p) 56044 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 56045 return TCL_OK 56046 } 56047 56048 func test_quota_file_truesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56049 var p uintptr 56050 var x sqlite3_int64 56051 if objc != 2 { 56052 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 56053 return TCL_ERROR 56054 } 56055 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56056 x = sqlite3_quota_file_truesize(tls, p) 56057 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 56058 return TCL_OK 56059 } 56060 56061 func test_quota_file_mtime(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56062 bp := tls.Alloc(8) 56063 defer tls.Free(8) 56064 56065 var p uintptr 56066 56067 if objc != 2 { 56068 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 56069 return TCL_ERROR 56070 } 56071 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56072 *(*time_t)(unsafe.Pointer(bp)) = int64(0) 56073 sqlite3_quota_file_mtime(tls, p, bp) 56074 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*time_t)(unsafe.Pointer(bp)))) 56075 return TCL_OK 56076 } 56077 56078 func test_quota_remove(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56079 var zFilename uintptr 56080 var rc int32 56081 if objc != 2 { 56082 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32930) 56083 return TCL_ERROR 56084 } 56085 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 56086 rc = sqlite3_quota_remove(tls, zFilename) 56087 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 56088 return TCL_OK 56089 } 56090 56091 func test_quota_glob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56092 var zPattern uintptr 56093 var zText uintptr 56094 var rc int32 56095 if objc != 3 { 56096 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36145) 56097 return TCL_ERROR 56098 } 56099 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 56100 zText = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56101 rc = quotaStrglob(tls, zPattern, zText) 56102 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 56103 return TCL_OK 56104 } 56105 56106 func test_quota_file_available(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56107 var p uintptr 56108 var x sqlite3_int64 56109 if objc != 2 { 56110 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 56111 return TCL_ERROR 56112 } 56113 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56114 x = sqlite3_quota_file_available(tls, p) 56115 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 56116 return TCL_OK 56117 } 56118 56119 func test_quota_ferror(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56120 var p uintptr 56121 var x int32 56122 if objc != 2 { 56123 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28660) 56124 return TCL_ERROR 56125 } 56126 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 56127 x = sqlite3_quota_ferror(tls, p) 56128 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, x)) 56129 return TCL_OK 56130 } 56131 56132 func Sqlitequota_Init(tls *libc.TLS, interp uintptr) int32 { 56133 var i int32 56134 56135 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd9))/uint64(unsafe.Sizeof(struct { 56136 FzName uintptr 56137 FxProc uintptr 56138 }{})); i++ { 56139 tcl.XTcl_CreateObjCommand(tls, interp, aCmd9[i].FzName, aCmd9[i].FxProc, uintptr(0), uintptr(0)) 56140 } 56141 56142 return TCL_OK 56143 } 56144 56145 var aCmd9 = [21]struct { 56146 FzName uintptr 56147 FxProc uintptr 56148 }{ 56149 {FzName: ts + 36158, FxProc: 0}, 56150 {FzName: ts + 36183, FxProc: 0}, 56151 {FzName: ts + 36206, FxProc: 0}, 56152 {FzName: ts + 36224, FxProc: 0}, 56153 {FzName: ts + 36243, FxProc: 0}, 56154 {FzName: ts + 36262, FxProc: 0}, 56155 {FzName: ts + 36282, FxProc: 0}, 56156 {FzName: ts + 36302, FxProc: 0}, 56157 {FzName: ts + 36323, FxProc: 0}, 56158 {FzName: ts + 36344, FxProc: 0}, 56159 {FzName: ts + 36365, FxProc: 0}, 56160 {FzName: ts + 36385, FxProc: 0}, 56161 {FzName: ts + 36406, FxProc: 0}, 56162 {FzName: ts + 36426, FxProc: 0}, 56163 {FzName: ts + 36450, FxProc: 0}, 56164 {FzName: ts + 36474, FxProc: 0}, 56165 {FzName: ts + 36502, FxProc: 0}, 56166 {FzName: ts + 36527, FxProc: 0}, 56167 {FzName: ts + 36548, FxProc: 0}, 56168 {FzName: ts + 36567, FxProc: 0}, 56169 {FzName: ts + 36596, FxProc: 0}, 56170 } 56171 56172 type Circle1 = struct { 56173 FaBox [2]struct { 56174 Fxmin float64 56175 Fxmax float64 56176 Fymin float64 56177 Fymax float64 56178 } 56179 Fcenterx float64 56180 Fcentery float64 56181 Fradius float64 56182 FmxArea float64 56183 FeScoreType int32 56184 F__ccgo_pad1 [4]byte 56185 } 56186 56187 type Circle = Circle1 56188 type Box = struct { 56189 Fxmin float64 56190 Fxmax float64 56191 Fymin float64 56192 Fymax float64 56193 } 56194 56195 func circle_del(tls *libc.TLS, p uintptr) { 56196 sqlite3.Xsqlite3_free(tls, p) 56197 } 56198 56199 func circle_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 56200 var i int32 56201 var pCircle uintptr 56202 var xmin float64 56203 var xmax float64 56204 var ymin float64 56205 var ymax float64 56206 56207 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) 56208 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) 56209 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) 56210 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) 56211 pCircle = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 56212 if pCircle == uintptr(0) { 56213 if nCoord != 4 { 56214 return SQLITE_ERROR 56215 } 56216 56217 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 { 56218 return SQLITE_ERROR 56219 } 56220 56221 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 56222 if !(pCircle != 0) { 56223 return SQLITE_NOMEM 56224 } 56225 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 56226 56227 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 56228 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 56229 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 56230 56231 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 56232 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 56233 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 56234 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 56235 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 56236 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 56237 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 56238 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 56239 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = (xmax-xmin)*(ymax-ymin) + 1.0 56240 } 56241 56242 for i = 0; i < 4; i++ { 56243 var x float64 56244 if i&0x01 != 0 { 56245 x = xmax 56246 } else { 56247 x = xmin 56248 } 56249 var y float64 56250 if i&0x02 != 0 { 56251 y = ymax 56252 } else { 56253 y = ymin 56254 } 56255 var d2 float64 56256 56257 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 56258 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 56259 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 56260 *(*int32)(unsafe.Pointer(pRes)) = 1 56261 return SQLITE_OK 56262 } 56263 } 56264 56265 for i = 0; i < 2; i++ { 56266 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 56267 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 56268 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 56269 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 56270 *(*int32)(unsafe.Pointer(pRes)) = 1 56271 return SQLITE_OK 56272 } 56273 } 56274 56275 *(*int32)(unsafe.Pointer(pRes)) = 0 56276 return SQLITE_OK 56277 } 56278 56279 func circle_query_func(tls *libc.TLS, p uintptr) int32 { 56280 var i int32 56281 var pCircle uintptr 56282 var xmin float64 56283 var xmax float64 56284 var ymin float64 56285 var ymax float64 56286 var nWithin int32 = 0 56287 56288 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 56289 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 56290 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 56291 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 56292 pCircle = (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FpUser 56293 if pCircle == uintptr(0) { 56294 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnCoord != 4 { 56295 return SQLITE_ERROR 56296 } 56297 56298 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 && (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 1 { 56299 return SQLITE_ERROR 56300 } 56301 56302 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 56303 if !(pCircle != 0) { 56304 return SQLITE_NOMEM 56305 } 56306 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 56307 56308 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam == 4 { 56309 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 56310 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 56311 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 56312 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(*(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8))) 56313 } else { 56314 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FapSqlParam))) 56315 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = 0.0 56316 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = 0.0 56317 (*Circle)(unsafe.Pointer(pCircle)).Fradius = 0.0 56318 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = 0 56319 for z != 0 && *(*uint8)(unsafe.Pointer(z)) != 0 { 56320 if int32(*(*uint8)(unsafe.Pointer(z))) == 'r' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == ':' { 56321 (*Circle)(unsafe.Pointer(pCircle)).Fradius = libc.Xatof(tls, z+2) 56322 } else if int32(*(*uint8)(unsafe.Pointer(z))) == 'x' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == ':' { 56323 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = libc.Xatof(tls, z+2) 56324 } else if int32(*(*uint8)(unsafe.Pointer(z))) == 'y' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == ':' { 56325 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = libc.Xatof(tls, z+2) 56326 } else if int32(*(*uint8)(unsafe.Pointer(z))) == 'e' && int32(*(*uint8)(unsafe.Pointer(z + 1))) == ':' { 56327 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(libc.Xatof(tls, z+2)) 56328 } else if int32(*(*uint8)(unsafe.Pointer(z))) == ' ' { 56329 z++ 56330 continue 56331 } 56332 for int32(*(*uint8)(unsafe.Pointer(z))) != 0 && int32(*(*uint8)(unsafe.Pointer(z))) != ' ' { 56333 z++ 56334 } 56335 for int32(*(*uint8)(unsafe.Pointer(z))) == ' ' { 56336 z++ 56337 } 56338 } 56339 } 56340 if (*Circle)(unsafe.Pointer(pCircle)).Fradius < 0.0 { 56341 sqlite3.Xsqlite3_free(tls, pCircle) 56342 return SQLITE_NOMEM 56343 } 56344 56345 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 56346 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 56347 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 56348 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 56349 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 56350 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 56351 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 56352 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 56353 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = float64(200.0) * 200.0 56354 } 56355 56356 for i = 0; i < 4; i++ { 56357 var x float64 56358 if i&0x01 != 0 { 56359 x = xmax 56360 } else { 56361 x = xmin 56362 } 56363 var y float64 56364 if i&0x02 != 0 { 56365 y = ymax 56366 } else { 56367 y = ymin 56368 } 56369 var d2 float64 56370 56371 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 56372 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 56373 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 56374 nWithin++ 56375 } 56376 } 56377 56378 if nWithin == 0 { 56379 for i = 0; i < 2; i++ { 56380 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 56381 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 56382 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 56383 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 56384 nWithin = 1 56385 break 56386 } 56387 } 56388 } 56389 56390 if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 1 { 56391 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56392 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 2 { 56393 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56394 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 3 { 56395 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel == 1 { 56396 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 1.0 - (xmax-xmin)*(ymax-ymin)/(*Circle)(unsafe.Pointer(pCircle)).FmxArea 56397 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore < 0.01 { 56398 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.01 56399 } 56400 } else { 56401 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.0 56402 } 56403 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 4 { 56404 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56405 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 56406 nWithin = 0 56407 } 56408 } else { 56409 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56410 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 56411 nWithin = 0 56412 } 56413 } 56414 if nWithin == 0 { 56415 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 56416 } else if nWithin >= 4 { 56417 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 56418 } else { 56419 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 56420 } 56421 return SQLITE_OK 56422 } 56423 56424 func bfs_query_func(tls *libc.TLS, p uintptr) int32 { 56425 var x0 float64 56426 var x1 float64 56427 var y0 float64 56428 var y1 float64 56429 var bx0 float64 56430 var bx1 float64 56431 var by0 float64 56432 var by1 float64 56433 56434 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 { 56435 return SQLITE_ERROR 56436 } 56437 x0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 56438 x1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 56439 y0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 56440 y1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 56441 bx0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 56442 bx1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 56443 by0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 56444 by1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8)) 56445 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 56446 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeParentWithin == FULLY_WITHIN { 56447 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 56448 } else if x0 >= bx0 && x1 <= bx1 && y0 >= by0 && y1 <= by1 { 56449 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 56450 } else if x1 >= bx0 && x0 <= bx1 && y1 >= by0 && y0 <= by1 { 56451 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 56452 } else { 56453 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 56454 } 56455 return SQLITE_OK 56456 } 56457 56458 type Cube1 = struct { 56459 Fx float64 56460 Fy float64 56461 Fz float64 56462 Fwidth float64 56463 Fheight float64 56464 Fdepth float64 56465 } 56466 56467 type Cube = Cube1 56468 56469 func cube_context_free(tls *libc.TLS, p uintptr) { 56470 sqlite3.Xsqlite3_free(tls, p) 56471 } 56472 56473 var gHere int32 = 42 56474 56475 func cube_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, piRes uintptr) int32 { 56476 var pCube uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 56477 56478 if pCube == uintptr(0) { 56479 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != 6 || nCoord != 6 || 56480 *(*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 { 56481 return SQLITE_ERROR 56482 } 56483 pCube = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Cube{}))) 56484 if !(pCube != 0) { 56485 return SQLITE_NOMEM 56486 } 56487 (*Cube)(unsafe.Pointer(pCube)).Fx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 56488 (*Cube)(unsafe.Pointer(pCube)).Fy = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 56489 (*Cube)(unsafe.Pointer(pCube)).Fz = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 56490 (*Cube)(unsafe.Pointer(pCube)).Fwidth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 3*8)) 56491 (*Cube)(unsafe.Pointer(pCube)).Fheight = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 4*8)) 56492 (*Cube)(unsafe.Pointer(pCube)).Fdepth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 5*8)) 56493 56494 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pCube 56495 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cube_context_free})) 56496 } 56497 56498 *(*int32)(unsafe.Pointer(piRes)) = 0 56499 if *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) <= (*Cube)(unsafe.Pointer(pCube)).Fx+(*Cube)(unsafe.Pointer(pCube)).Fwidth && 56500 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fx && 56501 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fy+(*Cube)(unsafe.Pointer(pCube)).Fheight && 56502 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fy && 56503 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 4*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fz+(*Cube)(unsafe.Pointer(pCube)).Fdepth && 56504 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 5*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fz { 56505 *(*int32)(unsafe.Pointer(piRes)) = 1 56506 } 56507 56508 return SQLITE_OK 56509 } 56510 56511 func register_cube_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56512 bp := tls.Alloc(8) 56513 defer tls.Free(8) 56514 56515 var rc int32 56516 56517 if objc != 2 { 56518 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 56519 return TCL_ERROR 56520 } 56521 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 56522 return TCL_ERROR 56523 } 56524 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36617, *(*uintptr)(unsafe.Pointer(&struct { 56525 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 56526 }{cube_geom})), uintptr(unsafe.Pointer(&gHere))) 56527 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 56528 return TCL_OK 56529 } 56530 56531 func register_circle_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56532 bp := tls.Alloc(8) 56533 defer tls.Free(8) 56534 56535 var rc int32 56536 56537 if objc != 2 { 56538 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 56539 return TCL_ERROR 56540 } 56541 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 56542 return TCL_ERROR 56543 } 56544 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36622, *(*uintptr)(unsafe.Pointer(&struct { 56545 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 56546 }{circle_geom})), uintptr(0)) 56547 if rc == SQLITE_OK { 56548 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36629, 56549 *(*uintptr)(unsafe.Pointer(&struct { 56550 f func(*libc.TLS, uintptr) int32 56551 }{circle_query_func})), uintptr(0), uintptr(0)) 56552 } 56553 if rc == SQLITE_OK { 56554 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36637, 56555 *(*uintptr)(unsafe.Pointer(&struct { 56556 f func(*libc.TLS, uintptr) int32 56557 }{bfs_query_func})), uintptr(0), uintptr(0)) 56558 } 56559 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 56560 return TCL_OK 56561 } 56562 56563 func Sqlitetestrtree_Init(tls *libc.TLS, interp uintptr) int32 { 56564 tcl.XTcl_CreateObjCommand(tls, interp, ts+36656, *(*uintptr)(unsafe.Pointer(&struct { 56565 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56566 }{register_cube_geom})), uintptr(0), uintptr(0)) 56567 tcl.XTcl_CreateObjCommand(tls, interp, ts+36675, *(*uintptr)(unsafe.Pointer(&struct { 56568 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56569 }{register_circle_geom})), uintptr(0), uintptr(0)) 56570 return TCL_OK 56571 } 56572 56573 type fd_set5 = struct{ Ffds_bits [16]int64 } 56574 56575 type schema_vtab1 = struct { 56576 Fbase sqlite3_vtab 56577 Fdb uintptr 56578 } 56579 56580 type schema_vtab = schema_vtab1 56581 type schema_cursor1 = struct { 56582 Fbase sqlite3_vtab_cursor 56583 FpDbList uintptr 56584 FpTableList uintptr 56585 FpColumnList uintptr 56586 Frowid int32 56587 F__ccgo_pad1 [4]byte 56588 } 56589 56590 type schema_cursor = schema_cursor1 56591 56592 func schemaDestroy(tls *libc.TLS, pVtab uintptr) int32 { 56593 sqlite3.Xsqlite3_free(tls, pVtab) 56594 return 0 56595 } 56596 56597 func schemaCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 56598 var rc int32 = SQLITE_NOMEM 56599 var pVtab uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_vtab{}))) 56600 if pVtab != 0 { 56601 libc.Xmemset(tls, pVtab, 0, uint64(unsafe.Sizeof(schema_vtab{}))) 56602 (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb = db 56603 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+36696) 56604 } 56605 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 56606 return rc 56607 } 56608 56609 func schemaOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 56610 var rc int32 = SQLITE_NOMEM 56611 var pCur uintptr 56612 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_cursor{}))) 56613 if pCur != 0 { 56614 libc.Xmemset(tls, pCur, 0, uint64(unsafe.Sizeof(schema_cursor{}))) 56615 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 56616 rc = SQLITE_OK 56617 } 56618 return rc 56619 } 56620 56621 func schemaClose(tls *libc.TLS, cur uintptr) int32 { 56622 var pCur uintptr = cur 56623 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList) 56624 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) 56625 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) 56626 sqlite3.Xsqlite3_free(tls, pCur) 56627 return SQLITE_OK 56628 } 56629 56630 func schemaColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 56631 var pCur uintptr = cur 56632 switch i { 56633 case 0: 56634 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1)) 56635 break 56636 case 1: 56637 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0)) 56638 break 56639 default: 56640 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList, i-2)) 56641 break 56642 } 56643 return SQLITE_OK 56644 } 56645 56646 func schemaRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 56647 var pCur uintptr = cur 56648 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*schema_cursor)(unsafe.Pointer(pCur)).Frowid) 56649 return SQLITE_OK 56650 } 56651 56652 func finalize(tls *libc.TLS, ppStmt uintptr) int32 { 56653 var rc int32 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(ppStmt))) 56654 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 56655 return rc 56656 } 56657 56658 func schemaEof(tls *libc.TLS, cur uintptr) int32 { 56659 var pCur uintptr = cur 56660 return func() int32 { 56661 if (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList != 0 { 56662 return 0 56663 } 56664 return 1 56665 }() 56666 } 56667 56668 func schemaNext(tls *libc.TLS, cur uintptr) int32 { 56669 bp := tls.Alloc(24) 56670 defer tls.Free(24) 56671 56672 var rc int32 56673 var pCur uintptr 56674 var pVtab uintptr 56675 var zSql uintptr 56676 var pDbList uintptr 56677 rc = SQLITE_OK 56678 pCur = cur 56679 pVtab = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 56680 zSql = uintptr(0) 56681 56682 __1: 56683 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList)) { 56684 goto __2 56685 } 56686 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+24))) { 56687 goto __3 56688 } 56689 goto next_exit 56690 __3: 56691 ; 56692 __4: 56693 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList)) { 56694 goto __5 56695 } 56696 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+16))) { 56697 goto __6 56698 } 56699 goto next_exit 56700 __6: 56701 ; 56702 __7: 56703 if !(SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList)) { 56704 goto __8 56705 } 56706 rc = finalize(tls, pCur+8) 56707 goto next_exit 56708 goto __7 56709 __8: 56710 ; 56711 if !(sqlite3.Xsqlite3_column_int(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 0) == 1) { 56712 goto __9 56713 } 56714 zSql = sqlite3.Xsqlite3_mprintf(tls, 56715 ts+36768, 0) 56716 goto __10 56717 __9: 56718 pDbList = (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList 56719 zSql = sqlite3.Xsqlite3_mprintf(tls, 56720 ts+36823, 56721 libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pDbList, 1))) 56722 __10: 56723 ; 56724 if !!(zSql != 0) { 56725 goto __11 56726 } 56727 rc = SQLITE_NOMEM 56728 goto next_exit 56729 __11: 56730 ; 56731 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+16, uintptr(0)) 56732 sqlite3.Xsqlite3_free(tls, zSql) 56733 if !(rc != SQLITE_OK) { 56734 goto __12 56735 } 56736 goto next_exit 56737 __12: 56738 ; 56739 goto __4 56740 __5: 56741 ; 56742 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+36876, 56743 libc.VaList(bp+8, sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1), 56744 sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0))) 56745 56746 if !!(zSql != 0) { 56747 goto __13 56748 } 56749 rc = SQLITE_NOMEM 56750 goto next_exit 56751 __13: 56752 ; 56753 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+24, uintptr(0)) 56754 sqlite3.Xsqlite3_free(tls, zSql) 56755 if !(rc != SQLITE_OK) { 56756 goto __14 56757 } 56758 goto next_exit 56759 __14: 56760 ; 56761 goto __1 56762 __2: 56763 ; 56764 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid++ 56765 56766 next_exit: 56767 return rc 56768 } 56769 56770 func schemaFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 56771 var rc int32 56772 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 56773 var pCur uintptr = pVtabCursor 56774 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid = 0 56775 finalize(tls, pCur+16) 56776 finalize(tls, pCur+24) 56777 finalize(tls, pCur+8) 56778 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, ts+36901, -1, pCur+8, uintptr(0)) 56779 return func() int32 { 56780 if rc == SQLITE_OK { 56781 return schemaNext(tls, pVtabCursor) 56782 } 56783 return rc 56784 }() 56785 } 56786 56787 func schemaBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 56788 return SQLITE_OK 56789 } 56790 56791 var schemaModule = sqlite3_module{ 56792 FxCreate: 0, 56793 FxConnect: 0, 56794 FxBestIndex: 0, 56795 FxDisconnect: 0, 56796 FxDestroy: 0, 56797 FxOpen: 0, 56798 FxClose: 0, 56799 FxFilter: 0, 56800 FxNext: 0, 56801 FxEof: 0, 56802 FxColumn: 0, 56803 FxRowid: 0, 56804 } 56805 56806 func register_schema_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 56807 bp := tls.Alloc(8) 56808 defer tls.Free(8) 56809 56810 if objc != 2 { 56811 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 56812 return TCL_ERROR 56813 } 56814 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 56815 return TCL_ERROR 56816 } 56817 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+4808, uintptr(unsafe.Pointer(&schemaModule)), uintptr(0)) 56818 return TCL_OK 56819 } 56820 56821 func Sqlitetestschema_Init(tls *libc.TLS, interp uintptr) int32 { 56822 var i int32 56823 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd12))/uint64(unsafe.Sizeof(struct { 56824 FzName uintptr 56825 FxProc uintptr 56826 FclientData uintptr 56827 }{})); i++ { 56828 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd12[i].FzName, 56829 aObjCmd12[i].FxProc, aObjCmd12[i].FclientData, uintptr(0)) 56830 } 56831 return TCL_OK 56832 } 56833 56834 var aObjCmd12 = [1]struct { 56835 FzName uintptr 56836 FxProc uintptr 56837 FclientData uintptr 56838 }{ 56839 {FzName: ts + 36922, FxProc: 0}, 56840 } 56841 56842 type SqlMessage1 = struct { 56843 Fop int32 56844 F__ccgo_pad1 [4]byte 56845 FpDb uintptr 56846 FpStmt uintptr 56847 FerrCode int32 56848 F__ccgo_pad2 [4]byte 56849 FzIn uintptr 56850 FnByte int32 56851 F__ccgo_pad3 [4]byte 56852 FzOut uintptr 56853 FpNext uintptr 56854 FpPrev uintptr 56855 FclientMutex pthread_mutex_t 56856 FclientWakeup pthread_cond_t 56857 } 56858 56859 type SqlMessage = SqlMessage1 56860 56861 type ServerState = struct { 56862 FqueueMutex pthread_mutex_t 56863 FserverMutex pthread_mutex_t 56864 FserverWakeup pthread_cond_t 56865 FserverHalt int32 56866 F__ccgo_pad1 [4]byte 56867 FpQueueHead uintptr 56868 FpQueueTail uintptr 56869 } 56870 56871 var g4 = ServerState{} 56872 56873 func sendToServer(tls *libc.TLS, pMsg uintptr) { 56874 libc.Xpthread_mutex_init(tls, pMsg+72, uintptr(0)) 56875 libc.Xpthread_cond_init(tls, pMsg+112, uintptr(0)) 56876 56877 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 56878 (*SqlMessage)(unsafe.Pointer(pMsg)).FpNext = g4.FpQueueHead 56879 if g4.FpQueueHead == uintptr(0) { 56880 g4.FpQueueTail = pMsg 56881 } else { 56882 (*SqlMessage)(unsafe.Pointer(g4.FpQueueHead)).FpPrev = pMsg 56883 } 56884 (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev = uintptr(0) 56885 g4.FpQueueHead = pMsg 56886 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 56887 56888 libc.Xpthread_mutex_lock(tls, pMsg+72) 56889 libc.Xpthread_cond_signal(tls, uintptr(unsafe.Pointer(&g4))+80) 56890 for (*SqlMessage)(unsafe.Pointer(pMsg)).Fop != MSG_Done { 56891 libc.Xpthread_cond_wait(tls, pMsg+112, pMsg+72) 56892 } 56893 libc.Xpthread_mutex_unlock(tls, pMsg+72) 56894 56895 libc.Xpthread_mutex_destroy(tls, pMsg+72) 56896 libc.Xpthread_cond_destroy(tls, pMsg+112) 56897 } 56898 56899 func sqlite3_client_open(tls *libc.TLS, zDatabaseName uintptr, ppDb uintptr) int32 { 56900 bp := tls.Alloc(160) 56901 defer tls.Free(160) 56902 56903 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Open 56904 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zDatabaseName 56905 sendToServer(tls, bp) 56906 *(*uintptr)(unsafe.Pointer(ppDb)) = (*SqlMessage)(unsafe.Pointer(bp)).FpDb 56907 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56908 } 56909 56910 func sqlite3_client_prepare(tls *libc.TLS, pDb uintptr, zSql uintptr, nByte int32, ppStmt uintptr, pzTail uintptr) int32 { 56911 bp := tls.Alloc(160) 56912 defer tls.Free(160) 56913 56914 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Prepare 56915 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 56916 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zSql 56917 (*SqlMessage)(unsafe.Pointer(bp)).FnByte = nByte 56918 sendToServer(tls, bp) 56919 *(*uintptr)(unsafe.Pointer(ppStmt)) = (*SqlMessage)(unsafe.Pointer(bp)).FpStmt 56920 if pzTail != 0 { 56921 *(*uintptr)(unsafe.Pointer(pzTail)) = (*SqlMessage)(unsafe.Pointer(bp)).FzOut 56922 } 56923 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56924 } 56925 56926 func sqlite3_client_step(tls *libc.TLS, pStmt uintptr) int32 { 56927 bp := tls.Alloc(160) 56928 defer tls.Free(160) 56929 56930 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Step 56931 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56932 sendToServer(tls, bp) 56933 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56934 } 56935 56936 func sqlite3_client_reset(tls *libc.TLS, pStmt uintptr) int32 { 56937 bp := tls.Alloc(160) 56938 defer tls.Free(160) 56939 56940 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Reset 56941 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56942 sendToServer(tls, bp) 56943 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56944 } 56945 56946 func sqlite3_client_finalize(tls *libc.TLS, pStmt uintptr) int32 { 56947 bp := tls.Alloc(160) 56948 defer tls.Free(160) 56949 56950 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Finalize 56951 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 56952 sendToServer(tls, bp) 56953 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56954 } 56955 56956 func sqlite3_client_close(tls *libc.TLS, pDb uintptr) int32 { 56957 bp := tls.Alloc(160) 56958 defer tls.Free(160) 56959 56960 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Close 56961 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 56962 sendToServer(tls, bp) 56963 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 56964 } 56965 56966 func sqlite3_server(tls *libc.TLS, NotUsed uintptr) uintptr { 56967 if libc.Xpthread_mutex_trylock(tls, uintptr(unsafe.Pointer(&g4))+40) != 0 { 56968 return uintptr(0) 56969 } 56970 sqlite3.Xsqlite3_enable_shared_cache(tls, 1) 56971 for !(g4.FserverHalt != 0) { 56972 var pMsg uintptr 56973 56974 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 56975 for g4.FpQueueTail == uintptr(0) && g4.FserverHalt == 0 { 56976 libc.Xpthread_cond_wait(tls, uintptr(unsafe.Pointer(&g4))+80, uintptr(unsafe.Pointer(&g4))) 56977 } 56978 pMsg = g4.FpQueueTail 56979 if pMsg != 0 { 56980 if (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev != 0 { 56981 (*SqlMessage)(unsafe.Pointer((*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev)).FpNext = uintptr(0) 56982 } else { 56983 g4.FpQueueHead = uintptr(0) 56984 } 56985 g4.FpQueueTail = (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev 56986 } 56987 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 56988 if pMsg == uintptr(0) { 56989 break 56990 } 56991 56992 libc.Xpthread_mutex_lock(tls, pMsg+72) 56993 switch (*SqlMessage)(unsafe.Pointer(pMsg)).Fop { 56994 case MSG_Open: 56995 { 56996 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_open(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, pMsg+8) 56997 break 56998 56999 } 57000 case MSG_Prepare: 57001 { 57002 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_prepare(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, (*SqlMessage)(unsafe.Pointer(pMsg)).FnByte, 57003 pMsg+16, pMsg+48) 57004 break 57005 57006 } 57007 case MSG_Step: 57008 { 57009 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_step(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 57010 break 57011 57012 } 57013 case MSG_Reset: 57014 { 57015 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_reset(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 57016 break 57017 57018 } 57019 case MSG_Finalize: 57020 { 57021 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_finalize(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 57022 break 57023 57024 } 57025 case MSG_Close: 57026 { 57027 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_close(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb) 57028 break 57029 57030 } 57031 } 57032 57033 (*SqlMessage)(unsafe.Pointer(pMsg)).Fop = MSG_Done 57034 libc.Xpthread_mutex_unlock(tls, pMsg+72) 57035 libc.Xpthread_cond_signal(tls, pMsg+112) 57036 } 57037 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+40) 57038 return uintptr(0) 57039 } 57040 57041 func sqlite3_server_start(tls *libc.TLS) { 57042 bp := tls.Alloc(8) 57043 defer tls.Free(8) 57044 57045 var rc int32 57046 g4.FserverHalt = 0 57047 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 57048 f func(*libc.TLS, uintptr) uintptr 57049 }{sqlite3_server})), uintptr(0)) 57050 if rc == 0 { 57051 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 57052 } 57053 } 57054 57055 func serverWrapper(tls *libc.TLS, pnDecr uintptr) uintptr { 57056 var p uintptr = sqlite3_server(tls, uintptr(0)) 57057 *(*int32)(unsafe.Pointer(pnDecr))-- 57058 return p 57059 } 57060 57061 func sqlite3_server_start2(tls *libc.TLS, pnDecr uintptr) { 57062 bp := tls.Alloc(8) 57063 defer tls.Free(8) 57064 57065 var rc int32 57066 g4.FserverHalt = 0 57067 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 57068 f func(*libc.TLS, uintptr) uintptr 57069 }{serverWrapper})), pnDecr) 57070 if rc == 0 { 57071 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 57072 } 57073 } 57074 57075 func sqlite3_server_stop(tls *libc.TLS) { 57076 g4.FserverHalt = 1 57077 libc.Xpthread_cond_broadcast(tls, uintptr(unsafe.Pointer(&g4))+80) 57078 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))+40) 57079 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+40) 57080 } 57081 57082 type SuperlockBusy1 = struct { 57083 FxBusy uintptr 57084 FpBusyArg uintptr 57085 FnBusy int32 57086 F__ccgo_pad1 [4]byte 57087 } 57088 57089 type SuperlockBusy = SuperlockBusy1 57090 57091 type Superlock1 = struct { 57092 Fdb uintptr 57093 FbWal int32 57094 F__ccgo_pad1 [4]byte 57095 } 57096 57097 type Superlock = Superlock1 57098 57099 func superlockBusyHandler(tls *libc.TLS, pCtx uintptr, UNUSED int32) int32 { 57100 var pBusy uintptr = pCtx 57101 if (*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy == uintptr(0) { 57102 return 0 57103 } 57104 return (*struct { 57105 f func(*libc.TLS, uintptr, int32) int32 57106 })(unsafe.Pointer(&struct{ uintptr }{(*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy})).f(tls, (*SuperlockBusy)(unsafe.Pointer(pBusy)).FpBusyArg, libc.PostIncInt32(&(*SuperlockBusy)(unsafe.Pointer(pBusy)).FnBusy, 1)) 57107 } 57108 57109 func superlockIsWal(tls *libc.TLS, pLock uintptr) int32 { 57110 bp := tls.Alloc(8) 57111 defer tls.Free(8) 57112 57113 var rc int32 57114 57115 rc = sqlite3.Xsqlite3_prepare(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+36945, -1, bp, uintptr(0)) 57116 if rc != SQLITE_OK { 57117 return rc 57118 } 57119 57120 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 0 57121 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 57122 var zMode uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 57123 if zMode != 0 && libc.Xstrlen(tls, zMode) == uint64(3) && sqlite3.Xsqlite3_strnicmp(tls, ts+29946, zMode, 3) == 0 { 57124 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 1 57125 } 57126 } 57127 57128 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 57129 } 57130 57131 func superlockShmLock(tls *libc.TLS, fd uintptr, idx int32, nByte int32, pBusy uintptr) int32 { 57132 var rc int32 57133 var xShmLock uintptr = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxShmLock 57134 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_BUSY && superlockBusyHandler(tls, pBusy, 0) != 0 { 57135 rc = (*struct { 57136 f func(*libc.TLS, uintptr, int32, int32, int32) int32 57137 })(unsafe.Pointer(&struct{ uintptr }{xShmLock})).f(tls, fd, idx, nByte, SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) 57138 } 57139 return rc 57140 } 57141 57142 func superlockWalLock(tls *libc.TLS, db uintptr, pBusy uintptr) int32 { 57143 bp := tls.Alloc(16) 57144 defer tls.Free(16) 57145 57146 var rc int32 57147 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 57148 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 57149 57150 rc = sqlite3.Xsqlite3_file_control(tls, db, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 57151 if rc != SQLITE_OK { 57152 return rc 57153 } 57154 57155 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 2, 1, pBusy) 57156 if rc != SQLITE_OK { 57157 return rc 57158 } 57159 57160 rc = (*struct { 57161 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 57162 })(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) 57163 if rc != SQLITE_OK { 57164 return rc 57165 } 57166 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, uint64(32)) 57167 57168 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 3, SQLITE_SHM_NLOCK-3, pBusy) 57169 return rc 57170 } 57171 57172 func sqlite3demo_superunlock(tls *libc.TLS, pLock uintptr) { 57173 bp := tls.Alloc(8) 57174 defer tls.Free(8) 57175 57176 var p uintptr = pLock 57177 if (*Superlock)(unsafe.Pointer(p)).FbWal != 0 { 57178 var rc int32 57179 var flags int32 = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE 57180 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 57181 rc = sqlite3.Xsqlite3_file_control(tls, (*Superlock)(unsafe.Pointer(p)).Fdb, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 57182 if rc == SQLITE_OK { 57183 (*struct { 57184 f func(*libc.TLS, uintptr, int32, int32, int32) int32 57185 })(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) 57186 (*struct { 57187 f func(*libc.TLS, uintptr, int32, int32, int32) int32 57188 })(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) 57189 } 57190 } 57191 sqlite3.Xsqlite3_close(tls, (*Superlock)(unsafe.Pointer(p)).Fdb) 57192 sqlite3.Xsqlite3_free(tls, p) 57193 } 57194 57195 func sqlite3demo_superlock(tls *libc.TLS, zPath uintptr, zVfs uintptr, xBusy uintptr, pBusyArg uintptr, ppLock uintptr) int32 { 57196 bp := tls.Alloc(24) 57197 defer tls.Free(24) 57198 57199 *(*SuperlockBusy)(unsafe.Pointer(bp)) = SuperlockBusy{} 57200 var rc int32 57201 var pLock uintptr 57202 57203 pLock = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Superlock{}))) 57204 if !(pLock != 0) { 57205 return SQLITE_NOMEM 57206 } 57207 libc.Xmemset(tls, pLock, 0, uint64(unsafe.Sizeof(Superlock{}))) 57208 57209 rc = sqlite3.Xsqlite3_open_v2(tls, 57210 zPath, pLock, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs) 57211 57212 if rc == SQLITE_OK { 57213 (*SuperlockBusy)(unsafe.Pointer(bp)).FxBusy = xBusy 57214 (*SuperlockBusy)(unsafe.Pointer(bp)).FpBusyArg = pBusyArg 57215 sqlite3.Xsqlite3_busy_handler(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 57216 f func(*libc.TLS, uintptr, int32) int32 57217 }{superlockBusyHandler})), bp) 57218 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+13217, uintptr(0), uintptr(0), uintptr(0)) 57219 } 57220 57221 if rc == SQLITE_OK { 57222 if SQLITE_OK == libc.AssignInt32(&rc, superlockIsWal(tls, pLock)) && (*Superlock)(unsafe.Pointer(pLock)).FbWal != 0 { 57223 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+11628, uintptr(0), uintptr(0), uintptr(0)) 57224 if rc == SQLITE_OK { 57225 rc = superlockWalLock(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, bp) 57226 } 57227 } 57228 } 57229 57230 if rc != SQLITE_OK { 57231 sqlite3demo_superunlock(tls, pLock) 57232 *(*uintptr)(unsafe.Pointer(ppLock)) = uintptr(0) 57233 } else { 57234 *(*uintptr)(unsafe.Pointer(ppLock)) = pLock 57235 } 57236 57237 return rc 57238 } 57239 57240 type InterpAndScript1 = struct { 57241 Finterp uintptr 57242 FpScript uintptr 57243 } 57244 57245 type InterpAndScript = InterpAndScript1 57246 57247 func superunlock_del(tls *libc.TLS, cd ClientData) { 57248 sqlite3demo_superunlock(tls, cd) 57249 } 57250 57251 func superunlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57252 if objc != 1 { 57253 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 57254 return TCL_ERROR 57255 } 57256 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 57257 return TCL_OK 57258 } 57259 57260 func superlock_busy(tls *libc.TLS, pCtx uintptr, nBusy int32) int32 { 57261 bp := tls.Alloc(4) 57262 defer tls.Free(4) 57263 57264 var p uintptr = pCtx 57265 var pEval uintptr 57266 *(*int32)(unsafe.Pointer(bp)) = 0 57267 57268 pEval = tcl.XTcl_DuplicateObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).FpScript) 57269 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 57270 tcl.XTcl_ListObjAppendElement(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, nBusy)) 57271 tcl.XTcl_EvalObjEx(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 57272 tcl.XTcl_GetIntFromObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp), bp) 57273 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57274 var _objPtr uintptr = pEval 57275 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57276 tcl.XTclFreeObj(tls, _objPtr) 57277 } 57278 } 57279 57280 return *(*int32)(unsafe.Pointer(bp)) 57281 } 57282 57283 func superlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57284 bp := tls.Alloc(40) 57285 defer tls.Free(40) 57286 57287 var zPath uintptr 57288 var zVfs uintptr = uintptr(0) 57289 *(*InterpAndScript)(unsafe.Pointer(bp + 16)) = InterpAndScript{} 57290 var xBusy uintptr = uintptr(0) 57291 var rc int32 57292 57293 if objc < 3 || objc > 5 { 57294 tcl.XTcl_WrongNumArgs(tls, 57295 interp, 1, objv, ts+36970) 57296 return TCL_ERROR 57297 } 57298 57299 zPath = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 57300 57301 if objc > 3 { 57302 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 57303 if libc.Xstrlen(tls, zVfs) == uint64(0) { 57304 zVfs = uintptr(0) 57305 } 57306 } 57307 if objc > 4 { 57308 (*InterpAndScript)(unsafe.Pointer(bp + 16)).Finterp = interp 57309 (*InterpAndScript)(unsafe.Pointer(bp + 16)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 57310 xBusy = *(*uintptr)(unsafe.Pointer(&struct { 57311 f func(*libc.TLS, uintptr, int32) int32 57312 }{superlock_busy})) 57313 } 57314 57315 rc = sqlite3demo_superlock(tls, zPath, zVfs, xBusy, bp+16, bp+32) 57316 57317 if rc != SQLITE_OK { 57318 tcl.XTcl_ResetResult(tls, interp) 57319 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 57320 return TCL_ERROR 57321 } 57322 57323 tcl.XTcl_CreateObjCommand(tls, 57324 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 57325 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57326 }{superunlock_cmd})), *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{superunlock_del}))) 57327 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 57328 return TCL_OK 57329 } 57330 57331 func SqliteSuperlock_Init(tls *libc.TLS, interp uintptr) int32 { 57332 tcl.XTcl_CreateObjCommand(tls, interp, ts+37011, *(*uintptr)(unsafe.Pointer(&struct { 57333 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57334 }{superlock_cmd})), uintptr(0), uintptr(0)) 57335 return TCL_OK 57336 } 57337 57338 type error_t = int32 57339 57340 type TestSyscallGlobal = struct { 57341 FbPersist int32 57342 FnCount int32 57343 FnFail int32 57344 Fpgsz int32 57345 Forig_getpagesize sqlite3_syscall_ptr 57346 } 57347 57348 var gSyscall = TestSyscallGlobal{} 57349 57350 type TestSyscallArray = struct { 57351 FzName uintptr 57352 FxTest sqlite3_syscall_ptr 57353 FxOrig sqlite3_syscall_ptr 57354 Fdefault_errno int32 57355 Fcustom_errno int32 57356 } 57357 57358 var aSyscall = [19]TestSyscallArray{ 57359 {FzName: ts + 37033, FxTest: 0, Fdefault_errno: EACCES}, 57360 {FzName: ts + 9490, FxTest: 0}, 57361 {FzName: ts + 37038, FxTest: 0}, 57362 {FzName: ts + 37045, FxTest: 0}, 57363 {FzName: ts + 37052, FxTest: 0}, 57364 {FzName: ts + 37057, FxTest: 0}, 57365 {FzName: ts + 37063, FxTest: 0, Fdefault_errno: EIO}, 57366 {FzName: ts + 37073, FxTest: 0, Fdefault_errno: EACCES}, 57367 {FzName: ts + 25126, FxTest: 0}, 57368 {FzName: ts + 37079, FxTest: 0}, 57369 {FzName: ts + 37085, FxTest: 0}, 57370 {FzName: ts + 25131, FxTest: 0}, 57371 {FzName: ts + 37093, FxTest: 0}, 57372 {FzName: ts + 37100, FxTest: 0}, 57373 {FzName: ts + 37109, FxTest: 0}, 57374 {FzName: ts + 37116, FxTest: 0}, 57375 {FzName: ts + 29040, FxTest: 0}, 57376 {FzName: ts + 37126, FxTest: 0}, 57377 {}, 57378 } 57379 57380 func tsIsFail(tls *libc.TLS) int32 { 57381 gSyscall.FnCount-- 57382 if gSyscall.FnCount == 0 || gSyscall.FnFail != 0 && gSyscall.FbPersist != 0 { 57383 gSyscall.FnFail++ 57384 return 1 57385 } 57386 return 0 57387 } 57388 57389 func tsErrno(tls *libc.TLS, zFunc uintptr) int32 { 57390 var i int32 57391 var nFunc int32 = int32(libc.Xstrlen(tls, zFunc)) 57392 for i = 0; aSyscall[i].FzName != 0; i++ { 57393 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(nFunc) { 57394 continue 57395 } 57396 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(nFunc)) != 0 { 57397 continue 57398 } 57399 return aSyscall[i].Fcustom_errno 57400 } 57401 57402 return 0 57403 } 57404 57405 func tsIsFailErrno(tls *libc.TLS, zFunc uintptr) int32 { 57406 if tsIsFail(tls) != 0 { 57407 *(*int32)(unsafe.Pointer(libc.X__errno_location(tls))) = tsErrno(tls, zFunc) 57408 return 1 57409 } 57410 return 0 57411 } 57412 57413 func ts_open(tls *libc.TLS, zFile uintptr, flags int32, mode int32) int32 { 57414 if tsIsFailErrno(tls, ts+37033) != 0 { 57415 return -1 57416 } 57417 return (*(*func(*libc.TLS, uintptr, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16)))(tls, zFile, flags, mode) 57418 } 57419 57420 func ts_close(tls *libc.TLS, fd int32) int32 { 57421 if tsIsFail(tls) != 0 { 57422 (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 57423 return -1 57424 } 57425 return (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 57426 } 57427 57428 func ts_access(tls *libc.TLS, zPath uintptr, mode int32) int32 { 57429 if tsIsFail(tls) != 0 { 57430 return -1 57431 } 57432 return (*(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 2*32 + 16)))(tls, zPath, mode) 57433 } 57434 57435 func ts_getcwd(tls *libc.TLS, zPath uintptr, nPath size_t) uintptr { 57436 if tsIsFail(tls) != 0 { 57437 return uintptr(0) 57438 } 57439 return (*(*func(*libc.TLS, uintptr, size_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 3*32 + 16)))(tls, zPath, nPath) 57440 } 57441 57442 func ts_stat(tls *libc.TLS, zPath uintptr, p uintptr) int32 { 57443 if tsIsFail(tls) != 0 { 57444 return -1 57445 } 57446 return (*(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 4*32 + 16)))(tls, zPath, p) 57447 } 57448 57449 func ts_fstat(tls *libc.TLS, fd int32, p uintptr) int32 { 57450 if tsIsFailErrno(tls, ts+37057) != 0 { 57451 return -1 57452 } 57453 return (*(*func(*libc.TLS, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 5*32 + 16)))(tls, fd, p) 57454 } 57455 57456 func ts_ftruncate(tls *libc.TLS, fd int32, n off_t) int32 { 57457 if tsIsFailErrno(tls, ts+37063) != 0 { 57458 return -1 57459 } 57460 return (*(*func(*libc.TLS, int32, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 6*32 + 16)))(tls, fd, n) 57461 } 57462 57463 func ts_fcntl(tls *libc.TLS, fd int32, cmd int32, va uintptr) int32 { 57464 bp := tls.Alloc(8) 57465 defer tls.Free(8) 57466 57467 var ap va_list 57468 _ = ap 57469 var pArg uintptr 57470 if tsIsFailErrno(tls, ts+37073) != 0 { 57471 return -1 57472 } 57473 ap = va 57474 pArg = libc.VaUintptr(&ap) 57475 return (*(*func(*libc.TLS, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 7*32 + 16)))(tls, fd, cmd, libc.VaList(bp, pArg)) 57476 } 57477 57478 func ts_read(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 57479 if tsIsFailErrno(tls, ts+25126) != 0 { 57480 return -1 57481 } 57482 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8*32 + 16)))(tls, fd, aBuf, nBuf)) 57483 } 57484 57485 func ts_pread(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 57486 if tsIsFailErrno(tls, ts+37079) != 0 { 57487 return -1 57488 } 57489 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)) 57490 } 57491 57492 func ts_pread64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 57493 if tsIsFailErrno(tls, ts+37085) != 0 { 57494 return -1 57495 } 57496 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)) 57497 } 57498 57499 func ts_write(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 57500 if tsIsFailErrno(tls, ts+25131) != 0 { 57501 if tsErrno(tls, ts+25131) == EINTR { 57502 (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf/uint64(2)) 57503 } 57504 return -1 57505 } 57506 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf)) 57507 } 57508 57509 func ts_pwrite(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 57510 if tsIsFailErrno(tls, ts+37093) != 0 { 57511 return -1 57512 } 57513 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)) 57514 } 57515 57516 func ts_pwrite64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 57517 if tsIsFailErrno(tls, ts+37100) != 0 { 57518 return -1 57519 } 57520 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)) 57521 } 57522 57523 func ts_fchmod(tls *libc.TLS, fd int32, mode mode_t) int32 { 57524 if tsIsFail(tls) != 0 { 57525 return -1 57526 } 57527 return (*(*func(*libc.TLS, int32, mode_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 14*32 + 16)))(tls, fd, mode) 57528 } 57529 57530 func ts_fallocate(tls *libc.TLS, fd int32, off off_t, len off_t) int32 { 57531 if tsIsFail(tls) != 0 { 57532 return tsErrno(tls, ts+37116) 57533 } 57534 return (*(*func(*libc.TLS, int32, off_t, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 15*32 + 16)))(tls, fd, off, len) 57535 } 57536 57537 func ts_mmap(tls *libc.TLS, pAddr uintptr, nByte size_t, prot int32, flags int32, fd int32, iOff off_t) uintptr { 57538 if tsIsFailErrno(tls, ts+29040) != 0 { 57539 return libc.UintptrFromInt32(-1) 57540 } 57541 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) 57542 } 57543 57544 func ts_mremap(tls *libc.TLS, a uintptr, b size_t, c size_t, d int32, va uintptr) uintptr { 57545 bp := tls.Alloc(8) 57546 defer tls.Free(8) 57547 57548 var ap va_list 57549 _ = ap 57550 var pArg uintptr 57551 if tsIsFailErrno(tls, ts+37126) != 0 { 57552 return libc.UintptrFromInt32(-1) 57553 } 57554 ap = va 57555 pArg = libc.VaUintptr(&ap) 57556 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)) 57557 } 57558 57559 func test_syscall_install(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57560 bp := tls.Alloc(20) 57561 defer tls.Free(20) 57562 57563 var pVfs uintptr 57564 57565 var i int32 57566 57567 if objc != 3 { 57568 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37133) 57569 return TCL_ERROR 57570 } 57571 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp, bp+8) != 0 { 57572 return TCL_ERROR 57573 } 57574 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57575 57576 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 57577 var rc int32 = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57578 *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp+16) 57579 if rc != 0 { 57580 return rc 57581 } 57582 if aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig == uintptr(0) { 57583 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig = (*struct { 57584 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57585 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FzName) 57586 (*struct { 57587 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57588 })(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) 57589 } 57590 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fcustom_errno = aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fdefault_errno 57591 } 57592 57593 return TCL_OK 57594 } 57595 57596 func test_syscall_uninstall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57597 var pVfs uintptr 57598 var i int32 57599 57600 if objc != 2 { 57601 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57602 return TCL_ERROR 57603 } 57604 57605 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57606 for i = 0; aSyscall[i].FzName != 0; i++ { 57607 if aSyscall[i].FxOrig != 0 { 57608 (*struct { 57609 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57610 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[i].FzName, uintptr(0)) 57611 aSyscall[i].FxOrig = uintptr(0) 57612 } 57613 } 57614 return TCL_OK 57615 } 57616 57617 func test_syscall_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57618 bp := tls.Alloc(4) 57619 defer tls.Free(4) 57620 57621 var pVfs uintptr 57622 var i int32 57623 var rc int32 57624 57625 if objc != 2 && objc != 3 { 57626 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57627 return TCL_ERROR 57628 } 57629 57630 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57631 if objc == 2 { 57632 rc = (*struct { 57633 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57634 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, uintptr(0), uintptr(0)) 57635 for i = 0; aSyscall[i].FzName != 0; i++ { 57636 aSyscall[i].FxOrig = uintptr(0) 57637 } 57638 } else { 57639 var zFunc uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) 57640 rc = (*struct { 57641 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57642 })(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)) 57643 for i = 0; rc == SQLITE_OK && aSyscall[i].FzName != 0; i++ { 57644 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(*(*int32)(unsafe.Pointer(bp))) { 57645 continue 57646 } 57647 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(*(*int32)(unsafe.Pointer(bp)))) != 0 { 57648 continue 57649 } 57650 aSyscall[i].FxOrig = uintptr(0) 57651 } 57652 } 57653 if rc != SQLITE_OK { 57654 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 57655 return TCL_ERROR 57656 } 57657 57658 tcl.XTcl_ResetResult(tls, interp) 57659 return TCL_OK 57660 } 57661 57662 func test_syscall_exists(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57663 var pVfs uintptr 57664 var x sqlite3_syscall_ptr 57665 57666 if objc != 3 { 57667 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57668 return TCL_ERROR 57669 } 57670 57671 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57672 x = (*struct { 57673 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57674 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 57675 57676 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, libc.Bool32(libc.Bool32(x != uintptr(0)) != 0))) 57677 return TCL_OK 57678 } 57679 57680 func test_syscall_fault(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57681 bp := tls.Alloc(8) 57682 defer tls.Free(8) 57683 57684 *(*int32)(unsafe.Pointer(bp)) = 0 57685 *(*int32)(unsafe.Pointer(bp + 4)) = 0 57686 57687 if objc != 2 && objc != 4 { 57688 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37158) 57689 return TCL_ERROR 57690 } 57691 57692 if objc == 4 { 57693 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 || 57694 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 57695 return TCL_ERROR 57696 } 57697 } 57698 57699 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, gSyscall.FnFail)) 57700 gSyscall.FnCount = *(*int32)(unsafe.Pointer(bp)) 57701 gSyscall.FbPersist = *(*int32)(unsafe.Pointer(bp + 4)) 57702 gSyscall.FnFail = 0 57703 return TCL_OK 57704 } 57705 57706 func test_syscall_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57707 bp := tls.Alloc(204) 57708 defer tls.Free(204) 57709 57710 var rc int32 57711 57712 *(*[12]Errno)(unsafe.Pointer(bp + 8)) = [12]Errno{ 57713 {Fz: ts + 37174, Fi: EACCES}, 57714 {Fz: ts + 37181, Fi: EINTR}, 57715 {Fz: ts + 37187, Fi: EIO}, 57716 {Fz: ts + 37191, Fi: EOVERFLOW}, 57717 {Fz: ts + 37201, Fi: ENOMEM}, 57718 {Fz: ts + 37208, Fi: EAGAIN}, 57719 {Fz: ts + 37215, Fi: ETIMEDOUT}, 57720 {Fz: ts + 37225, Fi: EBUSY}, 57721 {Fz: ts + 37231, Fi: EPERM}, 57722 {Fz: ts + 37237, Fi: EDEADLK}, 57723 {Fz: ts + 37245, Fi: ENOLCK}, 57724 {}, 57725 } 57726 57727 if objc != 4 { 57728 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37252) 57729 return TCL_ERROR 57730 } 57731 57732 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57733 *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37146, 0, bp) 57734 if rc != TCL_OK { 57735 return rc 57736 } 57737 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57738 *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(Errno{})), ts+37266, 0, bp+200) 57739 if rc != TCL_OK { 57740 return rc 57741 } 57742 57743 aSyscall[*(*int32)(unsafe.Pointer(bp))].Fcustom_errno = (*Errno)(unsafe.Pointer(bp + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 200)))*16)).Fi 57744 return TCL_OK 57745 } 57746 57747 type Errno = struct { 57748 Fz uintptr 57749 Fi int32 57750 F__ccgo_pad1 [4]byte 57751 } 57752 57753 func test_syscall_list(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57754 var zSys uintptr 57755 var pVfs uintptr 57756 var pList uintptr 57757 57758 if objc != 2 { 57759 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57760 return TCL_ERROR 57761 } 57762 57763 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57764 pList = tcl.XTcl_NewObj(tls) 57765 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 57766 for zSys = (*struct { 57767 f func(*libc.TLS, uintptr, uintptr) uintptr 57768 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, uintptr(0)); zSys != uintptr(0); zSys = (*struct { 57769 f func(*libc.TLS, uintptr, uintptr) uintptr 57770 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, zSys) { 57771 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, zSys, -1)) 57772 } 57773 57774 tcl.XTcl_SetObjResult(tls, interp, pList) 57775 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57776 var _objPtr uintptr = pList 57777 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 57778 tcl.XTclFreeObj(tls, _objPtr) 57779 } 57780 } 57781 return TCL_OK 57782 } 57783 57784 func test_syscall_defaultvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57785 var pVfs uintptr 57786 57787 if objc != 2 { 57788 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 57789 return TCL_ERROR 57790 } 57791 57792 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57793 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 57794 return TCL_OK 57795 } 57796 57797 func ts_getpagesize(tls *libc.TLS) int32 { 57798 return gSyscall.Fpgsz 57799 } 57800 57801 func test_syscall_pagesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57802 bp := tls.Alloc(20) 57803 defer tls.Free(20) 57804 57805 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57806 57807 if objc != 3 { 57808 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37272) 57809 return TCL_ERROR 57810 } 57811 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 57812 return TCL_ERROR 57813 } 57814 57815 if *(*int32)(unsafe.Pointer(bp + 16)) < 0 { 57816 if gSyscall.Forig_getpagesize != 0 { 57817 (*struct { 57818 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57819 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, ts+37277, gSyscall.Forig_getpagesize) 57820 } 57821 } else { 57822 if *(*int32)(unsafe.Pointer(bp + 16)) < 512 || *(*int32)(unsafe.Pointer(bp + 16))&(*(*int32)(unsafe.Pointer(bp + 16))-1) != 0 { 57823 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37289, 0)) 57824 return TCL_ERROR 57825 } 57826 gSyscall.Forig_getpagesize = (*struct { 57827 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 57828 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, ts+37277) 57829 gSyscall.Fpgsz = *(*int32)(unsafe.Pointer(bp + 16)) 57830 (*struct { 57831 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 57832 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, 57833 pVfs, ts+37277, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{ts_getpagesize}))) 57834 } 57835 57836 return TCL_OK 57837 } 57838 57839 func test_syscall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57840 bp := tls.Alloc(180) 57841 defer tls.Free(180) 57842 57843 *(*[10]SyscallCmd)(unsafe.Pointer(bp + 16)) = [10]SyscallCmd{ 57844 {FzName: ts + 37307, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57845 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57846 }{test_syscall_fault}))}, 57847 {FzName: ts + 37313, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57848 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57849 }{test_syscall_install}))}, 57850 {FzName: ts + 37321, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57851 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57852 }{test_syscall_uninstall}))}, 57853 {FzName: ts + 7933, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57854 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57855 }{test_syscall_reset}))}, 57856 {FzName: ts + 37266, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57857 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57858 }{test_syscall_errno}))}, 57859 {FzName: ts + 13516, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57860 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57861 }{test_syscall_exists}))}, 57862 {FzName: ts + 37331, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57863 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57864 }{test_syscall_list}))}, 57865 {FzName: ts + 37336, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57866 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57867 }{test_syscall_defaultvfs}))}, 57868 {FzName: ts + 37347, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57869 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57870 }{test_syscall_pagesize}))}, 57871 {}, 57872 } 57873 57874 var rc int32 57875 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 57876 57877 if objc < 2 { 57878 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32982) 57879 return TCL_ERROR 57880 } 57881 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion < 3 || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall == uintptr(0) { 57882 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37356, 0)) 57883 rc = TCL_ERROR 57884 } else { 57885 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 57886 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, int32(unsafe.Sizeof(SyscallCmd{})), ts+2014, 0, bp+176) 57887 } 57888 if rc != TCL_OK { 57889 return rc 57890 } 57891 return (*struct { 57892 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57893 })(unsafe.Pointer(&struct{ uintptr }{(*SyscallCmd)(unsafe.Pointer(bp + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*16)).FxCmd})).f(tls, clientData, interp, objc, objv) 57894 } 57895 57896 type SyscallCmd = struct { 57897 FzName uintptr 57898 FxCmd uintptr 57899 } 57900 57901 func SqlitetestSyscall_Init(tls *libc.TLS, interp uintptr) int32 { 57902 bp := tls.Alloc(16) 57903 defer tls.Free(16) 57904 57905 *(*[1]SyscallCmd)(unsafe.Pointer(bp)) = [1]SyscallCmd{ 57906 {FzName: ts + 37392, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 57907 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57908 }{test_syscall}))}, 57909 } 57910 var i int32 57911 57912 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]SyscallCmd{}))/uint64(unsafe.Sizeof(SyscallCmd{})); i++ { 57913 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)) 57914 } 57915 return TCL_OK 57916 } 57917 57918 func sqlite3TestInit(tls *libc.TLS, interp uintptr) uintptr { 57919 bp := tls.Alloc(80) 57920 defer tls.Free(80) 57921 57922 { 57923 libc.Xgetrlimit(tls, RLIMIT_CORE, bp) 57924 (*rlimit)(unsafe.Pointer(bp)).Frlim_cur = (*rlimit)(unsafe.Pointer(bp)).Frlim_max 57925 libc.Xsetrlimit(tls, RLIMIT_CORE, bp) 57926 57927 } 57928 57929 if tcl.XTcl_GetCommandInfo(tls, interp, ts+14267, bp+16) == 0 { 57930 Sqlite3_Init(tls, interp) 57931 } 57932 Md5_Init(tls, interp) 57933 Sqliteconfig_Init(tls, interp) 57934 Sqlitetest1_Init(tls, interp) 57935 Sqlitetest2_Init(tls, interp) 57936 Sqlitetest3_Init(tls, interp) 57937 Sqlitetest4_Init(tls, interp) 57938 Sqlitetest5_Init(tls, interp) 57939 Sqlitetest6_Init(tls, interp) 57940 Sqlitetest7_Init(tls, interp) 57941 Sqlitetest8_Init(tls, interp) 57942 Sqlitetest9_Init(tls, interp) 57943 Sqlitetestasync_Init(tls, interp) 57944 Sqlitetest_autoext_Init(tls, interp) 57945 Sqlitetest_blob_Init(tls, interp) 57946 Sqlitetest_demovfs_Init(tls, interp) 57947 Sqlitetest_func_Init(tls, interp) 57948 Sqlitetest_hexio_Init(tls, interp) 57949 Sqlitetest_init_Init(tls, interp) 57950 Sqlitetest_malloc_Init(tls, interp) 57951 Sqlitetest_mutex_Init(tls, interp) 57952 Sqlitetestschema_Init(tls, interp) 57953 Sqlitetesttclvar_Init(tls, interp) 57954 Sqlitetestfs_Init(tls, interp) 57955 SqlitetestThread_Init(tls, interp) 57956 SqlitetestOnefile_Init(tls) 57957 SqlitetestOsinst_Init(tls, interp) 57958 Sqlitetestbackup_Init(tls, interp) 57959 Sqlitetestintarray_Init(tls, interp) 57960 Sqlitetestvfs_Init(tls, interp) 57961 Sqlitetestrtree_Init(tls, interp) 57962 Sqlitetestrtreedoc_Init(tls, interp) 57963 Sqlitequota_Init(tls, interp) 57964 Sqlitemultiplex_Init(tls, interp) 57965 SqliteSuperlock_Init(tls, interp) 57966 SqlitetestSyscall_Init(tls, interp) 57967 TestSession_Init(tls, interp) 57968 Fts5tcl_Init(tls, interp) 57969 SqliteRbu_Init(tls, interp) 57970 Sqlitetesttcl_Init(tls, interp) 57971 57972 TestExpert_Init(tls, interp) 57973 Sqlitetest_window_Init(tls, interp) 57974 Sqlitetestvdbecov_Init(tls, interp) 57975 57976 tcl.XTcl_CreateObjCommand(tls, 57977 interp, ts+37405, *(*uintptr)(unsafe.Pointer(&struct { 57978 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 57979 }{load_testfixture_extensions})), uintptr(0), uintptr(0)) 57980 return uintptr(0) 57981 } 57982 57983 func load_testfixture_extensions(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 57984 var slave uintptr 57985 if objc != 2 { 57986 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+37433) 57987 return TCL_ERROR 57988 } 57989 57990 slave = tcl.XTcl_GetSlave(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 57991 if !(slave != 0) { 57992 return TCL_ERROR 57993 } 57994 57995 sqlite3TestInit(tls, slave) 57996 return TCL_OK 57997 } 57998 57999 type tclvar_vtab1 = struct { 58000 Fbase sqlite3_vtab 58001 Finterp uintptr 58002 } 58003 58004 type tclvar_vtab = tclvar_vtab1 58005 type tclvar_cursor1 = struct { 58006 Fbase sqlite3_vtab_cursor 58007 FpList1 uintptr 58008 FpList2 uintptr 58009 Fi1 int32 58010 Fi2 int32 58011 } 58012 58013 type tclvar_cursor = tclvar_cursor1 58014 58015 func tclvarConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 58016 var pVtab uintptr 58017 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_vtab{}))) 58018 if pVtab == uintptr(0) { 58019 return SQLITE_NOMEM 58020 } 58021 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 58022 (*tclvar_vtab)(unsafe.Pointer(pVtab)).Finterp = pAux 58023 sqlite3.Xsqlite3_declare_vtab(tls, db, uintptr(unsafe.Pointer(&zSchema))) 58024 return SQLITE_OK 58025 } 58026 58027 var zSchema = *(*[100]uint8)(unsafe.Pointer(ts + 37439)) 58028 58029 func tclvarDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 58030 sqlite3.Xsqlite3_free(tls, pVtab) 58031 return SQLITE_OK 58032 } 58033 58034 func tclvarOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 58035 var pCur uintptr 58036 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_cursor{}))) 58037 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 58038 return SQLITE_OK 58039 } 58040 58041 func tclvarClose(tls *libc.TLS, cur uintptr) int32 { 58042 var pCur uintptr = cur 58043 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 58044 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58045 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 58046 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58047 tcl.XTclFreeObj(tls, _objPtr) 58048 } 58049 } 58050 } 58051 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 58052 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 58053 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 58054 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58055 tcl.XTclFreeObj(tls, _objPtr) 58056 } 58057 } 58058 } 58059 sqlite3.Xsqlite3_free(tls, pCur) 58060 return SQLITE_OK 58061 } 58062 58063 func next2(tls *libc.TLS, interp uintptr, pCur uintptr, pObj uintptr) int32 { 58064 bp := tls.Alloc(4) 58065 defer tls.Free(4) 58066 58067 var p uintptr 58068 58069 if pObj != 0 { 58070 if !(int32((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) != 0) { 58071 p = tcl.XTcl_NewStringObj(tls, ts+37539, -1) 58072 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 58073 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, pObj) 58074 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 58075 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58076 var _objPtr uintptr = p 58077 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58078 tcl.XTclFreeObj(tls, _objPtr) 58079 } 58080 } 58081 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = tcl.XTcl_GetObjResult(tls, interp) 58082 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount++ 58083 58084 } else { 58085 *(*int32)(unsafe.Pointer(bp)) = 0 58086 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2++ 58087 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, bp) 58088 if (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 >= *(*int32)(unsafe.Pointer(bp)) { 58089 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 58090 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 58091 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58092 tcl.XTclFreeObj(tls, _objPtr) 58093 } 58094 } 58095 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 58096 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 58097 return 0 58098 } 58099 } 58100 } 58101 58102 return 1 58103 } 58104 58105 func tclvarNext(tls *libc.TLS, cur uintptr) int32 { 58106 bp := tls.Alloc(16) 58107 defer tls.Free(16) 58108 58109 *(*int32)(unsafe.Pointer(bp)) = 0 58110 var ok int32 = 0 58111 58112 var pCur uintptr = cur 58113 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 58114 58115 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, bp) 58116 for !(ok != 0) && (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 < *(*int32)(unsafe.Pointer(bp)) { 58117 tcl.XTcl_ListObjIndex(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+8) 58118 ok = next2(tls, interp, pCur, *(*uintptr)(unsafe.Pointer(bp + 8))) 58119 if !(ok != 0) { 58120 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1++ 58121 } 58122 } 58123 58124 return 0 58125 } 58126 58127 func tclvarFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 58128 var pCur uintptr = pVtabCursor 58129 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).Finterp 58130 var p uintptr = tcl.XTcl_NewStringObj(tls, ts+37551, -1) 58131 58132 var zEq uintptr = ts + 584 58133 var zMatch uintptr = ts + 584 58134 var zGlob uintptr = ts + 584 58135 var zRegexp uintptr = ts + 584 58136 var zLike uintptr = ts + 584 58137 var i int32 58138 58139 for i = 0; *(*uint8)(unsafe.Pointer(idxStr + uintptr(i))) != 0; i++ { 58140 switch int32(*(*uint8)(unsafe.Pointer(idxStr + uintptr(i)))) { 58141 case 'e': 58142 zEq = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 58143 break 58144 case 'm': 58145 zMatch = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 58146 break 58147 case 'g': 58148 zGlob = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 58149 break 58150 case 'r': 58151 zRegexp = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 58152 break 58153 case 'l': 58154 zLike = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 58155 break 58156 default: 58157 } 58158 } 58159 58160 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 58161 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zEq, -1)) 58162 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zMatch, -1)) 58163 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zGlob, -1)) 58164 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zRegexp, -1)) 58165 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zLike, -1)) 58166 58167 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 58168 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 58169 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58170 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 58171 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58172 tcl.XTclFreeObj(tls, _objPtr) 58173 } 58174 } 58175 } 58176 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 58177 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 58178 var _objPtr uintptr = (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 58179 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58180 tcl.XTclFreeObj(tls, _objPtr) 58181 } 58182 } 58183 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 58184 } 58185 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 = 0 58186 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 58187 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 = tcl.XTcl_GetObjResult(tls, interp) 58188 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount++ 58189 58190 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 58191 var _objPtr uintptr = p 58192 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58193 tcl.XTclFreeObj(tls, _objPtr) 58194 } 58195 } 58196 return tclvarNext(tls, pVtabCursor) 58197 } 58198 58199 func tclvarColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 58200 bp := tls.Alloc(32) 58201 defer tls.Free(32) 58202 58203 var z1 uintptr 58204 var z2 uintptr = ts + 584 58205 var pCur uintptr = cur 58206 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 58207 58208 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+16) 58209 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2, bp+24) 58210 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 58211 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 58212 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 58213 } 58214 switch i { 58215 case 0: 58216 { 58217 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 58218 break 58219 58220 } 58221 case 1: 58222 { 58223 sqlite3.Xsqlite3_result_text(tls, ctx, z2, -1, libc.UintptrFromInt32(-1)) 58224 break 58225 58226 } 58227 case 2: 58228 { 58229 var pVal uintptr = tcl.XTcl_GetVar2Ex(tls, interp, z1, func() uintptr { 58230 if *(*uint8)(unsafe.Pointer(z2)) != 0 { 58231 return z2 58232 } 58233 return uintptr(0) 58234 }(), TCL_GLOBAL_ONLY) 58235 sqlite3.Xsqlite3_result_text(tls, ctx, tcl.XTcl_GetString(tls, pVal), -1, libc.UintptrFromInt32(-1)) 58236 break 58237 58238 } 58239 case 3: 58240 { 58241 var z3 uintptr 58242 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 58243 z3 = sqlite3.Xsqlite3_mprintf(tls, ts+37569, libc.VaList(bp, z1, z2)) 58244 sqlite3.Xsqlite3_result_text(tls, ctx, z3, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 58245 } else { 58246 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 58247 } 58248 break 58249 58250 } 58251 } 58252 return SQLITE_OK 58253 } 58254 58255 func tclvarRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 58256 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 58257 return SQLITE_OK 58258 } 58259 58260 func tclvarEof(tls *libc.TLS, cur uintptr) int32 { 58261 var pCur uintptr = cur 58262 return func() int32 { 58263 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 58264 return 0 58265 } 58266 return 1 58267 }() 58268 } 58269 58270 func tclvarAddToIdxstr(tls *libc.TLS, zStr uintptr, x uint8) int32 { 58271 var i int32 58272 for i = 0; *(*uint8)(unsafe.Pointer(zStr + uintptr(i))) != 0; i++ { 58273 if int32(*(*uint8)(unsafe.Pointer(zStr + uintptr(i)))) == int32(x) { 58274 return 1 58275 } 58276 } 58277 *(*uint8)(unsafe.Pointer(zStr + uintptr(i))) = x 58278 *(*uint8)(unsafe.Pointer(zStr + uintptr(i+1))) = uint8(0) 58279 return 0 58280 } 58281 58282 func tclvarSetOmit(tls *libc.TLS, interp uintptr) int32 { 58283 bp := tls.Alloc(4) 58284 defer tls.Free(4) 58285 58286 var rc int32 58287 *(*int32)(unsafe.Pointer(bp)) = 0 58288 var pRes uintptr 58289 rc = tcl.XTcl_Eval(tls, interp, 58290 ts+37576) 58291 if rc == TCL_OK { 58292 pRes = tcl.XTcl_GetObjResult(tls, interp) 58293 rc = tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), pRes, bp) 58294 } 58295 return libc.Bool32(rc == TCL_OK && *(*int32)(unsafe.Pointer(bp)) != 0) 58296 } 58297 58298 func tclvarBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 58299 var pTab uintptr = tab 58300 var ii int32 58301 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, 32) 58302 var iStr int32 = 0 58303 58304 if zStr == uintptr(0) { 58305 return SQLITE_NOMEM 58306 } 58307 *(*uint8)(unsafe.Pointer(zStr)) = uint8(0) 58308 58309 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 58310 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 58311 var pUsage uintptr 58312 58313 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 58314 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 { 58315 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 58316 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('e')) { 58317 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58318 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 58319 } 58320 } 58321 58322 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 58323 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('m')) { 58324 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58325 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 58326 } 58327 } 58328 58329 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_GLOB && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 58330 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('g')) { 58331 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58332 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 58333 } 58334 } 58335 58336 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_REGEXP && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 58337 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('r')) { 58338 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58339 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 58340 } 58341 } 58342 58343 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 58344 if 0 == tclvarAddToIdxstr(tls, zStr, uint8('l')) { 58345 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 58346 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 58347 } 58348 } 58349 } 58350 } 58351 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = zStr 58352 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 58353 58354 return SQLITE_OK 58355 } 58356 58357 func tclvarUpdate(tls *libc.TLS, tab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 58358 var pTab uintptr = tab 58359 if argc == 1 { 58360 var zVar uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 58361 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zVar, uintptr(0), TCL_GLOBAL_ONLY) 58362 return SQLITE_OK 58363 } 58364 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 58365 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 58366 var zName uintptr 58367 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) != SQLITE_TEXT { 58368 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37637, 0) 58369 return SQLITE_ERROR 58370 } 58371 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 58372 if zValue != 0 { 58373 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 58374 } else { 58375 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, uintptr(0), TCL_GLOBAL_ONLY) 58376 } 58377 return SQLITE_OK 58378 } 58379 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_TEXT && 58380 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_TEXT { 58381 var zOldName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 58382 var zNewName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 58383 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 58384 58385 if libc.Xstrcmp(tls, zOldName, zNewName) != 0 || zValue == uintptr(0) { 58386 tcl.XTcl_UnsetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zOldName, uintptr(0), TCL_GLOBAL_ONLY) 58387 } 58388 if zValue != uintptr(0) { 58389 tcl.XTcl_SetVar2(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zNewName, uintptr(0), zValue, TCL_GLOBAL_ONLY) 58390 } 58391 return SQLITE_OK 58392 } 58393 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37672, 0) 58394 return SQLITE_ERROR 58395 } 58396 58397 var tclvarModule = sqlite3_module{ 58398 FxCreate: 0, 58399 FxConnect: 0, 58400 FxBestIndex: 0, 58401 FxDisconnect: 0, 58402 FxDestroy: 0, 58403 FxOpen: 0, 58404 FxClose: 0, 58405 FxFilter: 0, 58406 FxNext: 0, 58407 FxEof: 0, 58408 FxColumn: 0, 58409 FxRowid: 0, 58410 FxUpdate: 0, 58411 } 58412 58413 func register_tclvar_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58414 bp := tls.Alloc(8) 58415 defer tls.Free(8) 58416 58417 var rc int32 = TCL_OK 58418 58419 if objc != 2 { 58420 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 58421 return TCL_ERROR 58422 } 58423 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 58424 return TCL_ERROR 58425 } 58426 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+29859, uintptr(unsafe.Pointer(&tclvarModule)), interp) 58427 rc = tcl.XTcl_Eval(tls, interp, 58428 ts+37703) 58429 return rc 58430 } 58431 58432 func Sqlitetesttclvar_Init(tls *libc.TLS, interp uintptr) int32 { 58433 var i int32 58434 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd13))/uint64(unsafe.Sizeof(struct { 58435 FzName uintptr 58436 FxProc uintptr 58437 FclientData uintptr 58438 }{})); i++ { 58439 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd13[i].FzName, 58440 aObjCmd13[i].FxProc, aObjCmd13[i].FclientData, uintptr(0)) 58441 } 58442 return TCL_OK 58443 } 58444 58445 var aObjCmd13 = [1]struct { 58446 FzName uintptr 58447 FxProc uintptr 58448 FclientData uintptr 58449 }{ 58450 {FzName: ts + 38239, FxProc: 0}, 58451 } 58452 58453 type SqlThread1 = struct { 58454 Fparent Tcl_ThreadId 58455 Finterp uintptr 58456 FzScript uintptr 58457 FzVarname uintptr 58458 } 58459 58460 type SqlThread = SqlThread1 58461 58462 type EvalEvent1 = struct { 58463 Fbase Tcl_Event 58464 FzScript uintptr 58465 Finterp uintptr 58466 } 58467 58468 type EvalEvent = EvalEvent1 58469 58470 func tclScriptEvent(tls *libc.TLS, evPtr uintptr, flags int32) int32 { 58471 var rc int32 58472 var p uintptr = evPtr 58473 rc = tcl.XTcl_Eval(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp, (*EvalEvent)(unsafe.Pointer(p)).FzScript) 58474 if rc != TCL_OK { 58475 tcl.XTcl_BackgroundError(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp) 58476 } 58477 _ = flags 58478 return 1 58479 } 58480 58481 func postToParent(tls *libc.TLS, p uintptr, pScript uintptr) { 58482 bp := tls.Alloc(4) 58483 defer tls.Free(4) 58484 58485 var pEvent uintptr 58486 var zMsg uintptr 58487 58488 zMsg = tcl.XTcl_GetStringFromObj(tls, pScript, bp) 58489 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp)))+uint64(1))) 58490 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 58491 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 58492 f func(*libc.TLS, uintptr, int32) int32 58493 }{tclScriptEvent})) 58494 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 58495 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp))+1)) 58496 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 58497 58498 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 58499 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 58500 } 58501 58502 func tclScriptThread(tls *libc.TLS, pSqlThread ClientData) { 58503 var interp uintptr 58504 var pRes uintptr 58505 var pList uintptr 58506 var rc int32 58507 var p uintptr = pSqlThread 58508 58509 interp = tcl.XTcl_CreateInterp(tls) 58510 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 58511 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58512 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 58513 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 58514 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58515 }{sqlthread_proc})), pSqlThread, uintptr(0)) 58516 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 58517 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58518 }{blocking_step_proc})), uintptr(0), uintptr(0)) 58519 tcl.XTcl_CreateObjCommand(tls, interp, 58520 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 58521 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58522 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 58523 tcl.XTcl_CreateObjCommand(tls, interp, 58524 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 58525 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58526 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 58527 Sqlitetest1_Init(tls, interp) 58528 Sqlitetest_mutex_Init(tls, interp) 58529 Sqlite3_Init(tls, interp) 58530 58531 rc = tcl.XTcl_Eval(tls, interp, (*SqlThread)(unsafe.Pointer(p)).FzScript) 58532 pRes = tcl.XTcl_GetObjResult(tls, interp) 58533 pList = tcl.XTcl_NewObj(tls) 58534 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 58535 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 58536 58537 if rc != TCL_OK { 58538 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+9674, -1)) 58539 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 58540 postToParent(tls, p, pList) 58541 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 58542 var _objPtr uintptr = pList 58543 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58544 tcl.XTclFreeObj(tls, _objPtr) 58545 } 58546 } 58547 pList = tcl.XTcl_NewObj(tls) 58548 } 58549 58550 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+38367, -1)) 58551 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, (*SqlThread)(unsafe.Pointer(p)).FzVarname, -1)) 58552 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 58553 postToParent(tls, p, pList) 58554 58555 tcl.XTcl_Free(tls, p) 58556 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 58557 var _objPtr uintptr = pList 58558 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58559 tcl.XTclFreeObj(tls, _objPtr) 58560 } 58561 } 58562 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 58563 var _objPtr uintptr = pRes 58564 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 58565 tcl.XTclFreeObj(tls, _objPtr) 58566 } 58567 } 58568 tcl.XTcl_DeleteInterp(tls, interp) 58569 for tcl.XTcl_DoOneEvent(tls, libc.CplInt32(int32(1)<<1)|int32(1)<<1) != 0 { 58570 } 58571 tcl.XTcl_ExitThread(tls, 0) 58572 58573 } 58574 58575 func sqlthread_spawn(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58576 bp := tls.Alloc(32) 58577 defer tls.Free(32) 58578 58579 var pNew uintptr 58580 var rc int32 58581 58582 var zVarname uintptr 58583 58584 var zScript uintptr 58585 58586 var nStack int32 = 0 58587 var flags int32 = 0000 58588 58589 _ = clientData 58590 _ = objc 58591 58592 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 58593 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+20) 58594 58595 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlThread{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(*(*int32)(unsafe.Pointer(bp + 20)))+uint64(2))) 58596 (*SqlThread)(unsafe.Pointer(pNew)).FzVarname = pNew + 1*32 58597 (*SqlThread)(unsafe.Pointer(pNew)).FzScript = (*SqlThread)(unsafe.Pointer(pNew)).FzVarname + uintptr(*(*int32)(unsafe.Pointer(bp + 16))+1) 58598 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzVarname, zVarname, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 58599 libc.Xmemcpy(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 20))+1)) 58600 (*SqlThread)(unsafe.Pointer(pNew)).Fparent = tcl.XTcl_GetCurrentThread(tls) 58601 (*SqlThread)(unsafe.Pointer(pNew)).Finterp = interp 58602 58603 rc = tcl.XTcl_CreateThread(tls, bp+24, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{tclScriptThread})), pNew, nStack, flags) 58604 if rc != TCL_OK { 58605 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38371, 0)) 58606 tcl.XTcl_Free(tls, pNew) 58607 return TCL_ERROR 58608 } 58609 58610 return TCL_OK 58611 } 58612 58613 func sqlthread_parent(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58614 bp := tls.Alloc(20) 58615 defer tls.Free(20) 58616 58617 var pEvent uintptr 58618 var zMsg uintptr 58619 58620 var p uintptr = clientData 58621 58622 _ = objc 58623 58624 if p == uintptr(0) { 58625 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38399, 0)) 58626 return TCL_ERROR 58627 } 58628 58629 zMsg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 58630 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(1))) 58631 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 58632 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 58633 f func(*libc.TLS, uintptr, int32) int32 58634 }{tclScriptEvent})) 58635 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 58636 libc.Xmemcpy(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1)) 58637 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 58638 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 58639 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 58640 58641 return TCL_OK 58642 } 58643 58644 func xBusy(tls *libc.TLS, pArg uintptr, nBusy int32) int32 { 58645 _ = pArg 58646 _ = nBusy 58647 sqlite3.Xsqlite3_sleep(tls, 50) 58648 return 1 58649 } 58650 58651 func sqlthread_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58652 bp := tls.Alloc(124) 58653 defer tls.Free(124) 58654 58655 var zFilename uintptr 58656 58657 _ = clientData 58658 _ = objc 58659 58660 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58661 sqlite3.Xsqlite3_open(tls, zFilename, bp+16) 58662 Md5_Register(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), uintptr(0), uintptr(0)) 58663 sqlite3.Xsqlite3_busy_handler(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(&struct { 58664 f func(*libc.TLS, uintptr, int32) int32 58665 }{xBusy})), uintptr(0)) 58666 58667 if sqlite3TestMakePointerStr(tls, interp, bp+24, *(*uintptr)(unsafe.Pointer(bp + 16))) != 0 { 58668 return TCL_ERROR 58669 } 58670 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+24, 0)) 58671 58672 return TCL_OK 58673 } 58674 58675 func sqlthread_id(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58676 var id Tcl_ThreadId = tcl.XTcl_GetCurrentThread(tls) 58677 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(id))) 58678 _ = clientData 58679 _ = objc 58680 _ = objv 58681 return TCL_OK 58682 } 58683 58684 func sqlthread_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58685 bp := tls.Alloc(164) 58686 defer tls.Free(164) 58687 58688 *(*[5]struct { 58689 FzName uintptr 58690 FxProc uintptr 58691 FnArg int32 58692 F__ccgo_pad1 [4]byte 58693 FzUsage uintptr 58694 })(unsafe.Pointer(bp)) = [5]struct { 58695 FzName uintptr 58696 FxProc uintptr 58697 FnArg int32 58698 F__ccgo_pad1 [4]byte 58699 FzUsage uintptr 58700 }{ 58701 {FzName: ts + 38416, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58702 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58703 }{sqlthread_parent})), FnArg: 1, FzUsage: ts + 10187}, 58704 {FzName: ts + 38423, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58705 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58706 }{sqlthread_spawn})), FnArg: 2, FzUsage: ts + 38429}, 58707 {FzName: ts + 37033, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58708 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58709 }{sqlthread_open})), FnArg: 1, FzUsage: ts + 38444}, 58710 {FzName: ts + 38451, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 58711 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58712 }{sqlthread_id})), FzUsage: ts + 584}, 58713 {}, 58714 } 58715 var pSub uintptr 58716 var rc int32 58717 58718 if objc < 2 { 58719 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 58720 return TCL_ERROR 58721 } 58722 58723 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 58724 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(struct { 58725 FzName uintptr 58726 FxProc uintptr 58727 FnArg int32 58728 F__ccgo_pad1 [4]byte 58729 FzUsage uintptr 58730 }{})), ts+2014, 0, bp+160) 58731 if rc != TCL_OK { 58732 return rc 58733 } 58734 pSub = bp + uintptr(*(*int32)(unsafe.Pointer(bp + 160)))*32 58735 58736 if objc < (*struct { 58737 FzName uintptr 58738 FxProc uintptr 58739 FnArg int32 58740 F__ccgo_pad1 [4]byte 58741 FzUsage uintptr 58742 })(unsafe.Pointer(pSub)).FnArg+2 { 58743 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*struct { 58744 FzName uintptr 58745 FxProc uintptr 58746 FnArg int32 58747 F__ccgo_pad1 [4]byte 58748 FzUsage uintptr 58749 })(unsafe.Pointer(pSub)).FzUsage) 58750 return TCL_ERROR 58751 } 58752 58753 return (*struct { 58754 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58755 })(unsafe.Pointer(&struct{ uintptr }{(*struct { 58756 FzName uintptr 58757 FxProc uintptr 58758 FnArg int32 58759 F__ccgo_pad1 [4]byte 58760 FzUsage uintptr 58761 })(unsafe.Pointer(pSub)).FxProc})).f(tls, clientData, interp, objc, objv) 58762 } 58763 58764 func clock_seconds_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58765 bp := tls.Alloc(16) 58766 defer tls.Free(16) 58767 58768 tcl.XTcl_GetTime(tls, bp) 58769 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32((*Tcl_Time)(unsafe.Pointer(bp)).Fsec))) 58770 _ = clientData 58771 _ = objc 58772 _ = objv 58773 return TCL_OK 58774 } 58775 58776 type UnlockNotification1 = struct { 58777 Ffired int32 58778 F__ccgo_pad1 [4]byte 58779 Fcond pthread_cond_t 58780 Fmutex pthread_mutex_t 58781 } 58782 58783 type UnlockNotification = UnlockNotification1 58784 58785 func unlock_notify_cb(tls *libc.TLS, apArg uintptr, nArg int32) { 58786 var i int32 58787 for i = 0; i < nArg; i++ { 58788 var p uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 58789 libc.Xpthread_mutex_lock(tls, p+56) 58790 (*UnlockNotification)(unsafe.Pointer(p)).Ffired = 1 58791 libc.Xpthread_cond_signal(tls, p+8) 58792 libc.Xpthread_mutex_unlock(tls, p+56) 58793 } 58794 } 58795 58796 func wait_for_unlock_notify(tls *libc.TLS, db uintptr) int32 { 58797 bp := tls.Alloc(96) 58798 defer tls.Free(96) 58799 58800 var rc int32 58801 58802 (*UnlockNotification)(unsafe.Pointer(bp)).Ffired = 0 58803 libc.Xpthread_mutex_init(tls, bp+56, uintptr(0)) 58804 libc.Xpthread_cond_init(tls, bp+8, uintptr(0)) 58805 58806 rc = sqlite3.Xsqlite3_unlock_notify(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 58807 f func(*libc.TLS, uintptr, int32) 58808 }{unlock_notify_cb})), bp) 58809 58810 if rc == SQLITE_OK { 58811 libc.Xpthread_mutex_lock(tls, bp+56) 58812 if !((*UnlockNotification)(unsafe.Pointer(bp)).Ffired != 0) { 58813 libc.Xpthread_cond_wait(tls, bp+8, bp+56) 58814 } 58815 libc.Xpthread_mutex_unlock(tls, bp+56) 58816 } 58817 58818 libc.Xpthread_cond_destroy(tls, bp+8) 58819 libc.Xpthread_mutex_destroy(tls, bp+56) 58820 58821 return rc 58822 } 58823 58824 func sqlite3_blocking_step(tls *libc.TLS, pStmt uintptr) int32 { 58825 var rc int32 58826 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt)) { 58827 rc = wait_for_unlock_notify(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt)) 58828 if rc != SQLITE_OK { 58829 break 58830 } 58831 sqlite3.Xsqlite3_reset(tls, pStmt) 58832 } 58833 return rc 58834 } 58835 58836 func sqlite3_blocking_prepare_v2(tls *libc.TLS, db uintptr, zSql uintptr, nSql int32, ppStmt uintptr, pz uintptr) int32 { 58837 var rc int32 58838 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, nSql, ppStmt, pz)) { 58839 rc = wait_for_unlock_notify(tls, db) 58840 if rc != SQLITE_OK { 58841 break 58842 } 58843 } 58844 return rc 58845 } 58846 58847 func blocking_step_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58848 var pStmt uintptr 58849 var rc int32 58850 58851 if objc != 2 { 58852 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 58853 return TCL_ERROR 58854 } 58855 58856 pStmt = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58857 rc = sqlite3_blocking_step(tls, pStmt) 58858 58859 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 58860 return TCL_OK 58861 } 58862 58863 func blocking_prepare_v2_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58864 bp := tls.Alloc(162) 58865 defer tls.Free(162) 58866 58867 var zSql uintptr 58868 58869 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 58870 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 58871 58872 var rc int32 58873 var isBlocking int32 = libc.BoolInt32(!(clientData == uintptr(0))) 58874 58875 if objc != 5 && objc != 4 { 58876 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 58877 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 58878 return TCL_ERROR 58879 } 58880 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 58881 return TCL_ERROR 58882 } 58883 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58884 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 58885 return TCL_ERROR 58886 } 58887 58888 if isBlocking != 0 { 58889 rc = sqlite3_blocking_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 58890 } else { 58891 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 58892 } 58893 58894 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 58895 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 58896 *(*int32)(unsafe.Pointer(bp + 88)) = int32(int64(*(*int32)(unsafe.Pointer(bp + 88))) - (int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 58897 } 58898 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) 58899 } 58900 if rc != SQLITE_OK { 58901 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]uint8{})), bp+112, ts+38454, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc))) 58902 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 58903 return TCL_ERROR 58904 } 58905 58906 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 58907 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 58908 return TCL_ERROR 58909 } 58910 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 58911 } 58912 return TCL_OK 58913 } 58914 58915 func SqlitetestThread_Init(tls *libc.TLS, interp uintptr) int32 { 58916 tcl.XTcl_CreateObjCommand(tls, interp, ts+38276, *(*uintptr)(unsafe.Pointer(&struct { 58917 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58918 }{sqlthread_proc})), uintptr(0), uintptr(0)) 58919 tcl.XTcl_CreateObjCommand(tls, interp, ts+38262, *(*uintptr)(unsafe.Pointer(&struct { 58920 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 58921 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 58922 tcl.XTcl_CreateObjCommand(tls, interp, ts+38286, *(*uintptr)(unsafe.Pointer(&struct { 58923 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58924 }{blocking_step_proc})), uintptr(0), uintptr(0)) 58925 tcl.XTcl_CreateObjCommand(tls, interp, 58926 ts+38308, *(*uintptr)(unsafe.Pointer(&struct { 58927 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58928 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 58929 tcl.XTcl_CreateObjCommand(tls, interp, 58930 ts+38336, *(*uintptr)(unsafe.Pointer(&struct { 58931 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58932 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 58933 return TCL_OK 58934 } 58935 58936 func Sqlitetestvdbecov_Init(tls *libc.TLS, interp uintptr) int32 { 58937 return TCL_OK 58938 } 58939 58940 type Testvfs1 = struct { 58941 FzName uintptr 58942 FpParent uintptr 58943 FpVfs uintptr 58944 Finterp uintptr 58945 FpScript uintptr 58946 FpBuffer uintptr 58947 FisNoshm int32 58948 FisFullshm int32 58949 Fmask int32 58950 Fioerr_err TestFaultInject 58951 Ffull_err TestFaultInject 58952 Fcantopen_err TestFaultInject 58953 FiDevchar int32 58954 FiSectorsize int32 58955 } 58956 58957 type Testvfs = Testvfs1 58958 type TestvfsBuffer1 = struct { 58959 FzFile uintptr 58960 Fpgsz int32 58961 F__ccgo_pad1 [4]byte 58962 FaPage [1024]uintptr 58963 FpFile uintptr 58964 FpNext uintptr 58965 } 58966 58967 type TestvfsBuffer = TestvfsBuffer1 58968 type TestvfsFile1 = struct { 58969 Fbase sqlite3_file 58970 FpFd uintptr 58971 } 58972 58973 type TestvfsFile = TestvfsFile1 58974 type TestvfsFd1 = struct { 58975 FpVfs uintptr 58976 FzFilename uintptr 58977 FpReal uintptr 58978 FpShmId uintptr 58979 FpShm uintptr 58980 Fexcllock u32 58981 Fsharedlock u32 58982 FpNext uintptr 58983 } 58984 58985 type TestvfsFd = TestvfsFd1 58986 58987 type TestFaultInject1 = struct { 58988 FiCnt int32 58989 FeFault int32 58990 FnFail int32 58991 } 58992 58993 type TestFaultInject = TestFaultInject1 58994 58995 var tvfs_io_methods = sqlite3_io_methods{ 58996 FiVersion: 3, 58997 FxClose: 0, 58998 FxRead: 0, 58999 FxWrite: 0, 59000 FxTruncate: 0, 59001 FxSync: 0, 59002 FxFileSize: 0, 59003 FxLock: 0, 59004 FxUnlock: 0, 59005 FxCheckReservedLock: 0, 59006 FxFileControl: 0, 59007 FxSectorSize: 0, 59008 FxDeviceCharacteristics: 0, 59009 FxShmMap: 0, 59010 FxShmLock: 0, 59011 FxShmBarrier: 0, 59012 FxShmUnmap: 0, 59013 FxFetch: 0, 59014 FxUnfetch: 0, 59015 } 59016 59017 func tvfsResultCode(tls *libc.TLS, p uintptr, pRc uintptr) int32 { 59018 bp := tls.Alloc(144) 59019 defer tls.Free(144) 59020 59021 *(*[9]errcode)(unsafe.Pointer(bp)) = [9]errcode{ 59022 {FzCode: ts + 2127}, 59023 {FeCode: SQLITE_ERROR, FzCode: ts + 2114}, 59024 {FeCode: SQLITE_IOERR, FzCode: ts + 38458}, 59025 {FeCode: SQLITE_LOCKED, FzCode: ts + 38471}, 59026 {FeCode: SQLITE_BUSY, FzCode: ts + 38485}, 59027 {FeCode: SQLITE_READONLY, FzCode: ts + 38497}, 59028 {FeCode: SQLITE_READONLY | int32(5)<<8, FzCode: ts + 38513}, 59029 {FeCode: SQLITE_NOTFOUND, FzCode: ts + 38538}, 59030 {FeCode: -1, FzCode: ts + 38554}, 59031 } 59032 var z uintptr 59033 var i int32 59034 59035 z = tcl.XTcl_GetStringResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59036 for i = 0; i < int32(uint64(unsafe.Sizeof([9]errcode{}))/uint64(unsafe.Sizeof(errcode{}))); i++ { 59037 if 0 == libc.Xstrcmp(tls, z, (*errcode)(unsafe.Pointer(bp+uintptr(i)*16)).FzCode) { 59038 *(*int32)(unsafe.Pointer(pRc)) = (*errcode)(unsafe.Pointer(bp + uintptr(i)*16)).FeCode 59039 return 1 59040 } 59041 } 59042 59043 return 0 59044 } 59045 59046 type errcode = struct { 59047 FeCode int32 59048 F__ccgo_pad1 [4]byte 59049 FzCode uintptr 59050 } 59051 59052 func tvfsInjectFault(tls *libc.TLS, p uintptr) int32 { 59053 var ret int32 = 0 59054 if (*TestFaultInject)(unsafe.Pointer(p)).FeFault != 0 { 59055 (*TestFaultInject)(unsafe.Pointer(p)).FiCnt-- 59056 if (*TestFaultInject)(unsafe.Pointer(p)).FiCnt == 0 || (*TestFaultInject)(unsafe.Pointer(p)).FiCnt < 0 && (*TestFaultInject)(unsafe.Pointer(p)).FeFault == FAULT_INJECT_PERSISTENT { 59057 ret = 1 59058 (*TestFaultInject)(unsafe.Pointer(p)).FnFail++ 59059 } 59060 } 59061 return ret 59062 } 59063 59064 func tvfsInjectIoerr(tls *libc.TLS, p uintptr) int32 { 59065 return tvfsInjectFault(tls, p+60) 59066 } 59067 59068 func tvfsInjectFullerr(tls *libc.TLS, p uintptr) int32 { 59069 return tvfsInjectFault(tls, p+72) 59070 } 59071 59072 func tvfsInjectCantopenerr(tls *libc.TLS, p uintptr) int32 { 59073 return tvfsInjectFault(tls, p+84) 59074 } 59075 59076 func tvfsExecTcl(tls *libc.TLS, p uintptr, zMethod uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr, arg4 uintptr) { 59077 var rc int32 59078 var pEval uintptr 59079 59080 pEval = tcl.XTcl_DuplicateObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 59081 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 59082 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zMethod, -1)) 59083 if arg1 != 0 { 59084 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg1) 59085 } 59086 if arg2 != 0 { 59087 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg2) 59088 } 59089 if arg3 != 0 { 59090 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg3) 59091 } 59092 if arg4 != 0 { 59093 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg4) 59094 } 59095 59096 rc = tcl.XTcl_EvalObjEx(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59097 if rc != TCL_OK { 59098 tcl.XTcl_BackgroundError(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59099 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59100 } 59101 } 59102 59103 func tvfsClose(tls *libc.TLS, pFile uintptr) int32 { 59104 var pTestfile uintptr = pFile 59105 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd 59106 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59107 59108 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CLOSE_MASK != 0 { 59109 tvfsExecTcl(tls, p, ts+35556, 59110 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59111 } 59112 59113 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId != 0 { 59114 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59115 var _objPtr uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId 59116 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59117 tcl.XTclFreeObj(tls, _objPtr) 59118 } 59119 } 59120 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 59121 } 59122 if (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods != 0 { 59123 tcl.XTcl_Free(tls, (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods) 59124 } 59125 sqlite3.Xsqlite3OsClose(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 59126 tcl.XTcl_Free(tls, pFd) 59127 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = uintptr(0) 59128 return SQLITE_OK 59129 } 59130 59131 func tvfsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 59132 bp := tls.Alloc(4) 59133 defer tls.Free(4) 59134 59135 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59136 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59137 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59138 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 { 59139 tvfsExecTcl(tls, p, ts+35563, 59140 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59141 tvfsResultCode(tls, p, bp) 59142 } 59143 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59144 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 59145 } 59146 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 59147 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsRead(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 59148 } 59149 return *(*int32)(unsafe.Pointer(bp)) 59150 } 59151 59152 func tvfsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 59153 bp := tls.Alloc(4) 59154 defer tls.Free(4) 59155 59156 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59157 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59158 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59159 59160 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 { 59161 tvfsExecTcl(tls, p, ts+35569, 59162 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 59163 tcl.XTcl_NewWideIntObj(tls, iOfst), tcl.XTcl_NewIntObj(tls, iAmt)) 59164 tvfsResultCode(tls, p, bp) 59165 if *(*int32)(unsafe.Pointer(bp)) < 0 { 59166 return SQLITE_OK 59167 } 59168 } 59169 59170 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 59171 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 59172 } 59173 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59174 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 59175 } 59176 59177 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 59178 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsWrite(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 59179 } 59180 return *(*int32)(unsafe.Pointer(bp)) 59181 } 59182 59183 func tvfsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 59184 bp := tls.Alloc(4) 59185 defer tls.Free(4) 59186 59187 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59188 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59189 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59190 59191 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_TRUNCATE_MASK != 0 { 59192 tvfsExecTcl(tls, p, ts+35576, 59193 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59194 tvfsResultCode(tls, p, bp) 59195 } 59196 59197 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 59198 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsTruncate(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, size) 59199 } 59200 return *(*int32)(unsafe.Pointer(bp)) 59201 } 59202 59203 func tvfsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 59204 bp := tls.Alloc(4) 59205 defer tls.Free(4) 59206 59207 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59208 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59209 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59210 59211 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SYNC_MASK != 0 { 59212 var zFlags uintptr = uintptr(0) 59213 59214 switch flags { 59215 case SQLITE_SYNC_NORMAL: 59216 zFlags = ts + 16397 59217 break 59218 fallthrough 59219 case SQLITE_SYNC_FULL: 59220 zFlags = ts + 18291 59221 break 59222 fallthrough 59223 case SQLITE_SYNC_NORMAL | SQLITE_SYNC_DATAONLY: 59224 zFlags = ts + 38566 59225 break 59226 fallthrough 59227 case SQLITE_SYNC_FULL | SQLITE_SYNC_DATAONLY: 59228 zFlags = ts + 38582 59229 break 59230 fallthrough 59231 default: 59232 } 59233 59234 tvfsExecTcl(tls, p, ts+27843, 59235 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 59236 tcl.XTcl_NewStringObj(tls, zFlags, -1), uintptr(0)) 59237 tvfsResultCode(tls, p, bp) 59238 } 59239 59240 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 59241 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 59242 } 59243 59244 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 59245 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsSync(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, flags) 59246 } 59247 59248 return *(*int32)(unsafe.Pointer(bp)) 59249 } 59250 59251 func tvfsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 59252 var p uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59253 return sqlite3.Xsqlite3OsFileSize(tls, (*TestvfsFd)(unsafe.Pointer(p)).FpReal, pSize) 59254 } 59255 59256 func tvfsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 59257 bp := tls.Alloc(38) 59258 defer tls.Free(38) 59259 59260 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59261 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59262 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_LOCK_MASK != 0 { 59263 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 59264 tvfsExecTcl(tls, p, ts+35596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 59265 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 59266 } 59267 return sqlite3.Xsqlite3OsLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 59268 } 59269 59270 func tvfsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 59271 bp := tls.Alloc(38) 59272 defer tls.Free(38) 59273 59274 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59275 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59276 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_UNLOCK_MASK != 0 { 59277 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]uint8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 59278 tvfsExecTcl(tls, p, ts+35602, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 59279 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 59280 } 59281 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59282 return SQLITE_IOERR | int32(8)<<8 59283 } 59284 return sqlite3.Xsqlite3OsUnlock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 59285 } 59286 59287 func tvfsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 59288 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59289 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59290 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CKLOCK_MASK != 0 { 59291 tvfsExecTcl(tls, p, ts+38596, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 59292 uintptr(0), uintptr(0), uintptr(0)) 59293 } 59294 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, pResOut) 59295 } 59296 59297 func tvfsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 59298 bp := tls.Alloc(68) 59299 defer tls.Free(68) 59300 59301 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59302 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59303 if op == SQLITE_FCNTL_PRAGMA { 59304 var argv uintptr = pArg 59305 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+9674) == 0 { 59306 var rc int32 = SQLITE_ERROR 59307 if *(*uintptr)(unsafe.Pointer(argv + 2*8)) != 0 { 59308 var z uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 59309 var x int32 = libc.Xatoi(tls, z) 59310 if x != 0 { 59311 rc = x 59312 for int32(sqlite3.Xsqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z))])&0x04 != 0 { 59313 z++ 59314 } 59315 for int32(sqlite3.Xsqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z))])&0x01 != 0 { 59316 z++ 59317 } 59318 } 59319 if *(*uint8)(unsafe.Pointer(z)) != 0 { 59320 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, z)) 59321 } 59322 } 59323 return rc 59324 } 59325 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4794) == 0 { 59326 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 59327 return SQLITE_OK 59328 } 59329 } 59330 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FCNTL_MASK != 0 { 59331 *(*[3]Fcntl)(unsafe.Pointer(bp + 16)) = [3]Fcntl{ 59332 {FiFnctl: SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, FzFnctl: ts + 38615}, 59333 {FiFnctl: SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, FzFnctl: ts + 38634}, 59334 {FiFnctl: SQLITE_FCNTL_ZIPVFS, FzFnctl: ts + 38654}, 59335 } 59336 var i int32 59337 for i = 0; uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})); i++ { 59338 if op == (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FiFnctl { 59339 break 59340 } 59341 } 59342 if uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})) { 59343 *(*int32)(unsafe.Pointer(bp + 64)) = 0 59344 tvfsExecTcl(tls, p, ts+35624, 59345 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 59346 tcl.XTcl_NewStringObj(tls, (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FzFnctl, -1), 59347 uintptr(0), uintptr(0)) 59348 tvfsResultCode(tls, p, bp+64) 59349 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 59350 return func() int32 { 59351 if *(*int32)(unsafe.Pointer(bp + 64)) < 0 { 59352 return SQLITE_OK 59353 } 59354 return *(*int32)(unsafe.Pointer(bp + 64)) 59355 }() 59356 } 59357 } 59358 } 59359 return sqlite3.Xsqlite3OsFileControl(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, op, pArg) 59360 } 59361 59362 type Fcntl = struct { 59363 FiFnctl int32 59364 F__ccgo_pad1 [4]byte 59365 FzFnctl uintptr 59366 } 59367 59368 func tvfsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 59369 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59370 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59371 if (*Testvfs)(unsafe.Pointer(p)).FiSectorsize >= 0 { 59372 return (*Testvfs)(unsafe.Pointer(p)).FiSectorsize 59373 } 59374 return sqlite3.Xsqlite3OsSectorSize(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 59375 } 59376 59377 func tvfsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 59378 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59379 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59380 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar >= 0 { 59381 return (*Testvfs)(unsafe.Pointer(p)).FiDevchar 59382 } 59383 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 59384 } 59385 59386 func tvfsOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 59387 bp := tls.Alloc(4) 59388 defer tls.Free(4) 59389 59390 var pTestfile uintptr = pFile 59391 var pFd uintptr 59392 var pId uintptr = uintptr(0) 59393 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 59394 59395 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))) 59396 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)) 59397 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 59398 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 59399 (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename = zName 59400 (*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs = pVfs 59401 (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal = pFd + 1*56 59402 libc.Xmemset(tls, pTestfile, 0, uint64(unsafe.Sizeof(TestvfsFile{}))) 59403 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = pFd 59404 59405 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59406 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 { 59407 var pArg uintptr = tcl.XTcl_NewObj(tls) 59408 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 59409 if flags&SQLITE_OPEN_MAIN_DB != 0 { 59410 var z uintptr = zName + uintptr(libc.Xstrlen(tls, zName)+uint64(1)) 59411 for *(*uint8)(unsafe.Pointer(z)) != 0 { 59412 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 59413 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 59414 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 59415 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 59416 } 59417 } 59418 tvfsExecTcl(tls, p, ts+27421, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), pArg, uintptr(0), uintptr(0)) 59419 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59420 var _objPtr uintptr = pArg 59421 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59422 tcl.XTclFreeObj(tls, _objPtr) 59423 } 59424 } 59425 if tvfsResultCode(tls, p, bp) != 0 { 59426 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59427 return *(*int32)(unsafe.Pointer(bp)) 59428 } 59429 } else { 59430 pId = tcl.XTcl_GetObjResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59431 } 59432 } 59433 59434 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59435 return SQLITE_IOERR 59436 } 59437 if tvfsInjectCantopenerr(tls, p) != 0 { 59438 return SQLITE_CANTOPEN 59439 } 59440 if tvfsInjectFullerr(tls, p) != 0 { 59441 return SQLITE_FULL 59442 } 59443 59444 if !(pId != 0) { 59445 pId = tcl.XTcl_NewStringObj(tls, ts+38661, -1) 59446 } 59447 (*Tcl_Obj)(unsafe.Pointer(pId)).FrefCount++ 59448 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = pId 59449 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59450 59451 *(*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) 59452 if (*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods != 0 { 59453 var pMethods uintptr 59454 var nByte int32 59455 59456 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 { 59457 nByte = int32(unsafe.Sizeof(sqlite3_io_methods{})) 59458 } else { 59459 nByte = int32(uintptr(0) + 104) 59460 } 59461 59462 pMethods = tcl.XTcl_Alloc(tls, uint32(nByte)) 59463 libc.Xmemcpy(tls, pMethods, uintptr(unsafe.Pointer(&tvfs_io_methods)), uint64(nByte)) 59464 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods)).FiVersion 59465 if (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion > (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion { 59466 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion 59467 } 59468 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 && (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FisNoshm != 0 { 59469 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmUnmap = uintptr(0) 59470 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmLock = uintptr(0) 59471 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmBarrier = uintptr(0) 59472 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmMap = uintptr(0) 59473 } 59474 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = pMethods 59475 } 59476 59477 return *(*int32)(unsafe.Pointer(bp)) 59478 } 59479 59480 func tvfsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 59481 bp := tls.Alloc(4) 59482 defer tls.Free(4) 59483 59484 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59485 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 59486 59487 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_DELETE_MASK != 0 { 59488 tvfsExecTcl(tls, p, ts+35661, 59489 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewIntObj(tls, dirSync), uintptr(0), uintptr(0)) 59490 tvfsResultCode(tls, p, bp) 59491 } 59492 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 59493 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsDelete(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, dirSync) 59494 } 59495 return *(*int32)(unsafe.Pointer(bp)) 59496 } 59497 59498 func tvfsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 59499 bp := tls.Alloc(4) 59500 defer tls.Free(4) 59501 59502 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 59503 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_ACCESS_MASK != 0 { 59504 var zArg uintptr = uintptr(0) 59505 if flags == SQLITE_ACCESS_EXISTS { 59506 zArg = ts + 38666 59507 } 59508 if flags == SQLITE_ACCESS_READWRITE { 59509 zArg = ts + 38687 59510 } 59511 if flags == SQLITE_ACCESS_READ { 59512 zArg = ts + 38711 59513 } 59514 tvfsExecTcl(tls, p, ts+35669, 59515 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewStringObj(tls, zArg, -1), uintptr(0), uintptr(0)) 59516 if tvfsResultCode(tls, p, bp) != 0 { 59517 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59518 return *(*int32)(unsafe.Pointer(bp)) 59519 } 59520 } else { 59521 var interp uintptr = (*Testvfs)(unsafe.Pointer(p)).Finterp 59522 if TCL_OK == tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, interp), pResOut) { 59523 return SQLITE_OK 59524 } 59525 } 59526 } 59527 return sqlite3.Xsqlite3OsAccess(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, flags, pResOut) 59528 } 59529 59530 func tvfsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 59531 bp := tls.Alloc(4) 59532 defer tls.Free(4) 59533 59534 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 59535 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FULLPATHNAME_MASK != 0 { 59536 tvfsExecTcl(tls, p, ts+35677, tcl.XTcl_NewStringObj(tls, zPath, -1), uintptr(0), uintptr(0), uintptr(0)) 59537 if tvfsResultCode(tls, p, bp) != 0 { 59538 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59539 return *(*int32)(unsafe.Pointer(bp)) 59540 } 59541 } 59542 } 59543 return sqlite3.Xsqlite3OsFullPathname(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, nOut, zOut) 59544 } 59545 59546 func tvfsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 59547 return sqlite3.Xsqlite3OsRandomness(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nByte, zBufOut) 59548 } 59549 59550 func tvfsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 59551 return sqlite3.Xsqlite3OsSleep(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nMicro) 59552 } 59553 59554 func tvfsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 59555 return (*struct { 59556 f func(*libc.TLS, uintptr, uintptr) int32 59557 })(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) 59558 } 59559 59560 func tvfsShmOpen(tls *libc.TLS, pFile uintptr) int32 { 59561 bp := tls.Alloc(4) 59562 defer tls.Free(4) 59563 59564 var p uintptr 59565 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59566 var pBuffer uintptr 59567 var pFd uintptr 59568 59569 pFd = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59570 p = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59571 59572 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 59573 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 { 59574 tvfsExecTcl(tls, p, ts+38730, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), uintptr(0), uintptr(0), uintptr(0)) 59575 if tvfsResultCode(tls, p, bp) != 0 { 59576 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59577 return *(*int32)(unsafe.Pointer(bp)) 59578 } 59579 } 59580 } 59581 59582 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59583 return SQLITE_IOERR 59584 } 59585 59586 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 59587 if 0 == libc.Xstrcmp(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile) { 59588 break 59589 } 59590 } 59591 if !(pBuffer != 0) { 59592 var szName int32 = int32(libc.Xstrlen(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 59593 var nByte int32 = int32(uint64(unsafe.Sizeof(TestvfsBuffer{})) + uint64(szName) + uint64(1)) 59594 pBuffer = tcl.XTcl_Alloc(tls, uint32(nByte)) 59595 libc.Xmemset(tls, pBuffer, 0, uint64(nByte)) 59596 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile = pBuffer + 1*8224 59597 libc.Xmemcpy(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, uint64(szName+1)) 59598 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext = (*Testvfs)(unsafe.Pointer(p)).FpBuffer 59599 (*Testvfs)(unsafe.Pointer(p)).FpBuffer = pBuffer 59600 } 59601 59602 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile 59603 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile = pFd 59604 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = pBuffer 59605 return *(*int32)(unsafe.Pointer(bp)) 59606 } 59607 59608 func tvfsAllocPage(tls *libc.TLS, p uintptr, iPage int32, pgsz int32) { 59609 if *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) == uintptr(0) { 59610 *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) = tcl.XTcl_Alloc(tls, uint32(pgsz)) 59611 libc.Xmemset(tls, *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)), 0, uint64(pgsz)) 59612 (*TestvfsBuffer)(unsafe.Pointer(p)).Fpgsz = pgsz 59613 } 59614 } 59615 59616 func tvfsShmMap(tls *libc.TLS, pFile uintptr, iPage int32, pgsz int32, isWrite int32, pp uintptr) int32 { 59617 bp := tls.Alloc(4) 59618 defer tls.Free(4) 59619 59620 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59621 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59622 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59623 59624 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59625 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59626 return (*struct { 59627 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 59628 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iPage, pgsz, isWrite, pp) 59629 } 59630 59631 if uintptr(0) == (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm { 59632 *(*int32)(unsafe.Pointer(bp)) = tvfsShmOpen(tls, pFile) 59633 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 59634 return *(*int32)(unsafe.Pointer(bp)) 59635 } 59636 } 59637 59638 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 { 59639 var pArg uintptr = tcl.XTcl_NewObj(tls) 59640 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 59641 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, iPage)) 59642 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, pgsz)) 59643 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, isWrite)) 59644 tvfsExecTcl(tls, p, ts+35754, 59645 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, pArg, uintptr(0)) 59646 tvfsResultCode(tls, p, bp) 59647 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59648 var _objPtr uintptr = pArg 59649 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59650 tcl.XTclFreeObj(tls, _objPtr) 59651 } 59652 } 59653 } 59654 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59655 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 59656 } 59657 59658 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && isWrite != 0 && !(int32(*(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8))) != 0) { 59659 tvfsAllocPage(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm, iPage, pgsz) 59660 } 59661 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK || *(*int32)(unsafe.Pointer(bp)) == SQLITE_READONLY { 59662 *(*uintptr)(unsafe.Pointer(pp)) = *(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8)) 59663 } 59664 59665 return *(*int32)(unsafe.Pointer(bp)) 59666 } 59667 59668 func tvfsShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 59669 bp := tls.Alloc(100) 59670 defer tls.Free(100) 59671 59672 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 59673 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59674 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59675 var nLock int32 59676 59677 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59678 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59679 return (*struct { 59680 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59681 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 59682 } 59683 59684 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 { 59685 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]uint8{})), bp+16, ts+17826, libc.VaList(bp, ofst, n)) 59686 nLock = int32(libc.Xstrlen(tls, bp+16)) 59687 if flags&SQLITE_SHM_LOCK != 0 { 59688 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38739) 59689 } else { 59690 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38745) 59691 } 59692 nLock = nLock + int32(libc.Xstrlen(tls, bp+16+uintptr(nLock))) 59693 if flags&SQLITE_SHM_SHARED != 0 { 59694 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38753) 59695 } else { 59696 libc.Xstrcpy(tls, bp+16+uintptr(nLock), ts+38761) 59697 } 59698 tvfsExecTcl(tls, p, ts+35733, 59699 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 59700 tcl.XTcl_NewStringObj(tls, bp+16, -1), uintptr(0)) 59701 tvfsResultCode(tls, p, bp+96) 59702 } 59703 59704 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 59705 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_IOERR 59706 } 59707 59708 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 59709 var isLock int32 = flags & SQLITE_SHM_LOCK 59710 var isExcl int32 = flags & SQLITE_SHM_EXCLUSIVE 59711 var mask u32 = u32((int32(1)<<n - 1) << ofst) 59712 if isLock != 0 { 59713 var p2 uintptr 59714 for p2 = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FpFile; p2 != 0; p2 = (*TestvfsFd)(unsafe.Pointer(p2)).FpNext { 59715 if p2 == pFd { 59716 continue 59717 } 59718 if (*TestvfsFd)(unsafe.Pointer(p2)).Fexcllock&mask != 0 || isExcl != 0 && (*TestvfsFd)(unsafe.Pointer(p2)).Fsharedlock&mask != 0 { 59719 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_BUSY 59720 break 59721 } 59722 } 59723 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 59724 if isExcl != 0 { 59725 *(*u32)(unsafe.Pointer(pFd + 40)) |= mask 59726 } 59727 if !(isExcl != 0) { 59728 *(*u32)(unsafe.Pointer(pFd + 44)) |= mask 59729 } 59730 } 59731 } else { 59732 if isExcl != 0 { 59733 *(*u32)(unsafe.Pointer(pFd + 40)) &= ^mask 59734 } 59735 if !(isExcl != 0) { 59736 *(*u32)(unsafe.Pointer(pFd + 44)) &= ^mask 59737 } 59738 } 59739 } 59740 59741 return *(*int32)(unsafe.Pointer(bp + 96)) 59742 } 59743 59744 func tvfsShmBarrier(tls *libc.TLS, pFile uintptr) { 59745 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59746 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59747 59748 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMBARRIER_MASK != 0 { 59749 var z uintptr 59750 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm != 0 { 59751 z = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile 59752 } else { 59753 z = ts + 584 59754 } 59755 tvfsExecTcl(tls, p, ts+35742, tcl.XTcl_NewStringObj(tls, z, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59756 } 59757 59758 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59759 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59760 (*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) 59761 return 59762 } 59763 } 59764 59765 func tvfsShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 59766 bp := tls.Alloc(4) 59767 defer tls.Free(4) 59768 59769 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 59770 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59771 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 59772 var pBuffer uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm 59773 var ppFd uintptr 59774 59775 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 59776 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 59777 return (*struct { 59778 f func(*libc.TLS, uintptr, int32) int32 59779 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, deleteFlag) 59780 } 59781 59782 if !(pBuffer != 0) { 59783 return SQLITE_OK 59784 } 59785 59786 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMCLOSE_MASK != 0 { 59787 tvfsExecTcl(tls, p, ts+35723, 59788 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 59789 tvfsResultCode(tls, p, bp) 59790 } 59791 59792 for ppFd = pBuffer + 8208; *(*uintptr)(unsafe.Pointer(ppFd)) != pFd; ppFd = *(*uintptr)(unsafe.Pointer(ppFd)) + 48 { 59793 } 59794 59795 *(*uintptr)(unsafe.Pointer(ppFd)) = (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext 59796 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = uintptr(0) 59797 59798 if (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile == uintptr(0) { 59799 var i int32 59800 var pp uintptr 59801 for pp = p + 40; *(*uintptr)(unsafe.Pointer(pp)) != pBuffer; pp = *(*uintptr)(unsafe.Pointer(pp)) + 8216 { 59802 } 59803 *(*uintptr)(unsafe.Pointer(pp)) = (*TestvfsBuffer)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNext 59804 for i = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8)) != 0; i++ { 59805 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8))) 59806 } 59807 tcl.XTcl_Free(tls, pBuffer) 59808 } 59809 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 59810 59811 return *(*int32)(unsafe.Pointer(bp)) 59812 } 59813 59814 func tvfsFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 59815 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59816 return sqlite3.Xsqlite3OsFetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, iAmt, pp) 59817 } 59818 59819 func tvfsUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, p uintptr) int32 { 59820 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 59821 return sqlite3.Xsqlite3OsUnfetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, p) 59822 } 59823 59824 func testvfs_obj_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59825 bp := tls.Alloc(568) 59826 defer tls.Free(568) 59827 59828 var p uintptr = cd 59829 *(*[10]TestvfsSubcmd)(unsafe.Pointer(bp + 96)) = [10]TestvfsSubcmd{ 59830 {FzName: ts + 38772}, 59831 {FzName: ts + 10138, FeCmd: uint32(1)}, 59832 {FzName: ts + 38776, FeCmd: uint32(2)}, 59833 {FzName: ts + 38783, FeCmd: uint32(3)}, 59834 {FzName: ts + 38789, FeCmd: uint32(7)}, 59835 {FzName: ts + 38797, FeCmd: uint32(8)}, 59836 {FzName: ts + 38809, FeCmd: uint32(4)}, 59837 {FzName: ts + 38816, FeCmd: uint32(5)}, 59838 {FzName: ts + 38824, FeCmd: uint32(6)}, 59839 {}, 59840 } 59841 59842 if objc < 2 { 59843 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 59844 return TCL_ERROR 59845 } 59846 if tcl.XTcl_GetIndexFromObjStruct(tls, 59847 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+96, int32(unsafe.Sizeof(TestvfsSubcmd{})), ts+38835, 0, bp+256) != 0 { 59848 return TCL_ERROR 59849 } 59850 tcl.XTcl_ResetResult(tls, interp) 59851 59852 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 59853 case uint32(0): 59854 { 59855 var pObj uintptr 59856 var rc int32 59857 var pBuffer uintptr 59858 var zName uintptr 59859 if objc != 3 && objc != 4 { 59860 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38846) 59861 return TCL_ERROR 59862 } 59863 zName = tcl.XTcl_Alloc(tls, uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname)) 59864 rc = (*struct { 59865 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59866 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FxFullPathname})).f(tls, 59867 (*Testvfs)(unsafe.Pointer(p)).FpParent, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 59868 (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname, zName) 59869 if rc != SQLITE_OK { 59870 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38859, 59871 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 59872 tcl.XTcl_Free(tls, zName) 59873 return TCL_ERROR 59874 } 59875 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 59876 if 0 == libc.Xstrcmp(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, zName) { 59877 break 59878 } 59879 } 59880 tcl.XTcl_Free(tls, zName) 59881 if !(pBuffer != 0) { 59882 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+38885, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 59883 return TCL_ERROR 59884 } 59885 if objc == 4 { 59886 var a uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+260) 59887 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 59888 if pgsz == 0 { 59889 pgsz = 65536 59890 } 59891 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256))*pgsz < *(*int32)(unsafe.Pointer(bp + 260)); *(*int32)(unsafe.Pointer(bp + 256))++ { 59892 var nByte int32 = pgsz 59893 tvfsAllocPage(tls, pBuffer, *(*int32)(unsafe.Pointer(bp + 256)), pgsz) 59894 if *(*int32)(unsafe.Pointer(bp + 260))-*(*int32)(unsafe.Pointer(bp + 256))*pgsz < pgsz { 59895 nByte = *(*int32)(unsafe.Pointer(bp + 260)) 59896 } 59897 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)) 59898 } 59899 } 59900 59901 pObj = tcl.XTcl_NewObj(tls) 59902 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))++ { 59903 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 59904 if pgsz == 0 { 59905 pgsz = 65536 59906 } 59907 tcl.XTcl_AppendObjToObj(tls, pObj, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), pgsz)) 59908 } 59909 tcl.XTcl_SetObjResult(tls, interp, pObj) 59910 break 59911 59912 } 59913 59914 case uint32(2): 59915 { 59916 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 59917 *(*int32)(unsafe.Pointer(bp + 264)) = 0 59918 var mask int32 = 0 59919 if objc != 3 { 59920 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+32419) 59921 return TCL_ERROR 59922 } 59923 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+264, bp+272) != 0 { 59924 return TCL_ERROR 59925 } 59926 tcl.XTcl_ResetResult(tls, interp) 59927 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256)) < *(*int32)(unsafe.Pointer(bp + 264)); *(*int32)(unsafe.Pointer(bp + 256))++ { 59928 var iMethod int32 59929 var zElem uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 272)) + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8))) 59930 for iMethod = 0; iMethod < int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))); iMethod++ { 59931 if libc.Xstrcmp(tls, zElem, vfsmethod[iMethod].FzName) == 0 { 59932 mask = mask | vfsmethod[iMethod].Fmask 59933 break 59934 } 59935 } 59936 if iMethod == int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))) { 59937 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+38900, zElem, 0)) 59938 return TCL_ERROR 59939 } 59940 } 59941 (*Testvfs)(unsafe.Pointer(p)).Fmask = mask 59942 break 59943 59944 } 59945 59946 case uint32(4): 59947 { 59948 if objc == 3 { 59949 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59950 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59951 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 59952 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 59953 tcl.XTclFreeObj(tls, _objPtr) 59954 } 59955 } 59956 (*Testvfs)(unsafe.Pointer(p)).FpScript = uintptr(0) 59957 } 59958 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+280) 59959 if *(*int32)(unsafe.Pointer(bp + 280)) > 0 { 59960 (*Testvfs)(unsafe.Pointer(p)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59961 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 59962 } 59963 } else if objc != 2 { 59964 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 59965 return TCL_ERROR 59966 } 59967 59968 tcl.XTcl_ResetResult(tls, interp) 59969 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 59970 tcl.XTcl_SetObjResult(tls, interp, (*Testvfs)(unsafe.Pointer(p)).FpScript) 59971 } 59972 59973 break 59974 59975 } 59976 59977 case uint32(8): 59978 fallthrough 59979 case uint32(3): 59980 fallthrough 59981 case uint32(7): 59982 { 59983 var pTest uintptr = uintptr(0) 59984 var iRet int32 59985 59986 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 59987 case uint32(3): 59988 pTest = p + 60 59989 break 59990 case uint32(7): 59991 pTest = p + 72 59992 break 59993 case uint32(8): 59994 pTest = p + 84 59995 break 59996 default: 59997 } 59998 iRet = (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail 59999 (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail = 0 60000 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = 0 60001 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = 0 60002 60003 if objc == 4 { 60004 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+284) || 60005 TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+288) { 60006 return TCL_ERROR 60007 } 60008 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = func() int32 { 60009 if *(*int32)(unsafe.Pointer(bp + 288)) != 0 { 60010 return FAULT_INJECT_PERSISTENT 60011 } 60012 return FAULT_INJECT_TRANSIENT 60013 }() 60014 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = *(*int32)(unsafe.Pointer(bp + 284)) 60015 } else if objc != 2 { 60016 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38917) 60017 return TCL_ERROR 60018 } 60019 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iRet)) 60020 break 60021 60022 } 60023 60024 case uint32(1): 60025 { 60026 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 60027 break 60028 60029 } 60030 60031 case uint32(5): 60032 { 60033 *(*[16]DeviceFlag)(unsafe.Pointer(bp + 304)) = [16]DeviceFlag{ 60034 {FzName: ts + 38931, FiValue: -1}, 60035 {FzName: ts + 26403, FiValue: SQLITE_IOCAP_ATOMIC}, 60036 {FzName: ts + 26410, FiValue: SQLITE_IOCAP_ATOMIC512}, 60037 {FzName: ts + 26420, FiValue: SQLITE_IOCAP_ATOMIC1K}, 60038 {FzName: ts + 26429, FiValue: SQLITE_IOCAP_ATOMIC2K}, 60039 {FzName: ts + 26438, FiValue: SQLITE_IOCAP_ATOMIC4K}, 60040 {FzName: ts + 26447, FiValue: SQLITE_IOCAP_ATOMIC8K}, 60041 {FzName: ts + 26456, FiValue: SQLITE_IOCAP_ATOMIC16K}, 60042 {FzName: ts + 26466, FiValue: SQLITE_IOCAP_ATOMIC32K}, 60043 {FzName: ts + 26476, FiValue: SQLITE_IOCAP_ATOMIC64K}, 60044 {FzName: ts + 26486, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 60045 {FzName: ts + 26497, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 60046 {FzName: ts + 38939, FiValue: SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN}, 60047 {FzName: ts + 26509, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 60048 {FzName: ts + 38961, FiValue: SQLITE_IOCAP_IMMUTABLE}, 60049 {}, 60050 } 60051 var pRet uintptr 60052 var iFlag int32 60053 60054 if objc > 3 { 60055 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38971) 60056 return TCL_ERROR 60057 } 60058 if objc == 3 { 60059 var j int32 60060 var iNew int32 = 0 60061 *(*uintptr)(unsafe.Pointer(bp + 296)) = uintptr(0) 60062 *(*int32)(unsafe.Pointer(bp + 292)) = 0 60063 60064 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+292, bp+296) != 0 { 60065 return TCL_ERROR 60066 } 60067 60068 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 292)); j++ { 60069 *(*int32)(unsafe.Pointer(bp + 560)) = 0 60070 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(j)*8)), bp+304, 60071 int32(unsafe.Sizeof(DeviceFlag{})), ts+17631, 0, bp+560) != 0 { 60072 return TCL_ERROR 60073 } 60074 if (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue < 0 && *(*int32)(unsafe.Pointer(bp + 292)) > 1 { 60075 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+38983, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 60076 return TCL_ERROR 60077 } 60078 iNew = iNew | (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue 60079 } 60080 60081 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = iNew | 0x10000000 60082 } 60083 60084 pRet = tcl.XTcl_NewObj(tls) 60085 for iFlag = 0; uint64(iFlag) < uint64(unsafe.Sizeof([16]DeviceFlag{}))/uint64(unsafe.Sizeof(DeviceFlag{})); iFlag++ { 60086 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar&(*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FiValue != 0 { 60087 tcl.XTcl_ListObjAppendElement(tls, 60088 interp, pRet, tcl.XTcl_NewStringObj(tls, (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FzName, -1)) 60089 } 60090 } 60091 tcl.XTcl_SetObjResult(tls, interp, pRet) 60092 60093 break 60094 60095 } 60096 60097 case uint32(6): 60098 { 60099 if objc > 3 { 60100 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+38995) 60101 return TCL_ERROR 60102 } 60103 if objc == 3 { 60104 *(*int32)(unsafe.Pointer(bp + 564)) = 0 60105 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+564) != 0 { 60106 return TCL_ERROR 60107 } 60108 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = *(*int32)(unsafe.Pointer(bp + 564)) 60109 } 60110 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*Testvfs)(unsafe.Pointer(p)).FiSectorsize)) 60111 break 60112 60113 } 60114 } 60115 60116 return TCL_OK 60117 } 60118 60119 type TestvfsSubcmd = struct { 60120 FzName uintptr 60121 FeCmd uint32 60122 F__ccgo_pad1 [4]byte 60123 } 60124 60125 type VfsMethod = struct { 60126 FzName uintptr 60127 Fmask int32 60128 F__ccgo_pad1 [4]byte 60129 } 60130 60131 var vfsmethod = [18]VfsMethod{ 60132 {FzName: ts + 38730, Fmask: TESTVFS_SHMOPEN_MASK}, 60133 {FzName: ts + 35733, Fmask: TESTVFS_SHMLOCK_MASK}, 60134 {FzName: ts + 35742, Fmask: TESTVFS_SHMBARRIER_MASK}, 60135 {FzName: ts + 35723, Fmask: TESTVFS_SHMCLOSE_MASK}, 60136 {FzName: ts + 35754, Fmask: TESTVFS_SHMMAP_MASK}, 60137 {FzName: ts + 27843, Fmask: TESTVFS_SYNC_MASK}, 60138 {FzName: ts + 35661, Fmask: TESTVFS_DELETE_MASK}, 60139 {FzName: ts + 35569, Fmask: TESTVFS_WRITE_MASK}, 60140 {FzName: ts + 35563, Fmask: TESTVFS_READ_MASK}, 60141 {FzName: ts + 35576, Fmask: TESTVFS_TRUNCATE_MASK}, 60142 {FzName: ts + 27421, Fmask: TESTVFS_OPEN_MASK}, 60143 {FzName: ts + 35556, Fmask: TESTVFS_CLOSE_MASK}, 60144 {FzName: ts + 35669, Fmask: TESTVFS_ACCESS_MASK}, 60145 {FzName: ts + 35677, Fmask: TESTVFS_FULLPATHNAME_MASK}, 60146 {FzName: ts + 35602, Fmask: TESTVFS_UNLOCK_MASK}, 60147 {FzName: ts + 35596, Fmask: TESTVFS_LOCK_MASK}, 60148 {FzName: ts + 38596, Fmask: TESTVFS_CKLOCK_MASK}, 60149 {FzName: ts + 35624, Fmask: TESTVFS_FCNTL_MASK}, 60150 } 60151 60152 func testvfs_obj_del(tls *libc.TLS, cd ClientData) { 60153 var p uintptr = cd 60154 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 60155 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60156 var _objPtr uintptr = (*Testvfs)(unsafe.Pointer(p)).FpScript 60157 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60158 tcl.XTclFreeObj(tls, _objPtr) 60159 } 60160 } 60161 } 60162 sqlite3.Xsqlite3_vfs_unregister(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 60163 libc.Xmemset(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs, 0, uint64(unsafe.Sizeof(sqlite3_vfs{}))) 60164 tcl.XTcl_Free(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 60165 libc.Xmemset(tls, p, 0, uint64(unsafe.Sizeof(Testvfs{}))) 60166 tcl.XTcl_Free(tls, p) 60167 } 60168 60169 func testvfs_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60170 bp := tls.Alloc(28) 60171 defer tls.Free(28) 60172 60173 var p uintptr 60174 var pVfs uintptr 60175 var zVfs uintptr 60176 var nByte int32 60177 60178 var i int32 60179 60180 var zSwitch uintptr 60181 *(*int32)(unsafe.Pointer(bp + 4)) = 0 60182 *(*int32)(unsafe.Pointer(bp + 24)) = 0 60183 *(*int32)(unsafe.Pointer(bp + 8)) = 0 60184 *(*int32)(unsafe.Pointer(bp + 12)) = 0 60185 *(*int32)(unsafe.Pointer(bp + 16)) = -1 60186 *(*int32)(unsafe.Pointer(bp + 20)) = 3 60187 60188 if !(objc < 2 || 0 != objc%2) { 60189 goto __1 60190 } 60191 goto bad_args 60192 __1: 60193 ; 60194 i = 2 60195 __2: 60196 if !(i < objc) { 60197 goto __4 60198 } 60199 zSwitch = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp) 60200 60201 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39003, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 60202 goto __5 60203 } 60204 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+4) != 0) { 60205 goto __7 60206 } 60207 return TCL_ERROR 60208 __7: 60209 ; 60210 if !(*(*int32)(unsafe.Pointer(bp + 4)) != 0) { 60211 goto __8 60212 } 60213 *(*int32)(unsafe.Pointer(bp + 24)) = 0 60214 __8: 60215 ; 60216 goto __6 60217 __5: 60218 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+26779, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 60219 goto __9 60220 } 60221 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+8) != 0) { 60222 goto __11 60223 } 60224 return TCL_ERROR 60225 __11: 60226 ; 60227 goto __10 60228 __9: 60229 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39010, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 60230 goto __12 60231 } 60232 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+12) != 0) { 60233 goto __14 60234 } 60235 return TCL_ERROR 60236 __14: 60237 ; 60238 goto __13 60239 __12: 60240 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39020, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 60241 goto __15 60242 } 60243 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+16) != 0) { 60244 goto __17 60245 } 60246 return TCL_ERROR 60247 __17: 60248 ; 60249 goto __16 60250 __15: 60251 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39032, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 60252 goto __18 60253 } 60254 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+20) != 0) { 60255 goto __20 60256 } 60257 return TCL_ERROR 60258 __20: 60259 ; 60260 goto __19 60261 __18: 60262 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39042, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 60263 goto __21 60264 } 60265 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+24) != 0) { 60266 goto __23 60267 } 60268 return TCL_ERROR 60269 __23: 60270 ; 60271 if !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { 60272 goto __24 60273 } 60274 *(*int32)(unsafe.Pointer(bp + 4)) = 0 60275 __24: 60276 ; 60277 goto __22 60278 __21: 60279 goto bad_args 60280 __22: 60281 ; 60282 __19: 60283 ; 60284 __16: 60285 ; 60286 __13: 60287 ; 60288 __10: 60289 ; 60290 __6: 60291 ; 60292 goto __3 60293 __3: 60294 i = i + 2 60295 goto __2 60296 goto __4 60297 __4: 60298 ; 60299 if !(uint64(*(*int32)(unsafe.Pointer(bp + 12))) < uint64(unsafe.Sizeof(TestvfsFile{}))) { 60300 goto __25 60301 } 60302 *(*int32)(unsafe.Pointer(bp + 12)) = int32(unsafe.Sizeof(TestvfsFile{})) 60303 __25: 60304 ; 60305 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 60306 nByte = int32(uint64(unsafe.Sizeof(Testvfs{})) + uint64(int32(libc.Xstrlen(tls, zVfs))) + uint64(1)) 60307 p = tcl.XTcl_Alloc(tls, uint32(nByte)) 60308 libc.Xmemset(tls, p, 0, uint64(nByte)) 60309 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = -1 60310 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = -1 60311 60312 tcl.XTcl_CreateObjCommand(tls, interp, zVfs, *(*uintptr)(unsafe.Pointer(&struct { 60313 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60314 }{testvfs_obj_cmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{testvfs_obj_del}))) 60315 (*Testvfs)(unsafe.Pointer(p)).FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 60316 (*Testvfs)(unsafe.Pointer(p)).Finterp = interp 60317 60318 (*Testvfs)(unsafe.Pointer(p)).FzName = p + 1*104 60319 libc.Xmemcpy(tls, (*Testvfs)(unsafe.Pointer(p)).FzName, zVfs, libc.Xstrlen(tls, zVfs)+uint64(1)) 60320 60321 pVfs = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(sqlite3_vfs{}))) 60322 libc.Xmemcpy(tls, pVfs, uintptr(unsafe.Pointer(&tvfs_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{}))) 60323 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData = p 60324 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion = *(*int32)(unsafe.Pointer(bp + 20)) 60325 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName = (*Testvfs)(unsafe.Pointer(p)).FzName 60326 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname 60327 if !(*(*int32)(unsafe.Pointer(bp + 16)) >= 0 && *(*int32)(unsafe.Pointer(bp + 16)) < (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname) { 60328 goto __26 60329 } 60330 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = *(*int32)(unsafe.Pointer(bp + 16)) 60331 __26: 60332 ; 60333 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile = *(*int32)(unsafe.Pointer(bp + 12)) 60334 (*Testvfs)(unsafe.Pointer(p)).FpVfs = pVfs 60335 (*Testvfs)(unsafe.Pointer(p)).FisNoshm = *(*int32)(unsafe.Pointer(bp + 4)) 60336 (*Testvfs)(unsafe.Pointer(p)).FisFullshm = *(*int32)(unsafe.Pointer(bp + 24)) 60337 (*Testvfs)(unsafe.Pointer(p)).Fmask = TESTVFS_ALL_MASK 60338 60339 sqlite3.Xsqlite3_vfs_register(tls, pVfs, *(*int32)(unsafe.Pointer(bp + 8))) 60340 60341 return TCL_OK 60342 60343 bad_args: 60344 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39051) 60345 return TCL_ERROR 60346 } 60347 60348 var tvfs_vfs = sqlite3_vfs{ 60349 FiVersion: 3, 60350 FxOpen: 0, 60351 FxDelete: 0, 60352 FxAccess: 0, 60353 FxFullPathname: 0, 60354 FxRandomness: 0, 60355 FxSleep: 0, 60356 FxCurrentTime: 0, 60357 } 60358 60359 func test_vfs_shmlock(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60360 bp := tls.Alloc(88) 60361 defer tls.Free(88) 60362 60363 *(*[3]uintptr)(unsafe.Pointer(bp + 8)) = [3]uintptr{ts + 39155, ts + 13978, uintptr(0)} 60364 *(*[3]uintptr)(unsafe.Pointer(bp + 40)) = [3]uintptr{ts + 39162, ts + 39167, uintptr(0)} 60365 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 60366 var rc int32 = SQLITE_OK 60367 var zDbname uintptr = uintptr(0) 60368 *(*int32)(unsafe.Pointer(bp + 32)) = 0 60369 *(*int32)(unsafe.Pointer(bp + 64)) = 0 60370 *(*int32)(unsafe.Pointer(bp + 68)) = 0 60371 *(*int32)(unsafe.Pointer(bp + 72)) = 0 60372 60373 if objc != 7 { 60374 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 60375 ts+39174) 60376 return TCL_ERROR 60377 } 60378 60379 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 60380 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 60381 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+32) != 0 || 60382 tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40, int32(unsafe.Sizeof(uintptr(0))), ts+39226, 0, bp+64) != 0 || 60383 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+68) != 0 || 60384 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp+72) != 0 { 60385 return TCL_ERROR 60386 } 60387 60388 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+80) 60389 if *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 60390 return TCL_ERROR 60391 } 60392 rc = (*struct { 60393 f func(*libc.TLS, uintptr, int32, int32, int32) int32 60394 })(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)), 60395 func() int32 { 60396 if *(*int32)(unsafe.Pointer(bp + 32)) == 0 { 60397 return SQLITE_SHM_SHARED 60398 } 60399 return SQLITE_SHM_EXCLUSIVE 60400 }()| 60401 func() int32 { 60402 if *(*int32)(unsafe.Pointer(bp + 64)) == 0 { 60403 return SQLITE_SHM_LOCK 60404 } 60405 return SQLITE_SHM_UNLOCK 60406 }()) 60407 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60408 return TCL_OK 60409 } 60410 60411 func test_vfs_set_readmark(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60412 bp := tls.Alloc(48) 60413 defer tls.Free(48) 60414 60415 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 60416 var rc int32 = SQLITE_OK 60417 var zDbname uintptr = uintptr(0) 60418 *(*int32)(unsafe.Pointer(bp + 24)) = 0 60419 *(*int32)(unsafe.Pointer(bp + 28)) = -1 60420 60421 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 60422 var aShm uintptr 60423 var iOff int32 60424 60425 if objc != 4 && objc != 5 { 60426 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39230) 60427 return TCL_ERROR 60428 } 60429 60430 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 60431 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 || 60432 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 || 60433 objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 60434 return TCL_ERROR 60435 } 60436 60437 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+32) 60438 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 60439 return TCL_ERROR 60440 } 60441 rc = (*struct { 60442 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 60443 })(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) 60444 if rc != SQLITE_OK { 60445 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60446 return TCL_ERROR 60447 } 60448 if *(*uintptr)(unsafe.Pointer(bp + 40)) == uintptr(0) { 60449 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+39253, 0)) 60450 return TCL_ERROR 60451 } 60452 aShm = *(*uintptr)(unsafe.Pointer(bp + 40)) 60453 iOff = 12*2 + 1 + *(*int32)(unsafe.Pointer(bp + 24)) 60454 60455 if objc == 5 { 60456 *(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 28))) 60457 } 60458 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(*(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4))))) 60459 60460 return TCL_OK 60461 } 60462 60463 func Sqlitetestvfs_Init(tls *libc.TLS, interp uintptr) int32 { 60464 tcl.XTcl_CreateObjCommand(tls, interp, ts+39277, *(*uintptr)(unsafe.Pointer(&struct { 60465 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60466 }{testvfs_cmd})), uintptr(0), uintptr(0)) 60467 tcl.XTcl_CreateObjCommand(tls, interp, ts+39285, *(*uintptr)(unsafe.Pointer(&struct { 60468 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60469 }{test_vfs_shmlock})), uintptr(0), uintptr(0)) 60470 tcl.XTcl_CreateObjCommand(tls, interp, ts+39297, *(*uintptr)(unsafe.Pointer(&struct { 60471 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60472 }{test_vfs_set_readmark})), uintptr(0), uintptr(0)) 60473 return TCL_OK 60474 } 60475 60476 type TestWindow1 = struct { 60477 FxStep uintptr 60478 FxFinal uintptr 60479 FxValue uintptr 60480 FxInverse uintptr 60481 Finterp uintptr 60482 } 60483 60484 type TestWindow = TestWindow1 60485 60486 type TestWindowCtx1 = struct{ FpVal uintptr } 60487 60488 type TestWindowCtx = TestWindowCtx1 60489 60490 func doTestWindowStep(tls *libc.TLS, bInverse int32, ctx uintptr, nArg int32, apArg uintptr) { 60491 var i int32 60492 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 60493 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 60494 if bInverse != 0 { 60495 return (*TestWindow)(unsafe.Pointer(p)).FxInverse 60496 } 60497 return (*TestWindow)(unsafe.Pointer(p)).FxStep 60498 }()) 60499 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 60500 60501 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 60502 if pCtx != 0 { 60503 var zResult uintptr 60504 var rc int32 60505 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 60506 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 60507 } else { 60508 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 60509 } 60510 for i = 0; i < nArg; i++ { 60511 var pArg uintptr 60512 pArg = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8))), -1) 60513 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, pArg) 60514 } 60515 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 60516 if rc != TCL_OK { 60517 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 60518 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 60519 } else { 60520 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 60521 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60522 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 60523 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60524 tcl.XTclFreeObj(tls, _objPtr) 60525 } 60526 } 60527 } 60528 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp)) 60529 (*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount++ 60530 } 60531 } 60532 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60533 var _objPtr uintptr = pEval 60534 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60535 tcl.XTclFreeObj(tls, _objPtr) 60536 } 60537 } 60538 } 60539 60540 func doTestWindowFinalize(tls *libc.TLS, bValue int32, ctx uintptr) { 60541 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 60542 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 60543 if bValue != 0 { 60544 return (*TestWindow)(unsafe.Pointer(p)).FxValue 60545 } 60546 return (*TestWindow)(unsafe.Pointer(p)).FxFinal 60547 }()) 60548 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 60549 60550 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 60551 if pCtx != 0 { 60552 var zResult uintptr 60553 var rc int32 60554 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 60555 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 60556 } else { 60557 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 60558 } 60559 60560 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 60561 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 60562 if rc != TCL_OK { 60563 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 60564 } else { 60565 sqlite3.Xsqlite3_result_text(tls, ctx, zResult, -1, libc.UintptrFromInt32(-1)) 60566 } 60567 60568 if bValue == 0 { 60569 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 60570 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60571 var _objPtr uintptr = (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal 60572 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60573 tcl.XTclFreeObj(tls, _objPtr) 60574 } 60575 } 60576 } 60577 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = uintptr(0) 60578 } 60579 } 60580 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60581 var _objPtr uintptr = pEval 60582 if libc.PostDecInt32(&(*Tcl_Obj)(unsafe.Pointer(_objPtr)).FrefCount, 1) <= 1 { 60583 tcl.XTclFreeObj(tls, _objPtr) 60584 } 60585 } 60586 } 60587 60588 func testWindowStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60589 doTestWindowStep(tls, 0, ctx, nArg, apArg) 60590 } 60591 60592 func testWindowInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60593 doTestWindowStep(tls, 1, ctx, nArg, apArg) 60594 } 60595 60596 func testWindowFinal(tls *libc.TLS, ctx uintptr) { 60597 doTestWindowFinalize(tls, 0, ctx) 60598 } 60599 60600 func testWindowValue(tls *libc.TLS, ctx uintptr) { 60601 doTestWindowFinalize(tls, 1, ctx) 60602 } 60603 60604 func testWindowDestroy(tls *libc.TLS, pCtx uintptr) { 60605 tcl.XTcl_Free(tls, pCtx) 60606 } 60607 60608 func test_create_window(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60609 bp := tls.Alloc(8) 60610 defer tls.Free(8) 60611 60612 var pNew uintptr 60613 60614 var zName uintptr 60615 var rc int32 60616 60617 if objc != 7 { 60618 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39314) 60619 return TCL_ERROR 60620 } 60621 60622 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60623 return TCL_ERROR 60624 } 60625 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 60626 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestWindow{}))) 60627 libc.Xmemset(tls, pNew, 0, uint64(unsafe.Sizeof(TestWindow{}))) 60628 (*TestWindow)(unsafe.Pointer(pNew)).FxStep = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 60629 (*TestWindow)(unsafe.Pointer(pNew)).FxFinal = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 60630 (*TestWindow)(unsafe.Pointer(pNew)).FxValue = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 60631 (*TestWindow)(unsafe.Pointer(pNew)).FxInverse = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8))) 60632 (*TestWindow)(unsafe.Pointer(pNew)).Finterp = interp 60633 60634 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxStep)).FrefCount++ 60635 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxFinal)).FrefCount++ 60636 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxValue)).FrefCount++ 60637 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxInverse)).FrefCount++ 60638 60639 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, -1, SQLITE_UTF8, pNew, 60640 *(*uintptr)(unsafe.Pointer(&struct { 60641 f func(*libc.TLS, uintptr, int32, uintptr) 60642 }{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 { 60643 f func(*libc.TLS, uintptr, int32, uintptr) 60644 }{testWindowInverse})), 60645 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowDestroy}))) 60646 if rc != SQLITE_OK { 60647 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60648 return TCL_ERROR 60649 } 60650 60651 return TCL_OK 60652 } 60653 60654 func test_create_window_misuse(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60655 bp := tls.Alloc(8) 60656 defer tls.Free(8) 60657 60658 var rc int32 60659 60660 if !(objc != 2) { 60661 goto __1 60662 } 60663 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60664 return TCL_ERROR 60665 __1: 60666 ; 60667 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 60668 goto __2 60669 } 60670 return TCL_ERROR 60671 __2: 60672 ; 60673 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60674 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 { 60675 f func(*libc.TLS, uintptr, int32, uintptr) 60676 }{testWindowInverse})), 60677 uintptr(0)) 60678 if !(rc != SQLITE_MISUSE) { 60679 goto __3 60680 } 60681 goto error 60682 __3: 60683 ; 60684 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60685 *(*uintptr)(unsafe.Pointer(&struct { 60686 f func(*libc.TLS, uintptr, int32, uintptr) 60687 }{testWindowStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 60688 f func(*libc.TLS, uintptr, int32, uintptr) 60689 }{testWindowInverse})), 60690 uintptr(0)) 60691 if !(rc != SQLITE_MISUSE) { 60692 goto __4 60693 } 60694 goto error 60695 __4: 60696 ; 60697 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60698 *(*uintptr)(unsafe.Pointer(&struct { 60699 f func(*libc.TLS, uintptr, int32, uintptr) 60700 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 60701 f func(*libc.TLS, uintptr, int32, uintptr) 60702 }{testWindowInverse})), 60703 uintptr(0)) 60704 if !(rc != SQLITE_MISUSE) { 60705 goto __5 60706 } 60707 goto error 60708 __5: 60709 ; 60710 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39351, -1, SQLITE_UTF8, uintptr(0), 60711 *(*uintptr)(unsafe.Pointer(&struct { 60712 f func(*libc.TLS, uintptr, int32, uintptr) 60713 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), uintptr(0), 60714 uintptr(0)) 60715 if !(rc != SQLITE_MISUSE) { 60716 goto __6 60717 } 60718 goto error 60719 __6: 60720 ; 60721 return TCL_OK 60722 60723 error: 60724 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, ts+39355, -1)) 60725 return TCL_ERROR 60726 } 60727 60728 func sumintStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60729 var pInt uintptr 60730 60731 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apArg))) != SQLITE_INTEGER { 60732 sqlite3.Xsqlite3_result_error(tls, ctx, ts+39373, -1) 60733 return 60734 } 60735 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 60736 if pInt != 0 { 60737 *(*sqlite3_int64)(unsafe.Pointer(pInt)) += sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 60738 } 60739 } 60740 60741 func sumintInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 60742 var pInt uintptr 60743 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 60744 *(*sqlite3_int64)(unsafe.Pointer(pInt)) -= sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 60745 } 60746 60747 func sumintFinal(tls *libc.TLS, ctx uintptr) { 60748 var res sqlite3_int64 = int64(0) 60749 var pInt uintptr 60750 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 60751 if pInt != 0 { 60752 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 60753 } 60754 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 60755 } 60756 60757 func sumintValue(tls *libc.TLS, ctx uintptr) { 60758 var res sqlite3_int64 = int64(0) 60759 var pInt uintptr 60760 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 60761 if pInt != 0 { 60762 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 60763 } 60764 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 60765 } 60766 60767 func test_create_sumint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60768 bp := tls.Alloc(8) 60769 defer tls.Free(8) 60770 60771 var rc int32 60772 60773 if objc != 2 { 60774 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60775 return TCL_ERROR 60776 } 60777 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60778 return TCL_ERROR 60779 } 60780 60781 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39390, 1, SQLITE_UTF8, uintptr(0), 60782 *(*uintptr)(unsafe.Pointer(&struct { 60783 f func(*libc.TLS, uintptr, int32, uintptr) 60784 }{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 { 60785 f func(*libc.TLS, uintptr, int32, uintptr) 60786 }{sumintInverse})), 60787 uintptr(0)) 60788 60789 if rc != SQLITE_OK { 60790 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60791 return TCL_ERROR 60792 } 60793 return TCL_OK 60794 } 60795 60796 func test_override_sum(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60797 bp := tls.Alloc(8) 60798 defer tls.Free(8) 60799 60800 var rc int32 60801 60802 if objc != 2 { 60803 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60804 return TCL_ERROR 60805 } 60806 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60807 return TCL_ERROR 60808 } 60809 60810 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39397, -1, SQLITE_UTF8, uintptr(0), 60811 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 60812 f func(*libc.TLS, uintptr, int32, uintptr) 60813 }{sumintStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintFinal}))) 60814 60815 if rc != SQLITE_OK { 60816 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 60817 return TCL_ERROR 60818 } 60819 return TCL_OK 60820 } 60821 60822 func Sqlitetest_window_Init(tls *libc.TLS, interp uintptr) int32 { 60823 var i int32 60824 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd14))/uint64(unsafe.Sizeof(struct { 60825 FzName uintptr 60826 FxProc uintptr 60827 FclientData int32 60828 F__ccgo_pad1 [4]byte 60829 }{})); i++ { 60830 var c ClientData = uintptr(intptr_t(aObjCmd14[i].FclientData)) 60831 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd14[i].FzName, aObjCmd14[i].FxProc, c, uintptr(0)) 60832 } 60833 return TCL_OK 60834 } 60835 60836 var aObjCmd14 = [4]struct { 60837 FzName uintptr 60838 FxProc uintptr 60839 FclientData int32 60840 F__ccgo_pad1 [4]byte 60841 }{ 60842 {FzName: ts + 39401, FxProc: 0}, 60843 {FzName: ts + 39432, FxProc: 0}, 60844 {FzName: ts + 39467, FxProc: 0}, 60845 {FzName: ts + 39486, FxProc: 0}, 60846 } 60847 60848 func init() { 60849 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 8)) = cfClose 60850 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 16)) = cfRead 60851 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 24)) = cfWrite 60852 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 32)) = cfTruncate 60853 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 40)) = cfSync 60854 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 48)) = cfFileSize 60855 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 56)) = cfLock 60856 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 64)) = cfUnlock 60857 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 72)) = cfCheckReservedLock 60858 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 80)) = cfFileControl 60859 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 88)) = cfSectorSize 60860 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 96)) = cfDeviceCharacteristics 60861 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 104)) = cfShmMap 60862 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 112)) = cfShmLock 60863 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 120)) = cfShmBarrier 60864 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 128)) = cfShmUnmap 60865 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 8)) = csvtabCreate 60866 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 16)) = csvtabConnect 60867 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 24)) = csvtabBestIndex 60868 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 32)) = csvtabDisconnect 60869 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 40)) = csvtabDisconnect 60870 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 48)) = csvtabOpen 60871 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 56)) = csvtabClose 60872 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 64)) = csvtabFilter 60873 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 72)) = csvtabNext 60874 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 80)) = csvtabEof 60875 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 88)) = csvtabColumn 60876 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 96)) = csvtabRowid 60877 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 8)) = csvtabCreate 60878 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 16)) = csvtabConnect 60879 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 24)) = csvtabBestIndex 60880 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 32)) = csvtabDisconnect 60881 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 40)) = csvtabDisconnect 60882 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 48)) = csvtabOpen 60883 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 56)) = csvtabClose 60884 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 64)) = csvtabFilter 60885 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 72)) = csvtabNext 60886 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 80)) = csvtabEof 60887 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 88)) = csvtabColumn 60888 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 96)) = csvtabRowid 60889 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 104)) = csvtabUpdate 60890 *(*func(*libc.TLS, ClientData, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 16)) = incrblobClose 60891 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 24)) = incrblobInput 60892 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 32)) = incrblobOutput 60893 *(*func(*libc.TLS, ClientData, int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 40)) = incrblobSeek 60894 *(*func(*libc.TLS, ClientData, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 64)) = incrblobWatch 60895 *(*func(*libc.TLS, ClientData, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 72)) = incrblobHandle 60896 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 8)) = f5tCreateTokenizer 60897 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 32)) = f5tTokenizerReturn 60898 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 56)) = f5tTokenize 60899 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 80)) = f5tCreateFunction 60900 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 104)) = f5tMayBeCorrupt 60901 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 128)) = f5tTokenHash 60902 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 152)) = f5tRegisterMatchinfo 60903 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 176)) = f5tRegisterTok 60904 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 60905 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60906 }{db_enter})) 60907 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 60908 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60909 }{db_leave})) 60910 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 60911 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60912 }{sqlite3_mprintf_int})) 60913 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 60914 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60915 }{sqlite3_mprintf_int64})) 60916 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 60917 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60918 }{sqlite3_mprintf_long})) 60919 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 60920 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60921 }{sqlite3_mprintf_str})) 60922 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 60923 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60924 }{sqlite3_snprintf_str})) 60925 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 60926 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60927 }{sqlite3_mprintf_stronly})) 60928 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 60929 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60930 }{sqlite3_mprintf_double})) 60931 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 60932 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60933 }{sqlite3_mprintf_scaled})) 60934 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 60935 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60936 }{sqlite3_mprintf_hexdouble})) 60937 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 60938 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60939 }{test_mprintf_z})) 60940 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 60941 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60942 }{test_mprintf_n})) 60943 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 60944 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60945 }{test_snprintf_int})) 60946 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 60947 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60948 }{test_last_rowid})) 60949 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 60950 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60951 }{test_exec_printf})) 60952 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 60953 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60954 }{test_exec_hex})) 60955 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 60956 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60957 }{test_exec})) 60958 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 60959 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60960 }{test_exec_nr})) 60961 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 60962 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60963 }{test_get_table_printf})) 60964 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 60965 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60966 }{sqlite_test_close})) 60967 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 344)) = *(*uintptr)(unsafe.Pointer(&struct { 60968 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60969 }{sqlite_test_close_v2})) 60970 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 60971 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60972 }{test_create_function})) 60973 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 376)) = *(*uintptr)(unsafe.Pointer(&struct { 60974 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60975 }{test_create_aggregate})) 60976 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 60977 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60978 }{test_drop_modules})) 60979 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 408)) = *(*uintptr)(unsafe.Pointer(&struct { 60980 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60981 }{test_register_func})) 60982 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 60983 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60984 }{sqlite_abort})) 60985 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 440)) = *(*uintptr)(unsafe.Pointer(&struct { 60986 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60987 }{test_bind})) 60988 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 60989 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60990 }{test_breakpoint})) 60991 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 472)) = *(*uintptr)(unsafe.Pointer(&struct { 60992 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60993 }{test_key})) 60994 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 60995 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60996 }{test_rekey})) 60997 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 504)) = *(*uintptr)(unsafe.Pointer(&struct { 60998 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60999 }{test_interrupt})) 61000 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 61001 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61002 }{delete_function})) 61003 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 536)) = *(*uintptr)(unsafe.Pointer(&struct { 61004 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61005 }{delete_collation})) 61006 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 61007 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61008 }{get_autocommit})) 61009 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 568)) = *(*uintptr)(unsafe.Pointer(&struct { 61010 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61011 }{test_busy_timeout})) 61012 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 584)) = *(*uintptr)(unsafe.Pointer(&struct { 61013 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61014 }{test_printf})) 61015 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 600)) = *(*uintptr)(unsafe.Pointer(&struct { 61016 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61017 }{test_io_trace})) 61018 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 616)) = *(*uintptr)(unsafe.Pointer(&struct { 61019 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61020 }{clang_sanitize_address})) 61021 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 61022 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61023 }{pager_open})) 61024 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 61025 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61026 }{pager_close})) 61027 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 61028 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61029 }{pager_commit})) 61030 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 61031 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61032 }{pager_rollback})) 61033 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 61034 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61035 }{pager_stmt_begin})) 61036 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 61037 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61038 }{pager_stmt_commit})) 61039 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 61040 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61041 }{pager_stmt_rollback})) 61042 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 61043 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61044 }{pager_stats})) 61045 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 61046 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61047 }{pager_pagecount})) 61048 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 61049 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61050 }{page_get})) 61051 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 61052 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61053 }{page_lookup})) 61054 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 61055 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61056 }{page_unref})) 61057 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 61058 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61059 }{page_read})) 61060 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 61061 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61062 }{page_write})) 61063 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 61064 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61065 }{page_number})) 61066 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 61067 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61068 }{pager_truncate})) 61069 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 61070 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61071 }{fake_big_file})) 61072 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 61073 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61074 }{testBitvecBuiltinTest})) 61075 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 61076 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61077 }{testPendingByte})) 61078 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 61079 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61080 }{faultInstallCmd})) 61081 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 61082 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61083 }{btree_open})) 61084 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 61085 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61086 }{btree_close})) 61087 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 61088 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61089 }{btree_begin_transaction})) 61090 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 61091 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61092 }{btree_pager_stats})) 61093 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 61094 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61095 }{btree_cursor})) 61096 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 61097 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61098 }{btree_close_cursor})) 61099 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 61100 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61101 }{btree_next})) 61102 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 61103 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61104 }{btree_eof})) 61105 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 61106 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61107 }{btree_payload_size})) 61108 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 61109 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61110 }{btree_first})) 61111 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 61112 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61113 }{btree_varint_test})) 61114 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 61115 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61116 }{btree_from_db})) 61117 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 61118 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61119 }{btree_ismemdb})) 61120 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 61121 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61122 }{btree_set_cache_size})) 61123 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 61124 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61125 }{tcl_thread_create})) 61126 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 61127 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61128 }{tcl_thread_wait})) 61129 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 61130 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61131 }{tcl_thread_halt})) 61132 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 61133 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61134 }{tcl_thread_argc})) 61135 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 61136 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61137 }{tcl_thread_argv})) 61138 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 61139 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61140 }{tcl_thread_colname})) 61141 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 61142 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61143 }{tcl_thread_result})) 61144 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 61145 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61146 }{tcl_thread_error})) 61147 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 61148 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61149 }{tcl_thread_compile})) 61150 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 61151 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61152 }{tcl_thread_step})) 61153 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 61154 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61155 }{tcl_thread_finalize})) 61156 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 61157 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61158 }{tcl_thread_swap})) 61159 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 61160 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61161 }{tcl_thread_db_get})) 61162 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 61163 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61164 }{tcl_thread_db_put})) 61165 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 61166 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61167 }{tcl_thread_stmt_get})) 61168 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 61169 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61170 }{binarize})) 61171 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 61172 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61173 }{test_value_overhead})) 61174 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 61175 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61176 }{test_translate})) 61177 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 61178 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61179 }{test_translate_selftest})) 61180 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 61181 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61182 }{tcl_client_create})) 61183 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 61184 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61185 }{tcl_client_wait})) 61186 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 61187 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61188 }{tcl_client_halt})) 61189 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 61190 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61191 }{tcl_client_argc})) 61192 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 61193 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61194 }{tcl_client_argv})) 61195 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 61196 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61197 }{tcl_client_colname})) 61198 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 61199 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61200 }{tcl_client_result})) 61201 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 61202 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61203 }{tcl_client_error})) 61204 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 61205 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61206 }{tcl_client_compile})) 61207 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 61208 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61209 }{tcl_client_step})) 61210 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 61211 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61212 }{tcl_client_reset})) 61213 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 61214 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61215 }{tcl_client_finalize})) 61216 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 61217 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61218 }{tcl_client_swap})) 61219 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 8)) = test_multiplex_initialize 61220 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 24)) = test_multiplex_shutdown 61221 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 40)) = test_multiplex_control 61222 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 61223 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61224 }{test_shutdown})) 61225 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 61226 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61227 }{test_initialize})) 61228 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 61229 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61230 }{test_config})) 61231 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 61232 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61233 }{test_enter_static_mutex})) 61234 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 61235 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61236 }{test_leave_static_mutex})) 61237 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 61238 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61239 }{test_enter_db_mutex})) 61240 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 61241 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61242 }{test_leave_db_mutex})) 61243 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 61244 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61245 }{test_alloc_mutex})) 61246 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 61247 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61248 }{test_install_mutex_counters})) 61249 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 61250 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61251 }{test_read_mutex_counters})) 61252 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 61253 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61254 }{test_clear_mutex_counters})) 61255 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 8)) = test_quota_initialize 61256 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 24)) = test_quota_shutdown 61257 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 40)) = test_quota_set 61258 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 56)) = test_quota_file 61259 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 72)) = test_quota_dump 61260 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 88)) = test_quota_fopen 61261 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 104)) = test_quota_fread 61262 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 120)) = test_quota_fwrite 61263 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 136)) = test_quota_fclose 61264 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 152)) = test_quota_fflush 61265 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 168)) = test_quota_fseek 61266 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 184)) = test_quota_rewind 61267 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 200)) = test_quota_ftell 61268 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 216)) = test_quota_ftruncate 61269 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 232)) = test_quota_file_size 61270 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 248)) = test_quota_file_truesize 61271 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 264)) = test_quota_file_mtime 61272 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 280)) = test_quota_remove 61273 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 296)) = test_quota_glob 61274 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 312)) = test_quota_file_available 61275 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 328)) = test_quota_ferror 61276 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 8)) = sqlite3_amatch_init 61277 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 24)) = sqlite3_appendvfs_init 61278 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 40)) = sqlite3_carray_init 61279 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 56)) = sqlite3_closure_init 61280 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 72)) = sqlite3_csv_init 61281 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 88)) = sqlite3_decimal_init 61282 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 104)) = sqlite3_eval_init 61283 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 120)) = sqlite3_explain_init 61284 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 136)) = sqlite3_fileio_init 61285 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 152)) = sqlite3_fuzzer_init 61286 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 168)) = sqlite3_ieee_init 61287 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 184)) = sqlite3_nextchar_init 61288 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 200)) = sqlite3_percentile_init 61289 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 216)) = sqlite3_prefixes_init 61290 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 232)) = sqlite3_qpvtab_init 61291 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 248)) = sqlite3_regexp_init 61292 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 264)) = sqlite3_remember_init 61293 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 280)) = sqlite3_series_init 61294 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 296)) = sqlite3_spellfix_init 61295 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 312)) = sqlite3_totype_init 61296 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 328)) = sqlite3_unionvtab_init 61297 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 344)) = sqlite3_wholenumber_init 61298 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 16)) = decimalFunc 61299 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 40)) = decimalCmpFunc 61300 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 64)) = decimalAddFunc 61301 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 88)) = decimalSubFunc 61302 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 112)) = decimalMulFunc 61303 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 16)) = ieee754func 61304 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 40)) = ieee754func 61305 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 64)) = ieee754func 61306 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 88)) = ieee754func 61307 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 112)) = ieee754func_to_blob 61308 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 136)) = ieee754func_from_blob 61309 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 16)) = randStr 61310 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 40)) = test_destructor 61311 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 64)) = test_destructor16 61312 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 88)) = testHexToUtf16be 61313 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 112)) = testHexToUtf16le 61314 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 136)) = testHexToUtf8 61315 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 160)) = test_destructor_count 61316 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 184)) = test_auxdata 61317 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 208)) = test_error 61318 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 232)) = test_error 61319 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 256)) = test_eval 61320 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 280)) = test_isolation 61321 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 304)) = counterFunc 61322 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 328)) = real2hex 61323 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 352)) = test_decode 61324 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 376)) = test_extract 61325 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 400)) = test_zeroblob 61326 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 424)) = test_getsubtype 61327 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 448)) = test_setsubtype 61328 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 472)) = test_frombind 61329 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 8)) = test_sqlite3rbu 61330 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 24)) = test_sqlite3rbu_vacuum 61331 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 40)) = test_sqlite3rbu_create_vfs 61332 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 56)) = test_sqlite3rbu_destroy_vfs 61333 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 72)) = test_sqlite3rbu_internal_test 61334 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 8)) = test_sqlite3_db_config 61335 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 32)) = test_sqlite3_txn_state 61336 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 56)) = test_bad_behavior 61337 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 64)) = uintptr(unsafe.Pointer(&iZero)) 61338 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 80)) = test_register_dbstat_vtab 61339 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 104)) = get_sqlite_pointer 61340 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 128)) = test_intarray_addr 61341 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 152)) = test_int64array_addr 61342 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 176)) = test_doublearray_addr 61343 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 200)) = test_textarray_addr 61344 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 224)) = test_bind_int 61345 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 248)) = test_bind_zeroblob 61346 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 272)) = test_bind_zeroblob64 61347 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 296)) = test_bind_int64 61348 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 320)) = test_bind_double 61349 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 344)) = test_bind_null 61350 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 368)) = test_bind_text 61351 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 392)) = test_bind_text16 61352 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 416)) = test_bind_blob 61353 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 440)) = test_bind_value_from_select 61354 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 464)) = test_bind_value_from_preupdate 61355 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 488)) = test_carray_bind 61356 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 512)) = test_bind_parameter_count 61357 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 536)) = test_bind_parameter_name 61358 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 560)) = test_bind_parameter_index 61359 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 584)) = test_clear_bindings 61360 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 608)) = test_sleep 61361 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 632)) = test_errcode 61362 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 656)) = test_ex_errcode 61363 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 680)) = test_errmsg 61364 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 704)) = test_error_offset 61365 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 728)) = test_errmsg16 61366 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 752)) = test_open 61367 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 776)) = test_open16 61368 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 800)) = test_open_v2 61369 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 824)) = test_complete16 61370 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 848)) = test_normalize 61371 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 872)) = test_prepare 61372 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 896)) = test_prepare16 61373 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 920)) = test_prepare_v2 61374 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 944)) = test_prepare_v3 61375 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 968)) = test_prepare_tkt3134 61376 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 992)) = test_prepare16_v2 61377 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1016)) = test_finalize 61378 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1040)) = test_stmt_status 61379 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1064)) = test_reset 61380 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1088)) = test_expired 61381 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1112)) = test_transfer_bind 61382 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1136)) = test_changes 61383 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1160)) = test_step 61384 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1184)) = test_sql 61385 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1208)) = test_ex_sql 61386 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1232)) = test_next_stmt 61387 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1256)) = test_stmt_readonly 61388 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1280)) = test_stmt_isexplain 61389 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1304)) = test_stmt_busy 61390 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1328)) = uses_stmt_journal 61391 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1352)) = test_release_memory 61392 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1376)) = test_db_release_memory 61393 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1400)) = test_db_cacheflush 61394 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1424)) = test_system_errno 61395 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1448)) = test_db_filename 61396 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1472)) = test_db_readonly 61397 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1496)) = test_soft_heap_limit 61398 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1520)) = test_soft_heap_limit 61399 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1544)) = test_hard_heap_limit 61400 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1568)) = test_thread_cleanup 61401 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1592)) = test_pager_refcounts 61402 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1616)) = test_load_extension 61403 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1640)) = test_enable_load 61404 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1664)) = test_extended_result_codes 61405 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1688)) = test_limit 61406 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1712)) = test_dbconfig_maindbname_icecube 61407 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1736)) = save_prng_state 61408 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1760)) = restore_prng_state 61409 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1784)) = reset_prng_state 61410 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1808)) = prng_seed 61411 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1832)) = extra_schema_checks 61412 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1856)) = database_never_corrupt 61413 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1880)) = database_may_be_corrupt 61414 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1904)) = optimization_control 61415 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1928)) = runAsObjProc 61416 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1952)) = test_column_count 61417 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1976)) = test_data_count 61418 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2000)) = test_column_type 61419 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2024)) = test_column_blob 61420 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2048)) = test_column_double 61421 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2072)) = test_column_int64 61422 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2096)) = test_stmt_utf8 61423 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2104)) = *(*uintptr)(unsafe.Pointer(&struct { 61424 f func(*libc.TLS, uintptr, int32) uintptr 61425 }{sqlite3.Xsqlite3_column_text})) 61426 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2120)) = test_stmt_utf8 61427 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2128)) = *(*uintptr)(unsafe.Pointer(&struct { 61428 f func(*libc.TLS, uintptr, int32) uintptr 61429 }{sqlite3.Xsqlite3_column_name})) 61430 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2144)) = test_stmt_int 61431 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2152)) = *(*uintptr)(unsafe.Pointer(&struct { 61432 f func(*libc.TLS, uintptr, int32) int32 61433 }{sqlite3.Xsqlite3_column_int})) 61434 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2168)) = test_stmt_int 61435 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2176)) = *(*uintptr)(unsafe.Pointer(&struct { 61436 f func(*libc.TLS, uintptr, int32) int32 61437 }{sqlite3.Xsqlite3_column_bytes})) 61438 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2192)) = test_stmt_utf8 61439 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2200)) = *(*uintptr)(unsafe.Pointer(&struct { 61440 f func(*libc.TLS, uintptr, int32) uintptr 61441 }{sqlite3.Xsqlite3_column_decltype})) 61442 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2216)) = test_stmt_utf8 61443 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2224)) = *(*uintptr)(unsafe.Pointer(&struct { 61444 f func(*libc.TLS, uintptr, int32) uintptr 61445 }{sqlite3.Xsqlite3_column_database_name})) 61446 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2240)) = test_stmt_utf8 61447 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2248)) = *(*uintptr)(unsafe.Pointer(&struct { 61448 f func(*libc.TLS, uintptr, int32) uintptr 61449 }{sqlite3.Xsqlite3_column_table_name})) 61450 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2264)) = test_stmt_utf8 61451 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2272)) = *(*uintptr)(unsafe.Pointer(&struct { 61452 f func(*libc.TLS, uintptr, int32) uintptr 61453 }{sqlite3.Xsqlite3_column_origin_name})) 61454 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2288)) = test_stmt_int 61455 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2296)) = *(*uintptr)(unsafe.Pointer(&struct { 61456 f func(*libc.TLS, uintptr, int32) int32 61457 }{sqlite3.Xsqlite3_column_bytes16})) 61458 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2312)) = test_stmt_utf16 61459 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2320)) = *(*uintptr)(unsafe.Pointer(&struct { 61460 f func(*libc.TLS, uintptr, int32) uintptr 61461 }{sqlite3.Xsqlite3_column_text16})) 61462 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2336)) = test_stmt_utf16 61463 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2344)) = *(*uintptr)(unsafe.Pointer(&struct { 61464 f func(*libc.TLS, uintptr, int32) uintptr 61465 }{sqlite3.Xsqlite3_column_name16})) 61466 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2360)) = add_alignment_test_collations 61467 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2384)) = test_stmt_utf16 61468 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2392)) = *(*uintptr)(unsafe.Pointer(&struct { 61469 f func(*libc.TLS, uintptr, int32) uintptr 61470 }{sqlite3.Xsqlite3_column_decltype16})) 61471 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2408)) = test_stmt_utf16 61472 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2416)) = *(*uintptr)(unsafe.Pointer(&struct { 61473 f func(*libc.TLS, uintptr, int32) uintptr 61474 }{sqlite3.Xsqlite3_column_database_name16})) 61475 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2432)) = test_stmt_utf16 61476 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2440)) = *(*uintptr)(unsafe.Pointer(&struct { 61477 f func(*libc.TLS, uintptr, int32) uintptr 61478 }{sqlite3.Xsqlite3_column_table_name16})) 61479 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2456)) = test_stmt_utf16 61480 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2464)) = *(*uintptr)(unsafe.Pointer(&struct { 61481 f func(*libc.TLS, uintptr, int32) uintptr 61482 }{sqlite3.Xsqlite3_column_origin_name16})) 61483 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2480)) = test_create_collation_v2 61484 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2504)) = test_global_recover 61485 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2528)) = working_64bit_int 61486 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2552)) = vfs_unlink_test 61487 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2576)) = vfs_initfail_test 61488 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2600)) = vfs_unregister_all 61489 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2624)) = vfs_reregister_all 61490 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2648)) = file_control_test 61491 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2672)) = file_control_lasterrno_test 61492 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2696)) = file_control_lockproxy_test 61493 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2720)) = file_control_chunksize_test 61494 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2744)) = file_control_sizehint_test 61495 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2768)) = file_control_data_version 61496 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2792)) = file_control_persist_wal 61497 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2816)) = file_control_powersafe_overwrite 61498 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2840)) = file_control_vfsname 61499 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2864)) = file_control_reservebytes 61500 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2888)) = file_control_tempfilename 61501 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2912)) = file_control_external_reader 61502 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2936)) = vfs_list 61503 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2960)) = test_create_function_v2 61504 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2984)) = test_collate 61505 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3008)) = test_collate_needed 61506 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3032)) = test_function 61507 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3056)) = test_utf16bin_collate 61508 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3080)) = test_errstr 61509 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3104)) = tcl_variable_type 61510 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3128)) = test_enable_shared 61511 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3152)) = sqlite3BtreeSharedCacheReport 61512 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3176)) = test_libversion_number 61513 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3200)) = test_table_column_metadata 61514 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3224)) = test_blob_reopen 61515 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3248)) = test_pcache_stats 61516 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3272)) = test_unlock_notify 61517 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3296)) = test_wal_checkpoint 61518 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3320)) = test_wal_checkpoint_v2 61519 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3344)) = test_wal_autocheckpoint 61520 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3368)) = test_sqlite3_log 61521 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3392)) = test_print_eqp 61522 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3416)) = test_test_control 61523 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3440)) = test_getrusage 61524 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3464)) = tclLoadStaticExtensionCmd 61525 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3488)) = sorter_test_fakeheap 61526 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3512)) = sorter_test_sort4_helper 61527 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3536)) = vfsCurrentTimeInt64 61528 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3560)) = test_snapshot_get 61529 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3584)) = test_snapshot_open 61530 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3608)) = test_snapshot_free 61531 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3632)) = test_snapshot_cmp 61532 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3656)) = test_snapshot_recover 61533 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3680)) = test_snapshot_get_blob 61534 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3704)) = test_snapshot_open_blob 61535 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3728)) = test_snapshot_cmp_blob 61536 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3752)) = test_delete_database 61537 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3776)) = test_atomic_batch_write 61538 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3800)) = test_mmap_warm 61539 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3824)) = test_config_sorterref 61540 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3848)) = test_autovacuum_pages 61541 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3872)) = test_decode_hexdb 61542 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3896)) = test_write_db 61543 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3920)) = test_register_cksumvfs 61544 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3944)) = test_unregister_cksumvfs 61545 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 8)) = test_intarray_create 61546 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 32)) = test_intarray_bind 61547 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 8)) = test_malloc 61548 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 32)) = test_realloc 61549 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 56)) = test_free 61550 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 80)) = test_memset 61551 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 104)) = test_memget 61552 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 128)) = test_memory_used 61553 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 152)) = test_memory_highwater 61554 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 176)) = test_memdebug_backtrace 61555 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 200)) = test_memdebug_dump 61556 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 224)) = test_memdebug_fail 61557 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 248)) = test_memdebug_pending 61558 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 272)) = test_memdebug_settitle 61559 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 296)) = test_memdebug_malloc_count 61560 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 320)) = test_memdebug_log 61561 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 344)) = test_config_pagecache 61562 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 368)) = test_alt_pcache 61563 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 392)) = test_status 61564 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 416)) = test_db_status 61565 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 440)) = test_install_malloc_faultsim 61566 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 464)) = test_config_heap 61567 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 488)) = test_config_heap_size 61568 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 512)) = test_config_memstatus 61569 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 536)) = test_config_lookaside 61570 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 560)) = test_config_error 61571 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 584)) = test_config_uri 61572 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 608)) = test_config_cis 61573 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 632)) = test_config_pmasz 61574 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 656)) = test_db_config_lookaside 61575 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 680)) = test_dump_memsys3 61576 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 704)) = test_dump_memsys3 61577 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 728)) = test_install_memsys3 61578 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 752)) = test_vfs_oom_test 61579 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd12)) + 8)) = register_schema_module 61580 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd13)) + 8)) = register_tclvar_module 61581 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 8)) = test_create_window 61582 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 32)) = test_create_window_misuse 61583 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 56)) = test_create_sumint 61584 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 80)) = test_override_sum 61585 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 8)) = register_echo_module 61586 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 32)) = declare_vtab 61587 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 8)) = c_misuse_test 61588 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 32)) = c_realloc_test 61589 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 56)) = c_collation_test 61590 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd4)) + 8)) = register_tcl_module 61591 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 8)) = test_blob_open 61592 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 24)) = test_blob_close 61593 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 40)) = test_blob_bytes 61594 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 56)) = test_blob_read 61595 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 72)) = test_blob_write 61596 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd6)) + 8)) = register_fs_module 61597 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 8)) = autoinstall_test_funcs 61598 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 24)) = abuse_create_function 61599 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 40)) = install_fts3_rank_function 61600 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 8)) = hexio_read 61601 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 24)) = hexio_write 61602 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 40)) = hexio_get_int 61603 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 56)) = hexio_render_int16 61604 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 72)) = hexio_render_int32 61605 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 88)) = utf8_to_utf8 61606 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 104)) = read_fts3varint 61607 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 120)) = make_fts3record 61608 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 8)) = init_wrapper_install 61609 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 24)) = init_wrapper_query 61610 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 40)) = init_wrapper_uninstall 61611 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 56)) = init_wrapper_clear 61612 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 61613 f func(*libc.TLS, uintptr, int32, int32) int32 61614 }{ts_open})) 61615 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{ts_close})) 61616 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 61617 f func(*libc.TLS, uintptr, int32) int32 61618 }{ts_access})) 61619 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 61620 f func(*libc.TLS, uintptr, size_t) uintptr 61621 }{ts_getcwd})) 61622 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 61623 f func(*libc.TLS, uintptr, uintptr) int32 61624 }{ts_stat})) 61625 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 61626 f func(*libc.TLS, int32, uintptr) int32 61627 }{ts_fstat})) 61628 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 61629 f func(*libc.TLS, int32, off_t) int32 61630 }{ts_ftruncate})) 61631 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 61632 f func(*libc.TLS, int32, int32, uintptr) int32 61633 }{ts_fcntl})) 61634 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 61635 f func(*libc.TLS, int32, uintptr, size_t) int32 61636 }{ts_read})) 61637 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 61638 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 61639 }{ts_pread})) 61640 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 61641 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 61642 }{ts_pread64})) 61643 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 61644 f func(*libc.TLS, int32, uintptr, size_t) int32 61645 }{ts_write})) 61646 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 61647 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 61648 }{ts_pwrite})) 61649 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 61650 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 61651 }{ts_pwrite64})) 61652 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 61653 f func(*libc.TLS, int32, mode_t) int32 61654 }{ts_fchmod})) 61655 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 61656 f func(*libc.TLS, int32, off_t, off_t) int32 61657 }{ts_fallocate})) 61658 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 61659 f func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr 61660 }{ts_mmap})) 61661 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 61662 f func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr 61663 }{ts_mremap})) 61664 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 8)) = amatchConnect 61665 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 16)) = amatchConnect 61666 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 24)) = amatchBestIndex 61667 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 32)) = amatchDisconnect 61668 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 40)) = amatchDisconnect 61669 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 48)) = amatchOpen 61670 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 56)) = amatchClose 61671 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 64)) = amatchFilter 61672 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 72)) = amatchNext 61673 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 80)) = amatchEof 61674 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 88)) = amatchColumn 61675 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 96)) = amatchRowid 61676 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 104)) = amatchUpdate 61677 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 8)) = apndClose 61678 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 16)) = apndRead 61679 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 24)) = apndWrite 61680 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 32)) = apndTruncate 61681 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 40)) = apndSync 61682 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 48)) = apndFileSize 61683 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 56)) = apndLock 61684 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 64)) = apndUnlock 61685 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 72)) = apndCheckReservedLock 61686 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 80)) = apndFileControl 61687 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 88)) = apndSectorSize 61688 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 96)) = apndDeviceCharacteristics 61689 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 104)) = apndShmMap 61690 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 112)) = apndShmLock 61691 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 120)) = apndShmBarrier 61692 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 128)) = apndShmUnmap 61693 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 136)) = apndFetch 61694 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 144)) = apndUnfetch 61695 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 40)) = apndOpen 61696 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 48)) = apndDelete 61697 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 56)) = apndAccess 61698 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 64)) = apndFullPathname 61699 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 72)) = apndDlOpen 61700 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 80)) = apndDlError 61701 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 88)) = apndDlSym 61702 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 96)) = apndDlClose 61703 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 104)) = apndRandomness 61704 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 112)) = apndSleep 61705 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 120)) = apndCurrentTime 61706 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 128)) = apndGetLastError 61707 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 136)) = apndCurrentTimeInt64 61708 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 144)) = apndSetSystemCall 61709 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 152)) = apndGetSystemCall 61710 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 160)) = apndNextSystemCall 61711 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 16)) = carrayConnect 61712 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 24)) = carrayBestIndex 61713 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 32)) = carrayDisconnect 61714 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 48)) = carrayOpen 61715 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 56)) = carrayClose 61716 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 64)) = carrayFilter 61717 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 72)) = carrayNext 61718 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 80)) = carrayEof 61719 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 88)) = carrayColumn 61720 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 96)) = carrayRowid 61721 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 8)) = cksmClose 61722 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 16)) = cksmRead 61723 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 24)) = cksmWrite 61724 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 32)) = cksmTruncate 61725 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 40)) = cksmSync 61726 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 48)) = cksmFileSize 61727 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 56)) = cksmLock 61728 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 64)) = cksmUnlock 61729 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 72)) = cksmCheckReservedLock 61730 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 80)) = cksmFileControl 61731 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 88)) = cksmSectorSize 61732 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 96)) = cksmDeviceCharacteristics 61733 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 104)) = cksmShmMap 61734 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 112)) = cksmShmLock 61735 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 120)) = cksmShmBarrier 61736 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 128)) = cksmShmUnmap 61737 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 136)) = cksmFetch 61738 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 144)) = cksmUnfetch 61739 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 40)) = cksmOpen 61740 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 48)) = cksmDelete 61741 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 56)) = cksmAccess 61742 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 64)) = cksmFullPathname 61743 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 72)) = cksmDlOpen 61744 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 80)) = cksmDlError 61745 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 88)) = cksmDlSym 61746 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 96)) = cksmDlClose 61747 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 104)) = cksmRandomness 61748 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 112)) = cksmSleep 61749 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 120)) = cksmCurrentTime 61750 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 128)) = cksmGetLastError 61751 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 136)) = cksmCurrentTimeInt64 61752 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 144)) = cksmSetSystemCall 61753 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 152)) = cksmGetSystemCall 61754 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 160)) = cksmNextSystemCall 61755 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 8)) = closureConnect 61756 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 16)) = closureConnect 61757 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 24)) = closureBestIndex 61758 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 32)) = closureDisconnect 61759 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 40)) = closureDisconnect 61760 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 48)) = closureOpen 61761 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 56)) = closureClose 61762 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 64)) = closureFilter 61763 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 72)) = closureNext 61764 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 80)) = closureEof 61765 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 88)) = closureColumn 61766 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 96)) = closureRowid 61767 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 40)) = cfOpen 61768 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 48)) = cfDelete 61769 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 56)) = cfAccess 61770 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 64)) = cfFullPathname 61771 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 72)) = cfDlOpen 61772 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 80)) = cfDlError 61773 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 88)) = cfDlSym 61774 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 96)) = cfDlClose 61775 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 104)) = cfRandomness 61776 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 112)) = cfSleep 61777 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 120)) = cfCurrentTime 61778 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 128)) = cfGetLastError 61779 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 8)) = devsymClose 61780 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 16)) = devsymRead 61781 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 24)) = devsymWrite 61782 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 32)) = devsymTruncate 61783 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 40)) = devsymSync 61784 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 48)) = devsymFileSize 61785 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 56)) = devsymLock 61786 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 64)) = devsymUnlock 61787 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 72)) = devsymCheckReservedLock 61788 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 80)) = devsymFileControl 61789 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 88)) = devsymSectorSize 61790 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 96)) = devsymDeviceCharacteristics 61791 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 104)) = devsymShmMap 61792 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 112)) = devsymShmLock 61793 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 120)) = devsymShmBarrier 61794 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 128)) = devsymShmUnmap 61795 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 40)) = devsymOpen 61796 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 48)) = devsymDelete 61797 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 56)) = devsymAccess 61798 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 64)) = devsymFullPathname 61799 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 104)) = devsymRandomness 61800 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 112)) = devsymSleep 61801 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 120)) = devsymCurrentTime 61802 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 8)) = echoCreate 61803 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 16)) = echoConnect 61804 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 24)) = echoBestIndex 61805 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 32)) = echoDisconnect 61806 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 40)) = echoDestroy 61807 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 48)) = echoOpen 61808 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 56)) = echoClose 61809 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 64)) = echoFilter 61810 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 72)) = echoNext 61811 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 80)) = echoEof 61812 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 88)) = echoColumn 61813 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 96)) = echoRowid 61814 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 104)) = echoUpdate 61815 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 112)) = echoBegin 61816 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 120)) = echoSync 61817 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 128)) = echoCommit 61818 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 136)) = echoRollback 61819 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 144)) = echoFindFunction 61820 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 152)) = echoRename 61821 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 8)) = echoCreate 61822 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 16)) = echoConnect 61823 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 24)) = echoBestIndex 61824 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 32)) = echoDisconnect 61825 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 40)) = echoDestroy 61826 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 48)) = echoOpen 61827 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 56)) = echoClose 61828 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 64)) = echoFilter 61829 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 72)) = echoNext 61830 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 80)) = echoEof 61831 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 88)) = echoColumn 61832 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 96)) = echoRowid 61833 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 104)) = echoUpdate 61834 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 112)) = echoBegin 61835 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 120)) = echoSync 61836 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 128)) = echoCommit 61837 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 136)) = echoRollback 61838 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 144)) = echoFindFunction 61839 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 152)) = echoRename 61840 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 160)) = echoSavepoint 61841 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 168)) = echoRelease 61842 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 176)) = echoRollbackTo 61843 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 8)) = expertConnect 61844 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 16)) = expertConnect 61845 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 24)) = expertBestIndex 61846 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 32)) = expertDisconnect 61847 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 40)) = expertDisconnect 61848 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 48)) = expertOpen 61849 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 56)) = expertClose 61850 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 64)) = expertFilter 61851 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 72)) = expertNext 61852 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 80)) = expertEof 61853 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 88)) = expertColumn 61854 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 96)) = expertRowid 61855 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 104)) = expertUpdate 61856 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 16)) = explainConnect 61857 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 24)) = explainBestIndex 61858 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 32)) = explainDisconnect 61859 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 48)) = explainOpen 61860 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 56)) = explainClose 61861 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 64)) = explainFilter 61862 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 72)) = explainNext 61863 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 80)) = explainEof 61864 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 88)) = explainColumn 61865 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 96)) = explainRowid 61866 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 8)) = fsConnect 61867 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 16)) = fsConnect 61868 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 24)) = fsBestIndex 61869 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 32)) = fsDisconnect 61870 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 40)) = fsDisconnect 61871 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 48)) = fsOpen 61872 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 56)) = fsClose 61873 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 64)) = fsFilter 61874 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 72)) = fsNext 61875 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 80)) = fsEof 61876 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 88)) = fsColumn 61877 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 96)) = fsRowid 61878 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 8)) = fsClose1 61879 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 16)) = fsRead 61880 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 24)) = fsWrite 61881 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 32)) = fsTruncate 61882 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 40)) = fsSync 61883 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 48)) = fsFileSize 61884 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 56)) = fsLock 61885 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 64)) = fsUnlock 61886 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 72)) = fsCheckReservedLock 61887 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 80)) = fsFileControl 61888 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 88)) = fsSectorSize 61889 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 96)) = fsDeviceCharacteristics 61890 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 40)) = fsOpen1 61891 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 48)) = fsDelete 61892 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 56)) = fsAccess 61893 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 64)) = fsFullPathname 61894 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 72)) = fsDlOpen 61895 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 80)) = fsDlError 61896 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 88)) = fsDlSym 61897 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 96)) = fsDlClose 61898 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 104)) = fsRandomness 61899 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 112)) = fsSleep 61900 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 120)) = fsCurrentTime 61901 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 8)) = fsdirConnect1 61902 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 16)) = fsdirConnect1 61903 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 24)) = fsdirBestIndex1 61904 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 32)) = fsdirDisconnect1 61905 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 40)) = fsdirDisconnect1 61906 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 48)) = fsdirOpen1 61907 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 56)) = fsdirClose1 61908 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 64)) = fsdirFilter1 61909 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 72)) = fsdirNext1 61910 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 80)) = fsdirEof1 61911 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 88)) = fsdirColumn1 61912 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 96)) = fsdirRowid1 61913 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 16)) = fsdirConnect 61914 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 24)) = fsdirBestIndex 61915 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 32)) = fsdirDisconnect 61916 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 48)) = fsdirOpen 61917 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 56)) = fsdirClose 61918 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 64)) = fsdirFilter 61919 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 72)) = fsdirNext 61920 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 80)) = fsdirEof 61921 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 88)) = fsdirColumn 61922 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 96)) = fsdirRowid 61923 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 8)) = fstreeConnect 61924 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 16)) = fstreeConnect 61925 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 24)) = fstreeBestIndex 61926 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 32)) = fstreeDisconnect 61927 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 40)) = fstreeDisconnect 61928 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 48)) = fstreeOpen 61929 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 56)) = fstreeClose 61930 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 64)) = fstreeFilter 61931 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 72)) = fstreeNext 61932 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 80)) = fstreeEof 61933 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 88)) = fstreeColumn 61934 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 96)) = fstreeRowid 61935 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 8)) = fts5tokConnectMethod 61936 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 16)) = fts5tokConnectMethod 61937 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 24)) = fts5tokBestIndexMethod 61938 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 32)) = fts5tokDisconnectMethod 61939 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 40)) = fts5tokDisconnectMethod 61940 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 48)) = fts5tokOpenMethod 61941 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 56)) = fts5tokCloseMethod 61942 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 64)) = fts5tokFilterMethod 61943 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 72)) = fts5tokNextMethod 61944 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 80)) = fts5tokEofMethod 61945 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 88)) = fts5tokColumnMethod 61946 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 96)) = fts5tokRowidMethod 61947 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 8)) = fuzzerConnect 61948 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 16)) = fuzzerConnect 61949 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 24)) = fuzzerBestIndex 61950 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 32)) = fuzzerDisconnect 61951 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 40)) = fuzzerDisconnect 61952 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 48)) = fuzzerOpen 61953 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 56)) = fuzzerClose 61954 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 64)) = fuzzerFilter 61955 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 72)) = fuzzerNext 61956 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 80)) = fuzzerEof 61957 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 88)) = fuzzerColumn 61958 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 96)) = fuzzerRowid 61959 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 8)) = intarrayCreate 61960 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 16)) = intarrayCreate 61961 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 24)) = intarrayBestIndex 61962 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 32)) = intarrayDestroy 61963 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 40)) = intarrayDestroy 61964 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 48)) = intarrayOpen 61965 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 56)) = intarrayClose 61966 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 64)) = intarrayFilter 61967 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 72)) = intarrayNext 61968 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 80)) = intarrayEof 61969 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 88)) = intarrayColumn 61970 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 96)) = intarrayRowid 61971 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 8)) = jtClose 61972 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 16)) = jtRead 61973 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 24)) = jtWrite 61974 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 32)) = jtTruncate 61975 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 40)) = jtSync 61976 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 48)) = jtFileSize 61977 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 56)) = jtLock 61978 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 64)) = jtUnlock 61979 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 72)) = jtCheckReservedLock 61980 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 80)) = jtFileControl 61981 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 88)) = jtSectorSize 61982 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 96)) = jtDeviceCharacteristics 61983 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 40)) = jtOpen 61984 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 48)) = jtDelete 61985 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 56)) = jtAccess 61986 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 64)) = jtFullPathname 61987 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 72)) = jtDlOpen 61988 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 80)) = jtDlError 61989 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 88)) = jtDlSym 61990 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 96)) = jtDlClose 61991 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 104)) = jtRandomness 61992 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 112)) = jtSleep 61993 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 120)) = jtCurrentTime 61994 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 128)) = jtGetLastError 61995 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 136)) = jtCurrentTimeInt64 61996 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 16)) = prefixesConnect 61997 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 24)) = prefixesBestIndex 61998 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 32)) = prefixesDisconnect 61999 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 48)) = prefixesOpen 62000 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 56)) = prefixesClose 62001 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 64)) = prefixesFilter 62002 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 72)) = prefixesNext 62003 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 80)) = prefixesEof 62004 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 88)) = prefixesColumn 62005 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 96)) = prefixesRowid 62006 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&pzNeededCollation)) + 0)) = uintptr(unsafe.Pointer(&zNeededCollation)) 62007 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 16)) = qpvtabConnect 62008 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 24)) = qpvtabBestIndex 62009 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 32)) = qpvtabDisconnect 62010 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 48)) = qpvtabOpen 62011 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 56)) = qpvtabClose 62012 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 64)) = qpvtabFilter 62013 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 72)) = qpvtabNext 62014 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 80)) = qpvtabEof 62015 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 88)) = qpvtabColumn 62016 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 96)) = qpvtabRowid 62017 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 8)) = schemaCreate 62018 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 16)) = schemaCreate 62019 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 24)) = schemaBestIndex 62020 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 32)) = schemaDestroy 62021 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 40)) = schemaDestroy 62022 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 48)) = schemaOpen 62023 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 56)) = schemaClose 62024 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 64)) = schemaFilter 62025 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 72)) = schemaNext 62026 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 80)) = schemaEof 62027 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 88)) = schemaColumn 62028 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 96)) = schemaRowid 62029 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 16)) = seriesConnect 62030 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 24)) = seriesBestIndex 62031 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 32)) = seriesDisconnect 62032 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 48)) = seriesOpen 62033 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 56)) = seriesClose 62034 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 64)) = seriesFilter 62035 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 72)) = seriesNext 62036 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 80)) = seriesEof 62037 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 88)) = seriesColumn 62038 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 96)) = seriesRowid 62039 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 8)) = spellfix1Create 62040 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 16)) = spellfix1Connect 62041 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 24)) = spellfix1BestIndex 62042 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 32)) = spellfix1Disconnect 62043 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 40)) = spellfix1Destroy 62044 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 48)) = spellfix1Open 62045 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 56)) = spellfix1Close 62046 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 64)) = spellfix1Filter 62047 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 72)) = spellfix1Next 62048 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 80)) = spellfix1Eof 62049 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 88)) = spellfix1Column 62050 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 96)) = spellfix1Rowid 62051 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 104)) = spellfix1Update 62052 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 152)) = spellfix1Rename 62053 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 8)) = tclConnect 62054 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 16)) = tclConnect 62055 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 24)) = tclBestIndex 62056 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 32)) = tclDisconnect 62057 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 40)) = tclDisconnect 62058 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 48)) = tclOpen 62059 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 56)) = tclClose 62060 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 64)) = tclFilter 62061 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 72)) = tclNext 62062 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 80)) = tclEof 62063 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 88)) = tclColumn 62064 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 96)) = tclRowid 62065 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 8)) = tclvarConnect 62066 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 16)) = tclvarConnect 62067 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 24)) = tclvarBestIndex 62068 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 32)) = tclvarDisconnect 62069 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 40)) = tclvarDisconnect 62070 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 48)) = tclvarOpen 62071 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 56)) = tclvarClose 62072 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 64)) = tclvarFilter 62073 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 72)) = tclvarNext 62074 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 80)) = tclvarEof 62075 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 88)) = tclvarColumn 62076 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 96)) = tclvarRowid 62077 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 104)) = tclvarUpdate 62078 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 8)) = uintptr(unsafe.Pointer(&testpcacheGlobal)) 62079 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 16)) = testpcacheInit 62080 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 24)) = testpcacheShutdown 62081 *(*func(*libc.TLS, int32, int32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 32)) = testpcacheCreate 62082 *(*func(*libc.TLS, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 40)) = testpcacheCachesize 62083 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 48)) = testpcachePagecount 62084 *(*func(*libc.TLS, uintptr, uint32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 56)) = testpcacheFetch 62085 *(*func(*libc.TLS, uintptr, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 64)) = testpcacheUnpin 62086 *(*func(*libc.TLS, uintptr, uintptr, uint32, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 72)) = testpcacheRekey 62087 *(*func(*libc.TLS, uintptr, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 80)) = testpcacheTruncate 62088 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 88)) = testpcacheDestroy 62089 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 8)) = tmpClose 62090 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 16)) = tmpRead 62091 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 24)) = tmpWrite 62092 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 32)) = tmpTruncate 62093 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 40)) = tmpSync 62094 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 48)) = tmpFileSize 62095 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 56)) = tmpLock 62096 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 64)) = tmpUnlock 62097 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 72)) = tmpCheckReservedLock 62098 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 80)) = tmpFileControl 62099 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 88)) = tmpSectorSize 62100 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 96)) = tmpDeviceCharacteristics 62101 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 8)) = tvfsClose 62102 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 16)) = tvfsRead 62103 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 24)) = tvfsWrite 62104 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 32)) = tvfsTruncate 62105 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 40)) = tvfsSync 62106 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 48)) = tvfsFileSize 62107 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 56)) = tvfsLock 62108 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 64)) = tvfsUnlock 62109 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 72)) = tvfsCheckReservedLock 62110 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 80)) = tvfsFileControl 62111 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 88)) = tvfsSectorSize 62112 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 96)) = tvfsDeviceCharacteristics 62113 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 104)) = tvfsShmMap 62114 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 112)) = tvfsShmLock 62115 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 120)) = tvfsShmBarrier 62116 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 128)) = tvfsShmUnmap 62117 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 136)) = tvfsFetch 62118 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 144)) = tvfsUnfetch 62119 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 40)) = tvfsOpen 62120 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 48)) = tvfsDelete 62121 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 56)) = tvfsAccess 62122 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 64)) = tvfsFullPathname 62123 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 104)) = tvfsRandomness 62124 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 112)) = tvfsSleep 62125 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 120)) = tvfsCurrentTime 62126 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 8)) = unionConnect 62127 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 16)) = unionConnect 62128 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 24)) = unionBestIndex 62129 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 32)) = unionDisconnect 62130 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 40)) = unionDisconnect 62131 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 48)) = unionOpen 62132 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 56)) = unionClose 62133 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 64)) = unionFilter 62134 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 72)) = unionNext 62135 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 80)) = unionEof 62136 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 88)) = unionColumn 62137 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 96)) = unionRowid 62138 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 8)) = vfslogClose 62139 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 16)) = vfslogRead 62140 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 24)) = vfslogWrite 62141 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 32)) = vfslogTruncate 62142 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 40)) = vfslogSync 62143 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 48)) = vfslogFileSize 62144 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 56)) = vfslogLock 62145 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 64)) = vfslogUnlock 62146 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 72)) = vfslogCheckReservedLock 62147 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 80)) = vfslogFileControl 62148 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 88)) = vfslogSectorSize 62149 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 96)) = vfslogDeviceCharacteristics 62150 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 104)) = vfslogShmMap 62151 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 112)) = vfslogShmLock 62152 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 120)) = vfslogShmBarrier 62153 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 128)) = vfslogShmUnmap 62154 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 8)) = vlogConnect 62155 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 16)) = vlogConnect 62156 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 24)) = vlogBestIndex 62157 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 32)) = vlogDisconnect 62158 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 40)) = vlogDisconnect 62159 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 48)) = vlogOpen 62160 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 56)) = vlogClose 62161 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 64)) = vlogFilter 62162 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 72)) = vlogNext 62163 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 80)) = vlogEof 62164 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 88)) = vlogColumn 62165 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 96)) = vlogRowid 62166 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 40)) = vfslogOpen 62167 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 48)) = vfslogDelete 62168 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 56)) = vfslogAccess 62169 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 64)) = vfslogFullPathname 62170 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 72)) = vfslogDlOpen 62171 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 80)) = vfslogDlError 62172 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 88)) = vfslogDlSym 62173 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 96)) = vfslogDlClose 62174 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 104)) = vfslogRandomness 62175 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 112)) = vfslogSleep 62176 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 120)) = vfslogCurrentTime 62177 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 128)) = vfslogGetLastError 62178 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 136)) = vfslogCurrentTimeInt64 62179 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 8)) = wholenumberConnect 62180 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 16)) = wholenumberConnect 62181 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 24)) = wholenumberBestIndex 62182 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 32)) = wholenumberDisconnect 62183 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 40)) = wholenumberDisconnect 62184 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 48)) = wholenumberOpen 62185 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 56)) = wholenumberClose 62186 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 64)) = wholenumberFilter 62187 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 72)) = wholenumberNext 62188 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 80)) = wholenumberEof 62189 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 88)) = wholenumberColumn 62190 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 96)) = wholenumberRowid 62191 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 8)) = devsymClose 62192 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 16)) = devsymRead 62193 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 24)) = writecrashWrite 62194 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 32)) = devsymTruncate 62195 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 40)) = devsymSync 62196 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 48)) = devsymFileSize 62197 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 56)) = devsymLock 62198 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 64)) = devsymUnlock 62199 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 72)) = devsymCheckReservedLock 62200 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 80)) = devsymFileControl 62201 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 88)) = writecrashSectorSize 62202 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 96)) = writecrashDeviceCharacteristics 62203 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 104)) = devsymShmMap 62204 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 112)) = devsymShmLock 62205 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 120)) = devsymShmBarrier 62206 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 128)) = devsymShmUnmap 62207 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 40)) = writecrashOpen 62208 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 48)) = devsymDelete 62209 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 56)) = devsymAccess 62210 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 64)) = devsymFullPathname 62211 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 104)) = devsymRandomness 62212 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 112)) = devsymSleep 62213 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 120)) = devsymCurrentTime 62214 } 62215 62216 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" 62217 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data