xref: /sqlite-3.40.0/test/async4.test (revision 68928b6c)
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