System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact f445931dcfaa4145d4d649bae7d7b80097b9a9b8:


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 74 72 75 65 20 74 72 75 65 20 72 65 73 75  e true true resu
1790: 6c 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65  lts errors Syste
17a0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
17b0: 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  l]....  list $co
17c0: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
17d0: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
17e0: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
17f0: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
1800: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
1810: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
1820: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
1830: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
1840: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
1850: 54 65 73 74 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a  Test${id} Main..
1860: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
1870: 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
1880: 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20  ]}] $result \.. 
1890: 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74       [sql execut
18a0: 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
18b0: 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20 24  r -format list $
18c0: 64 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  db \..          
18d0: 22 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74  "SELECT x FROM t
18e0: 31 20 4f 52 44 45 52 20 42 59 20 78 3b 22 5d 0d  1 ORDER BY x;"].
18f0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
1900: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
1910: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
1920: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
1930: 6c 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  lt results error
1940: 73 20 63 6f 64 65 0d 0a 20 20 75 6e 73 65 74 20  s code..  unset 
1950: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 71 6c 20  -nocomplain sql 
1960: 66 6c 61 67 73 20 64 61 74 61 53 6f 75 72 63 65  flags dataSource
1970: 20 69 64 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d   id db fileName.
1980: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
1990: 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f  {eagle command.o
19a0: 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20  bject monoBug28 
19b0: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
19c0: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c  ile.DATA SQLite\
19d0: 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  ..System.Data.SQ
19e0: 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61  Lite compileCSha
19f0: 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78  rp} -match regex
1a00: 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  p -result {^Ok\.
1a10: 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
1a20: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
1a30: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
1a40: 7d 20 30 20 5c 7b 5c 7d 20 5c 7b 31 20 32 20 33  } 0 \{\} \{1 2 3
1a50: 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  \}$}}....#######
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 0d 0a 0d 0a 72 75 6e 54  ########....runT
1ab0: 65 73 74 20 7b 74 65 73 74 20 74 6b 74 2d 31 66  est {test tkt-1f
1ac0: 37 62 66 66 66 34 36 37 2d 31 2e 33 20 7b 72 6f  7bfff467-1.3 {ro
1ad0: 6c 6c 62 61 63 6b 20 6f 75 74 65 72 20 74 72 61  llback outer tra
1ae0: 6e 73 61 63 74 69 6f 6e 7d 20 2d 73 65 74 75 70  nsaction} -setup
1af0: 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73   {..  setupDb [s
1b00: 65 74 20 66 69 6c 65 4e 61 6d 65 20 74 6b 74 2d  et fileName tkt-
1b10: 31 66 37 62 66 66 66 34 36 37 2d 31 2e 33 2e 64  1f7bfff467-1.3.d
1b20: 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
1b30: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
1b40: 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54   {..    CREATE T
1b50: 41 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20 20 20  ABLE t1(x);..   
1b60: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28   INSERT INTO t1(
1b70: 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20  x) VALUES(1);.. 
1b80: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
1b90: 31 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53 45  1) { \..    INSE
1ba0: 52 54 20 49 4e 54 4f 20 74 31 28 78 29 20 56 41  RT INTO t1(x) VA
1bb0: 4c 55 45 53 28 32 29 3b 20 5c 0d 0a 20 20 7d 0d  LUES(2); \..  }.
1bc0: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20  ...  set sql(2) 
1bd0: 7b 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  { \..    INSERT 
1be0: 49 4e 54 4f 20 74 31 28 78 29 20 56 41 4c 55 45  INTO t1(x) VALUE
1bf0: 53 28 33 29 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  S(3); \..  }....
1c00: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
1c10: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
1c20: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
1c30: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
1c40: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
1c50: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
1c60: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
1c70: 61 6d 65 5d 0d 0a 20 20 73 65 74 20 66 6c 61 67  ame]..  set flag
1c80: 73 20 41 6c 6c 6f 77 4e 65 73 74 65 64 54 72 61  s AllowNestedTra
1c90: 6e 73 61 63 74 69 6f 6e 73 0d 0a 0d 0a 20 20 75  nsactions....  u
1ca0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1cb0: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d   results errors.
1cc0: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
1cd0: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
1ce0: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75   [subst {..    u
1cf0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
1d00: 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20  .SQLite;....    
1d10: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
1d20: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
1d30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1d40: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
1d50: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
1d60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1d70: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
1d80: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1d90: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
1da0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
1db0: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
1dc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
1dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1de0: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
1df0: 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54  ataSource};[getT
1e00: 65 73 74 50 72 6f 70 65 72 74 69 65 73 20 24 7b  estProperties ${
1e10: 66 6c 61 67 73 7d 5d 22 29 29 0d 0a 20 20 20 20  flags}]"))..    
1e20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e30: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
1e40: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
1e50: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
1e60: 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 20  LiteTransaction 
1e70: 74 72 61 6e 73 61 63 74 69 6f 6e 31 20 3d 0d 0a  transaction1 =..
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e90: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69 6e  connection.Begin
1ea0: 54 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d 0a  Transaction())..
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
1ed0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
1ee0: 64 20 63 6f 6d 6d 61 6e 64 31 20 3d 20 6e 65 77  d command1 = new
1ef0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 0d   SQLiteCommand(.
1f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f10: 20 20 20 22 24 7b 73 71 6c 28 31 29 7d 22 2c 20     "${sql(1)}", 
1f20: 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20  connection))..  
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1f50: 6f 6d 6d 61 6e 64 31 2e 54 72 61 6e 73 61 63 74  ommand1.Transact
1f60: 69 6f 6e 20 3d 20 74 72 61 6e 73 61 63 74 69 6f  ion = transactio
1f70: 6e 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n1;..           
1f80: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 31 2e 45 78       command1.Ex
1f90: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
1fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fb0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fc0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
1fd0: 54 72 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e  Transaction tran
1fe0: 73 61 63 74 69 6f 6e 32 20 3d 0d 0a 20 20 20 20  saction2 =..    
1ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2000: 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69 6e 54 72  nnection.BeginTr
2010: 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d 0a 20 20  ansaction())..  
2020: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2040: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
2050: 61 6e 64 20 63 6f 6d 6d 61 6e 64 32 20 3d 20 6e  and command2 = n
2060: 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  ew SQLiteCommand
2070: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2080: 20 20 20 20 20 20 20 22 24 7b 73 71 6c 28 32 29         "${sql(2)
2090: 7d 22 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29  }", connection))
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20c0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 32 2e         command2.
20d0: 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 74 72  Transaction = tr
20e0: 61 6e 73 61 63 74 69 6f 6e 32 3b 0d 0a 20 20 20  ansaction2;..   
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2100: 6f 6d 6d 61 6e 64 32 2e 45 78 65 63 75 74 65 4e  ommand2.ExecuteN
2110: 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 0d 0a 20 20  onQuery();....  
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2130: 74 72 61 6e 73 61 63 74 69 6f 6e 31 2e 52 6f 6c  transaction1.Rol
2140: 6c 62 61 63 6b 28 29 3b 0d 0a 20 20 20 20 20 20  lback();..      
2150: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2160: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2180: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2190: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
21a0: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74    }..  }] true t
21b0: 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
21c0: 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44   errors System.D
21d0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d  ata.SQLite.dll].
21e0: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
21f0: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
2200: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
2210: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
2220: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
2230: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
2240: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
2250: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
2260: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
2270: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
2280: 74 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20  t${id} Main..   
2290: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
22a0: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
22b0: 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20   $result \..    
22c0: 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d    [sql execute -
22d0: 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
22e0: 66 6f 72 6d 61 74 20 6c 69 73 74 20 24 64 62 20  format list $db 
22f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 53 45  \..          "SE
2300: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 4f  LECT x FROM t1 O
2310: 52 44 45 52 20 42 59 20 78 3b 22 5d 0d 0a 7d 20  RDER BY x;"]..} 
2320: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
2330: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
2340: 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
2350: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
2360: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 63  results errors c
2370: 6f 64 65 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  ode..  unset -no
2380: 63 6f 6d 70 6c 61 69 6e 20 73 71 6c 20 66 6c 61  complain sql fla
2390: 67 73 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  gs dataSource id
23a0: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
23b0: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
23c0: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
23d0: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ct monoBug28 com
23e0: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
23f0: 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
2400: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2410: 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  e compileCSharp}
2420: 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d   -match regexp -
2430: 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79  result {^Ok\..Sy
2440: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
2450: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
2460: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
2470: 20 5c 7b 5c 7d 20 31 24 7d 7d 0d 0a 0d 0a 23 23   \{\} 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 0d 0a 0d  #############...
24d0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 74  .runTest {test t
24e0: 6b 74 2d 31 66 37 62 66 66 66 34 36 37 2d 31 2e  kt-1f7bfff467-1.
24f0: 34 20 7b 63 6f 6d 6d 69 74 20 6d 69 64 64 6c 65  4 {commit middle
2500: 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 20 2d 73   transaction} -s
2510: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
2520: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
2530: 74 6b 74 2d 31 66 37 62 66 66 66 34 36 37 2d 31  tkt-1f7bfff467-1
2540: 2e 34 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  .4.db]..} -body 
2550: 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  {..  sql execute
2560: 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41   $db {..    CREA
2570: 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0d  TE TABLE t1(x);.
2580: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2590: 20 74 31 28 78 29 20 56 41 4c 55 45 53 28 31 29   t1(x) VALUES(1)
25a0: 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  ;..  }....  set 
25b0: 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(1) { \..    
25c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78  INSERT INTO t1(x
25d0: 29 20 56 41 4c 55 45 53 28 32 29 3b 20 5c 0d 0a  ) VALUES(2); \..
25e0: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
25f0: 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53  (2) { \..    INS
2600: 45 52 54 20 49 4e 54 4f 20 74 31 28 78 29 20 56  ERT INTO t1(x) V
2610: 41 4c 55 45 53 28 33 29 3b 20 5c 0d 0a 20 20 7d  ALUES(3); \..  }
2620: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29  ....  set sql(3)
2630: 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54   { \..    INSERT
2640: 20 49 4e 54 4f 20 74 31 28 78 29 20 56 41 4c 55   INTO t1(x) VALU
2650: 45 53 28 34 29 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ES(4); \..  }...
2660: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
2670: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
2680: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
2690: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
26a0: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
26b0: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
26c0: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
26d0: 4e 61 6d 65 5d 0d 0a 20 20 73 65 74 20 66 6c 61  Name]..  set fla
26e0: 67 73 20 41 6c 6c 6f 77 4e 65 73 74 65 64 54 72  gs AllowNestedTr
26f0: 61 6e 73 61 63 74 69 6f 6e 73 0d 0a 0d 0a 20 20  ansactions....  
2700: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
2710: 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
2720: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
2730: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
2740: 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
2750: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
2760: 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20  a.SQLite;....   
2770: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
2780: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
2790: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74  .      public st
27a0: 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  atic class Test$
27b0: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
27c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
27d0: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
27e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
27f0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
2800: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
2810: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
2820: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2830: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2840: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
2850: 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74  dataSource};[get
2860: 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 20 24  TestProperties $
2870: 7b 66 6c 61 67 73 7d 5d 22 29 29 0d 0a 20 20 20  {flags}]"))..   
2880: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2890: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
28a0: 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  .Open();....    
28b0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
28c0: 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e  QLiteTransaction
28d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 31 20 3d 0d   transaction1 =.
28e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69   connection.Begi
2900: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d  nTransaction()).
2910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2930: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
2940: 6e 64 20 63 6f 6d 6d 61 6e 64 31 20 3d 20 6e 65  nd command1 = ne
2950: 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28  w SQLiteCommand(
2960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2970: 20 20 20 20 22 24 7b 73 71 6c 28 31 29 7d 22 2c      "${sql(1)}",
2980: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20   connection)).. 
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b0: 63 6f 6d 6d 61 6e 64 31 2e 54 72 61 6e 73 61 63  command1.Transac
29c0: 74 69 6f 6e 20 3d 20 74 72 61 6e 73 61 63 74 69  tion = transacti
29d0: 6f 6e 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on1;..          
29e0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 31 2e 45        command1.E
29f0: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
2a00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a20: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
2a30: 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 74 72 61  eTransaction tra
2a40: 6e 73 61 63 74 69 6f 6e 32 20 3d 0d 0a 20 20 20  nsaction2 =..   
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2a60: 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69 6e 54  onnection.BeginT
2a70: 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d 0a 20  ransaction()).. 
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa0: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
2ab0: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 32 20 3d 20  mand command2 = 
2ac0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  new SQLiteComman
2ad0: 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
2ae0: 20 20 20 20 20 20 20 20 22 24 7b 73 71 6c 28 32          "${sql(2
2af0: 29 7d 22 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 29  )}", connection)
2b00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2b10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b20: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 32          command2
2b30: 2e 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 74  .Transaction = t
2b40: 72 61 6e 73 61 63 74 69 6f 6e 32 3b 0d 0a 20 20  ransaction2;..  
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 63 6f 6d 6d 61 6e 64 32 2e 45 78 65 63 75 74 65  command2.Execute
2b70: 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20  NonQuery();..   
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ba0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 54    using (SQLiteT
2bb0: 72 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73  ransaction trans
2bc0: 61 63 74 69 6f 6e 33 20 3d 0d 0a 20 20 20 20 20  action3 =..     
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2be0: 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69 6e 54  onnection.BeginT
2bf0: 72 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d 0a 20  ransaction()).. 
2c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c20: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
2c30: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
2c40: 33 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  3 = new SQLiteCo
2c50: 6d 6d 61 6e 64 28 0d 0a 20 20 20 20 20 20 20 20  mmand(..        
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24                "$
2c70: 7b 73 71 6c 28 33 29 7d 22 2c 20 63 6f 6e 6e 65  {sql(3)}", conne
2c80: 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  ction))..       
2c90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb0: 20 20 63 6f 6d 6d 61 6e 64 33 2e 54 72 61 6e 73    command3.Trans
2cc0: 61 63 74 69 6f 6e 20 3d 20 74 72 61 6e 73 61 63  action = transac
2cd0: 74 69 6f 6e 33 3b 0d 0a 20 20 20 20 20 20 20 20  tion3;..        
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
2cf0: 61 6e 64 33 2e 45 78 65 63 75 74 65 4e 6f 6e 51  and3.ExecuteNonQ
2d00: 75 65 72 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  uery();....     
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2d20: 72 61 6e 73 61 63 74 69 6f 6e 32 2e 43 6f 6d 6d  ransaction2.Comm
2d30: 69 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  it();..         
2d40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d80: 74 72 61 6e 73 61 63 74 69 6f 6e 31 2e 43 6f 6d  transaction1.Com
2d90: 6d 69 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  mit();..        
2da0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2db0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
2dc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
2dd0: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
2de0: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
2df0: 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
2e00: 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c  Lite.dll]....  l
2e10: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
2e20: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
2e30: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
2e40: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
2e50: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
2e60: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
2e70: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
2e80: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
2e90: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
2ea0: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
2eb0: 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72   Main..      } r
2ec0: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
2ed0: 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75  sult ""]}] $resu
2ee0: 6c 74 20 5c 0d 0a 20 20 20 20 20 20 5b 73 71 6c  lt \..      [sql
2ef0: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
2f00: 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
2f10: 20 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20 20 20   list $db \..   
2f20: 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78         "SELECT x
2f30: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
2f40: 59 20 78 3b 22 5d 0d 0a 7d 20 2d 63 6c 65 61 6e  Y x;"]..} -clean
2f50: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
2f60: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
2f70: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
2f80: 69 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74  in result result
2f90: 73 20 65 72 72 6f 72 73 20 63 6f 64 65 0d 0a 20  s errors code.. 
2fa0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
2fb0: 69 6e 20 73 71 6c 20 66 6c 61 67 73 20 64 61 74  in sql flags dat
2fc0: 61 53 6f 75 72 63 65 20 69 64 20 64 62 20 66 69  aSource id db fi
2fd0: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
2fe0: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
2ff0: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
3000: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
3010: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
3020: 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
3030: 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70  Data.SQLite comp
3040: 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63  ileCSharp} -matc
3050: 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  h regexp -result
3060: 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43   {^Ok\..System#C
3070: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
3080: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
3090: 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20  \d+ \{\} 0 \{\} 
30a0: 5c 7b 31 20 32 20 33 20 34 5c 7d 24 7d 7d 0d 0a  \{1 2 3 4\}$}}..
30b0: 0d 0a 23 23 23 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 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
3110: 73 74 20 74 6b 74 2d 31 66 37 62 66 66 66 34 36  st tkt-1f7bfff46
3120: 37 2d 31 2e 35 20 7b 72 6f 6c 6c 62 61 63 6b 20  7-1.5 {rollback 
3130: 6d 69 64 64 6c 65 20 74 72 61 6e 73 61 63 74 69  middle transacti
3140: 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  on} -setup {..  
3150: 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
3160: 65 4e 61 6d 65 20 74 6b 74 2d 31 66 37 62 66 66  eName tkt-1f7bff
3170: 66 34 36 37 2d 31 2e 35 2e 64 62 5d 0d 0a 7d 20  f467-1.5.db]..} 
3180: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65  -body {..  sql e
3190: 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
31a0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
31b0: 31 28 78 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  1(x);..    INSER
31c0: 54 20 49 4e 54 4f 20 74 31 28 78 29 20 56 41 4c  T INTO t1(x) VAL
31d0: 55 45 53 28 31 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a  UES(1);..  }....
31e0: 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c    set sql(1) { \
31f0: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
3200: 4f 20 74 31 28 78 29 20 56 41 4c 55 45 53 28 32  O t1(x) VALUES(2
3210: 29 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  ); \..  }....  s
3220: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
3230: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3240: 31 28 78 29 20 56 41 4c 55 45 53 28 33 29 3b 20  1(x) VALUES(3); 
3250: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
3260: 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(3) { \..    
3270: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78  INSERT INTO t1(x
3280: 29 20 56 41 4c 55 45 53 28 34 29 3b 20 5c 0d 0a  ) VALUES(4); \..
3290: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 69 64 20    }....  set id 
32a0: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
32b0: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
32c0: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
32d0: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
32e0: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
32f0: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
3300: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 73   $fileName]..  s
3310: 65 74 20 66 6c 61 67 73 20 41 6c 6c 6f 77 4e 65  et flags AllowNe
3320: 73 74 65 64 54 72 61 6e 73 61 63 74 69 6f 6e 73  stedTransactions
3330: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
3340: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
3350: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
3360: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
3370: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
3380: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
3390: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
33a0: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
33b0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
33c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
33d0: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
33e0: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
33f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
3400: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
3410: 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20  Main()..        
3420: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  {..          usi
3430: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
3440: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
3450: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
3460: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
3470: 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75         "Data Sou
3480: 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65  rce=${dataSource
3490: 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72  };[getTestProper
34a0: 74 69 65 73 20 24 7b 66 6c 61 67 73 7d 5d 22 29  ties ${flags}]")
34b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
34d0: 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a  ection.Open();..
34e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
34f0: 69 6e 67 20 28 53 51 4c 69 74 65 54 72 61 6e 73  ing (SQLiteTrans
3500: 61 63 74 69 6f 6e 20 74 72 61 6e 73 61 63 74 69  action transacti
3510: 6f 6e 31 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  on1 =..         
3520: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
3530: 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  n.BeginTransacti
3540: 6f 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  on())..         
3550: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3560: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
3570: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
3580: 31 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  1 = new SQLiteCo
3590: 6d 6d 61 6e 64 28 0d 0a 20 20 20 20 20 20 20 20  mmand(..        
35a0: 20 20 20 20 20 20 20 20 20 20 22 24 7b 73 71 6c            "${sql
35b0: 28 31 29 7d 22 2c 20 63 6f 6e 6e 65 63 74 69 6f  (1)}", connectio
35c0: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
35d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35e0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 31 2e 54        command1.T
35f0: 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 74 72 61  ransaction = tra
3600: 6e 73 61 63 74 69 6f 6e 31 3b 0d 0a 20 20 20 20  nsaction1;..    
3610: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
3620: 61 6e 64 31 2e 45 78 65 63 75 74 65 4e 6f 6e 51  and1.ExecuteNonQ
3630: 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  uery();..       
3640: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3650: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
3660: 28 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69  (SQLiteTransacti
3670: 6f 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 32 20  on transaction2 
3680: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
3690: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
36a0: 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
36b0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
36c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36d0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
36e0: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
36f0: 6e 64 32 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  nd2 = new SQLite
3700: 43 6f 6d 6d 61 6e 64 28 0d 0a 20 20 20 20 20 20  Command(..      
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24                "$
3720: 7b 73 71 6c 28 32 29 7d 22 2c 20 63 6f 6e 6e 65  {sql(2)}", conne
3730: 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  ction))..       
3740: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
3760: 6d 6d 61 6e 64 32 2e 54 72 61 6e 73 61 63 74 69  mmand2.Transacti
3770: 6f 6e 20 3d 20 74 72 61 6e 73 61 63 74 69 6f 6e  on = transaction
3780: 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2;..            
3790: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 32 2e 45        command2.E
37a0: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
37b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
37c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
37d0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
37e0: 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e  QLiteTransaction
37f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 33 20 3d 0d   transaction3 =.
3800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3810: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
3820: 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
3830: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
3840: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3850: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
3860: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
3870: 6f 6d 6d 61 6e 64 33 20 3d 20 6e 65 77 20 53 51  ommand3 = new SQ
3880: 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 0d 0a 20 20  LiteCommand(..  
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38a0: 20 20 20 20 22 24 7b 73 71 6c 28 33 29 7d 22 2c      "${sql(3)}",
38b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20   connection)).. 
38c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
38e0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 33          command3
38f0: 2e 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 74  .Transaction = t
3900: 72 61 6e 73 61 63 74 69 6f 6e 33 3b 0d 0a 20 20  ransaction3;..  
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3920: 20 20 63 6f 6d 6d 61 6e 64 33 2e 45 78 65 63 75    command3.Execu
3930: 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 0d  teNonQuery();...
3940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3950: 20 20 20 20 20 74 72 61 6e 73 61 63 74 69 6f 6e       transaction
3960: 32 2e 52 6f 6c 6c 62 61 63 6b 28 29 3b 0d 0a 20  2.Rollback();.. 
3970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3980: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3990: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
39a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
39b0: 20 20 20 20 20 20 20 20 74 72 61 6e 73 61 63 74          transact
39c0: 69 6f 6e 31 2e 43 6f 6d 6d 69 74 28 29 3b 0d 0a  ion1.Commit();..
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
39e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
39f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
3a00: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65      }..  }] true
3a10: 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c   true true resul
3a20: 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d  ts errors System
3a30: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
3a40: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
3a50: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
3a60: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
3a70: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
3a80: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
3a90: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
3aa0: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
3ab0: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
3ac0: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
3ad0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
3ae0: 65 73 74 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20  est${id} Main.. 
3af0: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
3b00: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
3b10: 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20  }] $result \..  
3b20: 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65      [sql execute
3b30: 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
3b40: 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20 24 64   -format list $d
3b50: 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  b \..          "
3b60: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
3b70: 20 4f 52 44 45 52 20 42 59 20 78 3b 22 5d 0d 0a   ORDER BY x;"]..
3b80: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
3b90: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
3ba0: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
3bb0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
3bc0: 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  t results errors
3bd0: 20 63 6f 64 65 0d 0a 20 20 75 6e 73 65 74 20 2d   code..  unset -
3be0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 71 6c 20 66  nocomplain sql f
3bf0: 6c 61 67 73 20 64 61 74 61 53 6f 75 72 63 65 20  lags dataSource 
3c00: 69 64 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  id db fileName..
3c10: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
3c20: 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62  eagle command.ob
3c30: 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63  ject monoBug28 c
3c40: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
3c50: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d  le.DATA SQLite\.
3c60: 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
3c70: 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72  ite compileCShar
3c80: 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70  p} -match regexp
3c90: 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a   -result {^Ok\..
3ca0: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
3cb0: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
3cc0: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
3cd0: 20 30 20 5c 7b 5c 7d 20 5c 7b 31 20 32 5c 7d 24   0 \{\} \{1 2\}$
3ce0: 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
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 0d 0a 0d 0a 72 75 6e 53 51 4c 69  #####....runSQLi
3d40: 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a  teTestEpilogue..
3d50: 72 75 6e 54 65 73 74 45 70 69 6c 6f 67 75 65 0d  runTestEpilogue.
3d60: 0a                                               .