16f050aa2Sdanielk1977# 2009 April 25 26f050aa2Sdanielk1977# 36f050aa2Sdanielk1977# The author disclaims copyright to this source code. In place of 46f050aa2Sdanielk1977# a legal notice, here is a blessing: 56f050aa2Sdanielk1977# 66f050aa2Sdanielk1977# May you do good and not evil. 76f050aa2Sdanielk1977# May you find forgiveness for yourself and forgive others. 86f050aa2Sdanielk1977# May you share freely, never taking more than you give. 96f050aa2Sdanielk1977# 106f050aa2Sdanielk1977#*********************************************************************** 116f050aa2Sdanielk1977# 12dda70fe3Sdrh# $Id: async4.test,v 1.4 2009/06/05 17:09:12 drh Exp $ 136f050aa2Sdanielk1977 146f050aa2Sdanielk1977set testdir [file dirname $argv0] 156f050aa2Sdanielk1977source $testdir/tester.tcl 16739a2770Sshane 17*68928b6cSdan# Do not use a codec for tests in this file, as the database file is 18*68928b6cSdan# manipulated directly using tcl scripts (using the [hexio_write] command). 19*68928b6cSdan# 20*68928b6cSdando_not_use_codec 21*68928b6cSdan 22739a2770Sshane# These tests only work for Tcl version 8.5 and later on Windows (for now) 23739a2770Sshane# 24739a2770Sshaneif {$tcl_platform(platform)=="windows"} { 25739a2770Sshane scan $::tcl_version %f vx 26739a2770Sshane if {$vx<8.5} { 27739a2770Sshane finish_test 28739a2770Sshane return 29739a2770Sshane } 30739a2770Sshane} 31739a2770Sshane 326f050aa2Sdanielk1977if {[info commands sqlite3async_initialize] eq ""} { 336f050aa2Sdanielk1977 # The async logic is not built into this system 346f050aa2Sdanielk1977 finish_test 356f050aa2Sdanielk1977 return 366f050aa2Sdanielk1977} 376f050aa2Sdanielk1977db close 386f050aa2Sdanielk1977 396f050aa2Sdanielk1977# Test layout: 406f050aa2Sdanielk1977# 416f050aa2Sdanielk1977# async4.1.*: Test the lockfiles parameter. 426f050aa2Sdanielk1977# async4.2.*: Test the delay parameter. 436f050aa2Sdanielk1977 446f050aa2Sdanielk1977do_test async4.1.1 { 456f050aa2Sdanielk1977 sqlite3async_initialize {} 0 466f050aa2Sdanielk1977 sqlite3async_control lockfiles 476f050aa2Sdanielk1977} {1} 486f050aa2Sdanielk1977do_test async4.1.2 { 496f050aa2Sdanielk1977 sqlite3async_control lockfiles false 506f050aa2Sdanielk1977} {0} 516f050aa2Sdanielk1977do_test async4.1.3 { 526f050aa2Sdanielk1977 sqlite3async_control lockfiles 536f050aa2Sdanielk1977} {0} 546f050aa2Sdanielk1977do_test async4.1.4 { 556f050aa2Sdanielk1977 sqlite3async_control lockfiles true 566f050aa2Sdanielk1977} {1} 576f050aa2Sdanielk1977 586f050aa2Sdanielk1977do_test async4.1.5 { 596f050aa2Sdanielk1977 sqlite3 db test.db -vfs sqlite3async 606f050aa2Sdanielk1977 execsql { CREATE TABLE t1(a, b, c) } 616f050aa2Sdanielk1977} {} 626f050aa2Sdanielk1977do_test async4.1.6 { 636f050aa2Sdanielk1977 list [file exists test.db] [file size test.db] 646f050aa2Sdanielk1977} {1 0} 656f050aa2Sdanielk1977do_test async4.1.7 { 666f050aa2Sdanielk1977 sqlite3 db2 test.db 676f050aa2Sdanielk1977 catchsql { CREATE TABLE t2(a, b, c) } db2 686f050aa2Sdanielk1977} {1 {database is locked}} 696f050aa2Sdanielk1977do_test async4.1.8 { 706f050aa2Sdanielk1977 sqlite3async_control halt idle 716f050aa2Sdanielk1977 sqlite3async_start 726f050aa2Sdanielk1977 sqlite3async_wait 736f050aa2Sdanielk1977} {} 746f050aa2Sdanielk1977do_test async4.1.9 { 756f050aa2Sdanielk1977 catchsql { CREATE TABLE t2(a, b, c) } db2 766f050aa2Sdanielk1977} {0 {}} 776f050aa2Sdanielk1977do_test async4.1.10 { 786f050aa2Sdanielk1977 list [catch {sqlite3async_control lockfiles false} msg] $msg 796f050aa2Sdanielk1977} {1 SQLITE_MISUSE} 806f050aa2Sdanielk1977do_test async4.1.11 { 816f050aa2Sdanielk1977 db close 826f050aa2Sdanielk1977 list [catch {sqlite3async_control lockfiles false} msg] $msg 836f050aa2Sdanielk1977} {1 SQLITE_MISUSE} 846f050aa2Sdanielk1977do_test async4.1.12 { 856f050aa2Sdanielk1977 sqlite3async_start 866f050aa2Sdanielk1977 sqlite3async_wait 876f050aa2Sdanielk1977 sqlite3async_control lockfiles false 886f050aa2Sdanielk1977} {0} 896f050aa2Sdanielk1977do_test async4.1.13 { 906f050aa2Sdanielk1977 sqlite3 db test.db -vfs sqlite3async 916f050aa2Sdanielk1977 execsql { CREATE TABLE t3(a, b, c) } db 926f050aa2Sdanielk1977} {} 936f050aa2Sdanielk1977do_test async4.1.14 { 946f050aa2Sdanielk1977 execsql { 956f050aa2Sdanielk1977 CREATE INDEX i1 ON t2(a); 966f050aa2Sdanielk1977 CREATE INDEX i2 ON t1(a); 976f050aa2Sdanielk1977 } db2 986f050aa2Sdanielk1977} {} 996f050aa2Sdanielk1977do_test async4.1.15 { 1006f050aa2Sdanielk1977 sqlite3async_start 1016f050aa2Sdanielk1977 sqlite3async_wait 102b1299158Sdrh hexio_write test.db 28 00000000 1036f050aa2Sdanielk1977 execsql { pragma integrity_check } db2 1046f050aa2Sdanielk1977} {{*** in database main *** 1056f050aa2Sdanielk1977Page 5 is never used}} 1066f050aa2Sdanielk1977do_test async4.1.16 { 1076f050aa2Sdanielk1977 db close 1086f050aa2Sdanielk1977 db2 close 1096f050aa2Sdanielk1977 sqlite3async_start 1106f050aa2Sdanielk1977 sqlite3async_wait 1116f050aa2Sdanielk1977} {} 11274632880Sdanielk1977do_test async4.1.17 { 11374632880Sdanielk1977 sqlite3async_control lockfiles true 11474632880Sdanielk1977} {1} 1156f050aa2Sdanielk1977 1166f050aa2Sdanielk1977do_test async4.2.1 { 1176f050aa2Sdanielk1977 sqlite3async_control delay 1186f050aa2Sdanielk1977} {0} 1196f050aa2Sdanielk1977do_test async4.2.2 { 1206f050aa2Sdanielk1977 sqlite3async_control delay 23 1216f050aa2Sdanielk1977} {23} 1226f050aa2Sdanielk1977do_test async4.2.3 { 1236f050aa2Sdanielk1977 sqlite3async_control delay 1246f050aa2Sdanielk1977} {23} 1256f050aa2Sdanielk1977do_test async4.2.4 { 1266f050aa2Sdanielk1977 sqlite3async_control delay 0 1276f050aa2Sdanielk1977} {0} 1286f050aa2Sdanielk1977do_test async4.2.5 { 1296f050aa2Sdanielk1977 sqlite3 db test.db -vfs sqlite3async 1306f050aa2Sdanielk1977 1316f050aa2Sdanielk1977 execsql { CREATE TABLE t4(a, b) } 1326f050aa2Sdanielk1977 set T1 [lindex [time { 1336f050aa2Sdanielk1977 sqlite3async_start 1346f050aa2Sdanielk1977 sqlite3async_wait 1356f050aa2Sdanielk1977 }] 0] 1366f050aa2Sdanielk1977 1376f050aa2Sdanielk1977 sqlite3async_control delay 100 1386f050aa2Sdanielk1977 execsql { CREATE TABLE t5(a, b) } 1396f050aa2Sdanielk1977 set T2 [lindex [time { 1406f050aa2Sdanielk1977 sqlite3async_start 1416f050aa2Sdanielk1977 sqlite3async_wait 1426f050aa2Sdanielk1977 }] 0] 1436f050aa2Sdanielk1977 1446f050aa2Sdanielk1977 expr {($T1+1000000) < $T2} 1456f050aa2Sdanielk1977} {1} 1466f050aa2Sdanielk1977 1476f050aa2Sdanielk1977do_test async4.2.6 { 1486f050aa2Sdanielk1977 sqlite3async_control delay 0 1496f050aa2Sdanielk1977 execsql { CREATE TABLE t6(a, b) } 1506f050aa2Sdanielk1977 set T1 [lindex [time { 1516f050aa2Sdanielk1977 sqlite3async_start 1526f050aa2Sdanielk1977 sqlite3async_wait 1536f050aa2Sdanielk1977 }] 0] 1546f050aa2Sdanielk1977 1556f050aa2Sdanielk1977 expr {($T1+1000000) < $T2} 1566f050aa2Sdanielk1977} {1} 1576f050aa2Sdanielk1977 1586f050aa2Sdanielk1977do_test async4.2.7 { 1596f050aa2Sdanielk1977 list [catch { sqlite3async_control delay -1 } msg] $msg 1606f050aa2Sdanielk1977} {1 SQLITE_MISUSE} 1616f050aa2Sdanielk1977 1626f050aa2Sdanielk1977do_test async4.2.8 { 1636f050aa2Sdanielk1977 db close 1646f050aa2Sdanielk1977 sqlite3async_start 1656f050aa2Sdanielk1977 sqlite3async_wait 1666f050aa2Sdanielk1977} {} 1676f050aa2Sdanielk1977 1686f050aa2Sdanielk1977finish_test 169