/ Hex Artifact Content
Login

Artifact dca8aa30d84175e7d8c8fc43d3ffa11fa56e23fbdac2679d03833a0f326edf34:


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: 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 7d 0a  catch {sqlite3}.
02e0: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
02f0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0300: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0310: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0320: 20 43 68 65 63 6b 20 74 68 65 20 65 72 72 6f 72   Check the error
0330: 20 6d 65 73 73 61 67 65 73 20 67 65 6e 65 72 61   messages genera
0340: 74 65 64 20 62 79 20 74 63 6c 73 71 6c 69 74 65  ted by tclsqlite
0350: 0a 23 0a 73 65 74 20 72 20 22 73 71 6c 69 74 65  .#.set r "sqlite
0360: 5f 6f 72 69 67 20 48 41 4e 44 4c 45 20 3f 46 49  _orig HANDLE ?FI
0370: 4c 45 4e 41 4d 45 3f 20 3f 2d 76 66 73 20 56 46  LENAME? ?-vfs VF
0380: 53 4e 41 4d 45 3f 20 3f 2d 72 65 61 64 6f 6e 6c  SNAME? ?-readonl
0390: 79 20 42 4f 4f 4c 45 41 4e 3f 20 3f 2d 63 72 65  y BOOLEAN? ?-cre
03a0: 61 74 65 20 42 4f 4f 4c 45 41 4e 3f 20 3f 2d 6e  ate BOOLEAN? ?-n
03b0: 6f 6d 75 74 65 78 20 42 4f 4f 4c 45 41 4e 3f 20  omutex BOOLEAN? 
03c0: 3f 2d 66 75 6c 6c 6d 75 74 65 78 20 42 4f 4f 4c  ?-fullmutex BOOL
03d0: 45 41 4e 3f 20 3f 2d 75 72 69 20 42 4f 4f 4c 45  EAN? ?-uri BOOLE
03e0: 41 4e 3f 22 0a 69 66 20 7b 5b 73 71 6c 69 74 65  AN?".if {[sqlite
03f0: 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 7d 20 7b  3 -has-codec]} {
0400: 0a 20 20 61 70 70 65 6e 64 20 72 20 22 20 3f 2d  .  append r " ?-
0410: 6b 65 79 20 43 4f 44 45 43 4b 45 59 3f 22 0a 7d  key CODECKEY?".}
0420: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31  .do_test tcl-1.1
0430: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0440: 68 20 7b 73 71 6c 69 74 65 33 20 2d 62 6f 67 75  h {sqlite3 -bogu
0450: 73 7d 20 6d 73 67 5d 0a 20 20 72 65 67 73 75 62  s} msg].  regsub
0460: 20 7b 72 65 61 6c 6c 79 5f 73 71 6c 69 74 65 33   {really_sqlite3
0470: 7d 20 24 6d 73 67 20 7b 73 71 6c 69 74 65 33 7d  } $msg {sqlite3}
0480: 20 6d 73 67 0a 20 20 6c 61 70 70 65 6e 64 20 76   msg.  lappend v
0490: 20 24 6d 73 67 0a 7d 20 5b 6c 69 73 74 20 31 20   $msg.} [list 1 
04a0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
04b0: 68 6f 75 6c 64 20 62 65 20 5c 22 24 72 5c 22 22  hould be \"$r\""
04c0: 5d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e  ].do_test tcl-1.
04d0: 31 2e 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  1.1 {.  set v [c
04e0: 61 74 63 68 20 7b 73 71 6c 69 74 65 33 7d 20 6d  atch {sqlite3} m
04f0: 73 67 5d 0a 20 20 72 65 67 73 75 62 20 7b 72 65  sg].  regsub {re
0500: 61 6c 6c 79 5f 73 71 6c 69 74 65 33 7d 20 24 6d  ally_sqlite3} $m
0510: 73 67 20 7b 73 71 6c 69 74 65 33 7d 20 6d 73 67  sg {sqlite3} msg
0520: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
0530: 67 0a 7d 20 5b 6c 69 73 74 20 31 20 22 77 72 6f  g.} [list 1 "wro
0540: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
0550: 64 20 62 65 20 5c 22 24 72 5c 22 22 5d 0a 64 6f  d be \"$r\""].do
0560: 5f 74 65 73 74 20 74 63 6c 2d 31 2e 32 20 7b 0a  _test tcl-1.2 {.
0570: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
0580: 64 62 20 62 6f 67 75 73 7d 20 6d 73 67 5d 0a 20  db bogus} msg]. 
0590: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
05a0: 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74 69 6f 6e  } {1 {bad option
05b0: 20 22 62 6f 67 75 73 22 3a 20 6d 75 73 74 20 62   "bogus": must b
05c0: 65 20 61 75 74 68 6f 72 69 7a 65 72 2c 20 62 61  e authorizer, ba
05d0: 63 6b 75 70 2c 20 62 75 73 79 2c 20 63 61 63 68  ckup, busy, cach
05e0: 65 2c 20 63 68 61 6e 67 65 73 2c 20 63 6c 6f 73  e, changes, clos
05f0: 65 2c 20 63 6f 6c 6c 61 74 65 2c 20 63 6f 6c 6c  e, collate, coll
0600: 61 74 69 6f 6e 5f 6e 65 65 64 65 64 2c 20 63 6f  ation_needed, co
0610: 6d 6d 69 74 5f 68 6f 6f 6b 2c 20 63 6f 6d 70 6c  mmit_hook, compl
0620: 65 74 65 2c 20 63 6f 70 79 2c 20 64 65 73 65 72  ete, copy, deser
0630: 69 61 6c 69 7a 65 2c 20 65 6e 61 62 6c 65 5f 6c  ialize, enable_l
0640: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 2c 20 65  oad_extension, e
0650: 72 72 6f 72 63 6f 64 65 2c 20 65 76 61 6c 2c 20  rrorcode, eval, 
0660: 65 78 69 73 74 73 2c 20 66 75 6e 63 74 69 6f 6e  exists, function
0670: 2c 20 69 6e 63 72 62 6c 6f 62 2c 20 69 6e 74 65  , incrblob, inte
0680: 72 72 75 70 74 2c 20 6c 61 73 74 5f 69 6e 73 65  rrupt, last_inse
0690: 72 74 5f 72 6f 77 69 64 2c 20 6e 75 6c 6c 76 61  rt_rowid, nullva
06a0: 6c 75 65 2c 20 6f 6e 65 63 6f 6c 75 6d 6e 2c 20  lue, onecolumn, 
06b0: 70 72 65 75 70 64 61 74 65 2c 20 70 72 6f 66 69  preupdate, profi
06c0: 6c 65 2c 20 70 72 6f 67 72 65 73 73 2c 20 72 65  le, progress, re
06d0: 6b 65 79 2c 20 72 65 73 74 6f 72 65 2c 20 72 6f  key, restore, ro
06e0: 6c 6c 62 61 63 6b 5f 68 6f 6f 6b 2c 20 73 65 72  llback_hook, ser
06f0: 69 61 6c 69 7a 65 2c 20 73 74 61 74 75 73 2c 20  ialize, status, 
0700: 74 69 6d 65 6f 75 74 2c 20 74 6f 74 61 6c 5f 63  timeout, total_c
0710: 68 61 6e 67 65 73 2c 20 74 72 61 63 65 2c 20 74  hanges, trace, t
0720: 72 61 63 65 5f 76 32 2c 20 74 72 61 6e 73 61 63  race_v2, transac
0730: 74 69 6f 6e 2c 20 75 6e 6c 6f 63 6b 5f 6e 6f 74  tion, unlock_not
0740: 69 66 79 2c 20 75 70 64 61 74 65 5f 68 6f 6f 6b  ify, update_hook
0750: 2c 20 76 65 72 73 69 6f 6e 2c 20 6f 72 20 77 61  , version, or wa
0760: 6c 5f 68 6f 6f 6b 7d 7d 0a 64 6f 5f 74 65 73 74  l_hook}}.do_test
0770: 20 74 63 6c 2d 31 2e 32 2e 31 20 7b 0a 20 20 73   tcl-1.2.1 {.  s
0780: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 64 62 20  et v [catch {db 
0790: 63 61 63 68 65 20 62 6f 67 75 73 7d 20 6d 73 67  cache bogus} msg
07a0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
07b0: 73 67 0a 7d 20 7b 31 20 7b 62 61 64 20 6f 70 74  sg.} {1 {bad opt
07c0: 69 6f 6e 20 22 62 6f 67 75 73 22 3a 20 6d 75 73  ion "bogus": mus
07d0: 74 20 62 65 20 66 6c 75 73 68 20 6f 72 20 73 69  t be flush or si
07e0: 7a 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c  ze}}.do_test tcl
07f0: 2d 31 2e 32 2e 32 20 7b 0a 20 20 73 65 74 20 76  -1.2.2 {.  set v
0800: 20 5b 63 61 74 63 68 20 7b 64 62 20 63 61 63 68   [catch {db cach
0810: 65 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  e} msg].  lappen
0820: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77  d v $msg.} {1 {w
0830: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
0840: 75 6c 64 20 62 65 20 22 64 62 20 63 61 63 68 65  uld be "db cache
0850: 20 6f 70 74 69 6f 6e 20 3f 61 72 67 3f 22 7d 7d   option ?arg?"}}
0860: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 33  .do_test tcl-1.3
0870: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52   {.  execsql {CR
0880: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
0890: 69 6e 74 2c 20 62 20 69 6e 74 29 7d 0a 20 20 65  int, b int)}.  e
08a0: 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  xecsql {INSERT I
08b0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 30  NTO t1 VALUES(10
08c0: 2c 32 30 29 7d 0a 20 20 73 65 74 20 76 20 5b 63  ,20)}.  set v [c
08d0: 61 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76  atch {.    db ev
08e0: 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  al {SELECT * FRO
08f0: 4d 20 74 31 7d 20 64 61 74 61 20 7b 0a 20 20 20  M t1} data {.   
0900: 20 20 20 65 72 72 6f 72 20 22 54 68 65 20 65 72     error "The er
0910: 72 6f 72 20 6d 65 73 73 61 67 65 22 0a 20 20 20  ror message".   
0920: 20 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61   }.  } msg].  la
0930: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0940: 31 20 7b 54 68 65 20 65 72 72 6f 72 20 6d 65 73  1 {The error mes
0950: 73 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  sage}}.do_test t
0960: 63 6c 2d 31 2e 34 20 7b 0a 20 20 73 65 74 20 76  cl-1.4 {.  set v
0970: 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 64 62   [catch {.    db
0980: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20   eval {SELECT * 
0990: 46 52 4f 4d 20 74 32 7d 20 64 61 74 61 20 7b 0a  FROM t2} data {.
09a0: 20 20 20 20 20 20 65 72 72 6f 72 20 22 54 68 65        error "The
09b0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 22 0a   error message".
09c0: 20 20 20 20 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20      }.  } msg]. 
09d0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
09e0: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61  } {1 {no such ta
09f0: 62 6c 65 3a 20 74 32 7d 7d 0a 64 6f 5f 74 65 73  ble: t2}}.do_tes
0a00: 74 20 74 63 6c 2d 31 2e 35 20 7b 0a 20 20 73 65  t tcl-1.5 {.  se
0a10: 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  t v [catch {.   
0a20: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
0a30: 20 2a 20 46 52 4f 4d 20 74 31 7d 20 64 61 74 61   * FROM t1} data
0a40: 20 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 0a 20   {.      break. 
0a50: 20 20 20 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20     }.  } msg].  
0a60: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0a70: 20 7b 30 20 7b 7d 7d 0a 63 61 74 63 68 20 7b 65   {0 {}}.catch {e
0a80: 78 70 72 20 78 2a 7d 20 6d 73 67 0a 64 6f 5f 74  xpr x*} msg.do_t
0a90: 65 73 74 20 74 63 6c 2d 31 2e 36 20 7b 0a 20 20  est tcl-1.6 {.  
0aa0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a 20  set v [catch {. 
0ab0: 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45     db eval {SELE
0ac0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d 20 64 61  CT * FROM t1} da
0ad0: 74 61 20 7b 0a 20 20 20 20 20 20 65 78 70 72 20  ta {.      expr 
0ae0: 78 2a 0a 20 20 20 20 7d 0a 20 20 7d 20 6d 73 67  x*.    }.  } msg
0af0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
0b00: 73 67 0a 7d 20 5b 6c 69 73 74 20 31 20 24 6d 73  sg.} [list 1 $ms
0b10: 67 5d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31  g].do_test tcl-1
0b20: 2e 37 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .7 {.  set v [ca
0b30: 74 63 68 20 7b 64 62 7d 20 6d 73 67 5d 0a 20 20  tch {db} msg].  
0b40: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0b50: 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67   {1 {wrong # arg
0b60: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62  s: should be "db
0b70: 20 53 55 42 43 4f 4d 4d 41 4e 44 20 2e 2e 2e 22   SUBCOMMAND ..."
0b80: 7d 7d 0a 69 66 20 7b 5b 63 61 74 63 68 20 7b 64  }}.if {[catch {d
0b90: 62 20 61 75 74 68 20 7b 7d 7d 5d 3d 3d 30 7d 20  b auth {}}]==0} 
0ba0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d  {.  do_test tcl-
0bb0: 31 2e 38 20 7b 0a 20 20 20 20 73 65 74 20 76 20  1.8 {.    set v 
0bc0: 5b 63 61 74 63 68 20 7b 64 62 20 61 75 74 68 6f  [catch {db autho
0bd0: 72 69 7a 65 72 20 31 20 32 20 33 7d 20 6d 73 67  rizer 1 2 3} msg
0be0: 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 76 20  ].    lappend v 
0bf0: 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 77 72 6f  $msg.  } {1 {wro
0c00: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
0c10: 64 20 62 65 20 22 64 62 20 61 75 74 68 6f 72 69  d be "db authori
0c20: 7a 65 72 20 3f 43 41 4c 4c 42 41 43 4b 3f 22 7d  zer ?CALLBACK?"}
0c30: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d  }.}.do_test tcl-
0c40: 31 2e 39 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  1.9 {.  set v [c
0c50: 61 74 63 68 20 7b 64 62 20 62 75 73 79 20 31 20  atch {db busy 1 
0c60: 32 20 33 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  2 3} msg].  lapp
0c70: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20  end v $msg.} {1 
0c80: 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  {wrong # args: s
0c90: 68 6f 75 6c 64 20 62 65 20 22 64 62 20 62 75 73  hould be "db bus
0ca0: 79 20 43 41 4c 4c 42 41 43 4b 22 7d 7d 0a 64 6f  y CALLBACK"}}.do
0cb0: 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31 30 20 7b  _test tcl-1.10 {
0cc0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0cd0: 7b 64 62 20 70 72 6f 67 72 65 73 73 20 31 7d 20  {db progress 1} 
0ce0: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
0cf0: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e   $msg.} {1 {wron
0d00: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
0d10: 20 62 65 20 22 64 62 20 70 72 6f 67 72 65 73 73   be "db progress
0d20: 20 4e 20 43 41 4c 4c 42 41 43 4b 22 7d 7d 0a 64   N CALLBACK"}}.d
0d30: 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31 31 20  o_test tcl-1.11 
0d40: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
0d50: 20 7b 64 62 20 63 68 61 6e 67 65 73 20 78 79 7a   {db changes xyz
0d60: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0d70: 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72   v $msg.} {1 {wr
0d80: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
0d90: 6c 64 20 62 65 20 22 64 62 20 63 68 61 6e 67 65  ld be "db change
0da0: 73 20 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63  s "}}.do_test tc
0db0: 6c 2d 31 2e 31 32 20 7b 0a 20 20 73 65 74 20 76  l-1.12 {.  set v
0dc0: 20 5b 63 61 74 63 68 20 7b 64 62 20 63 6f 6d 6d   [catch {db comm
0dd0: 69 74 5f 68 6f 6f 6b 20 61 20 62 20 63 7d 20 6d  it_hook a b c} m
0de0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
0df0: 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67  $msg.} {1 {wrong
0e00: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
0e10: 62 65 20 22 64 62 20 63 6f 6d 6d 69 74 5f 68 6f  be "db commit_ho
0e20: 6f 6b 20 3f 43 41 4c 4c 42 41 43 4b 3f 22 7d 7d  ok ?CALLBACK?"}}
0e30: 0a 69 66 63 61 70 61 62 6c 65 20 7b 63 6f 6d 70  .ifcapable {comp
0e40: 6c 65 74 65 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  lete} {.  do_tes
0e50: 74 20 74 63 6c 2d 31 2e 31 33 20 7b 0a 20 20 20  t tcl-1.13 {.   
0e60: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 64   set v [catch {d
0e70: 62 20 63 6f 6d 70 6c 65 74 65 7d 20 6d 73 67 5d  b complete} msg]
0e80: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 76 20 24  .    lappend v $
0e90: 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 77 72 6f 6e  msg.  } {1 {wron
0ea0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
0eb0: 20 62 65 20 22 64 62 20 63 6f 6d 70 6c 65 74 65   be "db complete
0ec0: 20 53 51 4c 22 7d 7d 0a 7d 0a 64 6f 5f 74 65 73   SQL"}}.}.do_tes
0ed0: 74 20 74 63 6c 2d 31 2e 31 34 20 7b 0a 20 20 73  t tcl-1.14 {.  s
0ee0: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 64 62 20  et v [catch {db 
0ef0: 65 76 61 6c 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  eval} msg].  lap
0f00: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
0f10: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
0f20: 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 65 76  should be "db ev
0f30: 61 6c 20 3f 4f 50 54 49 4f 4e 53 3f 20 53 51 4c  al ?OPTIONS? SQL
0f40: 20 3f 41 52 52 41 59 2d 4e 41 4d 45 3f 20 3f 53   ?ARRAY-NAME? ?S
0f50: 43 52 49 50 54 3f 22 7d 7d 0a 64 6f 5f 74 65 73  CRIPT?"}}.do_tes
0f60: 74 20 74 63 6c 2d 31 2e 31 35 20 7b 0a 20 20 73  t tcl-1.15 {.  s
0f70: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 64 62 20  et v [catch {db 
0f80: 66 75 6e 63 74 69 6f 6e 7d 20 6d 73 67 5d 0a 20  function} msg]. 
0f90: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0fa0: 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72  } {1 {wrong # ar
0fb0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 64  gs: should be "d
0fc0: 62 20 66 75 6e 63 74 69 6f 6e 20 4e 41 4d 45 20  b function NAME 
0fd0: 3f 53 57 49 54 43 48 45 53 3f 20 53 43 52 49 50  ?SWITCHES? SCRIP
0fe0: 54 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c  T"}}.do_test tcl
0ff0: 2d 31 2e 31 36 20 7b 0a 20 20 73 65 74 20 76 20  -1.16 {.  set v 
1000: 5b 63 61 74 63 68 20 7b 64 62 20 6c 61 73 74 5f  [catch {db last_
1010: 69 6e 73 65 72 74 5f 72 6f 77 69 64 20 78 79 7a  insert_rowid xyz
1020: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
1030: 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72   v $msg.} {1 {wr
1040: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1050: 6c 64 20 62 65 20 22 64 62 20 6c 61 73 74 5f 69  ld be "db last_i
1060: 6e 73 65 72 74 5f 72 6f 77 69 64 20 22 7d 7d 0a  nsert_rowid "}}.
1070: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31 37  do_test tcl-1.17
1080: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
1090: 68 20 7b 64 62 20 72 65 6b 65 79 7d 20 6d 73 67  h {db rekey} msg
10a0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
10b0: 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e 67 20 23  sg.} {1 {wrong #
10c0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
10d0: 20 22 64 62 20 72 65 6b 65 79 20 4b 45 59 22 7d   "db rekey KEY"}
10e0: 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e  }.do_test tcl-1.
10f0: 31 38 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  18 {.  set v [ca
1100: 74 63 68 20 7b 64 62 20 74 69 6d 65 6f 75 74 7d  tch {db timeout}
1110: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
1120: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72 6f  v $msg.} {1 {wro
1130: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
1140: 64 20 62 65 20 22 64 62 20 74 69 6d 65 6f 75 74  d be "db timeout
1150: 20 4d 49 4c 4c 49 53 45 43 4f 4e 44 53 22 7d 7d   MILLISECONDS"}}
1160: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 31  .do_test tcl-1.1
1170: 39 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  9 {.  set v [cat
1180: 63 68 20 7b 64 62 20 63 6f 6c 6c 61 74 65 7d 20  ch {db collate} 
1190: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
11a0: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77 72 6f 6e   $msg.} {1 {wron
11b0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
11c0: 20 62 65 20 22 64 62 20 63 6f 6c 6c 61 74 65 20   be "db collate 
11d0: 4e 41 4d 45 20 53 43 52 49 50 54 22 7d 7d 0a 64  NAME SCRIPT"}}.d
11e0: 6f 5f 74 65 73 74 20 74 63 6c 2d 31 2e 32 30 20  o_test tcl-1.20 
11f0: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
1200: 20 7b 64 62 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6e   {db collation_n
1210: 65 65 64 65 64 7d 20 6d 73 67 5d 0a 20 20 6c 61  eeded} msg].  la
1220: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
1230: 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  1 {wrong # args:
1240: 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 63   should be "db c
1250: 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 20  ollation_needed 
1260: 53 43 52 49 50 54 22 7d 7d 0a 64 6f 5f 74 65 73  SCRIPT"}}.do_tes
1270: 74 20 74 63 6c 2d 31 2e 32 31 20 7b 0a 20 20 73  t tcl-1.21 {.  s
1280: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 64 62 20  et v [catch {db 
1290: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 20 78 79  total_changes xy
12a0: 7a 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  z} msg].  lappen
12b0: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 77  d v $msg.} {1 {w
12c0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
12d0: 75 6c 64 20 62 65 20 22 64 62 20 74 6f 74 61 6c  uld be "db total
12e0: 5f 63 68 61 6e 67 65 73 20 22 7d 7d 0a 64 6f 5f  _changes "}}.do_
12f0: 74 65 73 74 20 74 63 6c 2d 31 2e 32 32 20 7b 0a  test tcl-1.22 {.
1300: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
1310: 64 62 20 63 6f 70 79 7d 20 6d 73 67 5d 0a 20 20  db copy} msg].  
1320: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
1330: 20 7b 31 20 7b 77 72 6f 6e 67 20 23 20 61 72 67   {1 {wrong # arg
1340: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 22 64 62  s: should be "db
1350: 20 63 6f 70 79 20 43 4f 4e 46 4c 49 43 54 2d 41   copy CONFLICT-A
1360: 4c 47 4f 52 49 54 48 4d 20 54 41 42 4c 45 20 46  LGORITHM TABLE F
1370: 49 4c 45 4e 41 4d 45 20 3f 53 45 50 41 52 41 54  ILENAME ?SEPARAT
1380: 4f 52 3f 20 3f 4e 55 4c 4c 49 4e 44 49 43 41 54  OR? ?NULLINDICAT
1390: 4f 52 3f 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  OR?"}}.do_test t
13a0: 63 6c 2d 31 2e 32 33 20 7b 0a 20 20 73 65 74 20  cl-1.23 {.  set 
13b0: 76 20 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65  v [catch {sqlite
13c0: 33 20 64 62 32 20 74 65 73 74 2e 64 62 20 2d 76  3 db2 test.db -v
13d0: 66 73 20 6e 6f 73 75 63 68 76 66 73 7d 20 6d 73  fs nosuchvfs} ms
13e0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
13f0: 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  msg.} {1 {no suc
1400: 68 20 76 66 73 3a 20 6e 6f 73 75 63 68 76 66 73  h vfs: nosuchvfs
1410: 7d 7d 0a 0a 63 61 74 63 68 20 7b 75 6e 73 65 74  }}..catch {unset
1420: 20 3a 3a 72 65 73 75 6c 74 7d 0a 64 6f 5f 74 65   ::result}.do_te
1430: 73 74 20 74 63 6c 2d 32 2e 31 20 7b 0a 20 20 65  st tcl-2.1 {.  e
1440: 78 65 63 73 71 6c 20 22 43 52 45 41 54 45 20 54  xecsql "CREATE T
1450: 41 42 4c 45 20 74 5c 75 30 31 32 33 78 28 61 20  ABLE t\u0123x(a 
1460: 69 6e 74 2c 20 62 5c 75 31 32 33 35 20 66 6c 6f  int, b\u1235 flo
1470: 61 74 29 22 0a 7d 20 7b 7d 0a 69 66 63 61 70 61  at)".} {}.ifcapa
1480: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
1490: 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74  as {.  do_test t
14a0: 63 6c 2d 32 2e 32 20 7b 0a 20 20 20 20 65 78 65  cl-2.2 {.    exe
14b0: 63 73 71 6c 20 22 50 52 41 47 4d 41 20 74 61 62  csql "PRAGMA tab
14c0: 6c 65 5f 69 6e 66 6f 28 74 5c 75 30 31 32 33 78  le_info(t\u0123x
14d0: 29 22 0a 20 20 7d 20 22 30 20 61 20 69 6e 74 20  )".  } "0 a int 
14e0: 30 20 7b 7d 20 30 20 31 20 62 5c 75 31 32 33 35  0 {} 0 1 b\u1235
14f0: 20 66 6c 6f 61 74 20 30 20 7b 7d 20 30 22 0a 7d   float 0 {} 0".}
1500: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 32 2e 33  .do_test tcl-2.3
1510: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 49 4e   {.  execsql "IN
1520: 53 45 52 54 20 49 4e 54 4f 20 74 5c 75 30 31 32  SERT INTO t\u012
1530: 33 78 20 56 41 4c 55 45 53 28 31 2c 32 2e 33 29  3x VALUES(1,2.3)
1540: 22 0a 20 20 64 62 20 65 76 61 6c 20 22 53 45 4c  ".  db eval "SEL
1550: 45 43 54 20 2a 20 46 52 4f 4d 20 74 5c 75 30 31  ECT * FROM t\u01
1560: 32 33 78 22 20 72 65 73 75 6c 74 20 62 72 65 61  23x" result brea
1570: 6b 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 2a  k.  set result(*
1580: 29 0a 7d 20 22 61 20 62 5c 75 31 32 33 35 22 0a  ).} "a b\u1235".
1590: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 6f 6e 65  ..# Test the one
15a0: 63 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 0a 23 0a  column method.#.
15b0: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 33 2e 31 20  do_test tcl-3.1 
15c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
15d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
15e0: 20 53 45 4c 45 43 54 20 61 2a 32 2c 20 62 2a 32   SELECT a*2, b*2
15f0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e   FROM t1;.    IN
1600: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
1610: 45 43 54 20 61 2a 32 2b 31 2c 20 62 2a 32 2b 31  ECT a*2+1, b*2+1
1620: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e   FROM t1;.    IN
1630: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
1640: 45 43 54 20 61 2a 32 2b 33 2c 20 62 2a 32 2b 33  ECT a*2+3, b*2+3
1650: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 20 20   FROM t1;.  }.  
1660: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 64  set rc [catch {d
1670: 62 20 6f 6e 65 63 6f 6c 75 6d 6e 20 7b 53 45 4c  b onecolumn {SEL
1680: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52  ECT * FROM t1 OR
1690: 44 45 52 20 42 59 20 61 7d 7d 20 6d 73 67 5d 0a  DER BY a}} msg].
16a0: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73    lappend rc $ms
16b0: 67 0a 7d 20 7b 30 20 31 30 7d 0a 64 6f 5f 74 65  g.} {0 10}.do_te
16c0: 73 74 20 74 63 6c 2d 33 2e 32 20 7b 0a 20 20 64  st tcl-3.2 {.  d
16d0: 62 20 6f 6e 65 63 6f 6c 75 6d 6e 20 7b 53 45 4c  b onecolumn {SEL
16e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
16f0: 45 52 45 20 61 3c 30 7d 0a 7d 20 7b 7d 0a 64 6f  ERE a<0}.} {}.do
1700: 5f 74 65 73 74 20 74 63 6c 2d 33 2e 33 20 7b 0a  _test tcl-3.3 {.
1710: 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20    set rc [catch 
1720: 7b 64 62 20 6f 6e 65 63 6f 6c 75 6d 6e 7d 20 65  {db onecolumn} e
1730: 72 72 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  rrmsg].  lappend
1740: 20 72 63 20 24 65 72 72 6d 73 67 0a 7d 20 7b 31   rc $errmsg.} {1
1750: 20 7b 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   {wrong # args: 
1760: 73 68 6f 75 6c 64 20 62 65 20 22 64 62 20 6f 6e  should be "db on
1770: 65 63 6f 6c 75 6d 6e 20 53 51 4c 22 7d 7d 0a 64  ecolumn SQL"}}.d
1780: 6f 5f 74 65 73 74 20 74 63 6c 2d 33 2e 34 20 7b  o_test tcl-3.4 {
1790: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
17a0: 20 7b 64 62 20 6f 6e 65 63 6f 6c 75 6d 6e 20 7b   {db onecolumn {
17b0: 53 45 4c 45 43 54 20 62 6f 67 75 73 7d 7d 20 65  SELECT bogus}} e
17c0: 72 72 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  rrmsg].  lappend
17d0: 20 72 63 20 24 65 72 72 6d 73 67 0a 7d 20 7b 31   rc $errmsg.} {1
17e0: 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 75 6d 6e   {no such column
17f0: 3a 20 62 6f 67 75 73 7d 7d 0a 69 66 63 61 70 61  : bogus}}.ifcapa
1800: 62 6c 65 20 7b 74 63 6c 76 61 72 7d 20 7b 0a 20  ble {tclvar} {. 
1810: 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 33 2e 35   do_test tcl-3.5
1820: 20 7b 0a 20 20 20 20 73 65 74 20 62 20 35 30 0a   {.    set b 50.
1830: 20 20 20 20 73 65 74 20 72 63 20 5b 63 61 74 63      set rc [catc
1840: 68 20 7b 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43  h {db one {SELEC
1850: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1860: 45 20 62 3e 24 62 7d 7d 20 6d 73 67 5d 0a 20 20  E b>$b}} msg].  
1870: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73    lappend rc $ms
1880: 67 0a 20 20 7d 20 7b 30 20 34 31 7d 0a 20 20 64  g.  } {0 41}.  d
1890: 6f 5f 74 65 73 74 20 74 63 6c 2d 33 2e 36 20 7b  o_test tcl-3.6 {
18a0: 0a 20 20 20 20 73 65 74 20 62 20 35 30 30 0a 20  .    set b 500. 
18b0: 20 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68     set rc [catch
18c0: 20 7b 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54   {db one {SELECT
18d0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
18e0: 20 62 3e 24 62 7d 7d 20 6d 73 67 5d 0a 20 20 20   b>$b}} msg].   
18f0: 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67   lappend rc $msg
1900: 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f  .  } {0 {}}.  do
1910: 5f 74 65 73 74 20 74 63 6c 2d 33 2e 37 20 7b 0a  _test tcl-3.7 {.
1920: 20 20 20 20 73 65 74 20 62 20 35 30 30 0a 20 20      set b 500.  
1930: 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20    set rc [catch 
1940: 7b 64 62 20 6f 6e 65 20 7b 0a 20 20 20 20 20 20  {db one {.      
1950: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1960: 41 4c 55 45 53 28 39 39 2c 35 31 30 29 3b 0a 20  ALUES(99,510);. 
1970: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
1980: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3e 24 62  OM t1 WHERE b>$b
1990: 0a 20 20 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 20  .    }} msg].   
19a0: 20 6c 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67   lappend rc $msg
19b0: 0a 20 20 7d 20 7b 30 20 39 39 7d 0a 7d 0a 69 66  .  } {0 99}.}.if
19c0: 63 61 70 61 62 6c 65 20 7b 21 74 63 6c 76 61 72  capable {!tclvar
19d0: 7d 20 7b 0a 20 20 20 65 78 65 63 73 71 6c 20 7b  } {.   execsql {
19e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
19f0: 41 4c 55 45 53 28 39 39 2c 35 31 30 29 7d 0a 7d  ALUES(99,510)}.}
1a00: 0a 0a 23 20 54 75 72 6e 20 74 68 65 20 62 75 73  ..# Turn the bus
1a10: 79 20 68 61 6e 64 6c 65 72 20 6f 6e 20 61 6e 64  y handler on and
1a20: 20 6f 66 66 0a 23 0a 64 6f 5f 74 65 73 74 20 74   off.#.do_test t
1a30: 63 6c 2d 34 2e 31 20 7b 0a 20 20 70 72 6f 63 20  cl-4.1 {.  proc 
1a40: 62 75 73 79 5f 63 61 6c 6c 62 61 63 6b 20 7b 63  busy_callback {c
1a50: 6e 74 7d 20 7b 0a 20 20 20 20 62 72 65 61 6b 0a  nt} {.    break.
1a60: 20 20 7d 0a 20 20 64 62 20 62 75 73 79 20 62 75    }.  db busy bu
1a70: 73 79 5f 63 61 6c 6c 62 61 63 6b 0a 20 20 64 62  sy_callback.  db
1a80: 20 62 75 73 79 0a 7d 20 7b 62 75 73 79 5f 63 61   busy.} {busy_ca
1a90: 6c 6c 62 61 63 6b 7d 0a 64 6f 5f 74 65 73 74 20  llback}.do_test 
1aa0: 74 63 6c 2d 34 2e 32 20 7b 0a 20 20 64 62 20 62  tcl-4.2 {.  db b
1ab0: 75 73 79 20 7b 7d 0a 20 20 64 62 20 62 75 73 79  usy {}.  db busy
1ac0: 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c 65  .} {}..ifcapable
1ad0: 20 7b 74 63 6c 76 61 72 7d 20 7b 0a 20 20 23 20   {tclvar} {.  # 
1ae0: 50 61 72 73 69 6e 67 20 6f 66 20 54 43 4c 20 76  Parsing of TCL v
1af0: 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 77 69  ariable names wi
1b00: 74 68 69 6e 20 53 51 4c 20 69 6e 74 6f 20 62 6f  thin SQL into bo
1b10: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 2e 0a  und parameters..
1b20: 20 20 23 0a 20 20 64 6f 5f 74 65 73 74 20 74 63    #.  do_test tc
1b30: 6c 2d 35 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  l-5.1 {.    exec
1b40: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
1b50: 45 20 74 33 28 61 2c 62 2c 63 29 7d 0a 20 20 20  E t3(a,b,c)}.   
1b60: 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 78 7d   catch {unset x}
1b70: 0a 20 20 20 20 73 65 74 20 78 28 31 29 20 41 0a  .    set x(1) A.
1b80: 20 20 20 20 73 65 74 20 78 28 32 29 20 42 0a 20      set x(2) B. 
1b90: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1ba0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1bb0: 33 20 56 41 4c 55 45 53 28 24 3a 3a 78 28 31 29  3 VALUES($::x(1)
1bc0: 2c 24 3a 3a 78 28 32 29 2c 24 3a 3a 78 28 33 29  ,$::x(2),$::x(3)
1bd0: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
1be0: 2a 20 46 52 4f 4d 20 74 33 0a 20 20 20 20 7d 0a  * FROM t3.    }.
1bf0: 20 20 7d 20 7b 41 20 42 20 7b 7d 7d 0a 20 20 64    } {A B {}}.  d
1c00: 6f 5f 74 65 73 74 20 74 63 6c 2d 35 2e 32 20 7b  o_test tcl-5.2 {
1c10: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1c20: 20 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65       SELECT type
1c30: 6f 66 28 61 29 2c 20 74 79 70 65 6f 66 28 62 29  of(a), typeof(b)
1c40: 2c 20 74 79 70 65 6f 66 28 63 29 20 46 52 4f 4d  , typeof(c) FROM
1c50: 20 74 33 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 74   t3.    }.  } {t
1c60: 65 78 74 20 74 65 78 74 20 6e 75 6c 6c 7d 0a 20  ext text null}. 
1c70: 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 35 2e 33   do_test tcl-5.3
1c80: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e   {.    catch {un
1c90: 73 65 74 20 78 7d 0a 20 20 20 20 73 65 74 20 78  set x}.    set x
1ca0: 20 5b 62 69 6e 61 72 79 20 66 6f 72 6d 61 74 20   [binary format 
1cb0: 68 31 32 20 36 38 36 39 30 30 36 38 36 66 30 30  h12 686900686f00
1cc0: 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  ].    execsql {.
1cd0: 20 20 20 20 20 20 55 50 44 41 54 45 20 74 33 20        UPDATE t3 
1ce0: 53 45 54 20 61 3d 24 3a 3a 78 3b 0a 20 20 20 20  SET a=$::x;.    
1cf0: 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 0a  }.    db eval {.
1d00: 20 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46        SELECT a F
1d10: 52 4f 4d 20 74 33 0a 20 20 20 20 7d 20 62 72 65  ROM t3.    } bre
1d20: 61 6b 0a 20 20 20 20 62 69 6e 61 72 79 20 73 63  ak.    binary sc
1d30: 61 6e 20 24 61 20 68 31 32 20 61 64 61 74 61 0a  an $a h12 adata.
1d40: 20 20 20 20 73 65 74 20 61 64 61 74 61 0a 20 20      set adata.  
1d50: 7d 20 7b 36 38 36 39 30 30 36 38 36 66 30 30 7d  } {686900686f00}
1d60: 0a 20 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 35  .  do_test tcl-5
1d70: 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .4 {.    execsql
1d80: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
1d90: 74 79 70 65 6f 66 28 61 29 2c 20 74 79 70 65 6f  typeof(a), typeo
1da0: 66 28 62 29 2c 20 74 79 70 65 6f 66 28 63 29 20  f(b), typeof(c) 
1db0: 46 52 4f 4d 20 74 33 0a 20 20 20 20 7d 0a 20 20  FROM t3.    }.  
1dc0: 7d 20 7b 62 6c 6f 62 20 74 65 78 74 20 6e 75 6c  } {blob text nul
1dd0: 6c 7d 0a 7d 0a 0a 23 20 4f 70 65 72 61 74 69 6f  l}.}..# Operatio
1de0: 6e 20 6f 66 20 22 62 72 65 61 6b 22 20 61 6e 64  n of "break" and
1df0: 20 22 63 6f 6e 74 69 6e 75 65 22 20 77 69 74 68   "continue" with
1e00: 69 6e 20 72 6f 77 20 73 63 72 69 70 74 73 0a 23  in row scripts.#
1e10: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 36 2e 31  .do_test tcl-6.1
1e20: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
1e30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d 20  LECT * FROM t1} 
1e40: 7b 0a 20 20 20 20 62 72 65 61 6b 0a 20 20 7d 0a  {.    break.  }.
1e50: 20 20 6c 61 70 70 65 6e 64 20 61 20 24 62 0a 7d    lappend a $b.}
1e60: 20 7b 31 30 20 32 30 7d 0a 64 6f 5f 74 65 73 74   {10 20}.do_test
1e70: 20 74 63 6c 2d 36 2e 32 20 7b 0a 20 20 73 65 74   tcl-6.2 {.  set
1e80: 20 63 6e 74 20 30 0a 20 20 64 62 20 65 76 61 6c   cnt 0.  db eval
1e90: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
1ea0: 74 31 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 61  t1} {.    if {$a
1eb0: 3e 34 30 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20  >40} continue.  
1ec0: 20 20 69 6e 63 72 20 63 6e 74 0a 20 20 7d 0a 20    incr cnt.  }. 
1ed0: 20 73 65 74 20 63 6e 74 0a 7d 20 7b 34 7d 0a 64   set cnt.} {4}.d
1ee0: 6f 5f 74 65 73 74 20 74 63 6c 2d 36 2e 33 20 7b  o_test tcl-6.3 {
1ef0: 0a 20 20 73 65 74 20 63 6e 74 20 30 0a 20 20 64  .  set cnt 0.  d
1f00: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a  b eval {SELECT *
1f10: 20 46 52 4f 4d 20 74 31 7d 20 7b 0a 20 20 20 20   FROM t1} {.    
1f20: 69 66 20 7b 24 61 3c 34 30 7d 20 63 6f 6e 74 69  if {$a<40} conti
1f30: 6e 75 65 0a 20 20 20 20 69 6e 63 72 20 63 6e 74  nue.    incr cnt
1f40: 0a 20 20 7d 0a 20 20 73 65 74 20 63 6e 74 0a 7d  .  }.  set cnt.}
1f50: 20 7b 35 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c   {5}.do_test tcl
1f60: 2d 36 2e 34 20 7b 0a 20 20 70 72 6f 63 20 72 65  -6.4 {.  proc re
1f70: 74 75 72 6e 5f 74 65 73 74 20 7b 78 7d 20 7b 0a  turn_test {x} {.
1f80: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
1f90: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d 20 7b  ECT * FROM t1} {
1fa0: 0a 20 20 20 20 20 20 69 66 20 7b 24 61 3d 3d 24  .      if {$a==$
1fb0: 78 7d 20 7b 72 65 74 75 72 6e 20 24 62 7d 0a 20  x} {return $b}. 
1fc0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
1fd0: 6e 5f 74 65 73 74 20 31 30 0a 7d 20 32 30 0a 64  n_test 10.} 20.d
1fe0: 6f 5f 74 65 73 74 20 74 63 6c 2d 36 2e 35 20 7b  o_test tcl-6.5 {
1ff0: 0a 20 20 72 65 74 75 72 6e 5f 74 65 73 74 20 32  .  return_test 2
2000: 30 0a 7d 20 34 30 0a 64 6f 5f 74 65 73 74 20 74  0.} 40.do_test t
2010: 63 6c 2d 36 2e 36 20 7b 0a 20 20 72 65 74 75 72  cl-6.6 {.  retur
2020: 6e 5f 74 65 73 74 20 39 39 0a 7d 20 35 31 30 0a  n_test 99.} 510.
2030: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 36 2e 37 20  do_test tcl-6.7 
2040: 7b 0a 20 20 72 65 74 75 72 6e 5f 74 65 73 74 20  {.  return_test 
2050: 30 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  0.} {}..do_test 
2060: 74 63 6c 2d 37 2e 31 20 7b 0a 20 20 64 62 20 76  tcl-7.1 {.  db v
2070: 65 72 73 69 6f 6e 0a 20 20 65 78 70 72 20 30 0a  ersion.  expr 0.
2080: 7d 20 7b 30 7d 0a 0a 23 20 6d 6f 64 69 66 79 20  } {0}..# modify 
2090: 61 6e 64 20 72 65 73 65 74 20 74 68 65 20 4e 55  and reset the NU
20a0: 4c 4c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  LL representatio
20b0: 6e 0a 23 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d  n.#.do_test tcl-
20c0: 38 2e 31 20 7b 0a 20 20 64 62 20 6e 75 6c 6c 76  8.1 {.  db nullv
20d0: 61 6c 75 65 20 4e 61 4e 0a 20 20 65 78 65 63 73  alue NaN.  execs
20e0: 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql {INSERT INTO 
20f0: 74 31 20 56 41 4c 55 45 53 28 33 30 2c 4e 55 4c  t1 VALUES(30,NUL
2100: 4c 29 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  L)}.  db eval {S
2110: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
2120: 57 48 45 52 45 20 62 20 49 53 20 4e 55 4c 4c 7d  WHERE b IS NULL}
2130: 0a 7d 20 7b 33 30 20 4e 61 4e 7d 0a 70 72 6f 63  .} {30 NaN}.proc
2140: 20 63 6f 6e 63 61 74 46 75 6e 63 20 61 72 67 73   concatFunc args
2150: 20 7b 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 24   {return [join $
2160: 61 72 67 73 20 7b 7d 5d 7d 0a 64 6f 5f 74 65 73  args {}]}.do_tes
2170: 74 20 74 63 6c 2d 38 2e 32 20 7b 0a 20 20 64 62  t tcl-8.2 {.  db
2180: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 63 61 74   function concat
2190: 20 63 6f 6e 63 61 74 46 75 6e 63 0a 20 20 64 62   concatFunc.  db
21a0: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f   eval {SELECT co
21b0: 6e 63 61 74 28 27 61 27 2c 20 62 2c 20 27 7a 27  ncat('a', b, 'z'
21c0: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
21d0: 62 20 69 73 20 4e 55 4c 4c 7d 0a 7d 20 7b 61 4e  b is NULL}.} {aN
21e0: 61 4e 7a 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c  aNz}.do_test tcl
21f0: 2d 38 2e 33 20 7b 0a 20 20 64 62 20 6e 75 6c 6c  -8.3 {.  db null
2200: 76 61 6c 75 65 20 4e 55 4c 4c 0a 20 20 64 62 20  value NULL.  db 
2210: 6e 75 6c 6c 76 61 6c 75 65 0a 7d 20 7b 4e 55 4c  nullvalue.} {NUL
2220: 4c 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 38  L}.do_test tcl-8
2230: 2e 34 20 7b 0a 20 20 64 62 20 6e 75 6c 6c 76 61  .4 {.  db nullva
2240: 6c 75 65 20 7b 7d 0a 20 20 64 62 20 65 76 61 6c  lue {}.  db eval
2250: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
2260: 74 31 20 57 48 45 52 45 20 62 20 49 53 20 4e 55  t1 WHERE b IS NU
2270: 4c 4c 7d 0a 7d 20 7b 33 30 20 7b 7d 7d 0a 64 6f  LL}.} {30 {}}.do
2280: 5f 74 65 73 74 20 74 63 6c 2d 38 2e 35 20 7b 0a  _test tcl-8.5 {.
2290: 20 20 64 62 20 66 75 6e 63 74 69 6f 6e 20 63 6f    db function co
22a0: 6e 63 61 74 20 63 6f 6e 63 61 74 46 75 6e 63 0a  ncat concatFunc.
22b0: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
22c0: 54 20 63 6f 6e 63 61 74 28 27 61 27 2c 20 62 2c  T concat('a', b,
22d0: 20 27 7a 27 29 20 46 52 4f 4d 20 74 31 20 57 48   'z') FROM t1 WH
22e0: 45 52 45 20 62 20 69 73 20 4e 55 4c 4c 7d 0a 7d  ERE b is NULL}.}
22f0: 20 7b 61 7a 7d 0a 0a 23 20 54 65 73 74 20 74 68   {az}..# Test th
2300: 65 20 72 65 74 75 72 6e 20 74 79 70 65 20 6f 66  e return type of
2310: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
2320: 6e 63 74 69 6f 6e 73 0a 23 0a 64 6f 5f 74 65 73  nctions.#.do_tes
2330: 74 20 74 63 6c 2d 39 2e 31 20 7b 0a 20 20 64 62  t tcl-9.1 {.  db
2340: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 5f 73 74   function ret_st
2350: 72 20 7b 72 65 74 75 72 6e 20 22 68 69 22 7d 0a  r {return "hi"}.
2360: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2370: 54 20 74 79 70 65 6f 66 28 72 65 74 5f 73 74 72  T typeof(ret_str
2380: 28 29 29 7d 0a 7d 20 7b 74 65 78 74 7d 0a 64 6f  ())}.} {text}.do
2390: 5f 74 65 73 74 20 74 63 6c 2d 39 2e 32 20 7b 0a  _test tcl-9.2 {.
23a0: 20 20 64 62 20 66 75 6e 63 74 69 6f 6e 20 72 65    db function re
23b0: 74 5f 64 62 6c 20 7b 72 65 74 75 72 6e 20 5b 65  t_dbl {return [e
23c0: 78 70 72 20 7b 72 61 6e 64 28 29 2a 30 2e 35 7d  xpr {rand()*0.5}
23d0: 5d 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  ]}.  execsql {SE
23e0: 4c 45 43 54 20 74 79 70 65 6f 66 28 72 65 74 5f  LECT typeof(ret_
23f0: 64 62 6c 28 29 29 7d 0a 7d 20 7b 72 65 61 6c 7d  dbl())}.} {real}
2400: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 39 2e 33  .do_test tcl-9.3
2410: 20 7b 0a 20 20 64 62 20 66 75 6e 63 74 69 6f 6e   {.  db function
2420: 20 72 65 74 5f 69 6e 74 20 7b 72 65 74 75 72 6e   ret_int {return
2430: 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64   [expr {int(rand
2440: 28 29 2a 32 30 30 29 7d 5d 7d 0a 20 20 65 78 65  ()*200)}]}.  exe
2450: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70  csql {SELECT typ
2460: 65 6f 66 28 72 65 74 5f 69 6e 74 28 29 29 7d 0a  eof(ret_int())}.
2470: 7d 20 7b 69 6e 74 65 67 65 72 7d 0a 0a 23 20 52  } {integer}..# R
2480: 65 63 75 72 73 69 76 65 20 63 61 6c 6c 73 20 74  ecursive calls t
2490: 6f 20 74 68 65 20 73 61 6d 65 20 75 73 65 72 2d  o the same user-
24a0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
24b0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 74 63 6c  .#.ifcapable tcl
24c0: 76 61 72 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  var {.  do_test 
24d0: 74 63 6c 2d 39 2e 31 30 20 7b 0a 20 20 20 20 70  tcl-9.10 {.    p
24e0: 72 6f 63 20 75 73 65 72 66 75 6e 63 5f 72 31 20  roc userfunc_r1 
24f0: 7b 6e 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  {n} {.      if {
2500: 24 6e 3c 3d 30 7d 20 7b 72 65 74 75 72 6e 20 30  $n<=0} {return 0
2510: 7d 0a 20 20 20 20 20 20 73 65 74 20 6e 6d 31 20  }.      set nm1 
2520: 5b 65 78 70 72 20 7b 24 6e 2d 31 7d 5d 0a 20 20  [expr {$n-1}].  
2530: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
2540: 20 7b 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45   {[db eval {SELE
2550: 43 54 20 72 31 28 24 6e 6d 31 29 7d 5d 2b 24 6e  CT r1($nm1)}]+$n
2560: 7d 5d 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20  }].    }.    db 
2570: 66 75 6e 63 74 69 6f 6e 20 72 31 20 75 73 65 72  function r1 user
2580: 66 75 6e 63 5f 72 31 0a 20 20 20 20 65 78 65 63  func_r1.    exec
2590: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 31 28 31  sql {SELECT r1(1
25a0: 30 29 7d 0a 20 20 7d 20 7b 35 35 7d 0a 20 20 64  0)}.  } {55}.  d
25b0: 6f 5f 74 65 73 74 20 74 63 6c 2d 39 2e 31 31 20  o_test tcl-9.11 
25c0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  {.    execsql {S
25d0: 45 4c 45 43 54 20 72 31 28 31 30 30 29 7d 0a 20  ELECT r1(100)}. 
25e0: 20 7d 20 7b 35 30 35 30 7d 0a 7d 0a 0a 23 20 54   } {5050}.}..# T
25f0: 65 73 74 73 20 66 6f 72 20 74 68 65 20 6e 65 77  ests for the new
2600: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 65 74   transaction met
2610: 68 6f 64 0a 23 0a 64 6f 5f 74 65 73 74 20 74 63  hod.#.do_test tc
2620: 6c 2d 31 30 2e 31 20 7b 0a 20 20 64 62 20 74 72  l-10.1 {.  db tr
2630: 61 6e 73 61 63 74 69 6f 6e 20 7b 7d 0a 7d 20 7b  ansaction {}.} {
2640: 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 30  }.do_test tcl-10
2650: 2e 32 20 7b 0a 20 20 64 62 20 74 72 61 6e 73 61  .2 {.  db transa
2660: 63 74 69 6f 6e 20 64 65 66 65 72 72 65 64 20 7b  ction deferred {
2670: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74  }.} {}.do_test t
2680: 63 6c 2d 31 30 2e 33 20 7b 0a 20 20 64 62 20 74  cl-10.3 {.  db t
2690: 72 61 6e 73 61 63 74 69 6f 6e 20 69 6d 6d 65 64  ransaction immed
26a0: 69 61 74 65 20 7b 7d 0a 7d 20 7b 7d 0a 64 6f 5f  iate {}.} {}.do_
26b0: 74 65 73 74 20 74 63 6c 2d 31 30 2e 34 20 7b 0a  test tcl-10.4 {.
26c0: 20 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e    db transaction
26d0: 20 65 78 63 6c 75 73 69 76 65 20 7b 7d 0a 7d 20   exclusive {}.} 
26e0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31  {}.do_test tcl-1
26f0: 30 2e 35 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  0.5 {.  set rc [
2700: 63 61 74 63 68 20 7b 64 62 20 74 72 61 6e 73 61  catch {db transa
2710: 63 74 69 6f 6e 20 78 79 7a 7a 79 20 7b 7d 7d 20  ction xyzzy {}} 
2720: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72  msg].  lappend r
2730: 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 62 61 64  c $msg.} {1 {bad
2740: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 79 70   transaction typ
2750: 65 20 22 78 79 7a 7a 79 22 3a 20 6d 75 73 74 20  e "xyzzy": must 
2760: 62 65 20 64 65 66 65 72 72 65 64 2c 20 65 78 63  be deferred, exc
2770: 6c 75 73 69 76 65 2c 20 6f 72 20 69 6d 6d 65 64  lusive, or immed
2780: 69 61 74 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  iate}}.do_test t
2790: 63 6c 2d 31 30 2e 36 20 7b 0a 20 20 73 65 74 20  cl-10.6 {.  set 
27a0: 72 63 20 5b 63 61 74 63 68 20 7b 64 62 20 74 72  rc [catch {db tr
27b0: 61 6e 73 61 63 74 69 6f 6e 20 7b 65 72 72 6f 72  ansaction {error
27c0: 20 74 65 73 74 2d 65 72 72 6f 72 7d 7d 20 6d 73   test-error}} ms
27d0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63 20  g].  lappend rc 
27e0: 24 6d 73 67 0a 7d 20 7b 31 20 74 65 73 74 2d 65  $msg.} {1 test-e
27f0: 72 72 6f 72 7d 0a 64 6f 5f 74 65 73 74 20 74 63  rror}.do_test tc
2800: 6c 2d 31 30 2e 37 20 7b 0a 20 20 64 62 20 74 72  l-10.7 {.  db tr
2810: 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20  ansaction {.    
2820: 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20  db eval {CREATE 
2830: 54 41 42 4c 45 20 74 34 28 78 29 7d 0a 20 20 20  TABLE t4(x)}.   
2840: 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   db transaction 
2850: 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20  {.      db eval 
2860: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20  {INSERT INTO t4 
2870: 56 41 4c 55 45 53 28 31 29 7d 0a 20 20 20 20 7d  VALUES(1)}.    }
2880: 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b  .  }.  db eval {
2890: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
28a0: 7d 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 74 63  }.} 1.do_test tc
28b0: 6c 2d 31 30 2e 38 20 7b 0a 20 20 63 61 74 63 68  l-10.8 {.  catch
28c0: 20 7b 0a 20 20 20 20 64 62 20 74 72 61 6e 73 61   {.    db transa
28d0: 63 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 64 62  ction {.      db
28e0: 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e   eval {INSERT IN
28f0: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 32 29 7d  TO t4 VALUES(2)}
2900: 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b  .      db eval {
2910: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
2920: 41 4c 55 45 53 28 33 29 7d 0a 20 20 20 20 20 20  ALUES(3)}.      
2930: 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20  db eval {INSERT 
2940: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 34  INTO t4 VALUES(4
2950: 29 7d 0a 20 20 20 20 20 20 65 72 72 6f 72 20 74  )}.      error t
2960: 65 73 74 2d 65 72 72 6f 72 0a 20 20 20 20 7d 0a  est-error.    }.
2970: 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53    }.  db eval {S
2980: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d  ELECT * FROM t4}
2990: 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 74 63 6c  .} 1.do_test tcl
29a0: 2d 31 30 2e 39 20 7b 0a 20 20 64 62 20 74 72 61  -10.9 {.  db tra
29b0: 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20 64  nsaction {.    d
29c0: 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49  b eval {INSERT I
29d0: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 32 29  NTO t4 VALUES(2)
29e0: 7d 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 20 20  }.    catch {.  
29f0: 20 20 20 20 64 62 20 74 72 61 6e 73 61 63 74 69      db transacti
2a00: 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20 64 62 20  on {.        db 
2a10: 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  eval {INSERT INT
2a20: 4f 20 74 34 20 56 41 4c 55 45 53 28 33 29 7d 0a  O t4 VALUES(3)}.
2a30: 20 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20          db eval 
2a40: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20  {INSERT INTO t4 
2a50: 56 41 4c 55 45 53 28 34 29 7d 0a 20 20 20 20 20  VALUES(4)}.     
2a60: 20 20 20 65 72 72 6f 72 20 74 65 73 74 2d 65 72     error test-er
2a70: 72 6f 72 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ror.      }.    
2a80: 7d 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20  }.  }.  db eval 
2a90: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2aa0: 34 7d 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65  4}.} {1 2}.do_te
2ab0: 73 74 20 74 63 6c 2d 31 30 2e 31 30 20 7b 0a 20  st tcl-10.10 {. 
2ac0: 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b   for {set i 0} {
2ad0: 24 69 3c 31 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  $i<1} {incr i} {
2ae0: 0a 20 20 20 20 64 62 20 74 72 61 6e 73 61 63 74  .    db transact
2af0: 69 6f 6e 20 7b 0a 20 20 20 20 20 20 64 62 20 65  ion {.      db e
2b00: 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f  val {INSERT INTO
2b10: 20 74 34 20 56 41 4c 55 45 53 28 35 29 7d 0a 20   t4 VALUES(5)}. 
2b20: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20       continue.  
2b30: 20 20 7d 0a 20 20 20 20 65 72 72 6f 72 20 22 54    }.    error "T
2b40: 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  his line should 
2b50: 6e 6f 74 20 62 65 20 72 75 6e 22 0a 20 20 7d 0a  not be run".  }.
2b60: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
2b70: 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a 7d 20 7b  T * FROM t4}.} {
2b80: 31 20 32 20 35 7d 0a 64 6f 5f 74 65 73 74 20 74  1 2 5}.do_test t
2b90: 63 6c 2d 31 30 2e 31 31 20 7b 0a 20 20 66 6f 72  cl-10.11 {.  for
2ba0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c 31   {set i 0} {$i<1
2bb0: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
2bc0: 20 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e    db transaction
2bd0: 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c   {.      db eval
2be0: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34   {INSERT INTO t4
2bf0: 20 56 41 4c 55 45 53 28 36 29 7d 0a 20 20 20 20   VALUES(6)}.    
2c00: 20 20 62 72 65 61 6b 0a 20 20 20 20 7d 0a 20 20    break.    }.  
2c10: 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  }.  db eval {SEL
2c20: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a 7d  ECT * FROM t4}.}
2c30: 20 7b 31 20 32 20 35 20 36 7d 0a 64 6f 5f 74 65   {1 2 5 6}.do_te
2c40: 73 74 20 74 63 6c 2d 31 30 2e 31 32 20 7b 0a 20  st tcl-10.12 {. 
2c50: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b   set rc [catch {
2c60: 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20  .    for {set i 
2c70: 30 7d 20 7b 24 69 3c 31 30 7d 20 7b 69 6e 63 72  0} {$i<10} {incr
2c80: 20 69 7d 20 7b 0a 20 20 20 20 20 20 64 62 20 74   i} {.      db t
2c90: 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20  ransaction {.   
2ca0: 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 49 4e       db eval {IN
2cb0: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
2cc0: 55 45 53 28 37 29 7d 0a 20 20 20 20 20 20 20 20  UES(7)}.        
2cd0: 72 65 74 75 72 6e 0a 20 20 20 20 20 20 7d 0a 20  return.      }. 
2ce0: 20 20 20 7d 0a 20 20 7d 5d 0a 7d 20 7b 32 7d 0a     }.  }].} {2}.
2cf0: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 30 2e 31  do_test tcl-10.1
2d00: 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  3 {.  db eval {S
2d10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d  ELECT * FROM t4}
2d20: 0a 7d 20 7b 31 20 32 20 35 20 36 20 37 7d 0a 0a  .} {1 2 5 6 7}..
2d30: 23 20 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20  # Now test that 
2d40: 5b 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 5d  [db transaction]
2d50: 20 63 6f 6d 6d 61 6e 64 73 20 6d 61 79 20 62 65   commands may be
2d60: 20 6e 65 73 74 65 64 20 77 69 74 68 20 0a 23 20   nested with .# 
2d70: 74 68 65 20 65 78 70 65 63 74 65 64 20 72 65 73  the expected res
2d80: 75 6c 74 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ults..#.do_test 
2d90: 74 63 6c 2d 31 30 2e 31 34 20 7b 0a 20 20 64 62  tcl-10.14 {.  db
2da0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20   transaction {. 
2db0: 20 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20     db eval {.   
2dc0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
2dd0: 34 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  4;.      INSERT 
2de0: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
2df0: 6f 6e 65 27 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  one');.    }..  
2e00: 20 20 63 61 74 63 68 20 7b 20 0a 20 20 20 20 20    catch { .     
2e10: 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   db transaction 
2e20: 7b 0a 20 20 20 20 20 20 20 20 64 62 20 65 76 61  {.        db eva
2e30: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
2e40: 74 34 20 56 41 4c 55 45 53 28 27 74 77 6f 27 29  t4 VALUES('two')
2e50: 20 7d 0a 20 20 20 20 20 20 20 20 64 62 20 74 72   }.        db tr
2e60: 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20  ansaction {.    
2e70: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 20        db eval { 
2e80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
2e90: 41 4c 55 45 53 28 27 74 68 72 65 65 27 29 20 7d  ALUES('three') }
2ea0: 0a 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72  .          error
2eb0: 20 22 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72   "throw an error
2ec0: 21 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  !".        }.   
2ed0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
2ee0: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
2ef0: 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a 7d 20 7b  T * FROM t4}.} {
2f00: 6f 6e 65 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c  one}.do_test tcl
2f10: 2d 31 30 2e 31 35 20 7b 0a 20 20 23 20 4d 61 6b  -10.15 {.  # Mak
2f20: 65 20 73 75 72 65 20 61 20 74 72 61 6e 73 61 63  e sure a transac
2f30: 74 69 6f 6e 20 68 61 73 20 6e 6f 74 20 62 65 65  tion has not bee
2f40: 6e 20 6c 65 66 74 20 6f 70 65 6e 2e 0a 20 20 64  n left open..  d
2f50: 62 20 65 76 61 6c 20 7b 42 45 47 49 4e 20 3b 20  b eval {BEGIN ; 
2f60: 43 4f 4d 4d 49 54 7d 0a 7d 20 7b 7d 0a 64 6f 5f  COMMIT}.} {}.do_
2f70: 74 65 73 74 20 74 63 6c 2d 31 30 2e 31 36 20 7b  test tcl-10.16 {
2f80: 0a 20 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f  .  db transactio
2f90: 6e 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  n {.    db eval 
2fa0: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34  { INSERT INTO t4
2fb0: 20 56 41 4c 55 45 53 28 27 74 77 6f 27 29 3b 20   VALUES('two'); 
2fc0: 7d 0a 20 20 20 20 64 62 20 74 72 61 6e 73 61 63  }.    db transac
2fd0: 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 64 62 20  tion {.      db 
2fe0: 65 76 61 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  eval { INSERT IN
2ff0: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 74 68  TO t4 VALUES('th
3000: 72 65 65 27 29 20 7d 0a 20 20 20 20 20 20 64 62  ree') }.      db
3010: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20   transaction {. 
3020: 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b         db eval {
3030: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
3040: 56 41 4c 55 45 53 28 27 66 6f 75 72 27 29 20 7d  VALUES('four') }
3050: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
3060: 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   }.  db eval {SE
3070: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 7d 0a  LECT * FROM t4}.
3080: 7d 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65  } {one two three
3090: 20 66 6f 75 72 7d 0a 64 6f 5f 74 65 73 74 20 74   four}.do_test t
30a0: 63 6c 2d 31 30 2e 31 37 20 7b 0a 20 20 63 61 74  cl-10.17 {.  cat
30b0: 63 68 20 7b 0a 20 20 20 20 64 62 20 74 72 61 6e  ch {.    db tran
30c0: 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20  saction {.      
30d0: 64 62 20 65 76 61 6c 20 7b 20 49 4e 53 45 52 54  db eval { INSERT
30e0: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
30f0: 27 41 27 29 3b 20 7d 0a 20 20 20 20 20 20 64 62  'A'); }.      db
3100: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20   transaction {. 
3110: 20 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b         db eval {
3120: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
3130: 56 41 4c 55 45 53 28 27 42 27 29 20 7d 0a 20 20  VALUES('B') }.  
3140: 20 20 20 20 20 20 64 62 20 74 72 61 6e 73 61 63        db transac
3150: 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 20 20 20  tion {.         
3160: 20 64 62 20 65 76 61 6c 20 7b 20 49 4e 53 45 52   db eval { INSER
3170: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
3180: 28 27 43 27 29 20 7d 0a 20 20 20 20 20 20 20 20  ('C') }.        
3190: 20 20 65 72 72 6f 72 20 22 74 68 72 6f 77 20 61    error "throw a
31a0: 6e 20 65 72 72 6f 72 21 22 0a 20 20 20 20 20 20  n error!".      
31b0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
31c0: 7d 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20  }.  }.  db eval 
31d0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
31e0: 34 7d 0a 7d 20 7b 6f 6e 65 20 74 77 6f 20 74 68  4}.} {one two th
31f0: 72 65 65 20 66 6f 75 72 7d 0a 64 6f 5f 74 65 73  ree four}.do_tes
3200: 74 20 74 63 6c 2d 31 30 2e 31 38 20 7b 0a 20 20  t tcl-10.18 {.  
3210: 23 20 4d 61 6b 65 20 73 75 72 65 20 61 20 74 72  # Make sure a tr
3220: 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 6e 6f  ansaction has no
3230: 74 20 62 65 65 6e 20 6c 65 66 74 20 6f 70 65 6e  t been left open
3240: 2e 0a 20 20 64 62 20 65 76 61 6c 20 7b 42 45 47  ..  db eval {BEG
3250: 49 4e 20 3b 20 43 4f 4d 4d 49 54 7d 0a 7d 20 7b  IN ; COMMIT}.} {
3260: 7d 0a 0a 23 20 4d 65 73 73 20 75 70 20 61 20 5b  }..# Mess up a [
3270: 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 5d 20  db transaction] 
3280: 63 6f 6d 6d 61 6e 64 20 62 79 20 6c 6f 63 6b 69  command by locki
3290: 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ng the database 
32a0: 75 73 69 6e 67 20 61 0a 23 20 73 65 63 6f 6e 64  using a.# second
32b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 65 6e   connection when
32c0: 20 69 74 20 74 72 69 65 73 20 74 6f 20 63 6f 6d   it tries to com
32d0: 6d 69 74 2e 20 4d 61 6b 65 20 73 75 72 65 20 74  mit. Make sure t
32e0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 23  he transaction.#
32f0: 20 69 73 20 6e 6f 74 20 73 74 69 6c 6c 20 6f 70   is not still op
3300: 65 6e 20 61 66 74 65 72 20 74 68 65 20 22 64 61  en after the "da
3310: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
3320: 22 20 65 78 63 65 70 74 69 6f 6e 20 69 73 20 74  " exception is t
3330: 68 72 6f 77 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74  hrown..#.do_test
3340: 20 74 63 6c 2d 31 30 2e 31 38 20 7b 0a 20 20 73   tcl-10.18 {.  s
3350: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
3360: 64 62 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a  db.  db2 eval {.
3370: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 53      BEGIN;.    S
3380: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
3390: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a  ite_master;.  }.
33a0: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
33b0: 20 7b 0a 20 20 20 20 64 62 20 74 72 61 6e 73 61   {.    db transa
33c0: 63 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 64 62  ction {.      db
33d0: 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49 4e   eval {INSERT IN
33e0: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 66 69  TO t4 VALUES('fi
33f0: 76 65 27 29 7d 0a 20 20 20 20 7d 0a 20 20 7d 20  ve')}.    }.  } 
3400: 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20  msg].  list $rc 
3410: 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61 62  $msg.} {1 {datab
3420: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a  ase is locked}}.
3430: 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 30 2e 31  do_test tcl-10.1
3440: 39 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 42  9 {.  db eval {B
3450: 45 47 49 4e 20 3b 20 43 4f 4d 4d 49 54 7d 0a 7d  EGIN ; COMMIT}.}
3460: 20 7b 7d 0a 0a 23 20 54 68 77 61 72 74 20 61 20   {}..# Thwart a 
3470: 5b 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 5d  [db transaction]
3480: 20 63 6f 6d 6d 61 6e 64 20 62 79 20 6c 6f 63 6b   command by lock
3490: 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
34a0: 20 75 73 69 6e 67 20 61 0a 23 20 73 65 63 6f 6e   using a.# secon
34b0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74  d connection wit
34c0: 68 20 22 42 45 47 49 4e 20 45 58 43 4c 55 53 49  h "BEGIN EXCLUSI
34d0: 56 45 22 2e 20 4d 61 6b 65 20 73 75 72 65 20 6e  VE". Make sure n
34e0: 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
34f0: 20 0a 23 20 6f 70 65 6e 20 61 66 74 65 72 20 74   .# open after t
3500: 68 65 20 22 64 61 74 61 62 61 73 65 20 69 73 20  he "database is 
3510: 6c 6f 63 6b 65 64 22 20 65 78 63 65 70 74 69 6f  locked" exceptio
3520: 6e 20 69 73 20 74 68 72 6f 77 6e 2e 0a 23 0a 64  n is thrown..#.d
3530: 6f 5f 74 65 73 74 20 74 63 6c 2d 31 30 2e 32 30  o_test tcl-10.20
3540: 20 7b 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a   {.  db2 eval {.
3550: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
3560: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 3b  BEGIN EXCLUSIVE;
3570: 0a 20 20 7d 0a 20 20 73 65 74 20 72 63 20 5b 63  .  }.  set rc [c
3580: 61 74 63 68 20 7b 0a 20 20 20 20 64 62 20 74 72  atch {.    db tr
3590: 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20  ansaction {.    
35a0: 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52    db eval {INSER
35b0: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
35c0: 28 27 66 69 76 65 27 29 7d 0a 20 20 20 20 7d 0a  ('five')}.    }.
35d0: 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 69 73 74 20    } msg].  list 
35e0: 24 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64  $rc $msg.} {1 {d
35f0: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
3600: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d  d}}.do_test tcl-
3610: 31 30 2e 32 31 20 7b 0a 20 20 64 62 32 20 63 6c  10.21 {.  db2 cl
3620: 6f 73 65 0a 20 20 64 62 20 65 76 61 6c 20 7b 42  ose.  db eval {B
3630: 45 47 49 4e 20 3b 20 43 4f 4d 4d 49 54 7d 0a 7d  EGIN ; COMMIT}.}
3640: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d   {}.do_test tcl-
3650: 31 30 2e 32 32 20 7b 0a 20 20 73 71 6c 69 74 65  10.22 {.  sqlite
3660: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
3670: 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 65  db transaction e
3680: 78 63 6c 75 73 69 76 65 20 7b 0a 20 20 20 20 63  xclusive {.    c
3690: 61 74 63 68 20 7b 20 64 62 32 20 65 76 61 6c 20  atch { db2 eval 
36a0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73  {SELECT * FROM s
36b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 7d 20  qlite_master} } 
36c0: 6d 73 67 0a 20 20 20 20 73 65 74 20 6d 73 67 20  msg.    set msg 
36d0: 22 64 62 32 3a 20 24 6d 73 67 22 0a 20 20 7d 0a  "db2: $msg".  }.
36e0: 20 20 73 65 74 20 6d 73 67 0a 7d 20 7b 64 62 32    set msg.} {db2
36f0: 3a 20 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f  : database is lo
3700: 63 6b 65 64 7d 0a 64 62 32 20 63 6c 6f 73 65 0a  cked}.db2 close.
3710: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 31 2e  .do_test tcl-11.
3720: 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 49  1 {.  db eval {I
3730: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
3740: 4c 55 45 53 28 36 29 7d 0a 20 20 64 62 20 65 78  LUES(6)}.  db ex
3750: 69 73 74 73 20 7b 53 45 4c 45 43 54 20 78 2c 78  ists {SELECT x,x
3760: 2a 32 2c 78 2b 78 20 46 52 4f 4d 20 74 34 20 57  *2,x+x FROM t4 W
3770: 48 45 52 45 20 78 3d 3d 36 7d 0a 7d 20 7b 31 7d  HERE x==6}.} {1}
3780: 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 31 2e  .do_test tcl-11.
3790: 32 20 7b 0a 20 20 64 62 20 65 78 69 73 74 73 20  2 {.  db exists 
37a0: 7b 53 45 4c 45 43 54 20 30 20 46 52 4f 4d 20 74  {SELECT 0 FROM t
37b0: 34 20 57 48 45 52 45 20 78 3d 3d 36 7d 0a 7d 20  4 WHERE x==6}.} 
37c0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d  {1}.do_test tcl-
37d0: 31 31 2e 33 20 7b 0a 20 20 64 62 20 65 78 69 73  11.3 {.  db exis
37e0: 74 73 20 7b 53 45 4c 45 43 54 20 31 20 46 52 4f  ts {SELECT 1 FRO
37f0: 4d 20 74 34 20 57 48 45 52 45 20 78 3d 3d 38 7d  M t4 WHERE x==8}
3800: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 74  .} {0}.do_test t
3810: 63 6c 2d 31 31 2e 33 2e 31 20 7b 0a 20 20 74 63  cl-11.3.1 {.  tc
3820: 6c 5f 6f 62 6a 70 72 6f 63 20 64 62 20 65 78 69  l_objproc db exi
3830: 73 74 73 20 7b 53 45 4c 45 43 54 20 31 20 46 52  sts {SELECT 1 FR
3840: 4f 4d 20 74 34 20 57 48 45 52 45 20 78 3d 3d 38  OM t4 WHERE x==8
3850: 7d 0a 7d 20 7b 30 7d 0a 0a 64 6f 5f 74 65 73 74  }.} {0}..do_test
3860: 20 74 63 6c 2d 31 32 2e 31 20 7b 0a 20 20 75 6e   tcl-12.1 {.  un
3870: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3880: 61 20 62 20 63 20 76 65 72 73 69 6f 6e 0a 20 20  a b c version.  
3890: 73 65 74 20 76 65 72 73 69 6f 6e 20 5b 64 62 20  set version [db 
38a0: 76 65 72 73 69 6f 6e 5d 0a 20 20 73 63 61 6e 20  version].  scan 
38b0: 24 76 65 72 73 69 6f 6e 20 22 25 64 2e 25 64 2e  $version "%d.%d.
38c0: 25 64 22 20 61 20 62 20 63 0a 20 20 65 78 70 72  %d" a b c.  expr
38d0: 20 24 61 2a 31 30 30 30 30 30 30 20 2b 20 24 62   $a*1000000 + $b
38e0: 2a 31 30 30 30 20 2b 20 24 63 0a 7d 20 5b 73 71  *1000 + $c.} [sq
38f0: 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
3900: 5f 6e 75 6d 62 65 72 5d 0a 0a 0a 23 20 43 68 65  _number]...# Che
3910: 63 6b 20 74 6f 20 73 65 65 20 74 68 61 74 20 77  ck to see that w
3920: 68 65 6e 20 62 69 6e 64 69 6e 67 73 20 6f 66 20  hen bindings of 
3930: 74 68 65 20 66 6f 72 6d 20 40 61 61 61 20 61 72  the form @aaa ar
3940: 65 20 75 73 65 64 20 69 6e 73 74 65 61 64 0a 23  e used instead.#
3950: 20 6f 66 20 24 61 61 61 2c 20 74 68 61 74 20 6f   of $aaa, that o
3960: 62 6a 65 63 74 73 20 61 72 65 20 74 72 65 61 74  bjects are treat
3970: 65 64 20 61 73 20 62 79 74 65 61 72 72 61 79 20  ed as bytearray 
3980: 61 6e 64 20 61 72 65 20 69 6e 73 65 72 74 65 64  and are inserted
3990: 0a 23 20 61 73 20 42 4c 4f 42 73 2e 0a 23 0a 69  .# as BLOBs..#.i
39a0: 66 63 61 70 61 62 6c 65 20 74 63 6c 76 61 72 20  fcapable tclvar 
39b0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d  {.  do_test tcl-
39c0: 31 33 2e 31 20 7b 0a 20 20 20 20 64 62 20 65 76  13.1 {.    db ev
39d0: 61 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  al {CREATE TABLE
39e0: 20 74 35 28 78 20 42 4c 4f 42 29 7d 0a 20 20 20   t5(x BLOB)}.   
39f0: 20 73 65 74 20 78 20 61 62 63 31 32 33 0a 20 20   set x abc123.  
3a00: 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52    db eval {INSER
3a10: 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53  T INTO t5 VALUES
3a20: 28 24 78 29 7d 0a 20 20 20 20 64 62 20 65 76 61  ($x)}.    db eva
3a30: 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66  l {SELECT typeof
3a40: 28 78 29 20 46 52 4f 4d 20 74 35 7d 0a 20 20 7d  (x) FROM t5}.  }
3a50: 20 7b 74 65 78 74 7d 0a 20 20 64 6f 5f 74 65 73   {text}.  do_tes
3a60: 74 20 74 63 6c 2d 31 33 2e 32 20 7b 0a 20 20 20  t tcl-13.2 {.   
3a70: 20 62 69 6e 61 72 79 20 73 63 61 6e 20 24 78 20   binary scan $x 
3a80: 48 20 6e 6f 74 55 73 65 64 0a 20 20 20 20 64 62  H notUsed.    db
3a90: 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 20 44 45   eval {.      DE
3aa0: 4c 45 54 45 20 46 52 4f 4d 20 74 35 3b 0a 20 20  LETE FROM t5;.  
3ab0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3ac0: 74 35 20 56 41 4c 55 45 53 28 24 78 29 3b 0a 20  t5 VALUES($x);. 
3ad0: 20 20 20 20 20 53 45 4c 45 43 54 20 74 79 70 65       SELECT type
3ae0: 6f 66 28 78 29 20 46 52 4f 4d 20 74 35 3b 0a 20  of(x) FROM t5;. 
3af0: 20 20 20 7d 0a 20 20 7d 20 7b 74 65 78 74 7d 0a     }.  } {text}.
3b00: 20 20 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 33    do_test tcl-13
3b10: 2e 33 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  .3 {.    db eval
3b20: 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20   {.      DELETE 
3b30: 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 20 20 49  FROM t5;.      I
3b40: 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41  NSERT INTO t5 VA
3b50: 4c 55 45 53 28 40 78 29 3b 0a 20 20 20 20 20 20  LUES(@x);.      
3b60: 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 78 29  SELECT typeof(x)
3b70: 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 7d 0a   FROM t5;.    }.
3b80: 20 20 7d 20 7b 62 6c 6f 62 7d 0a 20 20 64 6f 5f    } {blob}.  do_
3b90: 74 65 73 74 20 74 63 6c 2d 31 33 2e 34 20 7b 0a  test tcl-13.4 {.
3ba0: 20 20 20 20 73 65 74 20 79 20 31 32 33 34 0a 20      set y 1234. 
3bb0: 20 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20     db eval {.   
3bc0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
3bd0: 35 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  5;.      INSERT 
3be0: 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 40  INTO t5 VALUES(@
3bf0: 79 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  y);.      SELECT
3c00: 20 68 65 78 28 78 29 2c 20 74 79 70 65 6f 66 28   hex(x), typeof(
3c10: 78 29 20 46 52 4f 4d 20 74 35 0a 20 20 20 20 7d  x) FROM t5.    }
3c20: 0a 20 20 7d 20 7b 33 31 33 32 33 33 33 34 20 62  .  } {31323334 b
3c30: 6c 6f 62 7d 0a 7d 0a 0a 64 62 20 66 75 6e 63 20  lob}.}..db func 
3c40: 78 43 61 6c 6c 20 78 43 61 6c 6c 0a 70 72 6f 63  xCall xCall.proc
3c50: 20 78 43 61 6c 6c 20 7b 7d 20 7b 20 72 65 74 75   xCall {} { retu
3c60: 72 6e 20 22 76 61 6c 75 65 22 20 7d 0a 64 6f 5f  rn "value" }.do_
3c70: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 74 63 6c  execsql_test tcl
3c80: 2d 31 34 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  -14.1 {.  CREATE
3c90: 20 54 41 42 4c 45 20 74 36 28 78 29 3b 0a 20 20   TABLE t6(x);.  
3ca0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56  INSERT INTO t6 V
3cb0: 41 4c 55 45 53 28 31 29 3b 0a 7d 0a 64 6f 5f 74  ALUES(1);.}.do_t
3cc0: 65 73 74 20 74 63 6c 2d 31 34 2e 32 20 7b 0a 20  est tcl-14.2 {. 
3cd0: 20 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54 20   db one {SELECT 
3ce0: 78 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20  x FROM t6 WHERE 
3cf0: 78 43 61 6c 6c 28 29 21 3d 27 76 61 6c 75 65 27  xCall()!='value'
3d00: 7d 0a 7d 20 7b 7d 0a 0a 23 20 56 65 72 69 66 79  }.} {}..# Verify
3d10: 20 74 68 61 74 20 74 68 65 20 22 65 78 69 73 74   that the "exist
3d20: 73 22 20 61 6e 64 20 22 6f 6e 65 63 6f 6c 75 6d  s" and "onecolum
3d30: 6e 22 20 6d 65 74 68 6f 64 73 20 77 6f 72 6b 20  n" methods work 
3d40: 77 68 65 6e 0a 23 20 61 20 22 70 72 6f 66 69 6c  when.# a "profil
3d50: 65 22 20 69 73 20 72 65 67 69 73 74 65 72 65 64  e" is registered
3d60: 2e 0a 23 0a 63 61 74 63 68 20 7b 64 62 20 63 6c  ..#.catch {db cl
3d70: 6f 73 65 7d 0a 73 71 6c 69 74 65 33 20 64 62 20  ose}.sqlite3 db 
3d80: 3a 6d 65 6d 6f 72 79 3a 0a 70 72 6f 63 20 6e 6f  :memory:.proc no
3d90: 6f 70 2d 70 72 6f 66 69 6c 65 20 7b 61 72 67 73  op-profile {args
3da0: 7d 20 7b 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 64  } {.  return.}.d
3db0: 6f 5f 74 65 73 74 20 74 63 6c 2d 31 35 2e 30 20  o_test tcl-15.0 
3dc0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45  {.  db eval {CRE
3dd0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b  ATE TABLE t1(a);
3de0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
3df0: 56 41 4c 55 45 53 28 31 29 2c 28 32 29 2c 28 33  VALUES(1),(2),(3
3e00: 29 3b 7d 0a 20 20 64 62 20 6f 6e 65 63 6f 6c 75  );}.  db onecolu
3e10: 6d 6e 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f  mn {SELECT a FRO
3e20: 4d 20 74 31 20 57 48 45 52 45 20 61 3e 32 7d 0a  M t1 WHERE a>2}.
3e30: 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 74 63  } {3}.do_test tc
3e40: 6c 2d 31 35 2e 31 20 7b 0a 20 20 64 62 20 65 78  l-15.1 {.  db ex
3e50: 69 73 74 73 20 7b 53 45 4c 45 43 54 20 61 20 46  ists {SELECT a F
3e60: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 32  ROM t1 WHERE a>2
3e70: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
3e80: 74 63 6c 2d 31 35 2e 32 20 7b 0a 20 20 64 62 20  tcl-15.2 {.  db 
3e90: 65 78 69 73 74 73 20 7b 53 45 4c 45 43 54 20 61  exists {SELECT a
3ea0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
3eb0: 3e 33 7d 0a 7d 20 7b 30 7d 0a 64 62 20 70 72 6f  >3}.} {0}.db pro
3ec0: 66 69 6c 65 20 6e 6f 6f 70 2d 70 72 6f 66 69 6c  file noop-profil
3ed0: 65 0a 64 6f 5f 74 65 73 74 20 74 63 6c 2d 31 35  e.do_test tcl-15
3ee0: 2e 33 20 7b 0a 20 20 64 62 20 6f 6e 65 63 6f 6c  .3 {.  db onecol
3ef0: 75 6d 6e 20 7b 53 45 4c 45 43 54 20 61 20 46 52  umn {SELECT a FR
3f00: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 32 7d  OM t1 WHERE a>2}
3f10: 0a 7d 20 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 74  .} {3}.do_test t
3f20: 63 6c 2d 31 35 2e 34 20 7b 0a 20 20 64 62 20 65  cl-15.4 {.  db e
3f30: 78 69 73 74 73 20 7b 53 45 4c 45 43 54 20 61 20  xists {SELECT a 
3f40: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e  FROM t1 WHERE a>
3f50: 32 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  2}.} {1}.do_test
3f60: 20 74 63 6c 2d 31 35 2e 35 20 7b 0a 20 20 64 62   tcl-15.5 {.  db
3f70: 20 65 78 69 73 74 73 20 7b 53 45 4c 45 43 54 20   exists {SELECT 
3f80: 61 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  a FROM t1 WHERE 
3f90: 61 3e 33 7d 0a 7d 20 7b 30 7d 0a 0a 0a 23 20 32  a>3}.} {0}...# 2
3fa0: 30 31 37 2d 30 36 2d 32 36 3a 20 54 68 65 20 2d  017-06-26: The -
3fb0: 2d 77 69 74 68 6f 75 74 6e 75 6c 6c 73 20 66 6c  -withoutnulls fl
3fc0: 61 67 20 74 6f 20 22 64 62 20 65 76 61 6c 22 2e  ag to "db eval".
3fd0: 0a 23 0a 23 20 49 6e 20 74 68 65 20 22 64 62 20  .#.# In the "db 
3fe0: 65 76 61 6c 20 2d 2d 77 69 74 68 6f 75 74 6e 75  eval --withoutnu
3ff0: 6c 6c 73 20 53 51 4c 20 41 52 52 41 59 22 20 66  lls SQL ARRAY" f
4000: 6f 72 6d 2c 20 4e 55 4c 4c 20 72 65 73 75 6c 74  orm, NULL result
4010: 73 20 63 61 75 73 65 20 74 68 65 0a 23 20 63 6f  s cause the.# co
4020: 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 72 72 61  rresponding arra
4030: 79 20 65 6e 74 72 79 20 74 6f 20 62 65 20 75 6e  y entry to be un
4040: 73 65 74 2e 20 20 54 68 65 20 64 65 66 61 75 6c  set.  The defaul
4050: 74 20 62 65 68 61 76 69 6f 72 20 28 77 69 74 68  t behavior (with
4060: 6f 75 74 0a 23 20 74 68 65 20 2d 77 69 74 68 6f  out.# the -witho
4070: 75 74 6e 75 6c 6c 73 20 66 6c 61 67 73 29 20 69  utnulls flags) i
4080: 73 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73  s for the corres
4090: 70 6f 6e 64 69 6e 67 20 61 72 72 61 79 20 76 61  ponding array va
40a0: 6c 75 65 20 74 6f 20 67 65 74 0a 23 20 74 68 65  lue to get.# the
40b0: 20 5b 64 62 20 6e 75 6c 6c 76 61 6c 75 65 5d 20   [db nullvalue] 
40c0: 73 74 72 69 6e 67 2e 0a 23 0a 63 61 74 63 68 20  string..#.catch 
40d0: 7b 64 62 20 63 6c 6f 73 65 7d 0a 66 6f 72 63 65  {db close}.force
40e0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 73  delete test.db.s
40f0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4100: 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  b.do_execsql_tes
4110: 74 20 74 63 6c 2d 31 36 2e 31 30 30 20 7b 0a 20  t tcl-16.100 {. 
4120: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
4130: 28 61 2c 62 29 3b 0a 20 20 49 4e 53 45 52 54 20  (a,b);.  INSERT 
4140: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
4150: 2c 32 29 2c 28 32 2c 4e 55 4c 4c 29 2c 28 33 2c  ,2),(2,NULL),(3,
4160: 27 78 79 7a 27 29 3b 0a 7d 0a 64 6f 5f 74 65 73  'xyz');.}.do_tes
4170: 74 20 74 63 6c 2d 31 36 2e 31 30 31 20 7b 0a 20  t tcl-16.101 {. 
4180: 20 73 65 74 20 72 65 73 20 7b 7d 0a 20 20 75 6e   set res {}.  un
4190: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
41a0: 78 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  x.  db eval {SEL
41b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d 20 78  ECT * FROM t1} x
41c0: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72   {.    lappend r
41d0: 65 73 20 24 78 28 61 29 20 5b 61 72 72 61 79 20  es $x(a) [array 
41e0: 6e 61 6d 65 73 20 78 5d 0a 20 20 7d 0a 20 20 73  names x].  }.  s
41f0: 65 74 20 72 65 73 0a 7d 20 7b 31 20 7b 61 20 62  et res.} {1 {a b
4200: 20 2a 7d 20 32 20 7b 61 20 62 20 2a 7d 20 33 20   *} 2 {a b *} 3 
4210: 7b 61 20 62 20 2a 7d 7d 0a 64 6f 5f 74 65 73 74  {a b *}}.do_test
4220: 20 74 63 6c 2d 31 36 2e 31 30 32 20 7b 0a 20 20   tcl-16.102 {.  
4230: 73 65 74 20 72 65 73 20 5b 63 61 74 63 68 20 7b  set res [catch {
4240: 0a 20 20 20 20 64 62 20 65 76 61 6c 20 2d 75 6e  .    db eval -un
4250: 6b 6e 6f 77 6e 20 7b 53 45 4c 45 43 54 20 2a 20  known {SELECT * 
4260: 46 52 4f 4d 20 74 31 7d 20 78 20 7b 0a 20 20 20  FROM t1} x {.   
4270: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
4280: 78 28 61 29 20 5b 61 72 72 61 79 20 6e 61 6d 65  x(a) [array name
4290: 73 20 78 5d 0a 20 20 20 20 7d 0a 20 20 7d 20 72  s x].    }.  } r
42a0: 63 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  c].  lappend res
42b0: 20 24 72 63 0a 7d 20 7b 31 20 7b 75 6e 6b 6e 6f   $rc.} {1 {unkno
42c0: 77 6e 20 6f 70 74 69 6f 6e 3a 20 22 2d 75 6e 6b  wn option: "-unk
42d0: 6e 6f 77 6e 22 7d 7d 0a 64 6f 5f 74 65 73 74 20  nown"}}.do_test 
42e0: 74 63 6c 2d 31 36 2e 31 30 33 20 7b 0a 20 20 73  tcl-16.103 {.  s
42f0: 65 74 20 72 65 73 20 7b 7d 0a 20 20 75 6e 73 65  et res {}.  unse
4300: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 78 0a  t -nocomplain x.
4310: 20 20 64 62 20 65 76 61 6c 20 2d 77 69 74 68 6f    db eval -witho
4320: 75 74 6e 75 6c 6c 73 20 7b 53 45 4c 45 43 54 20  utnulls {SELECT 
4330: 2a 20 46 52 4f 4d 20 74 31 7d 20 78 20 7b 0a 20  * FROM t1} x {. 
4340: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
4350: 78 28 61 29 20 5b 61 72 72 61 79 20 6e 61 6d 65  x(a) [array name
4360: 73 20 78 5d 0a 20 20 7d 0a 20 20 73 65 74 20 72  s x].  }.  set r
4370: 65 73 0a 7d 20 7b 31 20 7b 61 20 62 20 2a 7d 20  es.} {1 {a b *} 
4380: 32 20 7b 61 20 2a 7d 20 33 20 7b 61 20 62 20 2a  2 {a *} 3 {a b *
4390: 7d 7d 0a 0a 0a 0a 0a 0a 66 69 6e 69 73 68 5f 74  }}......finish_t
43a0: 65 73 74 0a                                      est.