System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a0893756bf9f0047ec2f6f799e3f053013f32e54:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 74 6b 74 2d 31 66 37 62 66 66  .#..# tkt-1f7bff
0060: 66 34 36 37 2e 65 61 67 6c 65 20 2d 2d 0d 0a 23  f467.eagle --..#
0070: 0d 0a 23 20 57 72 69 74 74 65 6e 20 62 79 20 4a  ..# Written by J
0080: 6f 65 20 4d 69 73 74 61 63 68 6b 69 6e 2e 0d 0a  oe Mistachkin...
0090: 23 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  # Released to th
00a0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00b0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00c0: 20 72 69 73 6b 21 0d 0a 23 0d 0a 23 23 23 23 23   risk!..#..#####
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 61  ##########....pa
0120: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61  ckage require Ea
0130: 67 6c 65 0d 0a 70 61 63 6b 61 67 65 20 72 65 71  gle..package req
0140: 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61  uire Eagle.Libra
0150: 72 79 0d 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ry..package requ
0160: 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a  ire Eagle.Test..
0170: 0d 0a 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75  ..runTestPrologu
0180: 65 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  e....###########
0190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01d0: 23 23 23 23 0d 0a 0d 0a 70 61 63 6b 61 67 65 20  ####....package 
01e0: 72 65 71 75 69 72 65 20 53 79 73 74 65 6d 2e 44  require System.D
01f0: 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 0d  ata.SQLite.Test.
0200: 0a 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72  .runSQLiteTestPr
0210: 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23 23 23 23  ologue....######
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
0270: 54 65 73 74 20 7b 74 65 73 74 20 74 6b 74 2d 31  Test {test tkt-1
0280: 66 37 62 66 66 66 34 36 37 2d 31 2e 30 20 7b 72  f7bfff467-1.0 {r
0290: 6f 6c 6c 62 61 63 6b 20 6e 65 73 74 65 64 20 74  ollback nested t
02a0: 72 61 6e 73 61 63 74 69 6f 6e 7d 20 2d 73 65 74  ransaction} -set
02b0: 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
02c0: 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 74 6b  [set fileName tk
02d0: 74 2d 31 66 37 62 66 66 66 34 36 37 2d 31 2e 30  t-1f7bfff467-1.0
02e0: 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  .db]..} -body {.
02f0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
0300: 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45  db {..    CREATE
0310: 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20   TABLE t1(x);.. 
0320: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0330: 31 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0d  1(x) VALUES(1);.
0340: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0350: 20 74 31 28 78 29 20 56 41 4c 55 45 53 28 32 29   t1(x) VALUES(2)
0360: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
0370: 54 4f 20 74 31 28 78 29 20 56 41 4c 55 45 53 28  TO t1(x) VALUES(
0380: 33 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 63 61  3);..  }....  ca
0390: 74 63 68 20 7b 0d 0a 20 20 20 20 73 65 74 20 72  tch {..    set r
03a0: 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
03b0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
03c0: 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
03d0: 5c 0d 0a 20 20 20 20 20 20 20 20 2d 65 78 65 63  \..        -exec
03e0: 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db "
03f0: 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20  SELECT COUNT(*) 
0400: 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20 20  FROM t1;"]....  
0410: 20 20 73 65 74 20 74 72 61 6e 73 61 63 74 69 6f    set transactio
0420: 6e 28 31 29 20 5b 73 71 6c 20 74 72 61 6e 73 61  n(1) [sql transa
0430: 63 74 69 6f 6e 20 62 65 67 69 6e 20 24 64 62 5d  ction begin $db]
0440: 0d 0a 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63  ....    sql exec
0450: 75 74 65 20 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ute -transaction
0460: 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 28 31 29   $transaction(1)
0470: 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 20 20   $db \..        
0480: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28  "INSERT INTO t1(
0490: 78 29 20 56 41 4c 55 45 53 28 34 29 3b 22 0d 0a  x) VALUES(4);"..
04a0: 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
04b0: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
04c0: 65 20 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 24  e -transaction $
04d0: 74 72 61 6e 73 61 63 74 69 6f 6e 28 31 29 20 5c  transaction(1) \
04e0: 0d 0a 20 20 20 20 20 20 20 20 2d 65 78 65 63 75  ..        -execu
04f0: 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61  te reader -forma
0500: 74 20 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20 20  t list $db \..  
0510: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78 20        "SELECT x 
0520: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0530: 20 78 3b 22 5d 0d 0a 0d 0a 20 20 20 20 73 65 74   x;"]....    set
0540: 20 74 72 61 6e 73 61 63 74 69 6f 6e 28 32 29 20   transaction(2) 
0550: 5b 73 71 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  [sql transaction
0560: 20 62 65 67 69 6e 20 24 64 62 5d 0d 0a 0d 0a 20   begin $db].... 
0570: 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d     sql execute -
0580: 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 74 72 61  transaction $tra
0590: 6e 73 61 63 74 69 6f 6e 28 32 29 20 24 64 62 20  nsaction(2) $db 
05a0: 5c 0d 0a 20 20 20 20 20 20 20 20 22 44 45 4c 45  \..        "DELE
05b0: 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  TE FROM t1 WHERE
05c0: 20 78 20 3d 20 32 3b 22 0d 0a 0d 0a 20 20 20 20   x = 2;"....    
05d0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
05e0: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 74 72 61  sql execute -tra
05f0: 6e 73 61 63 74 69 6f 6e 20 24 74 72 61 6e 73 61  nsaction $transa
0600: 63 74 69 6f 6e 28 32 29 20 5c 0d 0a 20 20 20 20  ction(2) \..    
0610: 20 20 20 20 2d 65 78 65 63 75 74 65 20 72 65 61      -execute rea
0620: 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74  der -format list
0630: 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 20 20   $db \..        
0640: 22 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74  "SELECT x FROM t
0650: 31 20 4f 52 44 45 52 20 42 59 20 78 3b 22 5d 0d  1 ORDER BY x;"].
0660: 0a 0d 0a 20 20 20 20 73 71 6c 20 74 72 61 6e 73  ...    sql trans
0670: 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  action rollback 
0680: 24 74 72 61 6e 73 61 63 74 69 6f 6e 28 32 29 0d  $transaction(2).
0690: 0a 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75  ...    sql execu
06a0: 74 65 20 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  te -transaction 
06b0: 24 74 72 61 6e 73 61 63 74 69 6f 6e 28 31 29 20  $transaction(1) 
06c0: 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 22  $db \..        "
06d0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 78 20  UPDATE t1 SET x 
06e0: 3d 20 39 20 57 48 45 52 45 20 78 20 3d 20 33 3b  = 9 WHERE x = 3;
06f0: 22 0d 0a 0d 0a 20 20 20 20 73 71 6c 20 74 72 61  "....    sql tra
0700: 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 20  nsaction commit 
0710: 24 74 72 61 6e 73 61 63 74 69 6f 6e 28 31 29 0d  $transaction(1).
0720: 0a 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72  ...    lappend r
0730: 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75  esult [sql execu
0740: 74 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d 65  te \..        -e
0750: 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66  xecute reader -f
0760: 6f 72 6d 61 74 20 6c 69 73 74 20 24 64 62 20 5c  ormat list $db \
0770: 0d 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  ..        "SELEC
0780: 54 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T x FROM t1 ORDE
0790: 52 20 42 59 20 78 3b 22 5d 0d 0a 0d 0a 20 20 20  R BY x;"]....   
07a0: 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 20 20 7d   set result..  }
07b0: 20 65 72 72 6f 72 0d 0a 0d 0a 20 20 65 78 74 72   error....  extr
07c0: 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c  actSystemDataSQL
07d0: 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  iteExceptionMess
07e0: 61 67 65 20 24 65 72 72 6f 72 0d 0a 7d 20 2d 63  age $error..} -c
07f0: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 61 74 63  leanup {..  catc
0800: 68 20 7b 73 71 6c 20 74 72 61 6e 73 61 63 74 69  h {sql transacti
0810: 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24 74 72 61  on rollback $tra
0820: 6e 73 61 63 74 69 6f 6e 28 32 29 7d 0d 0a 20 20  nsaction(2)}..  
0830: 63 61 74 63 68 20 7b 73 71 6c 20 74 72 61 6e 73  catch {sql trans
0840: 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  action rollback 
0850: 24 74 72 61 6e 73 61 63 74 69 6f 6e 28 31 29 7d  $transaction(1)}
0860: 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
0870: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 63  $fileName....  c
0880: 61 74 63 68 20 7b 72 65 6d 6f 76 65 44 62 54 72  atch {removeDbTr
0890: 61 6e 73 61 63 74 69 6f 6e 20 24 74 72 61 6e 73  ansaction $trans
08a0: 61 63 74 69 6f 6e 28 32 29 7d 0d 0a 20 20 63 61  action(2)}..  ca
08b0: 74 63 68 20 7b 72 65 6d 6f 76 65 44 62 54 72 61  tch {removeDbTra
08c0: 6e 73 61 63 74 69 6f 6e 20 24 74 72 61 6e 73 61  nsaction $transa
08d0: 63 74 69 6f 6e 28 31 29 7d 0d 0a 0d 0a 20 20 75  ction(1)}....  u
08e0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
08f0: 20 65 72 72 6f 72 20 72 65 73 75 6c 74 20 74 72   error result tr
0900: 61 6e 73 61 63 74 69 6f 6e 20 64 62 20 66 69 6c  ansaction db fil
0910: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
0920: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
0930: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
0940: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
0950: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
0960: 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
0970: 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73  ata.SQLite} -res
0980: 75 6c 74 20 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72  ult {unknown err
0990: 6f 72 20 2d 2d 20 4e 6f 20 74 72 61 6e 73 61 63  or -- No transac
09a0: 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 20 6f  tion is active o
09b0: 6e 20 74 68 69 73 5c 0d 0a 63 6f 6e 6e 65 63 74  n this\..connect
09c0: 69 6f 6e 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  ion}}....#######
09d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
09e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
09f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0a00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0a10: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
0a20: 65 73 74 20 7b 74 65 73 74 20 74 6b 74 2d 31 66  est {test tkt-1f
0a30: 37 62 66 66 66 34 36 37 2d 31 2e 31 20 7b 72 6f  7bfff467-1.1 {ro
0a40: 6c 6c 62 61 63 6b 20 6e 65 73 74 65 64 20 74 72  llback nested tr
0a50: 61 6e 73 61 63 74 69 6f 6e 7d 20 2d 73 65 74 75  ansaction} -setu
0a60: 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
0a70: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 74 6b 74  set fileName tkt
0a80: 2d 31 66 37 62 66 66 66 34 36 37 2d 31 2e 31 2e  -1f7bfff467-1.1.
0a90: 64 62 5d 20 22 22 20 22 22 20 22 22 20 41 6c 6c  db] "" "" "" All
0aa0: 6f 77 4e 65 73 74 65 64 54 72 61 6e 73 61 63 74  owNestedTransact
0ab0: 69 6f 6e 73 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  ions..} -body {.
0ac0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
0ad0: 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45  db {..    CREATE
0ae0: 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20   TABLE t1(x);.. 
0af0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0b00: 31 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0d  1(x) VALUES(1);.
0b10: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0b20: 20 74 31 28 78 29 20 56 41 4c 55 45 53 28 32 29   t1(x) VALUES(2)
0b30: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
0b40: 54 4f 20 74 31 28 78 29 20 56 41 4c 55 45 53 28  TO t1(x) VALUES(
0b50: 33 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  3);..  }....  se
0b60: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
0b70: 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
0b80: 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
0b90: 20 5c 0d 0a 20 20 20 20 20 20 2d 65 78 65 63 75   \..      -execu
0ba0: 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 53  te scalar $db "S
0bb0: 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46  ELECT COUNT(*) F
0bc0: 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73  ROM t1;"]....  s
0bd0: 65 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 28 31  et transaction(1
0be0: 29 20 5b 73 71 6c 20 74 72 61 6e 73 61 63 74 69  ) [sql transacti
0bf0: 6f 6e 20 62 65 67 69 6e 20 24 64 62 5d 0d 0a 0d  on begin $db]...
0c00: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d  .  sql execute -
0c10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 74 72 61  transaction $tra
0c20: 6e 73 61 63 74 69 6f 6e 28 31 29 20 24 64 62 20  nsaction(1) $db 
0c30: 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54  \..      "INSERT
0c40: 20 49 4e 54 4f 20 74 31 28 78 29 20 56 41 4c 55   INTO t1(x) VALU
0c50: 45 53 28 34 29 3b 22 0d 0a 0d 0a 20 20 6c 61 70  ES(4);"....  lap
0c60: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c  pend result [sql
0c70: 20 65 78 65 63 75 74 65 20 2d 74 72 61 6e 73 61   execute -transa
0c80: 63 74 69 6f 6e 20 24 74 72 61 6e 73 61 63 74 69  ction $transacti
0c90: 6f 6e 28 31 29 20 5c 0d 0a 20 20 20 20 20 20 2d  on(1) \..      -
0ca0: 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
0cb0: 66 6f 72 6d 61 74 20 6c 69 73 74 20 24 64 62 20  format list $db 
0cc0: 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54  \..      "SELECT
0cd0: 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   x FROM t1 ORDER
0ce0: 20 42 59 20 78 3b 22 5d 0d 0a 0d 0a 20 20 73 65   BY x;"]....  se
0cf0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 28 32 29  t transaction(2)
0d00: 20 5b 73 71 6c 20 74 72 61 6e 73 61 63 74 69 6f   [sql transactio
0d10: 6e 20 62 65 67 69 6e 20 24 64 62 5d 0d 0a 0d 0a  n begin $db]....
0d20: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 74    sql execute -t
0d30: 72 61 6e 73 61 63 74 69 6f 6e 20 24 74 72 61 6e  ransaction $tran
0d40: 73 61 63 74 69 6f 6e 28 32 29 20 24 64 62 20 5c  saction(2) $db \
0d50: 0d 0a 20 20 20 20 20 20 22 44 45 4c 45 54 45 20  ..      "DELETE 
0d60: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
0d70: 3d 20 32 3b 22 0d 0a 0d 0a 20 20 6c 61 70 70 65  = 2;"....  lappe
0d80: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
0d90: 78 65 63 75 74 65 20 2d 74 72 61 6e 73 61 63 74  xecute -transact
0da0: 69 6f 6e 20 24 74 72 61 6e 73 61 63 74 69 6f 6e  ion $transaction
0db0: 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 2d 65 78  (2) \..      -ex
0dc0: 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f  ecute reader -fo
0dd0: 72 6d 61 74 20 6c 69 73 74 20 24 64 62 20 5c 0d  rmat list $db \.
0de0: 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78  .      "SELECT x
0df0: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
0e00: 59 20 78 3b 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20  Y x;"]....  sql 
0e10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
0e20: 62 61 63 6b 20 24 74 72 61 6e 73 61 63 74 69 6f  back $transactio
0e30: 6e 28 32 29 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  n(2)....  sql ex
0e40: 65 63 75 74 65 20 2d 74 72 61 6e 73 61 63 74 69  ecute -transacti
0e50: 6f 6e 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 28  on $transaction(
0e60: 31 29 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  1) $db \..      
0e70: 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20 78  "UPDATE t1 SET x
0e80: 20 3d 20 39 20 57 48 45 52 45 20 78 20 3d 20 33   = 9 WHERE x = 3
0e90: 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 74 72 61 6e  ;"....  sql tran
0ea0: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69 74 20 24  saction commit $
0eb0: 74 72 61 6e 73 61 63 74 69 6f 6e 28 31 29 0d 0a  transaction(1)..
0ec0: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
0ed0: 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
0ee0: 5c 0d 0a 20 20 20 20 20 20 2d 65 78 65 63 75 74  \..      -execut
0ef0: 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
0f00: 20 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20 20 20   list $db \..   
0f10: 20 20 20 22 53 45 4c 45 43 54 20 78 20 46 52 4f     "SELECT x FRO
0f20: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b  M t1 ORDER BY x;
0f30: 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  "]....  set resu
0f40: 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
0f50: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
0f60: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
0f70: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
0f80: 65 73 75 6c 74 20 74 72 61 6e 73 61 63 74 69 6f  esult transactio
0f90: 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  n db fileName..}
0fa0: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
0fb0: 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
0fc0: 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  ect monoBug28 co
0fd0: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
0fe0: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a  e.DATA SQLite\..
0ff0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1000: 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 33 20 7b  te} -result {3 {
1010: 31 20 32 20 33 20 34 7d 20 7b 31 20 33 20 34 7d  1 2 3 4} {1 3 4}
1020: 20 7b 31 20 32 20 34 20 39 7d 7d 7d 0d 0a 0d 0a   {1 2 4 9}}}....
1030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
1080: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
1090: 20 74 6b 74 2d 31 66 37 62 66 66 66 34 36 37 2d   tkt-1f7bfff467-
10a0: 31 2e 32 20 7b 63 6f 6d 6d 69 74 20 6f 75 74 65  1.2 {commit oute
10b0: 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 20 2d  r transaction} -
10c0: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70  setup {..  setup
10d0: 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65  Db [set fileName
10e0: 20 74 6b 74 2d 31 66 37 62 66 66 66 34 36 37 2d   tkt-1f7bfff467-
10f0: 31 2e 32 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  1.2.db]..} -body
1100: 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
1110: 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45  e $db {..    CRE
1120: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
1130: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
1140: 4f 20 74 31 28 78 29 20 56 41 4c 55 45 53 28 31  O t1(x) VALUES(1
1150: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  );..  }....  set
1160: 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20   sql(1) { \..   
1170: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28   INSERT INTO t1(
1180: 78 29 20 56 41 4c 55 45 53 28 32 29 3b 20 5c 0d  x) VALUES(2); \.
1190: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
11a0: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e  l(2) { \..    IN
11b0: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 29 20  SERT INTO t1(x) 
11c0: 56 41 4c 55 45 53 28 33 29 3b 20 5c 0d 0a 20 20  VALUES(3); \..  
11d0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  }....  set id [o
11e0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
11f0: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
1200: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
1210: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
1220: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
1230: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
1240: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 73 65 74  fileName]..  set
1250: 20 66 6c 61 67 73 20 41 6c 6c 6f 77 4e 65 73 74   flags AllowNest
1260: 65 64 54 72 61 6e 73 61 63 74 69 6f 6e 73 0d 0a  edTransactions..
1270: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
1280: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
1290: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
12a0: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
12b0: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
12c0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
12d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d  .Data.SQLite;...
12e0: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
12f0: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
1300: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
1310: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
1320: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
1330: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
1340: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
1350: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
1360: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
1370: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
1380: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
1390: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
13a0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
13b0: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
13c0: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
13d0: 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69  [getTestProperti
13e0: 65 73 20 24 7b 66 6c 61 67 73 7d 5d 22 29 29 0d  es ${flags}]")).
13f0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
1400: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
1410: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
1420: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
1430: 67 20 28 53 51 4c 69 74 65 54 72 61 6e 73 61 63  g (SQLiteTransac
1440: 74 69 6f 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  tion transaction
1450: 31 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1 =..           
1460: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
1470: 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
1480: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
1490: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14a0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
14b0: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 31 20  ommand command1 
14c0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d  = new SQLiteComm
14d0: 61 6e 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  and(..          
14e0: 20 20 20 20 20 20 20 20 22 24 7b 73 71 6c 28 31          "${sql(1
14f0: 29 7d 22 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 29  )}", connection)
1500: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1520: 20 20 20 20 63 6f 6d 6d 61 6e 64 31 2e 54 72 61      command1.Tra
1530: 6e 73 61 63 74 69 6f 6e 20 3d 20 74 72 61 6e 73  nsaction = trans
1540: 61 63 74 69 6f 6e 31 3b 0d 0a 20 20 20 20 20 20  action1;..      
1550: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
1560: 64 31 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65  d1.ExecuteNonQue
1570: 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ry();..         
1580: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1590: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
15a0: 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e  QLiteTransaction
15b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 32 20 3d 0d   transaction2 =.
15c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15d0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65     connection.Be
15e0: 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 29  ginTransaction()
15f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1600: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1610: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
1620: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
1630: 32 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  2 = new SQLiteCo
1640: 6d 6d 61 6e 64 28 0d 0a 20 20 20 20 20 20 20 20  mmand(..        
1650: 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7b 73              "${s
1660: 71 6c 28 32 29 7d 22 2c 20 63 6f 6e 6e 65 63 74  ql(2)}", connect
1670: 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ion))..         
1680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1690: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
16a0: 61 6e 64 32 2e 54 72 61 6e 73 61 63 74 69 6f 6e  and2.Transaction
16b0: 20 3d 20 74 72 61 6e 73 61 63 74 69 6f 6e 32 3b   = transaction2;
16c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d0: 20 20 20 20 63 6f 6d 6d 61 6e 64 32 2e 45 78 65      command2.Exe
16e0: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
16f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1700: 20 20 20 20 20 74 72 61 6e 73 61 63 74 69 6f 6e       transaction
1710: 31 2e 43 6f 6d 6d 69 74 28 29 3b 0d 0a 20 20 20  1.Commit();..   
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1750: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1760: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1770: 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75  .    }..  }] tru
1780: 65 20 66 61 6c 73 65 20 74 72 75 65 20 72 65 73  e false true res
1790: 75 6c 74 73 20 65 72 72 6f 72 73 20 53 79 73 74  ults errors Syst
17a0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
17b0: 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63  ll]....  list $c
17c0: 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a  ode $results \..
17d0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e        [expr {[in
17e0: 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73  fo exists errors
17f0: 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22  ] ? $errors : ""
1800: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
1810: 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  r {$code eq "Ok"
1820: 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   ? [catch {..   
1830: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
1840: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
1850: 2e 54 65 73 74 24 7b 69 64 7d 20 4d 61 69 6e 0d  .Test${id} Main.
1860: 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
1870: 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
1880: 22 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a  "]}] $result \..
1890: 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75        [sql execu
18a0: 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64  te -execute read
18b0: 65 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20  er -format list 
18c0: 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  $db \..         
18d0: 20 22 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20   "SELECT x FROM 
18e0: 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b 22 5d  t1 ORDER BY x;"]
18f0: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
1900: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
1910: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
1920: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
1930: 75 6c 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ult results erro
1940: 72 73 20 63 6f 64 65 0d 0a 20 20 75 6e 73 65 74  rs code..  unset
1950: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 71 6c   -nocomplain sql
1960: 20 66 6c 61 67 73 20 64 61 74 61 53 6f 75 72 63   flags dataSourc
1970: 65 20 69 64 20 64 62 20 66 69 6c 65 4e 61 6d 65  e id db fileName
1980: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
1990: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
19a0: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
19b0: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
19c0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
19d0: 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
19e0: 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68  QLite compileCSh
19f0: 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65  arp} -match rege
1a00: 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c  xp -result {^Ok\
1a10: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
1a20: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
1a30: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
1a40: 5c 7d 20 30 20 5c 7b 5c 7d 20 5c 7b 31 20 32 20  \} 0 \{\} \{1 2 
1a50: 33 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  3\}$}}....######
1a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aa0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
1ab0: 54 65 73 74 20 7b 74 65 73 74 20 74 6b 74 2d 31  Test {test tkt-1
1ac0: 66 37 62 66 66 66 34 36 37 2d 31 2e 33 20 7b 72  f7bfff467-1.3 {r
1ad0: 6f 6c 6c 62 61 63 6b 20 6f 75 74 65 72 20 74 72  ollback outer tr
1ae0: 61 6e 73 61 63 74 69 6f 6e 7d 20 2d 73 65 74 75  ansaction} -setu
1af0: 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
1b00: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 74 6b 74  set fileName tkt
1b10: 2d 31 66 37 62 66 66 66 34 36 37 2d 31 2e 33 2e  -1f7bfff467-1.3.
1b20: 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  db]..} -body {..
1b30: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
1b40: 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20  b {..    CREATE 
1b50: 54 41 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20 20  TABLE t1(x);..  
1b60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
1b70: 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a  (x) VALUES(1);..
1b80: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
1b90: 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53  (1) { \..    INS
1ba0: 45 52 54 20 49 4e 54 4f 20 74 31 28 78 29 20 56  ERT INTO t1(x) V
1bb0: 41 4c 55 45 53 28 32 29 3b 20 5c 0d 0a 20 20 7d  ALUES(2); \..  }
1bc0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
1bd0: 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54   { \..    INSERT
1be0: 20 49 4e 54 4f 20 74 31 28 78 29 20 56 41 4c 55   INTO t1(x) VALU
1bf0: 45 53 28 33 29 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ES(3); \..  }...
1c00: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
1c10: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
1c20: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
1c30: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
1c40: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
1c50: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
1c60: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
1c70: 4e 61 6d 65 5d 0d 0a 20 20 73 65 74 20 66 6c 61  Name]..  set fla
1c80: 67 73 20 41 6c 6c 6f 77 4e 65 73 74 65 64 54 72  gs AllowNestedTr
1c90: 61 6e 73 61 63 74 69 6f 6e 73 0d 0a 0d 0a 20 20  ansactions....  
1ca0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1cb0: 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
1cc0: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
1cd0: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
1ce0: 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
1cf0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
1d00: 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20  a.SQLite;....   
1d10: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
1d20: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
1d30: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74  .      public st
1d40: 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  atic class Test$
1d50: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
1d60: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1d70: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
1d80: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1d90: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
1da0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
1db0: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
1dc0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1dd0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1de0: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
1df0: 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74  dataSource};[get
1e00: 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 20 24  TestProperties $
1e10: 7b 66 6c 61 67 73 7d 5d 22 29 29 0d 0a 20 20 20  {flags}]"))..   
1e20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e30: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
1e40: 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  .Open();....    
1e50: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
1e60: 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e  QLiteTransaction
1e70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 31 20 3d 0d   transaction1 =.
1e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69   connection.Begi
1ea0: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d  nTransaction()).
1eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
1ed0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
1ee0: 6e 64 20 63 6f 6d 6d 61 6e 64 31 20 3d 20 6e 65  nd command1 = ne
1ef0: 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28  w SQLiteCommand(
1f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f10: 20 20 20 20 22 24 7b 73 71 6c 28 31 29 7d 22 2c      "${sql(1)}",
1f20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20   connection)).. 
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f50: 63 6f 6d 6d 61 6e 64 31 2e 54 72 61 6e 73 61 63  command1.Transac
1f60: 74 69 6f 6e 20 3d 20 74 72 61 6e 73 61 63 74 69  tion = transacti
1f70: 6f 6e 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on1;..          
1f80: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 31 2e 45        command1.E
1f90: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
1fa0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1fb0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fc0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
1fd0: 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 74 72 61  eTransaction tra
1fe0: 6e 73 61 63 74 69 6f 6e 32 20 3d 0d 0a 20 20 20  nsaction2 =..   
1ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2000: 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69 6e 54  onnection.BeginT
2010: 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d 0a 20  ransaction()).. 
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2040: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
2050: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 32 20 3d 20  mand command2 = 
2060: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  new SQLiteComman
2070: 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
2080: 20 20 20 20 20 20 20 20 22 24 7b 73 71 6c 28 32          "${sql(2
2090: 29 7d 22 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 29  )}", connection)
20a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20c0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 32          command2
20d0: 2e 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 74  .Transaction = t
20e0: 72 61 6e 73 61 63 74 69 6f 6e 32 3b 0d 0a 20 20  ransaction2;..  
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 63 6f 6d 6d 61 6e 64 32 2e 45 78 65 63 75 74 65  command2.Execute
2110: 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 0d 0a 20  NonQuery();.... 
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2130: 20 74 72 61 6e 73 61 63 74 69 6f 6e 31 2e 52 6f   transaction1.Ro
2140: 6c 6c 62 61 63 6b 28 29 3b 0d 0a 20 20 20 20 20  llback();..     
2150: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2160: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2170: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2180: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2190: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
21a0: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
21b0: 66 61 6c 73 65 20 74 72 75 65 20 72 65 73 75 6c  false true resul
21c0: 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d  ts errors System
21d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
21e0: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
21f0: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
2200: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
2210: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
2220: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
2230: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
2240: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
2250: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
2260: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
2270: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
2280: 65 73 74 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20  est${id} Main.. 
2290: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
22a0: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
22b0: 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20  }] $result \..  
22c0: 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65      [sql execute
22d0: 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
22e0: 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20 24 64   -format list $d
22f0: 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  b \..          "
2300: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
2310: 20 4f 52 44 45 52 20 42 59 20 78 3b 22 5d 0d 0a   ORDER BY x;"]..
2320: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
2330: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
2340: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
2350: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
2360: 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  t results errors
2370: 20 63 6f 64 65 0d 0a 20 20 75 6e 73 65 74 20 2d   code..  unset -
2380: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 71 6c 20 66  nocomplain sql f
2390: 6c 61 67 73 20 64 61 74 61 53 6f 75 72 63 65 20  lags dataSource 
23a0: 69 64 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  id db fileName..
23b0: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
23c0: 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62  eagle command.ob
23d0: 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63  ject monoBug28 c
23e0: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
23f0: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d  le.DATA SQLite\.
2400: 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
2410: 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72  ite compileCShar
2420: 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70  p} -match regexp
2430: 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a   -result {^Ok\..
2440: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
2450: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
2460: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
2470: 20 30 20 5c 7b 5c 7d 20 31 24 7d 7d 0d 0a 0d 0a   0 \{\} 1$}}....
2480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
24d0: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
24e0: 20 74 6b 74 2d 31 66 37 62 66 66 66 34 36 37 2d   tkt-1f7bfff467-
24f0: 31 2e 34 20 7b 63 6f 6d 6d 69 74 20 6d 69 64 64  1.4 {commit midd
2500: 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 20  le transaction} 
2510: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
2520: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
2530: 65 20 74 6b 74 2d 31 66 37 62 66 66 66 34 36 37  e tkt-1f7bfff467
2540: 2d 31 2e 34 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64  -1.4.db]..} -bod
2550: 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
2560: 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52  te $db {..    CR
2570: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29  EATE TABLE t1(x)
2580: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
2590: 54 4f 20 74 31 28 78 29 20 56 41 4c 55 45 53 28  TO t1(x) VALUES(
25a0: 31 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  1);..  }....  se
25b0: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
25c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
25d0: 28 78 29 20 56 41 4c 55 45 53 28 32 29 3b 20 5c  (x) VALUES(2); \
25e0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
25f0: 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49  ql(2) { \..    I
2600: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 29  NSERT INTO t1(x)
2610: 20 56 41 4c 55 45 53 28 33 29 3b 20 5c 0d 0a 20   VALUES(3); \.. 
2620: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
2630: 33 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53 45  3) { \..    INSE
2640: 52 54 20 49 4e 54 4f 20 74 31 28 78 29 20 56 41  RT INTO t1(x) VA
2650: 4c 55 45 53 28 34 29 3b 20 5c 0d 0a 20 20 7d 0d  LUES(4); \..  }.
2660: 0a 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a  ...  set id [obj
2670: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
2680: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
2690: 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20   NextId]..  set 
26a0: 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65  dataSource [file
26b0: 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61   join [getDataba
26c0: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69  seDirectory] $fi
26d0: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 73 65 74 20 66  leName]..  set f
26e0: 6c 61 67 73 20 41 6c 6c 6f 77 4e 65 73 74 65 64  lags AllowNested
26f0: 54 72 61 6e 73 61 63 74 69 6f 6e 73 0d 0a 0d 0a  Transactions....
2700: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
2710: 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ain results erro
2720: 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65  rs....  set code
2730: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57   [compileCSharpW
2740: 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20  ith [subst {..  
2750: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
2760: 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20  ata.SQLite;.... 
2770: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
2780: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
2790: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
27a0: 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73  static class Tes
27b0: 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d  t${id}..      {.
27c0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
27d0: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
27e0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
27f0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2800: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2810: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
2820: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
2830: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
2840: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
2850: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
2860: 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
2870: 20 24 7b 66 6c 61 67 73 7d 5d 22 29 29 0d 0a 20   ${flags}]")).. 
2880: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2890: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
28a0: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20  on.Open();....  
28b0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
28c0: 28 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69  (SQLiteTransacti
28d0: 6f 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 31 20  on transaction1 
28e0: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
28f0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65     connection.Be
2900: 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 29  ginTransaction()
2910: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2930: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
2940: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 31 20 3d 20  mand command1 = 
2950: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  new SQLiteComman
2960: 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
2970: 20 20 20 20 20 20 22 24 7b 73 71 6c 28 31 29 7d        "${sql(1)}
2980: 22 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d  ", connection)).
2990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
29a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b0: 20 20 63 6f 6d 6d 61 6e 64 31 2e 54 72 61 6e 73    command1.Trans
29c0: 61 63 74 69 6f 6e 20 3d 20 74 72 61 6e 73 61 63  action = transac
29d0: 74 69 6f 6e 31 3b 0d 0a 20 20 20 20 20 20 20 20  tion1;..        
29e0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 31          command1
29f0: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
2a00: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
2a10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a20: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2a30: 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 74  iteTransaction t
2a40: 72 61 6e 73 61 63 74 69 6f 6e 32 20 3d 0d 0a 20  ransaction2 =.. 
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69   connection.Begi
2a70: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d  nTransaction()).
2a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
2a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
2ab0: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 32 20  ommand command2 
2ac0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d  = new SQLiteComm
2ad0: 61 6e 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  and(..          
2ae0: 20 20 20 20 20 20 20 20 20 20 22 24 7b 73 71 6c            "${sql
2af0: 28 32 29 7d 22 2c 20 63 6f 6e 6e 65 63 74 69 6f  (2)}", connectio
2b00: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
2b10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b20: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
2b30: 64 32 2e 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d  d2.Transaction =
2b40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 32 3b 0d 0a   transaction2;..
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 63 6f 6d 6d 61 6e 64 32 2e 45 78 65 63 75    command2.Execu
2b70: 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20  teNonQuery();.. 
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ba0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
2bb0: 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 74 72 61  eTransaction tra
2bc0: 6e 73 61 63 74 69 6f 6e 33 20 3d 0d 0a 20 20 20  nsaction3 =..   
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69   connection.Begi
2bf0: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d  nTransaction()).
2c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c20: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2c30: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
2c40: 6e 64 33 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  nd3 = new SQLite
2c50: 43 6f 6d 6d 61 6e 64 28 0d 0a 20 20 20 20 20 20  Command(..      
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c70: 22 24 7b 73 71 6c 28 33 29 7d 22 2c 20 63 6f 6e  "${sql(3)}", con
2c80: 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20  nection))..     
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb0: 20 20 20 20 63 6f 6d 6d 61 6e 64 33 2e 54 72 61      command3.Tra
2cc0: 6e 73 61 63 74 69 6f 6e 20 3d 20 74 72 61 6e 73  nsaction = trans
2cd0: 61 63 74 69 6f 6e 33 3b 0d 0a 20 20 20 20 20 20  action3;..      
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2cf0: 6d 6d 61 6e 64 33 2e 45 78 65 63 75 74 65 4e 6f  mmand3.ExecuteNo
2d00: 6e 51 75 65 72 79 28 29 3b 0d 0a 0d 0a 20 20 20  nQuery();....   
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 32 2e 43 6f   transaction2.Co
2d30: 6d 6d 69 74 28 29 3b 0d 0a 20 20 20 20 20 20 20  mmit();..       
2d40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2d70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d80: 20 20 74 72 61 6e 73 61 63 74 69 6f 6e 31 2e 43    transaction1.C
2d90: 6f 6d 6d 69 74 28 29 3b 0d 0a 20 20 20 20 20 20  ommit();..      
2da0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2db0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2dc0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2dd0: 0a 20 20 7d 5d 20 74 72 75 65 20 66 61 6c 73 65  .  }] true false
2de0: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
2df0: 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61  rors System.Data
2e00: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a  .SQLite.dll]....
2e10: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
2e20: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
2e30: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
2e40: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
2e50: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
2e60: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
2e70: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
2e80: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
2e90: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
2ea0: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
2eb0: 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20  id} Main..      
2ec0: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
2ed0: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
2ee0: 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20 5b  esult \..      [
2ef0: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
2f00: 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72  cute reader -for
2f10: 6d 61 74 20 6c 69 73 74 20 24 64 62 20 5c 0d 0a  mat list $db \..
2f20: 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43            "SELEC
2f30: 54 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T x FROM t1 ORDE
2f40: 52 20 42 59 20 78 3b 22 5d 0d 0a 7d 20 2d 63 6c  R BY x;"]..} -cl
2f50: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
2f60: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
2f70: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
2f80: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 72 65 73  plain result res
2f90: 75 6c 74 73 20 65 72 72 6f 72 73 20 63 6f 64 65  ults errors code
2fa0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
2fb0: 70 6c 61 69 6e 20 73 71 6c 20 66 6c 61 67 73 20  plain sql flags 
2fc0: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 64 62  dataSource id db
2fd0: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
2fe0: 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
2ff0: 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
3000: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
3010: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
3020: 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74  TA SQLite\..Syst
3030: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63  em.Data.SQLite c
3040: 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d  ompileCSharp} -m
3050: 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73  atch regexp -res
3060: 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65  ult {^Ok\..Syste
3070: 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c  m#CodeDom#Compil
3080: 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c  er#CompilerResul
3090: 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b  ts#\d+ \{\} 0 \{
30a0: 5c 7d 20 5c 7b 31 20 32 20 33 20 34 5c 7d 24 7d  \} \{1 2 3 4\}$}
30b0: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
30c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3100: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
3110: 7b 74 65 73 74 20 74 6b 74 2d 31 66 37 62 66 66  {test tkt-1f7bff
3120: 66 34 36 37 2d 31 2e 35 20 7b 72 6f 6c 6c 62 61  f467-1.5 {rollba
3130: 63 6b 20 6d 69 64 64 6c 65 20 74 72 61 6e 73 61  ck middle transa
3140: 63 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0d  ction} -setup {.
3150: 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
3160: 66 69 6c 65 4e 61 6d 65 20 74 6b 74 2d 31 66 37  fileName tkt-1f7
3170: 62 66 66 66 34 36 37 2d 31 2e 35 2e 64 62 5d 0d  bfff467-1.5.db].
3180: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71  .} -body {..  sq
3190: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d  l execute $db {.
31a0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
31b0: 45 20 74 31 28 78 29 3b 0d 0a 20 20 20 20 49 4e  E t1(x);..    IN
31c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 29 20  SERT INTO t1(x) 
31d0: 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20 20 7d 0d  VALUES(1);..  }.
31e0: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20  ...  set sql(1) 
31f0: 7b 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  { \..    INSERT 
3200: 49 4e 54 4f 20 74 31 28 78 29 20 56 41 4c 55 45  INTO t1(x) VALUE
3210: 53 28 32 29 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  S(2); \..  }....
3220: 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c    set sql(2) { \
3230: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
3240: 4f 20 74 31 28 78 29 20 56 41 4c 55 45 53 28 33  O t1(x) VALUES(3
3250: 29 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  ); \..  }....  s
3260: 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20  et sql(3) { \.. 
3270: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3280: 31 28 78 29 20 56 41 4c 55 45 53 28 34 29 3b 20  1(x) VALUES(4); 
3290: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
32a0: 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  id [object invok
32b0: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
32c0: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d  tActive NextId].
32d0: 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63  .  set dataSourc
32e0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
32f0: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
3300: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ry] $fileName]..
3310: 20 20 73 65 74 20 66 6c 61 67 73 20 41 6c 6c 6f    set flags Allo
3320: 77 4e 65 73 74 65 64 54 72 61 6e 73 61 63 74 69  wNestedTransacti
3330: 6f 6e 73 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ons....  unset -
3340: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
3350: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
3360: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
3370: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
3380: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
3390: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
33a0: 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  e;....    namesp
33b0: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
33c0: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
33d0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c  public static cl
33e0: 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20  ass Test${id}.. 
33f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3400: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
3410: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
3420: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3430: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
3440: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
3450: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
3460: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
3470: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
3480: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
3490: 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f  rce};[getTestPro
34a0: 70 65 72 74 69 65 73 20 24 7b 66 6c 61 67 73 7d  perties ${flags}
34b0: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
34c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
34d0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
34e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34f0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 54 72   using (SQLiteTr
3500: 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73 61  ansaction transa
3510: 63 74 69 6f 6e 31 20 3d 0d 0a 20 20 20 20 20 20  ction1 =..      
3520: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
3530: 74 69 6f 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61  tion.BeginTransa
3540: 63 74 69 6f 6e 28 29 29 0d 0a 20 20 20 20 20 20  ction())..      
3550: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3560: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
3570: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
3580: 61 6e 64 31 20 3d 20 6e 65 77 20 53 51 4c 69 74  and1 = new SQLit
3590: 65 43 6f 6d 6d 61 6e 64 28 0d 0a 20 20 20 20 20  eCommand(..     
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7b               "${
35b0: 73 71 6c 28 31 29 7d 22 2c 20 63 6f 6e 6e 65 63  sql(1)}", connec
35c0: 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  tion))..        
35d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35e0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
35f0: 31 2e 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  1.Transaction = 
3600: 74 72 61 6e 73 61 63 74 69 6f 6e 31 3b 0d 0a 20  transaction1;.. 
3610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
3620: 6f 6d 6d 61 6e 64 31 2e 45 78 65 63 75 74 65 4e  ommand1.ExecuteN
3630: 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20  onQuery();..    
3640: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
3660: 6e 67 20 28 53 51 4c 69 74 65 54 72 61 6e 73 61  ng (SQLiteTransa
3670: 63 74 69 6f 6e 20 74 72 61 6e 73 61 63 74 69 6f  ction transactio
3680: 6e 32 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  n2 =..          
3690: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
36a0: 6f 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61 63 74  on.BeginTransact
36b0: 69 6f 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ion())..        
36c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36d0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
36e0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
36f0: 6d 6d 61 6e 64 32 20 3d 20 6e 65 77 20 53 51 4c  mmand2 = new SQL
3700: 69 74 65 43 6f 6d 6d 61 6e 64 28 0d 0a 20 20 20  iteCommand(..   
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3720: 20 22 24 7b 73 71 6c 28 32 29 7d 22 2c 20 63 6f   "${sql(2)}", co
3730: 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20  nnection))..    
3740: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3760: 20 63 6f 6d 6d 61 6e 64 32 2e 54 72 61 6e 73 61   command2.Transa
3770: 63 74 69 6f 6e 20 3d 20 74 72 61 6e 73 61 63 74  ction = transact
3780: 69 6f 6e 32 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion2;..         
3790: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
37a0: 32 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  2.ExecuteNonQuer
37b0: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
37c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
37d0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
37e0: 20 28 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74   (SQLiteTransact
37f0: 69 6f 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 33  ion transaction3
3800: 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
3810: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
3820: 6f 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61 63 74  on.BeginTransact
3830: 69 6f 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ion())..        
3840: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3850: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
3860: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
3870: 64 20 63 6f 6d 6d 61 6e 64 33 20 3d 20 6e 65 77  d command3 = new
3880: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 0d   SQLiteCommand(.
3890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38a0: 20 20 20 20 20 20 20 22 24 7b 73 71 6c 28 33 29         "${sql(3)
38b0: 7d 22 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29  }", connection))
38c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38e0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
38f0: 6e 64 33 2e 54 72 61 6e 73 61 63 74 69 6f 6e 20  nd3.Transaction 
3900: 3d 20 74 72 61 6e 73 61 63 74 69 6f 6e 33 3b 0d  = transaction3;.
3910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3920: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 33 2e 45 78       command3.Ex
3930: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
3940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3950: 20 20 20 20 20 20 20 20 74 72 61 6e 73 61 63 74          transact
3960: 69 6f 6e 32 2e 52 6f 6c 6c 62 61 63 6b 28 29 3b  ion2.Rollback();
3970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3980: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3990: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
39a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
39b0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 6e 73             trans
39c0: 61 63 74 69 6f 6e 31 2e 43 6f 6d 6d 69 74 28 29  action1.Commit()
39d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
39e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
39f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3a00: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
3a10: 72 75 65 20 66 61 6c 73 65 20 74 72 75 65 20 72  rue false true r
3a20: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53 79  esults errors Sy
3a30: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
3a40: 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  .dll]....  list 
3a50: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
3a60: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
3a70: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
3a80: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
3a90: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
3aa0: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
3ab0: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
3ac0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
3ad0: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
3ae0: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 4d 61 69  d}.Test${id} Mai
3af0: 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  n..      } resul
3b00: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
3b10: 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c   ""]}] $result \
3b20: 0d 0a 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65  ..      [sql exe
3b30: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
3b40: 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73  ader -format lis
3b50: 74 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 20  t $db \..       
3b60: 20 20 20 22 53 45 4c 45 43 54 20 78 20 46 52 4f     "SELECT x FRO
3b70: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b  M t1 ORDER BY x;
3b80: 22 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  "]..} -cleanup {
3b90: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
3ba0: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
3bb0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
3bc0: 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20 65 72  esult results er
3bd0: 72 6f 72 73 20 63 6f 64 65 0d 0a 20 20 75 6e 73  rors code..  uns
3be0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73  et -nocomplain s
3bf0: 71 6c 20 66 6c 61 67 73 20 64 61 74 61 53 6f 75  ql flags dataSou
3c00: 72 63 65 20 69 64 20 64 62 20 66 69 6c 65 4e 61  rce id db fileNa
3c10: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
3c20: 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e  ts {eagle comman
3c30: 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67  d.object monoBug
3c40: 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
3c50: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
3c60: 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61  te\..System.Data
3c70: 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43  .SQLite compileC
3c80: 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65  Sharp} -match re
3c90: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f  gexp -result {^O
3ca0: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
3cb0: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
3cc0: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
3cd0: 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20 5c 7b 31 20  \{\} 0 \{\} \{1 
3ce0: 32 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  2\}$}}....######
3cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d30: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
3d40: 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67  SQLiteTestEpilog
3d50: 75 65 0d 0a 72 75 6e 54 65 73 74 45 70 69 6c 6f  ue..runTestEpilo
3d60: 67 75 65 0d 0a                                   gue..