System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 797158c37ca576daf432616d9f8a4dcecdacf298:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 0d 0a 23 69 66 20 21 4e  ystem;....#if !N
0160: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
0170: 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 0d 0a   TRACE_WARNING..
0180: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
0190: 69 61 67 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e  iagnostics;..#en
01a0: 64 69 66 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53  dif....  using S
01b0: 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e  ystem.Runtime.In
01c0: 74 65 72 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a  teropServices;..
01d0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43    using System.C
01e0: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72  ollections.Gener
01f0: 69 63 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  ic;..  using Sys
0200: 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f  tem.Globalizatio
0210: 6e 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  n;..  using Syst
0220: 65 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 20 20 2f 2f  em.Text;....  //
0230: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
0240: 2f 2f 20 54 68 69 73 20 62 61 73 65 20 63 6c 61  // This base cla
0250: 73 73 20 70 72 6f 76 69 64 65 73 20 64 61 74 61  ss provides data
0260: 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20  type conversion 
0270: 73 65 72 76 69 63 65 73 20 66 6f 72 20 74 68 65  services for the
0280: 20 53 51 4c 69 74 65 20 70 72 6f 76 69 64 65 72   SQLite provider
0290: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  ...  /// </summa
02a0: 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 61 62  ry>..  public ab
02b0: 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c  stract class SQL
02c0: 69 74 65 43 6f 6e 76 65 72 74 0d 0a 20 20 7b 0d  iteConvert..  {.
02d0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
02e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
02f0: 66 61 6c 6c 62 61 63 6b 20 64 65 66 61 75 6c 74  fallback default
0300: 20 64 61 74 61 62 61 73 65 20 74 79 70 65 20 77   database type w
0310: 68 65 6e 20 6f 6e 65 20 63 61 6e 6e 6f 74 20 62  hen one cannot b
0320: 65 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  e obtained from 
0330: 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 69 73  an..    /// exis
0340: 74 69 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ting connection 
0350: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
0360: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0370: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
0380: 69 63 20 72 65 61 64 6f 6e 6c 79 20 44 62 54 79  ic readonly DbTy
0390: 70 65 20 46 61 6c 6c 62 61 63 6b 44 65 66 61 75  pe FallbackDefau
03a0: 6c 74 44 62 54 79 70 65 20 3d 20 44 62 54 79 70  ltDbType = DbTyp
03b0: 65 2e 4f 62 6a 65 63 74 3b 0d 0a 0d 0a 20 20 20  e.Object;....   
03c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
03d0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 61 6c 6c      /// The fall
03e0: 62 61 63 6b 20 64 65 66 61 75 6c 74 20 64 61 74  back default dat
03f0: 61 62 61 73 65 20 74 79 70 65 20 6e 61 6d 65 20  abase type name 
0400: 77 68 65 6e 20 6f 6e 65 20 63 61 6e 6e 6f 74 20  when one cannot 
0410: 62 65 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  be obtained from
0420: 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e 20 65 78 69  ..    /// an exi
0430: 73 74 69 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e  sting connection
0440: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
0450: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0460: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
0470: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
0480: 69 6e 67 20 46 61 6c 6c 62 61 63 6b 44 65 66 61  ing FallbackDefa
0490: 75 6c 74 54 79 70 65 4e 61 6d 65 20 3d 20 53 74  ultTypeName = St
04a0: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20  ring.Empty;.... 
04b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
04c0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61  ..    /// The va
04d0: 6c 75 65 20 66 6f 72 20 74 68 65 20 55 6e 69 78  lue for the Unix
04e0: 20 65 70 6f 63 68 20 28 65 2e 67 2e 20 4a 61 6e   epoch (e.g. Jan
04f0: 75 61 72 79 20 31 2c 20 31 39 37 30 20 61 74 20  uary 1, 1970 at 
0500: 6d 69 64 6e 69 67 68 74 2c 20 69 6e 20 55 54 43  midnight, in UTC
0510: 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  )...    /// </su
0520: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74  mmary>..    prot
0530: 65 63 74 65 64 20 73 74 61 74 69 63 20 72 65 61  ected static rea
0540: 64 6f 6e 6c 79 20 44 61 74 65 54 69 6d 65 20 55  donly DateTime U
0550: 6e 69 78 45 70 6f 63 68 20 3d 0d 0a 20 20 20 20  nixEpoch =..    
0560: 20 20 20 20 6e 65 77 20 44 61 74 65 54 69 6d 65      new DateTime
0570: 28 31 39 37 30 2c 20 31 2c 20 31 2c 20 30 2c 20  (1970, 1, 1, 0, 
0580: 30 2c 20 30 2c 20 44 61 74 65 54 69 6d 65 4b 69  0, 0, DateTimeKi
0590: 6e 64 2e 55 74 63 29 3b 0d 0a 0d 0a 20 20 20 20  nd.Utc);....    
05a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
05b0: 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
05c0: 20 6f 66 20 74 68 65 20 4f 4c 45 20 41 75 74 6f   of the OLE Auto
05d0: 6d 61 74 69 6f 6e 20 65 70 6f 63 68 20 72 65 70  mation epoch rep
05e0: 72 65 73 65 6e 74 65 64 20 61 73 20 61 20 4a 75  resented as a Ju
05f0: 6c 69 61 6e 20 64 61 79 2e 0d 0a 20 20 20 20 2f  lian day...    /
0600: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0610: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
0620: 63 20 72 65 61 64 6f 6e 6c 79 20 64 6f 75 62 6c  c readonly doubl
0630: 65 20 4f 6c 65 41 75 74 6f 6d 61 74 69 6f 6e 45  e OleAutomationE
0640: 70 6f 63 68 41 73 4a 75 6c 69 61 6e 44 61 79 20  pochAsJulianDay 
0650: 3d 20 32 34 31 35 30 31 38 2e 35 3b 0d 0a 0d 0a  = 2415018.5;....
0660: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0670: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
0680: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 66 6f 72  ormat string for
0690: 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 73   DateTime values
06a0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
06b0: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
06c0: 20 6f 72 20 43 75 72 72 65 6e 74 43 75 6c 74 75   or CurrentCultu
06d0: 72 65 20 66 6f 72 6d 61 74 73 2e 0d 0a 20 20 20  re formats...   
06e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
06f0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e  .    private con
0700: 73 74 20 73 74 72 69 6e 67 20 46 75 6c 6c 46 6f  st string FullFo
0710: 72 6d 61 74 20 3d 20 22 79 79 79 79 2d 4d 4d 2d  rmat = "yyyy-MM-
0720: 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66  ddTHH:mm:ss.ffff
0730: 66 66 66 4b 22 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  fffK";....    //
0740: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0750: 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20 6f 66   /// An array of
0760: 20 49 53 4f 2d 38 36 30 31 20 44 61 74 65 54 69   ISO-8601 DateTi
0770: 6d 65 20 66 6f 72 6d 61 74 73 20 74 68 61 74 20  me formats that 
0780: 77 65 20 73 75 70 70 6f 72 74 20 70 61 72 73 69  we support parsi
0790: 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ng...    /// </s
07a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
07b0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
07c0: 6e 67 5b 5d 20 5f 64 61 74 65 74 69 6d 65 46 6f  ng[] _datetimeFo
07d0: 72 6d 61 74 73 20 3d 20 6e 65 77 20 73 74 72 69  rmats = new stri
07e0: 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 22 54  ng[] {..      "T
07f0: 48 48 6d 6d 73 73 4b 22 2c 0d 0a 20 20 20 20 20  HHmmssK",..     
0800: 20 22 54 48 48 6d 6d 4b 22 2c 0d 0a 20 20 20 20   "THHmmK",..    
0810: 20 20 22 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46    "HH:mm:ss.FFFF
0820: 46 46 46 4b 22 2c 0d 0a 20 20 20 20 20 20 22 48  FFFK",..      "H
0830: 48 3a 6d 6d 3a 73 73 4b 22 2c 0d 0a 20 20 20 20  H:mm:ssK",..    
0840: 20 20 22 48 48 3a 6d 6d 4b 22 2c 0d 0a 20 20 20    "HH:mmK",..   
0850: 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48     "yyyy-MM-dd H
0860: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
0870: 22 2c 20 2f 2a 20 4e 4f 54 45 3a 20 55 54 43 20  ", /* NOTE: UTC 
0880: 64 65 66 61 75 6c 74 20 28 35 29 2e 20 2a 2f 0d  default (5). */.
0890: 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d  .      "yyyy-MM-
08a0: 64 64 20 48 48 3a 6d 6d 3a 73 73 4b 22 2c 0d 0a  dd HH:mm:ssK",..
08b0: 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64        "yyyy-MM-d
08c0: 64 20 48 48 3a 6d 6d 4b 22 2c 0d 0a 20 20 20 20  d HH:mmK",..    
08d0: 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48    "yyyy-MM-ddTHH
08e0: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22  :mm:ss.FFFFFFFK"
08f0: 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d  ,..      "yyyy-M
0900: 4d 2d 64 64 54 48 48 3a 6d 6d 4b 22 2c 0d 0a 20  M-ddTHH:mmK",.. 
0910: 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64       "yyyy-MM-dd
0920: 54 48 48 3a 6d 6d 3a 73 73 4b 22 2c 0d 0a 20 20  THH:mm:ssK",..  
0930: 20 20 20 20 22 79 79 79 79 4d 4d 64 64 48 48 6d      "yyyyMMddHHm
0940: 6d 73 73 4b 22 2c 0d 0a 20 20 20 20 20 20 22 79  mssK",..      "y
0950: 79 79 79 4d 4d 64 64 48 48 6d 6d 4b 22 2c 0d 0a  yyyMMddHHmmK",..
0960: 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64 64 54        "yyyyMMddT
0970: 48 48 6d 6d 73 73 46 46 46 46 46 46 46 4b 22 2c  HHmmssFFFFFFFK",
0980: 0d 0a 20 20 20 20 20 20 22 54 48 48 6d 6d 73 73  ..      "THHmmss
0990: 22 2c 0d 0a 20 20 20 20 20 20 22 54 48 48 6d 6d  ",..      "THHmm
09a0: 22 2c 0d 0a 20 20 20 20 20 20 22 48 48 3a 6d 6d  ",..      "HH:mm
09b0: 3a 73 73 2e 46 46 46 46 46 46 46 22 2c 0d 0a 20  :ss.FFFFFFF",.. 
09c0: 20 20 20 20 20 22 48 48 3a 6d 6d 3a 73 73 22 2c       "HH:mm:ss",
09d0: 0d 0a 20 20 20 20 20 20 22 48 48 3a 6d 6d 22 2c  ..      "HH:mm",
09e0: 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d  ..      "yyyy-MM
09f0: 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46  -dd HH:mm:ss.FFF
0a00: 46 46 46 46 22 2c 20 2f 2a 20 4e 4f 54 45 3a 20  FFFF", /* NOTE: 
0a10: 4e 6f 6e 2d 55 54 43 20 64 65 66 61 75 6c 74 20  Non-UTC default 
0a20: 28 31 39 29 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  (19). */..      
0a30: 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d  "yyyy-MM-dd HH:m
0a40: 6d 3a 73 73 22 2c 0d 0a 20 20 20 20 20 20 22 79  m:ss",..      "y
0a50: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 22  yyy-MM-dd HH:mm"
0a60: 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d  ,..      "yyyy-M
0a70: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-ddTHH:mm:ss.FF
0a80: 46 46 46 46 46 22 2c 0d 0a 20 20 20 20 20 20 22  FFFFF",..      "
0a90: 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d  yyyy-MM-ddTHH:mm
0aa0: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d  ",..      "yyyy-
0ab0: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 22 2c  MM-ddTHH:mm:ss",
0ac0: 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64  ..      "yyyyMMd
0ad0: 64 48 48 6d 6d 73 73 22 2c 0d 0a 20 20 20 20 20  dHHmmss",..     
0ae0: 20 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d 22 2c   "yyyyMMddHHmm",
0af0: 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64  ..      "yyyyMMd
0b00: 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46 46 22  dTHHmmssFFFFFFF"
0b10: 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d  ,..      "yyyy-M
0b20: 4d 2d 64 64 22 2c 0d 0a 20 20 20 20 20 20 22 79  M-dd",..      "y
0b30: 79 79 79 4d 4d 64 64 22 2c 0d 0a 20 20 20 20 20  yyyMMdd",..     
0b40: 20 22 79 79 2d 4d 4d 2d 64 64 22 0d 0a 20 20 20   "yy-MM-dd"..   
0b50: 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c   };....    /// <
0b60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0b70: 2f 20 54 68 65 20 69 6e 74 65 72 6e 61 6c 20 64  / The internal d
0b80: 65 66 61 75 6c 74 20 66 6f 72 6d 61 74 20 66 6f  efault format fo
0b90: 72 20 55 54 43 20 44 61 74 65 54 69 6d 65 20 76  r UTC DateTime v
0ba0: 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6e 76 65  alues when conve
0bb0: 72 74 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  rting..    /// t
0bc0: 6f 20 61 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20  o a string...   
0bd0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0be0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
0bf0: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
0c00: 69 6e 67 20 5f 64 61 74 65 74 69 6d 65 46 6f 72  ing _datetimeFor
0c10: 6d 61 74 55 74 63 20 3d 20 5f 64 61 74 65 74 69  matUtc = _dateti
0c20: 6d 65 46 6f 72 6d 61 74 73 5b 35 5d 3b 0d 0a 0d  meFormats[5];...
0c30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0c40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0c50: 69 6e 74 65 72 6e 61 6c 20 64 65 66 61 75 6c 74  internal default
0c60: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6c 6f 63 61   format for loca
0c70: 6c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  l DateTime value
0c80: 73 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e  s when convertin
0c90: 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 61 20  g..    /// to a 
0ca0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f  string...    ///
0cb0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0cc0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
0cd0: 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
0ce0: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 4c  _datetimeFormatL
0cf0: 6f 63 61 6c 20 3d 20 5f 64 61 74 65 74 69 6d 65  ocal = _datetime
0d00: 46 6f 72 6d 61 74 73 5b 31 39 5d 3b 0d 0a 0d 0a  Formats[19];....
0d10: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0d20: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e 20 55 54  >..    /// An UT
0d30: 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20 69 6e 73  F-8 Encoding ins
0d40: 74 61 6e 63 65 2c 20 73 6f 20 77 65 20 63 61 6e  tance, so we can
0d50: 20 63 6f 6e 76 65 72 74 20 73 74 72 69 6e 67 73   convert strings
0d60: 20 74 6f 20 61 6e 64 20 66 72 6f 6d 20 55 54 46   to and from UTF
0d70: 2d 38 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  -8..    /// </su
0d80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
0d90: 61 74 65 20 73 74 61 74 69 63 20 45 6e 63 6f 64  ate static Encod
0da0: 69 6e 67 20 5f 75 74 66 38 20 3d 20 6e 65 77 20  ing _utf8 = new 
0db0: 55 54 46 38 45 6e 63 6f 64 69 6e 67 28 29 3b 0d  UTF8Encoding();.
0dc0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0dd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0de0: 64 65 66 61 75 6c 74 20 44 61 74 65 54 69 6d 65  default DateTime
0df0: 20 66 6f 72 6d 61 74 20 66 6f 72 20 74 68 69 73   format for this
0e00: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
0e10: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0e20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
0e30: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 5f  iteDateFormats _
0e40: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 3b 0d  datetimeFormat;.
0e50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0e60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
0e70: 64 65 66 61 75 6c 74 20 44 61 74 65 54 69 6d 65  default DateTime
0e80: 4b 69 6e 64 20 66 6f 72 20 74 68 69 73 20 69 6e  Kind for this in
0e90: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
0ea0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0eb0: 20 69 6e 74 65 72 6e 61 6c 20 44 61 74 65 54 69   internal DateTi
0ec0: 6d 65 4b 69 6e 64 20 5f 64 61 74 65 74 69 6d 65  meKind _datetime
0ed0: 4b 69 6e 64 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Kind;..    /// <
0ee0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0ef0: 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 44 61  / The default Da
0f00: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 73 74  teTime format st
0f10: 72 69 6e 67 20 66 6f 72 20 74 68 69 73 20 69 6e  ring for this in
0f20: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
0f30: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0f40: 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e 67   internal string
0f50: 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74   _datetimeFormat
0f60: 53 74 72 69 6e 67 20 3d 20 6e 75 6c 6c 3b 0d 0a  String = null;..
0f70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0f80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 69 74 69  >..    /// Initi
0f90: 61 6c 69 7a 65 73 20 74 68 65 20 63 6f 6e 76 65  alizes the conve
0fa0: 72 73 69 6f 6e 20 63 6c 61 73 73 0d 0a 20 20 20  rsion class..   
0fb0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0fc0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
0fd0: 6e 61 6d 65 3d 22 66 6d 74 22 3e 54 68 65 20 64  name="fmt">The d
0fe0: 65 66 61 75 6c 74 20 64 61 74 65 2f 74 69 6d 65  efault date/time
0ff0: 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66   format to use f
1000: 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65  or this instance
1010: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1020: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b  / <param name="k
1030: 69 6e 64 22 3e 54 68 65 20 44 61 74 65 54 69 6d  ind">The DateTim
1040: 65 4b 69 6e 64 20 74 6f 20 75 73 65 2e 3c 2f 70  eKind to use.</p
1050: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1060: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53  param name="fmtS
1070: 74 72 69 6e 67 22 3e 54 68 65 20 44 61 74 65 54  tring">The DateT
1080: 69 6d 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  ime format strin
1090: 67 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d  g to use.</param
10a0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
10b0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 28 0d 0a  SQLiteConvert(..
10c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
10d0: 74 65 46 6f 72 6d 61 74 73 20 66 6d 74 2c 0d 0a  teFormats fmt,..
10e0: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
10f0: 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20  Kind kind,..    
1100: 20 20 20 20 73 74 72 69 6e 67 20 66 6d 74 53 74      string fmtSt
1110: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 29 0d  ring..        ).
1120: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 5f 64  .    {..      _d
1130: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 20  atetimeFormat = 
1140: 66 6d 74 3b 0d 0a 20 20 20 20 20 20 5f 64 61 74  fmt;..      _dat
1150: 65 74 69 6d 65 4b 69 6e 64 20 3d 20 6b 69 6e 64  etimeKind = kind
1160: 3b 0d 0a 20 20 20 20 20 20 5f 64 61 74 65 74 69  ;..      _dateti
1170: 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 20 3d  meFormatString =
1180: 20 66 6d 74 53 74 72 69 6e 67 3b 0d 0a 20 20 20   fmtString;..   
1190: 20 7d 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f   }....    #regio
11a0: 6e 20 55 54 46 2d 38 20 43 6f 6e 76 65 72 73 69  n UTF-8 Conversi
11b0: 6f 6e 20 46 75 6e 63 74 69 6f 6e 73 0d 0a 20 20  on Functions..  
11c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
11d0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
11e0: 73 20 61 20 73 74 72 69 6e 67 20 74 6f 20 61 20  s a string to a 
11f0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 62 79  UTF-8 encoded by
1200: 74 65 20 61 72 72 61 79 20 73 69 7a 65 64 20 74  te array sized t
1210: 6f 20 69 6e 63 6c 75 64 65 20 61 20 6e 75 6c 6c  o include a null
1220: 2d 74 65 72 6d 69 6e 61 74 69 6e 67 20 63 68 61  -terminating cha
1230: 72 61 63 74 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f  racter...    ///
1240: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1250: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1260: 3d 22 73 6f 75 72 63 65 54 65 78 74 22 3e 54 68  ="sourceText">Th
1270: 65 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6e 76  e string to conv
1280: 65 72 74 20 74 6f 20 55 54 46 2d 38 3c 2f 70 61  ert to UTF-8</pa
1290: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
12a0: 65 74 75 72 6e 73 3e 41 20 62 79 74 65 20 61 72  eturns>A byte ar
12b0: 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ray containing t
12c0: 68 65 20 63 6f 6e 76 65 72 74 65 64 20 73 74 72  he converted str
12d0: 69 6e 67 20 70 6c 75 73 20 61 6e 20 65 78 74 72  ing plus an extr
12e0: 61 20 30 20 74 65 72 6d 69 6e 61 74 69 6e 67 20  a 0 terminating 
12f0: 62 79 74 65 20 61 74 20 74 68 65 20 65 6e 64 20  byte at the end 
1300: 6f 66 20 74 68 65 20 61 72 72 61 79 2e 3c 2f 72  of the array.</r
1310: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
1320: 6c 69 63 20 73 74 61 74 69 63 20 62 79 74 65 5b  lic static byte[
1330: 5d 20 54 6f 55 54 46 38 28 73 74 72 69 6e 67 20  ] ToUTF8(string 
1340: 73 6f 75 72 63 65 54 65 78 74 29 0d 0a 20 20 20  sourceText)..   
1350: 20 7b 0d 0a 20 20 20 20 20 20 42 79 74 65 5b 5d   {..      Byte[]
1360: 20 62 79 74 65 41 72 72 61 79 3b 0d 0a 20 20 20   byteArray;..   
1370: 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 5f 75     int nlen = _u
1380: 74 66 38 2e 47 65 74 42 79 74 65 43 6f 75 6e 74  tf8.GetByteCount
1390: 28 73 6f 75 72 63 65 54 65 78 74 29 20 2b 20 31  (sourceText) + 1
13a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 62 79 74 65 41  ;....      byteA
13b0: 72 72 61 79 20 3d 20 6e 65 77 20 62 79 74 65 5b  rray = new byte[
13c0: 6e 6c 65 6e 5d 3b 0d 0a 20 20 20 20 20 20 6e 6c  nlen];..      nl
13d0: 65 6e 20 3d 20 5f 75 74 66 38 2e 47 65 74 42 79  en = _utf8.GetBy
13e0: 74 65 73 28 73 6f 75 72 63 65 54 65 78 74 2c 20  tes(sourceText, 
13f0: 30 2c 20 73 6f 75 72 63 65 54 65 78 74 2e 4c 65  0, sourceText.Le
1400: 6e 67 74 68 2c 20 62 79 74 65 41 72 72 61 79 2c  ngth, byteArray,
1410: 20 30 29 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   0);..      byte
1420: 41 72 72 61 79 5b 6e 6c 65 6e 5d 20 3d 20 30 3b  Array[nlen] = 0;
1430: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
1440: 20 62 79 74 65 41 72 72 61 79 3b 0d 0a 20 20 20   byteArray;..   
1450: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
1460: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1470: 20 43 6f 6e 76 65 72 74 20 61 20 44 61 74 65 54   Convert a DateT
1480: 69 6d 65 20 74 6f 20 61 20 55 54 46 2d 38 20 65  ime to a UTF-8 e
1490: 6e 63 6f 64 65 64 2c 20 7a 65 72 6f 2d 74 65 72  ncoded, zero-ter
14a0: 6d 69 6e 61 74 65 64 20 62 79 74 65 20 61 72 72  minated byte arr
14b0: 61 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ay...    /// </s
14c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
14d0: 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20   <remarks>..    
14e0: 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f  /// This functio
14f0: 6e 20 69 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e  n is a convenien
1500: 63 65 20 66 75 6e 63 74 69 6f 6e 2c 20 77 68 69  ce function, whi
1510: 63 68 20 66 69 72 73 74 20 63 61 6c 6c 73 20 54  ch first calls T
1520: 6f 53 74 72 69 6e 67 28 29 20 6f 6e 20 74 68 65  oString() on the
1530: 20 44 61 74 65 54 69 6d 65 2c 20 61 6e 64 20 74   DateTime, and t
1540: 68 65 6e 20 63 61 6c 6c 73 20 54 6f 55 54 46 38  hen calls ToUTF8
1550: 28 29 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20  () with the..   
1560: 20 2f 2f 2f 20 73 74 72 69 6e 67 20 72 65 73 75   /// string resu
1570: 6c 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  lt...    /// </r
1580: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
1590: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 61   <param name="da
15a0: 74 65 54 69 6d 65 56 61 6c 75 65 22 3e 54 68 65  teTimeValue">The
15b0: 20 44 61 74 65 54 69 6d 65 20 74 6f 20 63 6f 6e   DateTime to con
15c0: 76 65 72 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  vert.</param>.. 
15d0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
15e0: 54 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  The UTF-8 encode
15f0: 64 20 73 74 72 69 6e 67 2c 20 69 6e 63 6c 75 64  d string, includ
1600: 69 6e 67 20 61 20 30 20 74 65 72 6d 69 6e 61 74  ing a 0 terminat
1610: 69 6e 67 20 62 79 74 65 20 61 74 20 74 68 65 20  ing byte at the 
1620: 65 6e 64 20 6f 66 20 74 68 65 20 61 72 72 61 79  end of the array
1630: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
1640: 20 70 75 62 6c 69 63 20 62 79 74 65 5b 5d 20 54   public byte[] T
1650: 6f 55 54 46 38 28 44 61 74 65 54 69 6d 65 20 64  oUTF8(DateTime d
1660: 61 74 65 54 69 6d 65 56 61 6c 75 65 29 0d 0a 20  ateTimeValue).. 
1670: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
1680: 72 6e 20 54 6f 55 54 46 38 28 54 6f 53 74 72 69  rn ToUTF8(ToStri
1690: 6e 67 28 64 61 74 65 54 69 6d 65 56 61 6c 75 65  ng(dateTimeValue
16a0: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
16b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
16c0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
16d0: 73 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  s a UTF-8 encode
16e0: 64 20 49 6e 74 50 74 72 20 6f 66 20 74 68 65 20  d IntPtr of the 
16f0: 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74 68  specified length
1700: 20 69 6e 74 6f 20 61 20 2e 4e 45 54 20 73 74 72   into a .NET str
1710: 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ing..    /// </s
1720: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1730: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
1740: 74 69 76 65 73 74 72 69 6e 67 22 3e 54 68 65 20  tivestring">The 
1750: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d  pointer to the m
1760: 65 6d 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  emory where the 
1770: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 69 73 20  UTF-8 string is 
1780: 65 6e 63 6f 64 65 64 3c 2f 70 61 72 61 6d 3e 0d  encoded</param>.
1790: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
17a0: 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73 74 72 69  name="nativestri
17b0: 6e 67 6c 65 6e 22 3e 54 68 65 20 6e 75 6d 62 65  nglen">The numbe
17c0: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 64 65  r of bytes to de
17d0: 63 6f 64 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  code</param>..  
17e0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
17f0: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
1800: 6e 67 20 74 68 65 20 74 72 61 6e 73 6c 61 74 65  ng the translate
1810: 64 20 63 68 61 72 61 63 74 65 72 28 73 29 3c 2f  d character(s)</
1820: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
1830: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
1840: 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 49 6e 74  ing ToString(Int
1850: 50 74 72 20 6e 61 74 69 76 65 73 74 72 69 6e 67  Ptr nativestring
1860: 2c 20 69 6e 74 20 6e 61 74 69 76 65 73 74 72 69  , int nativestri
1870: 6e 67 6c 65 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20  nglen)..    {.. 
1880: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
1890: 54 6f 53 74 72 69 6e 67 28 6e 61 74 69 76 65 73  ToString(natives
18a0: 74 72 69 6e 67 2c 20 6e 61 74 69 76 65 73 74 72  tring, nativestr
18b0: 69 6e 67 6c 65 6e 29 3b 0d 0a 20 20 20 20 7d 0d  inglen);..    }.
18c0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
18d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f  ary>..    /// Co
18e0: 6e 76 65 72 74 73 20 61 20 55 54 46 2d 38 20 65  nverts a UTF-8 e
18f0: 6e 63 6f 64 65 64 20 49 6e 74 50 74 72 20 6f 66  ncoded IntPtr of
1900: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c   the specified l
1910: 65 6e 67 74 68 20 69 6e 74 6f 20 61 20 2e 4e 45  ength into a .NE
1920: 54 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f  T string..    //
1930: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1940: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1950: 65 3d 22 6e 61 74 69 76 65 73 74 72 69 6e 67 22  e="nativestring"
1960: 3e 54 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  >The pointer to 
1970: 74 68 65 20 6d 65 6d 6f 72 79 20 77 68 65 72 65  the memory where
1980: 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e   the UTF-8 strin
1990: 67 20 69 73 20 65 6e 63 6f 64 65 64 3c 2f 70 61  g is encoded</pa
19a0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
19b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76  aram name="nativ
19c0: 65 73 74 72 69 6e 67 6c 65 6e 22 3e 54 68 65 20  estringlen">The 
19d0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
19e0: 74 6f 20 64 65 63 6f 64 65 3c 2f 70 61 72 61 6d  to decode</param
19f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1a00: 72 6e 73 3e 41 20 73 74 72 69 6e 67 20 63 6f 6e  rns>A string con
1a10: 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 61 6e  taining the tran
1a20: 73 6c 61 74 65 64 20 63 68 61 72 61 63 74 65 72  slated character
1a30: 28 73 29 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  (s)</returns>.. 
1a40: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1a50: 20 73 74 72 69 6e 67 20 55 54 46 38 54 6f 53 74   string UTF8ToSt
1a60: 72 69 6e 67 28 49 6e 74 50 74 72 20 6e 61 74 69  ring(IntPtr nati
1a70: 76 65 73 74 72 69 6e 67 2c 20 69 6e 74 20 6e 61  vestring, int na
1a80: 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 0d 0a  tivestringlen)..
1a90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
1aa0: 28 6e 61 74 69 76 65 73 74 72 69 6e 67 20 3d 3d  (nativestring ==
1ab0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 20 7c 7c 20   IntPtr.Zero || 
1ac0: 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 20  nativestringlen 
1ad0: 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 53 74 72  == 0) return Str
1ae0: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20  ing.Empty;..    
1af0: 20 20 69 66 20 28 6e 61 74 69 76 65 73 74 72 69    if (nativestri
1b00: 6e 67 6c 65 6e 20 3c 20 30 29 0d 0a 20 20 20 20  nglen < 0)..    
1b10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e 61 74    {..        nat
1b20: 69 76 65 73 74 72 69 6e 67 6c 65 6e 20 3d 20 30  ivestringlen = 0
1b30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 77 68 69  ;....        whi
1b40: 6c 65 20 28 4d 61 72 73 68 61 6c 2e 52 65 61 64  le (Marshal.Read
1b50: 42 79 74 65 28 6e 61 74 69 76 65 73 74 72 69 6e  Byte(nativestrin
1b60: 67 2c 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c  g, nativestringl
1b70: 65 6e 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20  en) != 0)..     
1b80: 20 20 20 20 20 6e 61 74 69 76 65 73 74 72 69 6e       nativestrin
1b90: 67 6c 65 6e 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  glen++;....     
1ba0: 20 20 20 69 66 20 28 6e 61 74 69 76 65 73 74 72     if (nativestr
1bb0: 69 6e 67 6c 65 6e 20 3d 3d 20 30 29 20 72 65 74  inglen == 0) ret
1bc0: 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  urn String.Empty
1bd0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
1be0: 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 41      byte[] byteA
1bf0: 72 72 61 79 20 3d 20 6e 65 77 20 62 79 74 65 5b  rray = new byte[
1c00: 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 5d  nativestringlen]
1c10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 4d 61 72 73 68  ;....      Marsh
1c20: 61 6c 2e 43 6f 70 79 28 6e 61 74 69 76 65 73 74  al.Copy(nativest
1c30: 72 69 6e 67 2c 20 62 79 74 65 41 72 72 61 79 2c  ring, byteArray,
1c40: 20 30 2c 20 6e 61 74 69 76 65 73 74 72 69 6e 67   0, nativestring
1c50: 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  len);....      r
1c60: 65 74 75 72 6e 20 5f 75 74 66 38 2e 47 65 74 53  eturn _utf8.GetS
1c70: 74 72 69 6e 67 28 62 79 74 65 41 72 72 61 79 2c  tring(byteArray,
1c80: 20 30 2c 20 6e 61 74 69 76 65 73 74 72 69 6e 67   0, nativestring
1c90: 6c 65 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  len);..    }....
1ca0: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
1cb0: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
1cc0: 44 61 74 65 54 69 6d 65 20 43 6f 6e 76 65 72 73  DateTime Convers
1cd0: 69 6f 6e 20 46 75 6e 63 74 69 6f 6e 73 0d 0a 20  ion Functions.. 
1ce0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72  ..    /// Conver
1d00: 74 73 20 61 20 73 74 72 69 6e 67 20 69 6e 74 6f  ts a string into
1d10: 20 61 20 44 61 74 65 54 69 6d 65 2c 20 75 73 69   a DateTime, usi
1d20: 6e 67 20 74 68 65 20 44 61 74 65 54 69 6d 65 46  ng the DateTimeF
1d30: 6f 72 6d 61 74 2c 20 44 61 74 65 54 69 6d 65 4b  ormat, DateTimeK
1d40: 69 6e 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e  ind,..    /// an
1d50: 64 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  d DateTimeFormat
1d60: 53 74 72 69 6e 67 20 73 70 65 63 69 66 69 65 64  String specified
1d70: 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74   for the connect
1d80: 69 6f 6e 20 77 68 65 6e 20 69 74 20 77 61 73 20  ion when it was 
1d90: 6f 70 65 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  opened...    ///
1da0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1db0: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a   /// <remarks>..
1dc0: 20 20 20 20 2f 2f 2f 20 41 63 63 65 70 74 61 62      /// Acceptab
1dd0: 6c 65 20 49 53 4f 38 36 30 31 20 44 61 74 65 54  le ISO8601 DateT
1de0: 69 6d 65 20 66 6f 72 6d 61 74 73 20 61 72 65 3a  ime formats are:
1df0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73 74 20  ..    /// <list 
1e00: 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e 0d 0a  type="bullet">..
1e10: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
1e20: 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d 6d  escription>THHmm
1e30: 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  ssK</description
1e40: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
1e50: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
1e60: 74 69 6f 6e 3e 54 48 48 6d 6d 4b 3c 2f 64 65 73  tion>THHmmK</des
1e70: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
1e80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
1e90: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a  <description>HH:
1ea0: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c 2f  mm:ss.FFFFFFFK</
1eb0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
1ec0: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
1ed0: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
1ee0: 48 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72  HH:mm:ssK</descr
1ef0: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
1f00: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
1f10: 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d  escription>HH:mm
1f20: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1f30: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1f40: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1f50: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48  on>yyyy-MM-dd HH
1f60: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c  :mm:ss.FFFFFFFK<
1f70: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
1f80: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
1f90: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
1fa0: 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d  >yyyy-MM-dd HH:m
1fb0: 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69  m:ssK</descripti
1fc0: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
1fd0: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
1fe0: 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64  iption>yyyy-MM-d
1ff0: 64 20 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63 72 69  d HH:mmK</descri
2000: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2010: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2020: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
2030: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-ddTHH:mm:ss.FF
2040: 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69 70 74  FFFFFK</descript
2050: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
2060: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2070: 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d  ription>yyyy-MM-
2080: 64 64 54 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63 72  ddTHH:mmK</descr
2090: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
20a0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
20b0: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
20c0: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 4b 3c  MM-ddTHH:mm:ssK<
20d0: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
20e0: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
20f0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2100: 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73 73 4b  >yyyyMMddHHmmssK
2110: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2120: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2130: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2140: 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 4b 3c  n>yyyyMMddHHmmK<
2150: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2160: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2170: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2180: 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d 73 73  >yyyyMMddTHHmmss
2190: 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69  FFFFFFFK</descri
21a0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
21b0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
21c0: 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d 6d 73  scription>THHmms
21d0: 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  s</description><
21e0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
21f0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2200: 6f 6e 3e 54 48 48 6d 6d 3c 2f 64 65 73 63 72 69  on>THHmm</descri
2210: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2220: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2230: 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3a  scription>HH:mm:
2240: 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73 63  ss.FFFFFFF</desc
2250: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2260: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2270: 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d  description>HH:m
2280: 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f  m:ss</descriptio
2290: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
22a0: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
22b0: 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3c 2f 64 65 73  ption>HH:mm</des
22c0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
22d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
22e0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
22f0: 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73  y-MM-dd HH:mm:ss
2300: 2e 46 46 46 46 46 46 46 3c 2f 64 65 73 63 72 69  .FFFFFFF</descri
2310: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2320: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2330: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
2340: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 3c 2f 64  M-dd HH:mm:ss</d
2350: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
2360: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
2370: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79  m><description>y
2380: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3c  yyy-MM-dd HH:mm<
2390: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
23a0: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
23b0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
23c0: 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  >yyyy-MM-ddTHH:m
23d0: 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65  m:ss.FFFFFFF</de
23e0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
23f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2400: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
2410: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3c 2f  yy-MM-ddTHH:mm</
2420: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
2430: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
2440: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
2450: 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d  yyyy-MM-ddTHH:mm
2460: 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  :ss</description
2470: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2480: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2490: 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d  tion>yyyyMMddHHm
24a0: 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  mss</description
24b0: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
24c0: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
24d0: 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d  tion>yyyyMMddHHm
24e0: 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  m</description><
24f0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2500: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2510: 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d  on>yyyyMMddTHHmm
2520: 73 73 46 46 46 46 46 46 46 3c 2f 64 65 73 63 72  ssFFFFFFF</descr
2530: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2540: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2550: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
2560: 4d 4d 2d 64 64 3c 2f 64 65 73 63 72 69 70 74 69  MM-dd</descripti
2570: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
2580: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
2590: 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 3c  iption>yyyyMMdd<
25a0: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
25b0: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
25c0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
25d0: 3e 79 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63 72  >yy-MM-dd</descr
25e0: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
25f0: 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73 74 3e 0d      /// </list>.
2600: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20  .    /// If the 
2610: 73 74 72 69 6e 67 20 63 61 6e 6e 6f 74 20 62 65  string cannot be
2620: 20 6d 61 74 63 68 65 64 20 74 6f 20 6f 6e 65 20   matched to one 
2630: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 66 6f 72  of the above for
2640: 6d 61 74 73 20 2d 4f 52 2d 0d 0a 20 20 20 20 2f  mats -OR-..    /
2650: 2f 2f 20 74 68 65 20 44 61 74 65 54 69 6d 65 46  // the DateTimeF
2660: 6f 72 6d 61 74 53 74 72 69 6e 67 20 69 66 20 6f  ormatString if o
2670: 6e 65 20 77 61 73 20 70 72 6f 76 69 64 65 64 2c  ne was provided,
2680: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69   an exception wi
2690: 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 74  ll..    /// be t
26a0: 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  hrown...    /// 
26b0: 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20  </remarks>..    
26c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
26d0: 22 64 61 74 65 54 65 78 74 22 3e 54 68 65 20 73  "dateText">The s
26e0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
26f0: 20 65 69 74 68 65 72 20 61 20 6c 6f 6e 67 20 69   either a long i
2700: 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66  nteger number of
2710: 20 31 30 30 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20   100-nanosecond 
2720: 75 6e 69 74 73 20 73 69 6e 63 65 0d 0a 20 20 20  units since..   
2730: 20 2f 2f 2f 20 53 79 73 74 65 6d 2e 44 61 74 65   /// System.Date
2740: 54 69 6d 65 2e 4d 69 6e 56 61 6c 75 65 2c 20 61  Time.MinValue, a
2750: 20 4a 75 6c 69 61 6e 20 64 61 79 20 64 6f 75 62   Julian day doub
2760: 6c 65 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 6e  le, an integer n
2770: 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73  umber of seconds
2780: 20 73 69 6e 63 65 20 74 68 65 20 55 6e 69 78 20   since the Unix 
2790: 65 70 6f 63 68 2c 20 61 0d 0a 20 20 20 20 2f 2f  epoch, a..    //
27a0: 2f 20 63 75 6c 74 75 72 65 2d 69 6e 64 65 70 65  / culture-indepe
27b0: 6e 64 65 6e 74 20 66 6f 72 6d 61 74 74 65 64 20  ndent formatted 
27c0: 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74  date and time st
27d0: 72 69 6e 67 2c 20 61 20 66 6f 72 6d 61 74 74 65  ring, a formatte
27e0: 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  d date and time 
27f0: 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 63 75  string in the cu
2800: 72 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20 63  rrent..    /// c
2810: 75 6c 74 75 72 65 2c 20 6f 72 20 61 6e 20 49 53  ulture, or an IS
2820: 4f 38 36 30 31 2d 66 6f 72 6d 61 74 20 73 74 72  O8601-format str
2830: 69 6e 67 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ing.</param>..  
2840: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
2850: 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 3c   DateTime value<
2860: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
2870: 75 62 6c 69 63 20 44 61 74 65 54 69 6d 65 20 54  ublic DateTime T
2880: 6f 44 61 74 65 54 69 6d 65 28 73 74 72 69 6e 67  oDateTime(string
2890: 20 64 61 74 65 54 65 78 74 29 0d 0a 20 20 20 20   dateText)..    
28a0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
28b0: 54 6f 44 61 74 65 54 69 6d 65 28 64 61 74 65 54  ToDateTime(dateT
28c0: 65 78 74 2c 20 5f 64 61 74 65 74 69 6d 65 46 6f  ext, _datetimeFo
28d0: 72 6d 61 74 2c 20 5f 64 61 74 65 74 69 6d 65 4b  rmat, _datetimeK
28e0: 69 6e 64 2c 20 5f 64 61 74 65 74 69 6d 65 46 6f  ind, _datetimeFo
28f0: 72 6d 61 74 53 74 72 69 6e 67 29 3b 0d 0a 20 20  rmatString);..  
2900: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
2910: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
2920: 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 73 74 72  / Converts a str
2930: 69 6e 67 20 69 6e 74 6f 20 61 20 44 61 74 65 54  ing into a DateT
2940: 69 6d 65 2c 20 75 73 69 6e 67 20 74 68 65 20 73  ime, using the s
2950: 70 65 63 69 66 69 65 64 20 44 61 74 65 54 69 6d  pecified DateTim
2960: 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 2f 2f  eFormat,..    //
2970: 2f 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 61  / DateTimeKind a
2980: 6e 64 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  nd DateTimeForma
2990: 74 53 74 72 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  tString...    //
29a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
29b0: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
29c0: 0a 20 20 20 20 2f 2f 2f 20 41 63 63 65 70 74 61  .    /// Accepta
29d0: 62 6c 65 20 49 53 4f 38 36 30 31 20 44 61 74 65  ble ISO8601 Date
29e0: 54 69 6d 65 20 66 6f 72 6d 61 74 73 20 61 72 65  Time formats are
29f0: 3a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73 74  :..    /// <list
2a00: 20 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e 0d   type="bullet">.
2a10: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2a20: 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d  description>THHm
2a30: 6d 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f  mssK</descriptio
2a40: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
2a50: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2a60: 70 74 69 6f 6e 3e 54 48 48 6d 6d 4b 3c 2f 64 65  ption>THHmmK</de
2a70: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2a80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2a90: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48  ><description>HH
2aa0: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 3c  :mm:ss.FFFFFFFK<
2ab0: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2ac0: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2ad0: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2ae0: 3e 48 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63  >HH:mm:ssK</desc
2af0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2b00: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2b10: 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d  description>HH:m
2b20: 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  mK</description>
2b30: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2b40: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2b50: 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48  ion>yyyy-MM-dd H
2b60: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
2b70: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2b80: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2b90: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2ba0: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a  n>yyyy-MM-dd HH:
2bb0: 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69 70 74  mm:ssK</descript
2bc0: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
2bd0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2be0: 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d  ription>yyyy-MM-
2bf0: 64 64 20 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63 72  dd HH:mmK</descr
2c00: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2c10: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2c20: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
2c30: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46  MM-ddTHH:mm:ss.F
2c40: 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69 70  FFFFFFK</descrip
2c50: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2c60: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2c70: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d  cription>yyyy-MM
2c80: 2d 64 64 54 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63  -ddTHH:mmK</desc
2c90: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2ca0: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2cb0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
2cc0: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 4b  -MM-ddTHH:mm:ssK
2cd0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2ce0: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2cf0: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2d00: 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73 73  n>yyyyMMddHHmmss
2d10: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
2d20: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2d30: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2d40: 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 4b  on>yyyyMMddHHmmK
2d50: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2d60: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2d70: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2d80: 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d 73  n>yyyyMMddTHHmms
2d90: 73 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72  sFFFFFFFK</descr
2da0: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2db0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2dc0: 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d 6d  escription>THHmm
2dd0: 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  ss</description>
2de0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2df0: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2e00: 69 6f 6e 3e 54 48 48 6d 6d 3c 2f 64 65 73 63 72  ion>THHmm</descr
2e10: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2e20: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2e30: 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d  escription>HH:mm
2e40: 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73  :ss.FFFFFFF</des
2e50: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2e60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2e70: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a  <description>HH:
2e80: 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69  mm:ss</descripti
2e90: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
2ea0: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
2eb0: 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3c 2f 64 65  iption>HH:mm</de
2ec0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2ed0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2ee0: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
2ef0: 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73  yy-MM-dd HH:mm:s
2f00: 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73 63 72  s.FFFFFFF</descr
2f10: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2f20: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2f30: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
2f40: 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 3c 2f  MM-dd HH:mm:ss</
2f50: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
2f60: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
2f70: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
2f80: 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d  yyyy-MM-dd HH:mm
2f90: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2fa0: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2fb0: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2fc0: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  n>yyyy-MM-ddTHH:
2fd0: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64  mm:ss.FFFFFFF</d
2fe0: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
2ff0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
3000: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79  m><description>y
3010: 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3c  yyy-MM-ddTHH:mm<
3020: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
3030: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
3040: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
3050: 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  >yyyy-MM-ddTHH:m
3060: 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f  m:ss</descriptio
3070: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
3080: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
3090: 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48  ption>yyyyMMddHH
30a0: 6d 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f  mmss</descriptio
30b0: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
30c0: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
30d0: 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48  ption>yyyyMMddHH
30e0: 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  mm</description>
30f0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
3100: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
3110: 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d  ion>yyyyMMddTHHm
3120: 6d 73 73 46 46 46 46 46 46 46 3c 2f 64 65 73 63  mssFFFFFFF</desc
3130: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
3140: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
3150: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
3160: 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63 72 69 70 74  -MM-dd</descript
3170: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
3180: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
3190: 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64  ription>yyyyMMdd
31a0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
31b0: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
31c0: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
31d0: 6e 3e 79 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63  n>yy-MM-dd</desc
31e0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
31f0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73 74 3e  .    /// </list>
3200: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65  ..    /// If the
3210: 20 73 74 72 69 6e 67 20 63 61 6e 6e 6f 74 20 62   string cannot b
3220: 65 20 6d 61 74 63 68 65 64 20 74 6f 20 6f 6e 65  e matched to one
3230: 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 66 6f   of the above fo
3240: 72 6d 61 74 73 20 2d 4f 52 2d 0d 0a 20 20 20 20  rmats -OR-..    
3250: 2f 2f 2f 20 74 68 65 20 44 61 74 65 54 69 6d 65  /// the DateTime
3260: 46 6f 72 6d 61 74 53 74 72 69 6e 67 20 69 66 20  FormatString if 
3270: 6f 6e 65 20 77 61 73 20 70 72 6f 76 69 64 65 64  one was provided
3280: 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 77  , an exception w
3290: 69 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20  ill..    /// be 
32a0: 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  thrown...    ///
32b0: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20   </remarks>..   
32c0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
32d0: 3d 22 64 61 74 65 54 65 78 74 22 3e 54 68 65 20  ="dateText">The 
32e0: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
32f0: 67 20 65 69 74 68 65 72 20 61 20 6c 6f 6e 67 20  g either a long 
3300: 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f  integer number o
3310: 66 20 31 30 30 2d 6e 61 6e 6f 73 65 63 6f 6e 64  f 100-nanosecond
3320: 20 75 6e 69 74 73 20 73 69 6e 63 65 0d 0a 20 20   units since..  
3330: 20 20 2f 2f 2f 20 53 79 73 74 65 6d 2e 44 61 74    /// System.Dat
3340: 65 54 69 6d 65 2e 4d 69 6e 56 61 6c 75 65 2c 20  eTime.MinValue, 
3350: 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 64 6f 75  a Julian day dou
3360: 62 6c 65 2c 20 61 6e 20 69 6e 74 65 67 65 72 20  ble, an integer 
3370: 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64  number of second
3380: 73 20 73 69 6e 63 65 20 74 68 65 20 55 6e 69 78  s since the Unix
3390: 20 65 70 6f 63 68 2c 20 61 0d 0a 20 20 20 20 2f   epoch, a..    /
33a0: 2f 2f 20 63 75 6c 74 75 72 65 2d 69 6e 64 65 70  // culture-indep
33b0: 65 6e 64 65 6e 74 20 66 6f 72 6d 61 74 74 65 64  endent formatted
33c0: 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73   date and time s
33d0: 74 72 69 6e 67 2c 20 61 20 66 6f 72 6d 61 74 74  tring, a formatt
33e0: 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ed date and time
33f0: 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 63   string in the c
3400: 75 72 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f 20  urrent..    /// 
3410: 63 75 6c 74 75 72 65 2c 20 6f 72 20 61 6e 20 49  culture, or an I
3420: 53 4f 38 36 30 31 2d 66 6f 72 6d 61 74 20 73 74  SO8601-format st
3430: 72 69 6e 67 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ring.</param>.. 
3440: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3450: 6d 65 3d 22 66 6f 72 6d 61 74 22 3e 54 68 65 20  me="format">The 
3460: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
3470: 73 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d  s to use.</param
3480: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3490: 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 54 68  m name="kind">Th
34a0: 65 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 74  e DateTimeKind t
34b0: 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  o use.</param>..
34c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
34d0: 61 6d 65 3d 22 66 6f 72 6d 61 74 53 74 72 69 6e  ame="formatStrin
34e0: 67 22 3e 54 68 65 20 44 61 74 65 54 69 6d 65 20  g">The DateTime 
34f0: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 6f  format string to
3500: 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20   use.</param>.. 
3510: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3520: 41 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  A DateTime value
3530: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
3540: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 61  public static Da
3550: 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d  teTime ToDateTim
3560: 65 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e(..        stri
3570: 6e 67 20 64 61 74 65 54 65 78 74 2c 0d 0a 20 20  ng dateText,..  
3580: 20 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 65        SQLiteDate
3590: 46 6f 72 6d 61 74 73 20 66 6f 72 6d 61 74 2c 0d  Formats format,.
35a0: 0a 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d  .        DateTim
35b0: 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20  eKind kind,..   
35c0: 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
35d0: 61 74 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20  atString..      
35e0: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
35f0: 20 20 20 20 73 77 69 74 63 68 20 28 66 6f 72 6d      switch (form
3600: 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  at)..        {..
3610: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
3620: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
3630: 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20  ts.Ticks:..     
3640: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3660: 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
3670: 69 6d 65 28 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  ime(Convert.ToIn
3680: 74 36 34 28 0d 0a 20 20 20 20 20 20 20 20 20 20  t64(..          
3690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
36a0: 74 65 54 65 78 74 2c 20 43 75 6c 74 75 72 65 49  teText, CultureI
36b0: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
36c0: 74 75 72 65 29 2c 20 6b 69 6e 64 29 3b 0d 0a 20  ture), kind);.. 
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
36f0: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
3700: 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d  mats.JulianDay:.
3710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3720: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3730: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
3740: 6f 44 61 74 65 54 69 6d 65 28 43 6f 6e 76 65 72  oDateTime(Conver
3750: 74 2e 54 6f 44 6f 75 62 6c 65 28 0d 0a 20 20 20  t.ToDouble(..   
3760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3770: 20 20 20 20 20 64 61 74 65 54 65 78 74 2c 20 43       dateText, C
3780: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
3790: 69 61 6e 74 43 75 6c 74 75 72 65 29 2c 20 6b 69  iantCulture), ki
37a0: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd);..          
37b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
37c0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
37d0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
37e0: 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20  Epoch:..        
37f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3810: 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d 65  eturn ToDateTime
3820: 28 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32  (Convert.ToInt32
3830: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
3840: 20 20 20 20 20 20 20 20 20 20 20 64 61 74 65 54             dateT
3850: 65 78 74 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  ext, CultureInfo
3860: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
3870: 65 29 2c 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20  e), kind);..    
3880: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3890: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
38a0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
38b0: 73 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  s.InvariantCultu
38c0: 72 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re:..           
38d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
38f0: 66 6f 72 6d 61 74 53 74 72 69 6e 67 20 21 3d 20  formatString != 
3900: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3920: 65 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e 53  eturn DateTime.S
3930: 70 65 63 69 66 79 4b 69 6e 64 28 44 61 74 65 54  pecifyKind(DateT
3940: 69 6d 65 2e 50 61 72 73 65 45 78 61 63 74 28 0d  ime.ParseExact(.
3950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
3970: 65 54 65 78 74 2c 20 66 6f 72 6d 61 74 53 74 72  eText, formatStr
3980: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
3990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39a0: 20 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74    DateTimeFormat
39b0: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 49 6e  Info.InvariantIn
39c0: 66 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fo,..           
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39e0: 20 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d   kind == DateTim
39f0: 65 4b 69 6e 64 2e 55 74 63 20 3f 0d 0a 20 20 20  eKind.Utc ?..   
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74               Dat
3a20: 65 54 69 6d 65 53 74 79 6c 65 73 2e 41 64 6a 75  eTimeStyles.Adju
3a30: 73 74 54 6f 55 6e 69 76 65 72 73 61 6c 20 3a 0d  stToUniversal :.
3a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a60: 20 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e   DateTimeStyles.
3a70: 4e 6f 6e 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  None),..        
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a90: 20 20 20 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20      kind);..    
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ab0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3ad0: 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e 53 70  turn DateTime.Sp
3ae0: 65 63 69 66 79 4b 69 6e 64 28 44 61 74 65 54 69  ecifyKind(DateTi
3af0: 6d 65 2e 50 61 72 73 65 28 0d 0a 20 20 20 20 20  me.Parse(..     
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b10: 20 20 20 20 20 20 20 64 61 74 65 54 65 78 74 2c         dateText,
3b20: 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 49   DateTimeFormatI
3b30: 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 49 6e 66  nfo.InvariantInf
3b40: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o,..            
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65  kind == DateTime
3b70: 4b 69 6e 64 2e 55 74 63 20 3f 0d 0a 20 20 20 20  Kind.Utc ?..    
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65              Date
3ba0: 54 69 6d 65 53 74 79 6c 65 73 2e 41 64 6a 75 73  TimeStyles.Adjus
3bb0: 74 54 6f 55 6e 69 76 65 72 73 61 6c 20 3a 0d 0a  tToUniversal :..
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3be0: 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 4e  DateTimeStyles.N
3bf0: 6f 6e 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  one),..         
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c10: 20 20 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20     kind);..     
3c20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3c30: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
3c40: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
3c50: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 3a  .CurrentCulture:
3c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3c80: 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72           if (for
3c90: 6d 61 74 53 74 72 69 6e 67 20 21 3d 20 6e 75 6c  matString != nul
3ca0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3cc0: 72 6e 20 44 61 74 65 54 69 6d 65 2e 53 70 65 63  rn DateTime.Spec
3cd0: 69 66 79 4b 69 6e 64 28 44 61 74 65 54 69 6d 65  ifyKind(DateTime
3ce0: 2e 50 61 72 73 65 45 78 61 63 74 28 0d 0a 20 20  .ParseExact(..  
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d00: 20 20 20 20 20 20 20 20 20 20 64 61 74 65 54 65            dateTe
3d10: 78 74 2c 20 66 6f 72 6d 61 74 53 74 72 69 6e 67  xt, formatString
3d20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
3d40: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66  ateTimeFormatInf
3d50: 6f 2e 43 75 72 72 65 6e 74 49 6e 66 6f 2c 0d 0a  o.CurrentInfo,..
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64              kind
3d80: 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64   == DateTimeKind
3d90: 2e 55 74 63 20 3f 0d 0a 20 20 20 20 20 20 20 20  .Utc ?..        
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3db0: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
3dc0: 53 74 79 6c 65 73 2e 41 64 6a 75 73 74 54 6f 55  Styles.AdjustToU
3dd0: 6e 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20 20 20  niversal :..    
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65              Date
3e00: 54 69 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29  TimeStyles.None)
3e10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
3e30: 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ind);..         
3e40: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
3e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3e70: 44 61 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79  DateTime.Specify
3e80: 4b 69 6e 64 28 44 61 74 65 54 69 6d 65 2e 50 61  Kind(DateTime.Pa
3e90: 72 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rse(..          
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 64 61 74 65 54 65 78 74 2c 20 44 61 74 65    dateText, Date
3ec0: 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66 6f 2e 43  TimeFormatInfo.C
3ed0: 75 72 72 65 6e 74 49 6e 66 6f 2c 0d 0a 20 20 20  urrentInfo,..   
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ef0: 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 3d 3d           kind ==
3f00: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74   DateTimeKind.Ut
3f10: 63 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c ?..           
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f30: 20 20 20 20 20 44 61 74 65 54 69 6d 65 53 74 79       DateTimeSty
3f40: 6c 65 73 2e 41 64 6a 75 73 74 54 6f 55 6e 69 76  les.AdjustToUniv
3f50: 65 72 73 61 6c 20 3a 0d 0a 20 20 20 20 20 20 20  ersal :..       
3f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f70: 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d           DateTim
3f80: 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c 0d 0a  eStyles.None),..
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64              kind
3fb0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3fc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3fd0: 20 20 20 64 65 66 61 75 6c 74 3a 20 2f 2a 20 49     default: /* I
3fe0: 53 4f 2d 38 36 30 31 20 2a 2f 0d 0a 20 20 20 20  SO-8601 */..    
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 20 20 20 69 66 20 28 66 6f 72 6d 61 74 53 74 72     if (formatStr
4020: 69 6e 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ing != null)..  
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4040: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61 74        return Dat
4050: 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69 6e  eTime.SpecifyKin
4060: 64 28 44 61 74 65 54 69 6d 65 2e 50 61 72 73 65  d(DateTime.Parse
4070: 45 78 61 63 74 28 0d 0a 20 20 20 20 20 20 20 20  Exact(..        
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4090: 20 20 20 20 64 61 74 65 54 65 78 74 2c 20 66 6f      dateText, fo
40a0: 72 6d 61 74 53 74 72 69 6e 67 2c 0d 0a 20 20 20  rmatString,..   
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40c0: 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d           DateTim
40d0: 65 46 6f 72 6d 61 74 49 6e 66 6f 2e 49 6e 76 61  eFormatInfo.Inva
40e0: 72 69 61 6e 74 49 6e 66 6f 2c 0d 0a 20 20 20 20  riantInfo,..    
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4100: 20 20 20 20 20 20 20 20 6b 69 6e 64 20 3d 3d 20          kind == 
4110: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 74 63  DateTimeKind.Utc
4120: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 20 20 44 61 74 65 54 69 6d 65 53 74 79 6c      DateTimeStyl
4150: 65 73 2e 41 64 6a 75 73 74 54 6f 55 6e 69 76 65  es.AdjustToUnive
4160: 72 73 61 6c 20 3a 0d 0a 20 20 20 20 20 20 20 20  rsal :..        
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4180: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
4190: 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c 0d 0a 20  Styles.None),.. 
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41b0: 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 29             kind)
41c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
41d0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41f0: 20 20 20 20 20 72 65 74 75 72 6e 20 44 61 74 65       return Date
4200: 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69 6e 64  Time.SpecifyKind
4210: 28 44 61 74 65 54 69 6d 65 2e 50 61 72 73 65 45  (DateTime.ParseE
4220: 78 61 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  xact(..         
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4240: 20 20 20 64 61 74 65 54 65 78 74 2c 20 5f 64 61     dateText, _da
4250: 74 65 74 69 6d 65 46 6f 72 6d 61 74 73 2c 0d 0a  tetimeFormats,..
4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4270: 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65              Date
4280: 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66 6f 2e 49  TimeFormatInfo.I
4290: 6e 76 61 72 69 61 6e 74 49 6e 66 6f 2c 0d 0a 20  nvariantInfo,.. 
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42b0: 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20             kind 
42c0: 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  == DateTimeKind.
42d0: 55 74 63 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  Utc ?..         
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42f0: 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 53         DateTimeS
4300: 74 79 6c 65 73 2e 41 64 6a 75 73 74 54 6f 55 6e  tyles.AdjustToUn
4310: 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20 20 20 20  iversal :..     
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4330: 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54             DateT
4340: 69 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c  imeStyles.None),
4350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69                ki
4370: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd);..          
4380: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4390: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
43a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
43b0: 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73      /// Converts
43c0: 20 61 20 6a 75 6c 69 61 6e 64 61 79 20 76 61 6c   a julianday val
43d0: 75 65 20 69 6e 74 6f 20 61 20 44 61 74 65 54 69  ue into a DateTi
43e0: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  me..    /// </su
43f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4400: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6a 75 6c  <param name="jul
4410: 69 61 6e 44 61 79 22 3e 54 68 65 20 76 61 6c 75  ianDay">The valu
4420: 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61  e to convert</pa
4430: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
4440: 65 74 75 72 6e 73 3e 41 20 2e 4e 45 54 20 44 61  eturns>A .NET Da
4450: 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e 73 3e  teTime</returns>
4460: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 44 61 74  ..    public Dat
4470: 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d 65  eTime ToDateTime
4480: 28 64 6f 75 62 6c 65 20 6a 75 6c 69 61 6e 44 61  (double julianDa
4490: 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  y)..    {..     
44a0: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
44b0: 6d 65 28 6a 75 6c 69 61 6e 44 61 79 2c 20 5f 64  me(julianDay, _d
44c0: 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20  atetimeKind);.. 
44d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
44e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
44f0: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6a 75  // Converts a ju
4500: 6c 69 61 6e 64 61 79 20 76 61 6c 75 65 20 69 6e  lianday value in
4510: 74 6f 20 61 20 44 61 74 65 54 69 6d 65 0d 0a 20  to a DateTime.. 
4520: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4530: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4540: 6d 20 6e 61 6d 65 3d 22 6a 75 6c 69 61 6e 44 61  m name="julianDa
4550: 79 22 3e 54 68 65 20 76 61 6c 75 65 20 74 6f 20  y">The value to 
4560: 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d  convert</param>.
4570: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4580: 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 54 68 65 20  name="kind">The 
4590: 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 74 6f 20  DateTimeKind to 
45a0: 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  use.</param>..  
45b0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
45c0: 20 2e 4e 45 54 20 44 61 74 65 54 69 6d 65 3c 2f   .NET DateTime</
45d0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
45e0: 62 6c 69 63 20 73 74 61 74 69 63 20 44 61 74 65  blic static Date
45f0: 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d 65 28  Time ToDateTime(
4600: 64 6f 75 62 6c 65 20 6a 75 6c 69 61 6e 44 61 79  double julianDay
4610: 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b  , DateTimeKind k
4620: 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ind)..    {..   
4630: 20 20 20 20 20 72 65 74 75 72 6e 20 44 61 74 65       return Date
4640: 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69 6e 64  Time.SpecifyKind
4650: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44  (..            D
4660: 61 74 65 54 69 6d 65 2e 46 72 6f 6d 4f 41 44 61  ateTime.FromOADa
4670: 74 65 28 6a 75 6c 69 61 6e 44 61 79 20 2d 20 4f  te(julianDay - O
4680: 6c 65 41 75 74 6f 6d 61 74 69 6f 6e 45 70 6f 63  leAutomationEpoc
4690: 68 41 73 4a 75 6c 69 61 6e 44 61 79 29 2c 20 6b  hAsJulianDay), k
46a0: 69 6e 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ind);..    }....
46b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
46c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65  >..    /// Conve
46d0: 72 74 73 20 74 68 65 20 73 70 65 63 69 66 69 65  rts the specifie
46e0: 64 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f  d number of seco
46f0: 6e 64 73 20 66 72 6f 6d 20 74 68 65 20 55 6e 69  nds from the Uni
4700: 78 20 65 70 6f 63 68 20 69 6e 74 6f 20 61 0d 0a  x epoch into a..
4710: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
4720: 66 3d 22 44 61 74 65 54 69 6d 65 22 20 2f 3e 20  f="DateTime" /> 
4730: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  value...    /// 
4740: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
4750: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4760: 22 73 65 63 6f 6e 64 73 22 3e 0d 0a 20 20 20 20  "seconds">..    
4770: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
4780: 66 20 77 68 6f 6c 65 20 73 65 63 6f 6e 64 73 20  f whole seconds 
4790: 73 69 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65  since the Unix e
47a0: 70 6f 63 68 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  poch...    /// <
47b0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
47c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b 69   <param name="ki
47d0: 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 69  nd">..    /// Ei
47e0: 74 68 65 72 20 55 74 63 20 6f 72 20 4c 6f 63 61  ther Utc or Loca
47f0: 6c 20 74 69 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f  l time...    ///
4800: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
4810: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
4820: 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73    /// The new <s
4830: 65 65 20 63 72 65 66 3d 22 44 61 74 65 54 69 6d  ee cref="DateTim
4840: 65 22 20 2f 3e 20 76 61 6c 75 65 2e 0d 0a 20 20  e" /> value...  
4850: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
4860: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
4870: 74 61 74 69 63 20 44 61 74 65 54 69 6d 65 20 54  tatic DateTime T
4880: 6f 44 61 74 65 54 69 6d 65 28 69 6e 74 20 73 65  oDateTime(int se
4890: 63 6f 6e 64 73 2c 20 44 61 74 65 54 69 6d 65 4b  conds, DateTimeK
48a0: 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20 20 7b  ind kind)..    {
48b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
48c0: 20 44 61 74 65 54 69 6d 65 2e 53 70 65 63 69 66   DateTime.Specif
48d0: 79 4b 69 6e 64 28 55 6e 69 78 45 70 6f 63 68 2e  yKind(UnixEpoch.
48e0: 41 64 64 53 65 63 6f 6e 64 73 28 73 65 63 6f 6e  AddSeconds(secon
48f0: 64 73 29 2c 20 6b 69 6e 64 29 3b 0d 0a 20 20 20  ds), kind);..   
4900: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
4910: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4920: 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70   Converts the sp
4930: 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72 20 6f  ecified number o
4940: 66 20 74 69 63 6b 73 20 73 69 6e 63 65 20 74 68  f ticks since th
4950: 65 20 65 70 6f 63 68 20 69 6e 74 6f 20 61 0d 0a  e epoch into a..
4960: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
4970: 66 3d 22 44 61 74 65 54 69 6d 65 22 20 2f 3e 20  f="DateTime" /> 
4980: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  value...    /// 
4990: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
49a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
49b0: 22 74 69 63 6b 73 22 3e 0d 0a 20 20 20 20 2f 2f  "ticks">..    //
49c0: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
49d0: 77 68 6f 6c 65 20 74 69 63 6b 73 20 73 69 6e 63  whole ticks sinc
49e0: 65 20 74 68 65 20 65 70 6f 63 68 2e 0d 0a 20 20  e the epoch...  
49f0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
4a00: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
4a10: 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20 20  ame="kind">..   
4a20: 20 2f 2f 2f 20 45 69 74 68 65 72 20 55 74 63 20   /// Either Utc 
4a30: 6f 72 20 4c 6f 63 61 6c 20 74 69 6d 65 2e 0d 0a  or Local time...
4a40: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
4a50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4a60: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
4a70: 20 6e 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22   new <see cref="
4a80: 44 61 74 65 54 69 6d 65 22 20 2f 3e 20 76 61 6c  DateTime" /> val
4a90: 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ue...    /// </r
4aa0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
4ab0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 44 61 74  ernal static Dat
4ac0: 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d 65  eTime ToDateTime
4ad0: 28 6c 6f 6e 67 20 74 69 63 6b 73 2c 20 44 61 74  (long ticks, Dat
4ae0: 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 29 0d  eTimeKind kind).
4af0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4b00: 72 65 74 75 72 6e 20 6e 65 77 20 44 61 74 65 54  return new DateT
4b10: 69 6d 65 28 74 69 63 6b 73 2c 20 6b 69 6e 64 29  ime(ticks, kind)
4b20: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
4b30: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
4b40: 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20     /// Converts 
4b50: 61 20 44 61 74 65 54 69 6d 65 20 73 74 72 75 63  a DateTime struc
4b60: 74 20 74 6f 20 61 20 4a 75 6c 69 61 6e 44 61 79  t to a JulianDay
4b70: 20 64 6f 75 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f   double..    ///
4b80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
4b90: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4ba0: 3d 22 76 61 6c 75 65 22 3e 54 68 65 20 44 61 74  ="value">The Dat
4bb0: 65 54 69 6d 65 20 74 6f 20 63 6f 6e 76 65 72 74  eTime to convert
4bc0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4bd0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 4a  / <returns>The J
4be0: 75 6c 69 61 6e 44 61 79 20 76 61 6c 75 65 20 74  ulianDay value t
4bf0: 68 65 20 44 61 74 65 74 69 6d 65 20 72 65 70 72  he Datetime repr
4c00: 65 73 65 6e 74 73 3c 2f 72 65 74 75 72 6e 73 3e  esents</returns>
4c10: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61  ..    public sta
4c20: 74 69 63 20 64 6f 75 62 6c 65 20 54 6f 4a 75 6c  tic double ToJul
4c30: 69 61 6e 44 61 79 28 44 61 74 65 54 69 6d 65 20  ianDay(DateTime 
4c40: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
4c50: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
4c60: 65 2e 54 6f 4f 41 44 61 74 65 28 29 20 2b 20 4f  e.ToOADate() + O
4c70: 6c 65 41 75 74 6f 6d 61 74 69 6f 6e 45 70 6f 63  leAutomationEpoc
4c80: 68 41 73 4a 75 6c 69 61 6e 44 61 79 3b 0d 0a 20  hAsJulianDay;.. 
4c90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
4ca0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
4cb0: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 44 61  // Converts a Da
4cc0: 74 65 54 69 6d 65 20 73 74 72 75 63 74 20 74 6f  teTime struct to
4cd0: 20 74 68 65 20 77 68 6f 6c 65 20 6e 75 6d 62 65   the whole numbe
4ce0: 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
4cf0: 63 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  ce the..    /// 
4d00: 55 6e 69 78 20 65 70 6f 63 68 2e 0d 0a 20 20 20  Unix epoch...   
4d10: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4d20: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4d30: 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 54 68 65  name="value">The
4d40: 20 44 61 74 65 54 69 6d 65 20 74 6f 20 63 6f 6e   DateTime to con
4d50: 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  vert</param>..  
4d60: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
4d70: 68 65 20 77 68 6f 6c 65 20 6e 75 6d 62 65 72 20  he whole number 
4d80: 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  of seconds since
4d90: 20 74 68 65 20 55 6e 69 78 20 65 70 6f 63 68 3c   the Unix epoch<
4da0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
4db0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c 6f 6e  ublic static lon
4dc0: 67 20 54 6f 55 6e 69 78 45 70 6f 63 68 28 44 61  g ToUnixEpoch(Da
4dd0: 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20  teTime value).. 
4de0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
4df0: 74 75 72 6e 20 28 76 61 6c 75 65 2e 53 75 62 74  turn (value.Subt
4e00: 72 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e  ract(UnixEpoch).
4e10: 54 69 63 6b 73 20 2f 20 54 69 6d 65 53 70 61 6e  Ticks / TimeSpan
4e20: 2e 54 69 63 6b 73 50 65 72 53 65 63 6f 6e 64 29  .TicksPerSecond)
4e30: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
4e40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
4e50: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
4e60: 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d  he DateTime form
4e70: 61 74 20 73 74 72 69 6e 67 20 74 6f 20 75 73 65  at string to use
4e80: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
4e90: 65 64 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  ed DateTimeKind.
4ea0: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 3c 70 61  ..    /// If <pa
4eb0: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 66 6f 72  ramref name="for
4ec0: 6d 61 74 53 74 72 69 6e 67 22 20 2f 3e 20 69 73  matString" /> is
4ed0: 20 6e 6f 74 20 6e 75 6c 6c 2c 20 69 74 20 77 69   not null, it wi
4ee0: 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 20 76  ll be returned v
4ef0: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 2f 2f  erbatim...    //
4f00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4f10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4f20: 65 3d 22 6b 69 6e 64 22 3e 54 68 65 20 44 61 74  e="kind">The Dat
4f30: 65 54 69 6d 65 4b 69 6e 64 20 74 6f 20 75 73 65  eTimeKind to use
4f40: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
4f50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4f60: 66 6f 72 6d 61 74 53 74 72 69 6e 67 22 3e 54 68  formatString">Th
4f70: 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  e DateTime forma
4f80: 74 20 73 74 72 69 6e 67 20 74 6f 20 75 73 65 2e  t string to use.
4f90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4fa0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
4fb0: 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54 69 6d   /// The DateTim
4fc0: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
4fd0: 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20 73  to use for the s
4fe0: 70 65 63 69 66 69 65 64 20 44 61 74 65 54 69 6d  pecified DateTim
4ff0: 65 4b 69 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eKind...    /// 
5000: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
5010: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
5020: 74 72 69 6e 67 20 47 65 74 44 61 74 65 54 69 6d  tring GetDateTim
5030: 65 4b 69 6e 64 46 6f 72 6d 61 74 28 0d 0a 20 20  eKindFormat(..  
5040: 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b 69        DateTimeKi
5050: 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20  nd kind,..      
5060: 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 53    string formatS
5070: 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 29  tring..        )
5080: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5090: 20 69 66 20 28 66 6f 72 6d 61 74 53 74 72 69 6e   if (formatStrin
50a0: 67 20 21 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  g != null) retur
50b0: 6e 20 66 6f 72 6d 61 74 53 74 72 69 6e 67 3b 0d  n formatString;.
50c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
50d0: 28 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d  (kind == DateTim
50e0: 65 4b 69 6e 64 2e 55 74 63 29 20 3f 20 5f 64 61  eKind.Utc) ? _da
50f0: 74 65 74 69 6d 65 46 6f 72 6d 61 74 55 74 63 20  tetimeFormatUtc 
5100: 3a 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  : _datetimeForma
5110: 74 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 7d 0d 0a  tLocal;..    }..
5120: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5130: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
5140: 76 65 72 74 73 20 61 20 73 74 72 69 6e 67 20 69  verts a string i
5150: 6e 74 6f 20 61 20 44 61 74 65 54 69 6d 65 2c 20  nto a DateTime, 
5160: 75 73 69 6e 67 20 74 68 65 20 44 61 74 65 54 69  using the DateTi
5170: 6d 65 46 6f 72 6d 61 74 2c 20 44 61 74 65 54 69  meFormat, DateTi
5180: 6d 65 4b 69 6e 64 2c 0d 0a 20 20 20 20 2f 2f 2f  meKind,..    ///
5190: 20 61 6e 64 20 44 61 74 65 54 69 6d 65 46 6f 72   and DateTimeFor
51a0: 6d 61 74 53 74 72 69 6e 67 20 73 70 65 63 69 66  matString specif
51b0: 69 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e  ied for the conn
51c0: 65 63 74 69 6f 6e 20 77 68 65 6e 20 69 74 20 77  ection when it w
51d0: 61 73 20 6f 70 65 6e 65 64 2e 0d 0a 20 20 20 20  as opened...    
51e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
51f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5200: 61 6d 65 3d 22 64 61 74 65 56 61 6c 75 65 22 3e  ame="dateValue">
5210: 54 68 65 20 44 61 74 65 54 69 6d 65 20 76 61 6c  The DateTime val
5220: 75 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70  ue to convert</p
5230: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
5240: 72 65 74 75 72 6e 73 3e 45 69 74 68 65 72 20 61  returns>Either a
5250: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
5260: 6e 67 20 74 68 65 20 6c 6f 6e 67 20 69 6e 74 65  ng the long inte
5270: 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 31 30  ger number of 10
5280: 30 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20 75 6e 69  0-nanosecond uni
5290: 74 73 20 73 69 6e 63 65 20 53 79 73 74 65 6d 2e  ts since System.
52a0: 44 61 74 65 54 69 6d 65 2e 4d 69 6e 56 61 6c 75  DateTime.MinValu
52b0: 65 2c 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 4a 75  e, a..    /// Ju
52c0: 6c 69 61 6e 20 64 61 79 20 64 6f 75 62 6c 65 2c  lian day double,
52d0: 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62   an integer numb
52e0: 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69  er of seconds si
52f0: 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65 70 6f  nce the Unix epo
5300: 63 68 2c 20 61 20 63 75 6c 74 75 72 65 2d 69 6e  ch, a culture-in
5310: 64 65 70 65 6e 64 65 6e 74 20 66 6f 72 6d 61 74  dependent format
5320: 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ted date and tim
5330: 65 0d 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e  e..    /// strin
5340: 67 2c 20 61 20 66 6f 72 6d 61 74 74 65 64 20 64  g, a formatted d
5350: 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73 74 72  ate and time str
5360: 69 6e 67 20 69 6e 20 74 68 65 20 63 75 72 72 65  ing in the curre
5370: 6e 74 20 63 75 6c 74 75 72 65 2c 20 6f 72 20 61  nt culture, or a
5380: 6e 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61 74  n ISO8601-format
5390: 20 64 61 74 65 2f 74 69 6d 65 20 73 74 72 69 6e   date/time strin
53a0: 67 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  g.</returns>..  
53b0: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
53c0: 54 6f 53 74 72 69 6e 67 28 44 61 74 65 54 69 6d  ToString(DateTim
53d0: 65 20 64 61 74 65 56 61 6c 75 65 29 0d 0a 20 20  e dateValue)..  
53e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 77 69    {..        swi
53f0: 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f  tch (_datetimeFo
5400: 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  rmat)..        {
5410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
5420: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
5430: 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20  mats.Ticks:..   
5440: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
5450: 75 72 6e 20 64 61 74 65 56 61 6c 75 65 2e 54 69  urn dateValue.Ti
5460: 63 6b 73 2e 54 6f 53 74 72 69 6e 67 28 43 75 6c  cks.ToString(Cul
5470: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
5480: 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20  ntCulture);..   
5490: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
54a0: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
54b0: 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20  JulianDay:..    
54c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
54d0: 72 6e 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64  rn ToJulianDay(d
54e0: 61 74 65 56 61 6c 75 65 29 2e 54 6f 53 74 72 69  ateValue).ToStri
54f0: 6e 67 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  ng(CultureInfo.I
5500: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
5510: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ;..            c
5520: 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f  ase SQLiteDateFo
5530: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a  rmats.UnixEpoch:
5540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5550: 20 20 72 65 74 75 72 6e 20 28 28 6c 6f 6e 67 29    return ((long)
5560: 28 64 61 74 65 56 61 6c 75 65 2e 53 75 62 74 72  (dateValue.Subtr
5570: 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29 2e 54  act(UnixEpoch).T
5580: 69 63 6b 73 20 2f 20 54 69 6d 65 53 70 61 6e 2e  icks / TimeSpan.
5590: 54 69 63 6b 73 50 65 72 53 65 63 6f 6e 64 29 29  TicksPerSecond))
55a0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
55b0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53            case S
55c0: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
55d0: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
55e0: 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e:..            
55f0: 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65 56      return dateV
5600: 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 28 5f  alue.ToString((_
5610: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 53 74  datetimeFormatSt
5620: 72 69 6e 67 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  ring != null) ?.
5630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5640: 20 20 20 20 20 5f 64 61 74 65 74 69 6d 65 46 6f       _datetimeFo
5650: 72 6d 61 74 53 74 72 69 6e 67 20 3a 20 46 75 6c  rmatString : Ful
5660: 6c 46 6f 72 6d 61 74 2c 20 43 75 6c 74 75 72 65  lFormat, Culture
5670: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
5680: 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20  lture);..       
5690: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
56a0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 43 75 72 72  DateFormats.Curr
56b0: 65 6e 74 43 75 6c 74 75 72 65 3a 0d 0a 20 20 20  entCulture:..   
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
56d0: 75 72 6e 20 64 61 74 65 56 61 6c 75 65 2e 54 6f  urn dateValue.To
56e0: 53 74 72 69 6e 67 28 28 5f 64 61 74 65 74 69 6d  String((_datetim
56f0: 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 20 21 3d  eFormatString !=
5700: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
5710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 64                _d
5720: 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 53 74 72  atetimeFormatStr
5730: 69 6e 67 20 3a 20 46 75 6c 6c 46 6f 72 6d 61 74  ing : FullFormat
5740: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75  , CultureInfo.Cu
5750: 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a  rrentCulture);..
5760: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
5770: 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
5780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 64 61        return (da
5790: 74 65 56 61 6c 75 65 2e 4b 69 6e 64 20 3d 3d 20  teValue.Kind == 
57a0: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73  DateTimeKind.Uns
57b0: 70 65 63 69 66 69 65 64 29 20 3f 0d 0a 20 20 20  pecified) ?..   
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57d0: 20 44 61 74 65 54 69 6d 65 2e 53 70 65 63 69 66   DateTime.Specif
57e0: 79 4b 69 6e 64 28 64 61 74 65 56 61 6c 75 65 2c  yKind(dateValue,
57f0: 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 2e   _datetimeKind).
5800: 54 6f 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20  ToString(..     
5810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5820: 20 20 20 47 65 74 44 61 74 65 54 69 6d 65 4b 69     GetDateTimeKi
5830: 6e 64 46 6f 72 6d 61 74 28 5f 64 61 74 65 74 69  ndFormat(_dateti
5840: 6d 65 4b 69 6e 64 2c 20 5f 64 61 74 65 74 69 6d  meKind, _datetim
5850: 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 29 2c 0d  eFormatString),.
5860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
5880: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
5890: 6e 74 43 75 6c 74 75 72 65 29 20 3a 20 64 61 74  ntCulture) : dat
58a0: 65 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28  eValue.ToString(
58b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
58c0: 20 20 20 20 20 20 20 20 20 20 47 65 74 44 61 74            GetDat
58d0: 65 54 69 6d 65 4b 69 6e 64 46 6f 72 6d 61 74 28  eTimeKindFormat(
58e0: 64 61 74 65 56 61 6c 75 65 2e 4b 69 6e 64 2c 20  dateValue.Kind, 
58f0: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 53  _datetimeFormatS
5900: 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20 20 20  tring),..       
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5920: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
5930: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
5940: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
5950: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
5960: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5970: 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  /// Internal fun
5980: 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65 72 74  ction to convert
5990: 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64   a UTF-8 encoded
59a0: 20 49 6e 74 50 74 72 20 6f 66 20 74 68 65 20 73   IntPtr of the s
59b0: 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74 68 20  pecified length 
59c0: 74 6f 20 61 20 44 61 74 65 54 69 6d 65 2e 0d 0a  to a DateTime...
59d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
59e0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d  y>..    /// <rem
59f0: 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  arks>..    /// T
5a00: 68 69 73 20 69 73 20 61 20 63 6f 6e 76 65 6e 69  his is a conveni
5a10: 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e 2c 20 77  ence function, w
5a20: 68 69 63 68 20 66 69 72 73 74 20 63 61 6c 6c 73  hich first calls
5a30: 20 54 6f 53 74 72 69 6e 67 28 29 20 6f 6e 20 74   ToString() on t
5a40: 68 65 20 49 6e 74 50 74 72 20 74 6f 20 63 6f 6e  he IntPtr to con
5a50: 76 65 72 74 20 69 74 20 74 6f 20 61 20 73 74 72  vert it to a str
5a60: 69 6e 67 2c 20 74 68 65 6e 20 63 61 6c 6c 73 0d  ing, then calls.
5a70: 0a 20 20 20 20 2f 2f 2f 20 54 6f 44 61 74 65 54  .    /// ToDateT
5a80: 69 6d 65 28 29 20 6f 6e 20 74 68 65 20 73 74 72  ime() on the str
5a90: 69 6e 67 20 74 6f 20 72 65 74 75 72 6e 20 61 20  ing to return a 
5aa0: 44 61 74 65 54 69 6d 65 2e 0d 0a 20 20 20 20 2f  DateTime...    /
5ab0: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
5ac0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5ad0: 6d 65 3d 22 70 74 72 22 3e 41 20 70 6f 69 6e 74  me="ptr">A point
5ae0: 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20  er to the UTF-8 
5af0: 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 3c 2f  encoded string</
5b00: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
5b10: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
5b20: 22 3e 54 68 65 20 6c 65 6e 67 74 68 20 69 6e 20  ">The length in 
5b30: 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 74 72  bytes of the str
5b40: 69 6e 67 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ing</param>..   
5b50: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
5b60: 65 20 70 61 72 73 65 64 20 44 61 74 65 54 69 6d  e parsed DateTim
5b70: 65 20 76 61 6c 75 65 3c 2f 72 65 74 75 72 6e 73  e value</returns
5b80: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
5b90: 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54  DateTime ToDateT
5ba0: 69 6d 65 28 49 6e 74 50 74 72 20 70 74 72 2c 20  ime(IntPtr ptr, 
5bb0: 69 6e 74 20 6c 65 6e 29 0d 0a 20 20 20 20 7b 0d  int len)..    {.
5bc0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
5bd0: 44 61 74 65 54 69 6d 65 28 54 6f 53 74 72 69 6e  DateTime(ToStrin
5be0: 67 28 70 74 72 2c 20 6c 65 6e 29 29 3b 0d 0a 20  g(ptr, len));.. 
5bf0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
5c00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  gion....    /// 
5c10: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5c20: 2f 2f 20 53 6d 61 72 74 20 6d 65 74 68 6f 64 20  // Smart method 
5c30: 6f 66 20 73 70 6c 69 74 74 69 6e 67 20 61 20 73  of splitting a s
5c40: 74 72 69 6e 67 2e 20 20 53 6b 69 70 73 20 71 75  tring.  Skips qu
5c50: 6f 74 65 64 20 65 6c 65 6d 65 6e 74 73 2c 20 72  oted elements, r
5c60: 65 6d 6f 76 65 73 20 74 68 65 20 71 75 6f 74 65  emoves the quote
5c70: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
5c80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5c90: 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f  <remarks>..    /
5ca0: 2f 2f 20 54 68 69 73 20 73 70 6c 69 74 20 66 75  // This split fu
5cb0: 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20 73 6f 6d  nction works som
5cc0: 65 77 68 61 74 20 6c 69 6b 65 20 74 68 65 20 53  ewhat like the S
5cd0: 74 72 69 6e 67 2e 53 70 6c 69 74 28 29 20 66 75  tring.Split() fu
5ce0: 6e 63 74 69 6f 6e 20 69 6e 20 74 68 61 74 20 69  nction in that i
5cf0: 74 20 62 72 65 61 6b 73 20 61 70 61 72 74 20 61  t breaks apart a
5d00: 20 73 74 72 69 6e 67 20 69 6e 74 6f 0d 0a 20 20   string into..  
5d10: 20 20 2f 2f 2f 20 70 69 65 63 65 73 20 61 6e 64    /// pieces and
5d20: 20 72 65 74 75 72 6e 73 20 74 68 65 20 70 69 65   returns the pie
5d30: 63 65 73 20 61 73 20 61 6e 20 61 72 72 61 79 2e  ces as an array.
5d40: 20 20 54 68 65 20 70 72 69 6d 61 72 79 20 64 69    The primary di
5d50: 66 66 65 72 65 6e 63 65 73 20 61 72 65 3a 0d 0a  fferences are:..
5d60: 20 20 20 20 2f 2f 2f 20 3c 6c 69 73 74 20 74 79      /// <list ty
5d70: 70 65 3d 22 62 75 6c 6c 65 74 22 3e 0d 0a 20 20  pe="bullet">..  
5d80: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
5d90: 63 72 69 70 74 69 6f 6e 3e 4f 6e 6c 79 20 6f 6e  cription>Only on
5da0: 65 20 63 68 61 72 61 63 74 65 72 20 63 61 6e 20  e character can 
5db0: 62 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 61  be provided as a
5dc0: 20 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61   separator chara
5dd0: 63 74 65 72 3c 2f 64 65 73 63 72 69 70 74 69 6f  cter</descriptio
5de0: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
5df0: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
5e00: 70 74 69 6f 6e 3e 51 75 6f 74 65 64 20 74 65 78  ption>Quoted tex
5e10: 74 20 69 6e 73 69 64 65 20 74 68 65 20 73 74 72  t inside the str
5e20: 69 6e 67 20 69 73 20 73 6b 69 70 70 65 64 20 6f  ing is skipped o
5e30: 76 65 72 20 77 68 65 6e 20 73 65 61 72 63 68 69  ver when searchi
5e40: 6e 67 20 66 6f 72 20 74 68 65 20 73 65 70 61 72  ng for the separ
5e50: 61 74 6f 72 2c 20 61 6e 64 20 74 68 65 20 71 75  ator, and the qu
5e60: 6f 74 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  otes are removed
5e70: 2e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  .</description><
5e80: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
5e90: 3c 2f 6c 69 73 74 3e 0d 0a 20 20 20 20 2f 2f 2f  </list>..    ///
5ea0: 20 54 68 75 73 2c 20 69 66 20 73 70 6c 69 74 74   Thus, if splitt
5eb0: 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ing the followin
5ec0: 67 20 73 74 72 69 6e 67 20 6c 6f 6f 6b 69 6e 67  g string looking
5ed0: 20 66 6f 72 20 61 20 63 6f 6d 6d 61 3a 3c 62 72   for a comma:<br
5ee0: 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4f 6e 65 2c  />..    /// One,
5ef0: 54 77 6f 2c 20 22 54 68 72 65 65 2c 20 46 6f 75  Two, "Three, Fou
5f00: 72 22 2c 20 46 69 76 65 3c 62 72 2f 3e 0d 0a 20  r", Five<br/>.. 
5f10: 20 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20     /// <br/>..  
5f20: 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75 6c 74    /// The result
5f30: 69 6e 67 20 61 72 72 61 79 20 77 6f 75 6c 64 20  ing array would 
5f40: 63 6f 6e 74 61 69 6e 3c 62 72 2f 3e 0d 0a 20 20  contain<br/>..  
5f50: 20 20 2f 2f 2f 20 5b 30 5d 20 4f 6e 65 3c 62 72    /// [0] One<br
5f60: 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 5b 31 5d 20  />..    /// [1] 
5f70: 54 77 6f 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f  Two<br/>..    //
5f80: 2f 20 5b 32 5d 20 54 68 72 65 65 2c 20 46 6f 75  / [2] Three, Fou
5f90: 72 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  r<br/>..    /// 
5fa0: 5b 33 5d 20 46 69 76 65 3c 62 72 2f 3e 0d 0a 20  [3] Five<br/>.. 
5fb0: 20 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20     /// <br/>..  
5fc0: 20 20 2f 2f 2f 20 4e 6f 74 65 20 74 68 61 74 20    /// Note that 
5fd0: 74 68 65 20 6c 65 61 64 69 6e 67 20 61 6e 64 20  the leading and 
5fe0: 74 72 61 69 6c 69 6e 67 20 73 70 61 63 65 73 20  trailing spaces 
5ff0: 77 65 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f  were removed fro
6000: 6d 20 65 61 63 68 20 69 74 65 6d 20 64 75 72 69  m each item duri
6010: 6e 67 20 74 68 65 20 73 70 6c 69 74 2e 0d 0a 20  ng the split... 
6020: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
6030: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6040: 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 22 3e  m name="source">
6050: 53 6f 75 72 63 65 20 73 74 72 69 6e 67 20 74 6f  Source string to
6060: 20 73 70 6c 69 74 20 61 70 61 72 74 3c 2f 70 61   split apart</pa
6070: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
6080: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 65 70 61 72  aram name="separ
6090: 61 74 6f 72 22 3e 53 65 70 61 72 61 74 6f 72 20  ator">Separator 
60a0: 63 68 61 72 61 63 74 65 72 3c 2f 70 61 72 61 6d  character</param
60b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
60c0: 72 6e 73 3e 41 20 73 74 72 69 6e 67 20 61 72 72  rns>A string arr
60d0: 61 79 20 6f 66 20 74 68 65 20 73 70 6c 69 74 20  ay of the split 
60e0: 75 70 20 65 6c 65 6d 65 6e 74 73 3c 2f 72 65 74  up elements</ret
60f0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
6100: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b  c static string[
6110: 5d 20 53 70 6c 69 74 28 73 74 72 69 6e 67 20 73  ] Split(string s
6120: 6f 75 72 63 65 2c 20 63 68 61 72 20 73 65 70 61  ource, char sepa
6130: 72 61 74 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  rator)..    {.. 
6140: 20 20 20 20 20 63 68 61 72 5b 5d 20 74 6f 6b 73       char[] toks
6150: 20 3d 20 6e 65 77 20 63 68 61 72 5b 32 5d 20 7b   = new char[2] {
6160: 20 27 5c 22 27 2c 20 73 65 70 61 72 61 74 6f 72   '\"', separator
6170: 20 7d 3b 0d 0a 20 20 20 20 20 20 63 68 61 72 5b   };..      char[
6180: 5d 20 71 75 6f 74 20 3d 20 6e 65 77 20 63 68 61  ] quot = new cha
6190: 72 5b 31 5d 20 7b 20 27 5c 22 27 20 7d 3b 0d 0a  r[1] { '\"' };..
61a0: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 30 3b        int n = 0;
61b0: 0d 0a 20 20 20 20 20 20 4c 69 73 74 3c 73 74 72  ..      List<str
61c0: 69 6e 67 3e 20 6c 73 20 3d 20 6e 65 77 20 4c 69  ing> ls = new Li
61d0: 73 74 3c 73 74 72 69 6e 67 3e 28 29 3b 0d 0a 20  st<string>();.. 
61e0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 3b 0d 0a       string s;..
61f0: 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 73  ..      while (s
6200: 6f 75 72 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30  ource.Length > 0
6210: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
6220: 20 20 20 20 6e 20 3d 20 73 6f 75 72 63 65 2e 49      n = source.I
6230: 6e 64 65 78 4f 66 41 6e 79 28 74 6f 6b 73 2c 20  ndexOfAny(toks, 
6240: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n);..        if 
6250: 28 6e 20 3d 3d 20 2d 31 29 20 62 72 65 61 6b 3b  (n == -1) break;
6260: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f  ..        if (so
6270: 75 72 63 65 5b 6e 5d 20 3d 3d 20 74 6f 6b 73 5b  urce[n] == toks[
6280: 30 5d 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  0])..        {..
6290: 20 20 20 20 20 20 20 20 20 20 2f 2f 73 6f 75 72            //sour
62a0: 63 65 20 3d 20 73 6f 75 72 63 65 2e 52 65 6d 6f  ce = source.Remo
62b0: 76 65 28 6e 2c 20 31 29 3b 0d 0a 20 20 20 20 20  ve(n, 1);..     
62c0: 20 20 20 20 20 6e 20 3d 20 73 6f 75 72 63 65 2e       n = source.
62d0: 49 6e 64 65 78 4f 66 41 6e 79 28 71 75 6f 74 2c  IndexOfAny(quot,
62e0: 20 6e 20 2b 20 31 29 3b 0d 0a 20 20 20 20 20 20   n + 1);..      
62f0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 2d 31 29      if (n == -1)
6300: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
6310: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 73 6f 75             //sou
6320: 72 63 65 20 3d 20 22 5c 22 22 20 2b 20 73 6f 75  rce = "\"" + sou
6330: 72 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rce;..          
6340: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
6350: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6360: 20 6e 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20   n++;..         
6370: 20 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f 75 72   //source = sour
6380: 63 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31 29 3b  ce.Remove(n, 1);
6390: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
63a0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
63b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
63c0: 73 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73 74  s = source.Subst
63d0: 72 69 6e 67 28 30 2c 20 6e 29 2e 54 72 69 6d 28  ring(0, n).Trim(
63e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
63f0: 20 28 73 2e 4c 65 6e 67 74 68 20 3e 20 31 20 26   (s.Length > 1 &
6400: 26 20 73 5b 30 5d 20 3d 3d 20 71 75 6f 74 5b 30  & s[0] == quot[0
6410: 5d 20 26 26 20 73 5b 73 2e 4c 65 6e 67 74 68 20  ] && s[s.Length 
6420: 2d 20 31 5d 20 3d 3d 20 73 5b 30 5d 29 0d 0a 20  - 1] == s[0]).. 
6430: 20 20 20 20 20 20 20 20 20 20 20 73 20 3d 20 73             s = s
6440: 2e 53 75 62 73 74 72 69 6e 67 28 31 2c 20 73 2e  .Substring(1, s.
6450: 4c 65 6e 67 74 68 20 2d 20 32 29 3b 0d 0a 0d 0a  Length - 2);....
6460: 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 63 65            source
6470: 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73 74 72   = source.Substr
6480: 69 6e 67 28 6e 20 2b 20 31 29 2e 54 72 69 6d 28  ing(n + 1).Trim(
6490: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
64a0: 20 28 73 2e 4c 65 6e 67 74 68 20 3e 20 30 29 20   (s.Length > 0) 
64b0: 6c 73 2e 41 64 64 28 73 29 3b 0d 0a 20 20 20 20  ls.Add(s);..    
64c0: 20 20 20 20 20 20 6e 20 3d 20 30 3b 0d 0a 20 20        n = 0;..  
64d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
64e0: 0d 0a 20 20 20 20 20 20 69 66 20 28 73 6f 75 72  ..      if (sour
64f0: 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ce.Length > 0)..
6500: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6510: 20 73 20 3d 20 73 6f 75 72 63 65 2e 54 72 69 6d   s = source.Trim
6520: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ();..        if 
6530: 28 73 2e 4c 65 6e 67 74 68 20 3e 20 31 20 26 26  (s.Length > 1 &&
6540: 20 73 5b 30 5d 20 3d 3d 20 71 75 6f 74 5b 30 5d   s[0] == quot[0]
6550: 20 26 26 20 73 5b 73 2e 4c 65 6e 67 74 68 20 2d   && s[s.Length -
6560: 20 31 5d 20 3d 3d 20 73 5b 30 5d 29 0d 0a 20 20   1] == s[0])..  
6570: 20 20 20 20 20 20 20 20 73 20 3d 20 73 2e 53 75          s = s.Su
6580: 62 73 74 72 69 6e 67 28 31 2c 20 73 2e 4c 65 6e  bstring(1, s.Len
6590: 67 74 68 20 2d 20 32 29 3b 0d 0a 20 20 20 20 20  gth - 2);..     
65a0: 20 20 20 6c 73 2e 41 64 64 28 73 29 3b 0d 0a 20     ls.Add(s);.. 
65b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
65c0: 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 6e 65  string[] ar = ne
65d0: 77 20 73 74 72 69 6e 67 5b 6c 73 2e 43 6f 75 6e  w string[ls.Coun
65e0: 74 5d 3b 0d 0a 20 20 20 20 20 20 6c 73 2e 43 6f  t];..      ls.Co
65f0: 70 79 54 6f 28 61 72 2c 20 30 29 3b 0d 0a 0d 0a  pyTo(ar, 0);....
6600: 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 3b        return ar;
6610: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
6620: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6630: 20 20 2f 2f 2f 20 53 70 6c 69 74 73 20 74 68 65    /// Splits the
6640: 20 73 70 65 63 69 66 69 65 64 20 73 74 72 69 6e   specified strin
6650: 67 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c 65 20  g into multiple 
6660: 73 74 72 69 6e 67 73 20 62 61 73 65 64 20 6f 6e  strings based on
6670: 20 61 20 73 65 70 61 72 61 74 6f 72 0d 0a 20 20   a separator..  
6680: 20 20 2f 2f 2f 20 61 6e 64 20 72 65 74 75 72 6e    /// and return
6690: 73 20 74 68 65 20 72 65 73 75 6c 74 20 61 73 20  s the result as 
66a0: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
66b0: 6e 67 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ngs...    /// </
66c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
66d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
66e0: 61 6c 75 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  alue">..    /// 
66f0: 54 68 65 20 73 74 72 69 6e 67 20 74 6f 20 73 70  The string to sp
6700: 6c 69 74 20 69 6e 74 6f 20 70 69 65 63 65 73 20  lit into pieces 
6710: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 73 65 70  based on the sep
6720: 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65 72  arator character
6730: 2e 20 20 49 66 0d 0a 20 20 20 20 2f 2f 2f 20 74  .  If..    /// t
6740: 68 69 73 20 73 74 72 69 6e 67 20 69 73 20 6e 75  his string is nu
6750: 6c 6c 2c 20 6e 75 6c 6c 20 77 69 6c 6c 20 61 6c  ll, null will al
6760: 77 61 79 73 20 62 65 20 72 65 74 75 72 6e 65 64  ways be returned
6770: 2e 20 20 49 66 20 74 68 69 73 20 73 74 72 69 6e  .  If this strin
6780: 67 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 65 6d  g is..    /// em
6790: 70 74 79 2c 20 61 6e 20 61 72 72 61 79 20 6f 66  pty, an array of
67a0: 20 7a 65 72 6f 20 73 74 72 69 6e 67 73 20 77 69   zero strings wi
67b0: 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 72 65 74  ll always be ret
67c0: 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  urned...    /// 
67d0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
67e0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
67f0: 65 70 61 72 61 74 6f 72 22 3e 0d 0a 20 20 20 20  eparator">..    
6800: 2f 2f 2f 20 54 68 65 20 63 68 61 72 61 63 74 65  /// The characte
6810: 72 20 75 73 65 64 20 74 6f 20 64 69 76 69 64 65  r used to divide
6820: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 74   the original st
6830: 72 69 6e 67 20 69 6e 74 6f 20 73 75 62 2d 73 74  ring into sub-st
6840: 72 69 6e 67 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rings...    /// 
6850: 54 68 69 73 20 63 68 61 72 61 63 74 65 72 20 63  This character c
6860: 61 6e 6e 6f 74 20 62 65 20 61 20 62 61 63 6b 73  annot be a backs
6870: 6c 61 73 68 20 6f 72 20 61 20 64 6f 75 62 6c 65  lash or a double
6880: 2d 71 75 6f 74 65 3b 20 6f 74 68 65 72 77 69 73  -quote; otherwis
6890: 65 2c 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f 20 77  e, no..    /// w
68a0: 6f 72 6b 20 77 69 6c 6c 20 62 65 20 70 65 72 66  ork will be perf
68b0: 6f 72 6d 65 64 20 61 6e 64 20 6e 75 6c 6c 20 77  ormed and null w
68c0: 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 2e  ill be returned.
68d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
68e0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
68f0: 61 6d 20 6e 61 6d 65 3d 22 6b 65 65 70 51 75 6f  am name="keepQuo
6900: 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  te">..    /// If
6910: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
6920: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 61 6c 6c  is non-zero, all
6930: 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 20 63 68   double-quote ch
6940: 61 72 61 63 74 65 72 73 20 77 69 6c 6c 20 62 65  aracters will be
6950: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74 61 69 6e  ..    /// retain
6960: 65 64 20 69 6e 20 74 68 65 20 72 65 74 75 72 6e  ed in the return
6970: 65 64 20 6c 69 73 74 20 6f 66 20 73 74 72 69 6e  ed list of strin
6980: 67 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  gs; otherwise, t
6990: 68 65 79 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  hey will be..   
69a0: 20 2f 2f 2f 20 64 72 6f 70 70 65 64 2e 0d 0a 20   /// dropped... 
69b0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
69c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
69d0: 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20  name="error">.. 
69e0: 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c     /// Upon fail
69f0: 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ure, this parame
6a00: 74 65 72 20 77 69 6c 6c 20 62 65 20 6d 6f 64 69  ter will be modi
6a10: 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
6a20: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a  an appropriate..
6a30: 20 20 20 20 2f 2f 2f 20 65 72 72 6f 72 20 6d 65      /// error me
6a40: 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssage...    /// 
6a50: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
6a60: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
6a70: 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 61 72 72   /// The new arr
6a80: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 6f 72  ay of strings or
6a90: 20 6e 75 6c 6c 20 69 66 20 74 68 65 20 69 6e 70   null if the inp
6aa0: 75 74 20 73 74 72 69 6e 67 20 69 73 20 6e 75 6c  ut string is nul
6ab0: 6c 20 2d 4f 52 2d 20 74 68 65 0d 0a 20 20 20 20  l -OR- the..    
6ac0: 2f 2f 2f 20 73 65 70 61 72 61 74 6f 72 20 63 68  /// separator ch
6ad0: 61 72 61 63 74 65 72 20 69 73 20 61 20 62 61 63  aracter is a bac
6ae0: 6b 73 6c 61 73 68 20 6f 72 20 61 20 64 6f 75 62  kslash or a doub
6af0: 6c 65 2d 71 75 6f 74 65 20 2d 4f 52 2d 20 74 68  le-quote -OR- th
6b00: 65 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f  e string..    //
6b10: 2f 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 75 6e  / contains an un
6b20: 62 61 6c 61 6e 63 65 64 20 62 61 63 6b 73 6c 61  balanced backsla
6b30: 73 68 20 6f 72 20 64 6f 75 62 6c 65 2d 71 75 6f  sh or double-quo
6b40: 74 65 20 63 68 61 72 61 63 74 65 72 2e 0d 0a 20  te character... 
6b50: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
6b60: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
6b70: 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d 20  static string[] 
6b80: 4e 65 77 53 70 6c 69 74 28 0d 0a 20 20 20 20 20  NewSplit(..     
6b90: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2c     string value,
6ba0: 0d 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 73  ..        char s
6bb0: 65 70 61 72 61 74 6f 72 2c 0d 0a 20 20 20 20 20  eparator,..     
6bc0: 20 20 20 62 6f 6f 6c 20 6b 65 65 70 51 75 6f 74     bool keepQuot
6bd0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  e,..        ref 
6be0: 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
6bf0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
6c00: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
6c10: 61 72 20 45 73 63 61 70 65 43 68 61 72 20 3d 20  ar EscapeChar = 
6c20: 27 5c 5c 27 3b 0d 0a 20 20 20 20 20 20 20 20 63  '\\';..        c
6c30: 6f 6e 73 74 20 63 68 61 72 20 51 75 6f 74 65 43  onst char QuoteC
6c40: 68 61 72 20 3d 20 27 5c 22 27 3b 0d 0a 0d 0a 20  har = '\"';.... 
6c50: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
6c60: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 74 20 69     // NOTE: It i
6c70: 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 74 68  s illegal for th
6c80: 65 20 73 65 70 61 72 61 74 6f 72 20 63 68 61 72  e separator char
6c90: 61 63 74 65 72 20 74 6f 20 62 65 20 65 69 74 68  acter to be eith
6ca0: 65 72 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  er a..        //
6cb0: 20 20 20 20 20 20 20 62 61 63 6b 73 6c 61 73 68         backslash
6cc0: 20 6f 72 20 61 20 64 6f 75 62 6c 65 2d 71 75 6f   or a double-quo
6cd0: 74 65 20 62 65 63 61 75 73 65 20 62 6f 74 68 20  te because both 
6ce0: 6f 66 20 74 68 6f 73 65 20 63 68 61 72 61 63 74  of those charact
6cf0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  ers..        // 
6d00: 20 20 20 20 20 20 61 72 65 20 75 73 65 64 20 66        are used f
6d10: 6f 72 20 65 73 63 61 70 69 6e 67 20 6f 74 68 65  or escaping othe
6d20: 72 20 63 68 61 72 61 63 74 65 72 73 20 28 65 2e  r characters (e.
6d30: 67 2e 20 74 68 65 20 73 65 70 61 72 61 74 6f 72  g. the separator
6d40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
6d50: 20 20 20 63 68 61 72 61 63 74 65 72 29 2e 0d 0a     character)...
6d60: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
6d70: 20 20 20 20 69 66 20 28 28 73 65 70 61 72 61 74      if ((separat
6d80: 6f 72 20 3d 3d 20 45 73 63 61 70 65 43 68 61 72  or == EscapeChar
6d90: 29 20 7c 7c 20 28 73 65 70 61 72 61 74 6f 72 20  ) || (separator 
6da0: 3d 3d 20 51 75 6f 74 65 43 68 61 72 29 29 0d 0a  == QuoteChar))..
6db0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6dc0: 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
6dd0: 73 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63  separator charac
6de0: 74 65 72 20 63 61 6e 6e 6f 74 20 62 65 20 74 68  ter cannot be th
6df0: 65 20 65 73 63 61 70 65 20 6f 72 20 71 75 6f 74  e escape or quot
6e00: 65 20 63 68 61 72 61 63 74 65 72 73 22 3b 0d 0a  e characters";..
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6e20: 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
6e30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
6e40: 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
6e50: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6e60: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
6e70: 3d 20 22 73 74 72 69 6e 67 20 76 61 6c 75 65 20  = "string value 
6e80: 74 6f 20 73 70 6c 69 74 20 63 61 6e 6e 6f 74 20  to split cannot 
6e90: 62 65 20 6e 75 6c 6c 22 3b 0d 0a 20 20 20 20 20  be null";..     
6ea0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
6eb0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
6ec0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
6ed0: 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c 65 6e  ngth = value.Len
6ee0: 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
6ef0: 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29  if (length == 0)
6f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
6f10: 74 75 72 6e 20 6e 65 77 20 73 74 72 69 6e 67 5b  turn new string[
6f20: 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4c  0];....        L
6f30: 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73 74  ist<string> list
6f40: 20 3d 20 6e 65 77 20 4c 69 73 74 3c 73 74 72 69   = new List<stri
6f50: 6e 67 3e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng>();..        
6f60: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 65 6c  StringBuilder el
6f70: 65 6d 65 6e 74 20 3d 20 6e 65 77 20 53 74 72 69  ement = new Stri
6f80: 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20  ngBuilder();..  
6f90: 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20        int index 
6fa0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f  = 0;..        bo
6fb0: 6f 6c 20 65 73 63 61 70 65 20 3d 20 66 61 6c 73  ol escape = fals
6fc0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  e;..        bool
6fd0: 20 71 75 6f 74 65 20 3d 20 66 61 6c 73 65 3b 0d   quote = false;.
6fe0: 0a 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  ...        while
6ff0: 20 28 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68   (index < length
7000: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7010: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 63            char c
7020: 68 61 72 61 63 74 65 72 20 3d 20 76 61 6c 75 65  haracter = value
7030: 5b 69 6e 64 65 78 2b 2b 5d 3b 0d 0a 0d 0a 20 20  [index++];....  
7040: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 73            if (es
7050: 63 61 70 65 29 0d 0a 20 20 20 20 20 20 20 20 20  cape)..         
7060: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7070: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7080: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43            // HAC
7090: 4b 3a 20 4f 6e 6c 79 20 63 6f 6e 73 69 64 65 72  K: Only consider
70a0: 20 74 68 65 20 65 73 63 61 70 65 20 63 68 61 72   the escape char
70b0: 61 63 74 65 72 20 74 6f 20 62 65 20 61 6e 20 61  acter to be an a
70c0: 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20  ctual..         
70d0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
70e0: 22 65 73 63 61 70 65 22 20 69 66 20 69 74 20 69  "escape" if it i
70f0: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
7100: 72 65 73 65 72 76 65 64 20 63 68 61 72 61 63 74  reserved charact
7110: 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
7120: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74       //       ot
7130: 68 65 72 77 69 73 65 2c 20 65 6d 69 74 20 74 68  herwise, emit th
7140: 65 20 6f 72 69 67 69 6e 61 6c 20 65 73 63 61 70  e original escap
7150: 65 20 63 68 61 72 61 63 74 65 72 20 61 6e 64 0d  e character and.
7160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7170: 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 75   //       the cu
7180: 72 72 65 6e 74 20 63 68 61 72 61 63 74 65 72 20  rrent character 
7190: 69 6e 20 61 6e 20 65 66 66 6f 72 74 20 74 6f 20  in an effort to 
71a0: 68 65 6c 70 20 70 72 65 73 65 72 76 65 0d 0a 20  help preserve.. 
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
71c0: 2f 20 20 20 20 20 20 20 74 68 65 20 6f 72 69 67  /       the orig
71d0: 69 6e 61 6c 20 73 74 72 69 6e 67 20 63 6f 6e 74  inal string cont
71e0: 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ent...          
71f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7200: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
7210: 68 61 72 61 63 74 65 72 20 21 3d 20 45 73 63 61  haracter != Esca
7220: 70 65 43 68 61 72 29 20 26 26 0d 0a 20 20 20 20  peChar) &&..    
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7240: 28 63 68 61 72 61 63 74 65 72 20 21 3d 20 51 75  (character != Qu
7250: 6f 74 65 43 68 61 72 29 20 26 26 0d 0a 20 20 20  oteChar) &&..   
7260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7270: 20 28 63 68 61 72 61 63 74 65 72 20 21 3d 20 73   (character != s
7280: 65 70 61 72 61 74 6f 72 29 29 0d 0a 20 20 20 20  eparator))..    
7290: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72b0: 20 20 20 65 6c 65 6d 65 6e 74 2e 41 70 70 65 6e     element.Appen
72c0: 64 28 45 73 63 61 70 65 43 68 61 72 29 3b 0d 0a  d(EscapeChar);..
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
72f0: 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 41 70 70       element.App
7300: 65 6e 64 28 63 68 61 72 61 63 74 65 72 29 3b 0d  end(character);.
7310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7320: 20 65 73 63 61 70 65 20 3d 20 66 61 6c 73 65 3b   escape = false;
7330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
7350: 65 20 69 66 20 28 63 68 61 72 61 63 74 65 72 20  e if (character 
7360: 3d 3d 20 45 73 63 61 70 65 43 68 61 72 29 0d 0a  == EscapeChar)..
7370: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
7390: 73 63 61 70 65 20 3d 20 74 72 75 65 3b 0d 0a 20  scape = true;.. 
73a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
73b0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
73c0: 66 20 28 63 68 61 72 61 63 74 65 72 20 3d 3d 20  f (character == 
73d0: 51 75 6f 74 65 43 68 61 72 29 0d 0a 20 20 20 20  QuoteChar)..    
73e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
73f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
7400: 65 65 70 51 75 6f 74 65 29 0d 0a 20 20 20 20 20  eepQuote)..     
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
7420: 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 28 63 68  lement.Append(ch
7430: 61 72 61 63 74 65 72 29 3b 0d 0a 0d 0a 20 20 20  aracter);....   
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75 6f               quo
7450: 74 65 20 3d 20 21 71 75 6f 74 65 3b 0d 0a 20 20  te = !quote;..  
7460: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7470: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
7480: 20 28 63 68 61 72 61 63 74 65 72 20 3d 3d 20 73   (character == s
7490: 65 70 61 72 61 74 6f 72 29 0d 0a 20 20 20 20 20  eparator)..     
74a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
74b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 71 75            if (qu
74c0: 6f 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ote)..          
74d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
74f0: 6d 65 6e 74 2e 41 70 70 65 6e 64 28 63 68 61 72  ment.Append(char
7500: 61 63 74 65 72 29 3b 0d 0a 20 20 20 20 20 20 20  acter);..       
7510: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7520: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
7530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7540: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7550: 20 20 20 20 20 20 20 20 20 6c 69 73 74 2e 41 64           list.Ad
7560: 64 28 65 6c 65 6d 65 6e 74 2e 54 6f 53 74 72 69  d(element.ToStri
7570: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
7580: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
7590: 65 6e 74 2e 4c 65 6e 67 74 68 20 3d 20 30 3b 0d  ent.Length = 0;.
75a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
75b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
75c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
75d0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
75e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
75f0: 20 20 20 20 65 6c 65 6d 65 6e 74 2e 41 70 70 65      element.Appe
7600: 6e 64 28 63 68 61 72 61 63 74 65 72 29 3b 0d 0a  nd(character);..
7610: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7620: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7630: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
7640: 2f 2f 20 4e 4f 54 45 3a 20 41 6e 20 75 6e 62 61  // NOTE: An unba
7650: 6c 61 6e 63 65 64 20 65 73 63 61 70 65 20 6f 72  lanced escape or
7660: 20 71 75 6f 74 65 20 63 68 61 72 61 63 74 65 72   quote character
7670: 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 69   in the string i
7680: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  s..        //   
7690: 20 20 20 20 63 6f 6e 73 69 64 65 72 65 64 20 74      considered t
76a0: 6f 20 62 65 20 61 20 66 61 74 61 6c 20 65 72 72  o be a fatal err
76b0: 6f 72 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72  or; therefore, r
76c0: 65 74 75 72 6e 20 6e 75 6c 6c 2e 0d 0a 20 20 20  eturn null...   
76d0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
76e0: 20 69 66 20 28 65 73 63 61 70 65 20 7c 7c 20 71   if (escape || q
76f0: 75 6f 74 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  uote)..        {
7700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72  ..            er
7710: 72 6f 72 20 3d 20 22 75 6e 62 61 6c 61 6e 63 65  ror = "unbalance
7720: 64 20 65 73 63 61 70 65 20 6f 72 20 71 75 6f 74  d escape or quot
7730: 65 20 63 68 61 72 61 63 74 65 72 20 66 6f 75 6e  e character foun
7740: 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
7750: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
7760: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7770: 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 2e      if (element.
7780: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
7790: 20 20 20 20 20 20 20 20 20 6c 69 73 74 2e 41 64           list.Ad
77a0: 64 28 65 6c 65 6d 65 6e 74 2e 54 6f 53 74 72 69  d(element.ToStri
77b0: 6e 67 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ng());....      
77c0: 20 20 72 65 74 75 72 6e 20 6c 69 73 74 2e 54 6f    return list.To
77d0: 41 72 72 61 79 28 29 3b 0d 0a 20 20 20 20 7d 0d  Array();..    }.
77e0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
77f0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 51 75  ary>..    /// Qu
7800: 65 72 69 65 73 20 61 6e 64 20 72 65 74 75 72 6e  eries and return
7810: 73 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70  s the string rep
7820: 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  resentation for 
7830: 61 6e 20 6f 62 6a 65 63 74 2c 20 75 73 69 6e 67  an object, using
7840: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 73 70   the..    /// sp
7850: 65 63 69 66 69 65 64 20 28 6f 72 20 63 75 72 72  ecified (or curr
7860: 65 6e 74 29 20 66 6f 72 6d 61 74 20 70 72 6f 76  ent) format prov
7870: 69 64 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ider...    /// <
7880: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
7890: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
78a0: 6f 62 6a 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  obj">..    /// T
78b0: 68 65 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  he object instan
78c0: 63 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65  ce to return the
78d0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
78e0: 74 61 74 69 6f 6e 20 66 6f 72 2e 0d 0a 20 20 20  tation for...   
78f0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
7900: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7910: 6d 65 3d 22 70 72 6f 76 69 64 65 72 22 3e 0d 0a  me="provider">..
7920: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6f 72 6d      /// The form
7930: 61 74 20 70 72 6f 76 69 64 65 72 20 74 6f 20 75  at provider to u
7940: 73 65 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20  se -OR- null if 
7950: 74 68 65 20 63 75 72 72 65 6e 74 20 66 6f 72 6d  the current form
7960: 61 74 20 70 72 6f 76 69 64 65 72 20 66 6f 72 0d  at provider for.
7970: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 74 68 72  .    /// the thr
7980: 65 61 64 20 73 68 6f 75 6c 64 20 62 65 20 75 73  ead should be us
7990: 65 64 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20  ed instead...   
79a0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
79b0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
79c0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74  ..    /// The st
79d0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
79e0: 69 6f 6e 20 66 6f 72 20 74 68 65 20 6f 62 6a 65  ion for the obje
79f0: 63 74 20 69 6e 73 74 61 6e 63 65 20 2d 4f 52 2d  ct instance -OR-
7a00: 20 6e 75 6c 6c 20 69 66 20 74 68 65 0d 0a 20 20   null if the..  
7a10: 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73    /// object ins
7a20: 74 61 6e 63 65 20 69 73 20 61 6c 73 6f 20 6e 75  tance is also nu
7a30: 6c 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ll...    /// </r
7a40: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
7a50: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
7a60: 67 20 54 6f 53 74 72 69 6e 67 57 69 74 68 50 72  g ToStringWithPr
7a70: 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
7a80: 20 6f 62 6a 65 63 74 20 6f 62 6a 2c 0d 0a 20 20   object obj,..  
7a90: 20 20 20 20 20 20 49 46 6f 72 6d 61 74 50 72 6f        IFormatPro
7aa0: 76 69 64 65 72 20 70 72 6f 76 69 64 65 72 0d 0a  vider provider..
7ab0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
7ac0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6f 62  ..        if (ob
7ad0: 6a 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  j == null)..    
7ae0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
7af0: 75 6c 6c 3b 20 2f 2a 20 6e 75 6c 6c 20 2d 2d 3e  ull; /* null -->
7b00: 20 6e 75 6c 6c 20 2a 2f 0d 0a 0d 0a 20 20 20 20   null */....    
7b10: 20 20 20 20 69 66 20 28 6f 62 6a 20 69 73 20 73      if (obj is s
7b20: 74 72 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  tring)..        
7b30: 20 20 20 20 72 65 74 75 72 6e 20 28 73 74 72 69      return (stri
7b40: 6e 67 29 6f 62 6a 3b 20 2f 2a 20 69 64 65 6e 74  ng)obj; /* ident
7b50: 69 74 79 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  ity */....      
7b60: 20 20 49 43 6f 6e 76 65 72 74 69 62 6c 65 20 63    IConvertible c
7b70: 6f 6e 76 65 72 74 69 62 6c 65 20 3d 20 6f 62 6a  onvertible = obj
7b80: 20 61 73 20 49 43 6f 6e 76 65 72 74 69 62 6c 65   as IConvertible
7b90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
7ba0: 28 63 6f 6e 76 65 72 74 69 62 6c 65 20 21 3d 20  (convertible != 
7bb0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7bc0: 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 76 65 72     return conver
7bd0: 74 69 62 6c 65 2e 54 6f 53 74 72 69 6e 67 28 70  tible.ToString(p
7be0: 72 6f 76 69 64 65 72 29 3b 0d 0a 0d 0a 20 20 20  rovider);....   
7bf0: 20 20 20 20 20 72 65 74 75 72 6e 20 6f 62 6a 2e       return obj.
7c00: 54 6f 53 74 72 69 6e 67 28 29 3b 20 2f 2a 20 6e  ToString(); /* n
7c10: 6f 74 20 49 43 6f 6e 76 65 72 74 69 62 6c 65 20  ot IConvertible 
7c20: 2a 2f 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  */..    }....   
7c30: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
7c40: 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 20      /// Convert 
7c50: 61 20 76 61 6c 75 65 20 74 6f 20 74 72 75 65 20  a value to true 
7c60: 6f 72 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f  or false...    /
7c70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7c80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7c90: 6d 65 3d 22 73 6f 75 72 63 65 22 3e 41 20 73 74  me="source">A st
7ca0: 72 69 6e 67 20 6f 72 20 6e 75 6d 62 65 72 20 72  ring or number r
7cb0: 65 70 72 65 73 65 6e 74 69 6e 67 20 74 72 75 65  epresenting true
7cc0: 20 6f 72 20 66 61 6c 73 65 3c 2f 70 61 72 61 6d   or false</param
7cd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
7ce0: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rns></returns>..
7cf0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
7d00: 63 20 62 6f 6f 6c 20 54 6f 42 6f 6f 6c 65 61 6e  c bool ToBoolean
7d10: 28 6f 62 6a 65 63 74 20 73 6f 75 72 63 65 29 0d  (object source).
7d20: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
7d30: 20 28 73 6f 75 72 63 65 20 69 73 20 62 6f 6f 6c   (source is bool
7d40: 29 20 72 65 74 75 72 6e 20 28 62 6f 6f 6c 29 73  ) return (bool)s
7d50: 6f 75 72 63 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  ource;....      
7d60: 72 65 74 75 72 6e 20 54 6f 42 6f 6f 6c 65 61 6e  return ToBoolean
7d70: 28 54 6f 53 74 72 69 6e 67 57 69 74 68 50 72 6f  (ToStringWithPro
7d80: 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
7d90: 20 20 73 6f 75 72 63 65 2c 20 43 75 6c 74 75 72    source, Cultur
7da0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
7db0: 75 6c 74 75 72 65 29 29 3b 0d 0a 20 20 20 20 7d  ulture));..    }
7dc0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
7dd0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
7de0: 6f 6e 76 65 72 74 20 61 20 73 74 72 69 6e 67 20  onvert a string 
7df0: 74 6f 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  to true or false
7e00: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
7e10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
7e20: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72  param name="sour
7e30: 63 65 22 3e 41 20 73 74 72 69 6e 67 20 72 65 70  ce">A string rep
7e40: 72 65 73 65 6e 74 69 6e 67 20 74 72 75 65 20 6f  resenting true o
7e50: 72 20 66 61 6c 73 65 3c 2f 70 61 72 61 6d 3e 0d  r false</param>.
7e60: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
7e70: 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  s></returns>..  
7e80: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
7e90: 0a 20 20 20 20 2f 2f 2f 20 22 79 65 73 22 2c 20  .    /// "yes", 
7ea0: 22 6e 6f 22 2c 20 22 79 22 2c 20 22 6e 22 2c 20  "no", "y", "n", 
7eb0: 22 30 22 2c 20 22 31 22 2c 20 22 6f 6e 22 2c 20  "0", "1", "on", 
7ec0: 22 6f 66 66 22 20 61 73 20 77 65 6c 6c 20 61 73  "off" as well as
7ed0: 20 42 6f 6f 6c 65 61 6e 2e 46 61 6c 73 65 53 74   Boolean.FalseSt
7ee0: 72 69 6e 67 20 61 6e 64 20 42 6f 6f 6c 65 61 6e  ring and Boolean
7ef0: 2e 54 72 75 65 53 74 72 69 6e 67 20 77 69 6c 6c  .TrueString will
7f00: 20 61 6c 6c 20 62 65 0d 0a 20 20 20 20 2f 2f 2f   all be..    ///
7f10: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 20   converted to a 
7f20: 70 72 6f 70 65 72 20 62 6f 6f 6c 65 61 6e 20 76  proper boolean v
7f30: 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  alue...    /// <
7f40: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 70  /remarks>..    p
7f50: 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
7f60: 6c 20 54 6f 42 6f 6f 6c 65 61 6e 28 73 74 72 69  l ToBoolean(stri
7f70: 6e 67 20 73 6f 75 72 63 65 29 0d 0a 20 20 20 20  ng source)..    
7f80: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 53 74 72  {..      if (Str
7f90: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73 6f 75 72  ing.Compare(sour
7fa0: 63 65 2c 20 62 6f 6f 6c 2e 54 72 75 65 53 74 72  ce, bool.TrueStr
7fb0: 69 6e 67 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ing, StringCompa
7fc0: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
7fd0: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 20 72  oreCase) == 0) r
7fe0: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
7ff0: 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69     else if (Stri
8000: 6e 67 2e 43 6f 6d 70 61 72 65 28 73 6f 75 72 63  ng.Compare(sourc
8010: 65 2c 20 62 6f 6f 6c 2e 46 61 6c 73 65 53 74 72  e, bool.FalseStr
8020: 69 6e 67 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ing, StringCompa
8030: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
8040: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29 20 72  oreCase) == 0) r
8050: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
8060: 20 20 20 20 20 20 73 77 69 74 63 68 28 73 6f 75        switch(sou
8070: 72 63 65 2e 54 6f 4c 6f 77 65 72 28 43 75 6c 74  rce.ToLower(Cult
8080: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
8090: 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20  tCulture))..    
80a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
80b0: 65 20 22 79 65 73 22 3a 0d 0a 20 20 20 20 20 20  e "yes":..      
80c0: 20 20 63 61 73 65 20 22 79 22 3a 0d 0a 20 20 20    case "y":..   
80d0: 20 20 20 20 20 63 61 73 65 20 22 31 22 3a 0d 0a       case "1":..
80e0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6f 6e          case "on
80f0: 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ":..          re
8100: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
8110: 20 20 20 20 63 61 73 65 20 22 6e 6f 22 3a 0d 0a      case "no":..
8120: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6e 22          case "n"
8130: 3a 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  :..        case 
8140: 22 30 22 3a 0d 0a 20 20 20 20 20 20 20 20 63 61  "0":..        ca
8150: 73 65 20 22 6f 66 66 22 3a 0d 0a 20 20 20 20 20  se "off":..     
8160: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
8170: 65 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61  e;..        defa
8180: 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ult:..          
8190: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
81a0: 6e 74 45 78 63 65 70 74 69 6f 6e 28 22 73 6f 75  ntException("sou
81b0: 72 63 65 22 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  rce");..      }.
81c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 72  .    }....    #r
81d0: 65 67 69 6f 6e 20 54 79 70 65 20 43 6f 6e 76 65  egion Type Conve
81e0: 72 73 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f 2f 20  rsions..    /// 
81f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
8200: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 53 51  // Converts a SQ
8210: 4c 69 74 65 54 79 70 65 20 74 6f 20 61 20 2e 4e  LiteType to a .N
8220: 45 54 20 54 79 70 65 20 6f 62 6a 65 63 74 0d 0a  ET Type object..
8230: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8240: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8250: 61 6d 20 6e 61 6d 65 3d 22 74 22 3e 54 68 65 20  am name="t">The 
8260: 53 51 4c 69 74 65 54 79 70 65 20 74 6f 20 63 6f  SQLiteType to co
8270: 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20  nvert</param>.. 
8280: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
8290: 52 65 74 75 72 6e 73 20 61 20 2e 4e 45 54 20 54  Returns a .NET T
82a0: 79 70 65 20 6f 62 6a 65 63 74 3c 2f 72 65 74 75  ype object</retu
82b0: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
82c0: 61 6c 20 73 74 61 74 69 63 20 54 79 70 65 20 53  al static Type S
82d0: 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28  QLiteTypeToType(
82e0: 53 51 4c 69 74 65 54 79 70 65 20 74 29 0d 0a 20  SQLiteType t).. 
82f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
8300: 74 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65  t.Type == DbType
8310: 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20  .Object)..      
8320: 20 20 72 65 74 75 72 6e 20 5f 61 66 66 69 6e 69    return _affini
8330: 74 79 74 6f 74 79 70 65 5b 28 69 6e 74 29 74 2e  tytotype[(int)t.
8340: 41 66 66 69 6e 69 74 79 5d 3b 0d 0a 20 20 20 20  Affinity];..    
8350: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
8360: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e  return SQLiteCon
8370: 76 65 72 74 2e 44 62 54 79 70 65 54 6f 54 79 70  vert.DbTypeToTyp
8380: 65 28 74 2e 54 79 70 65 29 3b 0d 0a 20 20 20 20  e(t.Type);..    
8390: 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  }....    private
83a0: 20 73 74 61 74 69 63 20 54 79 70 65 5b 5d 20 5f   static Type[] _
83b0: 61 66 66 69 6e 69 74 79 74 6f 74 79 70 65 20 3d  affinitytotype =
83c0: 20 7b 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66   {..      typeof
83d0: 28 6f 62 6a 65 63 74 29 2c 20 20 20 2f 2f 20 55  (object),   // U
83e0: 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 30 29  ninitialized (0)
83f0: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 49  ..      typeof(I
8400: 6e 74 36 34 29 2c 20 20 20 20 2f 2f 20 49 6e 74  nt64),    // Int
8410: 36 34 20 28 31 29 0d 0a 20 20 20 20 20 20 74 79  64 (1)..      ty
8420: 70 65 6f 66 28 44 6f 75 62 6c 65 29 2c 20 20 20  peof(Double),   
8430: 2f 2f 20 44 6f 75 62 6c 65 20 28 32 29 0d 0a 20  // Double (2).. 
8440: 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72 69       typeof(stri
8450: 6e 67 29 2c 20 20 20 2f 2f 20 54 65 78 74 20 28  ng),   // Text (
8460: 33 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  3)..      typeof
8470: 28 62 79 74 65 5b 5d 29 2c 20 20 20 2f 2f 20 42  (byte[]),   // B
8480: 6c 6f 62 20 28 34 29 0d 0a 20 20 20 20 20 20 74  lob (4)..      t
8490: 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 2c 20 20  ypeof(object),  
84a0: 20 2f 2f 20 4e 75 6c 6c 20 28 35 29 0d 0a 20 20   // Null (5)..  
84b0: 20 20 20 20 74 79 70 65 6f 66 28 44 61 74 65 54      typeof(DateT
84c0: 69 6d 65 29 2c 20 2f 2f 20 44 61 74 65 54 69 6d  ime), // DateTim
84d0: 65 20 28 31 30 29 0d 0a 20 20 20 20 20 20 74 79  e (10)..      ty
84e0: 70 65 6f 66 28 6f 62 6a 65 63 74 29 20 20 20 20  peof(object)    
84f0: 2f 2f 20 4e 6f 6e 65 20 28 31 31 29 0d 0a 20 20  // None (11)..  
8500: 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20    };....    /// 
8510: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
8520: 2f 2f 20 46 6f 72 20 61 20 67 69 76 65 6e 20 69  // For a given i
8530: 6e 74 72 69 6e 73 69 63 20 74 79 70 65 2c 20 72  ntrinsic type, r
8540: 65 74 75 72 6e 20 61 20 44 62 54 79 70 65 0d 0a  eturn a DbType..
8550: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8560: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
8570: 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
8580: 65 20 6e 61 74 69 76 65 20 74 79 70 65 20 74 6f  e native type to
8590: 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e   convert</param>
85a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
85b0: 6e 73 3e 54 68 65 20 63 6f 72 72 65 73 70 6f 6e  ns>The correspon
85c0: 64 69 6e 67 20 28 63 6c 6f 73 65 73 74 20 6d 61  ding (closest ma
85d0: 74 63 68 29 20 44 62 54 79 70 65 3c 2f 72 65 74  tch) DbType</ret
85e0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
85f0: 6e 61 6c 20 73 74 61 74 69 63 20 44 62 54 79 70  nal static DbTyp
8600: 65 20 54 79 70 65 54 6f 44 62 54 79 70 65 28 54  e TypeToDbType(T
8610: 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d  ype typ)..    {.
8620: 0a 20 20 20 20 20 20 54 79 70 65 43 6f 64 65 20  .      TypeCode 
8630: 74 63 20 3d 20 54 79 70 65 2e 47 65 74 54 79 70  tc = Type.GetTyp
8640: 65 43 6f 64 65 28 74 79 70 29 3b 0d 0a 20 20 20  eCode(typ);..   
8650: 20 20 20 69 66 20 28 74 63 20 3d 3d 20 54 79 70     if (tc == Typ
8660: 65 43 6f 64 65 2e 4f 62 6a 65 63 74 29 0d 0a 20  eCode.Object).. 
8670: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8680: 69 66 20 28 74 79 70 20 3d 3d 20 74 79 70 65 6f  if (typ == typeo
8690: 66 28 62 79 74 65 5b 5d 29 29 20 72 65 74 75 72  f(byte[])) retur
86a0: 6e 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 3b  n DbType.Binary;
86b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79  ..        if (ty
86c0: 70 20 3d 3d 20 74 79 70 65 6f 66 28 47 75 69 64  p == typeof(Guid
86d0: 29 29 20 72 65 74 75 72 6e 20 44 62 54 79 70 65  )) return DbType
86e0: 2e 47 75 69 64 3b 0d 0a 20 20 20 20 20 20 20 20  .Guid;..        
86f0: 72 65 74 75 72 6e 20 44 62 54 79 70 65 2e 53 74  return DbType.St
8700: 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ring;..      }..
8710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 74 79        return _ty
8720: 70 65 74 6f 64 62 74 79 70 65 5b 28 69 6e 74 29  petodbtype[(int)
8730: 74 63 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tc];..    }.... 
8740: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
8750: 63 20 44 62 54 79 70 65 5b 5d 20 5f 74 79 70 65  c DbType[] _type
8760: 74 6f 64 62 74 79 70 65 20 3d 20 7b 0d 0a 20 20  todbtype = {..  
8770: 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a 65 63      DbType.Objec
8780: 74 2c 20 20 20 2f 2f 20 45 6d 70 74 79 20 28 30  t,   // Empty (0
8790: 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  )..      DbType.
87a0: 42 69 6e 61 72 79 2c 20 20 20 2f 2f 20 4f 62 6a  Binary,   // Obj
87b0: 65 63 74 20 28 31 29 0d 0a 20 20 20 20 20 20 44  ect (1)..      D
87c0: 62 54 79 70 65 2e 4f 62 6a 65 63 74 2c 20 20 20  bType.Object,   
87d0: 2f 2f 20 44 42 4e 75 6c 6c 20 28 32 29 0d 0a 20  // DBNull (2).. 
87e0: 20 20 20 20 20 44 62 54 79 70 65 2e 42 6f 6f 6c       DbType.Bool
87f0: 65 61 6e 2c 20 20 2f 2f 20 42 6f 6f 6c 65 61 6e  ean,  // Boolean
8800: 20 28 33 29 0d 0a 20 20 20 20 20 20 44 62 54 79   (3)..      DbTy
8810: 70 65 2e 53 42 79 74 65 2c 20 20 20 20 2f 2f 20  pe.SByte,    // 
8820: 43 68 61 72 20 28 34 29 0d 0a 20 20 20 20 20 20  Char (4)..      
8830: 44 62 54 79 70 65 2e 53 42 79 74 65 2c 20 20 20  DbType.SByte,   
8840: 20 2f 2f 20 53 42 79 74 65 20 28 35 29 0d 0a 20   // SByte (5).. 
8850: 20 20 20 20 20 44 62 54 79 70 65 2e 42 79 74 65       DbType.Byte
8860: 2c 20 20 20 20 20 2f 2f 20 42 79 74 65 20 28 36  ,     // Byte (6
8870: 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  )..      DbType.
8880: 49 6e 74 31 36 2c 20 20 20 20 2f 2f 20 49 6e 74  Int16,    // Int
8890: 31 36 20 28 37 29 0d 0a 20 20 20 20 20 20 44 62  16 (7)..      Db
88a0: 54 79 70 65 2e 55 49 6e 74 31 36 2c 20 20 20 2f  Type.UInt16,   /
88b0: 2f 20 55 49 6e 74 31 36 20 28 38 29 0d 0a 20 20  / UInt16 (8)..  
88c0: 20 20 20 20 44 62 54 79 70 65 2e 49 6e 74 33 32      DbType.Int32
88d0: 2c 20 20 20 20 2f 2f 20 49 6e 74 33 32 20 28 39  ,    // Int32 (9
88e0: 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  )..      DbType.
88f0: 55 49 6e 74 33 32 2c 20 20 20 2f 2f 20 55 49 6e  UInt32,   // UIn
8900: 74 33 32 20 28 31 30 29 0d 0a 20 20 20 20 20 20  t32 (10)..      
8910: 44 62 54 79 70 65 2e 49 6e 74 36 34 2c 20 20 20  DbType.Int64,   
8920: 20 2f 2f 20 49 6e 74 36 34 20 28 31 31 29 0d 0a   // Int64 (11)..
8930: 20 20 20 20 20 20 44 62 54 79 70 65 2e 55 49 6e        DbType.UIn
8940: 74 36 34 2c 20 20 20 2f 2f 20 55 49 6e 74 36 34  t64,   // UInt64
8950: 20 28 31 32 29 0d 0a 20 20 20 20 20 20 44 62 54   (12)..      DbT
8960: 79 70 65 2e 53 69 6e 67 6c 65 2c 20 20 20 2f 2f  ype.Single,   //
8970: 20 53 69 6e 67 6c 65 20 28 31 33 29 0d 0a 20 20   Single (13)..  
8980: 20 20 20 20 44 62 54 79 70 65 2e 44 6f 75 62 6c      DbType.Doubl
8990: 65 2c 20 20 20 2f 2f 20 44 6f 75 62 6c 65 20 28  e,   // Double (
89a0: 31 34 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70  14)..      DbTyp
89b0: 65 2e 44 65 63 69 6d 61 6c 2c 20 20 2f 2f 20 44  e.Decimal,  // D
89c0: 65 63 69 6d 61 6c 20 28 31 35 29 0d 0a 20 20 20  ecimal (15)..   
89d0: 20 20 20 44 62 54 79 70 65 2e 44 61 74 65 54 69     DbType.DateTi
89e0: 6d 65 2c 20 2f 2f 20 44 61 74 65 54 69 6d 65 20  me, // DateTime 
89f0: 28 31 36 29 0d 0a 20 20 20 20 20 20 44 62 54 79  (16)..      DbTy
8a00: 70 65 2e 4f 62 6a 65 63 74 2c 20 20 20 2f 2f 20  pe.Object,   // 
8a10: 3f 3f 20 28 31 37 29 0d 0a 20 20 20 20 20 20 44  ?? (17)..      D
8a20: 62 54 79 70 65 2e 53 74 72 69 6e 67 20 20 20 20  bType.String    
8a30: 2f 2f 20 53 74 72 69 6e 67 20 28 31 38 29 0d 0a  // String (18)..
8a40: 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      };....    //
8a50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8a60: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
8a70: 20 43 6f 6c 75 6d 6e 53 69 7a 65 20 66 6f 72 20   ColumnSize for 
8a80: 74 68 65 20 67 69 76 65 6e 20 44 62 54 79 70 65  the given DbType
8a90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
8aa0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
8ab0: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
8ac0: 54 68 65 20 44 62 54 79 70 65 20 74 6f 20 67 65  The DbType to ge
8ad0: 74 20 74 68 65 20 73 69 7a 65 20 6f 66 3c 2f 70  t the size of</p
8ae0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
8af0: 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
8b00: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
8b10: 20 73 74 61 74 69 63 20 69 6e 74 20 44 62 54 79   static int DbTy
8b20: 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65 28 44  peToColumnSize(D
8b30: 62 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20  bType typ)..    
8b40: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
8b50: 5f 64 62 74 79 70 65 74 6f 63 6f 6c 75 6d 6e 73  _dbtypetocolumns
8b60: 69 7a 65 5b 28 69 6e 74 29 74 79 70 5d 3b 0d 0a  ize[(int)typ];..
8b70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69      }....    pri
8b80: 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 5b  vate static int[
8b90: 5d 20 5f 64 62 74 79 70 65 74 6f 63 6f 6c 75 6d  ] _dbtypetocolum
8ba0: 6e 73 69 7a 65 20 3d 20 7b 0d 0a 20 20 20 20 20  nsize = {..     
8bb0: 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65 2c 20 2f   int.MaxValue, /
8bc0: 2f 20 41 6e 73 69 53 74 72 69 6e 67 20 28 30 29  / AnsiString (0)
8bd0: 0d 0a 20 20 20 20 20 20 69 6e 74 2e 4d 61 78 56  ..      int.MaxV
8be0: 61 6c 75 65 2c 20 2f 2f 20 42 69 6e 61 72 79 20  alue, // Binary 
8bf0: 28 31 29 0d 0a 20 20 20 20 20 20 31 2c 20 20 20  (1)..      1,   
8c00: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 79 74 65           // Byte
8c10: 20 28 32 29 0d 0a 20 20 20 20 20 20 31 2c 20 20   (2)..      1,  
8c20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 6f 6f            // Boo
8c30: 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20 20 20 20  lean (3)..      
8c40: 38 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  8,            //
8c50: 20 43 75 72 72 65 6e 63 79 20 28 34 29 0d 0a 20   Currency (4).. 
8c60: 20 20 20 20 20 38 2c 20 20 20 20 20 20 20 20 20       8,         
8c70: 20 20 20 2f 2f 20 44 61 74 65 20 28 35 29 0d 0a     // Date (5)..
8c80: 20 20 20 20 20 20 38 2c 20 20 20 20 20 20 20 20        8,        
8c90: 20 20 20 20 2f 2f 20 44 61 74 65 54 69 6d 65 20      // DateTime 
8ca0: 28 36 29 0d 0a 20 20 20 20 20 20 38 2c 20 20 20  (6)..      8,   
8cb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65 63 69           // Deci
8cc0: 6d 61 6c 20 28 37 29 0d 0a 20 20 20 20 20 20 38  mal (7)..      8
8cd0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ,            // 
8ce0: 44 6f 75 62 6c 65 20 28 38 29 0d 0a 20 20 20 20  Double (8)..    
8cf0: 20 20 31 36 2c 20 20 20 20 20 20 20 20 20 20 20    16,           
8d00: 2f 2f 20 47 75 69 64 20 28 39 29 0d 0a 20 20 20  // Guid (9)..   
8d10: 20 20 20 32 2c 20 20 20 20 20 20 20 20 20 20 20     2,           
8d20: 20 2f 2f 20 49 6e 74 31 36 20 28 31 30 29 0d 0a   // Int16 (10)..
8d30: 20 20 20 20 20 20 34 2c 20 20 20 20 20 20 20 20        4,        
8d40: 20 20 20 20 2f 2f 20 49 6e 74 33 32 20 28 31 31      // Int32 (11
8d50: 29 0d 0a 20 20 20 20 20 20 38 2c 20 20 20 20 20  )..      8,     
8d60: 20 20 20 20 20 20 20 2f 2f 20 49 6e 74 36 34 20         // Int64 
8d70: 28 31 32 29 0d 0a 20 20 20 20 20 20 69 6e 74 2e  (12)..      int.
8d80: 4d 61 78 56 61 6c 75 65 2c 20 2f 2f 20 4f 62 6a  MaxValue, // Obj
8d90: 65 63 74 20 28 31 33 29 0d 0a 20 20 20 20 20 20  ect (13)..      
8da0: 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  1,            //
8db0: 20 53 42 79 74 65 20 28 31 34 29 0d 0a 20 20 20   SByte (14)..   
8dc0: 20 20 20 34 2c 20 20 20 20 20 20 20 20 20 20 20     4,           
8dd0: 20 2f 2f 20 53 69 6e 67 6c 65 20 28 31 35 29 0d   // Single (15).
8de0: 0a 20 20 20 20 20 20 69 6e 74 2e 4d 61 78 56 61  .      int.MaxVa
8df0: 6c 75 65 2c 20 2f 2f 20 53 74 72 69 6e 67 20 28  lue, // String (
8e00: 31 36 29 0d 0a 20 20 20 20 20 20 38 2c 20 20 20  16)..      8,   
8e10: 20 20 20 20 20 20 20 20 20 2f 2f 20 54 69 6d 65           // Time
8e20: 20 28 31 37 29 0d 0a 20 20 20 20 20 20 32 2c 20   (17)..      2, 
8e30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 49             // UI
8e40: 6e 74 31 36 20 28 31 38 29 0d 0a 20 20 20 20 20  nt16 (18)..     
8e50: 20 34 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f   4,            /
8e60: 2f 20 55 49 6e 74 33 32 20 28 31 39 29 0d 0a 20  / UInt32 (19).. 
8e70: 20 20 20 20 20 38 2c 20 20 20 20 20 20 20 20 20       8,         
8e80: 20 20 20 2f 2f 20 55 49 6e 74 36 34 20 28 32 30     // UInt64 (20
8e90: 29 0d 0a 20 20 20 20 20 20 38 2c 20 20 20 20 20  )..      8,     
8ea0: 20 20 20 20 20 20 20 2f 2f 20 56 61 72 4e 75 6d         // VarNum
8eb0: 65 72 69 63 20 28 32 31 29 0d 0a 20 20 20 20 20  eric (21)..     
8ec0: 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65 2c 20 2f   int.MaxValue, /
8ed0: 2f 20 41 6e 73 69 53 74 72 69 6e 67 46 69 78 65  / AnsiStringFixe
8ee0: 64 4c 65 6e 67 74 68 20 28 32 32 29 0d 0a 20 20  dLength (22)..  
8ef0: 20 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65      int.MaxValue
8f00: 2c 20 2f 2f 20 53 74 72 69 6e 67 46 69 78 65 64  , // StringFixed
8f10: 4c 65 6e 67 74 68 20 28 32 33 29 0d 0a 20 20 20  Length (23)..   
8f20: 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65 2c     int.MaxValue,
8f30: 20 2f 2f 20 3f 3f 20 28 32 34 29 0d 0a 20 20 20   // ?? (24)..   
8f40: 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65 20     int.MaxValue 
8f50: 20 2f 2f 20 58 6d 6c 20 28 32 35 29 0d 0a 20 20   // Xml (25)..  
8f60: 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65    };....    inte
8f70: 72 6e 61 6c 20 73 74 61 74 69 63 20 6f 62 6a 65  rnal static obje
8f80: 63 74 20 44 62 54 79 70 65 54 6f 4e 75 6d 65 72  ct DbTypeToNumer
8f90: 69 63 50 72 65 63 69 73 69 6f 6e 28 44 62 54 79  icPrecision(DbTy
8fa0: 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
8fb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64 62        return _db
8fc0: 74 79 70 65 74 6f 6e 75 6d 65 72 69 63 70 72 65  typetonumericpre
8fd0: 63 69 73 69 6f 6e 5b 28 69 6e 74 29 74 79 70 5d  cision[(int)typ]
8fe0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8ff0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
9000: 62 6a 65 63 74 5b 5d 20 5f 64 62 74 79 70 65 74  bject[] _dbtypet
9010: 6f 6e 75 6d 65 72 69 63 70 72 65 63 69 73 69 6f  onumericprecisio
9020: 6e 20 3d 20 7b 0d 0a 20 20 20 20 20 20 44 42 4e  n = {..      DBN
9030: 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 41 6e  ull.Value, // An
9040: 73 69 53 74 72 69 6e 67 20 28 30 29 0d 0a 20 20  siString (0)..  
9050: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
9060: 2c 20 2f 2f 20 42 69 6e 61 72 79 20 28 31 29 0d  , // Binary (1).
9070: 0a 20 20 20 20 20 20 33 2c 20 20 20 20 20 20 20  .      3,       
9080: 20 20 20 20 20 2f 2f 20 42 79 74 65 20 28 32 29       // Byte (2)
9090: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
90a0: 61 6c 75 65 2c 20 2f 2f 20 42 6f 6f 6c 65 61 6e  alue, // Boolean
90b0: 20 28 33 29 0d 0a 20 20 20 20 20 20 31 39 2c 20   (3)..      19, 
90c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 75 72            // Cur
90d0: 72 65 6e 63 79 20 28 34 29 0d 0a 20 20 20 20 20  rency (4)..     
90e0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f   DBNull.Value, /
90f0: 2f 20 44 61 74 65 20 28 35 29 0d 0a 20 20 20 20  / Date (5)..    
9100: 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20    DBNull.Value, 
9110: 2f 2f 20 44 61 74 65 54 69 6d 65 20 28 36 29 0d  // DateTime (6).
9120: 0a 20 20 20 20 20 20 35 33 2c 20 20 20 20 20 20  .      53,      
9130: 20 20 20 20 20 2f 2f 20 44 65 63 69 6d 61 6c 20       // Decimal 
9140: 28 37 29 0d 0a 20 20 20 20 20 20 35 33 2c 20 20  (7)..      53,  
9150: 20 20 20 20 20 20 20 20 20 2f 2f 20 44 6f 75 62           // Doub
9160: 6c 65 20 28 38 29 0d 0a 20 20 20 20 20 20 44 42  le (8)..      DB
9170: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 47  Null.Value, // G
9180: 75 69 64 20 28 39 29 0d 0a 20 20 20 20 20 20 35  uid (9)..      5
9190: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ,            // 
91a0: 49 6e 74 31 36 20 28 31 30 29 0d 0a 20 20 20 20  Int16 (10)..    
91b0: 20 20 31 30 2c 20 20 20 20 20 20 20 20 20 20 20    10,           
91c0: 2f 2f 20 49 6e 74 33 32 20 28 31 31 29 0d 0a 20  // Int32 (11).. 
91d0: 20 20 20 20 20 31 39 2c 20 20 20 20 20 20 20 20       19,        
91e0: 20 20 20 2f 2f 20 49 6e 74 36 34 20 28 31 32 29     // Int64 (12)
91f0: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
9200: 61 6c 75 65 2c 20 2f 2f 20 4f 62 6a 65 63 74 20  alue, // Object 
9210: 28 31 33 29 0d 0a 20 20 20 20 20 20 33 2c 20 20  (13)..      3,  
9220: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53 42 79            // SBy
9230: 74 65 20 28 31 34 29 0d 0a 20 20 20 20 20 20 32  te (14)..      2
9240: 34 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  4,           // 
9250: 53 69 6e 67 6c 65 20 28 31 35 29 0d 0a 20 20 20  Single (15)..   
9260: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
9270: 20 2f 2f 20 53 74 72 69 6e 67 20 28 31 36 29 0d   // String (16).
9280: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
9290: 6c 75 65 2c 20 2f 2f 20 54 69 6d 65 20 28 31 37  lue, // Time (17
92a0: 29 0d 0a 20 20 20 20 20 20 35 2c 20 20 20 20 20  )..      5,     
92b0: 20 20 20 20 20 20 20 2f 2f 20 55 49 6e 74 31 36         // UInt16
92c0: 20 28 31 38 29 0d 0a 20 20 20 20 20 20 31 30 2c   (18)..      10,
92d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 49             // UI
92e0: 6e 74 33 32 20 28 31 39 29 0d 0a 20 20 20 20 20  nt32 (19)..     
92f0: 20 31 39 2c 20 20 20 20 20 20 20 20 20 20 20 2f   19,           /
9300: 2f 20 55 49 6e 74 36 34 20 28 32 30 29 0d 0a 20  / UInt64 (20).. 
9310: 20 20 20 20 20 35 33 2c 20 20 20 20 20 20 20 20       53,        
9320: 20 20 20 2f 2f 20 56 61 72 4e 75 6d 65 72 69 63     // VarNumeric
9330: 20 28 32 31 29 0d 0a 20 20 20 20 20 20 44 42 4e   (21)..      DBN
9340: 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 41 6e  ull.Value, // An
9350: 73 69 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e  siStringFixedLen
9360: 67 74 68 20 28 32 32 29 0d 0a 20 20 20 20 20 20  gth (22)..      
9370: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f  DBNull.Value, //
9380: 20 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67   StringFixedLeng
9390: 74 68 20 28 32 33 29 0d 0a 20 20 20 20 20 20 44  th (23)..      D
93a0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
93b0: 3f 3f 20 28 32 34 29 0d 0a 20 20 20 20 20 20 44  ?? (24)..      D
93c0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 20 20 2f 2f 20  BNull.Value  // 
93d0: 58 6d 6c 20 28 32 35 29 0d 0a 20 20 20 20 7d 3b  Xml (25)..    };
93e0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
93f0: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 44   static object D
9400: 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 53 63  bTypeToNumericSc
9410: 61 6c 65 28 44 62 54 79 70 65 20 74 79 70 29 0d  ale(DbType typ).
9420: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
9430: 74 75 72 6e 20 5f 64 62 74 79 70 65 74 6f 6e 75  turn _dbtypetonu
9440: 6d 65 72 69 63 73 63 61 6c 65 5b 28 69 6e 74 29  mericscale[(int)
9450: 74 79 70 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  typ];..    }....
9460: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
9470: 69 63 20 6f 62 6a 65 63 74 5b 5d 20 5f 64 62 74  ic object[] _dbt
9480: 79 70 65 74 6f 6e 75 6d 65 72 69 63 73 63 61 6c  ypetonumericscal
9490: 65 20 3d 20 7b 0d 0a 20 20 20 20 20 20 44 42 4e  e = {..      DBN
94a0: 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 41 6e  ull.Value, // An
94b0: 73 69 53 74 72 69 6e 67 20 28 30 29 0d 0a 20 20  siString (0)..  
94c0: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
94d0: 2c 20 2f 2f 20 42 69 6e 61 72 79 20 28 31 29 0d  , // Binary (1).
94e0: 0a 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20  .      0,       
94f0: 20 20 20 20 20 2f 2f 20 42 79 74 65 20 28 32 29       // Byte (2)
9500: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
9510: 61 6c 75 65 2c 20 2f 2f 20 42 6f 6f 6c 65 61 6e  alue, // Boolean
9520: 20 28 33 29 0d 0a 20 20 20 20 20 20 34 2c 20 20   (3)..      4,  
9530: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 75 72            // Cur
9540: 72 65 6e 63 79 20 28 34 29 0d 0a 20 20 20 20 20  rency (4)..     
9550: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f   DBNull.Value, /
9560: 2f 20 44 61 74 65 20 28 35 29 0d 0a 20 20 20 20  / Date (5)..    
9570: 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20    DBNull.Value, 
9580: 2f 2f 20 44 61 74 65 54 69 6d 65 20 28 36 29 0d  // DateTime (6).
9590: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
95a0: 6c 75 65 2c 20 2f 2f 20 44 65 63 69 6d 61 6c 20  lue, // Decimal 
95b0: 28 37 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c  (7)..      DBNul
95c0: 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 44 6f 75 62  l.Value, // Doub
95d0: 6c 65 20 28 38 29 0d 0a 20 20 20 20 20 20 44 42  le (8)..      DB
95e0: 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 47  Null.Value, // G
95f0: 75 69 64 20 28 39 29 0d 0a 20 20 20 20 20 20 30  uid (9)..      0
9600: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ,            // 
9610: 49 6e 74 31 36 20 28 31 30 29 0d 0a 20 20 20 20  Int16 (10)..    
9620: 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20    0,            
9630: 2f 2f 20 49 6e 74 33 32 20 28 31 31 29 0d 0a 20  // Int32 (11).. 
9640: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
9650: 20 20 20 2f 2f 20 49 6e 74 36 34 20 28 31 32 29     // Int64 (12)
9660: 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ..      DBNull.V
9670: 61 6c 75 65 2c 20 2f 2f 20 4f 62 6a 65 63 74 20  alue, // Object 
9680: 28 31 33 29 0d 0a 20 20 20 20 20 20 30 2c 20 20  (13)..      0,  
9690: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53 42 79            // SBy
96a0: 74 65 20 28 31 34 29 0d 0a 20 20 20 20 20 20 44  te (14)..      D
96b0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
96c0: 53 69 6e 67 6c 65 20 28 31 35 29 0d 0a 20 20 20  Single (15)..   
96d0: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
96e0: 20 2f 2f 20 53 74 72 69 6e 67 20 28 31 36 29 0d   // String (16).
96f0: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
9700: 6c 75 65 2c 20 2f 2f 20 54 69 6d 65 20 28 31 37  lue, // Time (17
9710: 29 0d 0a 20 20 20 20 20 20 30 2c 20 20 20 20 20  )..      0,     
9720: 20 20 20 20 20 20 20 2f 2f 20 55 49 6e 74 31 36         // UInt16
9730: 20 28 31 38 29 0d 0a 20 20 20 20 20 20 30 2c 20   (18)..      0, 
9740: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 49             // UI
9750: 6e 74 33 32 20 28 31 39 29 0d 0a 20 20 20 20 20  nt32 (19)..     
9760: 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f   0,            /
9770: 2f 20 55 49 6e 74 36 34 20 28 32 30 29 0d 0a 20  / UInt64 (20).. 
9780: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
9790: 20 20 20 2f 2f 20 56 61 72 4e 75 6d 65 72 69 63     // VarNumeric
97a0: 20 28 32 31 29 0d 0a 20 20 20 20 20 20 44 42 4e   (21)..      DBN
97b0: 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 41 6e  ull.Value, // An
97c0: 73 69 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e  siStringFixedLen
97d0: 67 74 68 20 28 32 32 29 0d 0a 20 20 20 20 20 20  gth (22)..      
97e0: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f  DBNull.Value, //
97f0: 20 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67   StringFixedLeng
9800: 74 68 20 28 32 33 29 0d 0a 20 20 20 20 20 20 44  th (23)..      D
9810: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
9820: 3f 3f 20 28 32 34 29 0d 0a 20 20 20 20 20 20 44  ?? (24)..      D
9830: 42 4e 75 6c 6c 2e 56 61 6c 75 65 20 20 2f 2f 20  BNull.Value  // 
9840: 58 6d 6c 20 28 32 35 29 0d 0a 20 20 20 20 7d 3b  Xml (25)..    };
9850: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
9860: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
9870: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 79  etermines the ty
9880: 70 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  pe name for the 
9890: 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 76  given database v
98a0: 61 6c 75 65 20 74 79 70 65 2e 0d 0a 20 20 20 20  alue type...    
98b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
98c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
98d0: 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e 22  ame="connection"
98e0: 3e 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  >The connection 
98f0: 63 6f 6e 74 65 78 74 20 66 6f 72 20 63 75 73 74  context for cust
9900: 6f 6d 20 74 79 70 65 20 6d 61 70 70 69 6e 67 73  om type mappings
9910: 2c 20 69 66 20 61 6e 79 2e 3c 2f 70 61 72 61 6d  , if any.</param
9920: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
9930: 6d 20 6e 61 6d 65 3d 22 64 62 54 79 70 65 22 3e  m name="dbType">
9940: 54 68 65 20 64 61 74 61 62 61 73 65 20 76 61 6c  The database val
9950: 75 65 20 74 79 70 65 2e 3c 2f 70 61 72 61 6d 3e  ue type.</param>
9960: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
9970: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
9980: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
9990: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
99a0: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
99b0: 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ject.</param>.. 
99c0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
99d0: 54 68 65 20 74 79 70 65 20 6e 61 6d 65 20 6f 72  The type name or
99e0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
99f0: 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65   if it cannot be
9a00: 20 64 65 74 65 72 6d 69 6e 65 64 2e 3c 2f 72 65   determined.</re
9a10: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
9a20: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
9a30: 6e 67 20 44 62 54 79 70 65 54 6f 54 79 70 65 4e  ng DbTypeToTypeN
9a40: 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ame(..        SQ
9a50: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
9a60: 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20  onnection,..    
9a70: 20 20 20 20 44 62 54 79 70 65 20 64 62 54 79 70      DbType dbTyp
9a80: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
9a90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9aa0: 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  s flags..       
9ab0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
9ac0: 20 20 20 73 74 72 69 6e 67 20 64 65 66 61 75 6c     string defaul
9ad0: 74 54 79 70 65 4e 61 6d 65 20 3d 20 46 61 6c 6c  tTypeName = Fall
9ae0: 62 61 63 6b 44 65 66 61 75 6c 74 54 79 70 65 4e  backDefaultTypeN
9af0: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
9b00: 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 21  if (connection !
9b10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9b20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9b30: 66 6c 61 67 73 20 7c 3d 20 63 6f 6e 6e 65 63 74  flags |= connect
9b40: 69 6f 6e 2e 46 6c 61 67 73 3b 0d 0a 0d 0a 20 20  ion.Flags;....  
9b50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
9b60: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
9b70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
9b80: 43 6f 6e 6e 65 63 74 69 6f 6e 54 79 70 65 73 29  ConnectionTypes)
9b90: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
9ba0: 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e  tionFlags.UseCon
9bb0: 6e 65 63 74 69 6f 6e 54 79 70 65 73 29 0d 0a 20  nectionTypes).. 
9bc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
9be0: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 20 63 6f  LiteDbTypeMap co
9bf0: 6e 6e 65 63 74 69 6f 6e 54 79 70 65 4e 61 6d 65  nnectionTypeName
9c00: 73 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  s = connection._
9c10: 74 79 70 65 4e 61 6d 65 73 3b 0d 0a 0d 0a 20 20  typeNames;....  
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9c30: 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 54 79 70 65   (connectionType
9c40: 4e 61 6d 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  Names != null)..
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9c70: 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 62 54         SQLiteDbT
9c80: 79 70 65 4d 61 70 70 69 6e 67 20 76 61 6c 75 65  ypeMapping value
9c90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9ca0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
9cb0: 6e 65 63 74 69 6f 6e 54 79 70 65 4e 61 6d 65 73  nectionTypeNames
9cc0: 2e 54 72 79 47 65 74 56 61 6c 75 65 28 64 62 54  .TryGetValue(dbT
9cd0: 79 70 65 2c 20 6f 75 74 20 76 61 6c 75 65 29 29  ype, out value))
9ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9cf0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9d00: 20 76 61 6c 75 65 2e 74 79 70 65 4e 61 6d 65 3b   value.typeName;
9d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9d20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9d30: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
9d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
9d50: 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61  TE: Use the defa
9d60: 75 6c 74 20 64 61 74 61 62 61 73 65 20 74 79 70  ult database typ
9d70: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  e name for the c
9d80: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9db0: 64 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 20  defaultTypeName 
9dc0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 44 65 66  = connection.Def
9dd0: 61 75 6c 74 54 79 70 65 4e 61 6d 65 3b 0d 0a 20  aultTypeName;.. 
9de0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9df0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9e00: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
9e10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9e20: 46 6c 61 67 73 2e 4e 6f 47 6c 6f 62 61 6c 54 79  Flags.NoGlobalTy
9e30: 70 65 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  pes) == SQLiteCo
9e40: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
9e50: 47 6c 6f 62 61 6c 54 79 70 65 73 29 0d 0a 20 20  GlobalTypes)..  
9e60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9e70: 20 64 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65   defaultTypeName
9e80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63  ;....        loc
9e90: 6b 20 28 5f 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  k (_syncRoot).. 
9ea0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9eb0: 20 20 20 20 20 20 69 66 20 28 5f 74 79 70 65 4e        if (_typeN
9ec0: 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
9ee0: 74 79 70 65 4e 61 6d 65 73 20 3d 20 47 65 74 53  typeNames = GetS
9ef0: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 28 29  QLiteDbTypeMap()
9f00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9f10: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
9f20: 70 69 6e 67 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ping value;.... 
9f30: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
9f40: 74 79 70 65 4e 61 6d 65 73 2e 54 72 79 47 65 74  typeNames.TryGet
9f50: 56 61 6c 75 65 28 64 62 54 79 70 65 2c 20 6f 75  Value(dbType, ou
9f60: 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20  t value))..     
9f70: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9f80: 6e 20 76 61 6c 75 65 2e 74 79 70 65 4e 61 6d 65  n value.typeName
9f90: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
9fa0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
9fb0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 57 41 52  _20 && TRACE_WAR
9fc0: 4e 49 4e 47 0d 0a 20 20 20 20 20 20 20 20 69 66  NING..        if
9fd0: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
9fe0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
9ff0: 2e 54 72 61 63 65 57 61 72 6e 69 6e 67 29 20 3d  .TraceWarning) =
a000: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
a010: 6f 6e 46 6c 61 67 73 2e 54 72 61 63 65 57 61 72  onFlags.TraceWar
a020: 6e 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b  ning)..        {
a030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
a040: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74  ace.WriteLine(St
a050: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
a070: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
a080: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
a090: 20 20 20 20 20 20 20 20 20 20 20 22 57 41 52 4e             "WARN
a0a0: 49 4e 47 3a 20 54 79 70 65 20 6d 61 70 70 69 6e  ING: Type mappin
a0b0: 67 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e  g failed, return
a0c0: 69 6e 67 20 64 65 66 61 75 6c 74 20 6e 61 6d 65  ing default name
a0d0: 20 5c 22 7b 30 7d 5c 22 20 66 6f 72 20 74 79 70   \"{0}\" for typ
a0e0: 65 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  e {1}.",..      
a0f0: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
a100: 74 54 79 70 65 4e 61 6d 65 2c 20 64 62 54 79 70  tTypeName, dbTyp
a110: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e));..        }.
a120: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
a130: 20 20 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c     return defaul
a140: 74 54 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  tTypeName;..    
a150: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
a160: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
a170: 43 6f 6e 76 65 72 74 20 61 20 44 62 54 79 70 65  Convert a DbType
a180: 20 74 6f 20 61 20 54 79 70 65 0d 0a 20 20 20 20   to a Type..    
a190: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
a1a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
a1b0: 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 44 62  ame="typ">The Db
a1c0: 54 79 70 65 20 74 6f 20 63 6f 6e 76 65 72 74 20  Type to convert 
a1d0: 66 72 6f 6d 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  from</param>..  
a1e0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
a1f0: 68 65 20 63 6c 6f 73 65 73 74 2d 6d 61 74 63 68  he closest-match
a200: 20 2e 4e 45 54 20 74 79 70 65 3c 2f 72 65 74 75   .NET type</retu
a210: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
a220: 61 6c 20 73 74 61 74 69 63 20 54 79 70 65 20 44  al static Type D
a230: 62 54 79 70 65 54 6f 54 79 70 65 28 44 62 54 79  bTypeToType(DbTy
a240: 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a  pe typ)..    {..
a250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64 62        return _db
a260: 74 79 70 65 54 6f 54 79 70 65 5b 28 69 6e 74 29  typeToType[(int)
a270: 74 79 70 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  typ];..    }....
a280: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
a290: 69 63 20 54 79 70 65 5b 5d 20 5f 64 62 74 79 70  ic Type[] _dbtyp
a2a0: 65 54 6f 54 79 70 65 20 3d 20 7b 0d 0a 20 20 20  eToType = {..   
a2b0: 20 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67     typeof(string
a2c0: 29 2c 20 20 20 2f 2f 20 41 6e 73 69 53 74 72 69  ),   // AnsiStri
a2d0: 6e 67 20 28 30 29 0d 0a 20 20 20 20 20 20 74 79  ng (0)..      ty
a2e0: 70 65 6f 66 28 62 79 74 65 5b 5d 29 2c 20 20 20  peof(byte[]),   
a2f0: 2f 2f 20 42 69 6e 61 72 79 20 28 31 29 0d 0a 20  // Binary (1).. 
a300: 20 20 20 20 20 74 79 70 65 6f 66 28 62 79 74 65       typeof(byte
a310: 29 2c 20 20 20 20 20 2f 2f 20 42 79 74 65 20 28  ),     // Byte (
a320: 32 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  2)..      typeof
a330: 28 62 6f 6f 6c 29 2c 20 20 20 20 20 2f 2f 20 42  (bool),     // B
a340: 6f 6f 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20 20  oolean (3)..    
a350: 20 20 74 79 70 65 6f 66 28 64 65 63 69 6d 61 6c    typeof(decimal
a360: 29 2c 20 20 2f 2f 20 43 75 72 72 65 6e 63 79 20  ),  // Currency 
a370: 28 34 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  (4)..      typeo
a380: 66 28 44 61 74 65 54 69 6d 65 29 2c 20 2f 2f 20  f(DateTime), // 
a390: 44 61 74 65 20 28 35 29 0d 0a 20 20 20 20 20 20  Date (5)..      
a3a0: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
a3b0: 2c 20 2f 2f 20 44 61 74 65 54 69 6d 65 20 28 36  , // DateTime (6
a3c0: 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  )..      typeof(
a3d0: 64 65 63 69 6d 61 6c 29 2c 20 20 2f 2f 20 44 65  decimal),  // De
a3e0: 63 69 6d 61 6c 20 28 37 29 0d 0a 20 20 20 20 20  cimal (7)..     
a3f0: 20 74 79 70 65 6f 66 28 64 6f 75 62 6c 65 29 2c   typeof(double),
a400: 20 20 20 2f 2f 20 44 6f 75 62 6c 65 20 28 38 29     // Double (8)
a410: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 47  ..      typeof(G
a420: 75 69 64 29 2c 20 20 20 20 20 2f 2f 20 47 75 69  uid),     // Gui
a430: 64 20 28 39 29 0d 0a 20 20 20 20 20 20 74 79 70  d (9)..      typ
a440: 65 6f 66 28 49 6e 74 31 36 29 2c 20 20 20 20 2f  eof(Int16),    /
a450: 2f 20 49 6e 74 31 36 20 28 31 30 29 0d 0a 20 20  / Int16 (10)..  
a460: 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74 33 32      typeof(Int32
a470: 29 2c 20 20 20 20 2f 2f 20 49 6e 74 33 32 20 28  ),    // Int32 (
a480: 31 31 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  11)..      typeo
a490: 66 28 49 6e 74 36 34 29 2c 20 20 20 20 2f 2f 20  f(Int64),    // 
a4a0: 49 6e 74 36 34 20 28 31 32 29 0d 0a 20 20 20 20  Int64 (12)..    
a4b0: 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29    typeof(object)
a4c0: 2c 20 20 20 2f 2f 20 4f 62 6a 65 63 74 20 28 31  ,   // Object (1
a4d0: 33 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  3)..      typeof
a4e0: 28 73 62 79 74 65 29 2c 20 20 20 20 2f 2f 20 53  (sbyte),    // S
a4f0: 42 79 74 65 20 28 31 34 29 0d 0a 20 20 20 20 20  Byte (14)..     
a500: 20 74 79 70 65 6f 66 28 66 6c 6f 61 74 29 2c 20   typeof(float), 
a510: 20 20 20 2f 2f 20 53 69 6e 67 6c 65 20 28 31 35     // Single (15
a520: 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  )..      typeof(
a530: 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20 53 74  string),   // St
a540: 72 69 6e 67 20 28 31 36 29 0d 0a 20 20 20 20 20  ring (16)..     
a550: 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65   typeof(DateTime
a560: 29 2c 20 2f 2f 20 54 69 6d 65 20 28 31 37 29 0d  ), // Time (17).
a570: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 55 49  .      typeof(UI
a580: 6e 74 31 36 29 2c 20 20 20 2f 2f 20 55 49 6e 74  nt16),   // UInt
a590: 31 36 20 28 31 38 29 0d 0a 20 20 20 20 20 20 74  16 (18)..      t
a5a0: 79 70 65 6f 66 28 55 49 6e 74 33 32 29 2c 20 20  ypeof(UInt32),  
a5b0: 20 2f 2f 20 55 49 6e 74 33 32 20 28 31 39 29 0d   // UInt32 (19).
a5c0: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 55 49  .      typeof(UI
a5d0: 6e 74 36 34 29 2c 20 20 20 2f 2f 20 55 49 6e 74  nt64),   // UInt
a5e0: 36 34 20 28 32 30 29 0d 0a 20 20 20 20 20 20 74  64 (20)..      t
a5f0: 79 70 65 6f 66 28 64 6f 75 62 6c 65 29 2c 20 20  ypeof(double),  
a600: 20 2f 2f 20 56 61 72 4e 75 6d 65 72 69 63 20 28   // VarNumeric (
a610: 32 31 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  21)..      typeo
a620: 66 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20  f(string),   // 
a630: 41 6e 73 69 53 74 72 69 6e 67 46 69 78 65 64 4c  AnsiStringFixedL
a640: 65 6e 67 74 68 20 28 32 32 29 0d 0a 20 20 20 20  ength (22)..    
a650: 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29    typeof(string)
a660: 2c 20 20 20 2f 2f 20 53 74 72 69 6e 67 46 69 78  ,   // StringFix
a670: 65 64 4c 65 6e 67 74 68 20 28 32 33 29 0d 0a 20  edLength (23).. 
a680: 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72 69       typeof(stri
a690: 6e 67 29 2c 20 20 20 2f 2f 20 3f 3f 20 28 32 34  ng),   // ?? (24
a6a0: 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  )..      typeof(
a6b0: 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20 58 6d  string),   // Xm
a6c0: 6c 20 28 32 35 29 0d 0a 20 20 20 20 7d 3b 0d 0a  l (25)..    };..
a6d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
a6e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 46 6f 72  ry>..    /// For
a6f0: 20 61 20 67 69 76 65 6e 20 74 79 70 65 2c 20 72   a given type, r
a700: 65 74 75 72 6e 20 74 68 65 20 63 6c 6f 73 65 73  eturn the closes
a710: 74 2d 6d 61 74 63 68 20 53 51 4c 69 74 65 20 54  t-match SQLite T
a720: 79 70 65 41 66 66 69 6e 69 74 79 2c 20 77 68 69  ypeAffinity, whi
a730: 63 68 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 61  ch only understa
a740: 6e 64 73 20 61 20 76 65 72 79 20 6c 69 6d 69 74  nds a very limit
a750: 65 64 20 73 75 62 73 65 74 20 6f 66 20 74 79 70  ed subset of typ
a760: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  es...    /// </s
a770: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
a780: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79   <param name="ty
a790: 70 22 3e 54 68 65 20 74 79 70 65 20 74 6f 20 65  p">The type to e
a7a0: 76 61 6c 75 61 74 65 3c 2f 70 61 72 61 6d 3e 0d  valuate</param>.
a7b0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
a7c0: 73 3e 54 68 65 20 53 51 4c 69 74 65 20 74 79 70  s>The SQLite typ
a7d0: 65 20 61 66 66 69 6e 69 74 79 20 66 6f 72 20 74  e affinity for t
a7e0: 68 61 74 20 74 79 70 65 2e 3c 2f 72 65 74 75 72  hat type.</retur
a7f0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
a800: 6c 20 73 74 61 74 69 63 20 54 79 70 65 41 66 66  l static TypeAff
a810: 69 6e 69 74 79 20 54 79 70 65 54 6f 41 66 66 69  inity TypeToAffi
a820: 6e 69 74 79 28 54 79 70 65 20 74 79 70 29 0d 0a  nity(Type typ)..
a830: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 54 79 70      {..      Typ
a840: 65 43 6f 64 65 20 74 63 20 3d 20 54 79 70 65 2e  eCode tc = Type.
a850: 47 65 74 54 79 70 65 43 6f 64 65 28 74 79 70 29  GetTypeCode(typ)
a860: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 74 63 20  ;..      if (tc 
a870: 3d 3d 20 54 79 70 65 43 6f 64 65 2e 4f 62 6a 65  == TypeCode.Obje
a880: 63 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ct)..      {..  
a890: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
a8a0: 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 20   typeof(byte[]) 
a8b0: 7c 7c 20 74 79 70 20 3d 3d 20 74 79 70 65 6f 66  || typ == typeof
a8c0: 28 47 75 69 64 29 29 0d 0a 20 20 20 20 20 20 20  (Guid))..       
a8d0: 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 41 66     return TypeAf
a8e0: 66 69 6e 69 74 79 2e 42 6c 6f 62 3b 0d 0a 20 20  finity.Blob;..  
a8f0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
a900: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
a910: 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3b 0d  eAffinity.Text;.
a920: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
a930: 72 65 74 75 72 6e 20 5f 74 79 70 65 63 6f 64 65  return _typecode
a940: 41 66 66 69 6e 69 74 69 65 73 5b 28 69 6e 74 29  Affinities[(int)
a950: 74 63 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tc];..    }.... 
a960: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
a970: 63 20 54 79 70 65 41 66 66 69 6e 69 74 79 5b 5d  c TypeAffinity[]
a980: 20 5f 74 79 70 65 63 6f 64 65 41 66 66 69 6e 69   _typecodeAffini
a990: 74 69 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20  ties = {..      
a9a0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
a9b0: 6c 2c 20 20 20 20 20 2f 2f 20 45 6d 70 74 79 20  l,     // Empty 
a9c0: 28 30 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41  (0)..      TypeA
a9d0: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 2c 20 20 20  ffinity.Blob,   
a9e0: 20 20 2f 2f 20 4f 62 6a 65 63 74 20 28 31 29 0d    // Object (1).
a9f0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
aa00: 69 74 79 2e 4e 75 6c 6c 2c 20 20 20 20 20 2f 2f  ity.Null,     //
aa10: 20 44 42 4e 75 6c 6c 20 28 32 29 0d 0a 20 20 20   DBNull (2)..   
aa20: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
aa30: 49 6e 74 36 34 2c 20 20 20 20 2f 2f 20 42 6f 6f  Int64,    // Boo
aa40: 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20 20 20 20  lean (3)..      
aa50: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
aa60: 36 34 2c 20 20 20 20 2f 2f 20 43 68 61 72 20 28  64,    // Char (
aa70: 34 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  4)..      TypeAf
aa80: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 20 20  finity.Int64,   
aa90: 20 2f 2f 20 53 42 79 74 65 20 28 35 29 0d 0a 20   // SByte (5).. 
aaa0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
aab0: 79 2e 49 6e 74 36 34 2c 20 20 20 20 2f 2f 20 42  y.Int64,    // B
aac0: 79 74 65 20 28 36 29 0d 0a 20 20 20 20 20 20 54  yte (6)..      T
aad0: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
aae0: 34 2c 20 20 20 20 2f 2f 20 49 6e 74 31 36 20 28  4,    // Int16 (
aaf0: 37 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  7)..      TypeAf
ab00: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 20 20  finity.Int64,   
ab10: 20 2f 2f 20 55 49 6e 74 31 36 20 28 38 29 0d 0a   // UInt16 (8)..
ab20: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
ab30: 74 79 2e 49 6e 74 36 34 2c 20 20 20 20 2f 2f 20  ty.Int64,    // 
ab40: 49 6e 74 33 32 20 28 39 29 0d 0a 20 20 20 20 20  Int32 (9)..     
ab50: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
ab60: 74 36 34 2c 20 20 20 20 2f 2f 20 55 49 6e 74 33  t64,    // UInt3
ab70: 32 20 28 31 30 29 0d 0a 20 20 20 20 20 20 54 79  2 (10)..      Ty
ab80: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
ab90: 2c 20 20 20 20 2f 2f 20 49 6e 74 36 34 20 28 31  ,    // Int64 (1
aba0: 31 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66  1)..      TypeAf
abb0: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 20 20  finity.Int64,   
abc0: 20 2f 2f 20 55 49 6e 74 36 34 20 28 31 32 29 0d   // UInt64 (12).
abd0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
abe0: 69 74 79 2e 44 6f 75 62 6c 65 2c 20 20 20 2f 2f  ity.Double,   //
abf0: 20 53 69 6e 67 6c 65 20 28 31 33 29 0d 0a 20 20   Single (13)..  
ac00: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
ac10: 2e 44 6f 75 62 6c 65 2c 20 20 20 2f 2f 20 44 6f  .Double,   // Do
ac20: 75 62 6c 65 20 28 31 34 29 0d 0a 20 20 20 20 20  uble (14)..     
ac30: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
ac40: 75 62 6c 65 2c 20 20 20 2f 2f 20 44 65 63 69 6d  uble,   // Decim
ac50: 61 6c 20 28 31 35 29 0d 0a 20 20 20 20 20 20 54  al (15)..      T
ac60: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65  ypeAffinity.Date
ac70: 54 69 6d 65 2c 20 2f 2f 20 44 61 74 65 54 69 6d  Time, // DateTim
ac80: 65 20 28 31 36 29 0d 0a 20 20 20 20 20 20 54 79  e (16)..      Ty
ac90: 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c  peAffinity.Null,
aca0: 20 20 20 20 20 2f 2f 20 3f 3f 20 28 31 37 29 0d       // ?? (17).
acb0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
acc0: 69 74 79 2e 54 65 78 74 20 20 20 20 20 20 2f 2f  ity.Text      //
acd0: 20 53 74 72 69 6e 67 20 28 31 38 29 0d 0a 20 20   String (18)..  
ace0: 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20    };....    /// 
acf0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
ad00: 2f 2f 20 42 75 69 6c 64 73 20 61 6e 64 20 72 65  // Builds and re
ad10: 74 75 72 6e 73 20 61 20 6d 61 70 20 63 6f 6e 74  turns a map cont
ad20: 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61 62  aining the datab
ad30: 61 73 65 20 63 6f 6c 75 6d 6e 20 74 79 70 65 73  ase column types
ad40: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 63 6f 67 6e  ..    /// recogn
ad50: 69 7a 65 64 20 62 79 20 74 68 69 73 20 70 72 6f  ized by this pro
ad60: 76 69 64 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  vider...    /// 
ad70: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ad80: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
ad90: 20 20 20 2f 2f 2f 20 41 20 6d 61 70 20 63 6f 6e     /// A map con
ada0: 74 61 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61  taining the data
adb0: 62 61 73 65 20 63 6f 6c 75 6d 6e 20 74 79 70 65  base column type
adc0: 73 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20  s recognized by 
add0: 74 68 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 70 72  this..    /// pr
ade0: 6f 76 69 64 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f  ovider...    ///
adf0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
ae00: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
ae10: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 20  SQLiteDbTypeMap 
ae20: 47 65 74 53 51 4c 69 74 65 44 62 54 79 70 65 4d  GetSQLiteDbTypeM
ae30: 61 70 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ap()..    {..   
ae40: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
ae50: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 28  SQLiteDbTypeMap(
ae60: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
ae70: 4d 61 70 70 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20  Mapping[] {..   
ae80: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
ae90: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
aea0: 28 22 42 49 47 49 4e 54 22 2c 20 44 62 54 79 70  ("BIGINT", DbTyp
aeb0: 65 2e 49 6e 74 36 34 2c 20 66 61 6c 73 65 29 2c  e.Int64, false),
aec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
aed0: 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61  w SQLiteDbTypeMa
aee0: 70 70 69 6e 67 28 22 42 49 47 55 49 4e 54 22 2c  pping("BIGUINT",
aef0: 20 44 62 54 79 70 65 2e 55 49 6e 74 36 34 2c 20   DbType.UInt64, 
af00: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
af10: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
af20: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 42 49  bTypeMapping("BI
af30: 4e 41 52 59 22 2c 20 44 62 54 79 70 65 2e 42 69  NARY", DbType.Bi
af40: 6e 61 72 79 2c 20 66 61 6c 73 65 29 2c 0d 0a 20  nary, false),.. 
af50: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
af60: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69  QLiteDbTypeMappi
af70: 6e 67 28 22 42 49 54 22 2c 20 44 62 54 79 70 65  ng("BIT", DbType
af80: 2e 42 6f 6f 6c 65 61 6e 2c 20 74 72 75 65 29 2c  .Boolean, true),
af90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
afa0: 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61  w SQLiteDbTypeMa
afb0: 70 70 69 6e 67 28 22 42 4c 4f 42 22 2c 20 44 62  pping("BLOB", Db
afc0: 54 79 70 65 2e 42 69 6e 61 72 79 2c 20 74 72 75  Type.Binary, tru
afd0: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
afe0: 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70   new SQLiteDbTyp
aff0: 65 4d 61 70 70 69 6e 67 28 22 42 4f 4f 4c 22 2c  eMapping("BOOL",
b000: 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 2c   DbType.Boolean,
b010: 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20   false),..      
b020: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
b030: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 42  DbTypeMapping("B
b040: 4f 4f 4c 45 41 4e 22 2c 20 44 62 54 79 70 65 2e  OOLEAN", DbType.
b050: 42 6f 6f 6c 65 61 6e 2c 20 66 61 6c 73 65 29 2c  Boolean, false),
b060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
b070: 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61  w SQLiteDbTypeMa
b080: 70 70 69 6e 67 28 22 43 48 41 52 22 2c 20 44 62  pping("CHAR", Db
b090: 54 79 70 65 2e 41 6e 73 69 53 74 72 69 6e 67 46  Type.AnsiStringF
b0a0: 69 78 65 64 4c 65 6e 67 74 68 2c 20 74 72 75 65  ixedLength, true
b0b0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
b0c0: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
b0d0: 4d 61 70 70 69 6e 67 28 22 43 4c 4f 42 22 2c 20  Mapping("CLOB", 
b0e0: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 2c 20 66  DbType.String, f
b0f0: 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  alse),..        
b100: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
b110: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 43 4f 55  TypeMapping("COU
b120: 4e 54 45 52 22 2c 20 44 62 54 79 70 65 2e 49 6e  NTER", DbType.In
b130: 74 36 34 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20  t64, false),..  
b140: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
b150: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
b160: 67 28 22 43 55 52 52 45 4e 43 59 22 2c 20 44 62  g("CURRENCY", Db
b170: 54 79 70 65 2e 44 65 63 69 6d 61 6c 2c 20 66 61  Type.Decimal, fa
b180: 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lse),..         
b190: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54     new SQLiteDbT
b1a0: 79 70 65 4d 61 70 70 69 6e 67 28 22 44 41 54 45  ypeMapping("DATE
b1b0: 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  ", DbType.DateTi
b1c0: 6d 65 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20  me, false),..   
b1d0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
b1e0: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
b1f0: 28 22 44 41 54 45 54 49 4d 45 22 2c 20 44 62 54  ("DATETIME", DbT
b200: 79 70 65 2e 44 61 74 65 54 69 6d 65 2c 20 74 72  ype.DateTime, tr
b210: 75 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ue),..          
b220: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
b230: 70 65 4d 61 70 70 69 6e 67 28 22 44 45 43 49 4d  peMapping("DECIM
b240: 41 4c 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69  AL", DbType.Deci
b250: 6d 61 6c 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20  mal, true),..   
b260: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
b270: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
b280: 28 22 44 4f 55 42 4c 45 22 2c 20 44 62 54 79 70  ("DOUBLE", DbTyp
b290: 65 2e 44 6f 75 62 6c 65 2c 20 66 61 6c 73 65 29  e.Double, false)
b2a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
b2b0: 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d  ew SQLiteDbTypeM
b2c0: 61 70 70 69 6e 67 28 22 46 4c 4f 41 54 22 2c 20  apping("FLOAT", 
b2d0: 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 2c 20 66  DbType.Double, f
b2e0: 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  alse),..        
b2f0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
b300: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 47 45 4e  TypeMapping("GEN
b310: 45 52 41 4c 22 2c 20 44 62 54 79 70 65 2e 42 69  ERAL", DbType.Bi
b320: 6e 61 72 79 2c 20 66 61 6c 73 65 29 2c 0d 0a 20  nary, false),.. 
b330: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
b340: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69  QLiteDbTypeMappi
b350: 6e 67 28 22 47 55 49 44 22 2c 20 44 62 54 79 70  ng("GUID", DbTyp
b360: 65 2e 47 75 69 64 2c 20 66 61 6c 73 65 29 2c 0d  e.Guid, false),.
b370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
b380: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
b390: 70 69 6e 67 28 22 49 44 45 4e 54 49 54 59 22 2c  ping("IDENTITY",
b3a0: 20 44 62 54 79 70 65 2e 49 6e 74 36 34 2c 20 66   DbType.Int64, f
b3b0: 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  alse),..        
b3c0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
b3d0: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 49 4d 41  TypeMapping("IMA
b3e0: 47 45 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61  GE", DbType.Bina
b3f0: 72 79 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20  ry, false),..   
b400: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
b410: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
b420: 28 22 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 49  ("INT", DbType.I
b430: 6e 74 33 32 2c 20 74 72 75 65 29 2c 0d 0a 20 20  nt32, true),..  
b440: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
b450: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
b460: 67 28 22 49 4e 54 38 22 2c 20 44 62 54 79 70 65  g("INT8", DbType
b470: 2e 53 42 79 74 65 2c 20 66 61 6c 73 65 29 2c 0d  .SByte, false),.
b480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
b490: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
b4a0: 70 69 6e 67 28 22 49 4e 54 31 36 22 2c 20 44 62  ping("INT16", Db
b4b0: 54 79 70 65 2e 49 6e 74 31 36 2c 20 66 61 6c 73  Type.Int16, fals
b4c0: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
b4d0: 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70   new SQLiteDbTyp
b4e0: 65 4d 61 70 70 69 6e 67 28 22 49 4e 54 33 32 22  eMapping("INT32"
b4f0: 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 2c 20  , DbType.Int32, 
b500: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
b510: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
b520: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 49 4e  bTypeMapping("IN
b530: 54 36 34 22 2c 20 44 62 54 79 70 65 2e 49 6e 74  T64", DbType.Int
b540: 36 34 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20  64, false),..   
b550: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
b560: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
b570: 28 22 49 4e 54 45 47 45 52 22 2c 20 44 62 54 79  ("INTEGER", DbTy
b580: 70 65 2e 49 6e 74 36 34 2c 20 74 72 75 65 29 2c  pe.Int64, true),
b590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
b5a0: 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61  w SQLiteDbTypeMa
b5b0: 70 70 69 6e 67 28 22 49 4e 54 45 47 45 52 38 22  pping("INTEGER8"
b5c0: 2c 20 44 62 54 79 70 65 2e 53 42 79 74 65 2c 20  , DbType.SByte, 
b5d0: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
b5e0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
b5f0: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 49 4e  bTypeMapping("IN
b600: 54 45 47 45 52 31 36 22 2c 20 44 62 54 79 70 65  TEGER16", DbType
b610: 2e 49 6e 74 31 36 2c 20 66 61 6c 73 65 29 2c 0d  .Int16, false),.
b620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
b630: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
b640: 70 69 6e 67 28 22 49 4e 54 45 47 45 52 33 32 22  ping("INTEGER32"
b650: 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 2c 20  , DbType.Int32, 
b660: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
b670: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
b680: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 49 4e  bTypeMapping("IN
b690: 54 45 47 45 52 36 34 22 2c 20 44 62 54 79 70 65  TEGER64", DbType
b6a0: 2e 49 6e 74 36 34 2c 20 66 61 6c 73 65 29 2c 0d  .Int64, false),.
b6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
b6c0: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
b6d0: 70 69 6e 67 28 22 4c 4f 47 49 43 41 4c 22 2c 20  ping("LOGICAL", 
b6e0: 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 2c 20  DbType.Boolean, 
b6f0: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
b700: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
b710: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 4c 4f  bTypeMapping("LO
b720: 4e 47 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36  NG", DbType.Int6
b730: 34 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20  4, false),..    
b740: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
b750: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28  teDbTypeMapping(
b760: 22 4c 4f 4e 47 43 48 41 52 22 2c 20 44 62 54 79  "LONGCHAR", DbTy
b770: 70 65 2e 53 74 72 69 6e 67 2c 20 66 61 6c 73 65  pe.String, false
b780: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
b790: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
b7a0: 4d 61 70 70 69 6e 67 28 22 4c 4f 4e 47 54 45 58  Mapping("LONGTEX
b7b0: 54 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  T", DbType.Strin
b7c0: 67 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20  g, false),..    
b7d0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
b7e0: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28  teDbTypeMapping(
b7f0: 22 4c 4f 4e 47 56 41 52 43 48 41 52 22 2c 20 44  "LONGVARCHAR", D
b800: 62 54 79 70 65 2e 53 74 72 69 6e 67 2c 20 66 61  bType.String, fa
b810: 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lse),..         
b820: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54     new SQLiteDbT
b830: 79 70 65 4d 61 70 70 69 6e 67 28 22 4d 45 4d 4f  ypeMapping("MEMO
b840: 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  ", DbType.String
b850: 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20  , false),..     
b860: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
b870: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
b880: 4d 4f 4e 45 59 22 2c 20 44 62 54 79 70 65 2e 44  MONEY", DbType.D
b890: 65 63 69 6d 61 6c 2c 20 66 61 6c 73 65 29 2c 0d  ecimal, false),.
b8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
b8b0: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
b8c0: 70 69 6e 67 28 22 4e 43 48 41 52 22 2c 20 44 62  ping("NCHAR", Db
b8d0: 54 79 70 65 2e 53 74 72 69 6e 67 46 69 78 65 64  Type.StringFixed
b8e0: 4c 65 6e 67 74 68 2c 20 74 72 75 65 29 2c 0d 0a  Length, true),..
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
b900: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70  SQLiteDbTypeMapp
b910: 69 6e 67 28 22 4e 4f 54 45 22 2c 20 44 62 54 79  ing("NOTE", DbTy
b920: 70 65 2e 53 74 72 69 6e 67 2c 20 66 61 6c 73 65  pe.String, false
b930: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
b940: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
b950: 4d 61 70 70 69 6e 67 28 22 4e 54 45 58 54 22 2c  Mapping("NTEXT",
b960: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 2c 20   DbType.String, 
b970: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
b980: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
b990: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 4e 55  bTypeMapping("NU
b9a0: 4d 42 45 52 22 2c 20 44 62 54 79 70 65 2e 44 65  MBER", DbType.De
b9b0: 63 69 6d 61 6c 2c 20 66 61 6c 73 65 29 2c 0d 0a  cimal, false),..
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
b9d0: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70  SQLiteDbTypeMapp
b9e0: 69 6e 67 28 22 4e 55 4d 45 52 49 43 22 2c 20 44  ing("NUMERIC", D
b9f0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 2c 20 66  bType.Decimal, f
ba00: 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  alse),..        
ba10: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
ba20: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 4e 56 41  TypeMapping("NVA
ba30: 52 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53  RCHAR", DbType.S
ba40: 74 72 69 6e 67 2c 20 74 72 75 65 29 2c 0d 0a 20  tring, true),.. 
ba50: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
ba60: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69  QLiteDbTypeMappi
ba70: 6e 67 28 22 4f 4c 45 4f 42 4a 45 43 54 22 2c 20  ng("OLEOBJECT", 
ba80: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 2c 20 66  DbType.Binary, f
ba90: 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  alse),..        
baa0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
bab0: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 52 41 57  TypeMapping("RAW
bac0: 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  ", DbType.Binary
bad0: 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20  , false),..     
bae0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
baf0: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
bb00: 52 45 41 4c 22 2c 20 44 62 54 79 70 65 2e 44 6f  REAL", DbType.Do
bb10: 75 62 6c 65 2c 20 74 72 75 65 29 2c 0d 0a 20 20  uble, true),..  
bb20: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
bb30: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
bb40: 67 28 22 53 49 4e 47 4c 45 22 2c 20 44 62 54 79  g("SINGLE", DbTy
bb50: 70 65 2e 53 69 6e 67 6c 65 2c 20 74 72 75 65 29  pe.Single, true)
bb60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
bb70: 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d  ew SQLiteDbTypeM
bb80: 61 70 70 69 6e 67 28 22 53 4d 41 4c 4c 44 41 54  apping("SMALLDAT
bb90: 45 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54  E", DbType.DateT
bba0: 69 6d 65 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20  ime, false),..  
bbb0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
bbc0: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
bbd0: 67 28 22 53 4d 41 4c 4c 49 4e 54 22 2c 20 44 62  g("SMALLINT", Db
bbe0: 54 79 70 65 2e 49 6e 74 31 36 2c 20 74 72 75 65  Type.Int16, true
bbf0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
bc00: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
bc10: 4d 61 70 70 69 6e 67 28 22 53 4d 41 4c 4c 55 49  Mapping("SMALLUI
bc20: 4e 54 22 2c 20 44 62 54 79 70 65 2e 55 49 6e 74  NT", DbType.UInt
bc30: 31 36 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20  16, true),..    
bc40: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
bc50: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28  teDbTypeMapping(
bc60: 22 53 54 52 49 4e 47 22 2c 20 44 62 54 79 70 65  "STRING", DbType
bc70: 2e 53 74 72 69 6e 67 2c 20 66 61 6c 73 65 29 2c  .String, false),
bc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
bc90: 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61  w SQLiteDbTypeMa
bca0: 70 70 69 6e 67 28 22 54 45 58 54 22 2c 20 44 62  pping("TEXT", Db
bcb0: 54 79 70 65 2e 53 74 72 69 6e 67 2c 20 66 61 6c  Type.String, fal
bcc0: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
bcd0: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
bce0: 70 65 4d 61 70 70 69 6e 67 28 22 54 49 4d 45 22  peMapping("TIME"
bcf0: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
bd00: 65 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20  e, false),..    
bd10: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
bd20: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28  teDbTypeMapping(
bd30: 22 54 49 4d 45 53 54 41 4d 50 22 2c 20 44 62 54  "TIMESTAMP", DbT
bd40: 79 70 65 2e 44 61 74 65 54 69 6d 65 2c 20 66 61  ype.DateTime, fa
bd50: 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lse),..         
bd60: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54     new SQLiteDbT
bd70: 79 70 65 4d 61 70 70 69 6e 67 28 22 54 49 4e 59  ypeMapping("TINY
bd80: 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 42 79 74  INT", DbType.Byt
bd90: 65 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20  e, true),..     
bda0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
bdb0: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
bdc0: 54 49 4e 59 53 49 4e 54 22 2c 20 44 62 54 79 70  TINYSINT", DbTyp
bdd0: 65 2e 53 42 79 74 65 2c 20 74 72 75 65 29 2c 0d  e.SByte, true),.
bde0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
bdf0: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
be00: 70 69 6e 67 28 22 55 49 4e 54 22 2c 20 44 62 54  ping("UINT", DbT
be10: 79 70 65 2e 55 49 6e 74 33 32 2c 20 74 72 75 65  ype.UInt32, true
be20: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
be30: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
be40: 4d 61 70 70 69 6e 67 28 22 55 49 4e 54 38 22 2c  Mapping("UINT8",
be50: 20 44 62 54 79 70 65 2e 42 79 74 65 2c 20 66 61   DbType.Byte, fa
be60: 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lse),..         
be70: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54     new SQLiteDbT
be80: 79 70 65 4d 61 70 70 69 6e 67 28 22 55 49 4e 54  ypeMapping("UINT
be90: 31 36 22 2c 20 44 62 54 79 70 65 2e 55 49 6e 74  16", DbType.UInt
bea0: 31 36 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20  16, false),..   
beb0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
bec0: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
bed0: 28 22 55 49 4e 54 33 32 22 2c 20 44 62 54 79 70  ("UINT32", DbTyp
bee0: 65 2e 55 49 6e 74 33 32 2c 20 66 61 6c 73 65 29  e.UInt32, false)
bef0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
bf00: 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d  ew SQLiteDbTypeM
bf10: 61 70 70 69 6e 67 28 22 55 49 4e 54 36 34 22 2c  apping("UINT64",
bf20: 20 44 62 54 79 70 65 2e 55 49 6e 74 36 34 2c 20   DbType.UInt64, 
bf30: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
bf40: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
bf50: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 55 4c  bTypeMapping("UL
bf60: 4f 4e 47 22 2c 20 44 62 54 79 70 65 2e 55 49 6e  ONG", DbType.UIn
bf70: 74 36 34 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20  t64, false),..  
bf80: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
bf90: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
bfa0: 67 28 22 55 4e 49 51 55 45 49 44 45 4e 54 49 46  g("UNIQUEIDENTIF
bfb0: 49 45 52 22 2c 20 44 62 54 79 70 65 2e 47 75 69  IER", DbType.Gui
bfc0: 64 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20  d, true),..     
bfd0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
bfe0: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
bff0: 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52 22  UNSIGNEDINTEGER"
c000: 2c 20 44 62 54 79 70 65 2e 55 49 6e 74 36 34 2c  , DbType.UInt64,
c010: 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20 20 20   true),..       
c020: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
c030: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 55 4e  bTypeMapping("UN
c040: 53 49 47 4e 45 44 49 4e 54 45 47 45 52 38 22 2c  SIGNEDINTEGER8",
c050: 20 44 62 54 79 70 65 2e 42 79 74 65 2c 20 66 61   DbType.Byte, fa
c060: 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lse),..         
c070: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54     new SQLiteDbT
c080: 79 70 65 4d 61 70 70 69 6e 67 28 22 55 4e 53 49  ypeMapping("UNSI
c090: 47 4e 45 44 49 4e 54 45 47 45 52 31 36 22 2c 20  GNEDINTEGER16", 
c0a0: 44 62 54 79 70 65 2e 55 49 6e 74 31 36 2c 20 66  DbType.UInt16, f
c0b0: 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  alse),..        
c0c0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
c0d0: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 55 4e 53  TypeMapping("UNS
c0e0: 49 47 4e 45 44 49 4e 54 45 47 45 52 33 32 22 2c  IGNEDINTEGER32",
c0f0: 20 44 62 54 79 70 65 2e 55 49 6e 74 33 32 2c 20   DbType.UInt32, 
c100: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
c110: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
c120: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 55 4e  bTypeMapping("UN
c130: 53 49 47 4e 45 44 49 4e 54 45 47 45 52 36 34 22  SIGNEDINTEGER64"
c140: 2c 20 44 62 54 79 70 65 2e 55 49 6e 74 36 34 2c  , DbType.UInt64,
c150: 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20   false),..      
c160: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
c170: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 56  DbTypeMapping("V
c180: 41 52 42 49 4e 41 52 59 22 2c 20 44 62 54 79 70  ARBINARY", DbTyp
c190: 65 2e 42 69 6e 61 72 79 2c 20 66 61 6c 73 65 29  e.Binary, false)
c1a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
c1b0: 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d  ew SQLiteDbTypeM
c1c0: 61 70 70 69 6e 67 28 22 56 41 52 43 48 41 52 22  apping("VARCHAR"
c1d0: 2c 20 44 62 54 79 70 65 2e 41 6e 73 69 53 74 72  , DbType.AnsiStr
c1e0: 69 6e 67 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20  ing, true),..   
c1f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
c200: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
c210: 28 22 56 41 52 43 48 41 52 32 22 2c 20 44 62 54  ("VARCHAR2", DbT
c220: 79 70 65 2e 41 6e 73 69 53 74 72 69 6e 67 2c 20  ype.AnsiString, 
c230: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
c240: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
c250: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 59 45  bTypeMapping("YE
c260: 53 4e 4f 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f  SNO", DbType.Boo
c270: 6c 65 61 6e 2c 20 66 61 6c 73 65 29 0d 0a 20 20  lean, false)..  
c280: 20 20 20 20 20 20 7d 29 3b 0d 0a 20 20 20 20 7d        });..    }
c290: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
c2a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 46  mary>..    /// F
c2b0: 6f 72 20 61 20 67 69 76 65 6e 20 74 79 70 65 20  or a given type 
c2c0: 6e 61 6d 65 2c 20 72 65 74 75 72 6e 20 61 20 63  name, return a c
c2d0: 6c 6f 73 65 73 74 2d 6d 61 74 63 68 20 2e 4e 45  losest-match .NE
c2e0: 54 20 74 79 70 65 0d 0a 20 20 20 20 2f 2f 2f 20  T type..    /// 
c2f0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
c300: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
c310: 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 54 68 65  "connection">The
c320: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 74   connection cont
c330: 65 78 74 20 66 6f 72 20 63 75 73 74 6f 6d 20 74  ext for custom t
c340: 79 70 65 20 6d 61 70 70 69 6e 67 73 2c 20 69 66  ype mappings, if
c350: 20 61 6e 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20   any.</param>.. 
c360: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c370: 6d 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61  me="name">The na
c380: 6d 65 20 6f 66 20 74 68 65 20 74 79 70 65 20 74  me of the type t
c390: 6f 20 6d 61 74 63 68 3c 2f 70 61 72 61 6d 3e 0d  o match</param>.
c3a0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
c3b0: 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65  name="flags">The
c3c0: 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
c3d0: 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e  d with the paren
c3e0: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  t connection obj
c3f0: 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ect.</param>..  
c400: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
c410: 68 65 20 2e 4e 45 54 20 44 42 54 79 70 65 20 74  he .NET DBType t
c420: 68 65 20 74 65 78 74 20 65 76 61 6c 75 61 74 65  he text evaluate
c430: 73 20 74 6f 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  s to.</returns>.
c440: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
c450: 61 74 69 63 20 44 62 54 79 70 65 20 54 79 70 65  atic DbType Type
c460: 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 0d 0a 20  NameToDbType(.. 
c470: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
c480: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
c490: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  on,..        str
c4a0: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
c4b0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
c4c0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a  ionFlags flags..
c4d0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
c4e0: 0d 0a 20 20 20 20 20 20 20 20 44 62 54 79 70 65  ..        DbType
c4f0: 20 64 65 66 61 75 6c 74 44 62 54 79 70 65 20 3d   defaultDbType =
c500: 20 46 61 6c 6c 62 61 63 6b 44 65 66 61 75 6c 74   FallbackDefault
c510: 44 62 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20  DbType;....     
c520: 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f     if (connectio
c530: 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
c540: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c550: 20 20 20 66 6c 61 67 73 20 7c 3d 20 63 6f 6e 6e     flags |= conn
c560: 65 63 74 69 6f 6e 2e 46 6c 61 67 73 3b 0d 0a 0d  ection.Flags;...
c570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
c580: 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  ((flags & SQLite
c590: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
c5a0: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 54 79 70  UseConnectionTyp
c5b0: 65 73 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  es) == SQLiteCon
c5c0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55 73 65  nectionFlags.Use
c5d0: 43 6f 6e 6e 65 63 74 69 6f 6e 54 79 70 65 73 29  ConnectionTypes)
c5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
c5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c600: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
c610: 20 63 6f 6e 6e 65 63 74 69 6f 6e 54 79 70 65 4e   connectionTypeN
c620: 61 6d 65 73 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  ames = connectio
c630: 6e 2e 5f 74 79 70 65 4e 61 6d 65 73 3b 0d 0a 0d  n._typeNames;...
c640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c650: 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 54   if (connectionT
c660: 79 70 65 4e 61 6d 65 73 20 21 3d 20 6e 75 6c 6c  ypeNames != null
c670: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c690: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 61            if (na
c6a0: 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
c6e0: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 20  teDbTypeMapping 
c6f0: 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c710: 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e    if (connection
c720: 54 79 70 65 4e 61 6d 65 73 2e 54 72 79 47 65 74  TypeNames.TryGet
c730: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 6f 75 74 20  Value(name, out 
c740: 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c760: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 64 61 74  return value.dat
c790: 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20  aType;..        
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
c7c0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
c7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c7e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
c810: 78 20 3d 20 6e 61 6d 65 2e 49 6e 64 65 78 4f 66  x = name.IndexOf
c820: 28 27 28 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ('(');....      
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c840: 20 20 20 20 20 20 69 66 20 28 28 69 6e 64 65 78        if ((index
c850: 20 3e 20 30 29 20 26 26 0d 0a 20 20 20 20 20 20   > 0) &&..      
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
c880: 74 69 6f 6e 54 79 70 65 4e 61 6d 65 73 2e 54 72  tionTypeNames.Tr
c890: 79 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2e 53  yGetValue(name.S
c8a0: 75 62 73 74 72 69 6e 67 28 30 2c 20 69 6e 64 65  ubstring(0, inde
c8b0: 78 29 2e 54 72 69 6d 45 6e 64 28 29 2c 20 6f 75  x).TrimEnd(), ou
c8c0: 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20  t value))..     
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c900: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c910: 20 76 61 6c 75 65 2e 64 61 74 61 54 79 70 65 3b   value.dataType;
c920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
c940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c950: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
c980: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c990: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
c9b0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
c9c0: 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 74 79  ault database ty
c9d0: 70 65 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65  pe for the conne
c9e0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...        
c9f0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
ca10: 75 6c 74 44 62 54 79 70 65 20 3d 20 63 6f 6e 6e  ultDbType = conn
ca20: 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74 44 62  ection.DefaultDb
ca30: 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Type;..         
ca40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
ca50: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
ca60: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
ca70: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
ca80: 47 6c 6f 62 61 6c 54 79 70 65 73 29 20 3d 3d 20  GlobalTypes) == 
ca90: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
caa0: 46 6c 61 67 73 2e 4e 6f 47 6c 6f 62 61 6c 54 79  Flags.NoGlobalTy
cab0: 70 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  pes)..          
cac0: 20 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74    return default
cad0: 44 62 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20  DbType;....     
cae0: 20 20 20 6c 6f 63 6b 20 28 5f 73 79 6e 63 52 6f     lock (_syncRo
caf0: 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ot)..        {..
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
cb10: 5f 74 79 70 65 4e 61 6d 65 73 20 3d 3d 20 6e 75  _typeNames == nu
cb20: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
cb30: 20 20 20 20 20 5f 74 79 70 65 4e 61 6d 65 73 20       _typeNames 
cb40: 3d 20 47 65 74 53 51 4c 69 74 65 44 62 54 79 70  = GetSQLiteDbTyp
cb50: 65 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  eMap();....     
cb60: 20 20 20 20 20 20 20 69 66 20 28 6e 61 6d 65 20         if (name 
cb70: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
cb80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cb90: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
cba0: 62 54 79 70 65 4d 61 70 70 69 6e 67 20 76 61 6c  bTypeMapping val
cbb0: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
cbc0: 20 20 20 20 20 20 20 69 66 20 28 5f 74 79 70 65         if (_type
cbd0: 4e 61 6d 65 73 2e 54 72 79 47 65 74 56 61 6c 75  Names.TryGetValu
cbe0: 65 28 6e 61 6d 65 2c 20 6f 75 74 20 76 61 6c 75  e(name, out valu
cbf0: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
cc00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
cc20: 72 6e 20 76 61 6c 75 65 2e 64 61 74 61 54 79 70  rn value.dataTyp
cc30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
cc40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
cc50: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc80: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20      int index = 
cc90: 6e 61 6d 65 2e 49 6e 64 65 78 4f 66 28 27 28 27  name.IndexOf('('
cca0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ccb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 69            if ((i
ccc0: 6e 64 65 78 20 3e 20 30 29 20 26 26 0d 0a 20 20  ndex > 0) &&..  
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cce0: 20 20 20 20 20 20 5f 74 79 70 65 4e 61 6d 65 73        _typeNames
ccf0: 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6e 61 6d  .TryGetValue(nam
cd00: 65 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 69  e.Substring(0, i
cd10: 6e 64 65 78 29 2e 54 72 69 6d 45 6e 64 28 29 2c  ndex).TrimEnd(),
cd20: 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20   out value))..  
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
cd60: 75 72 6e 20 76 61 6c 75 65 2e 64 61 74 61 54 79  urn value.dataTy
cd70: 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe;..           
cd80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
cda0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
cdb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
cdc0: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
cdd0: 26 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 0d  & TRACE_WARNING.
cde0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74  .        if (!St
cdf0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
ce00: 74 79 28 6e 61 6d 65 29 20 26 26 0d 0a 20 20 20  ty(name) &&..   
ce10: 20 20 20 20 20 20 20 20 20 28 28 66 6c 61 67 73           ((flags
ce20: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
ce30: 69 6f 6e 46 6c 61 67 73 2e 54 72 61 63 65 57 61  ionFlags.TraceWa
ce40: 72 6e 69 6e 67 29 20 3d 3d 20 53 51 4c 69 74 65  rning) == SQLite
ce50: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
ce60: 54 72 61 63 65 57 61 72 6e 69 6e 67 29 29 0d 0a  TraceWarning))..
ce70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ce80: 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69         Trace.Wri
ce90: 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f  teLine(String.Fo
cea0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
ceb0: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
cec0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
ced0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
cee0: 20 20 20 20 22 57 41 52 4e 49 4e 47 3a 20 54 79      "WARNING: Ty
cef0: 70 65 20 6d 61 70 70 69 6e 67 20 66 61 69 6c 65  pe mapping faile
cf00: 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 64 65 66  d, returning def
cf10: 61 75 6c 74 20 74 79 70 65 20 7b 30 7d 20 66 6f  ault type {0} fo
cf20: 72 20 6e 61 6d 65 20 5c 22 7b 31 7d 5c 22 2e 22  r name \"{1}\"."
cf30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cf40: 20 20 20 64 65 66 61 75 6c 74 44 62 54 79 70 65     defaultDbType
cf50: 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20  , name));..     
cf60: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
cf70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64          return d
cf80: 65 66 61 75 6c 74 44 62 54 79 70 65 3b 0d 0a 20  efaultDbType;.. 
cf90: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
cfa0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 70 72 69 76  gion....    priv
cfb0: 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63  ate static objec
cfc0: 74 20 5f 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65  t _syncRoot = ne
cfd0: 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20  w object();..   
cfe0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
cff0: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 20  SQLiteDbTypeMap 
d000: 5f 74 79 70 65 4e 61 6d 65 73 20 3d 20 6e 75 6c  _typeNames = nul
d010: 6c 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f  l;..  }....  ///
d020: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
d030: 2f 20 53 51 4c 69 74 65 20 68 61 73 20 76 65 72  / SQLite has ver
d040: 79 20 6c 69 6d 69 74 65 64 20 74 79 70 65 73 2c  y limited types,
d050: 20 61 6e 64 20 69 73 20 69 6e 68 65 72 65 6e 74   and is inherent
d060: 6c 79 20 74 65 78 74 2d 62 61 73 65 64 2e 20 20  ly text-based.  
d070: 54 68 65 20 66 69 72 73 74 20 35 20 74 79 70 65  The first 5 type
d080: 73 20 62 65 6c 6f 77 20 72 65 70 72 65 73 65 6e  s below represen
d090: 74 20 74 68 65 20 73 75 6d 20 6f 66 20 61 6c 6c  t the sum of all
d0a0: 20 74 79 70 65 73 20 53 51 4c 69 74 65 0d 0a 20   types SQLite.. 
d0b0: 20 2f 2f 2f 20 75 6e 64 65 72 73 74 61 6e 64 73   /// understands
d0c0: 2e 20 20 54 68 65 20 44 61 74 65 54 69 6d 65 20  .  The DateTime 
d0d0: 65 78 74 65 6e 73 69 6f 6e 20 74 6f 20 74 68 65  extension to the
d0e0: 20 73 70 65 63 20 69 73 20 66 6f 72 20 69 6e 74   spec is for int
d0f0: 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 2e 0d  ernal use only..
d100: 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79  .  /// </summary
d110: 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  >..  public enum
d120: 20 54 79 70 65 41 66 66 69 6e 69 74 79 0d 0a 20   TypeAffinity.. 
d130: 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   {..    /// <sum
d140: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  mary>..    /// N
d150: 6f 74 20 75 73 65 64 0d 0a 20 20 20 20 2f 2f 2f  ot used..    ///
d160: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d170: 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d   Uninitialized =
d180: 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   0,..    /// <su
d190: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
d1a0: 41 6c 6c 20 69 6e 74 65 67 65 72 73 20 69 6e 20  All integers in 
d1b0: 53 51 4c 69 74 65 20 64 65 66 61 75 6c 74 20 74  SQLite default t
d1c0: 6f 20 49 6e 74 36 34 0d 0a 20 20 20 20 2f 2f 2f  o Int64..    ///
d1d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d1e0: 20 49 6e 74 36 34 20 3d 20 31 2c 0d 0a 20 20 20   Int64 = 1,..   
d1f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d200: 20 20 20 20 2f 2f 2f 20 41 6c 6c 20 66 6c 6f 61      /// All floa
d210: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
d220: 72 73 20 69 6e 20 53 51 4c 69 74 65 20 64 65 66  rs in SQLite def
d230: 61 75 6c 74 20 74 6f 20 64 6f 75 62 6c 65 0d 0a  ault to double..
d240: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d250: 79 3e 0d 0a 20 20 20 20 44 6f 75 62 6c 65 20 3d  y>..    Double =
d260: 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   2,..    /// <su
d270: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
d280: 54 68 65 20 64 65 66 61 75 6c 74 20 64 61 74 61  The default data
d290: 20 74 79 70 65 20 6f 66 20 53 51 4c 69 74 65 20   type of SQLite 
d2a0: 69 73 20 74 65 78 74 0d 0a 20 20 20 20 2f 2f 2f  is text..    ///
d2b0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d2c0: 20 54 65 78 74 20 3d 20 33 2c 0d 0a 20 20 20 20   Text = 3,..    
d2d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d2e0: 20 20 20 2f 2f 2f 20 54 79 70 69 63 61 6c 6c 79     /// Typically
d2f0: 20 62 6c 6f 62 20 74 79 70 65 73 20 61 72 65 20   blob types are 
d300: 6f 6e 6c 79 20 73 65 65 6e 20 77 68 65 6e 20 72  only seen when r
d310: 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 61 20 66  eturned from a f
d320: 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  unction..    ///
d330: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d340: 20 42 6c 6f 62 20 3d 20 34 2c 0d 0a 20 20 20 20   Blob = 4,..    
d350: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d360: 20 20 20 2f 2f 2f 20 4e 75 6c 6c 20 74 79 70 65     /// Null type
d370: 73 20 63 61 6e 20 62 65 20 72 65 74 75 72 6e 65  s can be returne
d380: 64 20 66 72 6f 6d 20 66 75 6e 63 74 69 6f 6e 73  d from functions
d390: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
d3a0: 61 72 79 3e 0d 0a 20 20 20 20 4e 75 6c 6c 20 3d  ary>..    Null =
d3b0: 20 35 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   5,..    /// <su
d3c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
d3d0: 55 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  Used internally 
d3e0: 62 79 20 74 68 69 73 20 70 72 6f 76 69 64 65 72  by this provider
d3f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
d400: 61 72 79 3e 0d 0a 20 20 20 20 44 61 74 65 54 69  ary>..    DateTi
d410: 6d 65 20 3d 20 31 30 2c 0d 0a 20 20 20 20 2f 2f  me = 10,..    //
d420: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
d430: 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e   /// Used intern
d440: 61 6c 6c 79 20 62 79 20 74 68 69 73 20 70 72 6f  ally by this pro
d450: 76 69 64 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c  vider..    /// <
d460: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4e  /summary>..    N
d470: 6f 6e 65 20 3d 20 31 31 2c 0d 0a 20 20 7d 0d 0a  one = 11,..  }..
d480: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
d490: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 73 65 20 61  >..  /// These a
d4a0: 72 65 20 74 68 65 20 65 76 65 6e 74 20 74 79 70  re the event typ
d4b0: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
d4c0: 74 68 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73  th the..  /// <s
d4d0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
d4e0: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 48 61  onnectionEventHa
d4f0: 6e 64 6c 65 72 22 20 2f 3e 0d 0a 20 20 2f 2f 2f  ndler" />..  ///
d500: 20 64 65 6c 65 67 61 74 65 20 28 61 6e 64 20 69   delegate (and i
d510: 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ts corresponding
d520: 20 65 76 65 6e 74 29 20 61 6e 64 20 74 68 65 0d   event) and the.
d530: 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66  .  /// <see cref
d540: 3d 22 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  ="ConnectionEven
d550: 74 41 72 67 73 22 20 2f 3e 20 63 6c 61 73 73 2e  tArgs" /> class.
d560: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
d570: 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75  y>..  public enu
d580: 6d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  m SQLiteConnecti
d590: 6f 6e 45 76 65 6e 74 54 79 70 65 0d 0a 20 20 7b  onEventType..  {
d5a0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
d5b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
d5c0: 20 4e 6f 74 20 75 73 65 64 2e 0d 0a 20 20 20 20   Not used...    
d5d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
d5e0: 0d 0a 20 20 20 20 20 20 49 6e 76 61 6c 69 64 20  ..      Invalid 
d5f0: 3d 20 2d 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  = -1,....      /
d600: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
d610: 20 20 20 20 2f 2f 2f 20 4e 6f 74 20 75 73 65 64      /// Not used
d620: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
d630: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 55  ummary>..      U
d640: 6e 6b 6e 6f 77 6e 20 3d 20 30 2c 0d 0a 0d 0a 20  nknown = 0,.... 
d650: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
d660: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
d670: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
d680: 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 0d 0a 20  being opened... 
d690: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
d6a0: 72 79 3e 0d 0a 20 20 20 20 20 20 4f 70 65 6e 69  ry>..      Openi
d6b0: 6e 67 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20  ng = 1,....     
d6c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d6d0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f        /// The co
d6e0: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string 
d6f0: 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 2e  has been parsed.
d700: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
d710: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 43 6f  mmary>..      Co
d720: 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 20 3d  nnectionString =
d730: 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f   2,....      ///
d740: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
d750: 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63    /// The connec
d760: 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e  tion was opened.
d770: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
d780: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4f 70  mmary>..      Op
d790: 65 6e 65 64 20 3d 20 33 2c 0d 0a 0d 0a 20 20 20  ened = 3,....   
d7a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
d7b0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
d7c0: 3c 73 65 65 20 63 72 65 66 3d 22 43 68 61 6e 67  <see cref="Chang
d7d0: 65 44 61 74 61 62 61 73 65 22 20 2f 3e 20 6d 65  eDatabase" /> me
d7e0: 74 68 6f 64 20 77 61 73 20 63 61 6c 6c 65 64 20  thod was called 
d7f0: 6f 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  on the..      //
d800: 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  / connection... 
d810: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
d820: 72 79 3e 0d 0a 20 20 20 20 20 20 43 68 61 6e 67  ry>..      Chang
d830: 65 44 61 74 61 62 61 73 65 20 3d 20 34 2c 0d 0a  eDatabase = 4,..
d840: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
d850: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
d860: 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   A transaction w
d870: 61 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  as created using
d880: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
d890: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
d8a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 65  mmary>..      Ne
d8b0: 77 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 35  wTransaction = 5
d8c0: 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
d8d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
d8e0: 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69  /// The connecti
d8f0: 6f 6e 20 77 61 73 20 65 6e 6c 69 73 74 65 64 20  on was enlisted 
d900: 69 6e 74 6f 20 61 20 74 72 61 6e 73 61 63 74 69  into a transacti
d910: 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  on...      /// <
d920: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
d930: 20 45 6e 6c 69 73 74 54 72 61 6e 73 61 63 74 69   EnlistTransacti
d940: 6f 6e 20 3d 20 36 2c 0d 0a 0d 0a 20 20 20 20 20  on = 6,....     
d950: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d960: 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 6f 6d 6d        /// A comm
d970: 61 6e 64 20 77 61 73 20 63 72 65 61 74 65 64 20  and was created 
d980: 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
d990: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  tion...      ///
d9a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d9b0: 20 20 20 4e 65 77 43 6f 6d 6d 61 6e 64 20 3d 20     NewCommand = 
d9c0: 37 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  7,....      /// 
d9d0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d9e0: 20 2f 2f 2f 20 41 20 64 61 74 61 20 72 65 61 64   /// A data read
d9f0: 65 72 20 77 61 73 20 63 72 65 61 74 65 64 20 75  er was created u
da00: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
da10: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ion...      /// 
da20: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
da30: 20 20 4e 65 77 44 61 74 61 52 65 61 64 65 72 20    NewDataReader 
da40: 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  = 8,....      //
da50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
da60: 20 20 20 2f 2f 2f 20 41 6e 20 69 6e 73 74 61 6e     /// An instan
da70: 63 65 20 6f 66 20 61 20 3c 73 65 65 20 63 72 65  ce of a <see cre
da80: 66 3d 22 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  f="CriticalHandl
da90: 65 22 20 2f 3e 20 64 65 72 69 76 65 64 20 63 6c  e" /> derived cl
daa0: 61 73 73 20 68 61 73 0d 0a 20 20 20 20 20 20 2f  ass has..      /
dab0: 2f 2f 20 62 65 65 6e 20 63 72 65 61 74 65 64 20  // been created 
dac0: 74 6f 20 77 72 61 70 20 61 20 6e 61 74 69 76 65  to wrap a native
dad0: 20 72 65 73 6f 75 72 63 65 2e 0d 0a 20 20 20 20   resource...    
dae0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
daf0: 0d 0a 20 20 20 20 20 20 4e 65 77 43 72 69 74 69  ..      NewCriti
db00: 63 61 6c 48 61 6e 64 6c 65 20 3d 20 39 2c 0d 0a  calHandle = 9,..
db10: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
db20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
db30: 20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   The connection 
db40: 69 73 20 62 65 69 6e 67 20 63 6c 6f 73 65 64 2e  is being closed.
db50: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
db60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 43 6c  mmary>..      Cl
db70: 6f 73 69 6e 67 20 3d 20 31 30 2c 0d 0a 0d 0a 20  osing = 10,.... 
db80: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
db90: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
dba0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73  e connection was
dbb0: 20 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20   closed...      
dbc0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
dbd0: 20 20 20 20 20 20 43 6c 6f 73 65 64 20 3d 20 31        Closed = 1
dbe0: 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  1,....      /// 
dbf0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
dc00: 20 2f 2f 2f 20 41 20 63 6f 6d 6d 61 6e 64 20 69   /// A command i
dc10: 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64  s being disposed
dc20: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
dc30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 44  ummary>..      D
dc40: 69 73 70 6f 73 69 6e 67 43 6f 6d 6d 61 6e 64 20  isposingCommand 
dc50: 3d 20 31 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  = 12,....      /
dc60: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
dc70: 20 20 20 20 2f 2f 2f 20 41 20 64 61 74 61 20 72      /// A data r
dc80: 65 61 64 65 72 20 69 73 20 62 65 69 6e 67 20 64  eader is being d
dc90: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
dca0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
dcb0: 20 20 20 20 20 20 44 69 73 70 6f 73 69 6e 67 44        DisposingD
dcc0: 61 74 61 52 65 61 64 65 72 20 3d 20 31 33 2c 0d  ataReader = 13,.
dcd0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
dce0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
dcf0: 2f 20 41 20 64 61 74 61 20 72 65 61 64 65 72 20  / A data reader 
dd00: 69 73 20 62 65 69 6e 67 20 63 6c 6f 73 65 64 2e  is being closed.
dd10: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
dd20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 43 6c  mmary>..      Cl
dd30: 6f 73 69 6e 67 44 61 74 61 52 65 61 64 65 72 20  osingDataReader 
dd40: 3d 20 31 34 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f  = 14..  }....  /
dd50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
dd60: 2f 2f 2f 20 54 68 69 73 20 69 6d 70 6c 65 6d 65  /// This impleme
dd70: 6e 74 61 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74  ntation of SQLit
dd80: 65 20 66 6f 72 20 41 44 4f 2e 4e 45 54 20 63 61  e for ADO.NET ca
dd90: 6e 20 70 72 6f 63 65 73 73 20 64 61 74 65 2f 74  n process date/t
dda0: 69 6d 65 20 66 69 65 6c 64 73 20 69 6e 0d 0a 20  ime fields in.. 
ddb0: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 73 20 69   /// databases i
ddc0: 6e 20 6f 6e 65 20 6f 66 20 73 69 78 20 66 6f 72  n one of six for
ddd0: 6d 61 74 73 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  mats...  /// </s
dde0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c  ummary>..  /// <
ddf0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 2f 2f 2f 20  remarks>..  /// 
de00: 49 53 4f 38 36 30 31 20 66 6f 72 6d 61 74 20 69  ISO8601 format i
de10: 73 20 6d 6f 72 65 20 63 6f 6d 70 61 74 69 62 6c  s more compatibl
de20: 65 2c 20 72 65 61 64 61 62 6c 65 2c 20 66 75 6c  e, readable, ful
de30: 6c 79 2d 70 72 6f 63 65 73 73 61 62 6c 65 2c 20  ly-processable, 
de40: 62 75 74 20 6c 65 73 73 0d 0a 20 20 2f 2f 2f 20  but less..  /// 
de50: 61 63 63 75 72 61 74 65 20 61 73 20 69 74 20 64  accurate as it d
de60: 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20  oes not provide 
de70: 74 69 6d 65 20 64 6f 77 6e 20 74 6f 20 66 72 61  time down to fra
de80: 63 74 69 6f 6e 73 20 6f 66 20 61 20 73 65 63 6f  ctions of a seco
de90: 6e 64 2e 0d 0a 20 20 2f 2f 2f 20 4a 75 6c 69 61  nd...  /// Julia
dea0: 6e 44 61 79 20 69 73 20 74 68 65 20 6e 75 6d 65  nDay is the nume
deb0: 72 69 63 20 66 6f 72 6d 61 74 20 74 68 65 20 53  ric format the S
dec0: 51 4c 69 74 65 20 75 73 65 73 20 69 6e 74 65 72  QLite uses inter
ded0: 6e 61 6c 6c 79 20 61 6e 64 20 69 73 20 61 72 67  nally and is arg
dee0: 75 61 62 6c 79 0d 0a 20 20 2f 2f 2f 20 74 68 65  uably..  /// the
def0: 20 6d 6f 73 74 20 63 6f 6d 70 61 74 69 62 6c 65   most compatible
df00: 20 77 69 74 68 20 33 72 64 20 70 61 72 74 79 20   with 3rd party 
df10: 74 6f 6f 6c 73 2e 20 20 49 74 20 69 73 20 6e 6f  tools.  It is no
df20: 74 20 72 65 61 64 61 62 6c 65 20 61 73 20 74 65  t readable as te
df30: 78 74 0d 0a 20 20 2f 2f 2f 20 77 69 74 68 6f 75  xt..  /// withou
df40: 74 20 70 6f 73 74 2d 70 72 6f 63 65 73 73 69 6e  t post-processin
df50: 67 2e 20 20 54 69 63 6b 73 20 6c 65 73 73 20 63  g.  Ticks less c
df60: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 33  ompatible with 3
df70: 72 64 20 70 61 72 74 79 20 74 6f 6f 6c 73 20 74  rd party tools t
df80: 68 61 74 0d 0a 20 20 2f 2f 2f 20 71 75 65 72 79  hat..  /// query
df90: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 61   the database, a
dfa0: 6e 64 20 72 65 6e 64 65 72 73 20 74 68 65 20 44  nd renders the D
dfb0: 61 74 65 54 69 6d 65 20 66 69 65 6c 64 20 75 6e  ateTime field un
dfc0: 72 65 61 64 61 62 6c 65 20 61 73 20 74 65 78 74  readable as text
dfd0: 0d 0a 20 20 2f 2f 2f 20 77 69 74 68 6f 75 74 20  ..  /// without 
dfe0: 70 6f 73 74 2d 70 72 6f 63 65 73 73 69 6e 67 2e  post-processing.
dff0: 20 20 55 6e 69 78 45 70 6f 63 68 20 69 73 20 6d    UnixEpoch is m
e000: 6f 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 20 77  ore compatible w
e010: 69 74 68 20 55 6e 69 78 20 73 79 73 74 65 6d 73  ith Unix systems
e020: 2e 0d 0a 20 20 2f 2f 2f 20 49 6e 76 61 72 69 61  ...  /// Invaria
e030: 6e 74 43 75 6c 74 75 72 65 20 61 6c 6c 6f 77 73  ntCulture allows
e040: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
e050: 66 6f 72 6d 61 74 20 66 6f 72 20 74 68 65 20 69  format for the i
e060: 6e 76 61 72 69 61 6e 74 20 63 75 6c 74 75 72 65  nvariant culture
e070: 0d 0a 20 20 2f 2f 2f 20 66 6f 72 6d 61 74 20 74  ..  /// format t
e080: 6f 20 62 65 20 75 73 65 64 20 61 6e 64 20 69 73  o be used and is
e090: 20 68 75 6d 61 6e 20 72 65 61 64 61 62 6c 65 2e   human readable.
e0a0: 20 20 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65    CurrentCulture
e0b0: 20 61 6c 6c 6f 77 73 20 74 68 65 0d 0a 20 20 2f   allows the..  /
e0c0: 2f 2f 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f  // configured fo
e0d0: 72 6d 61 74 20 66 6f 72 20 74 68 65 20 63 75 72  rmat for the cur
e0e0: 72 65 6e 74 20 63 75 6c 74 75 72 65 20 74 6f 20  rent culture to 
e0f0: 62 65 20 75 73 65 64 20 61 6e 64 20 69 73 20 61  be used and is a
e100: 6c 73 6f 20 68 75 6d 61 6e 0d 0a 20 20 2f 2f 2f  lso human..  ///
e110: 20 72 65 61 64 61 62 6c 65 2e 0d 0a 20 20 2f 2f   readable...  //
e120: 2f 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 70 72 65  /..  /// The pre
e130: 66 65 72 72 65 64 20 6f 72 64 65 72 20 6f 66 20  ferred order of 
e140: 63 68 6f 6f 73 69 6e 67 20 61 20 44 61 74 65 54  choosing a DateT
e150: 69 6d 65 20 66 6f 72 6d 61 74 20 69 73 20 4a 75  ime format is Ju
e160: 6c 69 61 6e 44 61 79 2c 20 49 53 4f 38 36 30 31  lianDay, ISO8601
e170: 2c 0d 0a 20 20 2f 2f 2f 20 61 6e 64 20 74 68 65  ,..  /// and the
e180: 6e 20 54 69 63 6b 73 2e 20 20 54 69 63 6b 73 20  n Ticks.  Ticks 
e190: 69 73 20 6d 61 69 6e 6c 79 20 70 72 65 73 65 6e  is mainly presen
e1a0: 74 20 66 6f 72 20 6c 65 67 61 63 79 20 63 6f 64  t for legacy cod
e1b0: 65 20 73 75 70 70 6f 72 74 2e 0d 0a 20 20 2f 2f  e support...  //
e1c0: 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  / </remarks>..  
e1d0: 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c 69  public enum SQLi
e1e0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 0d 0a 20  teDateFormats.. 
e1f0: 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   {..    /// <sum
e200: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55  mary>..    /// U
e210: 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
e220: 44 61 74 65 54 69 6d 65 2e 54 69 63 6b 73 2e 20  DateTime.Ticks. 
e230: 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e   This value is n
e240: 6f 74 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 61  ot recommended a
e250: 6e 64 20 69 73 20 6e 6f 74 20 77 65 6c 6c 20 73  nd is not well s
e260: 75 70 70 6f 72 74 65 64 20 77 69 74 68 20 4c 49  upported with LI
e270: 4e 51 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  NQ...    /// </s
e280: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 54 69 63  ummary>..    Tic
e290: 6b 73 20 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f  ks = 0,..    ///
e2a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
e2b0: 2f 2f 2f 20 55 73 65 20 74 68 65 20 49 53 4f 2d  /// Use the ISO-
e2c0: 38 36 30 31 20 66 6f 72 6d 61 74 2e 20 20 55 73  8601 format.  Us
e2d0: 65 73 20 74 68 65 20 22 79 79 79 79 2d 4d 4d 2d  es the "yyyy-MM-
e2e0: 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46  dd HH:mm:ss.FFFF
e2f0: 46 46 46 4b 22 20 66 6f 72 6d 61 74 20 66 6f 72  FFFK" format for
e300: 20 55 54 43 20 44 61 74 65 54 69 6d 65 20 76 61   UTC DateTime va
e310: 6c 75 65 73 20 61 6e 64 0d 0a 20 20 20 20 2f 2f  lues and..    //
e320: 2f 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48  / "yyyy-MM-dd HH
e330: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22 20  :mm:ss.FFFFFFF" 
e340: 66 6f 72 6d 61 74 20 66 6f 72 20 6c 6f 63 61 6c  format for local
e350: 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 73   DateTime values
e360: 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  )...    /// </su
e370: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 49 53 4f 38  mmary>..    ISO8
e380: 36 30 31 20 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f  601 = 1,..    //
e390: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
e3a0: 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 72 76 61   /// The interva
e3b0: 6c 20 6f 66 20 74 69 6d 65 20 69 6e 20 64 61 79  l of time in day
e3c0: 73 20 61 6e 64 20 66 72 61 63 74 69 6f 6e 73 20  s and fractions 
e3d0: 6f 66 20 61 20 64 61 79 20 73 69 6e 63 65 20 4a  of a day since J
e3e0: 61 6e 75 61 72 79 20 31 2c 20 34 37 31 33 20 42  anuary 1, 4713 B
e3f0: 43 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  C...    /// </su
e400: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4a 75 6c 69  mmary>..    Juli
e410: 61 6e 44 61 79 20 3d 20 32 2c 0d 0a 20 20 20 20  anDay = 2,..    
e420: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e430: 20 20 20 2f 2f 2f 20 54 68 65 20 77 68 6f 6c 65     /// The whole
e440: 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e   number of secon
e450: 64 73 20 73 69 6e 63 65 20 74 68 65 20 55 6e 69  ds since the Uni
e460: 78 20 65 70 6f 63 68 20 28 4a 61 6e 75 61 72 79  x epoch (January
e470: 20 31 2c 20 31 39 37 30 29 2e 0d 0a 20 20 20 20   1, 1970)...    
e480: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
e490: 20 20 20 20 55 6e 69 78 45 70 6f 63 68 20 3d 20      UnixEpoch = 
e4a0: 33 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  3,..    /// <sum
e4b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
e4c0: 6e 79 20 63 75 6c 74 75 72 65 2d 69 6e 64 65 70  ny culture-indep
e4d0: 65 6e 64 65 6e 74 20 73 74 72 69 6e 67 20 76 61  endent string va
e4e0: 6c 75 65 20 74 68 61 74 20 74 68 65 20 2e 4e 45  lue that the .NE
e4f0: 54 20 46 72 61 6d 65 77 6f 72 6b 20 63 61 6e 20  T Framework can 
e500: 69 6e 74 65 72 70 72 65 74 20 61 73 20 61 20 76  interpret as a v
e510: 61 6c 69 64 20 44 61 74 65 54 69 6d 65 2e 0d 0a  alid DateTime...
e520: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e530: 79 3e 0d 0a 20 20 20 20 49 6e 76 61 72 69 61 6e  y>..    Invarian
e540: 74 43 75 6c 74 75 72 65 20 3d 20 34 2c 0d 0a 20  tCulture = 4,.. 
e550: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e560: 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e 79 20 73 74  ..    /// Any st
e570: 72 69 6e 67 20 76 61 6c 75 65 20 74 68 61 74 20  ring value that 
e580: 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
e590: 72 6b 20 63 61 6e 20 69 6e 74 65 72 70 72 65 74  rk can interpret
e5a0: 20 61 73 20 61 20 76 61 6c 69 64 20 44 61 74 65   as a valid Date
e5b0: 54 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20 63  Time using the c
e5c0: 75 72 72 65 6e 74 20 63 75 6c 74 75 72 65 2e 0d  urrent culture..
e5d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e5e0: 72 79 3e 0d 0a 20 20 20 20 43 75 72 72 65 6e 74  ry>..    Current
e5f0: 43 75 6c 74 75 72 65 20 3d 20 35 2c 0d 0a 20 20  Culture = 5,..  
e600: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
e610: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66  .    /// The def
e620: 61 75 6c 74 20 66 6f 72 6d 61 74 20 66 6f 72 20  ault format for 
e630: 74 68 69 73 20 70 72 6f 76 69 64 65 72 2e 0d 0a  this provider...
e640: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e650: 79 3e 0d 0a 20 20 20 20 44 65 66 61 75 6c 74 20  y>..    Default 
e660: 3d 20 49 53 4f 38 36 30 31 0d 0a 20 20 7d 0d 0a  = ISO8601..  }..
e670: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
e680: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 65 6e  >..  /// This en
e690: 75 6d 20 64 65 74 65 72 6d 69 6e 65 73 20 68 6f  um determines ho
e6a0: 77 20 53 51 4c 69 74 65 20 74 72 65 61 74 73 20  w SQLite treats 
e6b0: 69 74 73 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  its journal file
e6c0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  ...  /// </summa
e6d0: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65 6d 61  ry>..  /// <rema
e6e0: 72 6b 73 3e 0d 0a 20 20 2f 2f 2f 20 42 79 20 64  rks>..  /// By d
e6f0: 65 66 61 75 6c 74 20 53 51 4c 69 74 65 20 77 69  efault SQLite wi
e700: 6c 6c 20 63 72 65 61 74 65 20 61 6e 64 20 64 65  ll create and de
e710: 6c 65 74 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  lete the journal
e720: 20 66 69 6c 65 20 77 68 65 6e 20 6e 65 65 64 65   file when neede
e730: 64 20 64 75 72 69 6e 67 20 61 20 74 72 61 6e 73  d during a trans
e740: 61 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 48  action...  /// H
e750: 6f 77 65 76 65 72 2c 20 66 6f 72 20 73 6f 6d 65  owever, for some
e760: 20 63 6f 6d 70 75 74 65 72 73 20 72 75 6e 6e 69   computers runni
e770: 6e 67 20 63 65 72 74 61 69 6e 20 66 69 6c 65 73  ng certain files
e780: 79 73 74 65 6d 20 6d 6f 6e 69 74 6f 72 69 6e 67  ystem monitoring
e790: 20 74 6f 6f 6c 73 2c 20 74 68 65 20 72 61 70 69   tools, the rapi
e7a0: 64 0d 0a 20 20 2f 2f 2f 20 63 72 65 61 74 69 6f  d..  /// creatio
e7b0: 6e 20 61 6e 64 20 64 65 6c 65 74 69 6f 6e 20 6f  n and deletion o
e7c0: 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  f the journal fi
e7d0: 6c 65 20 63 61 6e 20 63 61 75 73 65 20 74 68 6f  le can cause tho
e7e0: 73 65 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 66  se programs to f
e7f0: 61 69 6c 2c 20 6f 72 20 74 6f 20 69 6e 74 65 72  ail, or to inter
e800: 66 65 72 65 20 77 69 74 68 20 53 51 4c 69 74 65  fere with SQLite
e810: 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20 20 2f 2f 2f 20  ...  ///..  /// 
e820: 49 66 20 61 20 70 72 6f 67 72 61 6d 20 6f 72 20  If a program or 
e830: 76 69 72 75 73 20 73 63 61 6e 6e 65 72 20 69 73  virus scanner is
e840: 20 69 6e 74 65 72 66 65 72 69 6e 67 20 77 69 74   interfering wit
e850: 68 20 53 51 4c 69 74 65 27 73 20 6a 6f 75 72 6e  h SQLite's journ
e860: 61 6c 20 66 69 6c 65 2c 20 79 6f 75 20 6d 61 79  al file, you may
e870: 20 72 65 63 65 69 76 65 20 65 72 72 6f 72 73 20   receive errors 
e880: 6c 69 6b 65 20 22 75 6e 61 62 6c 65 20 74 6f 20  like "unable to 
e890: 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69  open database fi
e8a0: 6c 65 22 0d 0a 20 20 2f 2f 2f 20 77 68 65 6e 20  le"..  /// when 
e8b0: 73 74 61 72 74 69 6e 67 20 61 20 74 72 61 6e 73  starting a trans
e8c0: 61 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 69 73  action.  If this
e8d0: 20 69 73 20 68 61 70 70 65 6e 69 6e 67 2c 20 79   is happening, y
e8e0: 6f 75 20 6d 61 79 20 77 61 6e 74 20 74 6f 20 63  ou may want to c
e8f0: 68 61 6e 67 65 20 74 68 65 20 64 65 66 61 75 6c  hange the defaul
e900: 74 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 74  t journal mode t
e910: 6f 20 50 65 72 73 69 73 74 2e 0d 0a 20 20 2f 2f  o Persist...  //
e920: 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  / </remarks>..  
e930: 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c 69  public enum SQLi
e940: 74 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 45 6e 75  teJournalModeEnu
e950: 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20  m..  {..    /// 
e960: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
e970: 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 6d  // The default m
e980: 6f 64 65 2c 20 74 68 69 73 20 63 61 75 73 65 73  ode, this causes
e990: 20 53 51 4c 69 74 65 20 74 6f 20 75 73 65 20 74   SQLite to use t
e9a0: 68 65 20 65 78 69 73 74 69 6e 67 20 6a 6f 75 72  he existing jour
e9b0: 6e 61 6c 69 6e 67 20 6d 6f 64 65 20 66 6f 72 20  naling mode for 
e9c0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20  the database... 
e9d0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
e9e0: 3e 0d 0a 20 20 20 20 44 65 66 61 75 6c 74 20 3d  >..    Default =
e9f0: 20 2d 31 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   -1,..    /// <s
ea00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
ea10: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 63 72 65   SQLite will cre
ea20: 61 74 65 20 61 6e 64 20 64 65 73 74 72 6f 79 20  ate and destroy 
ea30: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
ea40: 20 61 73 2d 6e 65 65 64 65 64 2e 0d 0a 20 20 20   as-needed...   
ea50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ea60: 0a 20 20 20 20 44 65 6c 65 74 65 20 3d 20 30 2c  .    Delete = 0,
ea70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
ea80: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 57 68 65  ry>..    /// Whe
ea90: 6e 20 74 68 69 73 20 69 73 20 73 65 74 2c 20 53  n this is set, S
eaa0: 51 4c 69 74 65 20 77 69 6c 6c 20 6b 65 65 70 20  QLite will keep 
eab0: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
eac0: 20 65 76 65 6e 20 61 66 74 65 72 20 61 20 74 72   even after a tr
ead0: 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 63 6f  ansaction has co
eae0: 6d 70 6c 65 74 65 64 2e 20 20 49 74 27 73 20 63  mpleted.  It's c
eaf0: 6f 6e 74 65 6e 74 73 20 77 69 6c 6c 20 62 65 20  ontents will be 
eb00: 65 72 61 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f  erased,..    ///
eb10: 20 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c   and the journal
eb20: 20 72 65 2d 75 73 65 64 20 61 73 20 6f 66 74 65   re-used as ofte
eb30: 6e 20 61 73 20 6e 65 65 64 65 64 2e 20 20 49 66  n as needed.  If
eb40: 20 69 74 20 69 73 20 64 65 6c 65 74 65 64 2c 20   it is deleted, 
eb50: 69 74 20 77 69 6c 6c 20 62 65 20 72 65 63 72 65  it will be recre
eb60: 61 74 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  ated the next ti
eb70: 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65 64 2e  me it is needed.
eb80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
eb90: 61 72 79 3e 0d 0a 20 20 20 20 50 65 72 73 69 73  ary>..    Persis
eba0: 74 20 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f 2f 20  t = 1,..    /// 
ebb0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
ebc0: 2f 2f 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 64  // This option d
ebd0: 69 73 61 62 6c 65 73 20 74 68 65 20 72 6f 6c 6c  isables the roll
ebe0: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 65 6e 74  back journal ent
ebf0: 69 72 65 6c 79 2e 20 20 49 6e 74 65 72 72 75 70  irely.  Interrup
ec00: 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
ec10: 20 6f 72 20 61 20 70 72 6f 67 72 61 6d 20 63 72   or a program cr
ec20: 61 73 68 20 63 61 6e 20 63 61 75 73 65 20 64 61  ash can cause da
ec30: 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20  tabase..    /// 
ec40: 63 6f 72 72 75 70 74 69 6f 6e 20 69 6e 20 74 68  corruption in th
ec50: 69 73 20 6d 6f 64 65 21 0d 0a 20 20 20 20 2f 2f  is mode!..    //
ec60: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
ec70: 20 20 4f 66 66 20 3d 20 32 2c 0d 0a 20 20 20 20    Off = 2,..    
ec80: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
ec90: 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 77 69     /// SQLite wi
eca0: 6c 6c 20 74 72 75 6e 63 61 74 65 20 74 68 65 20  ll truncate the 
ecb0: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 74 6f 20  journal file to 
ecc0: 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 69 6e 73 74  zero-length inst
ecd0: 65 61 64 20 6f 66 20 64 65 6c 65 74 69 6e 67 20  ead of deleting 
ece0: 69 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  it...    /// </s
ecf0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 54 72 75  ummary>..    Tru
ed00: 6e 63 61 74 65 20 3d 20 33 2c 0d 0a 20 20 20 20  ncate = 3,..    
ed10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
ed20: 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 77 69     /// SQLite wi
ed30: 6c 6c 20 73 74 6f 72 65 20 74 68 65 20 6a 6f 75  ll store the jou
ed40: 72 6e 61 6c 20 69 6e 20 76 6f 6c 61 74 69 6c 65  rnal in volatile
ed50: 20 52 41 4d 2e 20 20 54 68 69 73 20 73 61 76 65   RAM.  This save
ed60: 73 20 64 69 73 6b 20 49 2f 4f 20 62 75 74 20 61  s disk I/O but a
ed70: 74 20 74 68 65 20 65 78 70 65 6e 73 65 20 6f 66  t the expense of
ed80: 20 64 61 74 61 62 61 73 65 20 73 61 66 65 74 79   database safety
ed90: 20 61 6e 64 20 69 6e 74 65 67 72 69 74 79 2e 0d   and integrity..
eda0: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20  .    /// If the 
edb0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 75 73 69 6e  application usin
edc0: 67 20 53 51 4c 69 74 65 20 63 72 61 73 68 65 73  g SQLite crashes
edd0: 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
ede0: 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
edf0: 77 68 65 6e 20 74 68 65 20 4d 45 4d 4f 52 59 20  when the MEMORY 
ee00: 6a 6f 75 72 6e 61 6c 69 6e 67 20 6d 6f 64 65 20  journaling mode 
ee10: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
ee20: 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61  ..    /// databa
ee30: 73 65 20 66 69 6c 65 20 77 69 6c 6c 20 76 65 72  se file will ver
ee40: 79 20 6c 69 6b 65 6c 79 20 67 6f 20 63 6f 72 72  y likely go corr
ee50: 75 70 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  upt...    /// </
ee60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4d 65  summary>..    Me
ee70: 6d 6f 72 79 20 3d 20 34 2c 0d 0a 20 20 20 20 2f  mory = 4,..    /
ee80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
ee90: 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 75 73 65    /// SQLite use
eea0: 73 20 61 20 77 72 69 74 65 2d 61 68 65 61 64 20  s a write-ahead 
eeb0: 6c 6f 67 20 69 6e 73 74 65 61 64 20 6f 66 20 61  log instead of a
eec0: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
eed0: 6c 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  l to implement t
eee0: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 54 68  ransactions.  Th
eef0: 65 20 57 41 4c 20 6a 6f 75 72 6e 61 6c 69 6e 67  e WAL journaling
ef00: 20 6d 6f 64 65 20 69 73 20 70 65 72 73 69 73 74   mode is persist
ef10: 65 6e 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 61 66  ent;..    /// af
ef20: 74 65 72 20 62 65 69 6e 67 20 73 65 74 20 69 74  ter being set it
ef30: 20 73 74 61 79 73 20 69 6e 20 65 66 66 65 63 74   stays in effect
ef40: 20 61 63 72 6f 73 73 20 6d 75 6c 74 69 70 6c 65   across multiple
ef50: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ef60: 74 69 6f 6e 73 20 61 6e 64 20 61 66 74 65 72 20  tions and after 
ef70: 63 6c 6f 73 69 6e 67 20 61 6e 64 20 72 65 6f 70  closing and reop
ef80: 65 6e 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  ening the databa
ef90: 73 65 2e 20 41 20 64 61 74 61 62 61 73 65 0d 0a  se. A database..
efa0: 20 20 20 20 2f 2f 2f 20 69 6e 20 57 41 4c 20 6a      /// in WAL j
efb0: 6f 75 72 6e 61 6c 69 6e 67 20 6d 6f 64 65 20 63  ournaling mode c
efc0: 61 6e 20 6f 6e 6c 79 20 62 65 20 61 63 63 65 73  an only be acces
efd0: 73 65 64 20 62 79 20 53 51 4c 69 74 65 20 76 65  sed by SQLite ve
efe0: 72 73 69 6f 6e 20 33 2e 37 2e 30 20 6f 72 20 6c  rsion 3.7.0 or l
eff0: 61 74 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ater...    /// <
f000: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 57  /summary>..    W
f010: 61 6c 20 3d 20 35 0d 0a 20 20 7d 0d 0a 0d 0a 20  al = 5..  }.... 
f020: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f030: 20 20 2f 2f 2f 20 50 6f 73 73 69 62 6c 65 20 76    /// Possible v
f040: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 22 73  alues for the "s
f050: 79 6e 63 68 72 6f 6e 6f 75 73 22 20 64 61 74 61  ynchronous" data
f060: 62 61 73 65 20 73 65 74 74 69 6e 67 2e 20 20 54  base setting.  T
f070: 68 69 73 20 73 65 74 74 69 6e 67 20 64 65 74 65  his setting dete
f080: 72 6d 69 6e 65 73 0d 0a 20 20 2f 2f 2f 20 68 6f  rmines..  /// ho
f090: 77 20 6f 66 74 65 6e 20 74 68 65 20 64 61 74 61  w often the data
f0a0: 62 61 73 65 20 65 6e 67 69 6e 65 20 63 61 6c 6c  base engine call
f0b0: 73 20 74 68 65 20 78 53 79 6e 63 20 6d 65 74 68  s the xSync meth
f0c0: 6f 64 20 6f 66 20 74 68 65 20 56 46 53 2e 0d 0a  od of the VFS...
f0d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
f0e0: 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e 75  ..  internal enu
f0f0: 6d 20 53 51 4c 69 74 65 53 79 6e 63 68 72 6f 6e  m SQLiteSynchron
f100: 6f 75 73 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20  ousEnum..  {..  
f110: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
f120: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 55 73 65  >..      /// Use
f130: 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73 79   the default "sy
f140: 6e 63 68 72 6f 6e 6f 75 73 22 20 64 61 74 61 62  nchronous" datab
f150: 61 73 65 20 73 65 74 74 69 6e 67 2e 20 20 43 75  ase setting.  Cu
f160: 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 73 68  rrently, this sh
f170: 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 2f  ould be..      /
f180: 2f 2f 20 74 68 65 20 73 61 6d 65 20 61 73 20 75  // the same as u
f190: 73 69 6e 67 20 74 68 65 20 46 55 4c 4c 20 6d 6f  sing the FULL mo
f1a0: 64 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  de...      /// <
f1b0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
f1c0: 20 44 65 66 61 75 6c 74 20 3d 20 2d 31 2c 0d 0a   Default = -1,..
f1d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
f1e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
f1f0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
f200: 67 69 6e 65 20 63 6f 6e 74 69 6e 75 65 73 20 77  gine continues w
f210: 69 74 68 6f 75 74 20 73 79 6e 63 69 6e 67 20 61  ithout syncing a
f220: 73 20 73 6f 6f 6e 20 61 73 20 69 74 20 68 61 73  s soon as it has
f230: 20 68 61 6e 64 65 64 0d 0a 20 20 20 20 20 20 2f   handed..      /
f240: 2f 2f 20 64 61 74 61 20 6f 66 66 20 74 6f 20 74  // data off to t
f250: 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  he operating sys
f260: 74 65 6d 2e 20 20 49 66 20 74 68 65 20 61 70 70  tem.  If the app
f270: 6c 69 63 61 74 69 6f 6e 20 72 75 6e 6e 69 6e 67  lication running
f280: 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 2f   SQLite..      /
f290: 2f 2f 20 63 72 61 73 68 65 73 2c 20 74 68 65 20  // crashes, the 
f2a0: 64 61 74 61 20 77 69 6c 6c 20 62 65 20 73 61 66  data will be saf
f2b0: 65 2c 20 62 75 74 20 74 68 65 20 64 61 74 61 62  e, but the datab
f2c0: 61 73 65 20 6d 69 67 68 74 20 62 65 63 6f 6d 65  ase might become
f2d0: 20 63 6f 72 72 75 70 74 65 64 0d 0a 20 20 20 20   corrupted..    
f2e0: 20 20 2f 2f 2f 20 69 66 20 74 68 65 20 6f 70 65    /// if the ope
f2f0: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 63 72  rating system cr
f300: 61 73 68 65 73 20 6f 72 20 74 68 65 20 63 6f 6d  ashes or the com
f310: 70 75 74 65 72 20 6c 6f 73 65 73 20 70 6f 77 65  puter loses powe
f320: 72 20 62 65 66 6f 72 65 20 74 68 61 74 0d 0a 20  r before that.. 
f330: 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 68 61       /// data ha
f340: 73 20 62 65 65 6e 20 77 72 69 74 74 65 6e 20 74  s been written t
f350: 6f 20 74 68 65 20 64 69 73 6b 20 73 75 72 66 61  o the disk surfa
f360: 63 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ce...      /// <
f370: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
f380: 20 4f 66 66 20 3d 20 30 2c 0d 0a 0d 0a 20 20 20   Off = 0,....   
f390: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
f3a0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
f3b0: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20  database engine 
f3c0: 77 69 6c 6c 20 73 74 69 6c 6c 20 73 79 6e 63 20  will still sync 
f3d0: 61 74 20 74 68 65 20 6d 6f 73 74 20 63 72 69 74  at the most crit
f3e0: 69 63 61 6c 20 6d 6f 6d 65 6e 74 73 2c 20 62 75  ical moments, bu
f3f0: 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6c 65 73  t..      /// les
f400: 73 20 6f 66 74 65 6e 20 74 68 61 6e 20 69 6e 20  s often than in 
f410: 46 55 4c 4c 20 6d 6f 64 65 2e 20 20 54 68 65 72  FULL mode.  Ther
f420: 65 20 69 73 20 61 20 76 65 72 79 20 73 6d 61 6c  e is a very smal
f430: 6c 20 28 74 68 6f 75 67 68 20 6e 6f 6e 2d 7a 65  l (though non-ze
f440: 72 6f 29 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 63  ro)..      /// c
f450: 68 61 6e 63 65 20 74 68 61 74 20 61 20 70 6f 77  hance that a pow
f460: 65 72 20 66 61 69 6c 75 72 65 20 61 74 20 6a 75  er failure at ju
f470: 73 74 20 74 68 65 20 77 72 6f 6e 67 20 74 69 6d  st the wrong tim
f480: 65 20 63 6f 75 6c 64 20 63 6f 72 72 75 70 74 20  e could corrupt 
f490: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 64  the..      /// d
f4a0: 61 74 61 62 61 73 65 20 69 6e 20 4e 4f 52 4d 41  atabase in NORMA
f4b0: 4c 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 2f  L mode...      /
f4c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
f4d0: 20 20 20 20 20 4e 6f 72 6d 61 6c 20 3d 20 31 2c       Normal = 1,
f4e0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
f4f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
f500: 2f 2f 20 54 68 65 20 64 61 74 61 62 61 73 65 20  // The database 
f510: 65 6e 67 69 6e 65 20 77 69 6c 6c 20 75 73 65 20  engine will use 
f520: 74 68 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64  the xSync method
f530: 20 6f 66 20 74 68 65 20 56 46 53 20 74 6f 20 65   of the VFS to e
f540: 6e 73 75 72 65 20 74 68 61 74 0d 0a 20 20 20 20  nsure that..    
f550: 20 20 2f 2f 2f 20 61 6c 6c 20 63 6f 6e 74 65 6e    /// all conten
f560: 74 20 69 73 20 73 61 66 65 6c 79 20 77 72 69 74  t is safely writ
f570: 74 65 6e 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ten to the disk 
f580: 73 75 72 66 61 63 65 20 70 72 69 6f 72 20 74 6f  surface prior to
f590: 20 63 6f 6e 74 69 6e 75 69 6e 67 2e 0d 0a 20 20   continuing...  
f5a0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 65 6e 73      /// This ens
f5b0: 75 72 65 73 20 74 68 61 74 20 61 6e 20 6f 70 65  ures that an ope
f5c0: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 63 72  rating system cr
f5d0: 61 73 68 20 6f 72 20 70 6f 77 65 72 20 66 61 69  ash or power fai
f5e0: 6c 75 72 65 20 77 69 6c 6c 20 6e 6f 74 0d 0a 20  lure will not.. 
f5f0: 20 20 20 20 20 2f 2f 2f 20 63 6f 72 72 75 70 74       /// corrupt
f600: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
f610: 46 55 4c 4c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  FULL synchronous
f620: 20 69 73 20 76 65 72 79 20 73 61 66 65 2c 20 62   is very safe, b
f630: 75 74 20 69 74 20 69 73 20 61 6c 73 6f 0d 0a 20  ut it is also.. 
f640: 20 20 20 20 20 2f 2f 2f 20 73 6c 6f 77 65 72 2e       /// slower.
f650: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
f660: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 46 75  mmary>..      Fu
f670: 6c 6c 20 3d 20 32 0d 0a 20 20 7d 0d 0a 0d 0a 20  ll = 2..  }.... 
f680: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f690: 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75 65 73    /// The reques
f6a0: 74 65 64 20 63 6f 6d 6d 61 6e 64 20 65 78 65 63  ted command exec
f6b0: 75 74 69 6f 6e 20 74 79 70 65 2e 20 20 54 68 69  ution type.  Thi
f6c0: 73 20 63 6f 6e 74 72 6f 6c 73 20 77 68 69 63 68  s controls which
f6d0: 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 0d 0a   method of the..
f6e0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
f6f0: 22 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 22 20  "SQLiteCommand" 
f700: 2f 3e 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  /> object will b
f710: 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 2f 2f 2f  e called...  ///
f720: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70   </summary>..  p
f730: 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c 69 74  ublic enum SQLit
f740: 65 45 78 65 63 75 74 65 54 79 70 65 0d 0a 20 20  eExecuteType..  
f750: 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  {..      /// <su
f760: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
f770: 2f 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 4e  / Do nothing.  N
f780: 6f 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 62 65  o method will be
f790: 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20   called...      
f7a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f7b0: 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 2c 0d        None = 0,.
f7c0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
f7d0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
f7e0: 2f 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 69 73  / The command is
f7f0: 20 6e 6f 74 20 65 78 70 65 63 74 65 64 20 74 6f   not expected to
f800: 20 72 65 74 75 72 6e 20 61 20 72 65 73 75 6c 74   return a result
f810: 20 2d 4f 52 2d 20 74 68 65 20 72 65 73 75 6c 74   -OR- the result
f820: 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 2f   is not..      /
f830: 2f 2f 20 6e 65 65 64 65 64 2e 20 20 54 68 65 20  // needed.  The 
f840: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
f850: 65 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65  eCommand.Execute
f860: 4e 6f 6e 51 75 65 72 79 28 29 22 20 2f 3e 20 6f  NonQuery()" /> o
f870: 72 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  r..      /// <se
f880: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
f890: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e  mmand.ExecuteNon
f8a0: 51 75 65 72 79 28 43 6f 6d 6d 61 6e 64 42 65 68  Query(CommandBeh
f8b0: 61 76 69 6f 72 29 22 20 2f 3e 20 20 6d 65 74 68  avior)" />  meth
f8c0: 6f 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 77 69  od..      /// wi
f8d0: 6c 6c 20 62 65 20 63 61 6c 6c 65 64 2e 0d 0a 20  ll be called... 
f8e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
f8f0: 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 6e 51 75  ry>..      NonQu
f900: 65 72 79 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20  ery = 1,....    
f910: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
f920: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  .      /// The c
f930: 6f 6d 6d 61 6e 64 20 69 73 20 65 78 70 65 63 74  ommand is expect
f940: 65 64 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  ed to return a s
f950: 63 61 6c 61 72 20 72 65 73 75 6c 74 20 2d 4f 52  calar result -OR
f960: 2d 20 74 68 65 20 72 65 73 75 6c 74 20 73 68 6f  - the result sho
f970: 75 6c 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 62  uld..      /// b
f980: 65 20 6c 69 6d 69 74 65 64 20 74 6f 20 61 20 73  e limited to a s
f990: 63 61 6c 61 72 20 72 65 73 75 6c 74 2e 20 20 54  calar result.  T
f9a0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
f9b0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 45 78 65 63  LiteCommand.Exec
f9c0: 75 74 65 53 63 61 6c 61 72 28 29 22 20 2f 3e 0d  uteScalar()" />.
f9d0: 0a 20 20 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73  .      /// or <s
f9e0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
f9f0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63  ommand.ExecuteSc
fa00: 61 6c 61 72 28 43 6f 6d 6d 61 6e 64 42 65 68 61  alar(CommandBeha
fa10: 76 69 6f 72 29 22 20 2f 3e 20 6d 65 74 68 6f 64  vior)" /> method
fa20: 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 2f 2f 2f   will..      ///
fa30: 20 62 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20   be called...   
fa40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
fa50: 3e 0d 0a 20 20 20 20 20 20 53 63 61 6c 61 72 20  >..      Scalar 
fa60: 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  = 2,....      //
fa70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
fa80: 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6d 6d 61     /// The comma
fa90: 6e 64 20 69 73 20 65 78 70 65 63 74 65 64 20 74  nd is expected t
faa0: 6f 20 72 65 74 75 72 6e 20 3c 73 65 65 20 63 72  o return <see cr
fab0: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
fac0: 61 64 65 72 22 20 2f 3e 20 72 65 73 75 6c 74 2e  ader" /> result.
fad0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
fae0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
faf0: 65 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65  eCommand.Execute
fb00: 52 65 61 64 65 72 28 29 22 20 2f 3e 20 6f 72 0d  Reader()" /> or.
fb10: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  .      /// <see 
fb20: 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6d 6d  cref="SQLiteComm
fb30: 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65  and.ExecuteReade
fb40: 72 28 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f  r(CommandBehavio
fb50: 72 29 22 20 2f 3e 20 6d 65 74 68 6f 64 20 77 69  r)" /> method wi
fb60: 6c 6c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 62 65  ll..      /// be
fb70: 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20   called...      
fb80: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
fb90: 20 20 20 20 20 20 52 65 61 64 65 72 20 3d 20 33        Reader = 3
fba0: 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
fbb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
fbc0: 2f 2f 2f 20 55 73 65 20 74 68 65 20 64 65 66 61  /// Use the defa
fbd0: 75 6c 74 20 63 6f 6d 6d 61 6e 64 20 65 78 65 63  ult command exec
fbe0: 75 74 69 6f 6e 20 74 79 70 65 2e 20 20 55 73 69  ution type.  Usi
fbf0: 6e 67 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  ng this value is
fc00: 20 74 68 65 20 73 61 6d 65 0d 0a 20 20 20 20 20   the same..     
fc10: 20 2f 2f 2f 20 61 73 20 75 73 69 6e 67 20 74 68   /// as using th
fc20: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
fc30: 69 74 65 45 78 65 63 75 74 65 54 79 70 65 2e 4e  iteExecuteType.N
fc40: 6f 6e 51 75 65 72 79 22 20 2f 3e 20 76 61 6c 75  onQuery" /> valu
fc50: 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  e...      /// </
fc60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
fc70: 44 65 66 61 75 6c 74 20 3d 20 4e 6f 6e 51 75 65  Default = NonQue
fc80: 72 79 20 2f 2a 20 54 4f 44 4f 3a 20 47 6f 6f 64  ry /* TODO: Good
fc90: 20 64 65 66 61 75 6c 74 3f 20 2a 2f 0d 0a 20 20   default? */..  
fca0: 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }....  /// <summ
fcb0: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20  ary>..  /// The 
fcc0: 61 63 74 69 6f 6e 20 63 6f 64 65 20 72 65 73 70  action code resp
fcd0: 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20  onsible for the 
fce0: 63 75 72 72 65 6e 74 20 63 61 6c 6c 20 69 6e 74  current call int
fcf0: 6f 20 74 68 65 20 61 75 74 68 6f 72 69 7a 65 72  o the authorizer
fd00: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  ...  /// </summa
fd10: 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e  ry>..  public en
fd20: 75 6d 20 53 51 4c 69 74 65 41 75 74 68 6f 72 69  um SQLiteAuthori
fd30: 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 0d 0a 20  zerActionCode.. 
fd40: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73   {..      /// <s
fd50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
fd60: 2f 2f 20 4e 6f 20 61 63 74 69 6f 6e 20 69 73 20  // No action is 
fd70: 62 65 69 6e 67 20 70 65 72 66 6f 72 6d 65 64 2e  being performed.
fd80: 20 20 54 68 69 73 20 76 61 6c 75 65 20 73 68 6f    This value sho
fd90: 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20  uld not be used 
fda0: 66 72 6f 6d 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  from..      /// 
fdb0: 65 78 74 65 72 6e 61 6c 20 63 6f 64 65 2e 0d 0a  external code...
fdc0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
fdd0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 6e 65  ary>..      None
fde0: 20 3d 20 2d 31 2c 0d 0a 0d 0a 20 20 20 20 20 20   = -1,....      
fdf0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fe00: 20 20 20 20 20 2f 2f 2f 20 4e 6f 20 6c 6f 6e 67       /// No long
fe10: 65 72 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  er used...      
fe20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
fe30: 20 20 20 20 20 20 43 6f 70 79 20 3d 20 30 2c 0d        Copy = 0,.
fe40: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
fe50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
fe60: 2f 20 41 6e 20 69 6e 64 65 78 20 77 69 6c 6c 20  / An index will 
fe70: 62 65 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  be created.  The
fe80: 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63   action-specific
fe90: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
fea0: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 69 6e  he..      /// in
feb0: 64 65 78 20 6e 61 6d 65 20 61 6e 64 20 74 68 65  dex name and the
fec0: 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20   table name...  
fed0: 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 2f      ///..      /
fee0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
fef0: 20 20 20 20 20 43 72 65 61 74 65 49 6e 64 65 78       CreateIndex
ff00: 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 1,....      /
ff10: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
ff20: 20 20 20 20 2f 2f 2f 20 41 20 74 61 62 6c 65 20      /// A table 
ff30: 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64 2e  will be created.
ff40: 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65    The action-spe
ff50: 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73 20  cific arguments 
ff60: 61 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  are the..      /
ff70: 2f 2f 20 74 61 62 6c 65 20 6e 61 6d 65 20 61 6e  // table name an
ff80: 64 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d  d a null value..
ff90: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
ffa0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 43 72 65  mary>..      Cre
ffb0: 61 74 65 54 61 62 6c 65 20 3d 20 32 2c 0d 0a 0d  ateTable = 2,...
ffc0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
ffd0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
ffe0: 41 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  A temporary inde
fff0: 78 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65  x will be create
10000 64 2e 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73  d.  The action-s
10010 70 65 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74  pecific argument
10020 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72 65  s..      /// are
10030 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 20   the index name 
10040 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 6e 61  and the table na
10050 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  me...      /// <
10060 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
10070 20 43 72 65 61 74 65 54 65 6d 70 49 6e 64 65 78   CreateTempIndex
10080 20 3d 20 33 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 3,....      /
10090 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
100a0 20 20 20 20 2f 2f 2f 20 41 20 74 65 6d 70 6f 72      /// A tempor
100b0 61 72 79 20 74 61 62 6c 65 20 77 69 6c 6c 20 62  ary table will b
100c0 65 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  e created.  The 
100d0 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  action-specific 
100e0 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20  arguments..     
100f0 20 2f 2f 2f 20 61 72 65 20 74 68 65 20 74 61 62   /// are the tab
10100 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 20 6e 75  le name and a nu
10110 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  ll value...     
10120 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10130 0a 20 20 20 20 20 20 43 72 65 61 74 65 54 65 6d  .      CreateTem
10140 70 54 61 62 6c 65 20 3d 20 34 2c 0d 0a 0d 0a 20  pTable = 4,.... 
10150 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
10160 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  y>..      /// A 
10170 74 65 6d 70 6f 72 61 72 79 20 74 72 69 67 67 65  temporary trigge
10180 72 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65  r will be create
10190 64 2e 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73  d.  The action-s
101a0 70 65 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74  pecific argument
101b0 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72 65  s..      /// are
101c0 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d   the trigger nam
101d0 65 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  e and the table 
101e0 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  name...      ///
101f0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10200 20 20 20 43 72 65 61 74 65 54 65 6d 70 54 72 69     CreateTempTri
10210 67 67 65 72 20 3d 20 35 2c 0d 0a 0d 0a 20 20 20  gger = 5,....   
10220 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10230 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 74 65  ..      /// A te
10240 6d 70 6f 72 61 72 79 20 76 69 65 77 20 77 69 6c  mporary view wil
10250 6c 20 62 65 20 63 72 65 61 74 65 64 2e 20 20 54  l be created.  T
10260 68 65 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66  he action-specif
10270 69 63 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ic arguments are
10280 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20  ..      /// the 
10290 76 69 65 77 20 6e 61 6d 65 20 61 6e 64 20 61 20  view name and a 
102a0 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20 20 20  null value...   
102b0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
102c0 3e 0d 0a 20 20 20 20 20 20 43 72 65 61 74 65 54  >..      CreateT
102d0 65 6d 70 56 69 65 77 20 3d 20 36 2c 0d 0a 0d 0a  empView = 6,....
102e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
102f0 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41  ry>..      /// A
10300 20 74 72 69 67 67 65 72 20 77 69 6c 6c 20 62 65   trigger will be
10310 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 61   created.  The a
10320 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61  ction-specific a
10330 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65  rguments are the
10340 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 72 69 67  ..      /// trig
10350 67 65 72 20 6e 61 6d 65 20 61 6e 64 20 74 68 65  ger name and the
10360 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20   table name...  
10370 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10380 79 3e 0d 0a 20 20 20 20 20 20 43 72 65 61 74 65  y>..      Create
10390 54 72 69 67 67 65 72 20 3d 20 37 2c 0d 0a 0d 0a  Trigger = 7,....
103a0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
103b0 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41  ry>..      /// A
103c0 20 76 69 65 77 20 77 69 6c 6c 20 62 65 20 63 72   view will be cr
103d0 65 61 74 65 64 2e 20 20 54 68 65 20 61 63 74 69  eated.  The acti
103e0 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67 75  on-specific argu
103f0 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 76 69  ments are the vi
10400 65 77 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6e 61  ew..      /// na
10410 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76 61  me and a null va
10420 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  lue...      /// 
10430 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10440 20 20 43 72 65 61 74 65 56 69 65 77 20 3d 20 38    CreateView = 8
10450 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
10460 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10470 2f 2f 2f 20 41 20 44 45 4c 45 54 45 20 73 74 61  /// A DELETE sta
10480 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20 65  tement will be e
10490 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 61 63  xecuted.  The ac
104a0 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72  tion-specific ar
104b0 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20 2f  guments..      /
104c0 2f 2f 20 61 72 65 20 74 68 65 20 74 61 62 6c 65  // are the table
104d0 20 6e 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c   name and a null
104e0 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f   value...      /
104f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10500 20 20 20 20 20 44 65 6c 65 74 65 20 3d 20 39 2c       Delete = 9,
10510 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
10520 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
10530 2f 2f 20 41 6e 20 69 6e 64 65 78 20 77 69 6c 6c  // An index will
10540 20 62 65 20 64 72 6f 70 70 65 64 2e 20 20 54 68   be dropped.  Th
10550 65 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69  e action-specifi
10560 63 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  c arguments are 
10570 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 69  the..      /// i
10580 6e 64 65 78 20 6e 61 6d 65 20 61 6e 64 20 74 68  ndex name and th
10590 65 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20  e table name... 
105a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
105b0 72 79 3e 0d 0a 20 20 20 20 20 20 44 72 6f 70 49  ry>..      DropI
105c0 6e 64 65 78 20 3d 20 31 30 2c 0d 0a 0d 0a 20 20  ndex = 10,....  
105d0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
105e0 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 74  >..      /// A t
105f0 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 64 72 6f  able will be dro
10600 70 70 65 64 2e 20 20 54 68 65 20 61 63 74 69 6f  pped.  The actio
10610 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67 75 6d  n-specific argum
10620 65 6e 74 73 20 61 72 65 20 74 68 65 20 74 61 62  ents are the tab
10630 6c 65 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6e  les..      /// n
10640 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76  ame and a null v
10650 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  alue...      ///
10660 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10670 20 20 20 44 72 6f 70 54 61 62 6c 65 20 3d 20 31     DropTable = 1
10680 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  1,....      /// 
10690 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
106a0 20 2f 2f 2f 20 41 20 74 65 6d 70 6f 72 61 72 79   /// A temporary
106b0 20 69 6e 64 65 78 20 77 69 6c 6c 20 62 65 20 64   index will be d
106c0 72 6f 70 70 65 64 2e 20 20 54 68 65 20 61 63 74  ropped.  The act
106d0 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67  ion-specific arg
106e0 75 6d 65 6e 74 73 20 61 72 65 0d 0a 20 20 20 20  uments are..    
106f0 20 20 2f 2f 2f 20 74 68 65 20 69 6e 64 65 78 20    /// the index 
10700 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 74 61 62  name and the tab
10710 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...      
10720 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10730 20 20 20 20 20 20 44 72 6f 70 54 65 6d 70 49 6e        DropTempIn
10740 64 65 78 20 3d 20 31 32 2c 0d 0a 0d 0a 20 20 20  dex = 12,....   
10750 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10760 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 74 65  ..      /// A te
10770 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 77 69  mporary table wi
10780 6c 6c 20 62 65 20 64 72 6f 70 70 65 64 2e 20 20  ll be dropped.  
10790 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65 63 69  The action-speci
107a0 66 69 63 20 61 72 67 75 6d 65 6e 74 73 20 61 72  fic arguments ar
107b0 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  e..      /// the
107c0 20 74 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20   table name and 
107d0 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20  a null value... 
107e0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
107f0 72 79 3e 0d 0a 20 20 20 20 20 20 44 72 6f 70 54  ry>..      DropT
10800 65 6d 70 54 61 62 6c 65 20 3d 20 31 33 2c 0d 0a  empTable = 13,..
10810 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
10820 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
10830 20 41 20 74 65 6d 70 6f 72 61 72 79 20 74 72 69   A temporary tri
10840 67 67 65 72 20 77 69 6c 6c 20 62 65 20 64 72 6f  gger will be dro
10850 70 70 65 64 2e 20 20 54 68 65 20 61 63 74 69 6f  pped.  The actio
10860 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67 75 6d  n-specific argum
10870 65 6e 74 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ents..      /// 
10880 61 72 65 20 74 68 65 20 74 72 69 67 67 65 72 20  are the trigger 
10890 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 74 61 62  name and the tab
108a0 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...      
108b0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
108c0 20 20 20 20 20 20 44 72 6f 70 54 65 6d 70 54 72        DropTempTr
108d0 69 67 67 65 72 20 3d 20 31 34 2c 0d 0a 0d 0a 20  igger = 14,.... 
108e0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
108f0 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  y>..      /// A 
10900 74 65 6d 70 6f 72 61 72 79 20 76 69 65 77 20 77  temporary view w
10910 69 6c 6c 20 62 65 20 64 72 6f 70 70 65 64 2e 20  ill be dropped. 
10920 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65 63   The action-spec
10930 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73 20 61  ific arguments a
10940 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68  re..      /// th
10950 65 20 76 69 65 77 20 6e 61 6d 65 20 61 6e 64 20  e view name and 
10960 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20  a null value... 
10970 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
10980 72 79 3e 0d 0a 20 20 20 20 20 20 44 72 6f 70 54  ry>..      DropT
10990 65 6d 70 56 69 65 77 20 3d 20 31 35 2c 0d 0a 0d  empView = 15,...
109a0 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
109b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
109c0 41 20 74 72 69 67 67 65 72 20 77 69 6c 6c 20 62  A trigger will b
109d0 65 20 64 72 6f 70 70 65 64 2e 20 20 54 68 65 20  e dropped.  The 
109e0 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  action-specific 
109f0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68  arguments are th
10a00 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 72 69  e..      /// tri
10a10 67 67 65 72 20 6e 61 6d 65 20 61 6e 64 20 74 68  gger name and th
10a20 65 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20  e table name... 
10a30 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
10a40 72 79 3e 0d 0a 20 20 20 20 20 20 44 72 6f 70 54  ry>..      DropT
10a50 72 69 67 67 65 72 20 3d 20 31 36 2c 0d 0a 0d 0a  rigger = 16,....
10a60 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
10a70 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41  ry>..      /// A
10a80 20 76 69 65 77 20 77 69 6c 6c 20 62 65 20 64 72   view will be dr
10a90 6f 70 70 65 64 2e 20 20 54 68 65 20 61 63 74 69  opped.  The acti
10aa0 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67 75  on-specific argu
10ab0 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 76 69  ments are the vi
10ac0 65 77 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6e 61  ew..      /// na
10ad0 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76 61  me and a null va
10ae0 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  lue...      /// 
10af0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10b00 20 20 44 72 6f 70 56 69 65 77 20 3d 20 31 37 2c    DropView = 17,
10b10 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
10b20 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
10b30 2f 2f 20 41 6e 20 49 4e 53 45 52 54 20 73 74 61  // An INSERT sta
10b40 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20 65  tement will be e
10b50 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 61 63  xecuted.  The ac
10b60 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72  tion-specific ar
10b70 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20 2f  guments..      /
10b80 2f 2f 20 61 72 65 20 74 68 65 20 74 61 62 6c 65  // are the table
10b90 20 6e 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c   name and a null
10ba0 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f   value...      /
10bb0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10bc0 20 20 20 20 20 49 6e 73 65 72 74 20 3d 20 31 38       Insert = 18
10bd0 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
10be0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10bf0 2f 2f 2f 20 41 20 50 52 41 47 4d 41 20 73 74 61  /// A PRAGMA sta
10c00 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20 65  tement will be e
10c10 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 61 63  xecuted.  The ac
10c20 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72  tion-specific ar
10c30 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20 2f  guments..      /
10c40 2f 2f 20 61 72 65 20 74 68 65 20 6e 61 6d 65 20  // are the name 
10c50 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 61 6e  of the PRAGMA an
10c60 64 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20  d the new value 
10c70 6f 72 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e  or a null value.
10c80 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
10c90 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 50 72  mmary>..      Pr
10ca0 61 67 6d 61 20 3d 20 31 39 2c 0d 0a 0d 0a 20 20  agma = 19,....  
10cb0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10cc0 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 74  >..      /// A t
10cd0 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c  able column will
10ce0 20 62 65 20 72 65 61 64 2e 20 20 54 68 65 20 61   be read.  The a
10cf0 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61  ction-specific a
10d00 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65  rguments are the
10d10 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c  ..      /// tabl
10d20 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 63  e name and the c
10d30 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0d 0a 20 20 20  olumn name...   
10d40 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10d50 3e 0d 0a 20 20 20 20 20 20 52 65 61 64 20 3d 20  >..      Read = 
10d60 32 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  20,....      ///
10d70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10d80 20 20 2f 2f 2f 20 41 20 53 45 4c 45 43 54 20 73    /// A SELECT s
10d90 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65  tatement will be
10da0 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20   executed.  The 
10db0 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  action-specific 
10dc0 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20  arguments..     
10dd0 20 2f 2f 2f 20 61 72 65 20 62 6f 74 68 20 6e 75   /// are both nu
10de0 6c 6c 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20  ll values...    
10df0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
10e00 0d 0a 20 20 20 20 20 20 53 65 6c 65 63 74 20 3d  ..      Select =
10e10 20 32 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f   21,....      //
10e20 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10e30 20 20 20 2f 2f 2f 20 41 20 74 72 61 6e 73 61 63     /// A transac
10e40 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 73 74 61  tion will be sta
10e50 72 74 65 64 2c 20 63 6f 6d 6d 69 74 74 65 64 2c  rted, committed,
10e60 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   or rolled back.
10e70 20 20 54 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f    The..      ///
10e80 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63   action-specific
10e90 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
10ea0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f  he name of the o
10eb0 70 65 72 61 74 69 6f 6e 20 28 42 45 47 49 4e 2c  peration (BEGIN,
10ec0 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 43 4f 4d 4d  ..      /// COMM
10ed0 49 54 2c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29  IT, or ROLLBACK)
10ee0 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76 61 6c 75   and a null valu
10ef0 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  e...      /// </
10f00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10f10 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 32 32  Transaction = 22
10f20 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
10f30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10f40 2f 2f 2f 20 41 6e 20 55 50 44 41 54 45 20 73 74  /// An UPDATE st
10f50 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20  atement will be 
10f60 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 61  executed.  The a
10f70 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61  ction-specific a
10f80 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20  rguments..      
10f90 2f 2f 2f 20 61 72 65 20 74 68 65 20 74 61 62 6c  /// are the tabl
10fa0 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 63  e name and the c
10fb0 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0d 0a 20 20 20  olumn name...   
10fc0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10fd0 3e 0d 0a 20 20 20 20 20 20 55 70 64 61 74 65 20  >..      Update 
10fe0 3d 20 32 33 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  = 23,....      /
10ff0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11000 20 20 20 20 2f 2f 2f 20 41 20 64 61 74 61 62 61      /// A databa
11010 73 65 20 77 69 6c 6c 20 62 65 20 61 74 74 61 63  se will be attac
11020 68 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  hed to the conne
11030 63 74 69 6f 6e 2e 20 20 54 68 65 20 61 63 74 69  ction.  The acti
11040 6f 6e 2d 73 70 65 63 69 66 69 63 0d 0a 20 20 20  on-specific..   
11050 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 73     /// arguments
11060 20 61 72 65 20 74 68 65 20 64 61 74 61 62 61 73   are the databas
11070 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20  e file name and 
11080 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20  a null value... 
11090 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
110a0 72 79 3e 0d 0a 20 20 20 20 20 20 41 74 74 61 63  ry>..      Attac
110b0 68 20 3d 20 32 34 2c 0d 0a 0d 0a 20 20 20 20 20  h = 24,....     
110c0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
110d0 20 20 20 20 20 20 2f 2f 2f 20 41 20 64 61 74 61        /// A data
110e0 62 61 73 65 20 77 69 6c 6c 20 62 65 20 64 65 74  base will be det
110f0 61 63 68 65 64 20 66 72 6f 6d 20 74 68 65 20 63  ached from the c
11100 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
11110 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 0d  action-specific.
11120 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d  .      /// argum
11130 65 6e 74 73 20 61 72 65 20 74 68 65 20 64 61 74  ents are the dat
11140 61 62 61 73 65 20 6e 61 6d 65 20 61 6e 64 20 61  abase name and a
11150 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20 20   null value...  
11160 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
11170 79 3e 0d 0a 20 20 20 20 20 20 44 65 74 61 63 68  y>..      Detach
11180 20 3d 20 32 35 2c 0d 0a 0d 0a 20 20 20 20 20 20   = 25,....      
11190 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
111a0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 63 68       /// The sch
111b0 65 6d 61 20 6f 66 20 61 20 74 61 62 6c 65 20 77  ema of a table w
111c0 69 6c 6c 20 62 65 20 61 6c 74 65 72 65 64 2e 20  ill be altered. 
111d0 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65 63   The action-spec
111e0 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73 0d 0a  ific arguments..
111f0 20 20 20 20 20 20 2f 2f 2f 20 61 72 65 20 74 68        /// are th
11200 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  e database name 
11210 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 6e 61  and the table na
11220 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  me...      /// <
11230 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
11240 20 41 6c 74 65 72 54 61 62 6c 65 20 3d 20 32 36   AlterTable = 26
11250 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
11260 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
11270 2f 2f 2f 20 41 6e 20 69 6e 64 65 78 20 77 69 6c  /// An index wil
11280 6c 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64  l be deleted and
11290 20 74 68 65 6e 20 72 65 63 72 65 61 74 65 64 2e   then recreated.
112a0 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65    The action-spe
112b0 63 69 66 69 63 0d 0a 20 20 20 20 20 20 2f 2f 2f  cific..      ///
112c0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
112d0 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 20 61 6e  he index name an
112e0 64 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d  d a null value..
112f0 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
11300 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 52 65 69  mary>..      Rei
11310 6e 64 65 78 20 3d 20 32 37 2c 0d 0a 0d 0a 20 20  ndex = 27,....  
11320 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
11330 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 74  >..      /// A t
11340 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 61 6e 61  able will be ana
11350 6c 79 7a 65 64 20 74 6f 20 67 61 74 68 65 72 73  lyzed to gathers
11360 20 73 74 61 74 69 73 74 69 63 73 20 61 62 6f 75   statistics abou
11370 74 20 69 74 2e 20 20 54 68 65 0d 0a 20 20 20 20  t it.  The..    
11380 20 20 2f 2f 2f 20 61 63 74 69 6f 6e 2d 73 70 65    /// action-spe
11390 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73 20  cific arguments 
113a0 61 72 65 20 74 68 65 20 74 61 62 6c 65 20 6e 61  are the table na
113b0 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76 61  me and a null va
113c0 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  lue...      /// 
113d0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
113e0 20 20 41 6e 61 6c 79 7a 65 20 3d 20 32 38 2c 0d    Analyze = 28,.
113f0 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
11400 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
11410 2f 20 41 20 76 69 72 74 75 61 6c 20 74 61 62 6c  / A virtual tabl
11420 65 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65  e will be create
11430 64 2e 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73  d.  The action-s
11440 70 65 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74  pecific argument
11450 73 20 61 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  s are..      ///
11460 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
11470 61 6e 64 20 74 68 65 20 6d 6f 64 75 6c 65 20 6e  and the module n
11480 61 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ame...      /// 
11490 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
114a0 20 20 43 72 65 61 74 65 56 74 61 62 6c 65 20 3d    CreateVtable =
114b0 20 32 39 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f   29,....      //
114c0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
114d0 20 20 20 2f 2f 2f 20 41 20 76 69 72 74 75 61 6c     /// A virtual
114e0 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 64   table will be d
114f0 72 6f 70 70 65 64 2e 20 20 54 68 65 20 61 63 74  ropped.  The act
11500 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67  ion-specific arg
11510 75 6d 65 6e 74 73 20 61 72 65 0d 0a 20 20 20 20  uments are..    
11520 20 20 2f 2f 2f 20 74 68 65 20 74 61 62 6c 65 20    /// the table 
11530 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 6d 6f 64  name and the mod
11540 75 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ule name...     
11550 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
11560 0a 20 20 20 20 20 20 44 72 6f 70 56 74 61 62 6c  .      DropVtabl
11570 65 20 3d 20 33 30 2c 0d 0a 0d 0a 20 20 20 20 20  e = 30,....     
11580 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11590 20 20 20 20 20 20 2f 2f 2f 20 41 20 53 51 4c 20        /// A SQL 
115a0 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  function will be
115b0 20 63 61 6c 6c 65 64 2e 20 20 54 68 65 20 61 63   called.  The ac
115c0 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72  tion-specific ar
115d0 67 75 6d 65 6e 74 73 20 61 72 65 20 61 0d 0a 20  guments are a.. 
115e0 20 20 20 20 20 2f 2f 2f 20 6e 75 6c 6c 20 76 61       /// null va
115f0 6c 75 65 20 61 6e 64 20 74 68 65 20 66 75 6e 63  lue and the func
11600 74 69 6f 6e 20 6e 61 6d 65 2e 0d 0a 20 20 20 20  tion name...    
11610 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
11620 0d 0a 20 20 20 20 20 20 46 75 6e 63 74 69 6f 6e  ..      Function
11630 20 3d 20 33 31 2c 0d 0a 0d 0a 20 20 20 20 20 20   = 31,....      
11640 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
11650 20 20 20 20 20 2f 2f 2f 20 41 20 73 61 76 65 70       /// A savep
11660 6f 69 6e 74 20 77 69 6c 6c 20 62 65 20 63 72 65  oint will be cre
11670 61 74 65 64 2c 20 72 65 6c 65 61 73 65 64 2c 20  ated, released, 
11680 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  or rolled back. 
11690 20 54 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   The..      /// 
116a0 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  action-specific 
116b0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68  arguments are th
116c0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 70  e name of the op
116d0 65 72 61 74 69 6f 6e 20 28 42 45 47 49 4e 2c 0d  eration (BEGIN,.
116e0 0a 20 20 20 20 20 20 2f 2f 2f 20 52 45 4c 45 41  .      /// RELEA
116f0 53 45 2c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 29  SE, or ROLLBACK)
11700 20 61 6e 64 20 74 68 65 20 73 61 76 65 70 6f 69   and the savepoi
11710 6e 74 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  nt name...      
11720 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
11730 20 20 20 20 20 20 53 61 76 65 70 6f 69 6e 74 20        Savepoint 
11740 3d 20 33 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  = 32,....      /
11750 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11760 20 20 20 20 2f 2f 2f 20 41 20 72 65 63 75 72 73      /// A recurs
11770 69 76 65 20 71 75 65 72 79 20 77 69 6c 6c 20 62  ive query will b
11780 65 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  e executed.  The
11790 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63   action-specific
117a0 20 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20   arguments..    
117b0 20 20 2f 2f 2f 20 61 72 65 20 74 77 6f 20 6e 75    /// are two nu
117c0 6c 6c 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20  ll values...    
117d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
117e0 0d 0a 20 20 20 20 20 20 52 65 63 75 72 73 69 76  ..      Recursiv
117f0 65 20 3d 20 33 33 0d 0a 20 20 7d 0d 0a 0d 0a 20  e = 33..  }.... 
11800 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11810 20 20 2f 2f 2f 20 54 68 65 20 72 65 74 75 72 6e    /// The return
11820 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 63 75   code for the cu
11830 72 72 65 6e 74 20 63 61 6c 6c 20 69 6e 74 6f 20  rrent call into 
11840 74 68 65 20 61 75 74 68 6f 72 69 7a 65 72 2e 0d  the authorizer..
11850 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79  .  /// </summary
11860 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  >..  public enum
11870 20 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65   SQLiteAuthorize
11880 72 52 65 74 75 72 6e 43 6f 64 65 0d 0a 20 20 7b  rReturnCode..  {
11890 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
118a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
118b0 20 54 68 65 20 61 63 74 69 6f 6e 20 77 69 6c 6c   The action will
118c0 20 62 65 20 61 6c 6c 6f 77 65 64 2e 0d 0a 20 20   be allowed...  
118d0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
118e0 79 3e 0d 0a 20 20 20 20 20 20 4f 6b 20 3d 20 30  y>..      Ok = 0
118f0 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
11900 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
11910 2f 2f 2f 20 54 68 65 20 6f 76 65 72 61 6c 6c 20  /// The overall 
11920 61 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 64  action will be d
11930 69 73 61 6c 6c 6f 77 65 64 20 61 6e 64 20 61 6e  isallowed and an
11940 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 77   error message w
11950 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 2f 2f  ill be..      //
11960 2f 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20  / returned from 
11970 74 68 65 20 71 75 65 72 79 20 70 72 65 70 61 72  the query prepar
11980 61 74 69 6f 6e 20 6d 65 74 68 6f 64 2e 0d 0a 20  ation method... 
11990 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
119a0 72 79 3e 0d 0a 20 20 20 20 20 20 44 65 6e 79 20  ry>..      Deny 
119b0 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  = 1,....      //
119c0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
119d0 20 20 20 2f 2f 2f 20 54 68 65 20 73 70 65 63 69     /// The speci
119e0 66 69 63 20 61 63 74 69 6f 6e 20 77 69 6c 6c 20  fic action will 
119f0 62 65 20 64 69 73 61 6c 6c 6f 77 65 64 3b 20 68  be disallowed; h
11a00 6f 77 65 76 65 72 2c 20 74 68 65 20 6f 76 65 72  owever, the over
11a10 61 6c 6c 20 61 63 74 69 6f 6e 0d 0a 20 20 20 20  all action..    
11a20 20 20 2f 2f 2f 20 77 69 6c 6c 20 63 6f 6e 74 69    /// will conti
11a30 6e 75 65 2e 20 20 54 68 65 20 65 78 61 63 74 20  nue.  The exact 
11a40 65 66 66 65 63 74 73 20 6f 66 20 74 68 69 73 20  effects of this 
11a50 72 65 74 75 72 6e 20 63 6f 64 65 20 76 61 72 79  return code vary
11a60 20 64 65 70 65 6e 64 69 6e 67 0d 0a 20 20 20 20   depending..    
11a70 20 20 2f 2f 2f 20 6f 6e 20 74 68 65 20 73 70 65    /// on the spe
11a80 63 69 66 69 63 20 61 63 74 69 6f 6e 2c 20 70 6c  cific action, pl
11a90 65 61 73 65 20 72 65 66 65 72 20 74 6f 20 74 68  ease refer to th
11aa0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
11ab0 62 72 61 72 79 0d 0a 20 20 20 20 20 20 2f 2f 2f  brary..      ///
11ac0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
11ad0 6f 72 20 66 75 74 68 65 72 20 64 65 74 61 69 6c  or futher detail
11ae0 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
11af0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
11b00 49 67 6e 6f 72 65 20 3d 20 32 0d 0a 20 20 7d 0d  Ignore = 2..  }.
11b10 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  ...  /// <summar
11b20 79 3e 0d 0a 20 20 2f 2f 2f 20 43 6c 61 73 73 20  y>..  /// Class 
11b30 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  used internally 
11b40 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
11b50 20 64 61 74 61 74 79 70 65 20 6f 66 20 61 20 63   datatype of a c
11b60 6f 6c 75 6d 6e 20 69 6e 20 61 20 72 65 73 75 6c  olumn in a resul
11b70 74 73 65 74 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  tset..  /// </su
11b80 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e  mmary>..  intern
11b90 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  al sealed class 
11ba0 53 51 4c 69 74 65 54 79 70 65 0d 0a 20 20 7b 0d  SQLiteType..  {.
11bb0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11bc0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
11bd0 44 62 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  DbType of the co
11be0 6c 75 6d 6e 2c 20 6f 72 20 44 62 54 79 70 65 2e  lumn, or DbType.
11bf0 4f 62 6a 65 63 74 20 69 66 20 69 74 20 63 61 6e  Object if it can
11c00 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65  not be determine
11c10 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  d..    /// </sum
11c20 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
11c30 6e 61 6c 20 44 62 54 79 70 65 20 54 79 70 65 3b  nal DbType Type;
11c40 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
11c50 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
11c60 20 61 66 66 69 6e 69 74 79 20 6f 66 20 61 20 63   affinity of a c
11c70 6f 6c 75 6d 6e 2c 20 75 73 65 64 20 66 6f 72 20  olumn, used for 
11c80 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 72 20 77  expressions or w
11c90 68 65 6e 20 54 79 70 65 20 69 73 20 44 62 54 79  hen Type is DbTy
11ca0 70 65 2e 4f 62 6a 65 63 74 0d 0a 20 20 20 20 2f  pe.Object..    /
11cb0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
11cc0 20 20 20 69 6e 74 65 72 6e 61 6c 20 54 79 70 65     internal Type
11cd0 41 66 66 69 6e 69 74 79 20 41 66 66 69 6e 69 74  Affinity Affinit
11ce0 79 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f  y;..  }....  ///
11cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
11d40 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20  internal sealed 
11d50 63 6c 61 73 73 20 53 51 4c 69 74 65 44 62 54 79  class SQLiteDbTy
11d60 70 65 4d 61 70 0d 0a 20 20 20 20 20 20 3a 20 44  peMap..      : D
11d70 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
11d80 2c 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61  , SQLiteDbTypeMa
11d90 70 70 69 6e 67 3e 0d 0a 20 20 7b 0d 0a 20 20 20  pping>..  {..   
11da0 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
11db0 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 70  te Data..      p
11dc0 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72  rivate Dictionar
11dd0 79 3c 44 62 54 79 70 65 2c 20 53 51 4c 69 74 65  y<DbType, SQLite
11de0 44 62 54 79 70 65 4d 61 70 70 69 6e 67 3e 20 72  DbTypeMapping> r
11df0 65 76 65 72 73 65 3b 0d 0a 20 20 20 20 20 20 23  everse;..      #
11e00 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
11e10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
11e60 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
11e70 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
11e80 73 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  s..      public 
11e90 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 28  SQLiteDbTypeMap(
11ea0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62  )..          : b
11eb0 61 73 65 28 6e 65 77 20 54 79 70 65 4e 61 6d 65  ase(new TypeName
11ec0 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 28 29  StringComparer()
11ed0 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
11ee0 20 20 20 20 20 20 72 65 76 65 72 73 65 20 3d 20        reverse = 
11ef0 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 44  new Dictionary<D
11f00 62 54 79 70 65 2c 20 53 51 4c 69 74 65 44 62 54  bType, SQLiteDbT
11f10 79 70 65 4d 61 70 70 69 6e 67 3e 28 29 3b 0d 0a  ypeMapping>();..
11f20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11f30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
11f80 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
11f90 65 44 62 54 79 70 65 4d 61 70 28 0d 0a 20 20 20  eDbTypeMap(..   
11fa0 20 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61 62         IEnumerab
11fb0 6c 65 3c 53 51 4c 69 74 65 44 62 54 79 70 65 4d  le<SQLiteDbTypeM
11fc0 61 70 70 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69  apping> collecti
11fd0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  on..          ).
11fe0 0a 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69  .          : thi
11ff0 73 28 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  s()..      {..  
12000 20 20 20 20 20 20 20 20 41 64 64 28 63 6f 6c 6c          Add(coll
12010 65 63 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  ection);..      
12020 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65 67  }..      #endreg
12030 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  ion....      ///
12040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12080 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
12090 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 43  #region System.C
120a0 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72  ollections.Gener
120b0 69 63 2e 44 69 63 74 69 6f 6e 61 72 79 20 22 4f  ic.Dictionary "O
120c0 76 65 72 72 69 64 65 73 22 0d 0a 20 20 20 20 20  verrides"..     
120d0 20 70 75 62 6c 69 63 20 6e 65 77 20 69 6e 74 20   public new int 
120e0 43 6c 65 61 72 28 29 0d 0a 20 20 20 20 20 20 7b  Clear()..      {
120f0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
12100 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20  result = 0;.... 
12110 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 76           if (rev
12120 65 72 73 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  erse != null).. 
12130 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12140 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
12150 20 2b 3d 20 72 65 76 65 72 73 65 2e 43 6f 75 6e   += reverse.Coun
12160 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
12170 20 20 72 65 76 65 72 73 65 2e 43 6c 65 61 72 28    reverse.Clear(
12180 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
12190 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73  ...          res
121a0 75 6c 74 20 2b 3d 20 62 61 73 65 2e 43 6f 75 6e  ult += base.Coun
121b0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 61  t;..          ba
121c0 73 65 2e 43 6c 65 61 72 28 29 3b 0d 0a 0d 0a 20  se.Clear();.... 
121d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
121e0 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 7d  result;..      }
121f0 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65 67 69  ..      #endregi
12200 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f  on....      ////
12210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12250 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23  /////....      #
12260 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 44 62 54  region SQLiteDbT
12270 79 70 65 4d 61 70 70 69 6e 67 20 48 65 6c 70 65  ypeMapping Helpe
12280 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
12290 20 70 75 62 6c 69 63 20 76 6f 69 64 20 41 64 64   public void Add
122a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 49 45 6e  (..          IEn
122b0 75 6d 65 72 61 62 6c 65 3c 53 51 4c 69 74 65 44  umerable<SQLiteD
122c0 62 54 79 70 65 4d 61 70 70 69 6e 67 3e 20 63 6f  bTypeMapping> co
122d0 6c 6c 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  llection..      
122e0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a      )..      {..
122f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
12300 6c 6c 65 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  llection == null
12310 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12320 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
12330 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
12340 28 22 63 6f 6c 6c 65 63 74 69 6f 6e 22 29 3b 0d  ("collection");.
12350 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
12360 65 61 63 68 20 28 53 51 4c 69 74 65 44 62 54 79  each (SQLiteDbTy
12370 70 65 4d 61 70 70 69 6e 67 20 69 74 65 6d 20 69  peMapping item i
12380 6e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20  n collection).. 
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64               Add
123a0 28 69 74 65 6d 29 3b 0d 0a 20 20 20 20 20 20 7d  (item);..      }
123b0 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
123c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12400 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62  ///....      pub
12410 6c 69 63 20 76 6f 69 64 20 41 64 64 28 53 51 4c  lic void Add(SQL
12420 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
12430 20 69 74 65 6d 29 0d 0a 20 20 20 20 20 20 7b 0d   item)..      {.
12440 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
12450 74 65 6d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tem == null)..  
12460 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
12470 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
12480 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 69 74 65  llException("ite
12490 6d 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  m");....        
124a0 20 20 69 66 20 28 69 74 65 6d 2e 74 79 70 65 4e    if (item.typeN
124b0 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
124c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
124d0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78  w new ArgumentEx
124e0 63 65 70 74 69 6f 6e 28 22 69 74 65 6d 20 74 79  ception("item ty
124f0 70 65 20 6e 61 6d 65 20 63 61 6e 6e 6f 74 20 62  pe name cannot b
12500 65 20 6e 75 6c 6c 22 29 3b 0d 0a 0d 0a 20 20 20  e null");....   
12510 20 20 20 20 20 20 20 62 61 73 65 2e 41 64 64 28         base.Add(
12520 69 74 65 6d 2e 74 79 70 65 4e 61 6d 65 2c 20 69  item.typeName, i
12530 74 65 6d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tem);....       
12540 20 20 20 69 66 20 28 69 74 65 6d 2e 70 72 69 6d     if (item.prim
12550 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ary)..          
12560 20 20 20 20 72 65 76 65 72 73 65 2e 41 64 64 28      reverse.Add(
12570 69 74 65 6d 2e 64 61 74 61 54 79 70 65 2c 20 69  item.dataType, i
12580 74 65 6d 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  tem);..      }..
12590 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
125a0 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
125b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23 72 65  ///....      #re
12600 67 69 6f 6e 20 44 62 54 79 70 65 20 48 65 6c 70  gion DbType Help
12610 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
12620 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f    public bool Co
12630 6e 74 61 69 6e 73 4b 65 79 28 44 62 54 79 70 65  ntainsKey(DbType
12640 20 6b 65 79 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   key)..      {..
12650 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
12660 76 65 72 73 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  verse == null)..
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12680 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
12690 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
126a0 72 65 76 65 72 73 65 2e 43 6f 6e 74 61 69 6e 73  reverse.Contains
126b0 4b 65 79 28 6b 65 79 29 3b 0d 0a 20 20 20 20 20  Key(key);..     
126c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
126d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12710 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70  /////....      p
12720 75 62 6c 69 63 20 62 6f 6f 6c 20 54 72 79 47 65  ublic bool TryGe
12730 74 56 61 6c 75 65 28 44 62 54 79 70 65 20 6b 65  tValue(DbType ke
12740 79 2c 20 6f 75 74 20 53 51 4c 69 74 65 44 62 54  y, out SQLiteDbT
12750 79 70 65 4d 61 70 70 69 6e 67 20 76 61 6c 75 65  ypeMapping value
12760 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
12770 20 20 20 20 20 20 69 66 20 28 72 65 76 65 72 73        if (revers
12780 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
12790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
127a0 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 6e         value = n
127b0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
127c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
127d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
127e0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
127f0 72 6e 20 72 65 76 65 72 73 65 2e 54 72 79 47 65  rn reverse.TryGe
12800 74 56 61 6c 75 65 28 6b 65 79 2c 20 6f 75 74 20  tValue(key, out 
12810 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 7d  value);..      }
12820 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
12830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12870 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62  ///....      pub
12880 6c 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 28  lic bool Remove(
12890 44 62 54 79 70 65 20 6b 65 79 29 0d 0a 20 20 20  DbType key)..   
128a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
128b0 69 66 20 28 72 65 76 65 72 73 65 20 3d 3d 20 6e  if (reverse == n
128c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
128d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
128e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ;....          r
128f0 65 74 75 72 6e 20 72 65 76 65 72 73 65 2e 52 65  eturn reverse.Re
12900 6d 6f 76 65 28 6b 65 79 29 3b 0d 0a 20 20 20 20  move(key);..    
12910 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72    }..      #endr
12920 65 67 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  egion..  }....  
12930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
12980 0a 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c  .  internal seal
12990 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 44  ed class SQLiteD
129a0 62 54 79 70 65 4d 61 70 70 69 6e 67 0d 0a 20 20  bTypeMapping..  
129b0 7b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  {..    internal 
129c0 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70  SQLiteDbTypeMapp
129d0 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 73 74  ing(..        st
129e0 72 69 6e 67 20 6e 65 77 54 79 70 65 4e 61 6d 65  ring newTypeName
129f0 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 54 79 70  ,..        DbTyp
12a00 65 20 6e 65 77 44 61 74 61 54 79 70 65 2c 0d 0a  e newDataType,..
12a10 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 65 77          bool new
12a20 50 72 69 6d 61 72 79 0d 0a 20 20 20 20 20 20 20  Primary..       
12a30 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
12a40 20 74 79 70 65 4e 61 6d 65 20 3d 20 6e 65 77 54   typeName = newT
12a50 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ypeName;..      
12a60 64 61 74 61 54 79 70 65 20 3d 20 6e 65 77 44 61  dataType = newDa
12a70 74 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 70  taType;..      p
12a80 72 69 6d 61 72 79 20 3d 20 6e 65 77 50 72 69 6d  rimary = newPrim
12a90 61 72 79 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ary;..    }.... 
12aa0 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69     internal stri
12ab0 6e 67 20 74 79 70 65 4e 61 6d 65 3b 0d 0a 20 20  ng typeName;..  
12ac0 20 20 69 6e 74 65 72 6e 61 6c 20 44 62 54 79 70    internal DbTyp
12ad0 65 20 64 61 74 61 54 79 70 65 3b 0d 0a 20 20 20  e dataType;..   
12ae0 20 69 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 70   internal bool p
12af0 72 69 6d 61 72 79 3b 0d 0a 20 20 7d 0d 0a 0d 0a  rimary;..  }....
12b00 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65    internal seale
12b10 64 20 63 6c 61 73 73 20 54 79 70 65 4e 61 6d 65  d class TypeName
12b20 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 20 3a  StringComparer :
12b30 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72   IEqualityCompar
12b40 65 72 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 7b 0d  er<string>..  {.
12b50 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45 71  .    #region IEq
12b60 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 73  ualityComparer<s
12b70 74 72 69 6e 67 3e 20 4d 65 6d 62 65 72 73 0d 0a  tring> Members..
12b80 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
12b90 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 73  Equals(..      s
12ba0 74 72 69 6e 67 20 6c 65 66 74 2c 0d 0a 20 20 20  tring left,..   
12bb0 20 20 20 73 74 72 69 6e 67 20 72 69 67 68 74 0d     string right.
12bc0 0a 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d  .      )..    {.
12bd0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74  .      return St
12be0 72 69 6e 67 2e 45 71 75 61 6c 73 28 6c 65 66 74  ring.Equals(left
12bf0 2c 20 72 69 67 68 74 2c 20 53 74 72 69 6e 67 43  , right, StringC
12c00 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
12c10 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20  lIgnoreCase);.. 
12c20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
12c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70  ///////....    p
12c80 75 62 6c 69 63 20 69 6e 74 20 47 65 74 48 61 73  ublic int GetHas
12c90 68 43 6f 64 65 28 0d 0a 20 20 20 20 20 20 73 74  hCode(..      st
12ca0 72 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20 20  ring value..    
12cb0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
12cc0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 4e    //..      // N
12cd0 4f 54 45 3a 20 54 68 65 20 6f 6e 6c 79 20 74 68  OTE: The only th
12ce0 69 6e 67 20 74 68 61 74 20 77 65 20 6d 75 73 74  ing that we must
12cf0 20 67 75 61 72 61 6e 74 65 65 20 68 65 72 65 2c   guarantee here,
12d00 20 61 63 63 6f 72 64 69 6e 67 0d 0a 20 20 20 20   according..    
12d10 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 74 68    //       to th
12d20 65 20 4d 53 44 4e 20 64 6f 63 75 6d 65 6e 74 61  e MSDN documenta
12d30 74 69 6f 6e 20 66 6f 72 20 49 45 71 75 61 6c 69  tion for IEquali
12d40 74 79 43 6f 6d 70 61 72 65 72 2c 20 69 73 0d 0a  tyComparer, is..
12d50 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
12d60 68 61 74 20 66 6f 72 20 74 77 6f 20 67 69 76 65  hat for two give
12d70 6e 20 73 74 72 69 6e 67 73 2c 20 69 66 20 45 71  n strings, if Eq
12d80 75 61 6c 73 20 72 65 74 75 72 6e 20 74 72 75 65  uals return true
12d90 20 74 68 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 20   then..      // 
12da0 20 20 20 20 20 20 74 68 65 20 74 77 6f 20 73 74        the two st
12db0 72 69 6e 67 73 20 6d 75 73 74 20 68 61 73 68 20  rings must hash 
12dc0 74 6f 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  to the same valu
12dd0 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  e...      //..  
12de0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 21 3d      if (value !=
12df0 20 6e 75 6c 6c 29 0d 0a 23 69 66 20 21 50 4c 41   null)..#if !PLA
12e00 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
12e10 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
12e20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 54 6f 4c  return value.ToL
12e30 6f 77 65 72 49 6e 76 61 72 69 61 6e 74 28 29 2e  owerInvariant().
12e40 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d 0a  GetHashCode();..
12e50 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 72  #else..        r
12e60 65 74 75 72 6e 20 76 61 6c 75 65 2e 54 6f 4c 6f  eturn value.ToLo
12e70 77 65 72 28 29 2e 47 65 74 48 61 73 68 43 6f 64  wer().GetHashCod
12e80 65 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  e();..#endif..  
12e90 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
12ea0 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
12eb0 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
12ec0 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 20 20 20  n("value");..   
12ed0 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
12ee0 6f 6e 0d 0a 20 20 7d 0d 0a 7d 0d 0a              on..  }..}..