SQLite4
Hex Artifact Content
Not logged in

Artifact c5d2aeb8e51a629673d579e12533f718a9e011e4:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 54 43 4c 20 69 6e 74 65 72 66  s for TCL interf
01a0: 61 63 65 20 74 6f 20 74 68 65 0a 23 20 53 51 4c  ace to the.# SQL
01b0: 69 74 65 20 6c 69 62 72 61 72 79 2e 20 0a 23 0a  ite library. .#.
01c0: 23 20 41 63 74 75 61 6c 6c 79 2c 20 61 6c 6c 20  # Actually, all 
01d0: 74 65 73 74 73 20 61 72 65 20 62 61 73 65 64 20  tests are based 
01e0: 6f 6e 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72  on the TCL inter
01f0: 66 61 63 65 2c 20 73 6f 20 74 68 65 20 6d 61 69  face, so the mai
0200: 6e 0a 23 20 69 6e 74 65 72 66 61 63 65 20 69 73  n.# interface is
0210: 20 70 72 65 74 74 79 20 77 65 6c 6c 20 74 65 73   pretty well tes
0220: 74 65 64 2e 20 20 54 68 69 73 20 66 69 6c 65 20  ted.  This file 
0230: 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 61 64  contains some ad
0240: 64 69 74 69 6f 6e 0a 23 20 74 65 73 74 73 20 66  dition.# tests f
0250: 6f 72 20 66 72 69 6e 67 65 20 69 73 73 75 65 73  or fringe issues
0260: 20 74 68 61 74 20 74 68 65 20 6d 61 69 6e 20 74   that the main t
0270: 65 73 74 20 73 75 69 74 65 20 64 6f 65 73 20 6e  est suite does n
0280: 6f 74 20 63 6f 76 65 72 2e 0a 23 0a 23 20 24 49  ot cover..#.# $I
0290: 64 3a 20 74 63 6c 73 71 6c 69 74 65 2e 74 65 73  d: tclsqlite.tes
02a0: 74 2c 76 20 31 2e 37 33 20 32 30 30 39 2f 30 33  t,v 1.73 2009/03
02b0: 2f 31 36 20 31 33 3a 31 39 3a 33 36 20 64 61 6e  /16 13:19:36 dan
02c0: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 0a  ielk1977 Exp $..
02d0: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
02e0: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
02f0: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0300: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20  r/tester.tcl..# 
0310: 43 68 65 63 6b 20 74 68 65 20 65 72 72 6f 72 20  Check the error 
0320: 6d 65 73 73 61 67 65 73 20 67 65 6e 65 72 61 74  messages generat
0330: 65 64 20 62 79 20 74 63 6c 73 71 6c 69 74 65 0a  ed by tclsqlite.
0340: 23 0a 69 66 20 7b 5b 73 71 6c 69 74 65 34 20 2d  #.if {[sqlite4 -
0350: 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 20 20  has-codec]} {.  
0360: 73 65 74 20 72 20 22 73 71 6c 69 74 65 5f 6f 72  set r "sqlite_or
0370: 69 67 20 48 41 4e 44 4c 45 20 46 49 4c 45 4e 41  ig HANDLE FILENA
0380: 4d 45 20 3f 2d 6b 65 79 20 43 4f 44 45 43 2d 4b  ME ?-key CODEC-K
0390: 45 59 3f 22 0a 7d 20 65 6c 73 65 20 7b 0a 20 20  EY?".} else {.  
03a0: 73 65 74 20 72 20 22 73 71 6c 69 74 65 5f 6f 72  set r "sqlite_or
03b0: 69 67 20 48 41 4e 44 4c 45 20 46 49 4c 45 4e 41  ig HANDLE FILENA
03c0: 4d 45 20 3f 2d 76 66 73 20 56 46 53 4e 41 4d 45  ME ?-vfs VFSNAME
03d0: 3f 20 3f 2d 72 65 61 64 6f 6e 6c 79 20 42 4f 4f  ? ?-readonly BOO
03e0: 4c 45 41 4e 3f 20 3f 2d 63 72 65 61 74 65 20 42  LEAN? ?-create B
03f0: 4f 4f 4c 45 41 4e 3f 20 3f 2d 6e 6f 6d 75 74 65  OOLEAN? ?-nomute
0400: 78 20 42 4f 4f 4c 45 41 4e 3f 20 3f 2d 66 75 6c  x BOOLEAN? ?-ful
0410: 6c 6d 75 74 65 78 20 42 4f 4f 4c 45 41 4e 3f 20  lmutex BOOLEAN? 
0420: 3f 2d 75 72 69 20 42 4f 4f 4c 45 41 4e 3f 22 0a  ?-uri BOOLEAN?".
0430: 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e  }.do_test tcl-1.
0440: 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  1 {.  set v [cat
0450: 63 68 20 7b 73 71 6c 69 74 65 34 20 62 6f 67 75  ch {sqlite4 bogu
0460: 73 7d 20 6d 73 67 5d 0a 20 20 72 65 67 73 75 62  s} msg].  regsub
0470: 20 7b 72 65 61 6c 6c 79 5f 73 71 6c 69 74 65 34   {really_sqlite4
0480: 7d 20 24 6d 73 67 20 7b 73 71 6c 69 74 65 34 7d  } $msg {sqlite4}
0490: 20 6d 73 67 0a 20 20 6c 61 70 70 65 6e 64 20 76   msg.  lappend v
04a0: 20 24 6d 73 67 0a 7d 20 5b 6c 69 73 74 20 31 20   $msg.} [list 1 
04b0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
04c0: 68 6f 75 6c 64 20 62 65 20 5c 22 24 72 5c 22 22  hould be \"$r\""
04d0: 5d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e  ].do_test tcl-1.
04e0: 32 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  2 {.  set v [cat
04f0: 63 68 20 7b 64 62 20 62 6f 67 75 73 7d 20 6d 73  ch {db bogus} ms
0500: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
0510: 6d 73 67 0a 7d 20 7b 31 20 7b 62 61 64 20 6f 70  msg.} {1 {bad op
0520: 74 69 6f 6e 20 22 62 6f 67 75 73 22 3a 20 6d 75  tion "bogus": mu
0530: 73 74 20 62 65 20 61 75 74 68 6f 72 69 7a 65 72  st be authorizer
0540: 2c 20 62 61 63 6b 75 70 2c 20 62 75 73 79 2c 20  , backup, busy, 
0550: 63 61 63 68 65 2c 20 63 68 61 6e 67 65 73 2c 20  cache, changes, 
0560: 63 6c 6f 73 65 2c 20 63 6f 6c 6c 61 74 65 2c 20  close, collate, 
0570: 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64  collation_needed
0580: 2c 20 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 2c 20 63  , commit_hook, c
0590: 6f 6d 70 6c 65 74 65 2c 20 63 6f 70 79 2c 20 65  omplete, copy, e
05a0: 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
05b0: 73 69 6f 6e 2c 20 65 72 72 6f 72 63 6f 64 65 2c  sion, errorcode,
05c0: 20 65 76 61 6c 2c 20 65 78 69 73 74 73 2c 20 66   eval, exists, f
05d0: 75 6e 63 74 69 6f 6e 2c 20 69 6e 63 72 62 6c 6f  unction, incrblo
05e0: 62 2c 20 69 6e 74 65 72 72 75 70 74 2c 20 6c 61  b, interrupt, la
05f0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 2c  st_insert_rowid,
0600: 20 6e 75 6c 6c 76 61 6c 75 65 2c 20 6f 6e 65 63   nullvalue, onec
0610: 6f 6c 75 6d 6e 2c 20 70 72 6f 66 69 6c 65 2c 20  olumn, profile, 
0620: 70 72 6f 67 72 65 73 73 2c 20 72 65 6b 65 79 2c  progress, rekey,
0630: 20 72 65 73 74 6f 72 65 2c 20 72 6f 6c 6c 62 61   restore, rollba
0640: 63 6b 5f 68 6f 6f 6b 2c 20 73 74 61 74 75 73 2c  ck_hook, status,
0650: 20 74 69 6d 65 6f 75 74 2c 20 74 6f 74 61 6c 5f   timeout, total_
0660: 63 68 61 6e 67 65 73 2c 20 74 72 61 63 65 2c 20  changes, trace, 
0670: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 75 6e 6c  transaction, unl
0680: 6f 63 6b 5f 6e 6f 74 69 66 79 2c 20 75 70 64 61  ock_notify, upda
0690: 74 65 5f 68 6f 6f 6b 2c 20 76 65 72 73 69 6f 6e  te_hook, version
06a0: 2c 20 6f 72 20 77 61 6c 5f 68 6f 6f 6b 7d 7d 0a  , or wal_hook}}.
06b0: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 32 2e  do_test tcl-1.2.
06c0: 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  1 {.  set v [cat
06d0: 63 68 20 7b 64 62 20 63 61 63 68 65 20 62 6f 67  ch {db cache bog
06e0: 75 73 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  us} msg].  lappe
06f0: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
0700: 62 61 64 20 6f 70 74 69 6f 6e 20 22 62 6f 67 75  bad option "bogu
0710: 73 22 3a 20 6d 75 73 74 20 62 65 20 66 6c 75 73  s": must be flus
0720: 68 20 6f 72 20 73 69 7a 65 7d 7d 0a 64 6f 5f 74  h or size}}.do_t
0730: 65 73 74 20 74 63 6c 2d 31 2e 32 2e 32 20 7b 0a  est tcl-1.2.2 {.
0740: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
0750: 64 62 20 63 61 63 68 65 7d 20 6d 73 67 5d 0a 20  db cache} msg]. 
0760: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0770: 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72  } {1 {wrong # ar
0780: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 64  gs: should be "d
0790: 62 20 63 61 63 68 65 20 6f 70 74 69 6f 6e 20 3f  b cache option ?
07a0: 61 72 67 3f 22 7d 7d 0a 64 6f 5f 74 65 73 74 20  arg?"}}.do_test 
07b0: 74 63 6c 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63  tcl-1.3 {.  exec
07c0: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
07d0: 45 20 74 31 28 61 20 69 6e 74 2c 20 62 20 69 6e  E t1(a int, b in
07e0: 74 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 49  t)}.  execsql {I
07f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0800: 4c 55 45 53 28 31 30 2c 32 30 29 7d 0a 20 20 73  LUES(10,20)}.  s
0810: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20  et v [catch {.  
0820: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
0830: 54 20 2a 20 46 52 4f 4d 20 74 31 7d 20 64 61 74  T * FROM t1} dat
0840: 61 20 7b 0a 20 20 20 20 20 20 65 72 72 6f 72 20  a {.      error 
0850: 22 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61  "The error messa
0860: 67 65 22 0a 20 20 20 20 7d 0a 20 20 7d 20 6d 73  ge".    }.  } ms
0870: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
0880: 6d 73 67 0a 7d 20 7b 31 20 7b 54 68 65 20 65 72  msg.} {1 {The er
0890: 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f  ror message}}.do
08a0: 5f 74 65 73 74 20 74 63 6c 2d 31 2e 34 20 7b 0a  _test tcl-1.4 {.
08b0: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
08c0: 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45  .    db eval {SE
08d0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20  LECT * FROM t2} 
08e0: 64 61 74 61 20 7b 0a 20 20 20 20 20 20 65 72 72  data {.      err
08f0: 6f 72 20 22 54 68 65 20 65 72 72 6f 72 20 6d 65  or "The error me
0900: 73 73 61 67 65 22 0a 20 20 20 20 7d 0a 20 20 7d  ssage".    }.  }
0910: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0920: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20  v $msg.} {1 {no 
0930: 73 75 63 68 20 74 61 62 6c 65 3a 20 74 32 7d 7d  such table: t2}}
0940: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 35  .do_test tcl-1.5
0950: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0960: 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  h {.    db eval 
0970: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
0980: 31 7d 20 64 61 74 61 20 7b 0a 20 20 20 20 20 20  1} data {.      
0990: 62 72 65 61 6b 0a 20 20 20 20 7d 0a 20 20 7d 20  break.    }.  } 
09a0: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
09b0: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 63   $msg.} {0 {}}.c
09c0: 61 74 63 68 20 7b 65 78 70 72 20 78 2a 7d 20 6d  atch {expr x*} m
09d0: 73 67 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31  sg.do_test tcl-1
09e0: 2e 36 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .6 {.  set v [ca
09f0: 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61  tch {.    db eva
0a00: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
0a10: 20 74 31 7d 20 64 61 74 61 20 7b 0a 20 20 20 20   t1} data {.    
0a20: 20 20 65 78 70 72 20 78 2a 0a 20 20 20 20 7d 0a    expr x*.    }.
0a30: 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65    } msg].  lappe
0a40: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 5b 6c 69 73  nd v $msg.} [lis
0a50: 74 20 31 20 24 6d 73 67 5d 0a 64 6f 5f 74 65 73  t 1 $msg].do_tes
0a60: 74 20 74 63 6c 2d 31 2e 37 20 7b 0a 20 20 73 65  t tcl-1.7 {.  se
0a70: 74 20 76 20 5b 63 61 74 63 68 20 7b 64 62 7d 20  t v [catch {db} 
0a80: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
0a90: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e   $msg.} {1 {wron
0aa0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
0ab0: 20 62 65 20 22 64 62 20 53 55 42 43 4f 4d 4d 41   be "db SUBCOMMA
0ac0: 4e 44 20 2e 2e 2e 22 7d 7d 0a 69 66 20 7b 5b 63  ND ..."}}.if {[c
0ad0: 61 74 63 68 20 7b 64 62 20 61 75 74 68 20 7b 7d  atch {db auth {}
0ae0: 7d 5d 3d 3d 30 7d 20 7b 0a 20 20 64 6f 5f 74 65  }]==0} {.  do_te
0af0: 73 74 20 74 63 6c 2d 31 2e 38 20 7b 0a 20 20 20  st tcl-1.8 {.   
0b00: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 64   set v [catch {d
0b10: 62 20 61 75 74 68 6f 72 69 7a 65 72 20 31 20 32  b authorizer 1 2
0b20: 20 33 7d 20 6d 73 67 5d 0a 20 20 20 20 6c 61 70   3} msg].    lap
0b30: 70 65 6e 64 20 76 20 24 6d 73 67 0a 20 20 7d 20  pend v $msg.  } 
0b40: 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73  {1 {wrong # args
0b50: 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20  : should be "db 
0b60: 61 75 74 68 6f 72 69 7a 65 72 20 3f 43 41 4c 4c  authorizer ?CALL
0b70: 42 41 43 4b 3f 22 7d 7d 0a 7d 0a 64 6f 5f 74 65  BACK?"}}.}.do_te
0b80: 73 74 20 74 63 6c 2d 31 2e 39 20 7b 0a 20 20 73  st tcl-1.9 {.  s
0b90: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 64 62 20  et v [catch {db 
0ba0: 62 75 73 79 20 31 20 32 20 33 7d 20 6d 73 67 5d  busy 1 2 3} msg]
0bb0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
0bc0: 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20  g.} {1 {wrong # 
0bd0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
0be0: 22 64 62 20 62 75 73 79 20 43 41 4c 4c 42 41 43  "db busy CALLBAC
0bf0: 4b 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c  K"}}.do_test tcl
0c00: 2d 31 2e 31 30 20 7b 0a 20 20 73 65 74 20 76 20  -1.10 {.  set v 
0c10: 5b 63 61 74 63 68 20 7b 64 62 20 70 72 6f 67 72  [catch {db progr
0c20: 65 73 73 20 31 7d 20 6d 73 67 5d 0a 20 20 6c 61  ess 1} msg].  la
0c30: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0c40: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
0c50: 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 70   should be "db p
0c60: 72 6f 67 72 65 73 73 20 4e 20 43 41 4c 4c 42 41  rogress N CALLBA
0c70: 43 4b 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63  CK"}}.do_test tc
0c80: 6c 2d 31 2e 31 31 20 7b 0a 20 20 73 65 74 20 76  l-1.11 {.  set v
0c90: 20 5b 63 61 74 63 68 20 7b 64 62 20 63 68 61 6e   [catch {db chan
0ca0: 67 65 73 20 78 79 7a 7d 20 6d 73 67 5d 0a 20 20  ges xyz} msg].  
0cb0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0cc0: 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67   {1 {wrong # arg
0cd0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62  s: should be "db
0ce0: 20 63 68 61 6e 67 65 73 20 22 7d 7d 0a 64 6f 5f   changes "}}.do_
0cf0: 74 65 73 74 20 74 63 6c 2d 31 2e 31 32 20 7b 0a  test tcl-1.12 {.
0d00: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
0d10: 64 62 20 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 20 61  db commit_hook a
0d20: 20 62 20 63 7d 20 6d 73 67 5d 0a 20 20 6c 61 70   b c} msg].  lap
0d30: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
0d40: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
0d50: 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 63 6f  should be "db co
0d60: 6d 6d 69 74 5f 68 6f 6f 6b 20 3f 43 41 4c 4c 42  mmit_hook ?CALLB
0d70: 41 43 4b 3f 22 7d 7d 0a 69 66 63 61 70 61 62 6c  ACK?"}}.ifcapabl
0d80: 65 20 7b 63 6f 6d 70 6c 65 74 65 7d 20 7b 0a 20  e {complete} {. 
0d90: 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31   do_test tcl-1.1
0da0: 33 20 7b 0a 20 20 20 20 73 65 74 20 76 20 5b 63  3 {.    set v [c
0db0: 61 74 63 68 20 7b 64 62 20 63 6f 6d 70 6c 65 74  atch {db complet
0dc0: 65 7d 20 6d 73 67 5d 0a 20 20 20 20 6c 61 70 70  e} msg].    lapp
0dd0: 65 6e 64 20 76 20 24 6d 73 67 0a 20 20 7d 20 7b  end v $msg.  } {
0de0: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
0df0: 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 63   should be "db c
0e00: 6f 6d 70 6c 65 74 65 20 53 51 4c 22 7d 7d 0a 7d  omplete SQL"}}.}
0e10: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31  .do_test tcl-1.1
0e20: 34 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  4 {.  set v [cat
0e30: 63 68 20 7b 64 62 20 65 76 61 6c 7d 20 6d 73 67  ch {db eval} msg
0e40: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
0e50: 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23  sg.} {1 {wrong #
0e60: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
0e70: 20 22 64 62 20 65 76 61 6c 20 53 51 4c 20 3f 41   "db eval SQL ?A
0e80: 52 52 41 59 2d 4e 41 4d 45 3f 20 3f 53 43 52 49  RRAY-NAME? ?SCRI
0e90: 50 54 3f 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  PT?"}}.do_test t
0ea0: 63 6c 2d 31 2e 31 35 20 7b 0a 20 20 73 65 74 20  cl-1.15 {.  set 
0eb0: 76 20 5b 63 61 74 63 68 20 7b 64 62 20 66 75 6e  v [catch {db fun
0ec0: 63 74 69 6f 6e 7d 20 6d 73 67 5d 0a 20 20 6c 61  ction} msg].  la
0ed0: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0ee0: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
0ef0: 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 66   should be "db f
0f00: 75 6e 63 74 69 6f 6e 20 4e 41 4d 45 20 5b 2d 61  unction NAME [-a
0f10: 72 67 63 6f 75 6e 74 20 4e 5d 20 53 43 52 49 50  rgcount N] SCRIP
0f20: 54 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c  T"}}.do_test tcl
0f30: 2d 31 2e 31 36 20 7b 0a 20 20 73 65 74 20 76 20  -1.16 {.  set v 
0f40: 5b 63 61 74 63 68 20 7b 64 62 20 6c 61 73 74 5f  [catch {db last_
0f50: 69 6e 73 65 72 74 5f 72 6f 77 69 64 20 78 79 7a  insert_rowid xyz
0f60: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0f70: 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72   v $msg.} {1 {wr
0f80: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
0f90: 6c 64 20 62 65 20 22 64 62 20 6c 61 73 74 5f 69  ld be "db last_i
0fa0: 6e 73 65 72 74 5f 72 6f 77 69 64 20 22 7d 7d 0a  nsert_rowid "}}.
0fb0: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31 37  do_test tcl-1.17
0fc0: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0fd0: 68 20 7b 64 62 20 72 65 6b 65 79 7d 20 6d 73 67  h {db rekey} msg
0fe0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
0ff0: 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23  sg.} {1 {wrong #
1000: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1010: 20 22 64 62 20 72 65 6b 65 79 20 4b 45 59 22 7d   "db rekey KEY"}
1020: 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e  }.do_test tcl-1.
1030: 31 38 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  18 {.  set v [ca
1040: 74 63 68 20 7b 64 62 20 74 69 6d 65 6f 75 74 7d  tch {db timeout}
1050: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
1060: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72 6f  v $msg.} {1 {wro
1070: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
1080: 64 20 62 65 20 22 64 62 20 74 69 6d 65 6f 75 74  d be "db timeout
1090: 20 4d 49 4c 4c 49 53 45 43 4f 4e 44 53 22 7d 7d   MILLISECONDS"}}
10a0: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31  .do_test tcl-1.1
10b0: 39 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  9 {.  set v [cat
10c0: 63 68 20 7b 64 62 20 63 6f 6c 6c 61 74 65 7d 20  ch {db collate} 
10d0: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
10e0: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e   $msg.} {1 {wron
10f0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
1100: 20 62 65 20 22 64 62 20 63 6f 6c 6c 61 74 65 20   be "db collate 
1110: 4e 41 4d 45 20 53 43 52 49 50 54 22 7d 7d 0a 64  NAME SCRIPT"}}.d
1120: 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 32 30 20  o_test tcl-1.20 
1130: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
1140: 20 7b 64 62 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6e   {db collation_n
1150: 65 65 64 65 64 7d 20 6d 73 67 5d 0a 20 20 6c 61  eeded} msg].  la
1160: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
1170: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
1180: 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 63   should be "db c
1190: 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 20  ollation_needed 
11a0: 53 43 52 49 50 54 22 7d 7d 0a 64 6f 5f 74 65 73  SCRIPT"}}.do_tes
11b0: 74 20 74 63 6c 2d 31 2e 32 31 20 7b 0a 20 20 73  t tcl-1.21 {.  s
11c0: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 64 62 20  et v [catch {db 
11d0: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 20 78 79  total_changes xy
11e0: 7a 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  z} msg].  lappen
11f0: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77  d v $msg.} {1 {w
1200: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1210: 75 6c 64 20 62 65 20 22 64 62 20 74 6f 74 61 6c  uld be "db total
1220: 5f 63 68 61 6e 67 65 73 20 22 7d 7d 0a 64 6f 5f  _changes "}}.do_
1230: 74 65 73 74 20 74 63 6c 2d 31 2e 32 30 20 7b 0a  test tcl-1.20 {.
1240: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
1250: 64 62 20 63 6f 70 79 7d 20 6d 73 67 5d 0a 20 20  db copy} msg].  
1260: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
1270: 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67   {1 {wrong # arg
1280: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62  s: should be "db
1290: 20 63 6f 70 79 20 43 4f 4e 46 4c 49 43 54 2d 41   copy CONFLICT-A
12a0: 4c 47 4f 52 49 54 48 4d 20 54 41 42 4c 45 20 46  LGORITHM TABLE F
12b0: 49 4c 45 4e 41 4d 45 20 3f 53 45 50 41 52 41 54  ILENAME ?SEPARAT
12c0: 4f 52 3f 20 3f 4e 55 4c 4c 49 4e 44 49 43 41 54  OR? ?NULLINDICAT
12d0: 4f 52 3f 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  OR?"}}.do_test t
12e0: 63 6c 2d 31 2e 32 31 20 7b 0a 20 20 73 65 74 20  cl-1.21 {.  set 
12f0: 76 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65  v [catch {sqlite
1300: 34 20 64 62 32 20 74 65 73 74 2e 64 62 20 2d 76  4 db2 test.db -v
1310: 66 73 20 6e 6f 73 75 63 68 76 66 73 7d 20 6d 73  fs nosuchvfs} ms
1320: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
1330: 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  msg.} {1 {no suc
1340: 68 20 76 66 73 3a 20 6e 6f 73 75 63 68 76 66 73  h vfs: nosuchvfs
1350: 7d 7d 0a 0a 63 61 74 63 68 20 7b 75 6e 73 65 74  }}..catch {unset
1360: 20 3a 3a 72 65 73 75 6c 74 7d 0a 64 6f 5f 74 65   ::result}.do_te
1370: 73 74 20 74 63 6c 2d 32 2e 31 20 7b 0a 20 20 65  st tcl-2.1 {.  e
1380: 78 65 63 73 71 6c 20 22 43 52 45 41 54 45 20 54  xecsql "CREATE T
1390: 41 42 4c 45 20 74 5c 75 30 31 32 33 78 28 61 20  ABLE t\u0123x(a 
13a0: 69 6e 74 2c 20 62 5c 75 31 32 33 35 20 66 6c 6f  int, b\u1235 flo
13b0: 61 74 29 22 0a 7d 20 7b 7d 0a 69 66 63 61 70 61  at)".} {}.ifcapa
13c0: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
13d0: 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74  as {.  do_test t
13e0: 63 6c 2d 32 2e 32 20 7b 0a 20 20 20 20 65 78 65  cl-2.2 {.    exe
13f0: 63 73 71 6c 20 22 50 52 41 47 4d 41 20 74 61 62  csql "PRAGMA tab
1400: 6c 65 5f 69 6e 66 6f 28 74 5c 75 30 31 32 33 78  le_info(t\u0123x
1410: 29 22 0a 20 20 7d 20 22 30 20 61 20 69 6e 74 20  )".  } "0 a int 
1420: 30 20 7b 7d 20 30 20 31 20 62 5c 75 31 32 33 35  0 {} 0 1 b\u1235
1430: 20 66 6c 6f 61 74 20 30 20 7b 7d 20 30 22 0a 7d   float 0 {} 0".}
1440: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 32 2e 33  .do_test tcl-2.3
1450: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 49 4e   {.  execsql "IN
1460: 53 45 52 54 20 49 4e 54 4f 20 74 5c 75 30 31 32  SERT INTO t\u012
1470: 33 78 20 56 41 4c 55 45 53 28 31 2c 32 2e 33 29  3x VALUES(1,2.3)
1480: 22 0a 20 20 64 62 20 65 76 61 6c 20 22 53 45 4c  ".  db eval "SEL
1490: 45 43 54 20 2a 20 46 52 4f 4d 20 74 5c 75 30 31  ECT * FROM t\u01
14a0: 32 33 78 22 20 72 65 73 75 6c 74 20 62 72 65 61  23x" result brea
14b0: 6b 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 2a  k.  set result(*
14c0: 29 0a 7d 20 22 61 20 62 5c 75 31 32 33 35 22 0a  ).} "a b\u1235".
14d0: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 6f 6e 65  ..# Test the one
14e0: 63 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 0a 23 0a  column method.#.
14f0: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 33 2e 31 20  do_test tcl-3.1 
1500: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1510: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1520: 20 53 45 4c 45 43 54 20 61 2a 32 2c 20 62 2a 32   SELECT a*2, b*2
1530: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e   FROM t1;.    IN
1540: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
1550: 45 43 54 20 61 2a 32 2b 31 2c 20 62 2a 32 2b 31  ECT a*2+1, b*2+1
1560: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e   FROM t1;.    IN
1570: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
1580: 45 43 54 20 61 2a 32 2b 33 2c 20 62 2a 32 2b 33  ECT a*2+3, b*2+3
1590: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 20 20   FROM t1;.  }.  
15a0: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 64  set rc [catch {d
15b0: 62 20 6f 6e 65 63 6f 6c 75 6d 6e 20 7b 53 45 4c  b onecolumn {SEL
15c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52  ECT * FROM t1 OR
15d0: 44 45 52 20 42 59 20 61 7d 7d 20 6d 73 67 5d 0a  DER BY a}} msg].
15e0: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73    lappend rc $ms
15f0: 67 0a 7d 20 7b 30 20 31 30 7d 0a 64 6f 5f 74 65  g.} {0 10}.do_te
1600: 73 74 20 74 63 6c 2d 33 2e 32 20 7b 0a 20 20 64  st tcl-3.2 {.  d
1610: 62 20 6f 6e 65 63 6f 6c 75 6d 6e 20 7b 53 45 4c  b onecolumn {SEL
1620: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
1630: 45 52 45 20 61 3c 30 7d 0a 7d 20 7b 7d 0a 64 6f  ERE a<0}.} {}.do
1640: 5f 74 65 73 74 20 74 63 6c 2d 33 2e 33 20 7b 0a  _test tcl-3.3 {.
1650: 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20    set rc [catch 
1660: 7b 64 62 20 6f 6e 65 63 6f 6c 75 6d 6e 7d 20 65  {db onecolumn} e
1670: 72 72 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  rrmsg].  lappend
1680: 20 72 63 20 24 65 72 72 6d 73 67 0a 7d 20 7b 31   rc $errmsg.} {1
1690: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
16a0: 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 6f 6e  should be "db on
16b0: 65 63 6f 6c 75 6d 6e 20 53 51 4c 22 7d 7d 0a 64  ecolumn SQL"}}.d
16c0: 6f 5f 74 65 73 74 20 74 63 6c 2d 33 2e 34 20 7b  o_test tcl-3.4 {
16d0: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
16e0: 20 7b 64 62 20 6f 6e 65 63 6f 6c 75 6d 6e 20 7b   {db onecolumn {
16f0: 53 45 4c 45 43 54 20 62 6f 67 75 73 7d 7d 20 65  SELECT bogus}} e
1700: 72 72 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  rrmsg].  lappend
1710: 20 72 63 20 24 65 72 72 6d 73 67 0a 7d 20 7b 31   rc $errmsg.} {1
1720: 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e   {no such column
1730: 3a 20 62 6f 67 75 73 7d 7d 0a 69 66 63 61 70 61  : bogus}}.ifcapa
1740: 62 6c 65 20 7b 74 63 6c 76 61 72 7d 20 7b 0a 20  ble {tclvar} {. 
1750: 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 33 2e 35   do_test tcl-3.5
1760: 20 7b 0a 20 20 20 20 73 65 74 20 62 20 35 30 0a   {.    set b 50.
1770: 20 20 20 20 73 65 74 20 72 63 20 5b 63 61 74 63      set rc [catc
1780: 68 20 7b 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43  h {db one {SELEC
1790: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
17a0: 45 20 62 3e 24 62 7d 7d 20 6d 73 67 5d 0a 20 20  E b>$b}} msg].  
17b0: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73    lappend rc $ms
17c0: 67 0a 20 20 7d 20 7b 30 20 34 31 7d 0a 20 20 64  g.  } {0 41}.  d
17d0: 6f 5f 74 65 73 74 20 74 63 6c 2d 33 2e 36 20 7b  o_test tcl-3.6 {
17e0: 0a 20 20 20 20 73 65 74 20 62 20 35 30 30 0a 20  .    set b 500. 
17f0: 20 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68     set rc [catch
1800: 20 7b 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54   {db one {SELECT
1810: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1820: 20 62 3e 24 62 7d 7d 20 6d 73 67 5d 0a 20 20 20   b>$b}} msg].   
1830: 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67   lappend rc $msg
1840: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
1850: 5f 74 65 73 74 20 74 63 6c 2d 33 2e 37 20 7b 0a  _test tcl-3.7 {.
1860: 20 20 20 20 73 65 74 20 62 20 35 30 30 0a 20 20      set b 500.  
1870: 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20    set rc [catch 
1880: 7b 64 62 20 6f 6e 65 20 7b 0a 20 20 20 20 20 20  {db one {.      
1890: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
18a0: 41 4c 55 45 53 28 39 39 2c 35 31 30 29 3b 0a 20  ALUES(99,510);. 
18b0: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
18c0: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3e 24 62  OM t1 WHERE b>$b
18d0: 0a 20 20 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 20  .    }} msg].   
18e0: 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67   lappend rc $msg
18f0: 0a 20 20 7d 20 7b 30 20 39 39 7d 0a 7d 0a 69 66  .  } {0 99}.}.if
1900: 63 61 70 61 62 6c 65 20 7b 21 74 63 6c 76 61 72  capable {!tclvar
1910: 7d 20 7b 0a 20 20 20 65 78 65 63 73 71 6c 20 7b  } {.   execsql {
1920: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1930: 41 4c 55 45 53 28 39 39 2c 35 31 30 29 7d 0a 7d  ALUES(99,510)}.}
1940: 0a 0a 23 20 54 75 72 6e 20 74 68 65 20 62 75 73  ..# Turn the bus
1950: 79 20 68 61 6e 64 6c 65 72 20 6f 6e 20 61 6e 64  y handler on and
1960: 20 6f 66 66 0a 23 0a 64 6f 5f 74 65 73 74 20 74   off.#.do_test t
1970: 63 6c 2d 34 2e 31 20 7b 0a 20 20 70 72 6f 63 20  cl-4.1 {.  proc 
1980: 62 75 73 79 5f 63 61 6c 6c 62 61 63 6b 20 7b 63  busy_callback {c
1990: 6e 74 7d 20 7b 0a 20 20 20 20 62 72 65 61 6b 0a  nt} {.    break.
19a0: 20 20 7d 0a 20 20 64 62 20 62 75 73 79 20 62 75    }.  db busy bu
19b0: 73 79 5f 63 61 6c 6c 62 61 63 6b 0a 20 20 64 62  sy_callback.  db
19c0: 20 62 75 73 79 0a 7d 20 7b 62 75 73 79 5f 63 61   busy.} {busy_ca
19d0: 6c 6c 62 61 63 6b 7d 0a 64 6f 5f 74 65 73 74 20  llback}.do_test 
19e0: 74 63 6c 2d 34 2e 32 20 7b 0a 20 20 64 62 20 62  tcl-4.2 {.  db b
19f0: 75 73 79 20 7b 7d 0a 20 20 64 62 20 62 75 73 79  usy {}.  db busy
1a00: 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c 65  .} {}..ifcapable
1a10: 20 7b 74 63 6c 76 61 72 7d 20 7b 0a 20 20 23 20   {tclvar} {.  # 
1a20: 50 61 72 73 69 6e 67 20 6f 66 20 54 43 4c 20 76  Parsing of TCL v
1a30: 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 77 69  ariable names wi
1a40: 74 68 69 6e 20 53 51 4c 20 69 6e 74 6f 20 62 6f  thin SQL into bo
1a50: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 2e 0a  und parameters..
1a60: 20 20 23 0a 20 20 64 6f 5f 74 65 73 74 20 74 63    #.  do_test tc
1a70: 6c 2d 35 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  l-5.1 {.    exec
1a80: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
1a90: 45 20 74 33 28 61 2c 62 2c 63 29 7d 0a 20 20 20  E t3(a,b,c)}.   
1aa0: 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 78 7d   catch {unset x}
1ab0: 0a 20 20 20 20 73 65 74 20 78 28 31 29 20 41 0a  .    set x(1) A.
1ac0: 20 20 20 20 73 65 74 20 78 28 32 29 20 42 0a 20      set x(2) B. 
1ad0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1ae0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1af0: 33 20 56 41 4c 55 45 53 28 24 3a 3a 78 28 31 29  3 VALUES($::x(1)
1b00: 2c 24 3a 3a 78 28 32 29 2c 24 3a 3a 78 28 33 29  ,$::x(2),$::x(3)
1b10: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
1b20: 2a 20 46 52 4f 4d 20 74 33 0a 20 20 20 20 7d 0a  * FROM t3.    }.
1b30: 20 20 7d 20 7b 41 20 42 20 7b 7d 7d 0a 20 20 64    } {A B {}}.  d
1b40: 6f 5f 74 65 73 74 20 74 63 6c 2d 35 2e 32 20 7b  o_test tcl-5.2 {
1b50: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1b60: 20 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65       SELECT type
1b70: 6f 66 28 61 29 2c 20 74 79 70 65 6f 66 28 62 29  of(a), typeof(b)
1b80: 2c 20 74 79 70 65 6f 66 28 63 29 20 46 52 4f 4d  , typeof(c) FROM
1b90: 20 74 33 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 74   t3.    }.  } {t
1ba0: 65 78 74 20 74 65 78 74 20 6e 75 6c 6c 7d 0a 20  ext text null}. 
1bb0: 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 35 2e 33   do_test tcl-5.3
1bc0: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e   {.    catch {un
1bd0: 73 65 74 20 78 7d 0a 20 20 20 20 73 65 74 20 78  set x}.    set x
1be0: 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20   [binary format 
1bf0: 68 31 32 20 36 38 36 39 30 30 36 38 36 66 30 30  h12 686900686f00
1c00: 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  ].    execsql {.
1c10: 20 20 20 20 20 20 55 50 44 41 54 45 20 74 33 20        UPDATE t3 
1c20: 53 45 54 20 61 3d 24 3a 3a 78 3b 0a 20 20 20 20  SET a=$::x;.    
1c30: 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 0a  }.    db eval {.
1c40: 20 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46        SELECT a F
1c50: 52 4f 4d 20 74 33 0a 20 20 20 20 7d 20 62 72 65  ROM t3.    } bre
1c60: 61 6b 0a 20 20 20 20 62 69 6e 61 72 79 20 73 63  ak.    binary sc
1c70: 61 6e 20 24 61 20 68 31 32 20 61 64 61 74 61 0a  an $a h12 adata.
1c80: 20 20 20 20 73 65 74 20 61 64 61 74 61 0a 20 20      set adata.  
1c90: 7d 20 7b 36 38 36 39 30 30 36 38 36 66 30 30 7d  } {686900686f00}
1ca0: 0a 20 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 35  .  do_test tcl-5
1cb0: 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .4 {.    execsql
1cc0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
1cd0: 74 79 70 65 6f 66 28 61 29 2c 20 74 79 70 65 6f  typeof(a), typeo
1ce0: 66 28 62 29 2c 20 74 79 70 65 6f 66 28 63 29 20  f(b), typeof(c) 
1cf0: 46 52 4f 4d 20 74 33 0a 20 20 20 20 7d 0a 20 20  FROM t3.    }.  
1d00: 7d 20 7b 62 6c 6f 62 20 74 65 78 74 20 6e 75 6c  } {blob text nul
1d10: 6c 7d 0a 7d 0a 0a 23 20 4f 70 65 72 61 74 69 6f  l}.}..# Operatio
1d20: 6e 20 6f 66 20 22 62 72 65 61 6b 22 20 61 6e 64  n of "break" and
1d30: 20 22 63 6f 6e 74 69 6e 75 65 22 20 77 69 74 68   "continue" with
1d40: 69 6e 20 72 6f 77 20 73 63 72 69 70 74 73 0a 23  in row scripts.#
1d50: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 36 2e 31  .do_test tcl-6.1
1d60: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
1d70: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d 20  LECT * FROM t1} 
1d80: 7b 0a 20 20 20 20 62 72 65 61 6b 0a 20 20 7d 0a  {.    break.  }.
1d90: 20 20 6c 61 70 70 65 6e 64 20 61 20 24 62 0a 7d    lappend a $b.}
1da0: 20 7b 31 30 20 32 30 7d 0a 64 6f 5f 74 65 73 74   {10 20}.do_test
1db0: 20 74 63 6c 2d 36 2e 32 20 7b 0a 20 20 73 65 74   tcl-6.2 {.  set
1dc0: 20 63 6e 74 20 30 0a 20 20 64 62 20 65 76 61 6c   cnt 0.  db eval
1dd0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1de0: 74 31 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 61  t1} {.    if {$a
1df0: 3e 34 30 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20  >40} continue.  
1e00: 20 20 69 6e 63 72 20 63 6e 74 0a 20 20 7d 0a 20    incr cnt.  }. 
1e10: 20 73 65 74 20 63 6e 74 0a 7d 20 7b 34 7d 0a 64   set cnt.} {4}.d
1e20: 6f 5f 74 65 73 74 20 74 63 6c 2d 36 2e 33 20 7b  o_test tcl-6.3 {
1e30: 0a 20 20 73 65 74 20 63 6e 74 20 30 0a 20 20 64  .  set cnt 0.  d
1e40: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a  b eval {SELECT *
1e50: 20 46 52 4f 4d 20 74 31 7d 20 7b 0a 20 20 20 20   FROM t1} {.    
1e60: 69 66 20 7b 24 61 3c 34 30 7d 20 63 6f 6e 74 69  if {$a<40} conti
1e70: 6e 75 65 0a 20 20 20 20 69 6e 63 72 20 63 6e 74  nue.    incr cnt
1e80: 0a 20 20 7d 0a 20 20 73 65 74 20 63 6e 74 0a 7d  .  }.  set cnt.}
1e90: 20 7b 35 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c   {5}.do_test tcl
1ea0: 2d 36 2e 34 20 7b 0a 20 20 70 72 6f 63 20 72 65  -6.4 {.  proc re
1eb0: 74 75 72 6e 5f 74 65 73 74 20 7b 78 7d 20 7b 0a  turn_test {x} {.
1ec0: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
1ed0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d 20 7b  ECT * FROM t1} {
1ee0: 0a 20 20 20 20 20 20 69 66 20 7b 24 61 3d 3d 24  .      if {$a==$
1ef0: 78 7d 20 7b 72 65 74 75 72 6e 20 24 62 7d 0a 20  x} {return $b}. 
1f00: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
1f10: 6e 5f 74 65 73 74 20 31 30 0a 7d 20 32 30 0a 64  n_test 10.} 20.d
1f20: 6f 5f 74 65 73 74 20 74 63 6c 2d 36 2e 35 20 7b  o_test tcl-6.5 {
1f30: 0a 20 20 72 65 74 75 72 6e 5f 74 65 73 74 20 32  .  return_test 2
1f40: 30 0a 7d 20 34 30 0a 64 6f 5f 74 65 73 74 20 74  0.} 40.do_test t
1f50: 63 6c 2d 36 2e 36 20 7b 0a 20 20 72 65 74 75 72  cl-6.6 {.  retur
1f60: 6e 5f 74 65 73 74 20 39 39 0a 7d 20 35 31 30 0a  n_test 99.} 510.
1f70: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 36 2e 37 20  do_test tcl-6.7 
1f80: 7b 0a 20 20 72 65 74 75 72 6e 5f 74 65 73 74 20  {.  return_test 
1f90: 30 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  0.} {}..do_test 
1fa0: 74 63 6c 2d 37 2e 31 20 7b 0a 20 20 64 62 20 76  tcl-7.1 {.  db v
1fb0: 65 72 73 69 6f 6e 0a 20 20 65 78 70 72 20 30 0a  ersion.  expr 0.
1fc0: 7d 20 7b 30 7d 0a 0a 23 20 6d 6f 64 69 66 79 20  } {0}..# modify 
1fd0: 61 6e 64 20 72 65 73 65 74 20 74 68 65 20 4e 55  and reset the NU
1fe0: 4c 4c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  LL representatio
1ff0: 6e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d  n.#.do_test tcl-
2000: 38 2e 31 20 7b 0a 20 20 64 62 20 6e 75 6c 6c 76  8.1 {.  db nullv
2010: 61 6c 75 65 20 4e 61 4e 0a 20 20 65 78 65 63 73  alue NaN.  execs
2020: 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql {INSERT INTO 
2030: 74 31 20 56 41 4c 55 45 53 28 33 30 2c 4e 55 4c  t1 VALUES(30,NUL
2040: 4c 29 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  L)}.  db eval {S
2050: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
2060: 57 48 45 52 45 20 62 20 49 53 20 4e 55 4c 4c 7d  WHERE b IS NULL}
2070: 0a 7d 20 7b 33 30 20 4e 61 4e 7d 0a 64 6f 5f 74  .} {30 NaN}.do_t
2080: 65 73 74 20 74 63 6c 2d 38 2e 32 20 7b 0a 20 20  est tcl-8.2 {.  
2090: 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 4e 55 4c  db nullvalue NUL
20a0: 4c 0a 20 20 64 62 20 6e 75 6c 6c 76 61 6c 75 65  L.  db nullvalue
20b0: 0a 7d 20 7b 4e 55 4c 4c 7d 0a 64 6f 5f 74 65 73  .} {NULL}.do_tes
20c0: 74 20 74 63 6c 2d 38 2e 33 20 7b 0a 20 20 64 62  t tcl-8.3 {.  db
20d0: 20 6e 75 6c 6c 76 61 6c 75 65 20 7b 7d 0a 20 20   nullvalue {}.  
20e0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
20f0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
2100: 62 20 49 53 20 4e 55 4c 4c 7d 0a 7d 20 7b 33 30  b IS NULL}.} {30
2110: 20 7b 7d 7d 0a 0a 23 20 54 65 73 74 20 74 68 65   {}}..# Test the
2120: 20 72 65 74 75 72 6e 20 74 79 70 65 20 6f 66 20   return type of 
2130: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
2140: 63 74 69 6f 6e 73 0a 23 0a 64 6f 5f 74 65 73 74  ctions.#.do_test
2150: 20 74 63 6c 2d 39 2e 31 20 7b 0a 20 20 64 62 20   tcl-9.1 {.  db 
2160: 66 75 6e 63 74 69 6f 6e 20 72 65 74 5f 73 74 72  function ret_str
2170: 20 7b 72 65 74 75 72 6e 20 22 68 69 22 7d 0a 20   {return "hi"}. 
2180: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
2190: 20 74 79 70 65 6f 66 28 72 65 74 5f 73 74 72 28   typeof(ret_str(
21a0: 29 29 7d 0a 7d 20 7b 74 65 78 74 7d 0a 64 6f 5f  ))}.} {text}.do_
21b0: 74 65 73 74 20 74 63 6c 2d 39 2e 32 20 7b 0a 20  test tcl-9.2 {. 
21c0: 20 64 62 20 66 75 6e 63 74 69 6f 6e 20 72 65 74   db function ret
21d0: 5f 64 62 6c 20 7b 72 65 74 75 72 6e 20 5b 65 78  _dbl {return [ex
21e0: 70 72 20 7b 72 61 6e 64 28 29 2a 30 2e 35 7d 5d  pr {rand()*0.5}]
21f0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
2200: 45 43 54 20 74 79 70 65 6f 66 28 72 65 74 5f 64  ECT typeof(ret_d
2210: 62 6c 28 29 29 7d 0a 7d 20 7b 72 65 61 6c 7d 0a  bl())}.} {real}.
2220: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 39 2e 33 20  do_test tcl-9.3 
2230: 7b 0a 20 20 64 62 20 66 75 6e 63 74 69 6f 6e 20  {.  db function 
2240: 72 65 74 5f 69 6e 74 20 7b 72 65 74 75 72 6e 20  ret_int {return 
2250: 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64 28  [expr {int(rand(
2260: 29 2a 32 30 30 29 7d 5d 7d 0a 20 20 65 78 65 63  )*200)}]}.  exec
2270: 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65  sql {SELECT type
2280: 6f 66 28 72 65 74 5f 69 6e 74 28 29 29 7d 0a 7d  of(ret_int())}.}
2290: 20 7b 69 6e 74 65 67 65 72 7d 0a 0a 23 20 52 65   {integer}..# Re
22a0: 63 75 72 73 69 76 65 20 63 61 6c 6c 73 20 74 6f  cursive calls to
22b0: 20 74 68 65 20 73 61 6d 65 20 75 73 65 72 2d 64   the same user-d
22c0: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 0a  efined function.
22d0: 23 0a 69 66 63 61 70 61 62 6c 65 20 74 63 6c 76  #.ifcapable tclv
22e0: 61 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74  ar {.  do_test t
22f0: 63 6c 2d 39 2e 31 30 20 7b 0a 20 20 20 20 70 72  cl-9.10 {.    pr
2300: 6f 63 20 75 73 65 72 66 75 6e 63 5f 72 31 20 7b  oc userfunc_r1 {
2310: 6e 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  n} {.      if {$
2320: 6e 3c 3d 30 7d 20 7b 72 65 74 75 72 6e 20 30 7d  n<=0} {return 0}
2330: 0a 20 20 20 20 20 20 73 65 74 20 6e 6d 31 20 5b  .      set nm1 [
2340: 65 78 70 72 20 7b 24 6e 2d 31 7d 5d 0a 20 20 20  expr {$n-1}].   
2350: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr 
2360: 7b 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43  {[db eval {SELEC
2370: 54 20 72 31 28 24 6e 6d 31 29 7d 5d 2b 24 6e 7d  T r1($nm1)}]+$n}
2380: 5d 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 66  ].    }.    db f
2390: 75 6e 63 74 69 6f 6e 20 72 31 20 75 73 65 72 66  unction r1 userf
23a0: 75 6e 63 5f 72 31 0a 20 20 20 20 65 78 65 63 73  unc_r1.    execs
23b0: 71 6c 20 7b 53 45 4c 45 43 54 20 72 31 28 31 30  ql {SELECT r1(10
23c0: 29 7d 0a 20 20 7d 20 7b 35 35 7d 0a 20 20 64 6f  )}.  } {55}.  do
23d0: 5f 74 65 73 74 20 74 63 6c 2d 39 2e 31 31 20 7b  _test tcl-9.11 {
23e0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
23f0: 4c 45 43 54 20 72 31 28 31 30 30 29 7d 0a 20 20  LECT r1(100)}.  
2400: 7d 20 7b 35 30 35 30 7d 0a 7d 0a 0a 23 20 54 65  } {5050}.}..# Te
2410: 73 74 73 20 66 6f 72 20 74 68 65 20 6e 65 77 20  sts for the new 
2420: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 65 74 68  transaction meth
2430: 6f 64 0a 23 0a 64 6f 5f 74 65 73 74 20 74 63 6c  od.#.do_test tcl
2440: 2d 31 30 2e 31 20 7b 0a 20 20 64 62 20 74 72 61  -10.1 {.  db tra
2450: 6e 73 61 63 74 69 6f 6e 20 7b 7d 0a 7d 20 7b 7d  nsaction {}.} {}
2460: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 30 2e  .do_test tcl-10.
2470: 32 20 7b 0a 20 20 64 62 20 74 72 61 6e 73 61 63  2 {.  db transac
2480: 74 69 6f 6e 20 64 65 66 65 72 72 65 64 20 7b 7d  tion deferred {}
2490: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 63  .} {}.do_test tc
24a0: 6c 2d 31 30 2e 33 20 7b 0a 20 20 64 62 20 74 72  l-10.3 {.  db tr
24b0: 61 6e 73 61 63 74 69 6f 6e 20 69 6d 6d 65 64 69  ansaction immedi
24c0: 61 74 65 20 7b 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  ate {}.} {}.do_t
24d0: 65 73 74 20 74 63 6c 2d 31 30 2e 34 20 7b 0a 20  est tcl-10.4 {. 
24e0: 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   db transaction 
24f0: 65 78 63 6c 75 73 69 76 65 20 7b 7d 0a 7d 20 7b  exclusive {}.} {
2500: 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 30  }.do_test tcl-10
2510: 2e 35 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63  .5 {.  set rc [c
2520: 61 74 63 68 20 7b 64 62 20 74 72 61 6e 73 61 63  atch {db transac
2530: 74 69 6f 6e 20 78 79 7a 7a 79 20 7b 7d 7d 20 6d  tion xyzzy {}} m
2540: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  sg].  lappend rc
2550: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 62 61 64 20   $msg.} {1 {bad 
2560: 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 79 70 65  transaction type
2570: 20 22 78 79 7a 7a 79 22 3a 20 6d 75 73 74 20 62   "xyzzy": must b
2580: 65 20 64 65 66 65 72 72 65 64 2c 20 65 78 63 6c  e deferred, excl
2590: 75 73 69 76 65 2c 20 6f 72 20 69 6d 6d 65 64 69  usive, or immedi
25a0: 61 74 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63  ate}}.do_test tc
25b0: 6c 2d 31 30 2e 36 20 7b 0a 20 20 73 65 74 20 72  l-10.6 {.  set r
25c0: 63 20 5b 63 61 74 63 68 20 7b 64 62 20 74 72 61  c [catch {db tra
25d0: 6e 73 61 63 74 69 6f 6e 20 7b 65 72 72 6f 72 20  nsaction {error 
25e0: 74 65 73 74 2d 65 72 72 6f 72 7d 7d 20 6d 73 67  test-error}} msg
25f0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24  ].  lappend rc $
2600: 6d 73 67 0a 7d 20 7b 31 20 74 65 73 74 2d 65 72  msg.} {1 test-er
2610: 72 6f 72 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c  ror}.do_test tcl
2620: 2d 31 30 2e 37 20 7b 0a 20 20 64 62 20 74 72 61  -10.7 {.  db tra
2630: 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20 64  nsaction {.    d
2640: 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54  b eval {CREATE T
2650: 41 42 4c 45 20 74 34 28 78 29 7d 0a 20 20 20 20  ABLE t4(x)}.    
2660: 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b  db transaction {
2670: 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b  .      db eval {
2680: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
2690: 41 4c 55 45 53 28 31 29 7d 0a 20 20 20 20 7d 0a  ALUES(1)}.    }.
26a0: 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53    }.  db eval {S
26b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d  ELECT * FROM t4}
26c0: 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 74 63 6c  .} 1.do_test tcl
26d0: 2d 31 30 2e 38 20 7b 0a 20 20 63 61 74 63 68 20  -10.8 {.  catch 
26e0: 7b 0a 20 20 20 20 64 62 20 74 72 61 6e 73 61 63  {.    db transac
26f0: 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 64 62 20  tion {.      db 
2700: 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  eval {INSERT INT
2710: 4f 20 74 34 20 56 41 4c 55 45 53 28 32 29 7d 0a  O t4 VALUES(2)}.
2720: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 49        db eval {I
2730: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
2740: 4c 55 45 53 28 33 29 7d 0a 20 20 20 20 20 20 64  LUES(3)}.      d
2750: 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49  b eval {INSERT I
2760: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 34 29  NTO t4 VALUES(4)
2770: 7d 0a 20 20 20 20 20 20 65 72 72 6f 72 20 74 65  }.      error te
2780: 73 74 2d 65 72 72 6f 72 0a 20 20 20 20 7d 0a 20  st-error.    }. 
2790: 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   }.  db eval {SE
27a0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a  LECT * FROM t4}.
27b0: 7d 20 31 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d  } 1.do_test tcl-
27c0: 31 30 2e 39 20 7b 0a 20 20 64 62 20 74 72 61 6e  10.9 {.  db tran
27d0: 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20 64 62  saction {.    db
27e0: 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e   eval {INSERT IN
27f0: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 32 29 7d  TO t4 VALUES(2)}
2800: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20 20  .    catch {.   
2810: 20 20 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f     db transactio
2820: 6e 20 7b 0a 20 20 20 20 20 20 20 20 64 62 20 65  n {.        db e
2830: 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  val {INSERT INTO
2840: 20 74 34 20 56 41 4c 55 45 53 28 33 29 7d 0a 20   t4 VALUES(3)}. 
2850: 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b         db eval {
2860: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
2870: 41 4c 55 45 53 28 34 29 7d 0a 20 20 20 20 20 20  ALUES(4)}.      
2880: 20 20 65 72 72 6f 72 20 74 65 73 74 2d 65 72 72    error test-err
2890: 6f 72 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  or.      }.    }
28a0: 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b  .  }.  db eval {
28b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
28c0: 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73  }.} {1 2}.do_tes
28d0: 74 20 74 63 6c 2d 31 30 2e 31 30 20 7b 0a 20 20  t tcl-10.10 {.  
28e0: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
28f0: 69 3c 31 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  i<1} {incr i} {.
2900: 20 20 20 20 64 62 20 74 72 61 6e 73 61 63 74 69      db transacti
2910: 6f 6e 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76  on {.      db ev
2920: 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  al {INSERT INTO 
2930: 74 34 20 56 41 4c 55 45 53 28 35 29 7d 0a 20 20  t4 VALUES(5)}.  
2940: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
2950: 20 7d 0a 20 20 20 20 65 72 72 6f 72 20 22 54 68   }.    error "Th
2960: 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 6e  is line should n
2970: 6f 74 20 62 65 20 72 75 6e 22 0a 20 20 7d 0a 20  ot be run".  }. 
2980: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
2990: 20 2a 20 46 52 4f 4d 20 74 34 7d 0a 7d 20 7b 31   * FROM t4}.} {1
29a0: 20 32 20 35 7d 0a 64 6f 5f 74 65 73 74 20 74 63   2 5}.do_test tc
29b0: 6c 2d 31 30 2e 31 31 20 7b 0a 20 20 66 6f 72 20  l-10.11 {.  for 
29c0: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c 31 30  {set i 0} {$i<10
29d0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
29e0: 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   db transaction 
29f0: 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20  {.      db eval 
2a00: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20  {INSERT INTO t4 
2a10: 56 41 4c 55 45 53 28 36 29 7d 0a 20 20 20 20 20  VALUES(6)}.     
2a20: 20 62 72 65 61 6b 0a 20 20 20 20 7d 0a 20 20 7d   break.    }.  }
2a30: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
2a40: 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a 7d 20  CT * FROM t4}.} 
2a50: 7b 31 20 32 20 35 20 36 7d 0a 64 6f 5f 74 65 73  {1 2 5 6}.do_tes
2a60: 74 20 74 63 6c 2d 31 30 2e 31 32 20 7b 0a 20 20  t tcl-10.12 {.  
2a70: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a  set rc [catch {.
2a80: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30      for {set i 0
2a90: 7d 20 7b 24 69 3c 31 30 7d 20 7b 69 6e 63 72 20  } {$i<10} {incr 
2aa0: 69 7d 20 7b 0a 20 20 20 20 20 20 64 62 20 74 72  i} {.      db tr
2ab0: 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20  ansaction {.    
2ac0: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53      db eval {INS
2ad0: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
2ae0: 45 53 28 37 29 7d 0a 20 20 20 20 20 20 20 20 72  ES(7)}.        r
2af0: 65 74 75 72 6e 0a 20 20 20 20 20 20 7d 0a 20 20  eturn.      }.  
2b00: 20 20 7d 0a 20 20 7d 5d 0a 7d 20 7b 32 7d 0a 64    }.  }].} {2}.d
2b10: 6f 5f 74 65 73 74 20 74 63 6c 2d 31 30 2e 31 33  o_test tcl-10.13
2b20: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
2b30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a  LECT * FROM t4}.
2b40: 7d 20 7b 31 20 32 20 35 20 36 20 37 7d 0a 0a 23  } {1 2 5 6 7}..#
2b50: 20 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20 5b   Now test that [
2b60: 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 5d 20  db transaction] 
2b70: 63 6f 6d 6d 61 6e 64 73 20 6d 61 79 20 62 65 20  commands may be 
2b80: 6e 65 73 74 65 64 20 77 69 74 68 20 0a 23 20 74  nested with .# t
2b90: 68 65 20 65 78 70 65 63 74 65 64 20 72 65 73 75  he expected resu
2ba0: 6c 74 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74  lts..#.do_test t
2bb0: 63 6c 2d 31 30 2e 31 34 20 7b 0a 20 20 64 62 20  cl-10.14 {.  db 
2bc0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20  transaction {.  
2bd0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
2be0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 34    DELETE FROM t4
2bf0: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
2c00: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 6f  NTO t4 VALUES('o
2c10: 6e 65 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ne');.    }..   
2c20: 20 63 61 74 63 68 20 7b 20 0a 20 20 20 20 20 20   catch { .      
2c30: 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b  db transaction {
2c40: 0a 20 20 20 20 20 20 20 20 64 62 20 65 76 61 6c  .        db eval
2c50: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
2c60: 34 20 56 41 4c 55 45 53 28 27 74 77 6f 27 29 20  4 VALUES('two') 
2c70: 7d 0a 20 20 20 20 20 20 20 20 64 62 20 74 72 61  }.        db tra
2c80: 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20 20  nsaction {.     
2c90: 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 20 49       db eval { I
2ca0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
2cb0: 4c 55 45 53 28 27 74 68 72 65 65 27 29 20 7d 0a  LUES('three') }.
2cc0: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2cd0: 22 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 21  "throw an error!
2ce0: 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ".        }.    
2cf0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
2d00: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
2d10: 20 2a 20 46 52 4f 4d 20 74 34 7d 0a 7d 20 7b 6f   * FROM t4}.} {o
2d20: 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d  ne}.do_test tcl-
2d30: 31 30 2e 31 35 20 7b 0a 20 20 23 20 4d 61 6b 65  10.15 {.  # Make
2d40: 20 73 75 72 65 20 61 20 74 72 61 6e 73 61 63 74   sure a transact
2d50: 69 6f 6e 20 68 61 73 20 6e 6f 74 20 62 65 65 6e  ion has not been
2d60: 20 6c 65 66 74 20 6f 70 65 6e 2e 0a 20 20 64 62   left open..  db
2d70: 20 65 76 61 6c 20 7b 42 45 47 49 4e 20 3b 20 43   eval {BEGIN ; C
2d80: 4f 4d 4d 49 54 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  OMMIT}.} {}.do_t
2d90: 65 73 74 20 74 63 6c 2d 31 30 2e 31 36 20 7b 0a  est tcl-10.16 {.
2da0: 20 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e    db transaction
2db0: 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b   {.    db eval {
2dc0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
2dd0: 56 41 4c 55 45 53 28 27 74 77 6f 27 29 3b 20 7d  VALUES('two'); }
2de0: 0a 20 20 20 20 64 62 20 74 72 61 6e 73 61 63 74  .    db transact
2df0: 69 6f 6e 20 7b 0a 20 20 20 20 20 20 64 62 20 65  ion {.      db e
2e00: 76 61 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  val { INSERT INT
2e10: 4f 20 74 34 20 56 41 4c 55 45 53 28 27 74 68 72  O t4 VALUES('thr
2e20: 65 65 27 29 20 7d 0a 20 20 20 20 20 20 64 62 20  ee') }.      db 
2e30: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20  transaction {.  
2e40: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 20        db eval { 
2e50: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
2e60: 41 4c 55 45 53 28 27 66 6f 75 72 27 29 20 7d 0a  ALUES('four') }.
2e70: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2e80: 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  }.  db eval {SEL
2e90: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a 7d  ECT * FROM t4}.}
2ea0: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   {one two three 
2eb0: 66 6f 75 72 7d 0a 64 6f 5f 74 65 73 74 20 74 63  four}.do_test tc
2ec0: 6c 2d 31 30 2e 31 37 20 7b 0a 20 20 63 61 74 63  l-10.17 {.  catc
2ed0: 68 20 7b 0a 20 20 20 20 64 62 20 74 72 61 6e 73  h {.    db trans
2ee0: 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 64  action {.      d
2ef0: 62 20 65 76 61 6c 20 7b 20 49 4e 53 45 52 54 20  b eval { INSERT 
2f00: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
2f10: 41 27 29 3b 20 7d 0a 20 20 20 20 20 20 64 62 20  A'); }.      db 
2f20: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20  transaction {.  
2f30: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 20        db eval { 
2f40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
2f50: 41 4c 55 45 53 28 27 42 27 29 20 7d 0a 20 20 20  ALUES('B') }.   
2f60: 20 20 20 20 20 64 62 20 74 72 61 6e 73 61 63 74       db transact
2f70: 69 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ion {.          
2f80: 64 62 20 65 76 61 6c 20 7b 20 49 4e 53 45 52 54  db eval { INSERT
2f90: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
2fa0: 27 43 27 29 20 7d 0a 20 20 20 20 20 20 20 20 20  'C') }.         
2fb0: 20 65 72 72 6f 72 20 22 74 68 72 6f 77 20 61 6e   error "throw an
2fc0: 20 65 72 72 6f 72 21 22 0a 20 20 20 20 20 20 20   error!".       
2fd0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
2fe0: 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b  .  }.  db eval {
2ff0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
3000: 7d 0a 7d 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72  }.} {one two thr
3010: 65 65 20 66 6f 75 72 7d 0a 64 6f 5f 74 65 73 74  ee four}.do_test
3020: 20 74 63 6c 2d 31 30 2e 31 38 20 7b 0a 20 20 23   tcl-10.18 {.  #
3030: 20 4d 61 6b 65 20 73 75 72 65 20 61 20 74 72 61   Make sure a tra
3040: 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 6e 6f 74  nsaction has not
3050: 20 62 65 65 6e 20 6c 65 66 74 20 6f 70 65 6e 2e   been left open.
3060: 0a 20 20 64 62 20 65 76 61 6c 20 7b 42 45 47 49  .  db eval {BEGI
3070: 4e 20 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 7d  N ; COMMIT}.} {}
3080: 0a 0a 23 20 4d 65 73 73 20 75 70 20 61 20 5b 64  ..# Mess up a [d
3090: 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 5d 20 63  b transaction] c
30a0: 6f 6d 6d 61 6e 64 20 62 79 20 6c 6f 63 6b 69 6e  ommand by lockin
30b0: 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  g the database u
30c0: 73 69 6e 67 20 61 0a 23 20 73 65 63 6f 6e 64 20  sing a.# second 
30d0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 65 6e 20  connection when 
30e0: 69 74 20 74 72 69 65 73 20 74 6f 20 63 6f 6d 6d  it tries to comm
30f0: 69 74 2e 20 4d 61 6b 65 20 73 75 72 65 20 74 68  it. Make sure th
3100: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 23 20  e transaction.# 
3110: 69 73 20 6e 6f 74 20 73 74 69 6c 6c 20 6f 70 65  is not still ope
3120: 6e 20 61 66 74 65 72 20 74 68 65 20 22 64 61 74  n after the "dat
3130: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22  abase is locked"
3140: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 20 74 68   exception is th
3150: 72 6f 77 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  rown..#.do_test 
3160: 74 63 6c 2d 31 30 2e 31 38 20 7b 0a 20 20 73 71  tcl-10.18 {.  sq
3170: 6c 69 74 65 34 20 64 62 32 20 74 65 73 74 2e 64  lite4 db2 test.d
3180: 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20  b.  db2 eval {. 
3190: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 53 45     BEGIN;.    SE
31a0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
31b0: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 0a  te_master;.  }..
31c0: 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20    set rc [catch 
31d0: 7b 0a 20 20 20 20 64 62 20 74 72 61 6e 73 61 63  {.    db transac
31e0: 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 64 62 20  tion {.      db 
31f0: 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  eval {INSERT INT
3200: 4f 20 74 34 20 56 41 4c 55 45 53 28 27 66 69 76  O t4 VALUES('fiv
3210: 65 27 29 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d  e')}.    }.  } m
3220: 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24  sg].  list $rc $
3230: 6d 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61  msg.} {1 {databa
3240: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 64  se is locked}}.d
3250: 6f 5f 74 65 73 74 20 74 63 6c 2d 31 30 2e 31 39  o_test tcl-10.19
3260: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 42 45   {.  db eval {BE
3270: 47 49 4e 20 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20  GIN ; COMMIT}.} 
3280: 7b 7d 0a 0a 23 20 54 68 77 61 72 74 20 61 20 5b  {}..# Thwart a [
3290: 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 5d 20  db transaction] 
32a0: 63 6f 6d 6d 61 6e 64 20 62 79 20 6c 6f 63 6b 69  command by locki
32b0: 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ng the database 
32c0: 75 73 69 6e 67 20 61 0a 23 20 73 65 63 6f 6e 64  using a.# second
32d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68   connection with
32e0: 20 22 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56   "BEGIN EXCLUSIV
32f0: 45 22 2e 20 4d 61 6b 65 20 73 75 72 65 20 6e 6f  E". Make sure no
3300: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
3310: 0a 23 20 6f 70 65 6e 20 61 66 74 65 72 20 74 68  .# open after th
3320: 65 20 22 64 61 74 61 62 61 73 65 20 69 73 20 6c  e "database is l
3330: 6f 63 6b 65 64 22 20 65 78 63 65 70 74 69 6f 6e  ocked" exception
3340: 20 69 73 20 74 68 72 6f 77 6e 2e 0a 23 0a 64 6f   is thrown..#.do
3350: 5f 74 65 73 74 20 74 63 6c 2d 31 30 2e 32 30 20  _test tcl-10.20 
3360: 7b 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20  {.  db2 eval {. 
3370: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 42     COMMIT;.    B
3380: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 3b 0a  EGIN EXCLUSIVE;.
3390: 20 20 7d 0a 20 20 73 65 74 20 72 63 20 5b 63 61    }.  set rc [ca
33a0: 74 63 68 20 7b 0a 20 20 20 20 64 62 20 74 72 61  tch {.    db tra
33b0: 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20 20  nsaction {.     
33c0: 20 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54   db eval {INSERT
33d0: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
33e0: 27 66 69 76 65 27 29 7d 0a 20 20 20 20 7d 0a 20  'five')}.    }. 
33f0: 20 7d 20 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24   } msg].  list $
3400: 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61  rc $msg.} {1 {da
3410: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
3420: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31  }}.do_test tcl-1
3430: 30 2e 32 31 20 7b 0a 20 20 64 62 32 20 63 6c 6f  0.21 {.  db2 clo
3440: 73 65 0a 20 20 64 62 20 65 76 61 6c 20 7b 42 45  se.  db eval {BE
3450: 47 49 4e 20 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20  GIN ; COMMIT}.} 
3460: 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31  {}.do_test tcl-1
3470: 30 2e 32 32 20 7b 0a 20 20 73 71 6c 69 74 65 34  0.22 {.  sqlite4
3480: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 64   db2 test.db.  d
3490: 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 78  b transaction ex
34a0: 63 6c 75 73 69 76 65 20 7b 0a 20 20 20 20 63 61  clusive {.    ca
34b0: 74 63 68 20 7b 20 64 62 32 20 65 76 61 6c 20 7b  tch { db2 eval {
34c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
34d0: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 7d 20 6d  lite_master} } m
34e0: 73 67 0a 20 20 20 20 73 65 74 20 6d 73 67 20 22  sg.    set msg "
34f0: 64 62 32 3a 20 24 6d 73 67 22 0a 20 20 7d 0a 20  db2: $msg".  }. 
3500: 20 73 65 74 20 6d 73 67 0a 7d 20 7b 64 62 32 3a   set msg.} {db2:
3510: 20 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63   database is loc
3520: 6b 65 64 7d 0a 64 62 32 20 63 6c 6f 73 65 0a 0a  ked}.db2 close..
3530: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 31 2e 31  do_test tcl-11.1
3540: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 49 4e   {.  db eval {IN
3550: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
3560: 55 45 53 28 36 29 7d 0a 20 20 64 62 20 65 78 69  UES(6)}.  db exi
3570: 73 74 73 20 7b 53 45 4c 45 43 54 20 78 2c 78 2a  sts {SELECT x,x*
3580: 32 2c 78 2b 78 20 46 52 4f 4d 20 74 34 20 57 48  2,x+x FROM t4 WH
3590: 45 52 45 20 78 3d 3d 36 7d 0a 7d 20 7b 31 7d 0a  ERE x==6}.} {1}.
35a0: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 31 2e 32  do_test tcl-11.2
35b0: 20 7b 0a 20 20 64 62 20 65 78 69 73 74 73 20 7b   {.  db exists {
35c0: 53 45 4c 45 43 54 20 30 20 46 52 4f 4d 20 74 34  SELECT 0 FROM t4
35d0: 20 57 48 45 52 45 20 78 3d 3d 36 7d 0a 7d 20 7b   WHERE x==6}.} {
35e0: 31 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31  1}.do_test tcl-1
35f0: 31 2e 33 20 7b 0a 20 20 64 62 20 65 78 69 73 74  1.3 {.  db exist
3600: 73 20 7b 53 45 4c 45 43 54 20 31 20 46 52 4f 4d  s {SELECT 1 FROM
3610: 20 74 34 20 57 48 45 52 45 20 78 3d 3d 38 7d 0a   t4 WHERE x==8}.
3620: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 74 63  } {0}.do_test tc
3630: 6c 2d 31 31 2e 33 2e 31 20 7b 0a 20 20 74 63 6c  l-11.3.1 {.  tcl
3640: 5f 6f 62 6a 70 72 6f 63 20 64 62 20 65 78 69 73  _objproc db exis
3650: 74 73 20 7b 53 45 4c 45 43 54 20 31 20 46 52 4f  ts {SELECT 1 FRO
3660: 4d 20 74 34 20 57 48 45 52 45 20 78 3d 3d 38 7d  M t4 WHERE x==8}
3670: 0a 7d 20 7b 30 7d 0a 0a 64 6f 5f 74 65 73 74 20  .} {0}..do_test 
3680: 74 63 6c 2d 31 32 2e 31 20 7b 0a 20 20 75 6e 73  tcl-12.1 {.  uns
3690: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 61  et -nocomplain a
36a0: 20 62 20 63 20 76 65 72 73 69 6f 6e 0a 20 20 73   b c version.  s
36b0: 65 74 20 76 65 72 73 69 6f 6e 20 5b 64 62 20 76  et version [db v
36c0: 65 72 73 69 6f 6e 5d 0a 20 20 73 63 61 6e 20 24  ersion].  scan $
36d0: 76 65 72 73 69 6f 6e 20 22 25 64 2e 25 64 2e 25  version "%d.%d.%
36e0: 64 22 20 61 20 62 20 63 0a 20 20 65 78 70 72 20  d" a b c.  expr 
36f0: 24 61 2a 31 30 30 30 30 30 30 20 2b 20 24 62 2a  $a*1000000 + $b*
3700: 31 30 30 30 20 2b 20 24 63 0a 7d 20 5b 73 71 6c  1000 + $c.} [sql
3710: 69 74 65 34 5f 6c 69 62 76 65 72 73 69 6f 6e 5f  ite4_libversion_
3720: 6e 75 6d 62 65 72 5d 0a 0a 0a 23 20 43 68 65 63  number]...# Chec
3730: 6b 20 74 6f 20 73 65 65 20 74 68 61 74 20 77 68  k to see that wh
3740: 65 6e 20 62 69 6e 64 69 6e 67 73 20 6f 66 20 74  en bindings of t
3750: 68 65 20 66 6f 72 6d 20 40 61 61 61 20 61 72 65  he form @aaa are
3760: 20 75 73 65 64 20 69 6e 73 74 65 61 64 0a 23 20   used instead.# 
3770: 6f 66 20 24 61 61 61 2c 20 74 68 61 74 20 6f 62  of $aaa, that ob
3780: 6a 65 63 74 73 20 61 72 65 20 74 72 65 61 74 65  jects are treate
3790: 64 20 61 73 20 62 79 74 65 61 72 72 61 79 20 61  d as bytearray a
37a0: 6e 64 20 61 72 65 20 69 6e 73 65 72 74 65 64 0a  nd are inserted.
37b0: 23 20 61 73 20 42 4c 4f 42 73 2e 0a 23 0a 69 66  # as BLOBs..#.if
37c0: 63 61 70 61 62 6c 65 20 74 63 6c 76 61 72 20 7b  capable tclvar {
37d0: 0a 20 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31  .  do_test tcl-1
37e0: 33 2e 31 20 7b 0a 20 20 20 20 64 62 20 65 76 61  3.1 {.    db eva
37f0: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
3800: 74 35 28 78 20 42 4c 4f 42 29 7d 0a 20 20 20 20  t5(x BLOB)}.    
3810: 73 65 74 20 78 20 61 62 63 31 32 33 0a 20 20 20  set x abc123.   
3820: 20 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54   db eval {INSERT
3830: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
3840: 24 78 29 7d 0a 20 20 20 20 64 62 20 65 76 61 6c  $x)}.    db eval
3850: 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28   {SELECT typeof(
3860: 78 29 20 46 52 4f 4d 20 74 35 7d 0a 20 20 7d 20  x) FROM t5}.  } 
3870: 7b 74 65 78 74 7d 0a 20 20 64 6f 5f 74 65 73 74  {text}.  do_test
3880: 20 74 63 6c 2d 31 33 2e 32 20 7b 0a 20 20 20 20   tcl-13.2 {.    
3890: 62 69 6e 61 72 79 20 73 63 61 6e 20 24 78 20 48  binary scan $x H
38a0: 20 6e 6f 74 55 73 65 64 0a 20 20 20 20 64 62 20   notUsed.    db 
38b0: 65 76 61 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c  eval {.      DEL
38c0: 45 54 45 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20  ETE FROM t5;.   
38d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
38e0: 35 20 56 41 4c 55 45 53 28 24 78 29 3b 0a 20 20  5 VALUES($x);.  
38f0: 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f      SELECT typeo
3900: 66 28 78 29 20 46 52 4f 4d 20 74 35 3b 0a 20 20  f(x) FROM t5;.  
3910: 20 20 7d 0a 20 20 7d 20 7b 74 65 78 74 7d 0a 20    }.  } {text}. 
3920: 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 33 2e   do_test tcl-13.
3930: 33 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  3 {.    db eval 
3940: 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46  {.      DELETE F
3950: 52 4f 4d 20 74 35 3b 0a 20 20 20 20 20 20 49 4e  ROM t5;.      IN
3960: 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c  SERT INTO t5 VAL
3970: 55 45 53 28 40 78 29 3b 0a 20 20 20 20 20 20 53  UES(@x);.      S
3980: 45 4c 45 43 54 20 74 79 70 65 6f 66 28 78 29 20  ELECT typeof(x) 
3990: 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 7d 0a 20  FROM t5;.    }. 
39a0: 20 7d 20 7b 62 6c 6f 62 7d 0a 20 20 64 6f 5f 74   } {blob}.  do_t
39b0: 65 73 74 20 74 63 6c 2d 31 33 2e 34 20 7b 0a 20  est tcl-13.4 {. 
39c0: 20 20 20 73 65 74 20 79 20 31 32 33 34 0a 20 20     set y 1234.  
39d0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
39e0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 35    DELETE FROM t5
39f0: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
3a00: 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 40 79  NTO t5 VALUES(@y
3a10: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
3a20: 68 65 78 28 78 29 2c 20 74 79 70 65 6f 66 28 78  hex(x), typeof(x
3a30: 29 20 46 52 4f 4d 20 74 35 0a 20 20 20 20 7d 0a  ) FROM t5.    }.
3a40: 20 20 7d 20 7b 33 31 33 32 33 33 33 34 20 62 6c    } {31323334 bl
3a50: 6f 62 7d 0a 7d 0a 0a 64 62 20 66 75 6e 63 20 78  ob}.}..db func x
3a60: 43 61 6c 6c 20 78 43 61 6c 6c 0a 70 72 6f 63 20  Call xCall.proc 
3a70: 78 43 61 6c 6c 20 7b 7d 20 7b 20 72 65 74 75 72  xCall {} { retur
3a80: 6e 20 22 76 61 6c 75 65 22 20 7d 0a 64 6f 5f 65  n "value" }.do_e
3a90: 78 65 63 73 71 6c 5f 74 65 73 74 20 74 63 6c 2d  xecsql_test tcl-
3aa0: 31 34 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  14.1 {.  CREATE 
3ab0: 54 41 42 4c 45 20 74 36 28 78 29 3b 0a 20 20 49  TABLE t6(x);.  I
3ac0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41  NSERT INTO t6 VA
3ad0: 4c 55 45 53 28 31 29 3b 0a 7d 0a 64 6f 5f 74 65  LUES(1);.}.do_te
3ae0: 73 74 20 74 63 6c 2d 31 34 2e 32 20 7b 0a 20 20  st tcl-14.2 {.  
3af0: 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54 20 78  db one {SELECT x
3b00: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 78   FROM t6 WHERE x
3b10: 43 61 6c 6c 28 29 21 3d 27 76 61 6c 75 65 27 7d  Call()!='value'}
3b20: 0a 7d 20 7b 7d 0a 0a 0a 0a 66 69 6e 69 73 68 5f  .} {}....finish_
3b30: 74 65 73 74 0a                                   test.