diff options
author | Jan Mercl <0xjnml@gmail.com> | 2017-07-01 23:04:53 +0200 |
---|---|---|
committer | Jan Mercl <0xjnml@gmail.com> | 2017-07-01 23:04:53 +0200 |
commit | 5e8a085cfb2f6df373a2a68436b1c1acacba592b (patch) | |
tree | 6cd0e355f252b4e45331b7e476904c9b588ddce5 /internal/mptest | |
parent | 8370d1a12ed5bbad6630675316ee3985d8372a7b (diff) |
Add a couple of tests. Build only on linux, do not pass.
modified: Makefile
modified: all_test.go
modified: generator.go
modified: internal/bin/bin_linux_386.go
modified: internal/bin/bin_linux_amd64.go
new file: internal/mptest/mptest_linux_386.go
new file: internal/mptest/mptest_linux_amd64.go
new file: internal/threadtest1/threadtest1_linux_386.go
new file: internal/threadtest1/threadtest1_linux_amd64.go
new file: internal/threadtest2/threadtest2_linux_386.go
new file: internal/threadtest2/threadtest2_linux_amd64.go
new file: internal/threadtest4/threadtest4_linux_386.go
new file: internal/threadtest4/threadtest4_linux_amd64.go
modified: main.c
new file: sqlite.h
new file: testdata/mptest/config01.test
new file: testdata/mptest/config02.test
new file: testdata/mptest/crash01.test
new file: testdata/mptest/crash02.subtest
new file: testdata/mptest/multiwrite01.test
Diffstat (limited to 'internal/mptest')
-rw-r--r-- | internal/mptest/mptest_linux_386.go | 1868 | ||||
-rw-r--r-- | internal/mptest/mptest_linux_amd64.go | 1868 |
2 files changed, 3736 insertions, 0 deletions
diff --git a/internal/mptest/mptest_linux_386.go b/internal/mptest/mptest_linux_386.go new file mode 100644 index 0000000..552dfe3 --- /dev/null +++ b/internal/mptest/mptest_linux_386.go @@ -0,0 +1,1868 @@ +// Code generated by ccgo. DO NOT EDIT. + +// mptest.c + +// 2013-04-05 +// +// The author disclaims copyright to this source code. In place of +// a legal notice, here is a blessing: +// +// May you do good and not evil. +// May you find forgiveness for yourself and forgive others. +// May you share freely, never taking more than you give. +// +// ************************************************************************* +// +// This is a program used for testing SQLite, and specifically for testing +// the ability of independent processes to access the same SQLite database +// concurrently. +// +// Compile this program as follows: +// +// gcc -g -c -Wall sqlite3.c $(OPTS) +// gcc -g -o mptest mptest.c sqlite3.o $(LIBS) +// +// Recommended options: +// +// -DHAVE_USLEEP +// -DSQLITE_NO_SYNC +// -DSQLITE_THREADSAFE=0 +// -DSQLITE_OMIT_LOAD_EXTENSION +// +// Run like this: +// +// ./mptest $database $script +// +// where $database is the database to use for testing and $script is a +// test script. + +package main + +import ( + "math" + "os" + "unsafe" + + "github.com/cznic/crt" + "github.com/cznic/sqlite/internal/bin" +) + +var argv []*int8 + +func main() { + for _, v := range os.Args { + argv = append(argv, (*int8)(crt.CString(v))) + } + argv = append(argv, nil) + X_start(crt.NewTLS(), int32(len(os.Args)), &argv[0]) +} + +func X_start(tls *crt.TLS, _argc int32, _argv **int8) { + crt.X__register_stdfiles(tls, Xstdin, Xstdout, Xstderr) + crt.X__builtin_exit(tls, Xmain(tls, _argc, _argv)) +} + +var Xstdin unsafe.Pointer + +func init() { + Xstdin = unsafe.Pointer(&X__stdfiles) +} + +var X__stdfiles [3]unsafe.Pointer + +var Xstdout unsafe.Pointer + +func init() { + Xstdout = (unsafe.Pointer)(uintptr(unsafe.Pointer(&X__stdfiles)) + 4) +} + +var Xstderr unsafe.Pointer + +func init() { + Xstderr = (unsafe.Pointer)(uintptr(unsafe.Pointer(&X__stdfiles)) + 8) +} + +func Xmain(tls *crt.TLS, _argc int32, _argv **int8) (r0 int32) { + var _iClient, _n, _i, _openFlags, _rc, _taskId, _nRep, _iRep, _iTmout, _7_nTry, _15_iTimeout int32 + var _zClient, _zScript, _zTrace, _zCOption, _zJMode, _zNRep, _zTmout, _14_zTaskName *int8 + var _15_pStmt unsafe.Pointer + r0 = i32(0) + _openFlags = i32(2) + _nRep = i32(1) + _iTmout = i32(0) + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(0 /* X0 */))) = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0)))) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(68 /* X10 */))) = i32(1) + if _argc < i32(2) { + _usage(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0))))) + } + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(8 /* X2 */))) = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(1)))) + if Xstrglob(tls, str(0), _g.X2) != 0 { + _usage(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0))))) + } + if crt.Xstrcmp(tls, bin.Xsqlite3_sourceid(tls), str(7)) != i32(0) { + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(92), unsafe.Pointer(bin.Xsqlite3_sourceid(tls)), unsafe.Pointer(str(7))) + crt.Xexit(tls, i32(1)) + } + _n = _argc - i32(2) + bin.Xsqlite3_snprintf(tls, int32(u32(32)), (*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(32 /* X8 */))))), str(152), crt.Xgetpid(tls)) + _zJMode = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(164), i32(1)) + _zNRep = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(176), i32(1)) + if _zNRep != nil { + _nRep = crt.Xatoi(tls, _zNRep) + } + if _nRep < i32(1) { + _nRep = i32(1) + } + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(4 /* X1 */))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(183), i32(1)) + _zClient = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(187), i32(1)) + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(16 /* X4 */))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(194), i32(1)) + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(24 /* X6 */))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(201), i32(1)) + _zTrace = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(205), i32(1)) + if _zTrace != nil { + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(68 /* X10 */))) = crt.Xatoi(tls, _zTrace) + } + if _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(211), i32(0)) != nil { + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(68 /* X10 */))) = i32(0) + } + _zTmout = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(217), i32(1)) + if _zTmout != nil { + _iTmout = crt.Xatoi(tls, _zTmout) + } + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(72 /* X11 */))) = bool2int(_findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(225), i32(0)) != nil) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(92 /* X16 */))) = bool2int(_findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4))))))))))), &_n, str(234), i32(0)) != nil) + if (_g.X4) != nil { + *(**crt.XFILE)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(20 /* X5 */))))) = crt.Xfopen64(tls, _g.X4, str(239)) + goto _9 + } + *(**crt.XFILE)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(20 /* X5 */))))) = (*crt.XFILE)(Xstderr) +_9: + if (_g.X6) != nil { + *(**crt.XFILE)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(28 /* X7 */))))) = crt.Xfopen64(tls, _g.X6, str(239)) + goto _11 + } + *(**crt.XFILE)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(28 /* X7 */))))) = (*crt.XFILE)(Xstdout) +_11: + bin.Xsqlite3_config(tls, i32(16), _sqlErrorCallback, i32(0)) + if _zClient == nil { + goto _12 + } + _iClient = crt.Xatoi(tls, _zClient) + if _iClient < i32(1) { + _fatalError(tls, str(241), _iClient) + } + bin.Xsqlite3_snprintf(tls, int32(u32(32)), (*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(32 /* X8 */))))), str(268), crt.Xgetpid(tls), _iClient) + goto _14 +_12: + _7_nTry = i32(0) + if (_g.X10) <= i32(0) { + goto _15 + } + crt.Xprintf(tls, str(284), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0)))))) + _i = i32(1) +_16: + if _i >= _argc { + goto _19 + } + crt.Xprintf(tls, str(294), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(_i))))) + _i += 1 + goto _16 +_19: + crt.Xprintf(tls, str(298)) + crt.Xprintf(tls, str(300)) + _i = i32(0) +_20: + if store0(&_zCOption, bin.Xsqlite3_compileoption_get(tls, _i)) == nil { + goto _23 + } + crt.Xprintf(tls, str(405), unsafe.Pointer(_zCOption)) + _i += 1 + goto _20 +_23: + crt.Xfflush(tls, (*crt.XFILE)(Xstdout)) +_15: + _iClient = i32(0) +_24: + if (_7_nTry % i32(5)) == i32(4) { + crt.Xprintf(tls, str(418), unsafe.Pointer(func() *int8 { + if _7_nTry > i32(5) { + return str(447) + } + return str(454) + }()), unsafe.Pointer(_g.X2)) + } + _rc = crt.Xunlink(tls, _g.X2) + if _rc != 0 && ((*crt.X__errno_location(tls)) == i32(2)) { + _rc = i32(0) + } + if ((_rc != i32(0)) && (preInc1(&_7_nTry, 1) < i32(60))) && (bin.Xsqlite3_sleep(tls, i32(1000)) > i32(0)) { + goto _24 + } + if _rc != i32(0) { + _fatalError(tls, str(455), unsafe.Pointer(_g.X2), _7_nTry) + } + { + p := &_openFlags + *p = (*p) | i32(4) + sink1 = *p + } +_14: + _rc = bin.Xsqlite3_open_v2(tls, _g.X2, (**bin.Xsqlite3)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(12 /* X3 */))))), _openFlags, _g.X1) + if _rc != 0 { + _fatalError(tls, str(496), unsafe.Pointer(_g.X2)) + } + if _iTmout > i32(0) { + bin.Xsqlite3_busy_timeout(tls, (*bin.Xsqlite3)(_g.X3), _iTmout) + } + if _zJMode != nil { + _runSql(tls, str(513), unsafe.Pointer(_zJMode)) + } + if (_g.X16) == 0 { + _trySql(tls, str(537)) + } + bin.Xsqlite3_enable_load_extension(tls, (*bin.Xsqlite3)(_g.X3), i32(1)) + bin.Xsqlite3_busy_handler(tls, (*bin.Xsqlite3)(_g.X3), _busyHandler, nil) + bin.Xsqlite3_create_function(tls, (*bin.Xsqlite3)(_g.X3), str(560), i32(0), i32(1), nil, *(*func(*crt.TLS, *bin.Xsqlite3_context, int32, **bin.XMem))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer, int32, *unsafe.Pointer) + }{_vfsNameFunc})), *(*func(*crt.TLS, *bin.Xsqlite3_context, int32, **bin.XMem))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer, int32, *unsafe.Pointer) + }{nil})), *(*func(*crt.TLS, *bin.Xsqlite3_context))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer) + }{nil}))) + bin.Xsqlite3_create_function(tls, (*bin.Xsqlite3)(_g.X3), str(568), i32(1), i32(1), nil, *(*func(*crt.TLS, *bin.Xsqlite3_context, int32, **bin.XMem))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer, int32, *unsafe.Pointer) + }{_evalFunc})), *(*func(*crt.TLS, *bin.Xsqlite3_context, int32, **bin.XMem))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer, int32, *unsafe.Pointer) + }{nil})), *(*func(*crt.TLS, *bin.Xsqlite3_context))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer) + }{nil}))) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(88 /* X15 */))) = i32(10000) + if (_g.X11) != 0 { + bin.Xsqlite3_trace(tls, (*bin.Xsqlite3)(_g.X3), _sqlTraceCallback, nil) + } + if _iClient <= i32(0) { + goto _38 + } + if _n > i32(0) { + _unrecognizedArguments(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0)))), _n, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4)))))))))))) + } + if (_g.X10) != 0 { + _logMessage(tls, str(573)) + } +_41: + _14_zTaskName = nil + _rc = _startScript(tls, _iClient, &_zScript, &_taskId, &_14_zTaskName) + if _rc == i32(101) { + goto _42 + } + if (_g.X10) != 0 { + _logMessage(tls, str(586), unsafe.Pointer(_14_zTaskName), _taskId) + } + _runScript(tls, _iClient, _taskId, _zScript, _14_zTaskName) + if (_g.X10) != 0 { + _logMessage(tls, str(600), unsafe.Pointer(_14_zTaskName), _taskId) + } + _finishScript(tls, _iClient, _taskId, i32(0)) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_14_zTaskName)) + bin.Xsqlite3_sleep(tls, i32(10)) + goto _41 +_42: + if (_g.X10) != 0 { + _logMessage(tls, str(612)) + } + goto _47 +_38: + if _n == i32(0) { + _fatalError(tls, str(623)) + } + if _n > i32(1) { + _unrecognizedArguments(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0)))), _n, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(4)))))))))))) + } + _runSql(tls, str(647)) + _zScript = _readFile(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(2))))) + _iRep = i32(1) +_50: + if _iRep > _nRep { + goto _53 + } + if (_g.X10) != 0 { + _logMessage(tls, str(1083), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(2))))), _iRep) + } + _runScript(tls, i32(0), i32(0), _zScript, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(2))))) + if (_g.X10) != 0 { + _logMessage(tls, str(1111), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(2))))), _iRep) + } + _iRep += 1 + goto _50 +_53: + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zScript)) + _waitForClient(tls, i32(0), i32(2000), str(1137)) + _trySql(tls, str(1157)) + bin.Xsqlite3_sleep(tls, i32(10)) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(88 /* X15 */))) = i32(0) + _15_iTimeout = i32(1000) +_56: + if ((store1(&_rc, _trySql(tls, str(1186))) == i32(5)) || (_rc == i32(100))) && (_15_iTimeout > i32(0)) { + bin.Xsqlite3_sleep(tls, i32(10)) + { + p := &_15_iTimeout + *p = (*p) - i32(10) + sink1 = *p + } + goto _56 + } + bin.Xsqlite3_sleep(tls, i32(100)) + _15_pStmt = _prepareSql(tls, str(1207)) + _15_iTimeout = i32(1000) +_60: + if (store1(&_rc, bin.Xsqlite3_step(tls, _15_pStmt)) == i32(5)) && (_15_iTimeout > i32(0)) { + bin.Xsqlite3_sleep(tls, i32(10)) + { + p := &_15_iTimeout + *p = (*p) - i32(10) + sink1 = *p + } + goto _60 + } + if _rc == i32(100) { + { + p := (*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(80 /* X13 */))) + *p = (*p) + bin.Xsqlite3_column_int(tls, _15_pStmt, i32(0)) + sink1 = *p + } + { + p := (*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(84 /* X14 */))) + *p = (*p) + bin.Xsqlite3_column_int(tls, _15_pStmt, i32(1)) + sink1 = *p + } + } + bin.Xsqlite3_finalize(tls, _15_pStmt) +_47: + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_g.X3)) + _maybeClose(tls, (*crt.XFILE)(_g.X7)) + _maybeClose(tls, (*crt.XFILE)(_g.X5)) + if _iClient != i32(0) { + goto _64 + } + crt.Xprintf(tls, str(1242), _g.X13, _g.X14) + crt.Xprintf(tls, str(1278), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0)))))) + _i = i32(1) +_65: + if _i >= _argc { + goto _68 + } + crt.Xprintf(tls, str(294), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(_i))))) + _i += 1 + goto _65 +_68: + crt.Xprintf(tls, str(298)) +_64: + return bool2int((_g.X13) > i32(0)) +} + +var _g TGlobal + +// Print a usage message for the program and exit +func _usage(tls *crt.TLS, _argv0 *int8) { + var _i int32 + var _zTail *int8 + _zTail = _argv0 + _i = i32(0) +_0: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv0)) + 1*uintptr(_i)))) == 0 { + goto _3 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv0)) + 1*uintptr(_i)))) == i32(47) { + _zTail = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv0))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_i))))))))) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(i32(1)))))))) + } + _i += 1 + goto _0 +_3: + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1286), unsafe.Pointer(_zTail)) + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1325)) + crt.Xexit(tls, i32(1)) +} + +// Return TRUE if string z[] matches glob pattern zGlob[]. +// Return FALSE if the pattern does not match. +// +// Globbing rules: +// +// '*' Matches any sequence of zero or more characters. +// +// '?' Matches exactly one character. +// +// [...] Matches one character from the enclosed list of +// characters. +// +// [^...] Matches one character not in the enclosed list. +// +// '#' Matches any sequence of one or more digits with an +// optional + or - sign in front +func Xstrglob(tls *crt.TLS, _zGlob *int8, _z *int8) (r0 int32) { + var _c, _c2, _invert, _seen, _10_prior_c int32 +_0: + if store1(&_c, int32(*postInc0(&_zGlob, 1))) == i32(0) { + goto _1 + } + if _c != i32(42) { + goto _2 + } +_3: + if store1(&_c, int32(*postInc0(&_zGlob, 1))) != i32(42) && _c != i32(63) { + goto _4 + } + if (_c == i32(63)) && (int32(*postInc0(&_z, 1)) == i32(0)) { + return i32(0) + } + goto _3 +_4: + if _c == i32(0) { + return i32(1) + } + if _c != i32(91) { + goto _10 + } +_11: + if ((*_z) != 0) && Xstrglob(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zGlob))-uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(i32(1)))))))), _z) != 0 { + *(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1) + goto _11 + } + return bool2int(int32(*_z) != i32(0)) + +_10: +_14: + if store1(&_c2, int32(*postInc0(&_z, 1))) == i32(0) { + goto _15 + } +_16: + if _c2 == _c { + goto _17 + } + _c2 = int32(*postInc0(&_z, 1)) + if _c2 == i32(0) { + return i32(0) + } + goto _16 +_17: + if Xstrglob(tls, _zGlob, _z) != 0 { + return i32(1) + } + goto _14 +_15: + return i32(0) + +_2: + if _c != i32(63) { + goto _21 + } + if int32(*postInc0(&_z, 1)) == i32(0) { + return i32(0) + } + goto _23 +_21: + if _c != i32(91) { + goto _24 + } + _10_prior_c = i32(0) + _seen = i32(0) + _invert = i32(0) + _c = int32(*postInc0(&_z, 1)) + if _c == i32(0) { + return i32(0) + } + _c2 = int32(*postInc0(&_zGlob, 1)) + if _c2 == i32(94) { + _invert = i32(1) + _c2 = int32(*postInc0(&_zGlob, 1)) + } + if _c2 != i32(93) { + goto _27 + } + if _c == i32(93) { + _seen = i32(1) + } + _c2 = int32(*postInc0(&_zGlob, 1)) +_27: +_29: + if _c2 == 0 || _c2 == i32(93) { + goto _30 + } + if _c2 != i32(45) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zGlob)) + 1*uintptr(i32(0))))) == i32(93) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zGlob)) + 1*uintptr(i32(0))))) == i32(0) || _10_prior_c <= i32(0) { + goto _35 + } + _c2 = int32(*postInc0(&_zGlob, 1)) + if (_c >= _10_prior_c) && (_c <= _c2) { + _seen = i32(1) + } + _10_prior_c = i32(0) + goto _38 +_35: + if _c == _c2 { + _seen = i32(1) + } + _10_prior_c = _c2 +_38: + _c2 = int32(*postInc0(&_zGlob, 1)) + goto _29 +_30: + if (_c2 == i32(0)) || ((_seen ^ _invert) == i32(0)) { + return i32(0) + } + goto _42 +_24: + if _c != i32(35) { + goto _43 + } + if ((int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) == i32(45)) || (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) == i32(43))) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(1))))))))))&int32(u16(2048))) != 0 { + *(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1) + } + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0)))))))))) & int32(u16(2048))) == 0 { + return i32(0) + } + *(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1) +_48: + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0)))))))))) & int32(u16(2048))) != 0 { + *(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1) + goto _48 + } + goto _50 +_43: + if _c != int32(*postInc0(&_z, 1)) { + return i32(0) + } +_50: +_42: +_23: + goto _0 +_1: + return bool2int(int32(*_z) == i32(0)) +} + +// Look for a command-line option. If present, return a pointer. +// Return NULL if missing. +// +// hasArg==0 means the option is a flag. It is either present or not. +// hasArg==1 means the option has an argument. Return a pointer to the +// argument. +func _findOption(tls *crt.TLS, _azArg **int8, _pnArg *int32, _zOption *int8, _hasArg int32) (r0 *int8) { + var _i, _j, _nArg int32 + var _zReturn, _1_z *int8 + _zReturn = nil + _nArg = *_pnArg + func() { + if _hasArg != i32(0) && _hasArg != i32(1) { + crt.X__builtin_fprintf(tls, Xstderr, str(1897), unsafe.Pointer(str(1933)), i32(1211), unsafe.Pointer((*int8)(unsafe.Pointer(&_findOptionØ00__func__Ø000))), unsafe.Pointer(str(1988))) + crt.X__builtin_abort(tls) + } + }() + _i = i32(0) +_3: + if _i >= _nArg { + goto _6 + } + if (_i + _hasArg) >= _nArg { + goto _6 + } + _1_z = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 4*uintptr(_i))) + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(0))))) != i32(45) { + goto _4 + } + *(*uintptr)(unsafe.Pointer(&_1_z)) += uintptr(1) + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(0))))) != i32(45) { + goto _9 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(1))))) == i32(0) { + goto _6 + } + *(*uintptr)(unsafe.Pointer(&_1_z)) += uintptr(1) +_9: + if crt.Xstrcmp(tls, _1_z, _zOption) != i32(0) { + goto _11 + } + if _hasArg != 0 && (_i == (_nArg - i32(1))) { + _fatalError(tls, str(2011), unsafe.Pointer(_1_z)) + } + if _hasArg != 0 { + _zReturn = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 4*uintptr(_i+i32(1)))) + goto _15 + } + _zReturn = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 4*uintptr(_i))) +_15: + _j = (_i + i32(1)) + bool2int(_hasArg != i32(0)) +_16: + if _j < _nArg { + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 4*uintptr(postInc1(&_i, int32(1))))) = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 4*uintptr(postInc1(&_j, int32(1))))) + goto _16 + } + *_pnArg = _i + return _zReturn + +_11: +_4: + _i += 1 + goto _3 +_6: + return _zReturn +} + +var _findOptionØ00__func__Ø000 [11]int8 + +func init() { + crt.Xstrncpy(nil, &_findOptionØ00__func__Ø000[0], str(2059), 11) +} + +// Print an error message and then quit. +func _fatalError(tls *crt.TLS, _zFormat *int8, args ...interface{}) { + var _3_nTry int32 + var _zMsg *int8 + var _ap []interface{} + var _zPrefix [30]int8 + _ap = args + _zMsg = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + bin.Xsqlite3_snprintf(tls, int32(u32(30)), (*int8)(unsafe.Pointer(&_zPrefix)), str(2070), unsafe.Pointer((*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(32 /* X8 */))))))) + if (*crt.XFILE)(_g.X7) != nil { + _printWithPrefix(tls, (*crt.XFILE)(_g.X7), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X7)) + _maybeClose(tls, (*crt.XFILE)(_g.X7)) + } + if ((*crt.XFILE)(_g.X5) != nil) && _safe_strcmp(tls, _g.X4, _g.X6) != 0 { + _printWithPrefix(tls, (*crt.XFILE)(_g.X5), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X5)) + _maybeClose(tls, (*crt.XFILE)(_g.X5)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zMsg)) + if (_g.X3) == nil { + goto _3 + } + _3_nTry = i32(0) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(88 /* X15 */))) = i32(0) +_4: + if (_trySql(tls, str(2081)) == i32(5)) && (postInc1(&_3_nTry, int32(1)) < i32(100)) { + bin.Xsqlite3_sleep(tls, i32(10)) + goto _4 + } +_3: + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_g.X3)) + crt.Xexit(tls, i32(1)) + _ = _zPrefix + _ = _3_nTry +} + +// Print a message adding zPrefix[] to the beginning of every line. +func _printWithPrefix(tls *crt.TLS, _pOut *crt.XFILE, _zPrefix *int8, _zMsg *int8) { + var _1_i int32 +_0: + if _zMsg == nil || (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(i32(0))))) == 0 { + goto _1 + } + _1_i = i32(0) +_3: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(_1_i)))) == 0 || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(_1_i)))) == i32(10) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(_1_i)))) == i32(13) { + goto _8 + } + _1_i += 1 + goto _3 +_8: + crt.Xfprintf(tls, _pOut, str(2111), unsafe.Pointer(_zPrefix), _1_i, unsafe.Pointer(_zMsg)) + { + p := &_zMsg + *p = (*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(*p)) + 1*uintptr(_1_i))) + sink0 = *p + } +_9: + if (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(i32(0))))) == i32(10)) || (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(i32(0))))) == i32(13)) { + *(*uintptr)(unsafe.Pointer(&_zMsg)) += uintptr(1) + goto _9 + } + goto _0 +_1: +} + +// Close output stream pOut if it is not stdout or stderr +func _maybeClose(tls *crt.TLS, _pOut *crt.XFILE) { + if (uintptr(unsafe.Pointer(_pOut)) != uintptr(Xstdout)) && (_pOut != (*crt.XFILE)(Xstderr)) { + crt.Xfclose(tls, _pOut) + } +} + +// Compare two pointers to strings, where the pointers might be NULL. +func _safe_strcmp(tls *crt.TLS, _a *int8, _b *int8) (r0 int32) { + if _a == _b { + return i32(0) + } + if _a == nil { + return i32(-1) + } + if _b == nil { + return i32(1) + } + return crt.Xstrcmp(tls, _a, _b) +} + +// Try to run arbitrary SQL. Return success code. +func _trySql(tls *crt.TLS, _zFormat *int8, args ...interface{}) (r0 int32) { + var _rc int32 + var _zSql *int8 + var _ap []interface{} + _ap = args + _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + _rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_g.X3), _zSql, nil, nil, nil) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) + return _rc +} + +// SQL error log callback +func _sqlErrorCallback(tls *crt.TLS, _pArg unsafe.Pointer, _iErrCode int32, _zMsg *int8) { + if (_iErrCode == i32(1)) && (_g.X12) != 0 { + return + } + if ((_iErrCode & i32(255)) == i32(17)) && ((_g.X10) < i32(3)) { + return + } + if (((_g.X15) == i32(0)) && ((_iErrCode & i32(255)) == i32(5))) && ((_g.X10) < i32(3)) { + return + } + if (_iErrCode & i32(255)) == i32(27) { + _logMessage(tls, str(2119), unsafe.Pointer(_zMsg)) + goto _8 + } + _errorMessage(tls, str(2129), _iErrCode, unsafe.Pointer(_zMsg)) +_8: +} + +// Print a log message +func _logMessage(tls *crt.TLS, _zFormat *int8, args ...interface{}) { + var _zMsg *int8 + var _ap []interface{} + var _zPrefix [30]int8 + _ap = args + _zMsg = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + bin.Xsqlite3_snprintf(tls, int32(u32(30)), (*int8)(unsafe.Pointer(&_zPrefix)), str(2145), unsafe.Pointer((*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(32 /* X8 */))))))) + if (*crt.XFILE)(_g.X7) != nil { + _printWithPrefix(tls, (*crt.XFILE)(_g.X7), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X7)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zMsg)) + _ = _zPrefix +} + +// Print an error message +func _errorMessage(tls *crt.TLS, _zFormat *int8, args ...interface{}) { + var _zMsg *int8 + var _ap []interface{} + var _zPrefix [30]int8 + _ap = args + _zMsg = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + bin.Xsqlite3_snprintf(tls, int32(u32(30)), (*int8)(unsafe.Pointer(&_zPrefix)), str(2150), unsafe.Pointer((*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(32 /* X8 */))))))) + if (*crt.XFILE)(_g.X7) != nil { + _printWithPrefix(tls, (*crt.XFILE)(_g.X7), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X7)) + } + if ((*crt.XFILE)(_g.X5) != nil) && _safe_strcmp(tls, _g.X4, _g.X6) != 0 { + _printWithPrefix(tls, (*crt.XFILE)(_g.X5), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X5)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zMsg)) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(80 /* X13 */))) += 1 + _ = _zPrefix +} + +// Run arbitrary SQL. Issue a fatal error on failure. +func _runSql(tls *crt.TLS, _zFormat *int8, args ...interface{}) { + var _rc int32 + var _zSql *int8 + var _ap []interface{} + _ap = args + _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + _rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_g.X3), _zSql, nil, nil, nil) + if _rc != i32(0) { + _fatalError(tls, str(2161), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_g.X3))), unsafe.Pointer(_zSql)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) +} + +// Busy handler with a g.iTimeout-millisecond timeout +func _busyHandler(tls *crt.TLS, _pCD unsafe.Pointer, _count int32) (r0 int32) { + if (_count * i32(10)) <= (_g.X15) { + goto _0 + } + if (_g.X15) > i32(0) { + _errorMessage(tls, str(2168), _g.X15) + } + return i32(0) + +_0: + bin.Xsqlite3_sleep(tls, i32(10)) + return i32(1) +} + +// Auxiliary SQL function to return the name of the VFS +func _vfsNameFunc(tls *crt.TLS, _context unsafe.Pointer, _argc int32, _argv *unsafe.Pointer) { + var _zVfs *int8 + var _db unsafe.Pointer + _db = unsafe.Pointer(bin.Xsqlite3_context_db_handle(tls, (*bin.Xsqlite3_context)(_context))) + _zVfs = nil + + bin.Xsqlite3_file_control(tls, (*bin.Xsqlite3)(_db), str(2187), i32(12), (unsafe.Pointer)(&_zVfs)) + if _zVfs != nil { + bin.Xsqlite3_result_text(tls, (*bin.Xsqlite3_context)(_context), _zVfs, i32(-1), bin.Xsqlite3_free) + } +} + +// Auxiliary SQL function to recursively evaluate SQL. +func _evalFunc(tls *crt.TLS, _context unsafe.Pointer, _argc int32, _argv *unsafe.Pointer) { + var _rc int32 + var _zSql, _zErrMsg *int8 + var _db unsafe.Pointer + var _res XString + _db = unsafe.Pointer(bin.Xsqlite3_context_db_handle(tls, (*bin.Xsqlite3_context)(_context))) + _zSql = (*int8)(unsafe.Pointer(bin.Xsqlite3_value_text(tls, (*bin.XMem)(*(*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0)))))))) + _zErrMsg = nil + + crt.Xmemset(tls, (unsafe.Pointer)(&_res), i32(0), u32(12)) + _rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_db), _zSql, _evalCallback, (unsafe.Pointer)(&_res), &_zErrMsg) + if _zErrMsg != nil { + bin.Xsqlite3_result_error(tls, (*bin.Xsqlite3_context)(_context), _zErrMsg, i32(-1)) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zErrMsg)) + goto _1 + } + if _rc != 0 { + bin.Xsqlite3_result_error_code(tls, (*bin.Xsqlite3_context)(_context), _rc) + goto _3 + } + bin.Xsqlite3_result_text(tls, (*bin.Xsqlite3_context)(_context), _res.X0, i32(-1), *(*func(*crt.TLS, unsafe.Pointer))(unsafe.Pointer(&struct{ f uintptr }{4294967295}))) +_3: +_1: + _stringFree(tls, &_res) + _ = _res +} + +// Callback function for evalSql() +func _evalCallback(tls *crt.TLS, _pCData unsafe.Pointer, _argc int32, _argv **int8, _azCol **int8) (r0 int32) { + var _i int32 + var _p *XString + _p = (*XString)(_pCData) + + _i = i32(0) +_0: + if _i >= _argc { + goto _3 + } + _stringAppendTerm(tls, _p, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(_i)))) + _i += 1 + goto _0 +_3: + return i32(0) +} + +// Append a new token onto the end of the string +func _stringAppendTerm(tls *crt.TLS, _p *XString, _z *int8) { + var _i int32 + if (_p.X1) != 0 { + _stringAppend(tls, _p, str(2192), i32(1)) + } + if _z == nil { + _stringAppend(tls, _p, str(2194), i32(3)) + return + } + _i = i32(0) +_2: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == 0 || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))))))))&int32(u16(8192))) != 0 { + goto _6 + } + _i += 1 + goto _2 +_6: + if (_i > i32(0)) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == i32(0)) { + _stringAppend(tls, _p, _z, _i) + return + } + _stringAppend(tls, _p, str(2198), i32(1)) +_9: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) == 0 { + goto _10 + } + _i = i32(0) +_11: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == 0 || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == i32(39) { + goto _15 + } + _i += 1 + goto _11 +_15: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) != 0 { + _stringAppend(tls, _p, _z, _i+i32(1)) + _stringAppend(tls, _p, str(2198), i32(1)) + { + p := &_z + *p = (*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(*p)) + 1*uintptr(_i+i32(1)))) + sink0 = *p + } + goto _17 + } + _stringAppend(tls, _p, _z, _i) + goto _10 +_17: + goto _9 +_10: + _stringAppend(tls, _p, str(2198), i32(1)) +} + +// Append n bytes of text to a string. If n<0 append the entire string. +func _stringAppend(tls *crt.TLS, _p *XString, _z *int8, _n int32) { + var _1_nAlloc int32 + var _1_zNew *int8 + if _n < i32(0) { + _n = int32(crt.Xstrlen(tls, _z)) + } + if ((_p.X1) + _n) < (_p.X2) { + goto _1 + } + _1_nAlloc = (((_p.X2) * i32(2)) + _n) + i32(100) + _1_zNew = (*int8)(bin.Xsqlite3_realloc(tls, (unsafe.Pointer)(_p.X0), _1_nAlloc)) + if _1_zNew == nil { + _fatalError(tls, str(2200)) + } + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p)) + uintptr(0 /* X0 */))) = _1_zNew + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p)) + uintptr(8 /* X2 */))) = _1_nAlloc +_1: + crt.Xmemcpy(tls, (unsafe.Pointer)((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_p.X0))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_p.X1)))))))), (unsafe.Pointer)(_z), uint32(_n)) + { + p := (*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p)) + uintptr(4 /* X1 */))) + *p = (*p) + _n + sink1 = *p + } + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p.X0)) + 1*uintptr(_p.X1))) = int8(i32(0)) +} + +// Free a string +func _stringFree(tls *crt.TLS, _p *XString) { + if (_p.X0) != nil { + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_p.X0)) + } + crt.Xmemset(tls, (unsafe.Pointer)(_p), i32(0), u32(12)) +} + +// SQL Trace callback +func _sqlTraceCallback(tls *crt.TLS, _NotUsed1 unsafe.Pointer, _zSql *int8) { + _logMessage(tls, str(2214), _clipLength(tls, _zSql), unsafe.Pointer(_zSql)) +} + +// Return the length of a string omitting trailing whitespace +func _clipLength(tls *crt.TLS, _z *int8) (r0 int32) { + var _n int32 + _n = int32(crt.Xstrlen(tls, _z)) +_0: + if (_n > i32(0)) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n-i32(1))))))))))&int32(u16(8192))) != 0 { + _n -= 1 + goto _0 + } + return _n +} + +// Report on unrecognized arguments +func _unrecognizedArguments(tls *crt.TLS, _argv0 *int8, _nArg int32, _azArg **int8) { + var _i int32 + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(2221), unsafe.Pointer(_argv0)) + _i = i32(0) +_0: + if _i >= _nArg { + goto _3 + } + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(294), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 4*uintptr(_i))))) + _i += 1 + goto _0 +_3: + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(298)) + crt.Xexit(tls, i32(1)) +} + +// Look up the next task for client iClient in the database. +// Return the task script and the task number and mark that +// task as being under way. +func _startScript(tls *crt.TLS, _iClient int32, _pzScript **int8, _pTaskId *int32, _pzTaskName **int8) (r0 int32) { + var _taskId, _rc, _totalTime, _6_n int32 + var _pStmt unsafe.Pointer + _pStmt = nil + _totalTime = i32(0) + *_pzScript = nil + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(88 /* X15 */))) = i32(0) +_0: + _rc = _trySql(tls, str(2249)) + if _rc == i32(5) { + bin.Xsqlite3_sleep(tls, i32(10)) + { + p := &_totalTime + *p = (*p) + i32(10) + sink1 = *p + } + goto _0 + } + if _rc != i32(0) { + _fatalError(tls, str(2265), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_g.X3)))) + } + if (_g.X13) != 0 || (_g.X14) != 0 { + _runSql(tls, str(2284), _g.X13, _g.X14) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(80 /* X13 */))) = i32(0) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(84 /* X14 */))) = i32(0) + } + _pStmt = _prepareSql(tls, str(2337), _iClient) + _rc = bin.Xsqlite3_step(tls, _pStmt) + bin.Xsqlite3_finalize(tls, _pStmt) + if _rc == i32(100) { + _runSql(tls, str(2383), _iClient) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(88 /* X15 */))) = i32(10000) + _runSql(tls, str(2414)) + return i32(101) + } + _pStmt = _prepareSql(tls, str(2434), _iClient) + _rc = bin.Xsqlite3_step(tls, _pStmt) + if _rc == i32(100) { + _6_n = bin.Xsqlite3_column_bytes(tls, _pStmt, i32(0)) + *_pzScript = (*int8)(bin.Xsqlite3_malloc(tls, _6_n+i32(1))) + crt.Xstrcpy(tls, *_pzScript, (*int8)(unsafe.Pointer(bin.Xsqlite3_column_text(tls, _pStmt, i32(0))))) + *_pTaskId = store1(&_taskId, bin.Xsqlite3_column_int(tls, _pStmt, i32(1))) + *_pzTaskName = bin.Xsqlite3_mprintf(tls, str(2526), unsafe.Pointer(bin.Xsqlite3_column_text(tls, _pStmt, i32(2)))) + bin.Xsqlite3_finalize(tls, _pStmt) + _runSql(tls, str(2529), _taskId) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(88 /* X15 */))) = i32(10000) + _runSql(tls, str(2414)) + return i32(0) + } + bin.Xsqlite3_finalize(tls, _pStmt) + if _rc != i32(101) { + goto _8 + } + if _totalTime > i32(30000) { + _errorMessage(tls, str(2612)) + _runSql(tls, str(2661), _iClient) + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_g.X3)) + crt.Xexit(tls, i32(1)) + } +_10: + if _trySql(tls, str(2701)) == i32(5) { + bin.Xsqlite3_sleep(tls, i32(10)) + { + p := &_totalTime + *p = (*p) + i32(10) + sink1 = *p + } + goto _10 + } + bin.Xsqlite3_sleep(tls, i32(100)) + { + p := &_totalTime + *p = (*p) + i32(100) + sink1 = *p + } + goto _0 +_8: + _fatalError(tls, str(2526), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_g.X3)))) + goto _0 +} + +// Prepare an SQL statement. Issue a fatal error if unable. +func _prepareSql(tls *crt.TLS, _zFormat *int8, args ...interface{}) (r0 unsafe.Pointer) { + var _rc int32 + var _zSql *int8 + var _pStmt unsafe.Pointer + var _ap []interface{} + _pStmt = nil + _ap = args + _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + _rc = bin.Xsqlite3_prepare_v2(tls, (*bin.Xsqlite3)(_g.X3), _zSql, i32(-1), &_pStmt, nil) + if _rc != i32(0) { + bin.Xsqlite3_finalize(tls, _pStmt) + _fatalError(tls, str(2161), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_g.X3))), unsafe.Pointer(_zSql)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) + return _pStmt +} + +// Run a script. +func _runScript(tls *crt.TLS, _iClient int32, _taskId int32, _zScript *int8, _zFilename *int8) { + var _lineno, _prevLine, _ii, _iBegin, _n, _c, _j, _len, _nArg, _8_rc, _12_jj, _15_jj, _15_isGlob, _20_k, _23_jj, _25_jj, _25_rc, _30_iNewClient, _32_iTimeout, _33_iTarget, _33_iEnd int32 + var _4_zSql, _12_zAns, _15_zAns, _15_zCopy, _19_zNewFile, _19_zNewScript, _19_zToDel, _33_zTask, _33_zTName, _41_zSql *int8 + var _25_pStmt unsafe.Pointer + var _zError [1000]int8 + var _zCmd [30]int8 + var _sResult XString + var _azArg [2][100]int8 + _lineno = i32(1) + _prevLine = i32(1) + _ii = i32(0) + _iBegin = i32(0) + crt.Xmemset(tls, (unsafe.Pointer)(&_sResult), i32(0), u32(12)) + _stringReset(tls, &_sResult) +_0: + if store1(&_c, int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii))))) == i32(0) { + goto _1 + } + _prevLine = _lineno + _len = _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))), &_lineno) + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(_c))))))&int32(u16(8192))) != 0 || ((_c == i32(47)) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+i32(1))))) == i32(42))) { + { + p := &_ii + *p = (*p) + _len + sink1 = *p + } + goto _0 + } + if ((_c != i32(45)) || (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+i32(1))))) != i32(45))) || ((int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+i32(2))))))))) & int32(u16(1024))) == 0) { + { + p := &_ii + *p = (*p) + _len + sink1 = *p + } + goto _0 + } + if _ii > _iBegin { + _4_zSql = bin.Xsqlite3_mprintf(tls, str(2708), _ii-_iBegin, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_iBegin))))))))) + _evalSql(tls, &_sResult, _4_zSql) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_4_zSql)) + _iBegin = _ii + _len + } + if (_g.X10) >= i32(2) { + _logMessage(tls, str(2708), _len, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))))) + } + _n = _extractToken(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(i32(2)))))))), _len-i32(2), (*int8)(unsafe.Pointer(&_zCmd)), int32(u32(30))) + _nArg = i32(0) +_10: + if _n >= (_len-i32(2)) || _nArg >= i32(2) { + goto _14 + } +_15: + if (_n < (_len - i32(2))) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr((_ii+i32(2))+_n)))))))))&int32(u16(8192))) != 0 { + _n += 1 + goto _15 + } + if _n >= (_len - i32(2)) { + goto _14 + } + { + p := &_n + *p = (*p) + _extractToken(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(i32(2))))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), (_len-i32(2))-_n, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(_nArg))))), int32(u32(100))) + sink1 = *p + } + _nArg += 1 + goto _10 +_14: + _j = _nArg +_19: + if _j >= i32(2) { + goto _22 + } + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(postInc1(&_j, int32(1))))))) + 1*uintptr(i32(0)))) = int8(i32(0)) + _j += 1 + goto _19 +_22: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2713)) == i32(0) { + bin.Xsqlite3_sleep(tls, crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0)))))))) + goto _24 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2719)) != i32(0) { + goto _25 + } + _8_rc = crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))) + _finishScript(tls, _iClient, _taskId, i32(1)) + if _8_rc == i32(0) { + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_g.X3)) + } + crt.Xexit(tls, _8_rc) + goto _27 +_25: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2724)) != i32(0) { + goto _28 + } + if (_g.X10) == i32(1) { + _logMessage(tls, str(2708), _len-i32(1), unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))))) + } + _stringReset(tls, &_sResult) + goto _30 +_28: + if (crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2733)) == i32(0)) && (_iClient > i32(0)) { + _finishScript(tls, _iClient, _taskId, i32(1)) + goto _33 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2740)) == i32(0) { + _stringReset(tls, &_sResult) + goto _35 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2746)) != i32(0) { + goto _36 + } + _12_zAns = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript)) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))) + _12_jj = i32(7) +_37: + if _12_jj >= (_len-i32(1)) || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_12_zAns)) + 1*uintptr(_12_jj)))))))))&int32(u16(8192))) == 0 { + goto _41 + } + _12_jj += 1 + goto _37 +_41: + { + p := &_12_zAns + *p = (*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(*p)) + 1*uintptr(_12_jj))) + sink0 = *p + } + if (((_len - _12_jj) - i32(1)) != (_sResult.X1)) || crt.Xstrncmp(tls, _sResult.X0, _12_zAns, uint32((_len-_12_jj)-i32(1))) != 0 { + _errorMessage(tls, str(2752), _prevLine, unsafe.Pointer(_zFilename), (_len-_12_jj)-i32(1), unsafe.Pointer(_12_zAns), unsafe.Pointer(_sResult.X0)) + } + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(84 /* X14 */))) += 1 + _stringReset(tls, &_sResult) + goto _44 +_36: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2797)) != i32(0) && crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2802)) != i32(0) { + goto _46 + } + _15_zAns = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript)) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))) + _15_isGlob = bool2int(int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_zCmd)) + 1*uintptr(i32(0))))) == i32(103)) + _15_jj = i32(9) - (i32(3) * _15_isGlob) +_47: + if _15_jj >= (_len-i32(1)) || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_15_zAns)) + 1*uintptr(_15_jj)))))))))&int32(u16(8192))) == 0 { + goto _51 + } + _15_jj += 1 + goto _47 +_51: + { + p := &_15_zAns + *p = (*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(*p)) + 1*uintptr(_15_jj))) + sink0 = *p + } + _15_zCopy = bin.Xsqlite3_mprintf(tls, str(2708), (_len-_15_jj)-i32(1), unsafe.Pointer(_15_zAns)) + if (bool2int(bin.Xsqlite3_strglob(tls, _15_zCopy, _sResult.X0) == i32(0)) ^ _15_isGlob) != 0 { + _errorMessage(tls, str(2810), _prevLine, unsafe.Pointer(_zFilename), unsafe.Pointer(_15_zCopy), unsafe.Pointer(_sResult.X0)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_15_zCopy)) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(84 /* X14 */))) += 1 + _stringReset(tls, &_sResult) + goto _53 +_46: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2853)) == i32(0) { + _logMessage(tls, str(2526), unsafe.Pointer(_sResult.X0)) + goto _55 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2860)) != i32(0) { + goto _56 + } + _19_zToDel = nil + _19_zNewFile = (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg)) + 100*uintptr(i32(0)))))) + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_19_zNewFile)) + 1*uintptr(i32(0))))) == i32(47) { + goto _57 + } + _20_k = int32(crt.Xstrlen(tls, _zFilename)) - i32(1) +_58: + if _20_k < i32(0) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zFilename)) + 1*uintptr(_20_k)))) == i32(47) { + goto _62 + } + _20_k -= 1 + goto _58 +_62: + if _20_k > i32(0) { + _19_zNewFile = store0(&_19_zToDel, bin.Xsqlite3_mprintf(tls, str(2867), _20_k, unsafe.Pointer(_zFilename), unsafe.Pointer(_19_zNewFile))) + } +_57: + _19_zNewScript = _readFile(tls, _19_zNewFile) + if (_g.X10) != 0 { + _logMessage(tls, str(2875), unsafe.Pointer(_19_zNewFile)) + } + _runScript(tls, i32(0), i32(0), _19_zNewScript, _19_zNewFile) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_19_zNewScript)) + if (_g.X10) != 0 { + _logMessage(tls, str(2894), unsafe.Pointer(_19_zNewFile)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_19_zToDel)) + goto _66 +_56: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2911)) != i32(0) { + goto _67 + } + _23_jj = i32(7) +_68: + if _23_jj >= _len || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+_23_jj)))))))))&int32(u16(8192))) == 0 { + goto _72 + } + _23_jj += 1 + goto _68 +_72: + _logMessage(tls, str(2708), _len-_23_jj, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_23_jj))))))))) + goto _73 +_67: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2917)) != i32(0) { + goto _74 + } + _25_jj = i32(4) +_75: + if _25_jj >= _len || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+_25_jj)))))))))&int32(u16(8192))) == 0 { + goto _79 + } + _25_jj += 1 + goto _75 +_79: + _25_pStmt = _prepareSql(tls, str(2920), _len-_25_jj, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_25_jj))))))))) + _25_rc = bin.Xsqlite3_step(tls, _25_pStmt) + if (_25_rc != i32(100)) || (bin.Xsqlite3_column_int(tls, _25_pStmt, i32(0)) == i32(0)) { + { + p := &_ii + *p = (*p) + _findEndif(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len))))))), i32(1), &_lineno) + sink1 = *p + } + } + bin.Xsqlite3_finalize(tls, _25_pStmt) + goto _82 +_74: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2932)) == i32(0) { + { + p := &_ii + *p = (*p) + _findEndif(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len))))))), i32(0), &_lineno) + sink1 = *p + } + goto _84 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2937)) == i32(0) { + goto _86 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2943)) != i32(0) || _iClient != i32(0) { + goto _88 + } + _30_iNewClient = crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))) + if _30_iNewClient > i32(0) { + _startClient(tls, _30_iNewClient) + } + goto _90 +_88: + if (crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2949)) == i32(0)) && (_iClient == i32(0)) { + _32_iTimeout = func() int32 { + if _nArg >= i32(2) { + return crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(1))))))) + } + return i32(10000) + }() + bin.Xsqlite3_snprintf(tls, int32(u32(1000)), (*int8)(unsafe.Pointer(&_zError)), str(2954), _prevLine, unsafe.Pointer(_zFilename)) + _waitForClient(tls, crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))), _32_iTimeout, (*int8)(unsafe.Pointer(&_zError))) + goto _95 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2969)) != i32(0) || _iClient != i32(0) { + goto _97 + } + _33_iTarget = crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))) + _33_iEnd = _findEnd(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len))))))), &_lineno) + if _33_iTarget < i32(0) { + _errorMessage(tls, str(2974), _prevLine, unsafe.Pointer(_zFilename), _33_iTarget) + goto _99 + } + _33_zTask = bin.Xsqlite3_mprintf(tls, str(2708), _33_iEnd, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len))))))))) + if _nArg > i32(1) { + _33_zTName = bin.Xsqlite3_mprintf(tls, str(2526), unsafe.Pointer((*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(1)))))))) + goto _101 + } + _33_zTName = bin.Xsqlite3_mprintf(tls, str(3011), unsafe.Pointer(_filenameTail(tls, _zFilename)), _prevLine) +_101: + _startClient(tls, _33_iTarget) + _runSql(tls, str(3017), _33_iTarget, unsafe.Pointer(_33_zTask), unsafe.Pointer(_33_zTName)) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_33_zTask)) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_33_zTName)) +_99: + { + p := &_33_iEnd + *p = (*p) + _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_33_iEnd))))))), &_lineno) + sink1 = *p + } + { + p := &_len + *p = (*p) + _33_iEnd + sink1 = *p + } + _iBegin = _ii + _len + goto _102 +_97: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(3073)) == i32(0) { + _test_breakpoint(tls) + goto _104 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(3084)) == i32(0) { + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(76 /* X12 */))) = func() int32 { + if _nArg >= i32(1) { + return bool2int(_booleanValue(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))) == 0) + } + return i32(1) + }() + goto _108 + } + _errorMessage(tls, str(3100), _prevLine, unsafe.Pointer(_zFilename), unsafe.Pointer((*int8)(unsafe.Pointer(&_zCmd)))) +_108: +_104: +_102: +_95: +_90: +_86: +_84: +_82: +_73: +_66: +_55: +_53: +_44: +_35: +_33: +_30: +_27: +_24: + { + p := &_ii + *p = (*p) + _len + sink1 = *p + } + goto _0 +_1: + if _iBegin < _ii { + _41_zSql = bin.Xsqlite3_mprintf(tls, str(2708), _ii-_iBegin, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_iBegin))))))))) + _runSql(tls, _41_zSql) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_41_zSql)) + } + _stringFree(tls, &_sResult) + _ = _sResult + _ = _zCmd + _ = _zError + _ = _azArg +} + +// Reset a string to an empty string +func _stringReset(tls *crt.TLS, _p *XString) { + if (_p.X0) == nil { + _stringAppend(tls, _p, str(2192), i32(1)) + } + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p)) + uintptr(4 /* X1 */))) = i32(0) + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p.X0)) + 1*uintptr(i32(0)))) = int8(i32(0)) +} + +// Return the length of the next token. +func _tokenLength(tls *crt.TLS, _z *int8, _pnLine *int32) (r0 int32) { + var _n, _1_inC, _1_c, _10_delim, _13_c int32 + _n = i32(0) + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))))))))&int32(u16(8192))) == 0 && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) != i32(47) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(1))))) != i32(42)) { + goto _2 + } + _1_inC = i32(0) + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) == i32(47) { + _1_inC = i32(1) + _n = i32(2) + } +_4: + if store1(&_1_c, int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(postInc1(&_n, int32(1))))))) == i32(0) { + goto _5 + } + if _1_c == i32(10) { + *_pnLine += 1 + } + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(_1_c)))))) & int32(u16(8192))) != 0 { + goto _4 + } + if (_1_inC != 0 && (_1_c == i32(42))) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == i32(47)) { + _n += 1 + _1_inC = i32(0) + goto _11 + } + if ((_1_inC == 0) && (_1_c == i32(47))) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == i32(42)) { + _n += 1 + _1_inC = i32(1) + goto _15 + } + if _1_inC == 0 { + goto _5 + } +_15: +_11: + goto _4 +_5: + _n -= 1 + goto _17 +_2: + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) != i32(45) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(1))))) != i32(45) { + goto _19 + } + _n = i32(2) +_20: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == 0 || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == i32(10) { + goto _24 + } + _n += 1 + goto _20 +_24: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) != 0 { + *_pnLine += 1 + _n += 1 + } + goto _26 +_19: + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) != i32(34) && int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) != i32(39) { + goto _28 + } + _10_delim = int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) + _n = i32(1) +_29: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == 0 { + goto _32 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == i32(10) { + *_pnLine += 1 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) != _10_delim { + goto _34 + } + _n += 1 + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(1))))) != _10_delim { + goto _32 + } +_34: + _n += 1 + goto _29 +_32: + goto _36 +_28: + _n = i32(1) +_37: + if store1(&_13_c, int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n))))) == i32(0) || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(_13_c))))))&int32(u16(8192))) != 0 || _13_c == i32(34) || _13_c == i32(39) || _13_c == i32(59) { + goto _44 + } + _n += 1 + goto _37 +_44: +_36: +_26: +_17: + return _n +} + +// Run arbitrary SQL and record the results in an output string +// given by the first parameter. +func _evalSql(tls *crt.TLS, _p *XString, _zFormat *int8, args ...interface{}) (r0 int32) { + var _rc int32 + var _zSql, _zErrMsg *int8 + var _ap []interface{} + var _1_zErr [30]int8 + _zErrMsg = nil + _ap = args + _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + func() { + if (_g.X15) <= i32(0) { + crt.X__builtin_fprintf(tls, Xstderr, str(1897), unsafe.Pointer(str(1933)), i32(494), unsafe.Pointer((*int8)(unsafe.Pointer(&_evalSqlØ00__func__Ø000))), unsafe.Pointer(str(3136))) + crt.X__builtin_abort(tls) + } + }() + _rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_g.X3), _zSql, _evalCallback, (unsafe.Pointer)(_p), &_zErrMsg) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) + if _rc == 0 { + goto _2 + } + bin.Xsqlite3_snprintf(tls, int32(u32(30)), (*int8)(unsafe.Pointer(&_1_zErr)), str(3149), _rc) + _stringAppendTerm(tls, _p, (*int8)(unsafe.Pointer(&_1_zErr))) + if _zErrMsg != nil { + _stringAppendTerm(tls, _p, _zErrMsg) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zErrMsg)) + } +_2: + return _rc + + _ = _1_zErr + panic(0) +} + +var _evalSqlØ00__func__Ø000 [8]int8 + +func init() { + crt.Xstrncpy(nil, &_evalSqlØ00__func__Ø000[0], str(3159), 8) +} + +// Copy a single token into a string buffer. +func _extractToken(tls *crt.TLS, _zIn *int8, _nIn int32, _zOut *int8, _nOut int32) (r0 int32) { + var _i int32 + if _nIn <= i32(0) { + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zOut)) + 1*uintptr(i32(0)))) = int8(i32(0)) + return i32(0) + } + _i = i32(0) +_1: + if _i >= _nIn || _i >= (_nOut-i32(1)) || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zIn)) + 1*uintptr(_i)))))))))&int32(u16(8192))) != 0 { + goto _6 + } + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zOut)) + 1*uintptr(_i))) = *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zIn)) + 1*uintptr(_i))) + _i += 1 + goto _1 +_6: + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zOut)) + 1*uintptr(_i))) = int8(i32(0)) + return _i +} + +// Mark a script as having finished. Remove the CLIENT table entry +// if bShutdown is true. +func _finishScript(tls *crt.TLS, _iClient int32, _taskId int32, _bShutdown int32) (r0 int32) { + _runSql(tls, str(3167), _taskId) + if _bShutdown != 0 { + _runSql(tls, str(2383), _iClient) + } + return i32(0) +} + +// Read the entire content of a file into memory +func _readFile(tls *crt.TLS, _zFilename *int8) (r0 *int8) { + var _sz int32 + var _z *int8 + var _in *crt.XFILE + _in = crt.Xfopen64(tls, _zFilename, str(3248)) + if _in == nil { + _fatalError(tls, str(3251), unsafe.Pointer(_zFilename)) + } + crt.Xfseek(tls, _in, i32(0), i32(2)) + _sz = crt.Xftell(tls, _in) + crt.Xrewind(tls, _in) + _z = (*int8)(bin.Xsqlite3_malloc(tls, _sz+i32(1))) + _sz = int32(crt.Xfread(tls, (unsafe.Pointer)(_z), uint32(i32(1)), uint32(_sz), _in)) + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_sz))) = int8(i32(0)) + crt.Xfclose(tls, _in) + return _z +} + +// Find the number of characters up to the first character past the +// of the next "--endif" or "--else" token. Nested --if commands are +// also skipped. +func _findEndif(tls *crt.TLS, _z *int8, _stopAtElse int32, _pnLine *int32) (r0 int32) { + var _n, _1_len, _3_skip int32 + _n = i32(0) +_0: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == 0 { + goto _1 + } + _1_len = _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), _pnLine) + if ((crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), str(3280), uint32(i32(7))) == i32(0)) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(7))))))))))&int32(u16(8192))) != 0) || ((_stopAtElse != 0 && (crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), str(3288), uint32(i32(6))) == i32(0))) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(6))))))))))&int32(u16(8192))) != 0) { + return _n + _1_len + } + if (crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), str(3295), uint32(i32(4))) == i32(0)) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(4))))))))))&int32(u16(8192))) != 0 { + _3_skip = _findEndif(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_1_len))))))), i32(0), _pnLine) + { + p := &_n + *p = (*p) + (_3_skip + _1_len) + sink1 = *p + } + goto _9 + } + { + p := &_n + *p = (*p) + _1_len + sink1 = *p + } +_9: + goto _0 +_1: + return _n +} + +// Start up a client process for iClient, if it is not already +// running. If the client is already running, then this routine +// is a no-op. +func _startClient(tls *crt.TLS, _iClient int32) { + var _1_rc int32 + var _1_zSys *int8 + _runSql(tls, str(3300), _iClient) + if bin.Xsqlite3_changes(tls, (*bin.Xsqlite3)(_g.X3)) == 0 { + goto _0 + } + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3342), unsafe.Pointer(_g.X0), unsafe.Pointer(_g.X2), _iClient, _g.X10) + if (_g.X11) != 0 { + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3373), unsafe.Pointer(_1_zSys)) + } + if (_g.X16) != 0 { + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3387), unsafe.Pointer(_1_zSys)) + } + if (_g.X1) != nil { + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3397), unsafe.Pointer(_1_zSys), unsafe.Pointer(_g.X1)) + } + if (_g.X10) >= i32(2) { + _logMessage(tls, str(3411), unsafe.Pointer(_1_zSys)) + } + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3424), unsafe.Pointer(_1_zSys)) + _1_rc = crt.Xsystem(tls, _1_zSys) + if _1_rc != 0 { + _errorMessage(tls, str(3429), _1_rc) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_1_zSys)) +_0: +} + +// Wait for a client process to complete all its tasks +func _waitForClient(tls *crt.TLS, _iClient int32, _iTimeout int32, _zErrPrefix *int8) { + var _rc int32 + var _pStmt unsafe.Pointer + if _iClient > i32(0) { + _pStmt = _prepareSql(tls, str(3463), _iClient) + goto _1 + } + _pStmt = _prepareSql(tls, str(3559)) +_1: + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(88 /* X15 */))) = i32(0) +_2: + if ((store1(&_rc, bin.Xsqlite3_step(tls, _pStmt)) == i32(5)) || (_rc == i32(100))) && (_iTimeout > i32(0)) { + bin.Xsqlite3_reset(tls, _pStmt) + bin.Xsqlite3_sleep(tls, i32(50)) + { + p := &_iTimeout + *p = (*p) - i32(50) + sink1 = *p + } + goto _2 + } + bin.Xsqlite3_finalize(tls, _pStmt) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(88 /* X15 */))) = i32(10000) + if _rc == i32(101) { + goto _6 + } + if _zErrPrefix == nil { + _zErrPrefix = str(454) + } + if _iClient > i32(0) { + _errorMessage(tls, str(3640), unsafe.Pointer(_zErrPrefix), _iClient) + goto _9 + } + _errorMessage(tls, str(3672), unsafe.Pointer(_zErrPrefix)) +_9: +_6: +} + +// Find the number of characters up to the start of the next "--end" token. +func _findEnd(tls *crt.TLS, _z *int8, _pnLine *int32) (r0 int32) { + var _n int32 + _n = i32(0) +_0: + if ((*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) != 0) && (crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), str(3706), uint32(i32(5))) != 0 || ((int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(5)))))))))) & int32(u16(8192))) == 0)) { + { + p := &_n + *p = (*p) + _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), _pnLine) + sink1 = *p + } + goto _0 + } + return _n +} + +// Return a pointer to the tail of a filename +func _filenameTail(tls *crt.TLS, _z *int8) (r0 *int8) { + var _i, _j int32 + _i = store1(&_j, i32(0)) +_0: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == 0 { + goto _3 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == i32(47) { + _j = _i + i32(1) + } + _i += 1 + goto _0 +_3: + return (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z)) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_j))))))) +} + +// This routine exists as a convenient place to set a debugger +// breakpoint. +func _test_breakpoint(tls *crt.TLS) { + _test_breakpointØ00cntØ001 += 1 +} + +var _test_breakpointØ00cntØ001 int32 + +// Interpret zArg as a boolean value. Return either 0 or 1. +func _booleanValue(tls *crt.TLS, _zArg *int8) (r0 int32) { + var _i int32 + if _zArg == nil { + return i32(0) + } + _i = i32(0) +_1: + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zArg)) + 1*uintptr(_i)))) < i32(48) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zArg)) + 1*uintptr(_i)))) > i32(57) { + goto _5 + } + _i += 1 + goto _1 +_5: + if (_i > i32(0)) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zArg)) + 1*uintptr(_i)))) == i32(0)) { + return crt.Xatoi(tls, _zArg) + } + if (bin.Xsqlite3_stricmp(tls, _zArg, str(3712)) == i32(0)) || (bin.Xsqlite3_stricmp(tls, _zArg, str(3715)) == i32(0)) { + return i32(1) + } + if (bin.Xsqlite3_stricmp(tls, _zArg, str(3719)) == i32(0)) || (bin.Xsqlite3_stricmp(tls, _zArg, str(3723)) == i32(0)) { + return i32(0) + } + _errorMessage(tls, str(3726), unsafe.Pointer(_zArg)) + return i32(0) +} + +func bool2int(b bool) int32 { + if b { + return 1 + } + return 0 +} +func bug20530(interface{}) {} //TODO remove when https://github.com/golang/go/issues/20530 is fixed. +func i16(n int16) int16 { return n } +func i32(n int32) int32 { return n } +func i64(n int64) int64 { return n } +func i8(n int8) int8 { return n } +func init() { nzf32 *= -1; nzf64 *= -1 } +func u16(n uint16) uint16 { return n } +func u32(n uint32) uint32 { return n } +func u64(n uint64) uint64 { return n } +func u8(n byte) byte { return n } + +var inf = math.Inf(1) +var nzf32 float32 // -0.0 +var nzf64 float64 // -0.0 +var sink0 *int8 //TODO report GC bug +var sink1 int32 //TODO report GC bug +func postInc0(p **int8, d int) *int8 { + q := (*uintptr)(unsafe.Pointer(p)) + v := *q + *q += uintptr(d) + return (*int8)(unsafe.Pointer(v)) +} +func postInc1(p *int32, d int32) int32 { v := *p; *p += d; return v } +func preInc1(p *int32, d int32) int32 { v := *p + d; *p = v; return v } +func store0(p **int8, v *int8) *int8 { *p = v; return v } +func store1(p *int32, v int32) int32 { *p = v; return v } + +type TGlobal struct { + X0 *int8 + X1 *int8 + X2 *int8 + X3 unsafe.Pointer + X4 *int8 + X5 unsafe.Pointer + X6 *int8 + X7 unsafe.Pointer + X8 [32]int8 + X9 int32 + X10 int32 + X11 int32 + X12 int32 + X13 int32 + X14 int32 + X15 int32 + X16 int32 +} // t2 struct{*int8,*int8,*int8,*struct{},*int8,*struct{},*int8,*struct{},[32]int8,int32,int32,int32,int32,int32,int32,int32,int32} + +type XString struct { + X0 *int8 + X1 int32 + X2 int32 +} // t3 struct{*int8,int32,int32} +func str(n int) *int8 { return (*int8)(unsafe.Pointer(&strTab[n])) } +func wstr(n int) *int32 { return (*int32)(unsafe.Pointer(&strTab[n])) } + +var strTab = []byte("*.test\x002017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b\x00SQLite library and header mismatch\x0aLibrary: %s\x0aHeader: %s\x0a\x00%05d.mptest\x00journalmode\x00repeat\x00vfs\x00client\x00errlog\x00log\x00trace\x00quiet\x00timeout\x00sqltrace\x00sync\x00a\x00illegal client number: %d\x0a\x00%05d.client%02d\x00BEGIN: %s\x00 %s\x00\x0a\x00With SQLite 3.19.3 2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b\x0a\x00-DSQLITE_%s\x0a\x00... %strying to unlink '%s'\x0a\x00still \x00\x00unable to unlink '%s' after %d attempts\x0a\x00cannot open [%s]\x00PRAGMA journal_mode=%Q;\x00PRAGMA synchronous=OFF\x00vfsname\x00eval\x00start-client\x00begin %s (%d)\x00end %s (%d)\x00end-client\x00missing script filename\x00DROP TABLE IF EXISTS task;\x0aDROP TABLE IF EXISTS counters;\x0aDROP TABLE IF EXISTS client;\x0aCREATE TABLE task(\x0a id INTEGER PRIMARY KEY,\x0a name TEXT,\x0a client INTEGER,\x0a starttime DATE,\x0a endtime DATE,\x0a script TEXT\x0a);CREATE INDEX task_i1 ON task(client, starttime);\x0aCREATE INDEX task_i2 ON task(client, endtime);\x0aCREATE TABLE counters(nError,nTest);\x0aINSERT INTO counters VALUES(0,0);\x0aCREATE TABLE client(id INTEGER PRIMARY KEY, wantHalt);\x0a\x00begin script [%s] cycle %d\x0a\x00end script [%s] cycle %d\x0a\x00during shutdown...\x0a\x00UPDATE client SET wantHalt=1\x00SELECT 1 FROM client\x00SELECT nError, nTest FROM counters\x00Summary: %d errors out of %d tests\x0a\x00END: %s\x00Usage: %s DATABASE ?OPTIONS? ?SCRIPT?\x0a\x00Options:\x0a --errlog FILENAME Write errors to FILENAME\x0a --journalmode MODE Use MODE as the journal_mode\x0a --log FILENAME Log messages to FILENAME\x0a --quiet Suppress unnecessary output\x0a --vfs NAME Use NAME as the VFS\x0a --repeat N Repeat the test N times\x0a --sqltrace Enable SQL tracing\x0a --sync Enable synchronous disk writes\x0a --timeout MILLISEC Busy timeout is MILLISEC\x0a --trace BOOLEAN Enable or disable tracing\x0a\x00%s:%i: assertion failure in %s: %s\x0a\x00../../../sqlite.org/sqlite-src-3190300/mptest/mptest.c\x00hasArg==0 || hasArg==1\x00command-line option \"--%s\" requires an argument\x00findOption\x00%s:FATAL: \x00UPDATE client SET wantHalt=1;\x00%s%.*s\x0a\x00(info) %s\x00(errcode=%d) %s\x00%s: \x00%s:ERROR: \x00%s\x0a%s\x0a\x00timeout after %dms\x00main\x00 \x00nil\x00'\x00out of memory\x00[%.*s]\x00%s: unrecognized arguments:\x00BEGIN IMMEDIATE\x00in startScript: %s\x00UPDATE counters SET nError=nError+%d, nTest=nTest+%d\x00SELECT 1 FROM client WHERE id=%d AND wantHalt\x00DELETE FROM client WHERE id=%d\x00COMMIT TRANSACTION;\x00SELECT script, id, name FROM task WHERE client=%d AND starttime IS NULL ORDER BY id LIMIT 1\x00%s\x00UPDATE task SET starttime=strftime('%%Y-%%m-%%d %%H:%%M:%%f','now') WHERE id=%d;\x00Waited over 30 seconds with no work. Giving up.\x00DELETE FROM client WHERE id=%d; COMMIT;\x00COMMIT\x00%.*s\x00sleep\x00exit\x00testcase\x00finish\x00reset\x00match\x00line %d of %s:\x0aExpected [%.*s]\x0a Got [%s]\x00glob\x00notglob\x00line %d of %s:\x0aExpected [%s]\x0a Got [%s]\x00output\x00source\x00%.*s/%s\x00begin script [%s]\x0a\x00end script [%s]\x0a\x00print\x00if\x00SELECT %.*s\x00else\x00endif\x00start\x00wait\x00line %d of %s\x0a\x00task\x00line %d of %s: bad client number: %d\x00%s:%d\x00INSERT INTO task(client,script,name) VALUES(%d,'%q',%Q)\x00breakpoint\x00show-sql-errors\x00line %d of %s: unknown command --%s\x00g.iTimeout>0\x00error(%d)\x00evalSql\x00UPDATE task SET endtime=strftime('%%Y-%%m-%%d %%H:%%M:%%f','now') WHERE id=%d;\x00rb\x00cannot open \"%s\" for reading\x00--endif\x00--else\x00--if\x00INSERT OR IGNORE INTO client VALUES(%d,0)\x00%s \"%s\" --client %d --trace %d\x00%z --sqltrace\x00%z --sync\x00%z --vfs \"%s\"\x00system('%q')\x00%z &\x00system() fails with error code %d\x00SELECT 1 FROM task WHERE client=%d AND client IN (SELECT id FROM client) AND endtime IS NULL\x00SELECT 1 FROM task WHERE client IN (SELECT id FROM client) AND endtime IS NULL\x00%stimeout waiting for client %d\x00%stimeout waiting for all clients\x00--end\x00on\x00yes\x00off\x00no\x00unknown boolean: [%s]\x00") diff --git a/internal/mptest/mptest_linux_amd64.go b/internal/mptest/mptest_linux_amd64.go new file mode 100644 index 0000000..812218c --- /dev/null +++ b/internal/mptest/mptest_linux_amd64.go @@ -0,0 +1,1868 @@ +// Code generated by ccgo. DO NOT EDIT. + +// mptest.c + +// 2013-04-05 +// +// The author disclaims copyright to this source code. In place of +// a legal notice, here is a blessing: +// +// May you do good and not evil. +// May you find forgiveness for yourself and forgive others. +// May you share freely, never taking more than you give. +// +// ************************************************************************* +// +// This is a program used for testing SQLite, and specifically for testing +// the ability of independent processes to access the same SQLite database +// concurrently. +// +// Compile this program as follows: +// +// gcc -g -c -Wall sqlite3.c $(OPTS) +// gcc -g -o mptest mptest.c sqlite3.o $(LIBS) +// +// Recommended options: +// +// -DHAVE_USLEEP +// -DSQLITE_NO_SYNC +// -DSQLITE_THREADSAFE=0 +// -DSQLITE_OMIT_LOAD_EXTENSION +// +// Run like this: +// +// ./mptest $database $script +// +// where $database is the database to use for testing and $script is a +// test script. + +package main + +import ( + "math" + "os" + "unsafe" + + "github.com/cznic/crt" + "github.com/cznic/sqlite/internal/bin" +) + +var argv []*int8 + +func main() { + for _, v := range os.Args { + argv = append(argv, (*int8)(crt.CString(v))) + } + argv = append(argv, nil) + X_start(crt.NewTLS(), int32(len(os.Args)), &argv[0]) +} + +func X_start(tls *crt.TLS, _argc int32, _argv **int8) { + crt.X__register_stdfiles(tls, Xstdin, Xstdout, Xstderr) + crt.X__builtin_exit(tls, Xmain(tls, _argc, _argv)) +} + +var Xstdin unsafe.Pointer + +func init() { + Xstdin = unsafe.Pointer(&X__stdfiles) +} + +var X__stdfiles [3]unsafe.Pointer + +var Xstdout unsafe.Pointer + +func init() { + Xstdout = (unsafe.Pointer)(uintptr(unsafe.Pointer(&X__stdfiles)) + 8) +} + +var Xstderr unsafe.Pointer + +func init() { + Xstderr = (unsafe.Pointer)(uintptr(unsafe.Pointer(&X__stdfiles)) + 16) +} + +func Xmain(tls *crt.TLS, _argc int32, _argv **int8) (r0 int32) { + var _iClient, _n, _i, _openFlags, _rc, _taskId, _nRep, _iRep, _iTmout, _7_nTry, _15_iTimeout int32 + var _zClient, _zScript, _zTrace, _zCOption, _zJMode, _zNRep, _zTmout, _14_zTaskName *int8 + var _15_pStmt unsafe.Pointer + r0 = i32(0) + _openFlags = i32(2) + _nRep = i32(1) + _iTmout = i32(0) + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(0 /* X0 */))) = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(0)))) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(100 /* X10 */))) = i32(1) + if _argc < i32(2) { + _usage(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(0))))) + } + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(16 /* X2 */))) = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(1)))) + if Xstrglob(tls, str(0), _g.X2) != 0 { + _usage(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(0))))) + } + if crt.Xstrcmp(tls, bin.Xsqlite3_sourceid(tls), str(7)) != i32(0) { + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(92), unsafe.Pointer(bin.Xsqlite3_sourceid(tls)), unsafe.Pointer(str(7))) + crt.Xexit(tls, i32(1)) + } + _n = _argc - i32(2) + bin.Xsqlite3_snprintf(tls, int32(u64(32)), (*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(64 /* X8 */))))), str(152), crt.Xgetpid(tls)) + _zJMode = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(164), i32(1)) + _zNRep = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(176), i32(1)) + if _zNRep != nil { + _nRep = crt.Xatoi(tls, _zNRep) + } + if _nRep < i32(1) { + _nRep = i32(1) + } + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(8 /* X1 */))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(183), i32(1)) + _zClient = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(187), i32(1)) + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(32 /* X4 */))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(194), i32(1)) + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(48 /* X6 */))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(201), i32(1)) + _zTrace = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(205), i32(1)) + if _zTrace != nil { + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(100 /* X10 */))) = crt.Xatoi(tls, _zTrace) + } + if _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(211), i32(0)) != nil { + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(100 /* X10 */))) = i32(0) + } + _zTmout = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(217), i32(1)) + if _zTmout != nil { + _iTmout = crt.Xatoi(tls, _zTmout) + } + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(104 /* X11 */))) = bool2int(_findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(225), i32(0)) != nil) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(124 /* X16 */))) = bool2int(_findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(234), i32(0)) != nil) + if (_g.X4) != nil { + *(**crt.XFILE)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(40 /* X5 */))))) = crt.Xfopen64(tls, _g.X4, str(239)) + goto _9 + } + *(**crt.XFILE)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(40 /* X5 */))))) = (*crt.XFILE)(Xstderr) +_9: + if (_g.X6) != nil { + *(**crt.XFILE)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(56 /* X7 */))))) = crt.Xfopen64(tls, _g.X6, str(239)) + goto _11 + } + *(**crt.XFILE)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(56 /* X7 */))))) = (*crt.XFILE)(Xstdout) +_11: + bin.Xsqlite3_config(tls, i32(16), _sqlErrorCallback, i32(0)) + if _zClient == nil { + goto _12 + } + _iClient = crt.Xatoi(tls, _zClient) + if _iClient < i32(1) { + _fatalError(tls, str(241), _iClient) + } + bin.Xsqlite3_snprintf(tls, int32(u64(32)), (*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(64 /* X8 */))))), str(268), crt.Xgetpid(tls), _iClient) + goto _14 +_12: + _7_nTry = i32(0) + if (_g.X10) <= i32(0) { + goto _15 + } + crt.Xprintf(tls, str(284), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(0)))))) + _i = i32(1) +_16: + if _i >= _argc { + goto _19 + } + crt.Xprintf(tls, str(294), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(_i))))) + _i += 1 + goto _16 +_19: + crt.Xprintf(tls, str(298)) + crt.Xprintf(tls, str(300)) + _i = i32(0) +_20: + if store0(&_zCOption, bin.Xsqlite3_compileoption_get(tls, _i)) == nil { + goto _23 + } + crt.Xprintf(tls, str(405), unsafe.Pointer(_zCOption)) + _i += 1 + goto _20 +_23: + crt.Xfflush(tls, (*crt.XFILE)(Xstdout)) +_15: + _iClient = i32(0) +_24: + if (_7_nTry % i32(5)) == i32(4) { + crt.Xprintf(tls, str(418), unsafe.Pointer(func() *int8 { + if _7_nTry > i32(5) { + return str(447) + } + return str(454) + }()), unsafe.Pointer(_g.X2)) + } + _rc = crt.Xunlink(tls, _g.X2) + if _rc != 0 && ((*crt.X__errno_location(tls)) == i32(2)) { + _rc = i32(0) + } + if ((_rc != i32(0)) && (preInc1(&_7_nTry, 1) < i32(60))) && (bin.Xsqlite3_sleep(tls, i32(1000)) > i32(0)) { + goto _24 + } + if _rc != i32(0) { + _fatalError(tls, str(455), unsafe.Pointer(_g.X2), _7_nTry) + } + { + p := &_openFlags + *p = (*p) | i32(4) + sink1 = *p + } +_14: + _rc = bin.Xsqlite3_open_v2(tls, _g.X2, (**bin.Xsqlite3)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(24 /* X3 */))))), _openFlags, _g.X1) + if _rc != 0 { + _fatalError(tls, str(496), unsafe.Pointer(_g.X2)) + } + if _iTmout > i32(0) { + bin.Xsqlite3_busy_timeout(tls, (*bin.Xsqlite3)(_g.X3), _iTmout) + } + if _zJMode != nil { + _runSql(tls, str(513), unsafe.Pointer(_zJMode)) + } + if (_g.X16) == 0 { + _trySql(tls, str(537)) + } + bin.Xsqlite3_enable_load_extension(tls, (*bin.Xsqlite3)(_g.X3), i32(1)) + bin.Xsqlite3_busy_handler(tls, (*bin.Xsqlite3)(_g.X3), _busyHandler, nil) + bin.Xsqlite3_create_function(tls, (*bin.Xsqlite3)(_g.X3), str(560), i32(0), i32(1), nil, *(*func(*crt.TLS, *bin.Xsqlite3_context, int32, **bin.XMem))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer, int32, *unsafe.Pointer) + }{_vfsNameFunc})), *(*func(*crt.TLS, *bin.Xsqlite3_context, int32, **bin.XMem))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer, int32, *unsafe.Pointer) + }{nil})), *(*func(*crt.TLS, *bin.Xsqlite3_context))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer) + }{nil}))) + bin.Xsqlite3_create_function(tls, (*bin.Xsqlite3)(_g.X3), str(568), i32(1), i32(1), nil, *(*func(*crt.TLS, *bin.Xsqlite3_context, int32, **bin.XMem))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer, int32, *unsafe.Pointer) + }{_evalFunc})), *(*func(*crt.TLS, *bin.Xsqlite3_context, int32, **bin.XMem))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer, int32, *unsafe.Pointer) + }{nil})), *(*func(*crt.TLS, *bin.Xsqlite3_context))(unsafe.Pointer(&struct { + f func(*crt.TLS, unsafe.Pointer) + }{nil}))) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(120 /* X15 */))) = i32(10000) + if (_g.X11) != 0 { + bin.Xsqlite3_trace(tls, (*bin.Xsqlite3)(_g.X3), _sqlTraceCallback, nil) + } + if _iClient <= i32(0) { + goto _38 + } + if _n > i32(0) { + _unrecognizedArguments(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(0)))), _n, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8)))))))))))) + } + if (_g.X10) != 0 { + _logMessage(tls, str(573)) + } +_41: + _14_zTaskName = nil + _rc = _startScript(tls, _iClient, &_zScript, &_taskId, &_14_zTaskName) + if _rc == i32(101) { + goto _42 + } + if (_g.X10) != 0 { + _logMessage(tls, str(586), unsafe.Pointer(_14_zTaskName), _taskId) + } + _runScript(tls, _iClient, _taskId, _zScript, _14_zTaskName) + if (_g.X10) != 0 { + _logMessage(tls, str(600), unsafe.Pointer(_14_zTaskName), _taskId) + } + _finishScript(tls, _iClient, _taskId, i32(0)) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_14_zTaskName)) + bin.Xsqlite3_sleep(tls, i32(10)) + goto _41 +_42: + if (_g.X10) != 0 { + _logMessage(tls, str(612)) + } + goto _47 +_38: + if _n == i32(0) { + _fatalError(tls, str(623)) + } + if _n > i32(1) { + _unrecognizedArguments(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(0)))), _n, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(i32(2))))))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8)))))))))))) + } + _runSql(tls, str(647)) + _zScript = _readFile(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(2))))) + _iRep = i32(1) +_50: + if _iRep > _nRep { + goto _53 + } + if (_g.X10) != 0 { + _logMessage(tls, str(1083), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(2))))), _iRep) + } + _runScript(tls, i32(0), i32(0), _zScript, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(2))))) + if (_g.X10) != 0 { + _logMessage(tls, str(1111), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(2))))), _iRep) + } + _iRep += 1 + goto _50 +_53: + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zScript)) + _waitForClient(tls, i32(0), i32(2000), str(1137)) + _trySql(tls, str(1157)) + bin.Xsqlite3_sleep(tls, i32(10)) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(120 /* X15 */))) = i32(0) + _15_iTimeout = i32(1000) +_56: + if ((store1(&_rc, _trySql(tls, str(1186))) == i32(5)) || (_rc == i32(100))) && (_15_iTimeout > i32(0)) { + bin.Xsqlite3_sleep(tls, i32(10)) + { + p := &_15_iTimeout + *p = (*p) - i32(10) + sink1 = *p + } + goto _56 + } + bin.Xsqlite3_sleep(tls, i32(100)) + _15_pStmt = _prepareSql(tls, str(1207)) + _15_iTimeout = i32(1000) +_60: + if (store1(&_rc, bin.Xsqlite3_step(tls, _15_pStmt)) == i32(5)) && (_15_iTimeout > i32(0)) { + bin.Xsqlite3_sleep(tls, i32(10)) + { + p := &_15_iTimeout + *p = (*p) - i32(10) + sink1 = *p + } + goto _60 + } + if _rc == i32(100) { + { + p := (*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(112 /* X13 */))) + *p = (*p) + bin.Xsqlite3_column_int(tls, _15_pStmt, i32(0)) + sink1 = *p + } + { + p := (*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(116 /* X14 */))) + *p = (*p) + bin.Xsqlite3_column_int(tls, _15_pStmt, i32(1)) + sink1 = *p + } + } + bin.Xsqlite3_finalize(tls, _15_pStmt) +_47: + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_g.X3)) + _maybeClose(tls, (*crt.XFILE)(_g.X7)) + _maybeClose(tls, (*crt.XFILE)(_g.X5)) + if _iClient != i32(0) { + goto _64 + } + crt.Xprintf(tls, str(1242), _g.X13, _g.X14) + crt.Xprintf(tls, str(1278), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(0)))))) + _i = i32(1) +_65: + if _i >= _argc { + goto _68 + } + crt.Xprintf(tls, str(294), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(_i))))) + _i += 1 + goto _65 +_68: + crt.Xprintf(tls, str(298)) +_64: + return bool2int((_g.X13) > i32(0)) +} + +var _g TGlobal + +// Print a usage message for the program and exit +func _usage(tls *crt.TLS, _argv0 *int8) { + var _i int32 + var _zTail *int8 + _zTail = _argv0 + _i = i32(0) +_0: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv0)) + 1*uintptr(_i)))) == 0 { + goto _3 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv0)) + 1*uintptr(_i)))) == i32(47) { + _zTail = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv0))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_i))))))))) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(i32(1)))))))) + } + _i += 1 + goto _0 +_3: + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1286), unsafe.Pointer(_zTail)) + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1325)) + crt.Xexit(tls, i32(1)) +} + +// Return TRUE if string z[] matches glob pattern zGlob[]. +// Return FALSE if the pattern does not match. +// +// Globbing rules: +// +// '*' Matches any sequence of zero or more characters. +// +// '?' Matches exactly one character. +// +// [...] Matches one character from the enclosed list of +// characters. +// +// [^...] Matches one character not in the enclosed list. +// +// '#' Matches any sequence of one or more digits with an +// optional + or - sign in front +func Xstrglob(tls *crt.TLS, _zGlob *int8, _z *int8) (r0 int32) { + var _c, _c2, _invert, _seen, _10_prior_c int32 +_0: + if store1(&_c, int32(*postInc0(&_zGlob, 1))) == i32(0) { + goto _1 + } + if _c != i32(42) { + goto _2 + } +_3: + if store1(&_c, int32(*postInc0(&_zGlob, 1))) != i32(42) && _c != i32(63) { + goto _4 + } + if (_c == i32(63)) && (int32(*postInc0(&_z, 1)) == i32(0)) { + return i32(0) + } + goto _3 +_4: + if _c == i32(0) { + return i32(1) + } + if _c != i32(91) { + goto _10 + } +_11: + if ((*_z) != 0) && Xstrglob(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zGlob))-uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(i32(1)))))))), _z) != 0 { + *(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1) + goto _11 + } + return bool2int(int32(*_z) != i32(0)) + +_10: +_14: + if store1(&_c2, int32(*postInc0(&_z, 1))) == i32(0) { + goto _15 + } +_16: + if _c2 == _c { + goto _17 + } + _c2 = int32(*postInc0(&_z, 1)) + if _c2 == i32(0) { + return i32(0) + } + goto _16 +_17: + if Xstrglob(tls, _zGlob, _z) != 0 { + return i32(1) + } + goto _14 +_15: + return i32(0) + +_2: + if _c != i32(63) { + goto _21 + } + if int32(*postInc0(&_z, 1)) == i32(0) { + return i32(0) + } + goto _23 +_21: + if _c != i32(91) { + goto _24 + } + _10_prior_c = i32(0) + _seen = i32(0) + _invert = i32(0) + _c = int32(*postInc0(&_z, 1)) + if _c == i32(0) { + return i32(0) + } + _c2 = int32(*postInc0(&_zGlob, 1)) + if _c2 == i32(94) { + _invert = i32(1) + _c2 = int32(*postInc0(&_zGlob, 1)) + } + if _c2 != i32(93) { + goto _27 + } + if _c == i32(93) { + _seen = i32(1) + } + _c2 = int32(*postInc0(&_zGlob, 1)) +_27: +_29: + if _c2 == 0 || _c2 == i32(93) { + goto _30 + } + if _c2 != i32(45) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zGlob)) + 1*uintptr(i32(0))))) == i32(93) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zGlob)) + 1*uintptr(i32(0))))) == i32(0) || _10_prior_c <= i32(0) { + goto _35 + } + _c2 = int32(*postInc0(&_zGlob, 1)) + if (_c >= _10_prior_c) && (_c <= _c2) { + _seen = i32(1) + } + _10_prior_c = i32(0) + goto _38 +_35: + if _c == _c2 { + _seen = i32(1) + } + _10_prior_c = _c2 +_38: + _c2 = int32(*postInc0(&_zGlob, 1)) + goto _29 +_30: + if (_c2 == i32(0)) || ((_seen ^ _invert) == i32(0)) { + return i32(0) + } + goto _42 +_24: + if _c != i32(35) { + goto _43 + } + if ((int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) == i32(45)) || (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) == i32(43))) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(1))))))))))&int32(u16(2048))) != 0 { + *(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1) + } + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0)))))))))) & int32(u16(2048))) == 0 { + return i32(0) + } + *(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1) +_48: + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0)))))))))) & int32(u16(2048))) != 0 { + *(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1) + goto _48 + } + goto _50 +_43: + if _c != int32(*postInc0(&_z, 1)) { + return i32(0) + } +_50: +_42: +_23: + goto _0 +_1: + return bool2int(int32(*_z) == i32(0)) +} + +// Look for a command-line option. If present, return a pointer. +// Return NULL if missing. +// +// hasArg==0 means the option is a flag. It is either present or not. +// hasArg==1 means the option has an argument. Return a pointer to the +// argument. +func _findOption(tls *crt.TLS, _azArg **int8, _pnArg *int32, _zOption *int8, _hasArg int32) (r0 *int8) { + var _i, _j, _nArg int32 + var _zReturn, _1_z *int8 + _zReturn = nil + _nArg = *_pnArg + func() { + if _hasArg != i32(0) && _hasArg != i32(1) { + crt.X__builtin_fprintf(tls, Xstderr, str(1897), unsafe.Pointer(str(1933)), i32(1211), unsafe.Pointer((*int8)(unsafe.Pointer(&_findOptionØ00__func__Ø000))), unsafe.Pointer(str(1988))) + crt.X__builtin_abort(tls) + } + }() + _i = i32(0) +_3: + if _i >= _nArg { + goto _6 + } + if (_i + _hasArg) >= _nArg { + goto _6 + } + _1_z = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 8*uintptr(_i))) + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(0))))) != i32(45) { + goto _4 + } + *(*uintptr)(unsafe.Pointer(&_1_z)) += uintptr(1) + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(0))))) != i32(45) { + goto _9 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(1))))) == i32(0) { + goto _6 + } + *(*uintptr)(unsafe.Pointer(&_1_z)) += uintptr(1) +_9: + if crt.Xstrcmp(tls, _1_z, _zOption) != i32(0) { + goto _11 + } + if _hasArg != 0 && (_i == (_nArg - i32(1))) { + _fatalError(tls, str(2011), unsafe.Pointer(_1_z)) + } + if _hasArg != 0 { + _zReturn = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 8*uintptr(_i+i32(1)))) + goto _15 + } + _zReturn = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 8*uintptr(_i))) +_15: + _j = (_i + i32(1)) + bool2int(_hasArg != i32(0)) +_16: + if _j < _nArg { + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 8*uintptr(postInc1(&_i, int32(1))))) = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 8*uintptr(postInc1(&_j, int32(1))))) + goto _16 + } + *_pnArg = _i + return _zReturn + +_11: +_4: + _i += 1 + goto _3 +_6: + return _zReturn +} + +var _findOptionØ00__func__Ø000 [11]int8 + +func init() { + crt.Xstrncpy(nil, &_findOptionØ00__func__Ø000[0], str(2059), 11) +} + +// Print an error message and then quit. +func _fatalError(tls *crt.TLS, _zFormat *int8, args ...interface{}) { + var _3_nTry int32 + var _zMsg *int8 + var _ap []interface{} + var _zPrefix [30]int8 + _ap = args + _zMsg = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + bin.Xsqlite3_snprintf(tls, int32(u64(30)), (*int8)(unsafe.Pointer(&_zPrefix)), str(2070), unsafe.Pointer((*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(64 /* X8 */))))))) + if (*crt.XFILE)(_g.X7) != nil { + _printWithPrefix(tls, (*crt.XFILE)(_g.X7), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X7)) + _maybeClose(tls, (*crt.XFILE)(_g.X7)) + } + if ((*crt.XFILE)(_g.X5) != nil) && _safe_strcmp(tls, _g.X4, _g.X6) != 0 { + _printWithPrefix(tls, (*crt.XFILE)(_g.X5), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X5)) + _maybeClose(tls, (*crt.XFILE)(_g.X5)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zMsg)) + if (_g.X3) == nil { + goto _3 + } + _3_nTry = i32(0) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(120 /* X15 */))) = i32(0) +_4: + if (_trySql(tls, str(2081)) == i32(5)) && (postInc1(&_3_nTry, int32(1)) < i32(100)) { + bin.Xsqlite3_sleep(tls, i32(10)) + goto _4 + } +_3: + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_g.X3)) + crt.Xexit(tls, i32(1)) + _ = _zPrefix + _ = _3_nTry +} + +// Print a message adding zPrefix[] to the beginning of every line. +func _printWithPrefix(tls *crt.TLS, _pOut *crt.XFILE, _zPrefix *int8, _zMsg *int8) { + var _1_i int32 +_0: + if _zMsg == nil || (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(i32(0))))) == 0 { + goto _1 + } + _1_i = i32(0) +_3: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(_1_i)))) == 0 || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(_1_i)))) == i32(10) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(_1_i)))) == i32(13) { + goto _8 + } + _1_i += 1 + goto _3 +_8: + crt.Xfprintf(tls, _pOut, str(2111), unsafe.Pointer(_zPrefix), _1_i, unsafe.Pointer(_zMsg)) + { + p := &_zMsg + *p = (*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(*p)) + 1*uintptr(_1_i))) + sink0 = *p + } +_9: + if (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(i32(0))))) == i32(10)) || (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zMsg)) + 1*uintptr(i32(0))))) == i32(13)) { + *(*uintptr)(unsafe.Pointer(&_zMsg)) += uintptr(1) + goto _9 + } + goto _0 +_1: +} + +// Close output stream pOut if it is not stdout or stderr +func _maybeClose(tls *crt.TLS, _pOut *crt.XFILE) { + if (uintptr(unsafe.Pointer(_pOut)) != uintptr(Xstdout)) && (_pOut != (*crt.XFILE)(Xstderr)) { + crt.Xfclose(tls, _pOut) + } +} + +// Compare two pointers to strings, where the pointers might be NULL. +func _safe_strcmp(tls *crt.TLS, _a *int8, _b *int8) (r0 int32) { + if _a == _b { + return i32(0) + } + if _a == nil { + return i32(-1) + } + if _b == nil { + return i32(1) + } + return crt.Xstrcmp(tls, _a, _b) +} + +// Try to run arbitrary SQL. Return success code. +func _trySql(tls *crt.TLS, _zFormat *int8, args ...interface{}) (r0 int32) { + var _rc int32 + var _zSql *int8 + var _ap []interface{} + _ap = args + _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + _rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_g.X3), _zSql, nil, nil, nil) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) + return _rc +} + +// SQL error log callback +func _sqlErrorCallback(tls *crt.TLS, _pArg unsafe.Pointer, _iErrCode int32, _zMsg *int8) { + if (_iErrCode == i32(1)) && (_g.X12) != 0 { + return + } + if ((_iErrCode & i32(255)) == i32(17)) && ((_g.X10) < i32(3)) { + return + } + if (((_g.X15) == i32(0)) && ((_iErrCode & i32(255)) == i32(5))) && ((_g.X10) < i32(3)) { + return + } + if (_iErrCode & i32(255)) == i32(27) { + _logMessage(tls, str(2119), unsafe.Pointer(_zMsg)) + goto _8 + } + _errorMessage(tls, str(2129), _iErrCode, unsafe.Pointer(_zMsg)) +_8: +} + +// Print a log message +func _logMessage(tls *crt.TLS, _zFormat *int8, args ...interface{}) { + var _zMsg *int8 + var _ap []interface{} + var _zPrefix [30]int8 + _ap = args + _zMsg = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + bin.Xsqlite3_snprintf(tls, int32(u64(30)), (*int8)(unsafe.Pointer(&_zPrefix)), str(2145), unsafe.Pointer((*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(64 /* X8 */))))))) + if (*crt.XFILE)(_g.X7) != nil { + _printWithPrefix(tls, (*crt.XFILE)(_g.X7), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X7)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zMsg)) + _ = _zPrefix +} + +// Print an error message +func _errorMessage(tls *crt.TLS, _zFormat *int8, args ...interface{}) { + var _zMsg *int8 + var _ap []interface{} + var _zPrefix [30]int8 + _ap = args + _zMsg = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + bin.Xsqlite3_snprintf(tls, int32(u64(30)), (*int8)(unsafe.Pointer(&_zPrefix)), str(2150), unsafe.Pointer((*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g))+uintptr(64 /* X8 */))))))) + if (*crt.XFILE)(_g.X7) != nil { + _printWithPrefix(tls, (*crt.XFILE)(_g.X7), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X7)) + } + if ((*crt.XFILE)(_g.X5) != nil) && _safe_strcmp(tls, _g.X4, _g.X6) != 0 { + _printWithPrefix(tls, (*crt.XFILE)(_g.X5), (*int8)(unsafe.Pointer(&_zPrefix)), _zMsg) + crt.Xfflush(tls, (*crt.XFILE)(_g.X5)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zMsg)) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(112 /* X13 */))) += 1 + _ = _zPrefix +} + +// Run arbitrary SQL. Issue a fatal error on failure. +func _runSql(tls *crt.TLS, _zFormat *int8, args ...interface{}) { + var _rc int32 + var _zSql *int8 + var _ap []interface{} + _ap = args + _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + _rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_g.X3), _zSql, nil, nil, nil) + if _rc != i32(0) { + _fatalError(tls, str(2161), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_g.X3))), unsafe.Pointer(_zSql)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) +} + +// Busy handler with a g.iTimeout-millisecond timeout +func _busyHandler(tls *crt.TLS, _pCD unsafe.Pointer, _count int32) (r0 int32) { + if (_count * i32(10)) <= (_g.X15) { + goto _0 + } + if (_g.X15) > i32(0) { + _errorMessage(tls, str(2168), _g.X15) + } + return i32(0) + +_0: + bin.Xsqlite3_sleep(tls, i32(10)) + return i32(1) +} + +// Auxiliary SQL function to return the name of the VFS +func _vfsNameFunc(tls *crt.TLS, _context unsafe.Pointer, _argc int32, _argv *unsafe.Pointer) { + var _zVfs *int8 + var _db unsafe.Pointer + _db = unsafe.Pointer(bin.Xsqlite3_context_db_handle(tls, (*bin.Xsqlite3_context)(_context))) + _zVfs = nil + + bin.Xsqlite3_file_control(tls, (*bin.Xsqlite3)(_db), str(2187), i32(12), (unsafe.Pointer)(&_zVfs)) + if _zVfs != nil { + bin.Xsqlite3_result_text(tls, (*bin.Xsqlite3_context)(_context), _zVfs, i32(-1), bin.Xsqlite3_free) + } +} + +// Auxiliary SQL function to recursively evaluate SQL. +func _evalFunc(tls *crt.TLS, _context unsafe.Pointer, _argc int32, _argv *unsafe.Pointer) { + var _rc int32 + var _zSql, _zErrMsg *int8 + var _db unsafe.Pointer + var _res XString + _db = unsafe.Pointer(bin.Xsqlite3_context_db_handle(tls, (*bin.Xsqlite3_context)(_context))) + _zSql = (*int8)(unsafe.Pointer(bin.Xsqlite3_value_text(tls, (*bin.XMem)(*(*unsafe.Pointer)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(i32(0)))))))) + _zErrMsg = nil + + crt.Xmemset(tls, (unsafe.Pointer)(&_res), i32(0), u64(16)) + _rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_db), _zSql, _evalCallback, (unsafe.Pointer)(&_res), &_zErrMsg) + if _zErrMsg != nil { + bin.Xsqlite3_result_error(tls, (*bin.Xsqlite3_context)(_context), _zErrMsg, i32(-1)) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zErrMsg)) + goto _1 + } + if _rc != 0 { + bin.Xsqlite3_result_error_code(tls, (*bin.Xsqlite3_context)(_context), _rc) + goto _3 + } + bin.Xsqlite3_result_text(tls, (*bin.Xsqlite3_context)(_context), _res.X0, i32(-1), *(*func(*crt.TLS, unsafe.Pointer))(unsafe.Pointer(&struct{ f uint64 }{u64(18446744073709551615)}))) +_3: +_1: + _stringFree(tls, &_res) + _ = _res +} + +// Callback function for evalSql() +func _evalCallback(tls *crt.TLS, _pCData unsafe.Pointer, _argc int32, _argv **int8, _azCol **int8) (r0 int32) { + var _i int32 + var _p *XString + _p = (*XString)(_pCData) + + _i = i32(0) +_0: + if _i >= _argc { + goto _3 + } + _stringAppendTerm(tls, _p, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 8*uintptr(_i)))) + _i += 1 + goto _0 +_3: + return i32(0) +} + +// Append a new token onto the end of the string +func _stringAppendTerm(tls *crt.TLS, _p *XString, _z *int8) { + var _i int32 + if (_p.X1) != 0 { + _stringAppend(tls, _p, str(2192), i32(1)) + } + if _z == nil { + _stringAppend(tls, _p, str(2194), i32(3)) + return + } + _i = i32(0) +_2: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == 0 || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))))))))&int32(u16(8192))) != 0 { + goto _6 + } + _i += 1 + goto _2 +_6: + if (_i > i32(0)) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == i32(0)) { + _stringAppend(tls, _p, _z, _i) + return + } + _stringAppend(tls, _p, str(2198), i32(1)) +_9: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) == 0 { + goto _10 + } + _i = i32(0) +_11: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == 0 || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == i32(39) { + goto _15 + } + _i += 1 + goto _11 +_15: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) != 0 { + _stringAppend(tls, _p, _z, _i+i32(1)) + _stringAppend(tls, _p, str(2198), i32(1)) + { + p := &_z + *p = (*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(*p)) + 1*uintptr(_i+i32(1)))) + sink0 = *p + } + goto _17 + } + _stringAppend(tls, _p, _z, _i) + goto _10 +_17: + goto _9 +_10: + _stringAppend(tls, _p, str(2198), i32(1)) +} + +// Append n bytes of text to a string. If n<0 append the entire string. +func _stringAppend(tls *crt.TLS, _p *XString, _z *int8, _n int32) { + var _1_nAlloc int32 + var _1_zNew *int8 + if _n < i32(0) { + _n = int32(crt.Xstrlen(tls, _z)) + } + if ((_p.X1) + _n) < (_p.X2) { + goto _1 + } + _1_nAlloc = (((_p.X2) * i32(2)) + _n) + i32(100) + _1_zNew = (*int8)(bin.Xsqlite3_realloc(tls, (unsafe.Pointer)(_p.X0), _1_nAlloc)) + if _1_zNew == nil { + _fatalError(tls, str(2200)) + } + *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p)) + uintptr(0 /* X0 */))) = _1_zNew + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p)) + uintptr(12 /* X2 */))) = _1_nAlloc +_1: + crt.Xmemcpy(tls, (unsafe.Pointer)((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_p.X0))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_p.X1)))))))), (unsafe.Pointer)(_z), uint64(_n)) + { + p := (*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p)) + uintptr(8 /* X1 */))) + *p = (*p) + _n + sink1 = *p + } + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p.X0)) + 1*uintptr(_p.X1))) = int8(i32(0)) +} + +// Free a string +func _stringFree(tls *crt.TLS, _p *XString) { + if (_p.X0) != nil { + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_p.X0)) + } + crt.Xmemset(tls, (unsafe.Pointer)(_p), i32(0), u64(16)) +} + +// SQL Trace callback +func _sqlTraceCallback(tls *crt.TLS, _NotUsed1 unsafe.Pointer, _zSql *int8) { + _logMessage(tls, str(2214), _clipLength(tls, _zSql), unsafe.Pointer(_zSql)) +} + +// Return the length of a string omitting trailing whitespace +func _clipLength(tls *crt.TLS, _z *int8) (r0 int32) { + var _n int32 + _n = int32(crt.Xstrlen(tls, _z)) +_0: + if (_n > i32(0)) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n-i32(1))))))))))&int32(u16(8192))) != 0 { + _n -= 1 + goto _0 + } + return _n +} + +// Report on unrecognized arguments +func _unrecognizedArguments(tls *crt.TLS, _argv0 *int8, _nArg int32, _azArg **int8) { + var _i int32 + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(2221), unsafe.Pointer(_argv0)) + _i = i32(0) +_0: + if _i >= _nArg { + goto _3 + } + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(294), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 8*uintptr(_i))))) + _i += 1 + goto _0 +_3: + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(298)) + crt.Xexit(tls, i32(1)) +} + +// Look up the next task for client iClient in the database. +// Return the task script and the task number and mark that +// task as being under way. +func _startScript(tls *crt.TLS, _iClient int32, _pzScript **int8, _pTaskId *int32, _pzTaskName **int8) (r0 int32) { + var _taskId, _rc, _totalTime, _6_n int32 + var _pStmt unsafe.Pointer + _pStmt = nil + _totalTime = i32(0) + *_pzScript = nil + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(120 /* X15 */))) = i32(0) +_0: + _rc = _trySql(tls, str(2249)) + if _rc == i32(5) { + bin.Xsqlite3_sleep(tls, i32(10)) + { + p := &_totalTime + *p = (*p) + i32(10) + sink1 = *p + } + goto _0 + } + if _rc != i32(0) { + _fatalError(tls, str(2265), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_g.X3)))) + } + if (_g.X13) != 0 || (_g.X14) != 0 { + _runSql(tls, str(2284), _g.X13, _g.X14) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(112 /* X13 */))) = i32(0) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(116 /* X14 */))) = i32(0) + } + _pStmt = _prepareSql(tls, str(2337), _iClient) + _rc = bin.Xsqlite3_step(tls, _pStmt) + bin.Xsqlite3_finalize(tls, _pStmt) + if _rc == i32(100) { + _runSql(tls, str(2383), _iClient) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(120 /* X15 */))) = i32(10000) + _runSql(tls, str(2414)) + return i32(101) + } + _pStmt = _prepareSql(tls, str(2434), _iClient) + _rc = bin.Xsqlite3_step(tls, _pStmt) + if _rc == i32(100) { + _6_n = bin.Xsqlite3_column_bytes(tls, _pStmt, i32(0)) + *_pzScript = (*int8)(bin.Xsqlite3_malloc(tls, _6_n+i32(1))) + crt.Xstrcpy(tls, *_pzScript, (*int8)(unsafe.Pointer(bin.Xsqlite3_column_text(tls, _pStmt, i32(0))))) + *_pTaskId = store1(&_taskId, bin.Xsqlite3_column_int(tls, _pStmt, i32(1))) + *_pzTaskName = bin.Xsqlite3_mprintf(tls, str(2526), unsafe.Pointer(bin.Xsqlite3_column_text(tls, _pStmt, i32(2)))) + bin.Xsqlite3_finalize(tls, _pStmt) + _runSql(tls, str(2529), _taskId) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(120 /* X15 */))) = i32(10000) + _runSql(tls, str(2414)) + return i32(0) + } + bin.Xsqlite3_finalize(tls, _pStmt) + if _rc != i32(101) { + goto _8 + } + if _totalTime > i32(30000) { + _errorMessage(tls, str(2612)) + _runSql(tls, str(2661), _iClient) + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_g.X3)) + crt.Xexit(tls, i32(1)) + } +_10: + if _trySql(tls, str(2701)) == i32(5) { + bin.Xsqlite3_sleep(tls, i32(10)) + { + p := &_totalTime + *p = (*p) + i32(10) + sink1 = *p + } + goto _10 + } + bin.Xsqlite3_sleep(tls, i32(100)) + { + p := &_totalTime + *p = (*p) + i32(100) + sink1 = *p + } + goto _0 +_8: + _fatalError(tls, str(2526), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_g.X3)))) + goto _0 +} + +// Prepare an SQL statement. Issue a fatal error if unable. +func _prepareSql(tls *crt.TLS, _zFormat *int8, args ...interface{}) (r0 unsafe.Pointer) { + var _rc int32 + var _zSql *int8 + var _pStmt unsafe.Pointer + var _ap []interface{} + _pStmt = nil + _ap = args + _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + _rc = bin.Xsqlite3_prepare_v2(tls, (*bin.Xsqlite3)(_g.X3), _zSql, i32(-1), &_pStmt, nil) + if _rc != i32(0) { + bin.Xsqlite3_finalize(tls, _pStmt) + _fatalError(tls, str(2161), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_g.X3))), unsafe.Pointer(_zSql)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) + return _pStmt +} + +// Run a script. +func _runScript(tls *crt.TLS, _iClient int32, _taskId int32, _zScript *int8, _zFilename *int8) { + var _lineno, _prevLine, _ii, _iBegin, _n, _c, _j, _len, _nArg, _8_rc, _12_jj, _15_jj, _15_isGlob, _20_k, _23_jj, _25_jj, _25_rc, _30_iNewClient, _32_iTimeout, _33_iTarget, _33_iEnd int32 + var _4_zSql, _12_zAns, _15_zAns, _15_zCopy, _19_zNewFile, _19_zNewScript, _19_zToDel, _33_zTask, _33_zTName, _41_zSql *int8 + var _25_pStmt unsafe.Pointer + var _zError [1000]int8 + var _zCmd [30]int8 + var _sResult XString + var _azArg [2][100]int8 + _lineno = i32(1) + _prevLine = i32(1) + _ii = i32(0) + _iBegin = i32(0) + crt.Xmemset(tls, (unsafe.Pointer)(&_sResult), i32(0), u64(16)) + _stringReset(tls, &_sResult) +_0: + if store1(&_c, int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii))))) == i32(0) { + goto _1 + } + _prevLine = _lineno + _len = _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))), &_lineno) + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(_c))))))&int32(u16(8192))) != 0 || ((_c == i32(47)) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+i32(1))))) == i32(42))) { + { + p := &_ii + *p = (*p) + _len + sink1 = *p + } + goto _0 + } + if ((_c != i32(45)) || (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+i32(1))))) != i32(45))) || ((int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+i32(2))))))))) & int32(u16(1024))) == 0) { + { + p := &_ii + *p = (*p) + _len + sink1 = *p + } + goto _0 + } + if _ii > _iBegin { + _4_zSql = bin.Xsqlite3_mprintf(tls, str(2708), _ii-_iBegin, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_iBegin))))))))) + _evalSql(tls, &_sResult, _4_zSql) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_4_zSql)) + _iBegin = _ii + _len + } + if (_g.X10) >= i32(2) { + _logMessage(tls, str(2708), _len, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))))) + } + _n = _extractToken(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(i32(2)))))))), _len-i32(2), (*int8)(unsafe.Pointer(&_zCmd)), int32(u64(30))) + _nArg = i32(0) +_10: + if _n >= (_len-i32(2)) || _nArg >= i32(2) { + goto _14 + } +_15: + if (_n < (_len - i32(2))) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr((_ii+i32(2))+_n)))))))))&int32(u16(8192))) != 0 { + _n += 1 + goto _15 + } + if _n >= (_len - i32(2)) { + goto _14 + } + { + p := &_n + *p = (*p) + _extractToken(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(i32(2))))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), (_len-i32(2))-_n, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(_nArg))))), int32(u64(100))) + sink1 = *p + } + _nArg += 1 + goto _10 +_14: + _j = _nArg +_19: + if _j >= i32(2) { + goto _22 + } + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(postInc1(&_j, int32(1))))))) + 1*uintptr(i32(0)))) = int8(i32(0)) + _j += 1 + goto _19 +_22: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2713)) == i32(0) { + bin.Xsqlite3_sleep(tls, crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0)))))))) + goto _24 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2719)) != i32(0) { + goto _25 + } + _8_rc = crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))) + _finishScript(tls, _iClient, _taskId, i32(1)) + if _8_rc == i32(0) { + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_g.X3)) + } + crt.Xexit(tls, _8_rc) + goto _27 +_25: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2724)) != i32(0) { + goto _28 + } + if (_g.X10) == i32(1) { + _logMessage(tls, str(2708), _len-i32(1), unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))))) + } + _stringReset(tls, &_sResult) + goto _30 +_28: + if (crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2733)) == i32(0)) && (_iClient > i32(0)) { + _finishScript(tls, _iClient, _taskId, i32(1)) + goto _33 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2740)) == i32(0) { + _stringReset(tls, &_sResult) + goto _35 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2746)) != i32(0) { + goto _36 + } + _12_zAns = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript)) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))) + _12_jj = i32(7) +_37: + if _12_jj >= (_len-i32(1)) || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_12_zAns)) + 1*uintptr(_12_jj)))))))))&int32(u16(8192))) == 0 { + goto _41 + } + _12_jj += 1 + goto _37 +_41: + { + p := &_12_zAns + *p = (*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(*p)) + 1*uintptr(_12_jj))) + sink0 = *p + } + if (((_len - _12_jj) - i32(1)) != (_sResult.X1)) || crt.Xstrncmp(tls, _sResult.X0, _12_zAns, uint64((_len-_12_jj)-i32(1))) != 0 { + _errorMessage(tls, str(2752), _prevLine, unsafe.Pointer(_zFilename), (_len-_12_jj)-i32(1), unsafe.Pointer(_12_zAns), unsafe.Pointer(_sResult.X0)) + } + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(116 /* X14 */))) += 1 + _stringReset(tls, &_sResult) + goto _44 +_36: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2797)) != i32(0) && crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2802)) != i32(0) { + goto _46 + } + _15_zAns = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript)) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))) + _15_isGlob = bool2int(int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_zCmd)) + 1*uintptr(i32(0))))) == i32(103)) + _15_jj = i32(9) - (i32(3) * _15_isGlob) +_47: + if _15_jj >= (_len-i32(1)) || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_15_zAns)) + 1*uintptr(_15_jj)))))))))&int32(u16(8192))) == 0 { + goto _51 + } + _15_jj += 1 + goto _47 +_51: + { + p := &_15_zAns + *p = (*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(*p)) + 1*uintptr(_15_jj))) + sink0 = *p + } + _15_zCopy = bin.Xsqlite3_mprintf(tls, str(2708), (_len-_15_jj)-i32(1), unsafe.Pointer(_15_zAns)) + if (bool2int(bin.Xsqlite3_strglob(tls, _15_zCopy, _sResult.X0) == i32(0)) ^ _15_isGlob) != 0 { + _errorMessage(tls, str(2810), _prevLine, unsafe.Pointer(_zFilename), unsafe.Pointer(_15_zCopy), unsafe.Pointer(_sResult.X0)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_15_zCopy)) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(116 /* X14 */))) += 1 + _stringReset(tls, &_sResult) + goto _53 +_46: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2853)) == i32(0) { + _logMessage(tls, str(2526), unsafe.Pointer(_sResult.X0)) + goto _55 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2860)) != i32(0) { + goto _56 + } + _19_zToDel = nil + _19_zNewFile = (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg)) + 100*uintptr(i32(0)))))) + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_19_zNewFile)) + 1*uintptr(i32(0))))) == i32(47) { + goto _57 + } + _20_k = int32(crt.Xstrlen(tls, _zFilename)) - i32(1) +_58: + if _20_k < i32(0) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zFilename)) + 1*uintptr(_20_k)))) == i32(47) { + goto _62 + } + _20_k -= 1 + goto _58 +_62: + if _20_k > i32(0) { + _19_zNewFile = store0(&_19_zToDel, bin.Xsqlite3_mprintf(tls, str(2867), _20_k, unsafe.Pointer(_zFilename), unsafe.Pointer(_19_zNewFile))) + } +_57: + _19_zNewScript = _readFile(tls, _19_zNewFile) + if (_g.X10) != 0 { + _logMessage(tls, str(2875), unsafe.Pointer(_19_zNewFile)) + } + _runScript(tls, i32(0), i32(0), _19_zNewScript, _19_zNewFile) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_19_zNewScript)) + if (_g.X10) != 0 { + _logMessage(tls, str(2894), unsafe.Pointer(_19_zNewFile)) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_19_zToDel)) + goto _66 +_56: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2911)) != i32(0) { + goto _67 + } + _23_jj = i32(7) +_68: + if _23_jj >= _len || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+_23_jj)))))))))&int32(u16(8192))) == 0 { + goto _72 + } + _23_jj += 1 + goto _68 +_72: + _logMessage(tls, str(2708), _len-_23_jj, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_23_jj))))))))) + goto _73 +_67: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2917)) != i32(0) { + goto _74 + } + _25_jj = i32(4) +_75: + if _25_jj >= _len || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zScript)) + 1*uintptr(_ii+_25_jj)))))))))&int32(u16(8192))) == 0 { + goto _79 + } + _25_jj += 1 + goto _75 +_79: + _25_pStmt = _prepareSql(tls, str(2920), _len-_25_jj, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_25_jj))))))))) + _25_rc = bin.Xsqlite3_step(tls, _25_pStmt) + if (_25_rc != i32(100)) || (bin.Xsqlite3_column_int(tls, _25_pStmt, i32(0)) == i32(0)) { + { + p := &_ii + *p = (*p) + _findEndif(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len))))))), i32(1), &_lineno) + sink1 = *p + } + } + bin.Xsqlite3_finalize(tls, _25_pStmt) + goto _82 +_74: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2932)) == i32(0) { + { + p := &_ii + *p = (*p) + _findEndif(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len))))))), i32(0), &_lineno) + sink1 = *p + } + goto _84 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2937)) == i32(0) { + goto _86 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2943)) != i32(0) || _iClient != i32(0) { + goto _88 + } + _30_iNewClient = crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))) + if _30_iNewClient > i32(0) { + _startClient(tls, _30_iNewClient) + } + goto _90 +_88: + if (crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2949)) == i32(0)) && (_iClient == i32(0)) { + _32_iTimeout = func() int32 { + if _nArg >= i32(2) { + return crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(1))))))) + } + return i32(10000) + }() + bin.Xsqlite3_snprintf(tls, int32(u64(1000)), (*int8)(unsafe.Pointer(&_zError)), str(2954), _prevLine, unsafe.Pointer(_zFilename)) + _waitForClient(tls, crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))), _32_iTimeout, (*int8)(unsafe.Pointer(&_zError))) + goto _95 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2969)) != i32(0) || _iClient != i32(0) { + goto _97 + } + _33_iTarget = crt.Xatoi(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))) + _33_iEnd = _findEnd(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len))))))), &_lineno) + if _33_iTarget < i32(0) { + _errorMessage(tls, str(2974), _prevLine, unsafe.Pointer(_zFilename), _33_iTarget) + goto _99 + } + _33_zTask = bin.Xsqlite3_mprintf(tls, str(2708), _33_iEnd, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len))))))))) + if _nArg > i32(1) { + _33_zTName = bin.Xsqlite3_mprintf(tls, str(2526), unsafe.Pointer((*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(1)))))))) + goto _101 + } + _33_zTName = bin.Xsqlite3_mprintf(tls, str(3011), unsafe.Pointer(_filenameTail(tls, _zFilename)), _prevLine) +_101: + _startClient(tls, _33_iTarget) + _runSql(tls, str(3017), _33_iTarget, unsafe.Pointer(_33_zTask), unsafe.Pointer(_33_zTName)) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_33_zTask)) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_33_zTName)) +_99: + { + p := &_33_iEnd + *p = (*p) + _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_len)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_33_iEnd))))))), &_lineno) + sink1 = *p + } + { + p := &_len + *p = (*p) + _33_iEnd + sink1 = *p + } + _iBegin = _ii + _len + goto _102 +_97: + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(3073)) == i32(0) { + _test_breakpoint(tls) + goto _104 + } + if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(3084)) == i32(0) { + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(108 /* X12 */))) = func() int32 { + if _nArg >= i32(1) { + return bool2int(_booleanValue(tls, (*int8)(unsafe.Pointer((*[100]int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_azArg))+100*uintptr(i32(0))))))) == 0) + } + return i32(1) + }() + goto _108 + } + _errorMessage(tls, str(3100), _prevLine, unsafe.Pointer(_zFilename), unsafe.Pointer((*int8)(unsafe.Pointer(&_zCmd)))) +_108: +_104: +_102: +_95: +_90: +_86: +_84: +_82: +_73: +_66: +_55: +_53: +_44: +_35: +_33: +_30: +_27: +_24: + { + p := &_ii + *p = (*p) + _len + sink1 = *p + } + goto _0 +_1: + if _iBegin < _ii { + _41_zSql = bin.Xsqlite3_mprintf(tls, str(2708), _ii-_iBegin, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_iBegin))))))))) + _runSql(tls, _41_zSql) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_41_zSql)) + } + _stringFree(tls, &_sResult) + _ = _sResult + _ = _zCmd + _ = _zError + _ = _azArg +} + +// Reset a string to an empty string +func _stringReset(tls *crt.TLS, _p *XString) { + if (_p.X0) == nil { + _stringAppend(tls, _p, str(2192), i32(1)) + } + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p)) + uintptr(8 /* X1 */))) = i32(0) + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_p.X0)) + 1*uintptr(i32(0)))) = int8(i32(0)) +} + +// Return the length of the next token. +func _tokenLength(tls *crt.TLS, _z *int8, _pnLine *int32) (r0 int32) { + var _n, _1_inC, _1_c, _10_delim, _13_c int32 + _n = i32(0) + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))))))))&int32(u16(8192))) == 0 && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) != i32(47) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(1))))) != i32(42)) { + goto _2 + } + _1_inC = i32(0) + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) == i32(47) { + _1_inC = i32(1) + _n = i32(2) + } +_4: + if store1(&_1_c, int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(postInc1(&_n, int32(1))))))) == i32(0) { + goto _5 + } + if _1_c == i32(10) { + *_pnLine += 1 + } + if (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(_1_c)))))) & int32(u16(8192))) != 0 { + goto _4 + } + if (_1_inC != 0 && (_1_c == i32(42))) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == i32(47)) { + _n += 1 + _1_inC = i32(0) + goto _11 + } + if ((_1_inC == 0) && (_1_c == i32(47))) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == i32(42)) { + _n += 1 + _1_inC = i32(1) + goto _15 + } + if _1_inC == 0 { + goto _5 + } +_15: +_11: + goto _4 +_5: + _n -= 1 + goto _17 +_2: + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) != i32(45) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(1))))) != i32(45) { + goto _19 + } + _n = i32(2) +_20: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == 0 || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == i32(10) { + goto _24 + } + _n += 1 + goto _20 +_24: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) != 0 { + *_pnLine += 1 + _n += 1 + } + goto _26 +_19: + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) != i32(34) && int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) != i32(39) { + goto _28 + } + _10_delim = int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(i32(0))))) + _n = i32(1) +_29: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == 0 { + goto _32 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == i32(10) { + *_pnLine += 1 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) != _10_delim { + goto _34 + } + _n += 1 + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(1))))) != _10_delim { + goto _32 + } +_34: + _n += 1 + goto _29 +_32: + goto _36 +_28: + _n = i32(1) +_37: + if store1(&_13_c, int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n))))) == i32(0) || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(_13_c))))))&int32(u16(8192))) != 0 || _13_c == i32(34) || _13_c == i32(39) || _13_c == i32(59) { + goto _44 + } + _n += 1 + goto _37 +_44: +_36: +_26: +_17: + return _n +} + +// Run arbitrary SQL and record the results in an output string +// given by the first parameter. +func _evalSql(tls *crt.TLS, _p *XString, _zFormat *int8, args ...interface{}) (r0 int32) { + var _rc int32 + var _zSql, _zErrMsg *int8 + var _ap []interface{} + var _1_zErr [30]int8 + _zErrMsg = nil + _ap = args + _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _ap = nil + func() { + if (_g.X15) <= i32(0) { + crt.X__builtin_fprintf(tls, Xstderr, str(1897), unsafe.Pointer(str(1933)), i32(494), unsafe.Pointer((*int8)(unsafe.Pointer(&_evalSqlØ00__func__Ø000))), unsafe.Pointer(str(3136))) + crt.X__builtin_abort(tls) + } + }() + _rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_g.X3), _zSql, _evalCallback, (unsafe.Pointer)(_p), &_zErrMsg) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) + if _rc == 0 { + goto _2 + } + bin.Xsqlite3_snprintf(tls, int32(u64(30)), (*int8)(unsafe.Pointer(&_1_zErr)), str(3149), _rc) + _stringAppendTerm(tls, _p, (*int8)(unsafe.Pointer(&_1_zErr))) + if _zErrMsg != nil { + _stringAppendTerm(tls, _p, _zErrMsg) + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zErrMsg)) + } +_2: + return _rc + + _ = _1_zErr + panic(0) +} + +var _evalSqlØ00__func__Ø000 [8]int8 + +func init() { + crt.Xstrncpy(nil, &_evalSqlØ00__func__Ø000[0], str(3159), 8) +} + +// Copy a single token into a string buffer. +func _extractToken(tls *crt.TLS, _zIn *int8, _nIn int32, _zOut *int8, _nOut int32) (r0 int32) { + var _i int32 + if _nIn <= i32(0) { + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zOut)) + 1*uintptr(i32(0)))) = int8(i32(0)) + return i32(0) + } + _i = i32(0) +_1: + if _i >= _nIn || _i >= (_nOut-i32(1)) || (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zIn)) + 1*uintptr(_i)))))))))&int32(u16(8192))) != 0 { + goto _6 + } + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zOut)) + 1*uintptr(_i))) = *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zIn)) + 1*uintptr(_i))) + _i += 1 + goto _1 +_6: + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zOut)) + 1*uintptr(_i))) = int8(i32(0)) + return _i +} + +// Mark a script as having finished. Remove the CLIENT table entry +// if bShutdown is true. +func _finishScript(tls *crt.TLS, _iClient int32, _taskId int32, _bShutdown int32) (r0 int32) { + _runSql(tls, str(3167), _taskId) + if _bShutdown != 0 { + _runSql(tls, str(2383), _iClient) + } + return i32(0) +} + +// Read the entire content of a file into memory +func _readFile(tls *crt.TLS, _zFilename *int8) (r0 *int8) { + var _sz int64 + var _z *int8 + var _in *crt.XFILE + _in = crt.Xfopen64(tls, _zFilename, str(3248)) + if _in == nil { + _fatalError(tls, str(3251), unsafe.Pointer(_zFilename)) + } + crt.Xfseek(tls, _in, int64(i32(0)), i32(2)) + _sz = crt.Xftell(tls, _in) + crt.Xrewind(tls, _in) + _z = (*int8)(bin.Xsqlite3_malloc(tls, int32(_sz+int64(i32(1))))) + _sz = int64(crt.Xfread(tls, (unsafe.Pointer)(_z), uint64(i32(1)), uint64(_sz), _in)) + *(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_sz))) = int8(i32(0)) + crt.Xfclose(tls, _in) + return _z +} + +// Find the number of characters up to the first character past the +// of the next "--endif" or "--else" token. Nested --if commands are +// also skipped. +func _findEndif(tls *crt.TLS, _z *int8, _stopAtElse int32, _pnLine *int32) (r0 int32) { + var _n, _1_len, _3_skip int32 + _n = i32(0) +_0: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) == 0 { + goto _1 + } + _1_len = _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), _pnLine) + if ((crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), str(3280), uint64(i32(7))) == i32(0)) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(7))))))))))&int32(u16(8192))) != 0) || ((_stopAtElse != 0 && (crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), str(3288), uint64(i32(6))) == i32(0))) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(6))))))))))&int32(u16(8192))) != 0) { + return _n + _1_len + } + if (crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), str(3295), uint64(i32(4))) == i32(0)) && (int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(4))))))))))&int32(u16(8192))) != 0 { + _3_skip = _findEndif(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n)))))))))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_1_len))))))), i32(0), _pnLine) + { + p := &_n + *p = (*p) + (_3_skip + _1_len) + sink1 = *p + } + goto _9 + } + { + p := &_n + *p = (*p) + _1_len + sink1 = *p + } +_9: + goto _0 +_1: + return _n +} + +// Start up a client process for iClient, if it is not already +// running. If the client is already running, then this routine +// is a no-op. +func _startClient(tls *crt.TLS, _iClient int32) { + var _1_rc int32 + var _1_zSys *int8 + _runSql(tls, str(3300), _iClient) + if bin.Xsqlite3_changes(tls, (*bin.Xsqlite3)(_g.X3)) == 0 { + goto _0 + } + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3342), unsafe.Pointer(_g.X0), unsafe.Pointer(_g.X2), _iClient, _g.X10) + if (_g.X11) != 0 { + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3373), unsafe.Pointer(_1_zSys)) + } + if (_g.X16) != 0 { + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3387), unsafe.Pointer(_1_zSys)) + } + if (_g.X1) != nil { + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3397), unsafe.Pointer(_1_zSys), unsafe.Pointer(_g.X1)) + } + if (_g.X10) >= i32(2) { + _logMessage(tls, str(3411), unsafe.Pointer(_1_zSys)) + } + _1_zSys = bin.Xsqlite3_mprintf(tls, str(3424), unsafe.Pointer(_1_zSys)) + _1_rc = crt.Xsystem(tls, _1_zSys) + if _1_rc != 0 { + _errorMessage(tls, str(3429), _1_rc) + } + bin.Xsqlite3_free(tls, (unsafe.Pointer)(_1_zSys)) +_0: +} + +// Wait for a client process to complete all its tasks +func _waitForClient(tls *crt.TLS, _iClient int32, _iTimeout int32, _zErrPrefix *int8) { + var _rc int32 + var _pStmt unsafe.Pointer + if _iClient > i32(0) { + _pStmt = _prepareSql(tls, str(3463), _iClient) + goto _1 + } + _pStmt = _prepareSql(tls, str(3559)) +_1: + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(120 /* X15 */))) = i32(0) +_2: + if ((store1(&_rc, bin.Xsqlite3_step(tls, _pStmt)) == i32(5)) || (_rc == i32(100))) && (_iTimeout > i32(0)) { + bin.Xsqlite3_reset(tls, _pStmt) + bin.Xsqlite3_sleep(tls, i32(50)) + { + p := &_iTimeout + *p = (*p) - i32(50) + sink1 = *p + } + goto _2 + } + bin.Xsqlite3_finalize(tls, _pStmt) + *(*int32)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_g)) + uintptr(120 /* X15 */))) = i32(10000) + if _rc == i32(101) { + goto _6 + } + if _zErrPrefix == nil { + _zErrPrefix = str(454) + } + if _iClient > i32(0) { + _errorMessage(tls, str(3640), unsafe.Pointer(_zErrPrefix), _iClient) + goto _9 + } + _errorMessage(tls, str(3672), unsafe.Pointer(_zErrPrefix)) +_9: +_6: +} + +// Find the number of characters up to the start of the next "--end" token. +func _findEnd(tls *crt.TLS, _z *int8, _pnLine *int32) (r0 int32) { + var _n int32 + _n = i32(0) +_0: + if ((*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) != 0) && (crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), str(3706), uint64(i32(5))) != 0 || ((int32(*(*uint16)(unsafe.Pointer(uintptr((unsafe.Pointer)(*crt.X__ctype_b_loc(tls))) + 2*uintptr(int32(uint8(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n+i32(5)))))))))) & int32(u16(8192))) == 0)) { + { + p := &_n + *p = (*p) + _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_n))))))), _pnLine) + sink1 = *p + } + goto _0 + } + return _n +} + +// Return a pointer to the tail of a filename +func _filenameTail(tls *crt.TLS, _z *int8) (r0 *int8) { + var _i, _j int32 + _i = store1(&_j, i32(0)) +_0: + if (*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == 0 { + goto _3 + } + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_i)))) == i32(47) { + _j = _i + i32(1) + } + _i += 1 + goto _0 +_3: + return (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z)) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_j))))))) +} + +// This routine exists as a convenient place to set a debugger +// breakpoint. +func _test_breakpoint(tls *crt.TLS) { + _test_breakpointØ00cntØ001 += 1 +} + +var _test_breakpointØ00cntØ001 int32 + +// Interpret zArg as a boolean value. Return either 0 or 1. +func _booleanValue(tls *crt.TLS, _zArg *int8) (r0 int32) { + var _i int32 + if _zArg == nil { + return i32(0) + } + _i = i32(0) +_1: + if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zArg)) + 1*uintptr(_i)))) < i32(48) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zArg)) + 1*uintptr(_i)))) > i32(57) { + goto _5 + } + _i += 1 + goto _1 +_5: + if (_i > i32(0)) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_zArg)) + 1*uintptr(_i)))) == i32(0)) { + return crt.Xatoi(tls, _zArg) + } + if (bin.Xsqlite3_stricmp(tls, _zArg, str(3712)) == i32(0)) || (bin.Xsqlite3_stricmp(tls, _zArg, str(3715)) == i32(0)) { + return i32(1) + } + if (bin.Xsqlite3_stricmp(tls, _zArg, str(3719)) == i32(0)) || (bin.Xsqlite3_stricmp(tls, _zArg, str(3723)) == i32(0)) { + return i32(0) + } + _errorMessage(tls, str(3726), unsafe.Pointer(_zArg)) + return i32(0) +} + +func bool2int(b bool) int32 { + if b { + return 1 + } + return 0 +} +func bug20530(interface{}) {} //TODO remove when https://github.com/golang/go/issues/20530 is fixed. +func i16(n int16) int16 { return n } +func i32(n int32) int32 { return n } +func i64(n int64) int64 { return n } +func i8(n int8) int8 { return n } +func init() { nzf32 *= -1; nzf64 *= -1 } +func u16(n uint16) uint16 { return n } +func u32(n uint32) uint32 { return n } +func u64(n uint64) uint64 { return n } +func u8(n byte) byte { return n } + +var inf = math.Inf(1) +var nzf32 float32 // -0.0 +var nzf64 float64 // -0.0 +var sink0 *int8 //TODO report GC bug +var sink1 int32 //TODO report GC bug +func postInc0(p **int8, d int) *int8 { + q := (*uintptr)(unsafe.Pointer(p)) + v := *q + *q += uintptr(d) + return (*int8)(unsafe.Pointer(v)) +} +func postInc1(p *int32, d int32) int32 { v := *p; *p += d; return v } +func preInc1(p *int32, d int32) int32 { v := *p + d; *p = v; return v } +func store0(p **int8, v *int8) *int8 { *p = v; return v } +func store1(p *int32, v int32) int32 { *p = v; return v } + +type TGlobal struct { + X0 *int8 + X1 *int8 + X2 *int8 + X3 unsafe.Pointer + X4 *int8 + X5 unsafe.Pointer + X6 *int8 + X7 unsafe.Pointer + X8 [32]int8 + X9 int32 + X10 int32 + X11 int32 + X12 int32 + X13 int32 + X14 int32 + X15 int32 + X16 int32 +} // t2 struct{*int8,*int8,*int8,*struct{},*int8,*struct{},*int8,*struct{},[32]int8,int32,int32,int32,int32,int32,int32,int32,int32} + +type XString struct { + X0 *int8 + X1 int32 + X2 int32 +} // t3 struct{*int8,int32,int32} +func str(n int) *int8 { return (*int8)(unsafe.Pointer(&strTab[n])) } +func wstr(n int) *int32 { return (*int32)(unsafe.Pointer(&strTab[n])) } + +var strTab = []byte("*.test\x002017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b\x00SQLite library and header mismatch\x0aLibrary: %s\x0aHeader: %s\x0a\x00%05d.mptest\x00journalmode\x00repeat\x00vfs\x00client\x00errlog\x00log\x00trace\x00quiet\x00timeout\x00sqltrace\x00sync\x00a\x00illegal client number: %d\x0a\x00%05d.client%02d\x00BEGIN: %s\x00 %s\x00\x0a\x00With SQLite 3.19.3 2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b\x0a\x00-DSQLITE_%s\x0a\x00... %strying to unlink '%s'\x0a\x00still \x00\x00unable to unlink '%s' after %d attempts\x0a\x00cannot open [%s]\x00PRAGMA journal_mode=%Q;\x00PRAGMA synchronous=OFF\x00vfsname\x00eval\x00start-client\x00begin %s (%d)\x00end %s (%d)\x00end-client\x00missing script filename\x00DROP TABLE IF EXISTS task;\x0aDROP TABLE IF EXISTS counters;\x0aDROP TABLE IF EXISTS client;\x0aCREATE TABLE task(\x0a id INTEGER PRIMARY KEY,\x0a name TEXT,\x0a client INTEGER,\x0a starttime DATE,\x0a endtime DATE,\x0a script TEXT\x0a);CREATE INDEX task_i1 ON task(client, starttime);\x0aCREATE INDEX task_i2 ON task(client, endtime);\x0aCREATE TABLE counters(nError,nTest);\x0aINSERT INTO counters VALUES(0,0);\x0aCREATE TABLE client(id INTEGER PRIMARY KEY, wantHalt);\x0a\x00begin script [%s] cycle %d\x0a\x00end script [%s] cycle %d\x0a\x00during shutdown...\x0a\x00UPDATE client SET wantHalt=1\x00SELECT 1 FROM client\x00SELECT nError, nTest FROM counters\x00Summary: %d errors out of %d tests\x0a\x00END: %s\x00Usage: %s DATABASE ?OPTIONS? ?SCRIPT?\x0a\x00Options:\x0a --errlog FILENAME Write errors to FILENAME\x0a --journalmode MODE Use MODE as the journal_mode\x0a --log FILENAME Log messages to FILENAME\x0a --quiet Suppress unnecessary output\x0a --vfs NAME Use NAME as the VFS\x0a --repeat N Repeat the test N times\x0a --sqltrace Enable SQL tracing\x0a --sync Enable synchronous disk writes\x0a --timeout MILLISEC Busy timeout is MILLISEC\x0a --trace BOOLEAN Enable or disable tracing\x0a\x00%s:%i: assertion failure in %s: %s\x0a\x00../../../sqlite.org/sqlite-src-3190300/mptest/mptest.c\x00hasArg==0 || hasArg==1\x00command-line option \"--%s\" requires an argument\x00findOption\x00%s:FATAL: \x00UPDATE client SET wantHalt=1;\x00%s%.*s\x0a\x00(info) %s\x00(errcode=%d) %s\x00%s: \x00%s:ERROR: \x00%s\x0a%s\x0a\x00timeout after %dms\x00main\x00 \x00nil\x00'\x00out of memory\x00[%.*s]\x00%s: unrecognized arguments:\x00BEGIN IMMEDIATE\x00in startScript: %s\x00UPDATE counters SET nError=nError+%d, nTest=nTest+%d\x00SELECT 1 FROM client WHERE id=%d AND wantHalt\x00DELETE FROM client WHERE id=%d\x00COMMIT TRANSACTION;\x00SELECT script, id, name FROM task WHERE client=%d AND starttime IS NULL ORDER BY id LIMIT 1\x00%s\x00UPDATE task SET starttime=strftime('%%Y-%%m-%%d %%H:%%M:%%f','now') WHERE id=%d;\x00Waited over 30 seconds with no work. Giving up.\x00DELETE FROM client WHERE id=%d; COMMIT;\x00COMMIT\x00%.*s\x00sleep\x00exit\x00testcase\x00finish\x00reset\x00match\x00line %d of %s:\x0aExpected [%.*s]\x0a Got [%s]\x00glob\x00notglob\x00line %d of %s:\x0aExpected [%s]\x0a Got [%s]\x00output\x00source\x00%.*s/%s\x00begin script [%s]\x0a\x00end script [%s]\x0a\x00print\x00if\x00SELECT %.*s\x00else\x00endif\x00start\x00wait\x00line %d of %s\x0a\x00task\x00line %d of %s: bad client number: %d\x00%s:%d\x00INSERT INTO task(client,script,name) VALUES(%d,'%q',%Q)\x00breakpoint\x00show-sql-errors\x00line %d of %s: unknown command --%s\x00g.iTimeout>0\x00error(%d)\x00evalSql\x00UPDATE task SET endtime=strftime('%%Y-%%m-%%d %%H:%%M:%%f','now') WHERE id=%d;\x00rb\x00cannot open \"%s\" for reading\x00--endif\x00--else\x00--if\x00INSERT OR IGNORE INTO client VALUES(%d,0)\x00%s \"%s\" --client %d --trace %d\x00%z --sqltrace\x00%z --sync\x00%z --vfs \"%s\"\x00system('%q')\x00%z &\x00system() fails with error code %d\x00SELECT 1 FROM task WHERE client=%d AND client IN (SELECT id FROM client) AND endtime IS NULL\x00SELECT 1 FROM task WHERE client IN (SELECT id FROM client) AND endtime IS NULL\x00%stimeout waiting for client %d\x00%stimeout waiting for all clients\x00--end\x00on\x00yes\x00off\x00no\x00unknown boolean: [%s]\x00") |