mirror of
https://github.com/glebarez/go-sqlite.git
synced 2025-10-07 00:33:37 +08:00
Regenerate Linux using latest CCGO.
modified: generator.go modified: internal/bin/bin_linux_amd64.go modified: internal/mptest/mptest_linux_amd64.go new file: internal/sqlite.org/sqlite-src-3190300/test/threadtest1.c modified: internal/threadtest1/threadtest1_linux_amd64.go modified: internal/threadtest2/threadtest2_linux_amd64.go modified: internal/threadtest3/threadtest3_linux_amd64.go modified: z_linux_test.go
This commit is contained in:
46
generator.go
46
generator.go
@@ -496,6 +496,50 @@ func mpTest() {
|
||||
cp(filepath.Join("testdata", tag), pth, "*.subtest")
|
||||
}
|
||||
|
||||
func threadTest1() {
|
||||
repo := findRepo(sqliteRepo)
|
||||
if repo == "" {
|
||||
log.Fatalf("repository not found: %v", sqliteRepo)
|
||||
return
|
||||
}
|
||||
|
||||
sqlitePth := filepath.Join(repo, "sqlite-amalgamation-"+version)
|
||||
tag := "threadtest1"
|
||||
test := filepath.Join("internal", "sqlite.org", "sqlite-src-3190300", "test", "threadtest1.c")
|
||||
_, src := build(
|
||||
defines,
|
||||
[][]string{
|
||||
{filepath.Join(sqlitePth, "sqlite3.c")},
|
||||
{test},
|
||||
},
|
||||
[]string{"bin"},
|
||||
cc.EnableAnonymousStructFields(),
|
||||
cc.IncludePaths([]string{".", sqlitePth, filepath.Join(repo, "sqlite-src-"+version, "src")}),
|
||||
)
|
||||
|
||||
var b bytes.Buffer
|
||||
fmt.Fprintf(&b, prologueTest, tidyComments(header(test)))
|
||||
b.Write(src)
|
||||
b2, err := format.Source(b.Bytes())
|
||||
if err != nil {
|
||||
b2 = b.Bytes()
|
||||
}
|
||||
if err := os.MkdirAll(filepath.Join("internal", tag), 0775); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(filepath.Join("testdata", tag), 0775); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
dst := fmt.Sprintf(filepath.Join("internal", tag, tag+"_%s_%s.go"), runtime.GOOS, runtime.GOARCH)
|
||||
if err := ioutil.WriteFile(dst, b2, 0664); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
unconvert(dst)
|
||||
}
|
||||
|
||||
func threadTest(n int) {
|
||||
repo := findRepo(sqliteRepo)
|
||||
if repo == "" {
|
||||
@@ -600,7 +644,7 @@ func main() {
|
||||
|
||||
sqlite()
|
||||
mpTest()
|
||||
threadTest(1)
|
||||
threadTest1()
|
||||
threadTest(2)
|
||||
threadTest3()
|
||||
threadTest(4)
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -105,31 +105,31 @@ func Xmain(tls *crt.TLS, _argc int32, _argv **int8) (r0 int32) {
|
||||
}
|
||||
_n = _argc - i32(2)
|
||||
bin.Xsqlite3_snprintf(tls, int32(u64(32)), (*int8)(unsafe.Pointer((*[32]int8)(unsafe.Pointer(&(_g.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))
|
||||
_zJMode = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+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(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(&(_g.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(&(_g.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(&(_g.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))
|
||||
*(**int8)(unsafe.Pointer(&(_g.X1))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+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(i32(2))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(187), i32(1))
|
||||
*(**int8)(unsafe.Pointer(&(_g.X4))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+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(&(_g.X6))) = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+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(i32(2))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))), &_n, str(205), i32(1))
|
||||
if _zTrace != nil {
|
||||
*(*int32)(unsafe.Pointer(&(_g.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 {
|
||||
if _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+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(&(_g.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))
|
||||
_zTmout = _findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+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(&(_g.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(&(_g.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)
|
||||
*(*int32)(unsafe.Pointer(&(_g.X11))) = bool2int(_findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+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(&(_g.X16))) = bool2int(_findOption(tls, (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv))+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(&(_g.X5))))) = crt.Xfopen64(tls, _g.X4, str(239))
|
||||
goto _9
|
||||
@@ -243,7 +243,7 @@ _14:
|
||||
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))))))))))))
|
||||
_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(i32(2))*uintptr(unsafe.Pointer((**int8)(unsafe.Pointer(uintptr(8))))))))))))
|
||||
}
|
||||
if (_g.X10) != 0 {
|
||||
_logMessage(tls, str(573))
|
||||
@@ -275,7 +275,7 @@ _38:
|
||||
_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))))))))))))
|
||||
_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(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)))))
|
||||
@@ -372,7 +372,7 @@ _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))))))))
|
||||
_zTail = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_argv0))+uintptr(_i))))) + uintptr(i32(1))))
|
||||
}
|
||||
_i += 1
|
||||
goto _0
|
||||
@@ -423,7 +423,7 @@ _4:
|
||||
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 {
|
||||
if ((*_z) != 0) && Xstrglob(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zGlob))-uintptr(i32(1)))), _z) != 0 {
|
||||
*(*uintptr)(unsafe.Pointer(&_z)) += uintptr(1)
|
||||
goto _11
|
||||
}
|
||||
@@ -677,7 +677,7 @@ _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)) {
|
||||
if (unsafe.Pointer(_pOut) != Xstdout) && (_pOut != (*crt.XFILE)(Xstderr)) {
|
||||
crt.Xfclose(tls, _pOut)
|
||||
}
|
||||
}
|
||||
@@ -926,7 +926,7 @@ func _stringAppend(tls *crt.TLS, _p *XString, _z *int8, _n int32) {
|
||||
*(**int8)(unsafe.Pointer(&(_p.X0))) = _1_zNew
|
||||
*(*int32)(unsafe.Pointer(&(_p.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))
|
||||
crt.Xmemcpy(tls, (unsafe.Pointer)((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_p.X0))+uintptr(_p.X1)))), (unsafe.Pointer)(_z), uint64(_n))
|
||||
{
|
||||
p := (*int32)(unsafe.Pointer(&(_p.X1)))
|
||||
*p = (*p) + _n
|
||||
@@ -1100,7 +1100,7 @@ _0:
|
||||
goto _1
|
||||
}
|
||||
_prevLine = _lineno
|
||||
_len = _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_ii))))))), &_lineno)
|
||||
_len = _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+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
|
||||
@@ -1118,15 +1118,15 @@ _0:
|
||||
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)))))))))
|
||||
_4_zSql = bin.Xsqlite3_mprintf(tls, str(2708), _ii-_iBegin, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+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)))))))))
|
||||
_logMessage(tls, str(2708), _len, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+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)))
|
||||
_n = _extractToken(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))+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) {
|
||||
@@ -1142,7 +1142,7 @@ _15:
|
||||
}
|
||||
{
|
||||
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)))
|
||||
*p = (*p) + _extractToken(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))+uintptr(i32(2))))))+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
|
||||
@@ -1176,7 +1176,7 @@ _25:
|
||||
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)))))))))
|
||||
_logMessage(tls, str(2708), _len-i32(1), unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))
|
||||
}
|
||||
_stringReset(tls, &_sResult)
|
||||
goto _108
|
||||
@@ -1192,7 +1192,7 @@ _28:
|
||||
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_zAns = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript)) + 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 {
|
||||
@@ -1216,7 +1216,7 @@ _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_zAns = (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript)) + 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:
|
||||
@@ -1287,7 +1287,7 @@ _68:
|
||||
_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)))))))))
|
||||
_logMessage(tls, str(2708), _len-_23_jj, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))+uintptr(_23_jj)))))
|
||||
goto _108
|
||||
_67:
|
||||
if crt.Xstrcmp(tls, (*int8)(unsafe.Pointer(&_zCmd)), str(2917)) != i32(0) {
|
||||
@@ -1301,12 +1301,12 @@ _75:
|
||||
_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_pStmt = _prepareSql(tls, str(2920), _len-_25_jj, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))+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)
|
||||
*p = (*p) + _findEndif(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))+uintptr(_len))), i32(1), &_lineno)
|
||||
sink1(*p)
|
||||
}
|
||||
}
|
||||
@@ -1316,7 +1316,7 @@ _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)
|
||||
*p = (*p) + _findEndif(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))+uintptr(_len))), i32(0), &_lineno)
|
||||
sink1(*p)
|
||||
}
|
||||
goto _108
|
||||
@@ -1348,12 +1348,12 @@ _88:
|
||||
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)
|
||||
_33_iEnd = _findEnd(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))+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)))))))))
|
||||
_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(_ii)))))+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
|
||||
@@ -1367,7 +1367,7 @@ _101:
|
||||
_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)
|
||||
*p = (*p) + _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_ii)))))+uintptr(_len)))))+uintptr(_33_iEnd))), &_lineno)
|
||||
sink1(*p)
|
||||
}
|
||||
{
|
||||
@@ -1401,7 +1401,7 @@ _108:
|
||||
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)))))))))
|
||||
_41_zSql = bin.Xsqlite3_mprintf(tls, str(2708), _ii-_iBegin, unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_zScript))+uintptr(_iBegin)))))
|
||||
_runSql(tls, _41_zSql)
|
||||
bin.Xsqlite3_free(tls, (unsafe.Pointer)(_41_zSql))
|
||||
}
|
||||
@@ -1616,12 +1616,12 @@ _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) {
|
||||
_1_len = _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(_n))), _pnLine)
|
||||
if ((crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+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(_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)
|
||||
if (crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+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(_n)))))+uintptr(_1_len))), i32(0), _pnLine)
|
||||
{
|
||||
p := &_n
|
||||
*p = (*p) + (_3_skip + _1_len)
|
||||
@@ -1716,10 +1716,10 @@ 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)) {
|
||||
if ((*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_z)) + 1*uintptr(_n)))) != 0) && (crt.Xstrncmp(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+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)
|
||||
*p = (*p) + _tokenLength(tls, (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z))+uintptr(_n))), _pnLine)
|
||||
sink1(*p)
|
||||
}
|
||||
goto _0
|
||||
@@ -1741,7 +1741,7 @@ _0:
|
||||
_i += 1
|
||||
goto _0
|
||||
_3:
|
||||
return (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z)) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_j)))))))
|
||||
return (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(_z)) + uintptr(_j)))
|
||||
}
|
||||
|
||||
// This routine exists as a convenient place to set a debugger
|
||||
|
289
internal/sqlite.org/sqlite-src-3190300/test/threadtest1.c
Normal file
289
internal/sqlite.org/sqlite-src-3190300/test/threadtest1.c
Normal file
@@ -0,0 +1,289 @@
|
||||
/*
|
||||
** 2002 January 15
|
||||
**
|
||||
** 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 file implements a simple standalone program used to test whether
|
||||
** or not the SQLite library is threadsafe.
|
||||
**
|
||||
** Testing the thread safety of SQLite is difficult because there are very
|
||||
** few places in the code that are even potentially unsafe, and those
|
||||
** places execute for very short periods of time. So even if the library
|
||||
** is compiled with its mutexes disabled, it is likely to work correctly
|
||||
** in a multi-threaded program most of the time.
|
||||
**
|
||||
** This file is NOT part of the standard SQLite library. It is used for
|
||||
** testing only.
|
||||
*/
|
||||
#include "sqlite.h"
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/*
|
||||
** Enable for tracing
|
||||
*/
|
||||
static int verbose = 0;
|
||||
|
||||
/*
|
||||
** Come here to die.
|
||||
*/
|
||||
static void Exit(int rc){
|
||||
exit(rc);
|
||||
}
|
||||
|
||||
extern char *sqlite3_mprintf(const char *zFormat, ...);
|
||||
extern char *sqlite3_vmprintf(const char *zFormat, va_list);
|
||||
|
||||
/*
|
||||
** When a lock occurs, yield.
|
||||
*/
|
||||
static int db_is_locked(void *NotUsed, int iCount){
|
||||
/* sched_yield(); */
|
||||
if( verbose ) printf("BUSY %s #%d\n", (char*)NotUsed, iCount);
|
||||
usleep(100);
|
||||
return iCount<20000;
|
||||
}
|
||||
|
||||
/*
|
||||
** Used to accumulate query results by db_query()
|
||||
*/
|
||||
struct QueryResult {
|
||||
const char *zFile; /* Filename - used for error reporting */
|
||||
int nElem; /* Number of used entries in azElem[] */
|
||||
int nAlloc; /* Number of slots allocated for azElem[] */
|
||||
char **azElem; /* The result of the query */
|
||||
};
|
||||
|
||||
/*
|
||||
** The callback function for db_query
|
||||
*/
|
||||
static int db_query_callback(
|
||||
void *pUser, /* Pointer to the QueryResult structure */
|
||||
int nArg, /* Number of columns in this result row */
|
||||
char **azArg, /* Text of data in all columns */
|
||||
char **NotUsed /* Names of the columns */
|
||||
){
|
||||
struct QueryResult *pResult = (struct QueryResult*)pUser;
|
||||
int i;
|
||||
if( pResult->nElem + nArg >= pResult->nAlloc ){
|
||||
if( pResult->nAlloc==0 ){
|
||||
pResult->nAlloc = nArg+1;
|
||||
}else{
|
||||
pResult->nAlloc = pResult->nAlloc*2 + nArg + 1;
|
||||
}
|
||||
pResult->azElem = realloc( pResult->azElem, pResult->nAlloc*sizeof(char*));
|
||||
if( pResult->azElem==0 ){
|
||||
fprintf(stdout,"%s: malloc failed\n", pResult->zFile);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if( azArg==0 ) return 0;
|
||||
for(i=0; i<nArg; i++){
|
||||
pResult->azElem[pResult->nElem++] =
|
||||
sqlite3_mprintf("%s",azArg[i] ? azArg[i] : "");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** Execute a query against the database. NULL values are returned
|
||||
** as an empty string. The list is terminated by a single NULL pointer.
|
||||
*/
|
||||
char **db_query(sqlite *db, const char *zFile, const char *zFormat, ...){
|
||||
char *zSql;
|
||||
int rc;
|
||||
char *zErrMsg = 0;
|
||||
va_list ap;
|
||||
struct QueryResult sResult;
|
||||
va_start(ap, zFormat);
|
||||
zSql = sqlite3_vmprintf(zFormat, ap);
|
||||
va_end(ap);
|
||||
memset(&sResult, 0, sizeof(sResult));
|
||||
sResult.zFile = zFile;
|
||||
if( verbose ) printf("QUERY %s: %s\n", zFile, zSql);
|
||||
rc = sqlite3_exec(db, zSql, db_query_callback, &sResult, &zErrMsg);
|
||||
if( rc==SQLITE_SCHEMA ){
|
||||
if( zErrMsg ) free(zErrMsg);
|
||||
rc = sqlite3_exec(db, zSql, db_query_callback, &sResult, &zErrMsg);
|
||||
}
|
||||
if( verbose ) printf("DONE %s %s\n", zFile, zSql);
|
||||
if( zErrMsg ){
|
||||
fprintf(stdout,"%s: query failed: %s - %s\n", zFile, zSql, zErrMsg);
|
||||
free(zErrMsg);
|
||||
free(zSql);
|
||||
Exit(1);
|
||||
}
|
||||
sqlite3_free(zSql);
|
||||
if( sResult.azElem==0 ){
|
||||
db_query_callback(&sResult, 0, 0, 0);
|
||||
}
|
||||
sResult.azElem[sResult.nElem] = 0;
|
||||
return sResult.azElem;
|
||||
}
|
||||
|
||||
/*
|
||||
** Execute an SQL statement.
|
||||
*/
|
||||
void db_execute(sqlite *db, const char *zFile, const char *zFormat, ...){
|
||||
char *zSql;
|
||||
int rc;
|
||||
char *zErrMsg = 0;
|
||||
va_list ap;
|
||||
va_start(ap, zFormat);
|
||||
zSql = sqlite3_vmprintf(zFormat, ap);
|
||||
va_end(ap);
|
||||
if( verbose ) printf("EXEC %s: %s\n", zFile, zSql);
|
||||
do{
|
||||
rc = sqlite3_exec(db, zSql, 0, 0, &zErrMsg);
|
||||
}while( rc==SQLITE_BUSY );
|
||||
if( verbose ) printf("DONE %s: %s\n", zFile, zSql);
|
||||
if( zErrMsg ){
|
||||
fprintf(stdout,"%s: command failed: %s - %s\n", zFile, zSql, zErrMsg);
|
||||
free(zErrMsg);
|
||||
sqlite3_free(zSql);
|
||||
Exit(1);
|
||||
}
|
||||
sqlite3_free(zSql);
|
||||
}
|
||||
|
||||
/*
|
||||
** Free the results of a db_query() call.
|
||||
*/
|
||||
void db_query_free(char **az){
|
||||
int i;
|
||||
for(i=0; az[i]; i++){
|
||||
sqlite3_free(az[i]);
|
||||
}
|
||||
free(az);
|
||||
}
|
||||
|
||||
/*
|
||||
** Check results
|
||||
*/
|
||||
void db_check(const char *zFile, const char *zMsg, char **az, ...){
|
||||
va_list ap;
|
||||
int i;
|
||||
char *z;
|
||||
va_start(ap, az);
|
||||
for(i=0; (z = va_arg(ap, char*))!=0; i++){
|
||||
if( az[i]==0 || strcmp(az[i],z)!=0 ){
|
||||
fprintf(stdout,"%s: %s: bad result in column %d: %s\n",
|
||||
zFile, zMsg, i+1, az[i]);
|
||||
db_query_free(az);
|
||||
Exit(1);
|
||||
}
|
||||
}
|
||||
va_end(ap);
|
||||
db_query_free(az);
|
||||
}
|
||||
|
||||
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
||||
pthread_cond_t sig = PTHREAD_COND_INITIALIZER;
|
||||
int thread_cnt = 0;
|
||||
|
||||
static void *worker_bee(void *pArg){
|
||||
const char *zFilename = (char*)pArg;
|
||||
char *azErr;
|
||||
int i, cnt;
|
||||
int t = atoi(zFilename);
|
||||
char **az;
|
||||
sqlite *db;
|
||||
|
||||
pthread_mutex_lock(&lock);
|
||||
thread_cnt++;
|
||||
pthread_mutex_unlock(&lock);
|
||||
printf("%s: START\n", zFilename);
|
||||
fflush(stdout);
|
||||
for(cnt=0; cnt<10; cnt++){
|
||||
sqlite3_open(&zFilename[2], &db);
|
||||
if( db==0 ){
|
||||
fprintf(stdout,"%s: can't open\n", zFilename);
|
||||
Exit(1);
|
||||
}
|
||||
sqlite3_busy_handler(db, db_is_locked, zFilename);
|
||||
db_execute(db, zFilename, "CREATE TABLE t%d(a,b,c);", t);
|
||||
for(i=1; i<=100; i++){
|
||||
db_execute(db, zFilename, "INSERT INTO t%d VALUES(%d,%d,%d);",
|
||||
t, i, i*2, i*i);
|
||||
}
|
||||
az = db_query(db, zFilename, "SELECT count(*) FROM t%d", t);
|
||||
db_check(zFilename, "tX size", az, "100", 0);
|
||||
az = db_query(db, zFilename, "SELECT avg(b) FROM t%d", t);
|
||||
db_check(zFilename, "tX avg", az, "101.0", 0);
|
||||
db_execute(db, zFilename, "DELETE FROM t%d WHERE a>50", t);
|
||||
az = db_query(db, zFilename, "SELECT avg(b) FROM t%d", t);
|
||||
db_check(zFilename, "tX avg2", az, "51.0", 0);
|
||||
for(i=1; i<=50; i++){
|
||||
char z1[30], z2[30];
|
||||
az = db_query(db, zFilename, "SELECT b, c FROM t%d WHERE a=%d", t, i);
|
||||
sprintf(z1, "%d", i*2);
|
||||
sprintf(z2, "%d", i*i);
|
||||
db_check(zFilename, "readback", az, z1, z2, 0);
|
||||
}
|
||||
db_execute(db, zFilename, "DROP TABLE t%d;", t);
|
||||
sqlite3_close(db);
|
||||
}
|
||||
printf("%s: END\n", zFilename);
|
||||
/* unlink(zFilename); */
|
||||
fflush(stdout);
|
||||
pthread_mutex_lock(&lock);
|
||||
thread_cnt--;
|
||||
if( thread_cnt<=0 ){
|
||||
pthread_cond_signal(&sig);
|
||||
}
|
||||
pthread_mutex_unlock(&lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv){
|
||||
char *zFile;
|
||||
int i, n;
|
||||
pthread_t id;
|
||||
if( argc>2 && strcmp(argv[1], "-v")==0 ){
|
||||
verbose = 1;
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
if( argc<2 || (n=atoi(argv[1]))<1 ) n = 10;
|
||||
for(i=0; i<n; i++){
|
||||
char zBuf[200];
|
||||
sprintf(zBuf, "testdb-%d", (i+1)/2);
|
||||
unlink(zBuf);
|
||||
}
|
||||
for(i=0; i<n; i++){
|
||||
zFile = sqlite3_mprintf("%d.testdb-%d", i%2+1, (i+2)/2);
|
||||
if( (i%2)==0 ){
|
||||
/* Remove both the database file and any old journal for the file
|
||||
** being used by this thread and the next one. */
|
||||
char *zDb = &zFile[2];
|
||||
char *zJournal = sqlite3_mprintf("%s-journal", zDb);
|
||||
unlink(zDb);
|
||||
unlink(zJournal);
|
||||
free(zJournal);
|
||||
}
|
||||
|
||||
pthread_create(&id, 0, worker_bee, (void*)zFile);
|
||||
pthread_detach(id);
|
||||
}
|
||||
pthread_mutex_lock(&lock);
|
||||
while( thread_cnt>0 ){
|
||||
pthread_cond_wait(&sig, &lock);
|
||||
}
|
||||
pthread_mutex_unlock(&lock);
|
||||
for(i=0; i<n; i++){
|
||||
char zBuf[200];
|
||||
sprintf(zBuf, "testdb-%d", (i+1)/2);
|
||||
unlink(zBuf);
|
||||
}
|
||||
return 0;
|
||||
}
|
@@ -177,27 +177,27 @@ _8:
|
||||
Xdb_check(tls, _zFilename, str(148), _az, unsafe.Pointer(str(156)), i32(0))
|
||||
_az = Xdb_query(tls, _db, _zFilename, str(160), _t)
|
||||
Xdb_check(tls, _zFilename, str(183), _az, unsafe.Pointer(str(190)), i32(0))
|
||||
Xdb_execute(tls, _db, _zFilename, str(194), _t)
|
||||
Xdb_execute(tls, _db, _zFilename, str(196), _t)
|
||||
_az = Xdb_query(tls, _db, _zFilename, str(160), _t)
|
||||
Xdb_check(tls, _zFilename, str(221), _az, unsafe.Pointer(str(229)), i32(0))
|
||||
Xdb_check(tls, _zFilename, str(223), _az, unsafe.Pointer(str(231)), i32(0))
|
||||
_i = i32(1)
|
||||
_9:
|
||||
if _i > i32(50) {
|
||||
goto _12
|
||||
}
|
||||
_az = Xdb_query(tls, _db, _zFilename, str(232), _t, _i)
|
||||
crt.Xsprintf(tls, (*int8)(unsafe.Pointer(&_4_z1)), str(264), _i*i32(2))
|
||||
crt.Xsprintf(tls, (*int8)(unsafe.Pointer(&_4_z2)), str(264), _i*_i)
|
||||
Xdb_check(tls, _zFilename, str(267), _az, unsafe.Pointer((*int8)(unsafe.Pointer(&_4_z1))), unsafe.Pointer((*int8)(unsafe.Pointer(&_4_z2))), i32(0))
|
||||
_az = Xdb_query(tls, _db, _zFilename, str(236), _t, _i)
|
||||
crt.Xsprintf(tls, (*int8)(unsafe.Pointer(&_4_z1)), str(268), _i*i32(2))
|
||||
crt.Xsprintf(tls, (*int8)(unsafe.Pointer(&_4_z2)), str(268), _i*_i)
|
||||
Xdb_check(tls, _zFilename, str(271), _az, unsafe.Pointer((*int8)(unsafe.Pointer(&_4_z1))), unsafe.Pointer((*int8)(unsafe.Pointer(&_4_z2))), i32(0))
|
||||
_i += 1
|
||||
goto _9
|
||||
_12:
|
||||
Xdb_execute(tls, _db, _zFilename, str(276), _t)
|
||||
Xdb_execute(tls, _db, _zFilename, str(280), _t)
|
||||
bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_db))
|
||||
_cnt += 1
|
||||
goto _0
|
||||
_3:
|
||||
crt.Xprintf(tls, str(292), unsafe.Pointer(_zFilename))
|
||||
crt.Xprintf(tls, str(296), unsafe.Pointer(_zFilename))
|
||||
crt.Xfflush(tls, (*crt.XFILE)(Xstdout))
|
||||
crt.Xpthread_mutex_lock(tls, &Xlock)
|
||||
Xthread_cnt -= 1
|
||||
@@ -225,10 +225,10 @@ func _Exit(tls *crt.TLS, _rc int32) {
|
||||
// When a lock occurs, yield.
|
||||
func _db_is_locked(tls *crt.TLS, _NotUsed unsafe.Pointer, _iCount int32) (r0 int32) {
|
||||
if _verbose != 0 {
|
||||
crt.Xprintf(tls, str(301), unsafe.Pointer((*int8)(_NotUsed)), _iCount)
|
||||
crt.Xprintf(tls, str(305), unsafe.Pointer((*int8)(_NotUsed)), _iCount)
|
||||
}
|
||||
crt.Xusleep(tls, uint32(i32(100)))
|
||||
return bool2int(_iCount < i32(25))
|
||||
return bool2int(_iCount < i32(20000))
|
||||
}
|
||||
|
||||
// Execute an SQL statement.
|
||||
@@ -241,7 +241,7 @@ func Xdb_execute(tls *crt.TLS, _db unsafe.Pointer, _zFile *int8, _zFormat *int8,
|
||||
_zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap)
|
||||
_ap = nil
|
||||
if _verbose != 0 {
|
||||
crt.Xprintf(tls, str(314), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql))
|
||||
crt.Xprintf(tls, str(318), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql))
|
||||
}
|
||||
_0:
|
||||
_rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_db), _zSql, nil, nil, &_zErrMsg)
|
||||
@@ -249,10 +249,10 @@ _0:
|
||||
goto _0
|
||||
}
|
||||
if _verbose != 0 {
|
||||
crt.Xprintf(tls, str(327), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql))
|
||||
crt.Xprintf(tls, str(331), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql))
|
||||
}
|
||||
if _zErrMsg != nil {
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstdout), str(340), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql), unsafe.Pointer(_zErrMsg))
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstdout), str(344), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql), unsafe.Pointer(_zErrMsg))
|
||||
crt.Xfree(tls, (unsafe.Pointer)(_zErrMsg))
|
||||
bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql))
|
||||
_Exit(tls, i32(1))
|
||||
@@ -274,7 +274,7 @@ func Xdb_query(tls *crt.TLS, _db unsafe.Pointer, _zFile *int8, _zFormat *int8, a
|
||||
crt.Xmemset(tls, (unsafe.Pointer)(&_sResult), i32(0), u64(24))
|
||||
*(**int8)(unsafe.Pointer(&(_sResult.X0))) = _zFile
|
||||
if _verbose != 0 {
|
||||
crt.Xprintf(tls, str(369), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql))
|
||||
crt.Xprintf(tls, str(373), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql))
|
||||
}
|
||||
_rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_db), _zSql, _db_query_callback, (unsafe.Pointer)(&_sResult), &_zErrMsg)
|
||||
if _rc != i32(17) {
|
||||
@@ -286,10 +286,10 @@ func Xdb_query(tls *crt.TLS, _db unsafe.Pointer, _zFile *int8, _zFormat *int8, a
|
||||
_rc = bin.Xsqlite3_exec(tls, (*bin.Xsqlite3)(_db), _zSql, _db_query_callback, (unsafe.Pointer)(&_sResult), &_zErrMsg)
|
||||
_1:
|
||||
if _verbose != 0 {
|
||||
crt.Xprintf(tls, str(383), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql))
|
||||
crt.Xprintf(tls, str(387), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql))
|
||||
}
|
||||
if _zErrMsg != nil {
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstdout), str(395), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql), unsafe.Pointer(_zErrMsg))
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstdout), str(399), unsafe.Pointer(_zFile), unsafe.Pointer(_zSql), unsafe.Pointer(_zErrMsg))
|
||||
crt.Xfree(tls, (unsafe.Pointer)(_zErrMsg))
|
||||
crt.Xfree(tls, (unsafe.Pointer)(_zSql))
|
||||
_Exit(tls, i32(1))
|
||||
@@ -321,7 +321,7 @@ func _db_query_callback(tls *crt.TLS, _pUser unsafe.Pointer, _nArg int32, _azArg
|
||||
_2:
|
||||
*(***int8)(unsafe.Pointer(&(_pResult.X3))) = (**int8)(crt.Xrealloc(tls, (unsafe.Pointer)(_pResult.X3), uint64(_pResult.X2)*u64(8)))
|
||||
if (_pResult.X3) == nil {
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstdout), str(422), unsafe.Pointer(_pResult.X0))
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstdout), str(426), unsafe.Pointer(_pResult.X0))
|
||||
return i32(1)
|
||||
}
|
||||
_0:
|
||||
@@ -333,11 +333,11 @@ _5:
|
||||
if _i >= _nArg {
|
||||
goto _8
|
||||
}
|
||||
*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_pResult.X3)) + 8*uintptr(postInc0((*int32)(unsafe.Pointer(&(_pResult.X1))), int32(1))))) = bin.Xsqlite3_mprintf(tls, str(441), unsafe.Pointer(func() *int8 {
|
||||
*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_pResult.X3)) + 8*uintptr(postInc0((*int32)(unsafe.Pointer(&(_pResult.X1))), int32(1))))) = bin.Xsqlite3_mprintf(tls, str(445), unsafe.Pointer(func() *int8 {
|
||||
if (*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 8*uintptr(_i)))) != nil {
|
||||
return (*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_azArg)) + 8*uintptr(_i))))
|
||||
}
|
||||
return str(444)
|
||||
return str(448)
|
||||
}()))
|
||||
_i += 1
|
||||
goto _5
|
||||
@@ -357,7 +357,7 @@ _0:
|
||||
goto _3
|
||||
}
|
||||
if ((*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_az)) + 8*uintptr(_i)))) == nil) || (crt.Xstrcmp(tls, *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_az)) + 8*uintptr(_i))), _z) != i32(0)) {
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstdout), str(445), unsafe.Pointer(_zFile), unsafe.Pointer(_zMsg), _i+i32(1), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_az)) + 8*uintptr(_i)))))
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstdout), str(449), unsafe.Pointer(_zFile), unsafe.Pointer(_zMsg), _i+i32(1), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_az)) + 8*uintptr(_i)))))
|
||||
Xdb_query_free(tls, _az)
|
||||
_Exit(tls, i32(1))
|
||||
}
|
||||
@@ -418,4 +418,4 @@ type TQueryResult struct {
|
||||
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("-v\x00testdb-%d\x00%d.testdb-%d\x00%s-journal\x00%s: START\x0a\x00%s: can't open\x0a\x00CREATE TABLE t%d(a,b,c);\x00INSERT INTO t%d VALUES(%d,%d,%d);\x00SELECT count(*) FROM t%d\x00tX size\x00100\x00SELECT avg(b) FROM t%d\x00tX avg\x00101\x00DELETE FROM t%d WHERE a>50\x00tX avg2\x0051\x00SELECT b, c FROM t%d WHERE a=%d\x00%d\x00readback\x00DROP TABLE t%d;\x00%s: END\x0a\x00BUSY %s #%d\x0a\x00EXEC %s: %s\x0a\x00DONE %s: %s\x0a\x00%s: command failed: %s - %s\x0a\x00QUERY %s: %s\x0a\x00DONE %s %s\x0a\x00%s: query failed: %s - %s\x0a\x00%s: malloc failed\x0a\x00%s\x00\x00%s: %s: bad result in column %d: %s\x0a\x00")
|
||||
var strTab = []byte("-v\x00testdb-%d\x00%d.testdb-%d\x00%s-journal\x00%s: START\x0a\x00%s: can't open\x0a\x00CREATE TABLE t%d(a,b,c);\x00INSERT INTO t%d VALUES(%d,%d,%d);\x00SELECT count(*) FROM t%d\x00tX size\x00100\x00SELECT avg(b) FROM t%d\x00tX avg\x00101.0\x00DELETE FROM t%d WHERE a>50\x00tX avg2\x0051.0\x00SELECT b, c FROM t%d WHERE a=%d\x00%d\x00readback\x00DROP TABLE t%d;\x00%s: END\x0a\x00BUSY %s #%d\x0a\x00EXEC %s: %s\x0a\x00DONE %s: %s\x0a\x00%s: command failed: %s - %s\x0a\x00QUERY %s: %s\x0a\x00DONE %s %s\x0a\x00%s: query failed: %s - %s\x0a\x00%s: malloc failed\x0a\x00%s\x00\x00%s: %s: bad result in column %d: %s\x0a\x00")
|
||||
|
@@ -93,7 +93,7 @@ _3:
|
||||
if uint64(_i) >= u64(5) {
|
||||
goto _6
|
||||
}
|
||||
crt.Xpthread_create(tls, (*uint64)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_aThread))+8*uintptr(_i))), nil, Xworker, (unsafe.Pointer)(uintptr(_i)))
|
||||
crt.Xpthread_create(tls, (*uint64)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_aThread))+8*uintptr(_i))), nil, Xworker, crt.U2P(uintptr(_i)))
|
||||
_i += 1
|
||||
goto _3
|
||||
_6:
|
||||
@@ -121,7 +121,7 @@ _10:
|
||||
func Xworker(tls *crt.TLS, _workerArg unsafe.Pointer) (r0 unsafe.Pointer) {
|
||||
var _id, _rc, _cnt int32
|
||||
var _db unsafe.Pointer
|
||||
_id = int32(uintptr(_workerArg))
|
||||
_id = int32(crt.P2U(_workerArg))
|
||||
_cnt = i32(0)
|
||||
crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(147), _id)
|
||||
_0:
|
||||
|
@@ -412,7 +412,7 @@ func _MD5Update(tls *crt.TLS, _ctx *XMD5Context, _buf *uint8, _len uint32) {
|
||||
if _t == 0 {
|
||||
goto _1
|
||||
}
|
||||
_1_p = (*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer((*uint8)(unsafe.Pointer((*[64]uint8)(unsafe.Pointer((*t1)(unsafe.Pointer(&(_ctx.X3))))))))) + uintptr(unsafe.Pointer((*uint8)(unsafe.Pointer(uintptr(_t)))))))
|
||||
_1_p = (*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer((*uint8)(unsafe.Pointer((*[64]uint8)(unsafe.Pointer((*t1)(unsafe.Pointer(&(_ctx.X3))))))))) + uintptr(_t)))
|
||||
_t = uint32(i32(64)) - _t
|
||||
if _len < _t {
|
||||
crt.Xmemcpy(tls, (unsafe.Pointer)(_1_p), (unsafe.Pointer)(_buf), uint64(_len))
|
||||
@@ -1476,7 +1476,7 @@ func _MD5Final(tls *crt.TLS, _digest *[16]uint8, _ctx *XMD5Context) {
|
||||
var _count uint32
|
||||
var _p *uint8
|
||||
_count = ((*(*uint32)(unsafe.Pointer(uintptr((unsafe.Pointer)((*[2]uint32)(unsafe.Pointer(&(_ctx.X2))))) + 4*uintptr(i32(0))))) >> uint(i32(3))) & uint32(i32(63))
|
||||
_p = (*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer((*uint8)(unsafe.Pointer((*[64]uint8)(unsafe.Pointer((*t1)(unsafe.Pointer(&(_ctx.X3))))))))) + uintptr(unsafe.Pointer((*uint8)(unsafe.Pointer(uintptr(_count)))))))
|
||||
_p = (*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer((*uint8)(unsafe.Pointer((*[64]uint8)(unsafe.Pointer((*t1)(unsafe.Pointer(&(_ctx.X3))))))))) + uintptr(_count)))
|
||||
*postInc2(&_p, 1) = uint8(i32(128))
|
||||
_count = uint32(i32(63)) - _count
|
||||
if _count < uint32(i32(8)) {
|
||||
@@ -2181,7 +2181,7 @@ func _walthread2(tls *crt.TLS, _nMs int32) {
|
||||
return i32(1057)
|
||||
}()
|
||||
return &_err
|
||||
}(), &_threads, _walthread2_thread, (unsafe.Pointer)(uintptr(u32(1))))
|
||||
}(), &_threads, _walthread2_thread, crt.U2P(uintptr(u32(1))))
|
||||
_launch_thread_x(tls, func() *XError {
|
||||
*(*int32)(unsafe.Pointer(&(_err.X1))) = func() int32 {
|
||||
if (_err.X0) != 0 {
|
||||
@@ -2190,7 +2190,7 @@ func _walthread2(tls *crt.TLS, _nMs int32) {
|
||||
return i32(1058)
|
||||
}()
|
||||
return &_err
|
||||
}(), &_threads, _walthread2_thread, (unsafe.Pointer)(uintptr(u32(1))))
|
||||
}(), &_threads, _walthread2_thread, crt.U2P(uintptr(u32(1))))
|
||||
_join_all_threads_x(tls, func() *XError {
|
||||
*(*int32)(unsafe.Pointer(&(_err.X1))) = func() int32 {
|
||||
if (_err.X0) != 0 {
|
||||
@@ -2215,7 +2215,7 @@ func _walthread2_thread(tls *crt.TLS, _iTid int32, _pArg unsafe.Pointer) (r0 *in
|
||||
_err = XError{}
|
||||
_db = XSqlite{}
|
||||
_anTrans = [2]int32{}
|
||||
_iArg = int32(int64(uintptr(_pArg)))
|
||||
_iArg = int32(int64(crt.P2U(_pArg)))
|
||||
_zJournal = str(1346)
|
||||
if _iArg != 0 {
|
||||
_zJournal = str(1372)
|
||||
@@ -2408,7 +2408,7 @@ _8:
|
||||
return i32(1119)
|
||||
}()
|
||||
return &_err
|
||||
}(), &_threads, _walthread3_thread, (unsafe.Pointer)(uintptr(int64(_i))))
|
||||
}(), &_threads, _walthread3_thread, crt.U2P(uintptr(int64(_i))))
|
||||
_i += 1
|
||||
goto _8
|
||||
_11:
|
||||
@@ -2434,7 +2434,7 @@ func _walthread3_thread(tls *crt.TLS, _iTid int32, _pArg unsafe.Pointer) (r0 *in
|
||||
var _db XSqlite
|
||||
_err = XError{}
|
||||
_db = XSqlite{}
|
||||
_iArg = int32(int64(uintptr(_pArg)))
|
||||
_iArg = int32(int64(crt.P2U(_pArg)))
|
||||
_opendb_x(tls, func() *XError {
|
||||
*(*int32)(unsafe.Pointer(&(_err.X1))) = func() int32 {
|
||||
if (_err.X0) != 0 {
|
||||
@@ -4453,7 +4453,7 @@ func _stress1(tls *crt.TLS, _nMs int32) {
|
||||
return i32(154)
|
||||
}()
|
||||
return &_err
|
||||
}(), &_threads, _stress_thread_5, (unsafe.Pointer)(uintptr(u32(1))))
|
||||
}(), &_threads, _stress_thread_5, crt.U2P(uintptr(u32(1))))
|
||||
_join_all_threads_x(tls, func() *XError {
|
||||
*(*int32)(unsafe.Pointer(&(_err.X1))) = func() int32 {
|
||||
if (_err.X0) != 0 {
|
||||
@@ -4660,7 +4660,7 @@ func _stress_thread_4(tls *crt.TLS, _iTid int32, _pArg unsafe.Pointer) (r0 *int8
|
||||
_db = XSqlite{}
|
||||
_i1 = i32(0)
|
||||
_i2 = i32(0)
|
||||
_iArg = int32(int64(uintptr(_pArg)))
|
||||
_iArg = int32(int64(crt.P2U(_pArg)))
|
||||
_opendb_x(tls, func() *XError {
|
||||
*(*int32)(unsafe.Pointer(&(_err.X1))) = func() int32 {
|
||||
if (_err.X0) != 0 {
|
||||
@@ -4744,7 +4744,7 @@ func _stress_thread_5(tls *crt.TLS, _iTid int32, _pArg unsafe.Pointer) (r0 *int8
|
||||
var _db XSqlite
|
||||
_err = XError{}
|
||||
_db = XSqlite{}
|
||||
_iArg = int32(int64(uintptr(_pArg)))
|
||||
_iArg = int32(int64(crt.P2U(_pArg)))
|
||||
_i1 = i32(0)
|
||||
_i2 = i32(0)
|
||||
_opendb_x(tls, func() *XError {
|
||||
@@ -5956,7 +5956,7 @@ _4:
|
||||
if _rc != i32(0) {
|
||||
goto _5
|
||||
}
|
||||
_pBuf = (unsafe.Pointer)((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(_pBuf))) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_iAmt))))))))
|
||||
_pBuf = (unsafe.Pointer)((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(_pBuf))) + uintptr(_iAmt))))
|
||||
{
|
||||
p := &_iOfst
|
||||
*p = (*p) + int64(_iAmt)
|
||||
@@ -6020,7 +6020,7 @@ _4:
|
||||
_rc = (*(*func(*crt.TLS, *bin.Xsqlite3_file, unsafe.Pointer, int32, int64) int32)(unsafe.Pointer(&struct {
|
||||
f func(*crt.TLS, unsafe.Pointer, unsafe.Pointer, int32, int64) int32
|
||||
}{((*bin.Xsqlite3_io_methods)(_5_pSubOpen.X0).X3)})))(tls, _5_pSubOpen, _pBuf, _iAmt, _iOfst%int64(_pGroup.X5))
|
||||
_pBuf = (unsafe.Pointer)((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(_pBuf))) + uintptr(unsafe.Pointer((*int8)(unsafe.Pointer(uintptr(_iAmt))))))))
|
||||
_pBuf = (unsafe.Pointer)((*int8)(unsafe.Pointer(uintptr(unsafe.Pointer((*int8)(_pBuf))) + uintptr(_iAmt))))
|
||||
{
|
||||
p := &_iOfst
|
||||
*p = (*p) + int64(_iAmt)
|
||||
|
@@ -10,7 +10,6 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -97,20 +96,14 @@ func TestThread1(t *testing.T) {
|
||||
t.Fatalf("go build mptest: %s\n%s", err, out)
|
||||
}
|
||||
|
||||
for i := 0; i <= 20; i++ {
|
||||
out, err := exec.Command("./threadtest1", strconv.Itoa(i), "-v").CombinedOutput()
|
||||
t.Logf("%v:\n%s", i, out)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
out, err := exec.Command("./threadtest1", "10").CombinedOutput()
|
||||
t.Logf("%s", out)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestThread2(t *testing.T) {
|
||||
t.Log("TODO")
|
||||
return //TODO-
|
||||
|
||||
//TODO sqlite3.c:143403: createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0); -> fatal error: bad pointer in write barrier
|
||||
dir, err := ioutil.TempDir("", "sqlite-test-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -219,10 +212,6 @@ func TestThread3(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestThread4(t *testing.T) {
|
||||
t.Log("TODO")
|
||||
return //TODO-
|
||||
|
||||
//TODO sqlite3.c:143403: createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0); -> fatal error: bad pointer in write barrier
|
||||
cases := 0
|
||||
dir, err := ioutil.TempDir("", "sqlite-test-")
|
||||
if err != nil {
|
||||
@@ -268,20 +257,19 @@ func TestThread4(t *testing.T) {
|
||||
{"--multithread", "-serialized"},
|
||||
{"--multithread", "-serialized", "-wal"},
|
||||
} {
|
||||
for i := 2; i <= 20; i++ {
|
||||
out, err := exec.Command("./threadtest4", append(opts, strconv.Itoa(i))...).CombinedOutput()
|
||||
t.Logf("%v: %v\n%s", i, opts, out)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if bytes.Contains(out, []byte("fault address")) ||
|
||||
bytes.Contains(out, []byte("data race")) ||
|
||||
bytes.Contains(out, []byte("RACE")) {
|
||||
t.Fatalf("case %v: fault", cases)
|
||||
}
|
||||
cases++
|
||||
out, err := exec.Command("./threadtest4", append(opts, "5")...).CombinedOutput()
|
||||
dbg("%v\n%s", opts, out)
|
||||
t.Logf("%v\n%s", opts, out)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if bytes.Contains(out, []byte("fault address")) ||
|
||||
bytes.Contains(out, []byte("data race")) ||
|
||||
bytes.Contains(out, []byte("RACE")) {
|
||||
t.Fatalf("case %v: fault", cases)
|
||||
}
|
||||
cases++
|
||||
}
|
||||
t.Logf("cases: %v", cases)
|
||||
}
|
||||
|
Reference in New Issue
Block a user