System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 31fc3f885d66f951297dacf0babaf32b0ec99e56:


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 33 34 33 64 33 39  .#..# tkt-343d39
0060: 32 62 35 31 2e 65 61 67 6c 65 20 2d 2d 0d 0a 23  2b51.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 73 65 74  #########....set
0270: 20 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 73   dateTimeFormats
0280: 20 5b 6c 69 73 74 20 22 22 20 54 69 63 6b 73 20   [list "" Ticks 
0290: 49 53 4f 38 36 30 31 20 4a 75 6c 69 61 6e 44 61  ISO8601 JulianDa
02a0: 79 20 55 6e 69 78 45 70 6f 63 68 5d 0d 0a 0d 0a  y UnixEpoch]....
02b0: 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24  for {set i 1} {$
02c0: 69 20 3c 20 35 7d 20 7b 69 6e 63 72 20 69 7d 20  i < 5} {incr i} 
02d0: 7b 0d 0a 20 20 73 65 74 20 64 61 74 65 54 69 6d  {..  set dateTim
02e0: 65 46 6f 72 6d 61 74 20 5b 6c 69 6e 64 65 78 20  eFormat [lindex 
02f0: 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 73  $dateTimeFormats
0300: 20 24 69 5d 0d 0a 0d 0a 20 20 72 75 6e 54 65 73   $i]....  runTes
0310: 74 20 7b 74 65 73 74 20 5b 61 70 70 65 6e 64 41  t {test [appendA
0320: 72 67 73 20 74 6b 74 2d 33 34 33 64 33 39 32 62  rgs tkt-343d392b
0330: 35 31 2d 31 2e 20 24 69 5d 20 5b 73 75 62 73 74  51-1. $i] [subst
0340: 20 7b 44 61 74 65 54 69 6d 65 5c 0d 0a 20 20 20   {DateTime\..   
0350: 20 20 20 62 69 6e 64 69 6e 67 20 24 64 61 74 65     binding $date
0360: 54 69 6d 65 46 6f 72 6d 61 74 20 66 6f 72 6d 61  TimeFormat forma
0370: 74 7d 5d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  t}] -setup {..  
0380: 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66    setupDb [set f
0390: 69 6c 65 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41  ileName [appendA
03a0: 72 67 73 20 74 6b 74 2d 33 34 33 64 33 39 32 62  rgs tkt-343d392b
03b0: 35 31 2d 31 2e 20 24 69 20 2e 64 62 5d 5d 20 22  51-1. $i .db]] "
03c0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 24 64 61  " \..        $da
03d0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 55 74 63  teTimeFormat Utc
03e0: 0d 0a 0d 0a 20 20 20 20 73 65 74 20 64 61 74 65  ....    set date
03f0: 54 69 6d 65 20 22 34 20 4f 63 74 6f 62 65 72 2c  Time "4 October,
0400: 20 32 30 31 31 20 33 3a 32 37 3a 35 30 20 50 4d   2011 3:27:50 PM
0410: 20 47 4d 54 22 0d 0a 20 20 7d 20 2d 62 6f 64 79   GMT"..  } -body
0420: 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63   {..    sql exec
0430: 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20  ute $db "CREATE 
0440: 54 41 42 4c 45 20 74 31 28 78 20 44 41 54 45 54  TABLE t1(x DATET
0450: 49 4d 45 29 3b 22 0d 0a 0d 0a 20 20 20 20 73 65  IME);"....    se
0460: 74 20 70 61 72 61 6d 44 61 74 65 54 69 6d 65 31  t paramDateTime1
0470: 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
0480: 63 6c 6f 63 6b 20 73 63 61 6e 20 24 64 61 74 65  clock scan $date
0490: 54 69 6d 65 5d 20 2d 66 6f 72 6d 61 74 20 5c 0d  Time] -format \.
04a0: 0a 20 20 20 20 20 20 20 20 5b 67 65 74 44 61 74  .        [getDat
04b0: 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 2d 67 6d  eTimeFormat] -gm
04c0: 74 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 73  t true]....    s
04d0: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20  witch -exact -- 
04e0: 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20  $dateTimeFormat 
04f0: 7b 0d 0a 20 20 20 20 20 20 54 69 63 6b 73 20 7b  {..      Ticks {
0500: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 61  ..        set pa
0510: 72 61 6d 44 61 74 65 54 69 6d 65 31 20 5b 6f 62  ramDateTime1 [ob
0520: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20  ject invoke \.. 
0530: 20 20 20 20 20 20 20 20 20 20 20 2d 63 72 65 61             -crea
0540: 74 65 20 2d 61 6c 69 61 73 20 44 61 74 65 54 69  te -alias DateTi
0550: 6d 65 20 50 61 72 73 65 20 24 70 61 72 61 6d 44  me Parse $paramD
0560: 61 74 65 54 69 6d 65 31 5d 0d 0a 0d 0a 20 20 20  ateTime1]....   
0570: 20 20 20 20 20 73 65 74 20 70 61 72 61 6d 44 61       set paramDa
0580: 74 65 54 69 6d 65 31 20 5b 24 70 61 72 61 6d 44  teTime1 [$paramD
0590: 61 74 65 54 69 6d 65 31 20 54 6f 55 6e 69 76 65  ateTime1 ToUnive
05a0: 72 73 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d 0d  rsalTime.Ticks].
05b0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 61 72  .        set par
05c0: 61 6d 44 61 74 65 54 69 6d 65 32 20 24 70 61 72  amDateTime2 $par
05d0: 61 6d 44 61 74 65 54 69 6d 65 31 0d 0a 20 20 20  amDateTime1..   
05e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 49 53 4f 38     }..      ISO8
05f0: 36 30 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  601 {..        s
0600: 65 74 20 70 61 72 61 6d 44 61 74 65 54 69 6d 65  et paramDateTime
0610: 32 20 5b 61 70 70 65 6e 64 41 72 67 73 20 27 20  2 [appendArgs ' 
0620: 24 70 61 72 61 6d 44 61 74 65 54 69 6d 65 31 20  $paramDateTime1 
0630: 27 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ']..      }..   
0640: 20 20 20 4a 75 6c 69 61 6e 44 61 79 20 7b 0d 0a     JulianDay {..
0650: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 72 61          set para
0660: 6d 44 61 74 65 54 69 6d 65 31 20 5b 6f 62 6a 65  mDateTime1 [obje
0670: 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20  ct invoke \..   
0680: 20 20 20 20 20 20 20 20 20 2d 63 72 65 61 74 65           -create
0690: 20 2d 61 6c 69 61 73 20 44 61 74 65 54 69 6d 65   -alias DateTime
06a0: 20 50 61 72 73 65 20 24 70 61 72 61 6d 44 61 74   Parse $paramDat
06b0: 65 54 69 6d 65 31 5d 0d 0a 0d 0a 20 20 20 20 20  eTime1]....     
06c0: 20 20 20 73 65 74 20 70 61 72 61 6d 44 61 74 65     set paramDate
06d0: 54 69 6d 65 31 20 5b 24 70 61 72 61 6d 44 61 74  Time1 [$paramDat
06e0: 65 54 69 6d 65 31 20 2d 63 72 65 61 74 65 20 2d  eTime1 -create -
06f0: 61 6c 69 61 73 20 54 6f 55 6e 69 76 65 72 73 61  alias ToUniversa
0700: 6c 54 69 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  lTime]....      
0710: 20 20 73 65 74 20 70 61 72 61 6d 44 61 74 65 54    set paramDateT
0720: 69 6d 65 31 20 5b 65 78 70 72 20 7b 5b 24 70 61  ime1 [expr {[$pa
0730: 72 61 6d 44 61 74 65 54 69 6d 65 31 20 54 6f 4f  ramDateTime1 ToO
0740: 41 44 61 74 65 5d 20 2b 20 5c 0d 0a 20 20 20 20  ADate] + \..    
0750: 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20          [object 
0760: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
0770: 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e  onPublic System.
0780: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
0790: 74 65 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20  teConvert \..   
07a0: 20 20 20 20 20 20 20 20 20 4f 6c 65 41 75 74 6f           OleAuto
07b0: 6d 61 74 69 6f 6e 45 70 6f 63 68 41 73 4a 75 6c  mationEpochAsJul
07c0: 69 61 6e 44 61 79 5d 7d 5d 0d 0a 0d 0a 20 20 20  ianDay]}]....   
07d0: 20 20 20 20 20 73 65 74 20 70 61 72 61 6d 44 61       set paramDa
07e0: 74 65 54 69 6d 65 32 20 24 70 61 72 61 6d 44 61  teTime2 $paramDa
07f0: 74 65 54 69 6d 65 31 0d 0a 20 20 20 20 20 20 7d  teTime1..      }
0800: 0d 0a 20 20 20 20 20 20 55 6e 69 78 45 70 6f 63  ..      UnixEpoc
0810: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  h {..        set
0820: 20 70 61 72 61 6d 44 61 74 65 54 69 6d 65 31 20   paramDateTime1 
0830: 5b 63 6c 6f 63 6b 20 73 63 61 6e 20 24 64 61 74  [clock scan $dat
0840: 65 54 69 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eTime]..        
0850: 73 65 74 20 70 61 72 61 6d 44 61 74 65 54 69 6d  set paramDateTim
0860: 65 32 20 24 70 61 72 61 6d 44 61 74 65 54 69 6d  e2 $paramDateTim
0870: 65 31 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  e1..      }..   
0880: 20 7d 0d 0a 0d 0a 20 20 20 20 73 71 6c 20 65 78   }....    sql ex
0890: 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e  ecute $db [appen
08a0: 64 41 72 67 73 20 22 49 4e 53 45 52 54 20 49 4e  dArgs "INSERT IN
08b0: 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
08c0: 28 22 20 24 70 61 72 61 6d 44 61 74 65 54 69 6d  (" $paramDateTim
08d0: 65 32 20 5c 0d 0a 20 20 20 20 20 20 20 20 22 29  e2 \..        ")
08e0: 3b 22 5d 0d 0a 0d 0a 20 20 20 20 6c 69 73 74 20  ;"]....    list 
08f0: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 76 65  [sql execute -ve
0900: 72 62 61 74 69 6d 20 2d 65 78 65 63 75 74 65 20  rbatim -execute 
0910: 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c  reader -format l
0920: 69 73 74 20 2d 64 61 74 65 74 69 6d 65 66 6f 72  ist -datetimefor
0930: 6d 61 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b  mat \..        [
0940: 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  getDateTimeForma
0950: 74 5d 20 24 64 62 20 22 53 45 4c 45 43 54 20 78  t] $db "SELECT x
0960: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
0970: 20 3d 20 3f 3b 22 20 5c 0d 0a 20 20 20 20 20 20   = ?;" \..      
0980: 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53    [list param1 S
0990: 74 72 69 6e 67 20 24 70 61 72 61 6d 44 61 74 65  tring $paramDate
09a0: 54 69 6d 65 31 5d 5d 20 5c 0d 0a 20 20 20 20 20  Time1]] \..     
09b0: 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20     [sql execute 
09c0: 2d 76 65 72 62 61 74 69 6d 20 2d 65 78 65 63 75  -verbatim -execu
09d0: 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61  te reader -forma
09e0: 74 20 6c 69 73 74 20 2d 64 61 74 65 74 69 6d 65  t list -datetime
09f0: 66 6f 72 6d 61 74 20 5c 0d 0a 20 20 20 20 20 20  format \..      
0a00: 20 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f    [getDateTimeFo
0a10: 72 6d 61 74 5d 20 24 64 62 20 22 53 45 4c 45 43  rmat] $db "SELEC
0a20: 54 20 78 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T x FROM t1 WHER
0a30: 45 20 78 20 3d 20 3f 3b 22 20 5c 0d 0a 20 20 20  E x = ?;" \..   
0a40: 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d       [list param
0a50: 31 20 44 61 74 65 54 69 6d 65 20 24 70 61 72 61  1 DateTime $para
0a60: 6d 44 61 74 65 54 69 6d 65 31 5d 5d 0d 0a 20 20  mDateTime1]]..  
0a70: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
0a80: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
0a90: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 75 6e 73  eName....    uns
0aa0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70  et -nocomplain p
0ab0: 61 72 61 6d 44 61 74 65 54 69 6d 65 32 20 70 61  aramDateTime2 pa
0ac0: 72 61 6d 44 61 74 65 54 69 6d 65 31 20 64 61 74  ramDateTime1 dat
0ad0: 65 54 69 6d 65 20 64 62 20 66 69 6c 65 4e 61 6d  eTime db fileNam
0ae0: 65 0d 0a 20 20 7d 20 2d 63 6f 6e 73 74 72 61 69  e..  } -constrai
0af0: 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 74 68  nts \..{eagle th
0b00: 72 65 61 64 43 75 6c 74 75 72 65 2e 65 6e 5f 55  readCulture.en_U
0b10: 53 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  S monoBug28 comm
0b20: 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
0b30: 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79  DATA SQLite\..Sy
0b40: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
0b50: 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 7b 32 30 31  } -result {{{201
0b60: 31 2d 31 30 2d 30 34 20 31 35 3a 32 37 3a 35 30  1-10-04 15:27:50
0b70: 5a 7d 7d 20 7b 7b 32 30 31 31 2d 31 30 2d 30 34  Z}} {{2011-10-04
0b80: 20 31 35 3a 32 37 3a 35 30 5a 7d 7d 7d 7d 0d 0a   15:27:50Z}}}}..
0b90: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
0ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0be0: 23 23 23 23 0d 0a 0d 0a 75 6e 73 65 74 20 2d 6e  ####....unset -n
0bf0: 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74 65 54 69  ocomplain dateTi
0c00: 6d 65 46 6f 72 6d 61 74 20 69 20 64 61 74 65 54  meFormat i dateT
0c10: 69 6d 65 46 6f 72 6d 61 74 73 0d 0a 0d 0a 23 23  imeFormats....##
0c20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0c30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0c40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
0c70: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 74  .runTest {test t
0c80: 6b 74 2d 33 34 33 64 33 39 32 62 35 31 2d 32 2e  kt-343d392b51-2.
0c90: 31 20 7b 53 51 4c 69 74 65 44 61 74 61 41 64 61  1 {SQLiteDataAda
0ca0: 70 74 65 72 20 75 70 64 61 74 65 20 66 61 69 6c  pter update fail
0cb0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
0cc0: 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
0cd0: 61 6d 65 20 74 6b 74 2d 33 34 33 64 33 39 32 62  ame tkt-343d392b
0ce0: 35 31 2d 32 2e 31 2e 64 62 5d 0d 0a 20 20 73 65  51-2.1.db]..  se
0cf0: 74 20 6f 74 68 65 72 46 69 6c 65 4e 61 6d 65 20  t otherFileName 
0d00: 74 6b 74 2d 33 34 33 64 33 39 32 62 35 31 2d 32  tkt-343d392b51-2
0d10: 2e 31 2d 6f 74 68 65 72 44 62 2e 64 62 0d 0a 7d  .1-otherDb.db..}
0d20: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
0d30: 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  id [object invok
0d40: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
0d50: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d  tActive NextId].
0d60: 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63  .  set dataSourc
0d70: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
0d80: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
0d90: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ry] $fileName]..
0da0: 20 20 73 65 74 20 6f 74 68 65 72 44 61 74 61 53    set otherDataS
0db0: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
0dc0: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
0dd0: 65 63 74 6f 72 79 5d 20 24 6f 74 68 65 72 46 69  ectory] $otherFi
0de0: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 73 65 74 20 6f  leName]..  set o
0df0: 74 68 65 72 44 62 4e 61 6d 65 20 6f 74 68 65 72  therDbName other
0e00: 44 62 0d 0a 20 20 73 65 74 20 6f 74 68 65 72 54  Db..  set otherT
0e10: 61 62 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73  able [appendArgs
0e20: 20 24 6f 74 68 65 72 44 62 4e 61 6d 65 20 2e 74   $otherDbName .t
0e30: 31 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28  1]....  set sql(
0e40: 69 6e 73 65 72 74 73 29 20 22 22 0d 0a 20 20 73  inserts) ""..  s
0e50: 65 74 20 73 71 6c 28 31 29 20 5b 73 75 62 73 74  et sql(1) [subst
0e60: 20 7b 20 5c 0d 0a 20 20 20 20 41 54 54 41 43 48   { \..    ATTACH
0e70: 20 44 41 54 41 42 41 53 45 20 27 24 7b 6f 74 68   DATABASE '${oth
0e80: 65 72 44 61 74 61 53 6f 75 72 63 65 7d 27 20 41  erDataSource}' A
0e90: 53 20 24 7b 6f 74 68 65 72 44 62 4e 61 6d 65 7d  S ${otherDbName}
0ea0: 3b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  ; \..    CREATE 
0eb0: 54 41 42 4c 45 20 24 7b 6f 74 68 65 72 54 61 62  TABLE ${otherTab
0ec0: 6c 65 7d 28 78 20 49 4e 54 45 47 45 52 20 50 52  le}(x INTEGER PR
0ed0: 49 4d 41 52 59 20 4b 45 59 2c 20 79 20 44 41 54  IMARY KEY, y DAT
0ee0: 45 54 49 4d 45 29 3b 20 5c 0d 0a 20 20 20 20 5b  ETIME); \..    [
0ef0: 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24  for {set i 1} {$
0f00: 69 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 7d 20  i < 3} {incr i} 
0f10: 7b 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20  {..      append 
0f20: 73 71 6c 28 69 6e 73 65 72 74 73 29 20 5b 61 70  sql(inserts) [ap
0f30: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
0f40: 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e        "INSERT IN
0f50: 54 4f 20 22 20 24 7b 6f 74 68 65 72 54 61 62 6c  TO " ${otherTabl
0f60: 65 7d 20 22 20 28 78 2c 20 79 29 20 56 41 4c 55  e} " (x, y) VALU
0f70: 45 53 28 22 20 24 69 20 22 2c 20 27 22 20 5c 0d  ES(" $i ", '" \.
0f80: 0a 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63  .          [cloc
0f90: 6b 20 66 6f 72 6d 61 74 20 24 69 20 2d 66 6f 72  k format $i -for
0fa0: 6d 61 74 20 5b 67 65 74 44 61 74 65 54 69 6d 65  mat [getDateTime
0fb0: 46 6f 72 6d 61 74 5d 5d 20 22 27 29 3b 20 22 5d  Format]] "'); "]
0fc0: 0d 0a 20 20 20 20 7d 3b 20 72 65 74 75 72 6e 20  ..    }; return 
0fd0: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
0fe0: 73 74 73 20 73 71 6c 28 69 6e 73 65 72 74 73 29  sts sql(inserts)
0ff0: 5d 20 3f 20 24 73 71 6c 28 69 6e 73 65 72 74 73  ] ? $sql(inserts
1000: 29 20 3a 20 22 22 7d 5d 5d 20 5c 0d 0a 20 20 7d  ) : ""}]] \..  }
1010: 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  ]....  set sql(2
1020: 29 20 5b 73 75 62 73 74 20 7b 20 5c 0d 0a 20 20  ) [subst { \..  
1030: 20 20 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52    SELECT x, y FR
1040: 4f 4d 20 24 7b 6f 74 68 65 72 54 61 62 6c 65 7d  OM ${otherTable}
1050: 20 4f 52 44 45 52 20 42 59 20 78 3b 20 5c 0d 0a   ORDER BY x; \..
1060: 20 20 7d 5d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20    }]....  unset 
1070: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
1080: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
1090: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
10a0: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
10b0: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
10c0: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69  System;..    usi
10d0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0d  ng System.Data;.
10e0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
10f0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a  m.Data.SQLite;..
1100: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
1110: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
1120: 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c     {..      publ
1130: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
1140: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
1150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
1160: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
1170: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
1180: 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e  ..          usin
1190: 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  g (SQLiteConnect
11a0: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  ion connection =
11b0: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
11c0: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
11d0: 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72        "Data Sour
11e0: 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d  ce=${dataSource}
11f0: 3b 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ;"))..          
1200: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
1210: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
1220: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1230: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
1240: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
1250: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
1260: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
1270: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1280: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
1290: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
12a0: 22 24 7b 73 71 6c 28 31 29 7d 22 3b 0d 0a 20 20  "${sql(1)}";..  
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
12c0: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
12d0: 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ery();..        
12e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12f0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
1300: 74 65 44 61 74 61 41 64 61 70 74 65 72 20 64 61  teDataAdapter da
1310: 74 61 41 64 61 70 74 65 72 20 3d 20 6e 65 77 20  taAdapter = new 
1320: 53 51 4c 69 74 65 44 61 74 61 41 64 61 70 74 65  SQLiteDataAdapte
1330: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
1340: 20 20 20 20 22 24 7b 73 71 6c 28 32 29 7d 22 2c      "${sql(2)}",
1350: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20   connection)).. 
1360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1370: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
1380: 67 20 28 44 61 74 61 53 65 74 20 64 61 74 61 53  g (DataSet dataS
1390: 65 74 20 3d 20 6e 65 77 20 44 61 74 61 53 65 74  et = new DataSet
13a0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
13b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13c0: 20 20 20 20 20 20 64 61 74 61 41 64 61 70 74 65        dataAdapte
13d0: 72 2e 46 69 6c 6c 28 64 61 74 61 53 65 74 2c 20  r.Fill(dataSet, 
13e0: 22 24 7b 6f 74 68 65 72 54 61 62 6c 65 7d 22 29  "${otherTable}")
13f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1400: 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 64       DataTable d
1410: 61 74 61 54 61 62 6c 65 20 3d 20 64 61 74 61 53  ataTable = dataS
1420: 65 74 2e 54 61 62 6c 65 73 5c 5b 22 24 7b 6f 74  et.Tables\["${ot
1430: 68 65 72 54 61 62 6c 65 7d 22 5c 5d 3b 0d 0a 0d  herTable}"\];...
1440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1450: 20 64 61 74 61 54 61 62 6c 65 2e 43 6f 6c 75 6d   dataTable.Colum
1460: 6e 73 5c 5b 22 78 22 5c 5d 2e 55 6e 69 71 75 65  ns\["x"\].Unique
1470: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1480: 20 20 20 20 20 20 20 20 20 20 64 61 74 61 54 61            dataTa
1490: 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65 79 20 3d  ble.PrimaryKey =
14a0: 20 6e 65 77 20 44 61 74 61 43 6f 6c 75 6d 6e 5c   new DataColumn\
14b0: 5b 5c 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  [\] {..         
14c0: 20 20 20 20 20 20 20 20 20 64 61 74 61 54 61 62           dataTab
14d0: 6c 65 2e 43 6f 6c 75 6d 6e 73 5c 5b 22 78 22 5c  le.Columns\["x"\
14e0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..             
14f0: 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     };....       
1500: 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b           [expr {
1510: 5b 69 73 4d 6f 6e 6f 5d 20 3f 20 22 23 70 72 61  [isMono] ? "#pra
1520: 67 6d 61 20 77 61 72 6e 69 6e 67 20 64 69 73 61  gma warning disa
1530: 62 6c 65 20 32 31 39 22 20 3a 20 22 22 7d 5d 0d  ble 219" : ""}].
1540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1550: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 42 75   SQLiteCommandBu
1560: 69 6c 64 65 72 20 63 6f 6d 6d 61 6e 64 42 75 69  ilder commandBui
1570: 6c 64 65 72 20 3d 0d 0a 20 20 20 20 20 20 20 20  lder =..        
1580: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1590: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 42 75 69  SQLiteCommandBui
15a0: 6c 64 65 72 28 64 61 74 61 41 64 61 70 74 65 72  lder(dataAdapter
15b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
15c0: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 73 4d 6f      [expr {[isMo
15d0: 6e 6f 5d 20 3f 20 22 23 70 72 61 67 6d 61 20 77  no] ? "#pragma w
15e0: 61 72 6e 69 6e 67 20 72 65 73 74 6f 72 65 20 32  arning restore 2
15f0: 31 39 22 20 3a 20 22 22 7d 5d 0d 0a 0d 0a 20 20  19" : ""}]....  
1600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
1610: 72 65 61 63 68 20 28 44 61 74 61 52 6f 77 20 64  reach (DataRow d
1620: 61 74 61 52 6f 77 20 69 6e 20 64 61 74 61 54 61  ataRow in dataTa
1630: 62 6c 65 2e 52 6f 77 73 29 0d 0a 20 20 20 20 20  ble.Rows)..     
1640: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1660: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1670: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55        // NOTE: U
1680: 70 64 61 74 65 20 65 76 65 6e 20 72 6f 77 73 20  pdate even rows 
1690: 61 6e 64 20 64 65 6c 65 74 65 20 6f 64 64 20 72  and delete odd r
16a0: 6f 77 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ows...          
16b0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16d0: 20 28 28 6c 6f 6e 67 29 64 61 74 61 52 6f 77 5c   ((long)dataRow\
16e0: 5b 22 78 22 5c 5d 20 25 20 32 20 3d 3d 20 30 29  ["x"\] % 2 == 0)
16f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1700: 20 20 20 20 20 20 64 61 74 61 52 6f 77 5c 5b 22        dataRow\["
1710: 79 22 5c 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20  y"\] =..        
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1730: 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 2e  DateTime.UtcNow.
1740: 54 6f 53 74 72 69 6e 67 28 22 5b 67 65 74 44 61  ToString("[getDa
1750: 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 22 29 3b  teTimeFormat]");
1760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1770: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
1790: 74 61 52 6f 77 2e 44 65 6c 65 74 65 28 29 3b 0d  taRow.Delete();.
17a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
17c0: 20 20 20 20 20 20 64 61 74 61 41 64 61 70 74 65        dataAdapte
17d0: 72 2e 55 70 64 61 74 65 28 64 61 74 61 54 61 62  r.Update(dataTab
17e0: 6c 65 29 3b 20 2f 2f 20 44 42 43 6f 6e 63 75 72  le); // DBConcur
17f0: 72 65 6e 63 79 45 78 63 65 70 74 69 6f 6e 20 28  rencyException (
1800: 3f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ?)..            
1810: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1820: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
1830: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1840: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d    }..    }..  }]
1850: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
1860: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53  results errors S
1870: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1880: 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74  e.dll]....  list
1890: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
18a0: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
18b0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
18c0: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
18d0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
18e0: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
18f0: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
1900: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1910: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
1920: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 4d 61  id}.Test${id} Ma
1930: 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  in..      } resu
1940: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
1950: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
1960: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
1970: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
1980: 4e 61 6d 65 3b 20 75 6e 73 65 74 20 2d 6e 6f 63  Name; unset -noc
1990: 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e  omplain db fileN
19a0: 61 6d 65 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  ame..  cleanupDb
19b0: 20 24 6f 74 68 65 72 46 69 6c 65 4e 61 6d 65 0d   $otherFileName.
19c0: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
19d0: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
19e0: 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
19f0: 73 20 69 20 73 71 6c 20 6f 74 68 65 72 54 61 62  s i sql otherTab
1a00: 6c 65 20 6f 74 68 65 72 44 62 4e 61 6d 65 20 5c  le otherDbName \
1a10: 0d 0a 20 20 20 20 20 20 6f 74 68 65 72 44 61 74  ..      otherDat
1a20: 61 53 6f 75 72 63 65 20 64 61 74 61 53 6f 75 72  aSource dataSour
1a30: 63 65 20 69 64 20 6f 74 68 65 72 46 69 6c 65 4e  ce id otherFileN
1a40: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
1a50: 6e 74 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42  nts {eagle monoB
1a60: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
1a70: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
1a80: 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61  Lite\..System.Da
1a90: 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c  ta.SQLite compil
1aa0: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
1ab0: 67 6c 6f 62 20 2d 72 65 73 75 6c 74 20 7b 2a 5c  glob -result {*\
1ac0: 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 44 42  ..System.Data.DB
1ad0: 43 6f 6e 63 75 72 72 65 6e 63 79 45 78 63 65 70  ConcurrencyExcep
1ae0: 74 69 6f 6e 3a 20 2a 7d 7d 0d 0a 0d 0a 23 23 23  tion: *}}....###
1af0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b30: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
1b40: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 74 6b  runTest {test tk
1b50: 74 2d 33 34 33 64 33 39 32 62 35 31 2d 32 2e 32  t-343d392b51-2.2
1b60: 20 7b 53 51 4c 69 74 65 44 61 74 61 41 64 61 70   {SQLiteDataAdap
1b70: 74 65 72 20 75 70 64 61 74 65 20 73 75 63 63 65  ter update succe
1b80: 73 73 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ss} -setup {..  
1b90: 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
1ba0: 65 4e 61 6d 65 20 74 6b 74 2d 33 34 33 64 33 39  eName tkt-343d39
1bb0: 32 62 35 31 2d 32 2e 32 2e 64 62 5d 20 22 22 20  2b51-2.2.db] "" 
1bc0: 4a 75 6c 69 61 6e 44 61 79 0d 0a 20 20 73 65 74  JulianDay..  set
1bd0: 20 6f 74 68 65 72 46 69 6c 65 4e 61 6d 65 20 74   otherFileName t
1be0: 6b 74 2d 33 34 33 64 33 39 32 62 35 31 2d 32 2e  kt-343d392b51-2.
1bf0: 32 2d 6f 74 68 65 72 44 62 2e 64 62 0d 0a 7d 20  2-otherDb.db..} 
1c00: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
1c10: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
1c20: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
1c30: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
1c40: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
1c50: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
1c60: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
1c70: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20  y] $fileName].. 
1c80: 20 73 65 74 20 6f 74 68 65 72 44 61 74 61 53 6f   set otherDataSo
1c90: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
1ca0: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
1cb0: 63 74 6f 72 79 5d 20 24 6f 74 68 65 72 46 69 6c  ctory] $otherFil
1cc0: 65 4e 61 6d 65 5d 0d 0a 20 20 73 65 74 20 6f 74  eName]..  set ot
1cd0: 68 65 72 44 62 4e 61 6d 65 20 6f 74 68 65 72 44  herDbName otherD
1ce0: 62 0d 0a 20 20 73 65 74 20 6f 74 68 65 72 54 61  b..  set otherTa
1cf0: 62 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ble [appendArgs 
1d00: 24 6f 74 68 65 72 44 62 4e 61 6d 65 20 2e 74 31  $otherDbName .t1
1d10: 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 69  ]....  set sql(i
1d20: 6e 73 65 72 74 73 29 20 22 22 0d 0a 20 20 73 65  nserts) ""..  se
1d30: 74 20 73 71 6c 28 31 29 20 5b 73 75 62 73 74 20  t sql(1) [subst 
1d40: 7b 20 5c 0d 0a 20 20 20 20 41 54 54 41 43 48 20  { \..    ATTACH 
1d50: 44 41 54 41 42 41 53 45 20 27 24 7b 6f 74 68 65  DATABASE '${othe
1d60: 72 44 61 74 61 53 6f 75 72 63 65 7d 27 20 41 53  rDataSource}' AS
1d70: 20 24 7b 6f 74 68 65 72 44 62 4e 61 6d 65 7d 3b   ${otherDbName};
1d80: 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54   \..    CREATE T
1d90: 41 42 4c 45 20 24 7b 6f 74 68 65 72 54 61 62 6c  ABLE ${otherTabl
1da0: 65 7d 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  e}(x INTEGER PRI
1db0: 4d 41 52 59 20 4b 45 59 2c 20 79 20 44 41 54 45  MARY KEY, y DATE
1dc0: 54 49 4d 45 29 3b 20 5c 0d 0a 20 20 20 20 5b 66  TIME); \..    [f
1dd0: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
1de0: 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 7d 20 7b   < 3} {incr i} {
1df0: 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 73  ..      append s
1e00: 71 6c 28 69 6e 73 65 72 74 73 29 20 5b 61 70 70  ql(inserts) [app
1e10: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
1e20: 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
1e30: 4f 20 22 20 24 7b 6f 74 68 65 72 54 61 62 6c 65  O " ${otherTable
1e40: 7d 20 22 20 28 78 2c 20 79 29 20 56 41 4c 55 45  } " (x, y) VALUE
1e50: 53 28 22 20 24 69 20 22 2c 20 4a 55 4c 49 41 4e  S(" $i ", JULIAN
1e60: 44 41 59 28 27 22 20 5c 0d 0a 20 20 20 20 20 20  DAY('" \..      
1e70: 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61      [clock forma
1e80: 74 20 24 69 20 2d 66 6f 72 6d 61 74 20 5b 67 65  t $i -format [ge
1e90: 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d  tDateTimeFormat]
1ea0: 5d 20 22 27 29 29 3b 20 22 5d 0d 0a 20 20 20 20  ] "')); "]..    
1eb0: 7d 3b 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20  }; return [expr 
1ec0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 71  {[info exists sq
1ed0: 6c 28 69 6e 73 65 72 74 73 29 5d 20 3f 20 24 73  l(inserts)] ? $s
1ee0: 71 6c 28 69 6e 73 65 72 74 73 29 20 3a 20 22 22  ql(inserts) : ""
1ef0: 7d 5d 5d 20 5c 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20  }]] \..  }].... 
1f00: 20 73 65 74 20 73 71 6c 28 32 29 20 5b 73 75 62   set sql(2) [sub
1f10: 73 74 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  st { \..    SELE
1f20: 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 24 7b 6f  CT x, y FROM ${o
1f30: 74 68 65 72 54 61 62 6c 65 7d 20 4f 52 44 45 52  therTable} ORDER
1f40: 20 42 59 20 78 3b 20 5c 0d 0a 20 20 7d 5d 0d 0a   BY x; \..  }]..
1f50: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
1f60: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
1f70: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
1f80: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
1f90: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
1fa0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
1fb0: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
1fc0: 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 20 20 75  tem.Data;..    u
1fd0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
1fe0: 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20  .SQLite;....    
1ff0: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
2000: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
2010: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
2020: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
2030: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
2040: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
2050: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
2060: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2070: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2080: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
2090: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
20a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
20b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20c0: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
20d0: 61 74 61 53 6f 75 72 63 65 7d 3b 44 61 74 65 54  ataSource};DateT
20e0: 69 6d 65 46 6f 72 6d 61 74 3d 4a 75 6c 69 61 6e  imeFormat=Julian
20f0: 44 61 79 3b 22 29 29 0d 0a 20 20 20 20 20 20 20  Day;"))..       
2100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2110: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65    connection.Ope
2120: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
2130: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
2140: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
2150: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
2160: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
2170: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
2190: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
21a0: 20 3d 20 22 24 7b 73 71 6c 28 31 29 7d 22 3b 0d   = "${sql(1)}";.
21b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
21c0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
21d0: 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20  nQuery();..     
21e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21f0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
2200: 51 4c 69 74 65 44 61 74 61 41 64 61 70 74 65 72  QLiteDataAdapter
2210: 20 64 61 74 61 41 64 61 70 74 65 72 20 3d 20 6e   dataAdapter = n
2220: 65 77 20 53 51 4c 69 74 65 44 61 74 61 41 64 61  ew SQLiteDataAda
2230: 70 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  pter(..         
2240: 20 20 20 20 20 20 20 22 24 7b 73 71 6c 28 32 29         "${sql(2)
2250: 7d 22 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29  }", connection))
2260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
2280: 73 69 6e 67 20 28 44 61 74 61 53 65 74 20 64 61  sing (DataSet da
2290: 74 61 53 65 74 20 3d 20 6e 65 77 20 44 61 74 61  taSet = new Data
22a0: 53 65 74 28 29 29 0d 0a 20 20 20 20 20 20 20 20  Set())..        
22b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22c0: 20 20 20 20 20 20 20 20 20 64 61 74 61 41 64 61           dataAda
22d0: 70 74 65 72 2e 46 69 6c 6c 28 64 61 74 61 53 65  pter.Fill(dataSe
22e0: 74 2c 20 22 24 7b 6f 74 68 65 72 54 61 62 6c 65  t, "${otherTable
22f0: 7d 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }");....        
2300: 20 20 20 20 20 20 20 20 44 61 74 61 54 61 62 6c          DataTabl
2310: 65 20 64 61 74 61 54 61 62 6c 65 20 3d 20 64 61  e dataTable = da
2320: 74 61 53 65 74 2e 54 61 62 6c 65 73 5c 5b 22 24  taSet.Tables\["$
2330: 7b 6f 74 68 65 72 54 61 62 6c 65 7d 22 5c 5d 3b  {otherTable}"\];
2340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2350: 20 20 20 20 64 61 74 61 54 61 62 6c 65 2e 43 6f      dataTable.Co
2360: 6c 75 6d 6e 73 5c 5b 22 78 22 5c 5d 2e 55 6e 69  lumns\["x"\].Uni
2370: 71 75 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  que = true;..   
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
2390: 61 54 61 62 6c 65 2e 50 72 69 6d 61 72 79 4b 65  aTable.PrimaryKe
23a0: 79 20 3d 20 6e 65 77 20 44 61 74 61 43 6f 6c 75  y = new DataColu
23b0: 6d 6e 5c 5b 5c 5d 20 7b 0d 0a 20 20 20 20 20 20  mn\[\] {..      
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
23d0: 54 61 62 6c 65 2e 43 6f 6c 75 6d 6e 73 5c 5b 22  Table.Columns\["
23e0: 78 22 5c 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  x"\]..          
23f0: 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20        };....    
2400: 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
2410: 72 20 7b 5b 69 73 4d 6f 6e 6f 5d 20 3f 20 22 23  r {[isMono] ? "#
2420: 70 72 61 67 6d 61 20 77 61 72 6e 69 6e 67 20 64  pragma warning d
2430: 69 73 61 62 6c 65 20 32 31 39 22 20 3a 20 22 22  isable 219" : ""
2440: 7d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  }]..            
2450: 20 20 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e      SQLiteComman
2460: 64 42 75 69 6c 64 65 72 20 63 6f 6d 6d 61 6e 64  dBuilder command
2470: 42 75 69 6c 64 65 72 20 3d 0d 0a 20 20 20 20 20  Builder =..     
2480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2490: 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  ew SQLiteCommand
24a0: 42 75 69 6c 64 65 72 28 64 61 74 61 41 64 61 70  Builder(dataAdap
24b0: 74 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ter);..         
24c0: 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69         [expr {[i
24d0: 73 4d 6f 6e 6f 5d 20 3f 20 22 23 70 72 61 67 6d  sMono] ? "#pragm
24e0: 61 20 77 61 72 6e 69 6e 67 20 72 65 73 74 6f 72  a warning restor
24f0: 65 20 32 31 39 22 20 3a 20 22 22 7d 5d 0d 0a 0d  e 219" : ""}]...
2500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2510: 20 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f   foreach (DataRo
2520: 77 20 64 61 74 61 52 6f 77 20 69 6e 20 64 61 74  w dataRow in dat
2530: 61 54 61 62 6c 65 2e 52 6f 77 73 29 0d 0a 20 20  aTable.Rows)..  
2540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2560: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2570: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2580: 3a 20 55 70 64 61 74 65 20 65 76 65 6e 20 72 6f  : Update even ro
2590: 77 73 20 61 6e 64 20 64 65 6c 65 74 65 20 6f 64  ws and delete od
25a0: 64 20 72 6f 77 73 2e 0d 0a 20 20 20 20 20 20 20  d rows...       
25b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d0: 20 69 66 20 28 28 6c 6f 6e 67 29 64 61 74 61 52   if ((long)dataR
25e0: 6f 77 5c 5b 22 78 22 5c 5d 20 25 20 32 20 3d 3d  ow\["x"\] % 2 ==
25f0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
2600: 20 20 20 20 20 20 20 20 20 64 61 74 61 52 6f 77           dataRow
2610: 5c 5b 22 79 22 5c 5d 20 3d 0d 0a 20 20 20 20 20  \["y"\] =..     
2620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2630: 20 20 20 44 61 74 65 54 69 6d 65 2e 55 74 63 4e     DateTime.UtcN
2640: 6f 77 2e 54 6f 53 74 72 69 6e 67 28 22 5b 67 65  ow.ToString("[ge
2650: 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d  tDateTimeFormat]
2660: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
2670: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2690: 20 64 61 74 61 52 6f 77 2e 44 65 6c 65 74 65 28   dataRow.Delete(
26a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26c0: 20 20 20 20 20 20 20 20 20 64 61 74 61 41 64 61           dataAda
26d0: 70 74 65 72 2e 55 70 64 61 74 65 28 64 61 74 61  pter.Update(data
26e0: 54 61 62 6c 65 29 3b 20 2f 2f 20 44 42 43 6f 6e  Table); // DBCon
26f0: 63 75 72 72 65 6e 63 79 45 78 63 65 70 74 69 6f  currencyExceptio
2700: 6e 20 28 3f 29 0d 0a 20 20 20 20 20 20 20 20 20  n (?)..         
2710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2720: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2730: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
2740: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
2750: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
2760: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
2770: 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
2780: 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c  Lite.dll]....  l
2790: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
27a0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
27b0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
27c0: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
27d0: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
27e0: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
27f0: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
2800: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
2810: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
2820: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
2830: 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72   Main..      } r
2840: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
2850: 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75  sult ""]}] $resu
2860: 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
2870: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
2880: 69 6c 65 4e 61 6d 65 3b 20 75 6e 73 65 74 20 2d  ileName; unset -
2890: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69  nocomplain db fi
28a0: 6c 65 4e 61 6d 65 0d 0a 20 20 63 6c 65 61 6e 75  leName..  cleanu
28b0: 70 44 62 20 24 6f 74 68 65 72 46 69 6c 65 4e 61  pDb $otherFileNa
28c0: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
28d0: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
28e0: 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72   code results er
28f0: 72 6f 72 73 20 69 20 73 71 6c 20 6f 74 68 65 72  rors i sql other
2900: 54 61 62 6c 65 20 6f 74 68 65 72 44 62 4e 61 6d  Table otherDbNam
2910: 65 20 5c 0d 0a 20 20 20 20 20 20 6f 74 68 65 72  e \..      other
2920: 44 61 74 61 53 6f 75 72 63 65 20 64 61 74 61 53  DataSource dataS
2930: 6f 75 72 63 65 20 69 64 20 6f 74 68 65 72 46 69  ource id otherFi
2940: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
2950: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d 6f  raints {eagle mo
2960: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
2970: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
2980: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
2990: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d  .Data.SQLite com
29a0: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
29b0: 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c  ch regexp -resul
29c0: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
29d0: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
29e0: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
29f0: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d  #\d+ \{\} 0 \{\}
2a00: 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  $}}....#########
2a10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a50: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
2a60: 74 20 7b 74 65 73 74 20 74 6b 74 2d 33 34 33 64  t {test tkt-343d
2a70: 33 39 32 62 35 31 2d 33 2e 31 20 7b 61 74 74 61  392b51-3.1 {atta
2a80: 63 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 73  ched database, s
2a90: 61 6d 65 20 74 61 62 6c 65 20 6e 61 6d 65 7d 20  ame table name} 
2aa0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
2ab0: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
2ac0: 65 20 74 6b 74 2d 33 34 33 64 33 39 32 62 35 31  e tkt-343d392b51
2ad0: 2d 33 2e 31 2e 64 62 5d 0d 0a 20 20 73 65 74 20  -3.1.db]..  set 
2ae0: 6f 74 68 65 72 46 69 6c 65 4e 61 6d 65 20 74 6b  otherFileName tk
2af0: 74 2d 33 34 33 64 33 39 32 62 35 31 2d 33 2e 31  t-343d392b51-3.1
2b00: 2d 6f 74 68 65 72 44 62 2e 64 62 0d 0a 7d 20 2d  -otherDb.db..} -
2b10: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 6f 74  body {..  set ot
2b20: 68 65 72 44 61 74 61 53 6f 75 72 63 65 20 5b 66  herDataSource [f
2b30: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
2b40: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
2b50: 24 6f 74 68 65 72 46 69 6c 65 4e 61 6d 65 5d 0d  $otherFileName].
2b60: 0a 20 20 73 65 74 20 6f 74 68 65 72 44 62 4e 61  .  set otherDbNa
2b70: 6d 65 20 6f 74 68 65 72 44 62 0d 0a 20 20 73 65  me otherDb..  se
2b80: 74 20 6f 74 68 65 72 54 61 62 6c 65 20 5b 61 70  t otherTable [ap
2b90: 70 65 6e 64 41 72 67 73 20 24 6f 74 68 65 72 44  pendArgs $otherD
2ba0: 62 4e 61 6d 65 20 2e 74 31 5d 0d 0a 0d 0a 20 20  bName .t1]....  
2bb0: 73 65 74 20 73 71 6c 28 69 6e 73 65 72 74 73 29  set sql(inserts)
2bc0: 20 22 22 0d 0a 20 20 73 65 74 20 73 71 6c 28 31   ""..  set sql(1
2bd0: 29 20 5b 73 75 62 73 74 20 7b 20 5c 0d 0a 20 20  ) [subst { \..  
2be0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2bf0: 31 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d  1(x INTEGER PRIM
2c00: 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a 20 20 20  ARY KEY); \..   
2c10: 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45   ATTACH DATABASE
2c20: 20 27 24 7b 6f 74 68 65 72 44 61 74 61 53 6f 75   '${otherDataSou
2c30: 72 63 65 7d 27 20 41 53 20 24 7b 6f 74 68 65 72  rce}' AS ${other
2c40: 44 62 4e 61 6d 65 7d 3b 20 5c 0d 0a 20 20 20 20  DbName}; \..    
2c50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 24 7b 6f  CREATE TABLE ${o
2c60: 74 68 65 72 54 61 62 6c 65 7d 28 78 20 49 4e 54  therTable}(x INT
2c70: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
2c80: 29 3b 20 5c 0d 0a 20 20 20 20 5b 66 6f 72 20 7b  ); \..    [for {
2c90: 73 65 74 20 69 20 31 7d 20 7b 24 69 20 3c 20 33  set i 1} {$i < 3
2ca0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0d 0a 20 20  } {incr i} {..  
2cb0: 20 20 20 20 61 70 70 65 6e 64 20 73 71 6c 28 69      append sql(i
2cc0: 6e 73 65 72 74 73 29 20 5b 61 70 70 65 6e 64 41  nserts) [appendA
2cd0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..         
2ce0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
2cf0: 20 28 78 29 20 56 41 4c 55 45 53 28 22 20 24 69   (x) VALUES(" $i
2d00: 20 22 29 3b 20 22 5d 0d 0a 0d 0a 20 20 20 20 20   "); "]....     
2d10: 20 61 70 70 65 6e 64 20 73 71 6c 28 69 6e 73 65   append sql(inse
2d20: 72 74 73 29 20 5b 61 70 70 65 6e 64 41 72 67 73  rts) [appendArgs
2d30: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 49   \..          "I
2d40: 4e 53 45 52 54 20 49 4e 54 4f 20 22 20 24 7b 6f  NSERT INTO " ${o
2d50: 74 68 65 72 54 61 62 6c 65 7d 20 22 20 28 78 29  therTable} " (x)
2d60: 20 56 41 4c 55 45 53 28 22 20 5b 65 78 70 72 20   VALUES(" [expr 
2d70: 7b 24 69 20 2a 20 32 7d 5d 20 22 29 3b 20 22 5d  {$i * 2}] "); "]
2d80: 0d 0a 20 20 20 20 7d 3b 20 72 65 74 75 72 6e 20  ..    }; return 
2d90: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
2da0: 73 74 73 20 73 71 6c 28 69 6e 73 65 72 74 73 29  sts sql(inserts)
2db0: 5d 20 3f 20 24 73 71 6c 28 69 6e 73 65 72 74 73  ] ? $sql(inserts
2dc0: 29 20 3a 20 22 22 7d 5d 5d 20 5c 0d 0a 20 20 7d  ) : ""}]] \..  }
2dd0: 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  ]....  sql execu
2de0: 74 65 20 24 64 62 20 24 73 71 6c 28 31 29 0d 0a  te $db $sql(1)..
2df0: 0d 0a 20 20 6c 69 73 74 20 5b 73 71 6c 20 65 78  ..  list [sql ex
2e00: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72  ecute -execute r
2e10: 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c 69  eader -format li
2e20: 73 74 20 24 64 62 20 22 53 45 4c 45 43 54 20 78  st $db "SELECT x
2e30: 20 46 52 4f 4d 20 74 31 3b 22 5d 20 5c 0d 0a 20   FROM t1;"] \.. 
2e40: 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74       [sql execut
2e50: 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
2e60: 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20 24  r -format list $
2e70: 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  db [appendArgs \
2e80: 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
2e90: 78 20 46 52 4f 4d 20 22 20 24 7b 6f 74 68 65 72  x FROM " ${other
2ea0: 54 61 62 6c 65 7d 20 22 3b 22 5d 5d 0d 0a 7d 20  Table} ";"]]..} 
2eb0: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
2ec0: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
2ed0: 65 3b 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  e; unset -nocomp
2ee0: 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65  lain db fileName
2ef0: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 6f  ..  cleanupDb $o
2f00: 74 68 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  therFileName....
2f10: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
2f20: 61 69 6e 20 69 20 73 71 6c 20 6f 74 68 65 72 54  ain i sql otherT
2f30: 61 62 6c 65 20 6f 74 68 65 72 44 62 4e 61 6d 65  able otherDbName
2f40: 20 6f 74 68 65 72 44 61 74 61 53 6f 75 72 63 65   otherDataSource
2f50: 20 6f 74 68 65 72 46 69 6c 65 4e 61 6d 65 0d 0a   otherFileName..
2f60: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
2f70: 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67  ..{eagle monoBug
2f80: 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
2f90: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
2fa0: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
2fb0: 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c  QLite} -result \
2fc0: 0d 0a 7b 7b 31 20 32 7d 20 7b 32 20 34 7d 7d 7d  ..{{1 2} {2 4}}}
2fd0: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
2fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3020: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
3030: 74 65 73 74 20 74 6b 74 2d 33 34 33 64 33 39 32  test tkt-343d392
3040: 62 35 31 2d 33 2e 32 20 7b 61 64 61 70 74 65 72  b51-3.2 {adapter
3050: 2c 20 61 74 74 61 63 68 65 64 20 64 62 2c 20 74  , attached db, t
3060: 61 62 6c 65 20 6e 61 6d 65 73 7d 20 2d 73 65 74  able names} -set
3070: 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
3080: 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 74 6b  [set fileName tk
3090: 74 2d 33 34 33 64 33 39 32 62 35 31 2d 33 2e 32  t-343d392b51-3.2
30a0: 2e 64 62 5d 0d 0a 20 20 73 65 74 20 6f 74 68 65  .db]..  set othe
30b0: 72 46 69 6c 65 4e 61 6d 65 20 74 6b 74 2d 33 34  rFileName tkt-34
30c0: 33 64 33 39 32 62 35 31 2d 33 2e 32 2d 6f 74 68  3d392b51-3.2-oth
30d0: 65 72 44 62 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  erDb.db..} -body
30e0: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
30f0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
3100: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
3110: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
3120: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
3130: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
3140: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
3150: 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 73 65 74 20  ileName]..  set 
3160: 6f 74 68 65 72 44 61 74 61 53 6f 75 72 63 65 20  otherDataSource 
3170: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
3180: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
3190: 5d 20 24 6f 74 68 65 72 46 69 6c 65 4e 61 6d 65  ] $otherFileName
31a0: 5d 0d 0a 20 20 73 65 74 20 6f 74 68 65 72 44 62  ]..  set otherDb
31b0: 4e 61 6d 65 20 6f 74 68 65 72 44 62 0d 0a 20 20  Name otherDb..  
31c0: 73 65 74 20 6f 74 68 65 72 54 61 62 6c 65 20 5b  set otherTable [
31d0: 61 70 70 65 6e 64 41 72 67 73 20 24 6f 74 68 65  appendArgs $othe
31e0: 72 44 62 4e 61 6d 65 20 2e 74 31 5d 0d 0a 0d 0a  rDbName .t1]....
31f0: 20 20 73 65 74 20 73 71 6c 28 69 6e 73 65 72 74    set sql(insert
3200: 73 29 20 22 22 0d 0a 20 20 73 65 74 20 73 71 6c  s) ""..  set sql
3210: 28 31 29 20 5b 73 75 62 73 74 20 7b 20 5c 0d 0a  (1) [subst { \..
3220: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
3230: 20 74 31 28 78 20 49 4e 54 45 47 45 52 20 50 52   t1(x INTEGER PR
3240: 49 4d 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a 20  IMARY KEY); \.. 
3250: 20 20 20 41 54 54 41 43 48 20 44 41 54 41 42 41     ATTACH DATABA
3260: 53 45 20 27 24 7b 6f 74 68 65 72 44 61 74 61 53  SE '${otherDataS
3270: 6f 75 72 63 65 7d 27 20 41 53 20 24 7b 6f 74 68  ource}' AS ${oth
3280: 65 72 44 62 4e 61 6d 65 7d 3b 20 5c 0d 0a 20 20  erDbName}; \..  
3290: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 24    CREATE TABLE $
32a0: 7b 6f 74 68 65 72 54 61 62 6c 65 7d 28 78 20 49  {otherTable}(x I
32b0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
32c0: 45 59 29 3b 20 5c 0d 0a 20 20 20 20 5b 66 6f 72  EY); \..    [for
32d0: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 20 3c   {set i 1} {$i <
32e0: 20 33 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0d 0a   3} {incr i} {..
32f0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 73 71 6c        append sql
3300: 28 69 6e 73 65 72 74 73 29 20 5b 61 70 70 65 6e  (inserts) [appen
3310: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..       
3320: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
3330: 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 22 20  t1 (x) VALUES(" 
3340: 24 69 20 22 29 3b 22 5d 0d 0a 20 20 20 20 20 20  $i ");"]..      
3350: 61 70 70 65 6e 64 20 73 71 6c 28 69 6e 73 65 72  append sql(inser
3360: 74 73 29 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ts) [appendArgs 
3370: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 49 4e  \..          "IN
3380: 53 45 52 54 20 49 4e 54 4f 20 22 20 24 7b 6f 74  SERT INTO " ${ot
3390: 68 65 72 54 61 62 6c 65 7d 20 22 20 28 78 29 20  herTable} " (x) 
33a0: 56 41 4c 55 45 53 28 22 20 5b 65 78 70 72 20 7b  VALUES(" [expr {
33b0: 24 69 20 2a 20 32 7d 5d 20 22 29 3b 20 22 5d 0d  $i * 2}] "); "].
33c0: 0a 20 20 20 20 7d 3b 20 72 65 74 75 72 6e 20 5b  .    }; return [
33d0: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
33e0: 74 73 20 73 71 6c 28 69 6e 73 65 72 74 73 29 5d  ts sql(inserts)]
33f0: 20 3f 20 24 73 71 6c 28 69 6e 73 65 72 74 73 29   ? $sql(inserts)
3400: 20 3a 20 22 22 7d 5d 5d 20 5c 0d 0a 20 20 7d 5d   : ""}]] \..  }]
3410: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
3420: 20 5b 73 75 62 73 74 20 7b 20 5c 0d 0a 20 20 20   [subst { \..   
3430: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 24   SELECT x FROM $
3440: 7b 6f 74 68 65 72 54 61 62 6c 65 7d 20 4f 52 44  {otherTable} ORD
3450: 45 52 20 42 59 20 78 3b 20 5c 0d 0a 20 20 7d 5d  ER BY x; \..  }]
3460: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
3470: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
3480: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
3490: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
34a0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
34b0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
34c0: 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 20 20 75 73  em.Data;..    us
34d0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
34e0: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
34f0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
3500: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
3510: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3520: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
3530: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
3540: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3550: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
3560: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3570: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
3580: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
3590: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
35a0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
35b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
35c0: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
35d0: 74 61 53 6f 75 72 63 65 7d 3b 22 29 29 0d 0a 20  taSource};")).. 
35e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35f0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
3600: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20  on.Open();....  
3610: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
3620: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
3630: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
3640: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
3650: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
3660: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3670: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
3680: 6e 64 54 65 78 74 20 3d 20 22 24 7b 73 71 6c 28  ndText = "${sql(
3690: 31 29 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  1)}";..         
36a0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65       command.Exe
36b0: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
36c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
36d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
36e0: 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 41  ing (SQLiteDataA
36f0: 64 61 70 74 65 72 20 64 61 74 61 41 64 61 70 74  dapter dataAdapt
3700: 65 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  er = new SQLiteD
3710: 61 74 61 41 64 61 70 74 65 72 28 0d 0a 20 20 20  ataAdapter(..   
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7b               "${
3730: 73 71 6c 28 32 29 7d 22 2c 20 63 6f 6e 6e 65 63  sql(2)}", connec
3740: 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  tion))..        
3750: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3760: 20 20 20 20 20 75 73 69 6e 67 20 28 44 61 74 61       using (Data
3770: 53 65 74 20 64 61 74 61 53 65 74 20 3d 20 6e 65  Set dataSet = ne
3780: 77 20 44 61 74 61 53 65 74 28 29 29 0d 0a 20 20  w DataSet())..  
3790: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
37b0: 61 74 61 41 64 61 70 74 65 72 2e 46 69 6c 6c 28  ataAdapter.Fill(
37c0: 64 61 74 61 53 65 74 2c 20 22 24 7b 6f 74 68 65  dataSet, "${othe
37d0: 72 54 61 62 6c 65 7d 22 29 3b 0d 0a 0d 0a 20 20  rTable}");....  
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
37f0: 74 61 54 61 62 6c 65 20 64 61 74 61 54 61 62 6c  taTable dataTabl
3800: 65 20 3d 20 64 61 74 61 53 65 74 2e 54 61 62 6c  e = dataSet.Tabl
3810: 65 73 5c 5b 22 24 7b 6f 74 68 65 72 54 61 62 6c  es\["${otherTabl
3820: 65 7d 22 5c 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e}"\];....      
3830: 20 20 20 20 20 20 20 20 20 20 64 61 74 61 54 61            dataTa
3840: 62 6c 65 2e 43 6f 6c 75 6d 6e 73 5c 5b 22 78 22  ble.Columns\["x"
3850: 5c 5d 2e 55 6e 69 71 75 65 20 3d 20 74 72 75 65  \].Unique = true
3860: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3870: 20 20 20 64 61 74 61 54 61 62 6c 65 2e 50 72 69     dataTable.Pri
3880: 6d 61 72 79 4b 65 79 20 3d 20 6e 65 77 20 44 61  maryKey = new Da
3890: 74 61 43 6f 6c 75 6d 6e 5c 5b 5c 5d 20 7b 0d 0a  taColumn\[\] {..
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38b0: 20 20 64 61 74 61 54 61 62 6c 65 2e 43 6f 6c 75    dataTable.Colu
38c0: 6d 6e 73 5c 5b 22 78 22 5c 5d 0d 0a 20 20 20 20  mns\["x"\]..    
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a              };..
38e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38f0: 20 20 5b 65 78 70 72 20 7b 5b 69 73 4d 6f 6e 6f    [expr {[isMono
3900: 5d 20 3f 20 22 23 70 72 61 67 6d 61 20 77 61 72  ] ? "#pragma war
3910: 6e 69 6e 67 20 64 69 73 61 62 6c 65 20 32 31 39  ning disable 219
3920: 22 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20  " : ""}]..      
3930: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
3940: 43 6f 6d 6d 61 6e 64 42 75 69 6c 64 65 72 20 63  CommandBuilder c
3950: 6f 6d 6d 61 6e 64 42 75 69 6c 64 65 72 20 3d 0d  ommandBuilder =.
3960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3970: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 43       new SQLiteC
3980: 6f 6d 6d 61 6e 64 42 75 69 6c 64 65 72 28 64 61  ommandBuilder(da
3990: 74 61 41 64 61 70 74 65 72 29 3b 0d 0a 20 20 20  taAdapter);..   
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78               [ex
39b0: 70 72 20 7b 5b 69 73 4d 6f 6e 6f 5d 20 3f 20 22  pr {[isMono] ? "
39c0: 23 70 72 61 67 6d 61 20 77 61 72 6e 69 6e 67 20  #pragma warning 
39d0: 72 65 73 74 6f 72 65 20 32 31 39 22 20 3a 20 22  restore 219" : "
39e0: 22 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  "}]....         
39f0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
3a00: 44 61 74 61 52 6f 77 20 64 61 74 61 52 6f 77 20  DataRow dataRow 
3a10: 69 6e 20 64 61 74 61 54 61 62 6c 65 2e 52 6f 77  in dataTable.Row
3a20: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
3a30: 20 20 20 20 20 20 64 61 74 61 52 6f 77 2e 44 65        dataRow.De
3a40: 6c 65 74 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  lete();....     
3a50: 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 41             dataA
3a60: 64 61 70 74 65 72 2e 55 70 64 61 74 65 28 64 61  dapter.Update(da
3a70: 74 61 54 61 62 6c 65 29 3b 20 2f 2f 20 44 42 43  taTable); // DBC
3a80: 6f 6e 63 75 72 72 65 6e 63 79 45 78 63 65 70 74  oncurrencyExcept
3a90: 69 6f 6e 20 28 3f 29 0d 0a 20 20 20 20 20 20 20  ion (?)..       
3aa0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3ab0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3ac0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
3ad0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3ae0: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
3af0: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
3b00: 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ors System.Data.
3b10: 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20  SQLite.dll].... 
3b20: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
3b30: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
3b40: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
3b50: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
3b60: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
3b70: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
3b80: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
3b90: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
3ba0: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
3bb0: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
3bc0: 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d  d} Main..      }
3bd0: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
3be0: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65  result ""]}] $re
3bf0: 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
3c00: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
3c10: 24 66 69 6c 65 4e 61 6d 65 3b 20 75 6e 73 65 74  $fileName; unset
3c20: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20   -nocomplain db 
3c30: 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 63 6c 65 61  fileName..  clea
3c40: 6e 75 70 44 62 20 24 6f 74 68 65 72 46 69 6c 65  nupDb $otherFile
3c50: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
3c60: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
3c70: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
3c80: 65 72 72 6f 72 73 20 69 20 73 71 6c 20 6f 74 68  errors i sql oth
3c90: 65 72 54 61 62 6c 65 20 6f 74 68 65 72 44 62 4e  erTable otherDbN
3ca0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 6f 74 68  ame \..      oth
3cb0: 65 72 44 61 74 61 53 6f 75 72 63 65 20 64 61 74  erDataSource dat
3cc0: 61 53 6f 75 72 63 65 20 69 64 20 6f 74 68 65 72  aSource id other
3cd0: 46 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  FileName..} -con
3ce0: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
3cf0: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
3d00: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
3d10: 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74  TA SQLite\..Syst
3d20: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63  em.Data.SQLite c
3d30: 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d  ompileCSharp} -m
3d40: 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73  atch regexp -res
3d50: 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65  ult {^Ok\..Syste
3d60: 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c  m#CodeDom#Compil
3d70: 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c  er#CompilerResul
3d80: 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b  ts#\d+ \{\} 0 \{
3d90: 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  \}$}}....#######
3da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3de0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53  ########....runS
3df0: 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75  QLiteTestEpilogu
3e00: 65 0d 0a 72 75 6e 54 65 73 74 45 70 69 6c 6f 67  e..runTestEpilog
3e10: 75 65 0d 0a                                      ue..