CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
busy.test140 linesDownload Raw Back to test
1# 2005 july 82#3# The author disclaims copyright to this source code.  In place of4# a legal notice, here is a blessing:5#6#    May you do good and not evil.7#    May you find forgiveness for yourself and forgive others.8#    May you share freely, never taking more than you give.9#10#***********************************************************************11# This file test the busy handler12#13 14 15set testdir [file dirname $argv0]16source $testdir/tester.tcl17set testprefix busy18 19do_test busy-1.1 {20  sqlite3 db2 test.db21  execsql {22    CREATE TABLE t1(x);23    INSERT INTO t1 VALUES(1);24    SELECT * FROM t125  }26} 127proc busy x {28  lappend ::busyargs $x29  if {$x>2} {return 1}30  return 031}32set busyargs {}33do_test busy-1.2 {34  db busy busy35  db2 eval {BEGIN EXCLUSIVE}36  catchsql {BEGIN IMMEDIATE}37} {1 {database is locked}}38do_test busy-1.3 {39  set busyargs40} {0 1 2 3}41do_test busy-1.4 {42  set busyargs {}43  catchsql {BEGIN IMMEDIATE}44  set busyargs45} {0 1 2 3}46 47do_test busy-2.1 {48  db2 eval {COMMIT}49  db eval {BEGIN; INSERT INTO t1 VALUES(5)}50  db2 eval {BEGIN; SELECT * FROM t1}51  set busyargs {}52  catchsql COMMIT53} {1 {database is locked}}54do_test busy-2.2 {55  set busyargs56} {0 1 2 3}57 58db2 close59 60#-------------------------------------------------------------------------61# Test that the busy-handler is invoked correctly for "PRAGMA optimize"62# and ANALYZE commnds.63ifcapable pragma&&analyze&&!stat4 {64 65reset_db66 67do_execsql_test 3.1 {68  CREATE TABLE t1(x);69  CREATE TABLE t2(y);70  CREATE TABLE t3(z);71 72  CREATE INDEX i1 ON t1(x);73  CREATE INDEX i2 ON t2(y);74 75  INSERT INTO t1 VALUES(1);76  INSERT INTO t2 VALUES(1);77  ANALYZE;78 79  SELECT * FROM t1 WHERE x=1;80  SELECT * FROM t2 WHERE y=1;81} {1 1}82 83do_test 3.2 {84  sqlite3 db2 test.db85  execsql { BEGIN EXCLUSIVE } db286  catchsql { PRAGMA optimize }87} {1 {database is locked}}88 89proc busy_handler {n} {90  if {$n>1000} { execsql { COMMIT } db2 }91  return 092}93db busy busy_handler94 95do_test 3.3 {96  catchsql { PRAGMA optimize }97} {0 {}}98 99do_test 3.4 {100  execsql {101    BEGIN;102    SELECT count(*) FROM sqlite_master;103  } db2104} {6}105 106proc busy_handler {n} { return 1 }107do_test 3.5 {108  catchsql { PRAGMA optimize }109} {1 {database is locked}}110 111do_test 3.6 {112  execsql { COMMIT } db2113  execsql {114    WITH s(i) AS (115      SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<1000116    )117    INSERT INTO t1 SELECT i FROM s;118  }119  execsql {120    BEGIN;121    SELECT count(*) FROM sqlite_master;122  } db2123} {6}124 125do_test 3.7 {126  catchsql { PRAGMA optimize }127} {1 {database is locked}}128 129proc busy_handler {n} {130  if {$n>1000} { execsql { COMMIT } db2 }131  return 0132}133do_test 3.8 {134  catchsql { PRAGMA optimize }135} {0 {}}136 137}138 139finish_test140