System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact e77a1e682b13f6ce32d054430e51f2185d2552fc:


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: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 55 6e  value for the Un
0300: 69 78 20 65 70 6f 63 68 20 28 65 2e 67 2e 20 4a  ix epoch (e.g. J
0310: 61 6e 75 61 72 79 20 31 2c 20 31 39 37 30 20 61  anuary 1, 1970 a
0320: 74 20 6d 69 64 6e 69 67 68 74 2c 20 69 6e 20 55  t midnight, in U
0330: 54 43 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  TC)...    /// </
0340: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0350: 6f 74 65 63 74 65 64 20 73 74 61 74 69 63 20 72  otected static r
0360: 65 61 64 6f 6e 6c 79 20 44 61 74 65 54 69 6d 65  eadonly DateTime
0370: 20 55 6e 69 78 45 70 6f 63 68 20 3d 0d 0a 20 20   UnixEpoch =..  
0380: 20 20 20 20 20 20 6e 65 77 20 44 61 74 65 54 69        new DateTi
0390: 6d 65 28 31 39 37 30 2c 20 31 2c 20 31 2c 20 30  me(1970, 1, 1, 0
03a0: 2c 20 30 2c 20 30 2c 20 44 61 74 65 54 69 6d 65  , 0, 0, DateTime
03b0: 4b 69 6e 64 2e 55 74 63 29 3b 0d 0a 0d 0a 20 20  Kind.Utc);....  
03c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
03d0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c  .    /// The val
03e0: 75 65 20 6f 66 20 74 68 65 20 4f 4c 45 20 41 75  ue of the OLE Au
03f0: 74 6f 6d 61 74 69 6f 6e 20 65 70 6f 63 68 20 72  tomation epoch r
0400: 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61 20  epresented as a 
0410: 4a 75 6c 69 61 6e 20 64 61 79 2e 0d 0a 20 20 20  Julian day...   
0420: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0430: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
0440: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 64 6f 75  tic readonly dou
0450: 62 6c 65 20 4f 6c 65 41 75 74 6f 6d 61 74 69 6f  ble OleAutomatio
0460: 6e 45 70 6f 63 68 41 73 4a 75 6c 69 61 6e 44 61  nEpochAsJulianDa
0470: 79 20 3d 20 32 34 31 35 30 31 38 2e 35 3b 0d 0a  y = 2415018.5;..
0480: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0490: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
04a0: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 66   format string f
04b0: 6f 72 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75  or DateTime valu
04c0: 65 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68  es when using th
04d0: 65 20 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  e InvariantCultu
04e0: 72 65 20 6f 72 20 43 75 72 72 65 6e 74 43 75 6c  re or CurrentCul
04f0: 74 75 72 65 20 66 6f 72 6d 61 74 73 2e 0d 0a 20  ture formats... 
0500: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0510: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 63  >..    private c
0520: 6f 6e 73 74 20 73 74 72 69 6e 67 20 46 75 6c 6c  onst string Full
0530: 46 6f 72 6d 61 74 20 3d 20 22 79 79 79 79 2d 4d  Format = "yyyy-M
0540: 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66  M-ddTHH:mm:ss.ff
0550: 66 66 66 66 66 4b 22 3b 0d 0a 0d 0a 20 20 20 20  fffffK";....    
0560: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0570: 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20     /// An array 
0580: 6f 66 20 49 53 4f 2d 38 36 30 31 20 44 61 74 65  of ISO-8601 Date
0590: 54 69 6d 65 20 66 6f 72 6d 61 74 73 20 74 68 61  Time formats tha
05a0: 74 20 77 65 20 73 75 70 70 6f 72 74 20 70 61 72  t we support par
05b0: 73 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sing...    /// <
05c0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
05d0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
05e0: 72 69 6e 67 5b 5d 20 5f 64 61 74 65 74 69 6d 65  ring[] _datetime
05f0: 46 6f 72 6d 61 74 73 20 3d 20 6e 65 77 20 73 74  Formats = new st
0600: 72 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ring[] {..      
0610: 22 54 48 48 6d 6d 73 73 4b 22 2c 0d 0a 20 20 20  "THHmmssK",..   
0620: 20 20 20 22 54 48 48 6d 6d 4b 22 2c 0d 0a 20 20     "THHmmK",..  
0630: 20 20 20 20 22 48 48 3a 6d 6d 3a 73 73 2e 46 46      "HH:mm:ss.FF
0640: 46 46 46 46 46 4b 22 2c 0d 0a 20 20 20 20 20 20  FFFFFK",..      
0650: 22 48 48 3a 6d 6d 3a 73 73 4b 22 2c 0d 0a 20 20  "HH:mm:ssK",..  
0660: 20 20 20 20 22 48 48 3a 6d 6d 4b 22 2c 0d 0a 20      "HH:mmK",.. 
0670: 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64       "yyyy-MM-dd
0680: 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46   HH:mm:ss.FFFFFF
0690: 46 4b 22 2c 20 2f 2a 20 4e 4f 54 45 3a 20 55 54  FK", /* NOTE: UT
06a0: 43 20 64 65 66 61 75 6c 74 20 28 35 29 2e 20 2a  C default (5). *
06b0: 2f 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d  /..      "yyyy-M
06c0: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 4b 22 2c  M-dd HH:mm:ssK",
06d0: 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d  ..      "yyyy-MM
06e0: 2d 64 64 20 48 48 3a 6d 6d 4b 22 2c 0d 0a 20 20  -dd HH:mmK",..  
06f0: 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54      "yyyy-MM-ddT
0700: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
0710: 4b 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79  K",..      "yyyy
0720: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 4b 22 2c 0d  -MM-ddTHH:mmK",.
0730: 0a 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d  .      "yyyy-MM-
0740: 64 64 54 48 48 3a 6d 6d 3a 73 73 4b 22 2c 0d 0a  ddTHH:mm:ssK",..
0750: 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64 64 48        "yyyyMMddH
0760: 48 6d 6d 73 73 4b 22 2c 0d 0a 20 20 20 20 20 20  HmmssK",..      
0770: 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d 4b 22 2c  "yyyyMMddHHmmK",
0780: 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64  ..      "yyyyMMd
0790: 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46 46 4b  dTHHmmssFFFFFFFK
07a0: 22 2c 0d 0a 20 20 20 20 20 20 22 54 48 48 6d 6d  ",..      "THHmm
07b0: 73 73 22 2c 0d 0a 20 20 20 20 20 20 22 54 48 48  ss",..      "THH
07c0: 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 48 48 3a  mm",..      "HH:
07d0: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22 2c 0d  mm:ss.FFFFFFF",.
07e0: 0a 20 20 20 20 20 20 22 48 48 3a 6d 6d 3a 73 73  .      "HH:mm:ss
07f0: 22 2c 0d 0a 20 20 20 20 20 20 22 48 48 3a 6d 6d  ",..      "HH:mm
0800: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 2d  ",..      "yyyy-
0810: 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46  MM-dd HH:mm:ss.F
0820: 46 46 46 46 46 46 22 2c 20 2f 2a 20 4e 4f 54 45  FFFFFF", /* NOTE
0830: 3a 20 4e 6f 6e 2d 55 54 43 20 64 65 66 61 75 6c  : Non-UTC defaul
0840: 74 20 28 31 39 29 2e 20 2a 2f 0d 0a 20 20 20 20  t (19). */..    
0850: 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48    "yyyy-MM-dd HH
0860: 3a 6d 6d 3a 73 73 22 2c 0d 0a 20 20 20 20 20 20  :mm:ss",..      
0870: 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d  "yyyy-MM-dd HH:m
0880: 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79  m",..      "yyyy
0890: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e  -MM-ddTHH:mm:ss.
08a0: 46 46 46 46 46 46 46 22 2c 0d 0a 20 20 20 20 20  FFFFFFF",..     
08b0: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a   "yyyy-MM-ddTHH:
08c0: 6d 6d 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79  mm",..      "yyy
08d0: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
08e0: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d  ",..      "yyyyM
08f0: 4d 64 64 48 48 6d 6d 73 73 22 2c 0d 0a 20 20 20  MddHHmmss",..   
0900: 20 20 20 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d     "yyyyMMddHHmm
0910: 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79 4d  ",..      "yyyyM
0920: 4d 64 64 54 48 48 6d 6d 73 73 46 46 46 46 46 46  MddTHHmmssFFFFFF
0930: 46 22 2c 0d 0a 20 20 20 20 20 20 22 79 79 79 79  F",..      "yyyy
0940: 2d 4d 4d 2d 64 64 22 2c 0d 0a 20 20 20 20 20 20  -MM-dd",..      
0950: 22 79 79 79 79 4d 4d 64 64 22 2c 0d 0a 20 20 20  "yyyyMMdd",..   
0960: 20 20 20 22 79 79 2d 4d 4d 2d 64 64 22 0d 0a 20     "yy-MM-dd".. 
0970: 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f     };....    ///
0980: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0990: 2f 2f 2f 20 54 68 65 20 69 6e 74 65 72 6e 61 6c  /// The internal
09a0: 20 64 65 66 61 75 6c 74 20 66 6f 72 6d 61 74 20   default format 
09b0: 66 6f 72 20 55 54 43 20 44 61 74 65 54 69 6d 65  for UTC DateTime
09c0: 20 76 61 6c 75 65 73 20 77 68 65 6e 20 63 6f 6e   values when con
09d0: 76 65 72 74 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f  verting..    ///
09e0: 20 74 6f 20 61 20 73 74 72 69 6e 67 2e 0d 0a 20   to a string... 
09f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0a00: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
0a10: 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73  tatic readonly s
0a20: 74 72 69 6e 67 20 5f 64 61 74 65 74 69 6d 65 46  tring _datetimeF
0a30: 6f 72 6d 61 74 55 74 63 20 3d 20 5f 64 61 74 65  ormatUtc = _date
0a40: 74 69 6d 65 46 6f 72 6d 61 74 73 5b 35 5d 3b 0d  timeFormats[5];.
0a50: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
0a60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
0a70: 65 20 69 6e 74 65 72 6e 61 6c 20 64 65 66 61 75  e internal defau
0a80: 6c 74 20 66 6f 72 6d 61 74 20 66 6f 72 20 6c 6f  lt format for lo
0a90: 63 61 6c 20 44 61 74 65 54 69 6d 65 20 76 61 6c  cal DateTime val
0aa0: 75 65 73 20 77 68 65 6e 20 63 6f 6e 76 65 72 74  ues when convert
0ab0: 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20  ing..    /// to 
0ac0: 61 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 2f  a string...    /
0ad0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0ae0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
0af0: 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
0b00: 67 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  g _datetimeForma
0b10: 74 4c 6f 63 61 6c 20 3d 20 5f 64 61 74 65 74 69  tLocal = _dateti
0b20: 6d 65 46 6f 72 6d 61 74 73 5b 31 39 5d 3b 0d 0a  meFormats[19];..
0b30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0b40: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e 20  ry>..    /// An 
0b50: 55 54 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20 69  UTF-8 Encoding i
0b60: 6e 73 74 61 6e 63 65 2c 20 73 6f 20 77 65 20 63  nstance, so we c
0b70: 61 6e 20 63 6f 6e 76 65 72 74 20 73 74 72 69 6e  an convert strin
0b80: 67 73 20 74 6f 20 61 6e 64 20 66 72 6f 6d 20 55  gs to and from U
0b90: 54 46 2d 38 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  TF-8..    /// </
0ba0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0bb0: 69 76 61 74 65 20 73 74 61 74 69 63 20 45 6e 63  ivate static Enc
0bc0: 6f 64 69 6e 67 20 5f 75 74 66 38 20 3d 20 6e 65  oding _utf8 = ne
0bd0: 77 20 55 54 46 38 45 6e 63 6f 64 69 6e 67 28 29  w UTF8Encoding()
0be0: 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
0bf0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
0c00: 65 20 64 65 66 61 75 6c 74 20 44 61 74 65 54 69  e default DateTi
0c10: 6d 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 74 68  me format for th
0c20: 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  is instance...  
0c30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0c40: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53  ..    internal S
0c50: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
0c60: 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74   _datetimeFormat
0c70: 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
0c80: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
0c90: 65 20 64 65 66 61 75 6c 74 20 44 61 74 65 54 69  e default DateTi
0ca0: 6d 65 4b 69 6e 64 20 66 6f 72 20 74 68 69 73 20  meKind for this 
0cb0: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
0cc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0cd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 61 74 65     internal Date
0ce0: 54 69 6d 65 4b 69 6e 64 20 5f 64 61 74 65 74 69  TimeKind _dateti
0cf0: 6d 65 4b 69 6e 64 3b 0d 0a 20 20 20 20 2f 2f 2f  meKind;..    ///
0d00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0d10: 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20  /// The default 
0d20: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20  DateTime format 
0d30: 73 74 72 69 6e 67 20 66 6f 72 20 74 68 69 73 20  string for this 
0d40: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
0d50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0d60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69     internal stri
0d70: 6e 67 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  ng _datetimeForm
0d80: 61 74 53 74 72 69 6e 67 20 3d 20 6e 75 6c 6c 3b  atString = null;
0d90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0da0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 69  ry>..    /// Ini
0db0: 74 69 61 6c 69 7a 65 73 20 74 68 65 20 63 6f 6e  tializes the con
0dc0: 76 65 72 73 69 6f 6e 20 63 6c 61 73 73 0d 0a 20  version class.. 
0dd0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0de0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0df0: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 54 68 65  m name="fmt">The
0e00: 20 64 65 66 61 75 6c 74 20 64 61 74 65 2f 74 69   default date/ti
0e10: 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  me format to use
0e20: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
0e30: 63 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ce</param>..    
0e40: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0e50: 22 6b 69 6e 64 22 3e 54 68 65 20 44 61 74 65 54  "kind">The DateT
0e60: 69 6d 65 4b 69 6e 64 20 74 6f 20 75 73 65 2e 3c  imeKind to use.<
0e70: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
0e80: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6d   <param name="fm
0e90: 74 53 74 72 69 6e 67 22 3e 54 68 65 20 44 61 74  tString">The Dat
0ea0: 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 73 74 72  eTime format str
0eb0: 69 6e 67 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72  ing to use.</par
0ec0: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
0ed0: 6c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 28  l SQLiteConvert(
0ee0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
0ef0: 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d 74 2c  DateFormats fmt,
0f00: 0d 0a 20 20 20 20 20 20 20 20 44 61 74 65 54 69  ..        DateTi
0f10: 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20  meKind kind,..  
0f20: 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6d 74        string fmt
0f30: 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  String..        
0f40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
0f50: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 20  _datetimeFormat 
0f60: 3d 20 66 6d 74 3b 0d 0a 20 20 20 20 20 20 5f 64  = fmt;..      _d
0f70: 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 20 6b 69  atetimeKind = ki
0f80: 6e 64 3b 0d 0a 20 20 20 20 20 20 5f 64 61 74 65  nd;..      _date
0f90: 74 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67  timeFormatString
0fa0: 20 3d 20 66 6d 74 53 74 72 69 6e 67 3b 0d 0a 20   = fmtString;.. 
0fb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 72 65 67     }....    #reg
0fc0: 69 6f 6e 20 55 54 46 2d 38 20 43 6f 6e 76 65 72  ion UTF-8 Conver
0fd0: 73 69 6f 6e 20 46 75 6e 63 74 69 6f 6e 73 0d 0a  sion Functions..
0fe0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0ff0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65  >..    /// Conve
1000: 72 74 73 20 61 20 73 74 72 69 6e 67 20 74 6f 20  rts a string to 
1010: 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  a UTF-8 encoded 
1020: 62 79 74 65 20 61 72 72 61 79 20 73 69 7a 65 64  byte array sized
1030: 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 20 6e 75   to include a nu
1040: 6c 6c 2d 74 65 72 6d 69 6e 61 74 69 6e 67 20 63  ll-terminating c
1050: 68 61 72 61 63 74 65 72 2e 0d 0a 20 20 20 20 2f  haracter...    /
1060: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1070: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1080: 6d 65 3d 22 73 6f 75 72 63 65 54 65 78 74 22 3e  me="sourceText">
1090: 54 68 65 20 73 74 72 69 6e 67 20 74 6f 20 63 6f  The string to co
10a0: 6e 76 65 72 74 20 74 6f 20 55 54 46 2d 38 3c 2f  nvert to UTF-8</
10b0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
10c0: 3c 72 65 74 75 72 6e 73 3e 41 20 62 79 74 65 20  <returns>A byte 
10d0: 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67  array containing
10e0: 20 74 68 65 20 63 6f 6e 76 65 72 74 65 64 20 73   the converted s
10f0: 74 72 69 6e 67 20 70 6c 75 73 20 61 6e 20 65 78  tring plus an ex
1100: 74 72 61 20 30 20 74 65 72 6d 69 6e 61 74 69 6e  tra 0 terminatin
1110: 67 20 62 79 74 65 20 61 74 20 74 68 65 20 65 6e  g byte at the en
1120: 64 20 6f 66 20 74 68 65 20 61 72 72 61 79 2e 3c  d of the array.<
1130: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
1140: 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 79 74  ublic static byt
1150: 65 5b 5d 20 54 6f 55 54 46 38 28 73 74 72 69 6e  e[] ToUTF8(strin
1160: 67 20 73 6f 75 72 63 65 54 65 78 74 29 0d 0a 20  g sourceText).. 
1170: 20 20 20 7b 0d 0a 20 20 20 20 20 20 42 79 74 65     {..      Byte
1180: 5b 5d 20 62 79 74 65 41 72 72 61 79 3b 0d 0a 20  [] byteArray;.. 
1190: 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20       int nlen = 
11a0: 5f 75 74 66 38 2e 47 65 74 42 79 74 65 43 6f 75  _utf8.GetByteCou
11b0: 6e 74 28 73 6f 75 72 63 65 54 65 78 74 29 20 2b  nt(sourceText) +
11c0: 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 62 79 74   1;....      byt
11d0: 65 41 72 72 61 79 20 3d 20 6e 65 77 20 62 79 74  eArray = new byt
11e0: 65 5b 6e 6c 65 6e 5d 3b 0d 0a 20 20 20 20 20 20  e[nlen];..      
11f0: 6e 6c 65 6e 20 3d 20 5f 75 74 66 38 2e 47 65 74  nlen = _utf8.Get
1200: 42 79 74 65 73 28 73 6f 75 72 63 65 54 65 78 74  Bytes(sourceText
1210: 2c 20 30 2c 20 73 6f 75 72 63 65 54 65 78 74 2e  , 0, sourceText.
1220: 4c 65 6e 67 74 68 2c 20 62 79 74 65 41 72 72 61  Length, byteArra
1230: 79 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 62 79  y, 0);..      by
1240: 74 65 41 72 72 61 79 5b 6e 6c 65 6e 5d 20 3d 20  teArray[nlen] = 
1250: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  0;....      retu
1260: 72 6e 20 62 79 74 65 41 72 72 61 79 3b 0d 0a 20  rn byteArray;.. 
1270: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1280: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1290: 2f 2f 20 43 6f 6e 76 65 72 74 20 61 20 44 61 74  // Convert a Dat
12a0: 65 54 69 6d 65 20 74 6f 20 61 20 55 54 46 2d 38  eTime to a UTF-8
12b0: 20 65 6e 63 6f 64 65 64 2c 20 7a 65 72 6f 2d 74   encoded, zero-t
12c0: 65 72 6d 69 6e 61 74 65 64 20 62 79 74 65 20 61  erminated byte a
12d0: 72 72 61 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rray...    /// <
12e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
12f0: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  // <remarks>..  
1300: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
1310: 69 6f 6e 20 69 73 20 61 20 63 6f 6e 76 65 6e 69  ion is a conveni
1320: 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e 2c 20 77  ence function, w
1330: 68 69 63 68 20 66 69 72 73 74 20 63 61 6c 6c 73  hich first calls
1340: 20 54 6f 53 74 72 69 6e 67 28 29 20 6f 6e 20 74   ToString() on t
1350: 68 65 20 44 61 74 65 54 69 6d 65 2c 20 61 6e 64  he DateTime, and
1360: 20 74 68 65 6e 20 63 61 6c 6c 73 20 54 6f 55 54   then calls ToUT
1370: 46 38 28 29 20 77 69 74 68 20 74 68 65 0d 0a 20  F8() with the.. 
1380: 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 20 72 65     /// string re
1390: 73 75 6c 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sult...    /// <
13a0: 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f  /remarks>..    /
13b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
13c0: 64 61 74 65 54 69 6d 65 56 61 6c 75 65 22 3e 54  dateTimeValue">T
13d0: 68 65 20 44 61 74 65 54 69 6d 65 20 74 6f 20 63  he DateTime to c
13e0: 6f 6e 76 65 72 74 2e 3c 2f 70 61 72 61 6d 3e 0d  onvert.</param>.
13f0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1400: 73 3e 54 68 65 20 55 54 46 2d 38 20 65 6e 63 6f  s>The UTF-8 enco
1410: 64 65 64 20 73 74 72 69 6e 67 2c 20 69 6e 63 6c  ded string, incl
1420: 75 64 69 6e 67 20 61 20 30 20 74 65 72 6d 69 6e  uding a 0 termin
1430: 61 74 69 6e 67 20 62 79 74 65 20 61 74 20 74 68  ating byte at th
1440: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 61 72 72  e end of the arr
1450: 61 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ay.</returns>.. 
1460: 20 20 20 70 75 62 6c 69 63 20 62 79 74 65 5b 5d     public byte[]
1470: 20 54 6f 55 54 46 38 28 44 61 74 65 54 69 6d 65   ToUTF8(DateTime
1480: 20 64 61 74 65 54 69 6d 65 56 61 6c 75 65 29 0d   dateTimeValue).
1490: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
14a0: 74 75 72 6e 20 54 6f 55 54 46 38 28 54 6f 53 74  turn ToUTF8(ToSt
14b0: 72 69 6e 67 28 64 61 74 65 54 69 6d 65 56 61 6c  ring(dateTimeVal
14c0: 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue));..    }....
14d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
14e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65  >..    /// Conve
14f0: 72 74 73 20 61 20 55 54 46 2d 38 20 65 6e 63 6f  rts a UTF-8 enco
1500: 64 65 64 20 49 6e 74 50 74 72 20 6f 66 20 74 68  ded IntPtr of th
1510: 65 20 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67  e specified leng
1520: 74 68 20 69 6e 74 6f 20 61 20 2e 4e 45 54 20 73  th into a .NET s
1530: 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tring..    /// <
1540: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1550: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1560: 6e 61 74 69 76 65 73 74 72 69 6e 67 22 3e 54 68  nativestring">Th
1570: 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
1580: 20 6d 65 6d 6f 72 79 20 77 68 65 72 65 20 74 68   memory where th
1590: 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 69  e UTF-8 string i
15a0: 73 20 65 6e 63 6f 64 65 64 3c 2f 70 61 72 61 6d  s encoded</param
15b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
15c0: 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73 74  m name="nativest
15d0: 72 69 6e 67 6c 65 6e 22 3e 54 68 65 20 6e 75 6d  ringlen">The num
15e0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20  ber of bytes to 
15f0: 64 65 63 6f 64 65 3c 2f 70 61 72 61 6d 3e 0d 0a  decode</param>..
1600: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1610: 3e 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  >A string contai
1620: 6e 69 6e 67 20 74 68 65 20 74 72 61 6e 73 6c 61  ning the transla
1630: 74 65 64 20 63 68 61 72 61 63 74 65 72 28 73 29  ted character(s)
1640: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1650: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73  public virtual s
1660: 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 49  tring ToString(I
1670: 6e 74 50 74 72 20 6e 61 74 69 76 65 73 74 72 69  ntPtr nativestri
1680: 6e 67 2c 20 69 6e 74 20 6e 61 74 69 76 65 73 74  ng, int nativest
1690: 72 69 6e 67 6c 65 6e 29 0d 0a 20 20 20 20 7b 0d  ringlen)..    {.
16a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
16b0: 46 38 54 6f 53 74 72 69 6e 67 28 6e 61 74 69 76  F8ToString(nativ
16c0: 65 73 74 72 69 6e 67 2c 20 6e 61 74 69 76 65 73  estring, natives
16d0: 74 72 69 6e 67 6c 65 6e 29 3b 0d 0a 20 20 20 20  tringlen);..    
16e0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
16f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1700: 43 6f 6e 76 65 72 74 73 20 61 20 55 54 46 2d 38  Converts a UTF-8
1710: 20 65 6e 63 6f 64 65 64 20 49 6e 74 50 74 72 20   encoded IntPtr 
1720: 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  of the specified
1730: 20 6c 65 6e 67 74 68 20 69 6e 74 6f 20 61 20 2e   length into a .
1740: 4e 45 54 20 73 74 72 69 6e 67 0d 0a 20 20 20 20  NET string..    
1750: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1760: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1770: 61 6d 65 3d 22 6e 61 74 69 76 65 73 74 72 69 6e  ame="nativestrin
1780: 67 22 3e 54 68 65 20 70 6f 69 6e 74 65 72 20 74  g">The pointer t
1790: 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 77 68 65  o the memory whe
17a0: 72 65 20 74 68 65 20 55 54 46 2d 38 20 73 74 72  re the UTF-8 str
17b0: 69 6e 67 20 69 73 20 65 6e 63 6f 64 65 64 3c 2f  ing is encoded</
17c0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
17d0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 74  <param name="nat
17e0: 69 76 65 73 74 72 69 6e 67 6c 65 6e 22 3e 54 68  ivestringlen">Th
17f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
1800: 73 20 74 6f 20 64 65 63 6f 64 65 3c 2f 70 61 72  s to decode</par
1810: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1820: 74 75 72 6e 73 3e 41 20 73 74 72 69 6e 67 20 63  turns>A string c
1830: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
1840: 61 6e 73 6c 61 74 65 64 20 63 68 61 72 61 63 74  anslated charact
1850: 65 72 28 73 29 3c 2f 72 65 74 75 72 6e 73 3e 0d  er(s)</returns>.
1860: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74  .    public stat
1870: 69 63 20 73 74 72 69 6e 67 20 55 54 46 38 54 6f  ic string UTF8To
1880: 53 74 72 69 6e 67 28 49 6e 74 50 74 72 20 6e 61  String(IntPtr na
1890: 74 69 76 65 73 74 72 69 6e 67 2c 20 69 6e 74 20  tivestring, int 
18a0: 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29  nativestringlen)
18b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
18c0: 66 20 28 6e 61 74 69 76 65 73 74 72 69 6e 67 20  f (nativestring 
18d0: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 20 7c  == IntPtr.Zero |
18e0: 7c 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65  | nativestringle
18f0: 6e 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 53  n == 0) return S
1900: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20  tring.Empty;..  
1910: 20 20 20 20 69 66 20 28 6e 61 74 69 76 65 73 74      if (nativest
1920: 72 69 6e 67 6c 65 6e 20 3c 20 30 29 0d 0a 20 20  ringlen < 0)..  
1930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6e      {..        n
1940: 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 20 3d  ativestringlen =
1950: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 77   0;....        w
1960: 68 69 6c 65 20 28 4d 61 72 73 68 61 6c 2e 52 65  hile (Marshal.Re
1970: 61 64 42 79 74 65 28 6e 61 74 69 76 65 73 74 72  adByte(nativestr
1980: 69 6e 67 2c 20 6e 61 74 69 76 65 73 74 72 69 6e  ing, nativestrin
1990: 67 6c 65 6e 29 20 21 3d 20 30 29 0d 0a 20 20 20  glen) != 0)..   
19a0: 20 20 20 20 20 20 20 6e 61 74 69 76 65 73 74 72         nativestr
19b0: 69 6e 67 6c 65 6e 2b 2b 3b 0d 0a 0d 0a 20 20 20  inglen++;....   
19c0: 20 20 20 20 20 69 66 20 28 6e 61 74 69 76 65 73       if (natives
19d0: 74 72 69 6e 67 6c 65 6e 20 3d 3d 20 30 29 20 72  tringlen == 0) r
19e0: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70  eturn String.Emp
19f0: 74 79 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ty;..      }....
1a00: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74        byte[] byt
1a10: 65 41 72 72 61 79 20 3d 20 6e 65 77 20 62 79 74  eArray = new byt
1a20: 65 5b 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65  e[nativestringle
1a30: 6e 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 4d 61 72  n];....      Mar
1a40: 73 68 61 6c 2e 43 6f 70 79 28 6e 61 74 69 76 65  shal.Copy(native
1a50: 73 74 72 69 6e 67 2c 20 62 79 74 65 41 72 72 61  string, byteArra
1a60: 79 2c 20 30 2c 20 6e 61 74 69 76 65 73 74 72 69  y, 0, nativestri
1a70: 6e 67 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  nglen);....     
1a80: 20 72 65 74 75 72 6e 20 5f 75 74 66 38 2e 47 65   return _utf8.Ge
1a90: 74 53 74 72 69 6e 67 28 62 79 74 65 41 72 72 61  tString(byteArra
1aa0: 79 2c 20 30 2c 20 6e 61 74 69 76 65 73 74 72 69  y, 0, nativestri
1ab0: 6e 67 6c 65 6e 29 3b 0d 0a 20 20 20 20 7d 0d 0a  nglen);..    }..
1ac0: 0d 0a 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  ....    #endregi
1ad0: 6f 6e 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  on....    #regio
1ae0: 6e 20 44 61 74 65 54 69 6d 65 20 43 6f 6e 76 65  n DateTime Conve
1af0: 72 73 69 6f 6e 20 46 75 6e 63 74 69 6f 6e 73 0d  rsion Functions.
1b00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1b10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76  y>..    /// Conv
1b20: 65 72 74 73 20 61 20 73 74 72 69 6e 67 20 69 6e  erts a string in
1b30: 74 6f 20 61 20 44 61 74 65 54 69 6d 65 2c 20 75  to a DateTime, u
1b40: 73 69 6e 67 20 74 68 65 20 44 61 74 65 54 69 6d  sing the DateTim
1b50: 65 46 6f 72 6d 61 74 2c 20 44 61 74 65 54 69 6d  eFormat, DateTim
1b60: 65 4b 69 6e 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20  eKind,..    /// 
1b70: 61 6e 64 20 44 61 74 65 54 69 6d 65 46 6f 72 6d  and DateTimeForm
1b80: 61 74 53 74 72 69 6e 67 20 73 70 65 63 69 66 69  atString specifi
1b90: 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65  ed for the conne
1ba0: 63 74 69 6f 6e 20 77 68 65 6e 20 69 74 20 77 61  ction when it wa
1bb0: 73 20 6f 70 65 6e 65 64 2e 0d 0a 20 20 20 20 2f  s opened...    /
1bc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1bd0: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
1be0: 0d 0a 20 20 20 20 2f 2f 2f 20 41 63 63 65 70 74  ..    /// Accept
1bf0: 61 62 6c 65 20 49 53 4f 38 36 30 31 20 44 61 74  able ISO8601 Dat
1c00: 65 54 69 6d 65 20 66 6f 72 6d 61 74 73 20 61 72  eTime formats ar
1c10: 65 3a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73  e:..    /// <lis
1c20: 74 20 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e  t type="bullet">
1c30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
1c40: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48  <description>THH
1c50: 6d 6d 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69  mmssK</descripti
1c60: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
1c70: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
1c80: 69 70 74 69 6f 6e 3e 54 48 48 6d 6d 4b 3c 2f 64  iption>THHmmK</d
1c90: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
1ca0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
1cb0: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48  m><description>H
1cc0: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
1cd0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
1ce0: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
1cf0: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
1d00: 6e 3e 48 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73  n>HH:mm:ssK</des
1d10: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
1d20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
1d30: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a  <description>HH:
1d40: 6d 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  mmK</description
1d50: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
1d60: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
1d70: 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20  tion>yyyy-MM-dd 
1d80: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
1d90: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1da0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1db0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1dc0: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48  on>yyyy-MM-dd HH
1dd0: 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69 70  :mm:ssK</descrip
1de0: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
1df0: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
1e00: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d  cription>yyyy-MM
1e10: 2d 64 64 20 48 48 3a 6d 6d 4b 3c 2f 64 65 73 63  -dd HH:mmK</desc
1e20: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1e30: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1e40: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
1e50: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e  -MM-ddTHH:mm:ss.
1e60: 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72 69  FFFFFFFK</descri
1e70: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
1e80: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
1e90: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
1ea0: 4d 2d 64 64 54 48 48 3a 6d 6d 4b 3c 2f 64 65 73  M-ddTHH:mmK</des
1eb0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
1ec0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
1ed0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
1ee0: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
1ef0: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1f00: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1f10: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1f20: 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73  on>yyyyMMddHHmms
1f30: 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  sK</description>
1f40: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
1f50: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
1f60: 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d  ion>yyyyMMddHHmm
1f70: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
1f80: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
1f90: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
1fa0: 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d  on>yyyyMMddTHHmm
1fb0: 73 73 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63  ssFFFFFFFK</desc
1fc0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
1fd0: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
1fe0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48 6d  description>THHm
1ff0: 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  mss</description
2000: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2010: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2020: 74 69 6f 6e 3e 54 48 48 6d 6d 3c 2f 64 65 73 63  tion>THHmm</desc
2030: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2040: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2050: 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d  description>HH:m
2060: 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65  m:ss.FFFFFFF</de
2070: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2080: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2090: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48  ><description>HH
20a0: 3a 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74  :mm:ss</descript
20b0: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
20c0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
20d0: 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3c 2f 64  ription>HH:mm</d
20e0: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
20f0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
2100: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79  m><description>y
2110: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a  yyy-MM-dd HH:mm:
2120: 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73 63  ss.FFFFFFF</desc
2130: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d  ription></item>.
2140: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2150: 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79  description>yyyy
2160: 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 3c  -MM-dd HH:mm:ss<
2170: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2180: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2190: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
21a0: 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d  >yyyy-MM-dd HH:m
21b0: 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  m</description><
21c0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
21d0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
21e0: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  on>yyyy-MM-ddTHH
21f0: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f  :mm:ss.FFFFFFF</
2200: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
2210: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
2220: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
2230: 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d  yyyy-MM-ddTHH:mm
2240: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2250: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2260: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2270: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  n>yyyy-MM-ddTHH:
2280: 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74 69  mm:ss</descripti
2290: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
22a0: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
22b0: 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48  iption>yyyyMMddH
22c0: 48 6d 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69  Hmmss</descripti
22d0: 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  on></item>..    
22e0: 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72  /// <item><descr
22f0: 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48  iption>yyyyMMddH
2300: 48 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  Hmm</description
2310: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2320: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2330: 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48  tion>yyyyMMddTHH
2340: 6d 6d 73 73 46 46 46 46 46 46 46 3c 2f 64 65 73  mmssFFFFFFF</des
2350: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2360: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2370: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
2380: 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63 72 69 70  y-MM-dd</descrip
2390: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
23a0: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
23b0: 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64  cription>yyyyMMd
23c0: 64 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  d</description><
23d0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
23e0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
23f0: 6f 6e 3e 79 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73  on>yy-MM-dd</des
2400: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2410: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73 74  ..    /// </list
2420: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68  >..    /// If th
2430: 65 20 73 74 72 69 6e 67 20 63 61 6e 6e 6f 74 20  e string cannot 
2440: 62 65 20 6d 61 74 63 68 65 64 20 74 6f 20 6f 6e  be matched to on
2450: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 66  e of the above f
2460: 6f 72 6d 61 74 73 20 2d 4f 52 2d 0d 0a 20 20 20  ormats -OR-..   
2470: 20 2f 2f 2f 20 74 68 65 20 44 61 74 65 54 69 6d   /// the DateTim
2480: 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 20 69 66  eFormatString if
2490: 20 6f 6e 65 20 77 61 73 20 70 72 6f 76 69 64 65   one was provide
24a0: 64 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  d, an exception 
24b0: 77 69 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  will..    /// be
24c0: 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f 2f   thrown...    //
24d0: 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  / </remarks>..  
24e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
24f0: 65 3d 22 64 61 74 65 54 65 78 74 22 3e 54 68 65  e="dateText">The
2500: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
2510: 6e 67 20 65 69 74 68 65 72 20 61 20 6c 6f 6e 67  ng either a long
2520: 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20   integer number 
2530: 6f 66 20 31 30 30 2d 6e 61 6e 6f 73 65 63 6f 6e  of 100-nanosecon
2540: 64 20 75 6e 69 74 73 20 73 69 6e 63 65 0d 0a 20  d units since.. 
2550: 20 20 20 2f 2f 2f 20 53 79 73 74 65 6d 2e 44 61     /// System.Da
2560: 74 65 54 69 6d 65 2e 4d 69 6e 56 61 6c 75 65 2c  teTime.MinValue,
2570: 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 64 6f   a Julian day do
2580: 75 62 6c 65 2c 20 61 6e 20 69 6e 74 65 67 65 72  uble, an integer
2590: 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e   number of secon
25a0: 64 73 20 73 69 6e 63 65 20 74 68 65 20 55 6e 69  ds since the Uni
25b0: 78 20 65 70 6f 63 68 2c 20 61 0d 0a 20 20 20 20  x epoch, a..    
25c0: 2f 2f 2f 20 63 75 6c 74 75 72 65 2d 69 6e 64 65  /// culture-inde
25d0: 70 65 6e 64 65 6e 74 20 66 6f 72 6d 61 74 74 65  pendent formatte
25e0: 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  d date and time 
25f0: 73 74 72 69 6e 67 2c 20 61 20 66 6f 72 6d 61 74  string, a format
2600: 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d  ted date and tim
2610: 65 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  e string in the 
2620: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 2f 2f 2f  current..    ///
2630: 20 63 75 6c 74 75 72 65 2c 20 6f 72 20 61 6e 20   culture, or an 
2640: 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61 74 20 73  ISO8601-format s
2650: 74 72 69 6e 67 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  tring.</param>..
2660: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
2670: 3e 41 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75  >A DateTime valu
2680: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
2690: 20 70 75 62 6c 69 63 20 44 61 74 65 54 69 6d 65   public DateTime
26a0: 20 54 6f 44 61 74 65 54 69 6d 65 28 73 74 72 69   ToDateTime(stri
26b0: 6e 67 20 64 61 74 65 54 65 78 74 29 0d 0a 20 20  ng dateText)..  
26c0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
26d0: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 64 61 74  n ToDateTime(dat
26e0: 65 54 65 78 74 2c 20 5f 64 61 74 65 74 69 6d 65  eText, _datetime
26f0: 46 6f 72 6d 61 74 2c 20 5f 64 61 74 65 74 69 6d  Format, _datetim
2700: 65 4b 69 6e 64 2c 20 5f 64 61 74 65 74 69 6d 65  eKind, _datetime
2710: 46 6f 72 6d 61 74 53 74 72 69 6e 67 29 3b 0d 0a  FormatString);..
2720: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
2730: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2740: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 73  /// Converts a s
2750: 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 44 61 74  tring into a Dat
2760: 65 54 69 6d 65 2c 20 75 73 69 6e 67 20 74 68 65  eTime, using the
2770: 20 73 70 65 63 69 66 69 65 64 20 44 61 74 65 54   specified DateT
2780: 69 6d 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  imeFormat,..    
2790: 2f 2f 2f 20 44 61 74 65 54 69 6d 65 4b 69 6e 64  /// DateTimeKind
27a0: 20 61 6e 64 20 44 61 74 65 54 69 6d 65 46 6f 72   and DateTimeFor
27b0: 6d 61 74 53 74 72 69 6e 67 2e 0d 0a 20 20 20 20  matString...    
27c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
27d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
27e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 63 63 65 70  >..    /// Accep
27f0: 74 61 62 6c 65 20 49 53 4f 38 36 30 31 20 44 61  table ISO8601 Da
2800: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 73 20 61  teTime formats a
2810: 72 65 3a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69  re:..    /// <li
2820: 73 74 20 74 79 70 65 3d 22 62 75 6c 6c 65 74 22  st type="bullet"
2830: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2840: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48  ><description>TH
2850: 48 6d 6d 73 73 4b 3c 2f 64 65 73 63 72 69 70 74  HmmssK</descript
2860: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
2870: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2880: 72 69 70 74 69 6f 6e 3e 54 48 48 6d 6d 4b 3c 2f  ription>THHmmK</
2890: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
28a0: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
28b0: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
28c0: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
28d0: 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  K</description><
28e0: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
28f0: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2900: 6f 6e 3e 48 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65  on>HH:mm:ssK</de
2910: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2920: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2930: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48  ><description>HH
2940: 3a 6d 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f  :mmK</descriptio
2950: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
2960: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2970: 70 74 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64  ption>yyyy-MM-dd
2980: 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46   HH:mm:ss.FFFFFF
2990: 46 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  FK</description>
29a0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
29b0: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
29c0: 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48  ion>yyyy-MM-dd H
29d0: 48 3a 6d 6d 3a 73 73 4b 3c 2f 64 65 73 63 72 69  H:mm:ssK</descri
29e0: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
29f0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2a00: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d 4d  scription>yyyy-M
2a10: 4d 2d 64 64 20 48 48 3a 6d 6d 4b 3c 2f 64 65 73  M-dd HH:mmK</des
2a20: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2a30: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2a40: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
2a50: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
2a60: 2e 46 46 46 46 46 46 46 4b 3c 2f 64 65 73 63 72  .FFFFFFFK</descr
2a70: 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a  iption></item>..
2a80: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
2a90: 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 2d  escription>yyyy-
2aa0: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 4b 3c 2f 64 65  MM-ddTHH:mmK</de
2ab0: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2ac0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2ad0: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
2ae0: 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73  yy-MM-ddTHH:mm:s
2af0: 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  sK</description>
2b00: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2b10: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2b20: 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d 6d  ion>yyyyMMddHHmm
2b30: 73 73 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  ssK</description
2b40: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
2b50: 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70  / <item><descrip
2b60: 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 48 48 6d  tion>yyyyMMddHHm
2b70: 6d 4b 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  mK</description>
2b80: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2b90: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2ba0: 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48 48 6d  ion>yyyyMMddTHHm
2bb0: 6d 73 73 46 46 46 46 46 46 46 4b 3c 2f 64 65 73  mssFFFFFFFK</des
2bc0: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2bd0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2be0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 54 48 48  <description>THH
2bf0: 6d 6d 73 73 3c 2f 64 65 73 63 72 69 70 74 69 6f  mmss</descriptio
2c00: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
2c10: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2c20: 70 74 69 6f 6e 3e 54 48 48 6d 6d 3c 2f 64 65 73  ption>THHmm</des
2c30: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2c40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2c50: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 48 3a  <description>HH:
2c60: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64  mm:ss.FFFFFFF</d
2c70: 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65  escription></ite
2c80: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  m>..    /// <ite
2c90: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 48  m><description>H
2ca0: 48 3a 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70  H:mm:ss</descrip
2cb0: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20  tion></item>..  
2cc0: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73    /// <item><des
2cd0: 63 72 69 70 74 69 6f 6e 3e 48 48 3a 6d 6d 3c 2f  cription>HH:mm</
2ce0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74  description></it
2cf0: 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74  em>..    /// <it
2d00: 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  em><description>
2d10: 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d  yyyy-MM-dd HH:mm
2d20: 3a 73 73 2e 46 46 46 46 46 46 46 3c 2f 64 65 73  :ss.FFFFFFF</des
2d30: 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e  cription></item>
2d40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  ..    /// <item>
2d50: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79 79  <description>yyy
2d60: 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73  y-MM-dd HH:mm:ss
2d70: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f  </description></
2d80: 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
2d90: 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f  item><descriptio
2da0: 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a  n>yyyy-MM-dd HH:
2db0: 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  mm</description>
2dc0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2dd0: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2de0: 69 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48  ion>yyyy-MM-ddTH
2df0: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 3c  H:mm:ss.FFFFFFF<
2e00: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69  /description></i
2e10: 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
2e20: 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e  tem><description
2e30: 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d  >yyyy-MM-ddTHH:m
2e40: 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c  m</description><
2e50: 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
2e60: 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74 69  <item><descripti
2e70: 6f 6e 3e 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48  on>yyyy-MM-ddTHH
2e80: 3a 6d 6d 3a 73 73 3c 2f 64 65 73 63 72 69 70 74  :mm:ss</descript
2e90: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
2ea0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2eb0: 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64  ription>yyyyMMdd
2ec0: 48 48 6d 6d 73 73 3c 2f 64 65 73 63 72 69 70 74  HHmmss</descript
2ed0: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
2ee0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2ef0: 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64  ription>yyyyMMdd
2f00: 48 48 6d 6d 3c 2f 64 65 73 63 72 69 70 74 69 6f  HHmm</descriptio
2f10: 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f  n></item>..    /
2f20: 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69  // <item><descri
2f30: 70 74 69 6f 6e 3e 79 79 79 79 4d 4d 64 64 54 48  ption>yyyyMMddTH
2f40: 48 6d 6d 73 73 46 46 46 46 46 46 46 3c 2f 64 65  HmmssFFFFFFF</de
2f50: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
2f60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
2f70: 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 79 79  ><description>yy
2f80: 79 79 2d 4d 4d 2d 64 64 3c 2f 64 65 73 63 72 69  yy-MM-dd</descri
2f90: 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20  ption></item>.. 
2fa0: 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65     /// <item><de
2fb0: 73 63 72 69 70 74 69 6f 6e 3e 79 79 79 79 4d 4d  scription>yyyyMM
2fc0: 64 64 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  dd</description>
2fd0: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
2fe0: 20 3c 69 74 65 6d 3e 3c 64 65 73 63 72 69 70 74   <item><descript
2ff0: 69 6f 6e 3e 79 79 2d 4d 4d 2d 64 64 3c 2f 64 65  ion>yy-MM-dd</de
3000: 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d  scription></item
3010: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69 73  >..    /// </lis
3020: 74 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74  t>..    /// If t
3030: 68 65 20 73 74 72 69 6e 67 20 63 61 6e 6e 6f 74  he string cannot
3040: 20 62 65 20 6d 61 74 63 68 65 64 20 74 6f 20 6f   be matched to o
3050: 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ne of the above 
3060: 66 6f 72 6d 61 74 73 20 2d 4f 52 2d 0d 0a 20 20  formats -OR-..  
3070: 20 20 2f 2f 2f 20 74 68 65 20 44 61 74 65 54 69    /// the DateTi
3080: 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 20 69  meFormatString i
3090: 66 20 6f 6e 65 20 77 61 73 20 70 72 6f 76 69 64  f one was provid
30a0: 65 64 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  ed, an exception
30b0: 20 77 69 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 62   will..    /// b
30c0: 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 20 20 2f  e thrown...    /
30d0: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
30e0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
30f0: 6d 65 3d 22 64 61 74 65 54 65 78 74 22 3e 54 68  me="dateText">Th
3100: 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  e string contain
3110: 69 6e 67 20 65 69 74 68 65 72 20 61 20 6c 6f 6e  ing either a lon
3120: 67 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  g integer number
3130: 20 6f 66 20 31 30 30 2d 6e 61 6e 6f 73 65 63 6f   of 100-nanoseco
3140: 6e 64 20 75 6e 69 74 73 20 73 69 6e 63 65 0d 0a  nd units since..
3150: 20 20 20 20 2f 2f 2f 20 53 79 73 74 65 6d 2e 44      /// System.D
3160: 61 74 65 54 69 6d 65 2e 4d 69 6e 56 61 6c 75 65  ateTime.MinValue
3170: 2c 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 64  , a Julian day d
3180: 6f 75 62 6c 65 2c 20 61 6e 20 69 6e 74 65 67 65  ouble, an intege
3190: 72 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f  r number of seco
31a0: 6e 64 73 20 73 69 6e 63 65 20 74 68 65 20 55 6e  nds since the Un
31b0: 69 78 20 65 70 6f 63 68 2c 20 61 0d 0a 20 20 20  ix epoch, a..   
31c0: 20 2f 2f 2f 20 63 75 6c 74 75 72 65 2d 69 6e 64   /// culture-ind
31d0: 65 70 65 6e 64 65 6e 74 20 66 6f 72 6d 61 74 74  ependent formatt
31e0: 65 64 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ed date and time
31f0: 20 73 74 72 69 6e 67 2c 20 61 20 66 6f 72 6d 61   string, a forma
3200: 74 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69  tted date and ti
3210: 6d 65 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65  me string in the
3220: 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 2f 2f   current..    //
3230: 2f 20 63 75 6c 74 75 72 65 2c 20 6f 72 20 61 6e  / culture, or an
3240: 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61 74 20   ISO8601-format 
3250: 73 74 72 69 6e 67 2e 3c 2f 70 61 72 61 6d 3e 0d  string.</param>.
3260: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
3270: 6e 61 6d 65 3d 22 66 6f 72 6d 61 74 22 3e 54 68  name="format">Th
3280: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
3290: 61 74 73 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72  ats to use.</par
32a0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
32b0: 72 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e  ram name="kind">
32c0: 54 68 65 20 44 61 74 65 54 69 6d 65 4b 69 6e 64  The DateTimeKind
32d0: 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e   to use.</param>
32e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
32f0: 20 6e 61 6d 65 3d 22 66 6f 72 6d 61 74 53 74 72   name="formatStr
3300: 69 6e 67 22 3e 54 68 65 20 44 61 74 65 54 69 6d  ing">The DateTim
3310: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
3320: 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  to use.</param>.
3330: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3340: 73 3e 41 20 44 61 74 65 54 69 6d 65 20 76 61 6c  s>A DateTime val
3350: 75 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  ue</returns>..  
3360: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3370: 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54  DateTime ToDateT
3380: 69 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 73 74  ime(..        st
3390: 72 69 6e 67 20 64 61 74 65 54 65 78 74 2c 0d 0a  ring dateText,..
33a0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 61          SQLiteDa
33b0: 74 65 46 6f 72 6d 61 74 73 20 66 6f 72 6d 61 74  teFormats format
33c0: 2c 0d 0a 20 20 20 20 20 20 20 20 44 61 74 65 54  ,..        DateT
33d0: 69 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20  imeKind kind,.. 
33e0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f         string fo
33f0: 72 6d 61 74 53 74 72 69 6e 67 0d 0a 20 20 20 20  rmatString..    
3400: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
3410: 20 20 20 20 20 20 73 77 69 74 63 68 20 28 66 6f        switch (fo
3420: 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  rmat)..        {
3430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
3440: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
3450: 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20  mats.Ticks:..   
3460: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
3490: 65 54 69 6d 65 28 43 6f 6e 76 65 72 74 2e 54 6f  eTime(Convert.To
34a0: 49 6e 74 36 34 28 0d 0a 20 20 20 20 20 20 20 20  Int64(..        
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 64 61 74 65 54 65 78 74 2c 20 43 75 6c 74 75 72  dateText, Cultur
34d0: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
34e0: 75 6c 74 75 72 65 29 2c 20 6b 69 6e 64 29 3b 0d  ulture), kind);.
34f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3500: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3510: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
3520: 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44 61 79  ormats.JulianDay
3530: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
3540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3550: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3560: 20 54 6f 44 61 74 65 54 69 6d 65 28 43 6f 6e 76   ToDateTime(Conv
3570: 65 72 74 2e 54 6f 44 6f 75 62 6c 65 28 0d 0a 20  ert.ToDouble(.. 
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 20 20 20 20 20 64 61 74 65 54 65 78 74 2c         dateText,
35a0: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76   CultureInfo.Inv
35b0: 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 2c 20  ariantCulture), 
35c0: 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  kind);..        
35d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35e0: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
35f0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e  teDateFormats.Un
3600: 69 78 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20  ixEpoch:..      
3610: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3630: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
3640: 6d 65 28 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74  me(Convert.ToInt
3650: 33 32 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  32(..           
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
3670: 65 54 65 78 74 2c 20 43 75 6c 74 75 72 65 49 6e  eText, CultureIn
3680: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
3690: 75 72 65 29 2c 20 6b 69 6e 64 29 3b 0d 0a 20 20  ure), kind);..  
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
36b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
36c0: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
36d0: 61 74 73 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  ats.InvariantCul
36e0: 74 75 72 65 3a 0d 0a 20 20 20 20 20 20 20 20 20  ture:..         
36f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3710: 20 28 66 6f 72 6d 61 74 53 74 72 69 6e 67 20 21   (formatString !
3720: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3740: 20 72 65 74 75 72 6e 20 44 61 74 65 54 69 6d 65   return DateTime
3750: 2e 53 70 65 63 69 66 79 4b 69 6e 64 28 44 61 74  .SpecifyKind(Dat
3760: 65 54 69 6d 65 2e 50 61 72 73 65 45 78 61 63 74  eTime.ParseExact
3770: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
3790: 61 74 65 54 65 78 74 2c 20 66 6f 72 6d 61 74 53  ateText, formatS
37a0: 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  tring,..        
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 20 20 20 20 44 61 74 65 54 69 6d 65 46 6f 72 6d      DateTimeForm
37d0: 61 74 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  atInfo.Invariant
37e0: 49 6e 66 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20  Info,..         
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 20 20 20 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54     kind == DateT
3810: 69 6d 65 4b 69 6e 64 2e 55 74 63 20 3f 0d 0a 20  imeKind.Utc ?.. 
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
3840: 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 41 64  ateTimeStyles.Ad
3850: 6a 75 73 74 54 6f 55 6e 69 76 65 72 73 61 6c 20  justToUniversal 
3860: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
3870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3880: 20 20 20 44 61 74 65 54 69 6d 65 53 74 79 6c 65     DateTimeStyle
3890: 73 2e 4e 6f 6e 65 29 2c 0d 0a 20 20 20 20 20 20  s.None),..      
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38b0: 20 20 20 20 20 20 6b 69 6e 64 29 3b 0d 0a 20 20        kind);..  
38c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38d0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38f0: 72 65 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e  return DateTime.
3900: 53 70 65 63 69 66 79 4b 69 6e 64 28 44 61 74 65  SpecifyKind(Date
3910: 54 69 6d 65 2e 50 61 72 73 65 28 0d 0a 20 20 20  Time.Parse(..   
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3930: 20 20 20 20 20 20 20 20 20 64 61 74 65 54 65 78           dateTex
3940: 74 2c 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  t, DateTimeForma
3950: 74 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 49  tInfo.InvariantI
3960: 6e 66 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nfo,..          
3970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3980: 20 20 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69    kind == DateTi
3990: 6d 65 4b 69 6e 64 2e 55 74 63 20 3f 0d 0a 20 20  meKind.Utc ?..  
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
39c0: 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 41 64 6a  teTimeStyles.Adj
39d0: 75 73 74 54 6f 55 6e 69 76 65 72 73 61 6c 20 3a  ustToUniversal :
39e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a00: 20 20 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73    DateTimeStyles
3a10: 2e 4e 6f 6e 65 29 2c 0d 0a 20 20 20 20 20 20 20  .None),..       
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a30: 20 20 20 20 20 6b 69 6e 64 29 3b 0d 0a 20 20 20       kind);..   
3a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3a50: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
3a60: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
3a70: 74 73 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  ts.CurrentCultur
3a80: 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e:..            
3a90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3aa0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
3ab0: 6f 72 6d 61 74 53 74 72 69 6e 67 20 21 3d 20 6e  ormatString != n
3ac0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3ae0: 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e 53 70  turn DateTime.Sp
3af0: 65 63 69 66 79 4b 69 6e 64 28 44 61 74 65 54 69  ecifyKind(DateTi
3b00: 6d 65 2e 50 61 72 73 65 45 78 61 63 74 28 0d 0a  me.ParseExact(..
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 65              date
3b30: 54 65 78 74 2c 20 66 6f 72 6d 61 74 53 74 72 69  Text, formatStri
3b40: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 49   DateTimeFormatI
3b70: 6e 66 6f 2e 43 75 72 72 65 6e 74 49 6e 66 6f 2c  nfo.CurrentInfo,
3b80: 0d 0a 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 20 20 6b 69                ki
3ba0: 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69  nd == DateTimeKi
3bb0: 6e 64 2e 55 74 63 20 3f 0d 0a 20 20 20 20 20 20  nd.Utc ?..      
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 44 61 74 65 54 69            DateTi
3be0: 6d 65 53 74 79 6c 65 73 2e 41 64 6a 75 73 74 54  meStyles.AdjustT
3bf0: 6f 55 6e 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20  oUniversal :..  
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
3c20: 74 65 54 69 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e  teTimeStyles.Non
3c30: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
3c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c50: 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20   kind);..       
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
3c70: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
3c80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3c90: 6e 20 44 61 74 65 54 69 6d 65 2e 53 70 65 63 69  n DateTime.Speci
3ca0: 66 79 4b 69 6e 64 28 44 61 74 65 54 69 6d 65 2e  fyKind(DateTime.
3cb0: 50 61 72 73 65 28 0d 0a 20 20 20 20 20 20 20 20  Parse(..        
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cd0: 20 20 20 20 64 61 74 65 54 65 78 74 2c 20 44 61      dateText, Da
3ce0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66 6f  teTimeFormatInfo
3cf0: 2e 43 75 72 72 65 6e 74 49 6e 66 6f 2c 0d 0a 20  .CurrentInfo,.. 
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20             kind 
3d20: 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  == DateTimeKind.
3d30: 55 74 63 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  Utc ?..         
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 53         DateTimeS
3d60: 74 79 6c 65 73 2e 41 64 6a 75 73 74 54 6f 55 6e  tyles.AdjustToUn
3d70: 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20 20 20 20  iversal :..     
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54             DateT
3da0: 69 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c  imeStyles.None),
3db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69                ki
3dd0: 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd);..          
3de0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3df0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 2f 2a       default: /*
3e00: 20 49 53 4f 2d 38 36 30 31 20 2a 2f 0d 0a 20 20   ISO-8601 */..  
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e30: 20 20 20 20 20 69 66 20 28 66 6f 72 6d 61 74 53       if (formatS
3e40: 74 72 69 6e 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a  tring != null)..
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
3e70: 61 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b  ateTime.SpecifyK
3e80: 69 6e 64 28 44 61 74 65 54 69 6d 65 2e 50 61 72  ind(DateTime.Par
3e90: 73 65 45 78 61 63 74 28 0d 0a 20 20 20 20 20 20  seExact(..      
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 20 20 20 20 64 61 74 65 54 65 78 74 2c 20        dateText, 
3ec0: 66 6f 72 6d 61 74 53 74 72 69 6e 67 2c 0d 0a 20  formatString,.. 
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ee0: 20 20 20 20 20 20 20 20 20 20 20 44 61 74 65 54             DateT
3ef0: 69 6d 65 46 6f 72 6d 61 74 49 6e 66 6f 2e 49 6e  imeFormatInfo.In
3f00: 76 61 72 69 61 6e 74 49 6e 66 6f 2c 0d 0a 20 20  variantInfo,..  
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f20: 20 20 20 20 20 20 20 20 20 20 6b 69 6e 64 20 3d            kind =
3f30: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
3f40: 74 63 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  tc ?..          
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 53 74        DateTimeSt
3f70: 79 6c 65 73 2e 41 64 6a 75 73 74 54 6f 55 6e 69  yles.AdjustToUni
3f80: 76 65 72 73 61 6c 20 3a 0d 0a 20 20 20 20 20 20  versal :..      
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 44 61 74 65 54 69            DateTi
3fb0: 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 2c 0d  meStyles.None),.
3fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e               kin
3fe0: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3ff0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61         return Da
4020: 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69  teTime.SpecifyKi
4030: 6e 64 28 44 61 74 65 54 69 6d 65 2e 50 61 72 73  nd(DateTime.Pars
4040: 65 45 78 61 63 74 28 0d 0a 20 20 20 20 20 20 20  eExact(..       
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4060: 20 20 20 20 20 64 61 74 65 54 65 78 74 2c 20 5f       dateText, _
4070: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 73 2c  datetimeFormats,
4080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
40a0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66 6f  teTimeFormatInfo
40b0: 2e 49 6e 76 61 72 69 61 6e 74 49 6e 66 6f 2c 0d  .InvariantInfo,.
40c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6e               kin
40e0: 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e  d == DateTimeKin
40f0: 64 2e 55 74 63 20 3f 0d 0a 20 20 20 20 20 20 20  d.Utc ?..       
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4110: 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d           DateTim
4120: 65 53 74 79 6c 65 73 2e 41 64 6a 75 73 74 54 6f  eStyles.AdjustTo
4130: 55 6e 69 76 65 72 73 61 6c 20 3a 0d 0a 20 20 20  Universal :..   
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74               Dat
4160: 65 54 69 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e 65  eTimeStyles.None
4170: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4190: 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  kind);..        
41a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
41b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
41c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
41d0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72  ..    /// Conver
41e0: 74 73 20 61 20 6a 75 6c 69 61 6e 64 61 79 20 76  ts a julianday v
41f0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 44 61 74 65  alue into a Date
4200: 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  Time..    /// </
4210: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
4220: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6a  / <param name="j
4230: 75 6c 69 61 6e 44 61 79 22 3e 54 68 65 20 76 61  ulianDay">The va
4240: 6c 75 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f  lue to convert</
4250: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4260: 3c 72 65 74 75 72 6e 73 3e 41 20 2e 4e 45 54 20  <returns>A .NET 
4270: 44 61 74 65 54 69 6d 65 3c 2f 72 65 74 75 72 6e  DateTime</return
4280: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 44  s>..    public D
4290: 61 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69  ateTime ToDateTi
42a0: 6d 65 28 64 6f 75 62 6c 65 20 6a 75 6c 69 61 6e  me(double julian
42b0: 44 61 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  Day)..    {..   
42c0: 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
42d0: 54 69 6d 65 28 6a 75 6c 69 61 6e 44 61 79 2c 20  Time(julianDay, 
42e0: 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d  _datetimeKind);.
42f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4300: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4310: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
4320: 6a 75 6c 69 61 6e 64 61 79 20 76 61 6c 75 65 20  julianday value 
4330: 69 6e 74 6f 20 61 20 44 61 74 65 54 69 6d 65 0d  into a DateTime.
4340: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4350: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
4360: 72 61 6d 20 6e 61 6d 65 3d 22 6a 75 6c 69 61 6e  ram name="julian
4370: 44 61 79 22 3e 54 68 65 20 76 61 6c 75 65 20 74  Day">The value t
4380: 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d  o convert</param
4390: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
43a0: 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 54 68  m name="kind">Th
43b0: 65 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 74  e DateTimeKind t
43c0: 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  o use.</param>..
43d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
43e0: 3e 41 20 2e 4e 45 54 20 44 61 74 65 54 69 6d 65  >A .NET DateTime
43f0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4400: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 61  public static Da
4410: 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d  teTime ToDateTim
4420: 65 28 64 6f 75 62 6c 65 20 6a 75 6c 69 61 6e 44  e(double julianD
4430: 61 79 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64  ay, DateTimeKind
4440: 20 6b 69 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20   kind)..    {.. 
4450: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61         return Da
4460: 74 65 54 69 6d 65 2e 53 70 65 63 69 66 79 4b 69  teTime.SpecifyKi
4470: 6e 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd(..           
4480: 20 44 61 74 65 54 69 6d 65 2e 46 72 6f 6d 4f 41   DateTime.FromOA
4490: 44 61 74 65 28 6a 75 6c 69 61 6e 44 61 79 20 2d  Date(julianDay -
44a0: 20 4f 6c 65 41 75 74 6f 6d 61 74 69 6f 6e 45 70   OleAutomationEp
44b0: 6f 63 68 41 73 4a 75 6c 69 61 6e 44 61 79 29 2c  ochAsJulianDay),
44c0: 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a   kind);..    }..
44d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
44e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
44f0: 76 65 72 74 73 20 74 68 65 20 73 70 65 63 69 66  verts the specif
4500: 69 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  ied number of se
4510: 63 6f 6e 64 73 20 66 72 6f 6d 20 74 68 65 20 55  conds from the U
4520: 6e 69 78 20 65 70 6f 63 68 20 69 6e 74 6f 20 61  nix epoch into a
4530: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63  ..    /// <see c
4540: 72 65 66 3d 22 44 61 74 65 54 69 6d 65 22 20 2f  ref="DateTime" /
4550: 3e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f  > value...    //
4560: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4570: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4580: 65 3d 22 73 65 63 6f 6e 64 73 22 3e 0d 0a 20 20  e="seconds">..  
4590: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
45a0: 20 6f 66 20 77 68 6f 6c 65 20 73 65 63 6f 6e 64   of whole second
45b0: 73 20 73 69 6e 63 65 20 74 68 65 20 55 6e 69 78  s since the Unix
45c0: 20 65 70 6f 63 68 2e 0d 0a 20 20 20 20 2f 2f 2f   epoch...    ///
45d0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
45e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
45f0: 6b 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  kind">..    /// 
4600: 45 69 74 68 65 72 20 55 74 63 20 6f 72 20 4c 6f  Either Utc or Lo
4610: 63 61 6c 20 74 69 6d 65 2e 0d 0a 20 20 20 20 2f  cal time...    /
4620: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
4630: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
4640: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20      /// The new 
4650: 3c 73 65 65 20 63 72 65 66 3d 22 44 61 74 65 54  <see cref="DateT
4660: 69 6d 65 22 20 2f 3e 20 76 61 6c 75 65 2e 0d 0a  ime" /> value...
4670: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
4680: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
4690: 20 73 74 61 74 69 63 20 44 61 74 65 54 69 6d 65   static DateTime
46a0: 20 54 6f 44 61 74 65 54 69 6d 65 28 69 6e 74 20   ToDateTime(int 
46b0: 73 65 63 6f 6e 64 73 2c 20 44 61 74 65 54 69 6d  seconds, DateTim
46c0: 65 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20  eKind kind)..   
46d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
46e0: 72 6e 20 44 61 74 65 54 69 6d 65 2e 53 70 65 63  rn DateTime.Spec
46f0: 69 66 79 4b 69 6e 64 28 55 6e 69 78 45 70 6f 63  ifyKind(UnixEpoc
4700: 68 2e 41 64 64 53 65 63 6f 6e 64 73 28 73 65 63  h.AddSeconds(sec
4710: 6f 6e 64 73 29 2c 20 6b 69 6e 64 29 3b 0d 0a 20  onds), kind);.. 
4720: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
4730: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
4740: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68 65 20  // Converts the 
4750: 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
4760: 20 6f 66 20 74 69 63 6b 73 20 73 69 6e 63 65 20   of ticks since 
4770: 74 68 65 20 65 70 6f 63 68 20 69 6e 74 6f 20 61  the epoch into a
4780: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63  ..    /// <see c
4790: 72 65 66 3d 22 44 61 74 65 54 69 6d 65 22 20 2f  ref="DateTime" /
47a0: 3e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f  > value...    //
47b0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
47c0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
47d0: 65 3d 22 74 69 63 6b 73 22 3e 0d 0a 20 20 20 20  e="ticks">..    
47e0: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
47f0: 66 20 77 68 6f 6c 65 20 74 69 63 6b 73 20 73 69  f whole ticks si
4800: 6e 63 65 20 74 68 65 20 65 70 6f 63 68 2e 0d 0a  nce the epoch...
4810: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
4820: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4830: 20 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20   name="kind">.. 
4840: 20 20 20 2f 2f 2f 20 45 69 74 68 65 72 20 55 74     /// Either Ut
4850: 63 20 6f 72 20 4c 6f 63 61 6c 20 74 69 6d 65 2e  c or Local time.
4860: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
4870: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
4880: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
4890: 68 65 20 6e 65 77 20 3c 73 65 65 20 63 72 65 66  he new <see cref
48a0: 3d 22 44 61 74 65 54 69 6d 65 22 20 2f 3e 20 76  ="DateTime" /> v
48b0: 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  alue...    /// <
48c0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
48d0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 44  nternal static D
48e0: 61 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69  ateTime ToDateTi
48f0: 6d 65 28 6c 6f 6e 67 20 74 69 63 6b 73 2c 20 44  me(long ticks, D
4900: 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64  ateTimeKind kind
4910: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4920: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 44 61 74    return new Dat
4930: 65 54 69 6d 65 28 74 69 63 6b 73 2c 20 6b 69 6e  eTime(ticks, kin
4940: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
4950: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4960: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
4970: 73 20 61 20 44 61 74 65 54 69 6d 65 20 73 74 72  s a DateTime str
4980: 75 63 74 20 74 6f 20 61 20 4a 75 6c 69 61 6e 44  uct to a JulianD
4990: 61 79 20 64 6f 75 62 6c 65 0d 0a 20 20 20 20 2f  ay double..    /
49a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
49b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
49c0: 6d 65 3d 22 76 61 6c 75 65 22 3e 54 68 65 20 44  me="value">The D
49d0: 61 74 65 54 69 6d 65 20 74 6f 20 63 6f 6e 76 65  ateTime to conve
49e0: 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  rt</param>..    
49f0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
4a00: 20 4a 75 6c 69 61 6e 44 61 79 20 76 61 6c 75 65   JulianDay value
4a10: 20 74 68 65 20 44 61 74 65 74 69 6d 65 20 72 65   the Datetime re
4a20: 70 72 65 73 65 6e 74 73 3c 2f 72 65 74 75 72 6e  presents</return
4a30: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  s>..    public s
4a40: 74 61 74 69 63 20 64 6f 75 62 6c 65 20 54 6f 4a  tatic double ToJ
4a50: 75 6c 69 61 6e 44 61 79 28 44 61 74 65 54 69 6d  ulianDay(DateTim
4a60: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
4a70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
4a80: 6c 75 65 2e 54 6f 4f 41 44 61 74 65 28 29 20 2b  lue.ToOADate() +
4a90: 20 4f 6c 65 41 75 74 6f 6d 61 74 69 6f 6e 45 70   OleAutomationEp
4aa0: 6f 63 68 41 73 4a 75 6c 69 61 6e 44 61 79 3b 0d  ochAsJulianDay;.
4ab0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4ac0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4ad0: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
4ae0: 44 61 74 65 54 69 6d 65 20 73 74 72 75 63 74 20  DateTime struct 
4af0: 74 6f 20 74 68 65 20 77 68 6f 6c 65 20 6e 75 6d  to the whole num
4b00: 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
4b10: 69 6e 63 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f  ince the..    //
4b20: 2f 20 55 6e 69 78 20 65 70 6f 63 68 2e 0d 0a 20  / Unix epoch... 
4b30: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4b40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
4b50: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 54  m name="value">T
4b60: 68 65 20 44 61 74 65 54 69 6d 65 20 74 6f 20 63  he DateTime to c
4b70: 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d 0a  onvert</param>..
4b80: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4b90: 3e 54 68 65 20 77 68 6f 6c 65 20 6e 75 6d 62 65  >The whole numbe
4ba0: 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r of seconds sin
4bb0: 63 65 20 74 68 65 20 55 6e 69 78 20 65 70 6f 63  ce the Unix epoc
4bc0: 68 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  h</returns>..   
4bd0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c   public static l
4be0: 6f 6e 67 20 54 6f 55 6e 69 78 45 70 6f 63 68 28  ong ToUnixEpoch(
4bf0: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
4c00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4c10: 72 65 74 75 72 6e 20 28 76 61 6c 75 65 2e 53 75  return (value.Su
4c20: 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63 68  btract(UnixEpoch
4c30: 29 2e 54 69 63 6b 73 20 2f 20 54 69 6d 65 53 70  ).Ticks / TimeSp
4c40: 61 6e 2e 54 69 63 6b 73 50 65 72 53 65 63 6f 6e  an.TicksPerSecon
4c50: 64 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  d);..    }....  
4c60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4c70: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
4c80: 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f   the DateTime fo
4c90: 72 6d 61 74 20 73 74 72 69 6e 67 20 74 6f 20 75  rmat string to u
4ca0: 73 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  se for the speci
4cb0: 66 69 65 64 20 44 61 74 65 54 69 6d 65 4b 69 6e  fied DateTimeKin
4cc0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 3c  d...    /// If <
4cd0: 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 66  paramref name="f
4ce0: 6f 72 6d 61 74 53 74 72 69 6e 67 22 20 2f 3e 20  ormatString" /> 
4cf0: 69 73 20 6e 6f 74 20 6e 75 6c 6c 2c 20 69 74 20  is not null, it 
4d00: 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64  will be returned
4d10: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20   verbatim...    
4d20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4d30: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
4d40: 61 6d 65 3d 22 6b 69 6e 64 22 3e 54 68 65 20 44  ame="kind">The D
4d50: 61 74 65 54 69 6d 65 4b 69 6e 64 20 74 6f 20 75  ateTimeKind to u
4d60: 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  se.</param>..   
4d70: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4d80: 3d 22 66 6f 72 6d 61 74 53 74 72 69 6e 67 22 3e  ="formatString">
4d90: 54 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72  The DateTime for
4da0: 6d 61 74 20 73 74 72 69 6e 67 20 74 6f 20 75 73  mat string to us
4db0: 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
4dc0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
4dd0: 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74 65 54     /// The DateT
4de0: 69 6d 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  ime format strin
4df0: 67 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65  g to use for the
4e00: 20 73 70 65 63 69 66 69 65 64 20 44 61 74 65 54   specified DateT
4e10: 69 6d 65 4b 69 6e 64 2e 0d 0a 20 20 20 20 2f 2f  imeKind...    //
4e20: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4e30: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
4e40: 20 73 74 72 69 6e 67 20 47 65 74 44 61 74 65 54   string GetDateT
4e50: 69 6d 65 4b 69 6e 64 46 6f 72 6d 61 74 28 0d 0a  imeKindFormat(..
4e60: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
4e70: 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20  Kind kind,..    
4e80: 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
4e90: 74 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20  tString..       
4ea0: 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
4eb0: 20 20 20 69 66 20 28 66 6f 72 6d 61 74 53 74 72     if (formatStr
4ec0: 69 6e 67 20 21 3d 20 6e 75 6c 6c 29 20 72 65 74  ing != null) ret
4ed0: 75 72 6e 20 66 6f 72 6d 61 74 53 74 72 69 6e 67  urn formatString
4ee0: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
4ef0: 6e 20 28 6b 69 6e 64 20 3d 3d 20 44 61 74 65 54  n (kind == DateT
4f00: 69 6d 65 4b 69 6e 64 2e 55 74 63 29 20 3f 20 5f  imeKind.Utc) ? _
4f10: 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 55 74  datetimeFormatUt
4f20: 63 20 3a 20 5f 64 61 74 65 74 69 6d 65 46 6f 72  c : _datetimeFor
4f30: 6d 61 74 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 7d  matLocal;..    }
4f40: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
4f50: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
4f60: 6f 6e 76 65 72 74 73 20 61 20 73 74 72 69 6e 67  onverts a string
4f70: 20 69 6e 74 6f 20 61 20 44 61 74 65 54 69 6d 65   into a DateTime
4f80: 2c 20 75 73 69 6e 67 20 74 68 65 20 44 61 74 65  , using the Date
4f90: 54 69 6d 65 46 6f 72 6d 61 74 2c 20 44 61 74 65  TimeFormat, Date
4fa0: 54 69 6d 65 4b 69 6e 64 2c 0d 0a 20 20 20 20 2f  TimeKind,..    /
4fb0: 2f 2f 20 61 6e 64 20 44 61 74 65 54 69 6d 65 46  // and DateTimeF
4fc0: 6f 72 6d 61 74 53 74 72 69 6e 67 20 73 70 65 63  ormatString spec
4fd0: 69 66 69 65 64 20 66 6f 72 20 74 68 65 20 63 6f  ified for the co
4fe0: 6e 6e 65 63 74 69 6f 6e 20 77 68 65 6e 20 69 74  nnection when it
4ff0: 20 77 61 73 20 6f 70 65 6e 65 64 2e 0d 0a 20 20   was opened...  
5000: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5010: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5020: 20 6e 61 6d 65 3d 22 64 61 74 65 56 61 6c 75 65   name="dateValue
5030: 22 3e 54 68 65 20 44 61 74 65 54 69 6d 65 20 76  ">The DateTime v
5040: 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c  alue to convert<
5050: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
5060: 20 3c 72 65 74 75 72 6e 73 3e 45 69 74 68 65 72   <returns>Either
5070: 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
5080: 6e 69 6e 67 20 74 68 65 20 6c 6f 6e 67 20 69 6e  ning the long in
5090: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
50a0: 31 30 30 2d 6e 61 6e 6f 73 65 63 6f 6e 64 20 75  100-nanosecond u
50b0: 6e 69 74 73 20 73 69 6e 63 65 20 53 79 73 74 65  nits since Syste
50c0: 6d 2e 44 61 74 65 54 69 6d 65 2e 4d 69 6e 56 61  m.DateTime.MinVa
50d0: 6c 75 65 2c 20 61 0d 0a 20 20 20 20 2f 2f 2f 20  lue, a..    /// 
50e0: 4a 75 6c 69 61 6e 20 64 61 79 20 64 6f 75 62 6c  Julian day doubl
50f0: 65 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75  e, an integer nu
5100: 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20  mber of seconds 
5110: 73 69 6e 63 65 20 74 68 65 20 55 6e 69 78 20 65  since the Unix e
5120: 70 6f 63 68 2c 20 61 20 63 75 6c 74 75 72 65 2d  poch, a culture-
5130: 69 6e 64 65 70 65 6e 64 65 6e 74 20 66 6f 72 6d  independent form
5140: 61 74 74 65 64 20 64 61 74 65 20 61 6e 64 20 74  atted date and t
5150: 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 73 74 72  ime..    /// str
5160: 69 6e 67 2c 20 61 20 66 6f 72 6d 61 74 74 65 64  ing, a formatted
5170: 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 73   date and time s
5180: 74 72 69 6e 67 20 69 6e 20 74 68 65 20 63 75 72  tring in the cur
5190: 72 65 6e 74 20 63 75 6c 74 75 72 65 2c 20 6f 72  rent culture, or
51a0: 20 61 6e 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d   an ISO8601-form
51b0: 61 74 20 64 61 74 65 2f 74 69 6d 65 20 73 74 72  at date/time str
51c0: 69 6e 67 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ing.</returns>..
51d0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
51e0: 67 20 54 6f 53 74 72 69 6e 67 28 44 61 74 65 54  g ToString(DateT
51f0: 69 6d 65 20 64 61 74 65 56 61 6c 75 65 29 0d 0a  ime dateValue)..
5200: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73      {..        s
5210: 77 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65  witch (_datetime
5220: 46 6f 72 6d 61 74 29 0d 0a 20 20 20 20 20 20 20  Format)..       
5230: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5240: 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65 46  case SQLiteDateF
5250: 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0d 0a 20  ormats.Ticks:.. 
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5270: 65 74 75 72 6e 20 64 61 74 65 56 61 6c 75 65 2e  eturn dateValue.
5280: 54 69 63 6b 73 2e 54 6f 53 74 72 69 6e 67 28 43  Ticks.ToString(C
5290: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
52a0: 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20  iantCulture);.. 
52b0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
52c0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
52d0: 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20  s.JulianDay:..  
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
52f0: 74 75 72 6e 20 54 6f 4a 75 6c 69 61 6e 44 61 79  turn ToJulianDay
5300: 28 64 61 74 65 56 61 6c 75 65 29 2e 54 6f 53 74  (dateValue).ToSt
5310: 72 69 6e 67 28 43 75 6c 74 75 72 65 49 6e 66 6f  ring(CultureInfo
5320: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
5330: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
5340: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
5350: 46 6f 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63  Formats.UnixEpoc
5360: 68 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h:..            
5370: 20 20 20 20 72 65 74 75 72 6e 20 28 28 6c 6f 6e      return ((lon
5380: 67 29 28 64 61 74 65 56 61 6c 75 65 2e 53 75 62  g)(dateValue.Sub
5390: 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63 68 29  tract(UnixEpoch)
53a0: 2e 54 69 63 6b 73 20 2f 20 54 69 6d 65 53 70 61  .Ticks / TimeSpa
53b0: 6e 2e 54 69 63 6b 73 50 65 72 53 65 63 6f 6e 64  n.TicksPerSecond
53c0: 29 29 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  )).ToString();..
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
53e0: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
53f0: 74 73 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  ts.InvariantCult
5400: 75 72 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ure:..          
5410: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74        return dat
5420: 65 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28  eValue.ToString(
5430: 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74  (_datetimeFormat
5440: 53 74 72 69 6e 67 20 21 3d 20 6e 75 6c 6c 29 20  String != null) 
5450: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
5460: 20 20 20 20 20 20 20 5f 64 61 74 65 74 69 6d 65         _datetime
5470: 46 6f 72 6d 61 74 53 74 72 69 6e 67 20 3a 20 46  FormatString : F
5480: 75 6c 6c 46 6f 72 6d 61 74 2c 20 43 75 6c 74 75  ullFormat, Cultu
5490: 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
54a0: 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
54b0: 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69         case SQLi
54c0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 43 75  teDateFormats.Cu
54d0: 72 72 65 6e 74 43 75 6c 74 75 72 65 3a 0d 0a 20  rrentCulture:.. 
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
54f0: 65 74 75 72 6e 20 64 61 74 65 56 61 6c 75 65 2e  eturn dateValue.
5500: 54 6f 53 74 72 69 6e 67 28 28 5f 64 61 74 65 74  ToString((_datet
5510: 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 20  imeFormatString 
5520: 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20  != null) ?..    
5530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5540: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 53  _datetimeFormatS
5550: 74 72 69 6e 67 20 3a 20 46 75 6c 6c 46 6f 72 6d  tring : FullForm
5560: 61 74 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  at, CultureInfo.
5570: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b  CurrentCulture);
5580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65  ..            de
5590: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
55a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
55b0: 64 61 74 65 56 61 6c 75 65 2e 4b 69 6e 64 20 3d  dateValue.Kind =
55c0: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
55d0: 6e 73 70 65 63 69 66 69 65 64 29 20 3f 0d 0a 20  nspecified) ?.. 
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55f0: 20 20 20 44 61 74 65 54 69 6d 65 2e 53 70 65 63     DateTime.Spec
5600: 69 66 79 4b 69 6e 64 28 64 61 74 65 56 61 6c 75  ifyKind(dateValu
5610: 65 2c 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64  e, _datetimeKind
5620: 29 2e 54 6f 53 74 72 69 6e 67 28 0d 0a 20 20 20  ).ToString(..   
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5640: 20 20 20 20 20 47 65 74 44 61 74 65 54 69 6d 65       GetDateTime
5650: 4b 69 6e 64 46 6f 72 6d 61 74 28 5f 64 61 74 65  KindFormat(_date
5660: 74 69 6d 65 4b 69 6e 64 2c 20 5f 64 61 74 65 74  timeKind, _datet
5670: 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 29  imeFormatString)
5680: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
56a0: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
56b0: 69 61 6e 74 43 75 6c 74 75 72 65 29 20 3a 20 64  iantCulture) : d
56c0: 61 74 65 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e  ateValue.ToStrin
56d0: 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 44              GetD
56f0: 61 74 65 54 69 6d 65 4b 69 6e 64 46 6f 72 6d 61  ateTimeKindForma
5700: 74 28 64 61 74 65 56 61 6c 75 65 2e 4b 69 6e 64  t(dateValue.Kind
5710: 2c 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  , _datetimeForma
5720: 74 53 74 72 69 6e 67 29 2c 0d 0a 20 20 20 20 20  tString),..     
5730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5740: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
5750: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
5760: 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ure);..        }
5770: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
5780: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5790: 20 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 66    /// Internal f
57a0: 75 6e 63 74 69 6f 6e 20 74 6f 20 63 6f 6e 76 65  unction to conve
57b0: 72 74 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64  rt a UTF-8 encod
57c0: 65 64 20 49 6e 74 50 74 72 20 6f 66 20 74 68 65  ed IntPtr of the
57d0: 20 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74   specified lengt
57e0: 68 20 74 6f 20 61 20 44 61 74 65 54 69 6d 65 2e  h to a DateTime.
57f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5800: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
5810: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
5820: 20 54 68 69 73 20 69 73 20 61 20 63 6f 6e 76 65   This is a conve
5830: 6e 69 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e 2c  nience function,
5840: 20 77 68 69 63 68 20 66 69 72 73 74 20 63 61 6c   which first cal
5850: 6c 73 20 54 6f 53 74 72 69 6e 67 28 29 20 6f 6e  ls ToString() on
5860: 20 74 68 65 20 49 6e 74 50 74 72 20 74 6f 20 63   the IntPtr to c
5870: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 73  onvert it to a s
5880: 74 72 69 6e 67 2c 20 74 68 65 6e 20 63 61 6c 6c  tring, then call
5890: 73 0d 0a 20 20 20 20 2f 2f 2f 20 54 6f 44 61 74  s..    /// ToDat
58a0: 65 54 69 6d 65 28 29 20 6f 6e 20 74 68 65 20 73  eTime() on the s
58b0: 74 72 69 6e 67 20 74 6f 20 72 65 74 75 72 6e 20  tring to return 
58c0: 61 20 44 61 74 65 54 69 6d 65 2e 0d 0a 20 20 20  a DateTime...   
58d0: 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d   /// </remarks>.
58e0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
58f0: 6e 61 6d 65 3d 22 70 74 72 22 3e 41 20 70 6f 69  name="ptr">A poi
5900: 6e 74 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d  nter to the UTF-
5910: 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67  8 encoded string
5920: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
5930: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
5940: 65 6e 22 3e 54 68 65 20 6c 65 6e 67 74 68 20 69  en">The length i
5950: 6e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73  n bytes of the s
5960: 74 72 69 6e 67 3c 2f 70 61 72 61 6d 3e 0d 0a 20  tring</param>.. 
5970: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
5980: 54 68 65 20 70 61 72 73 65 64 20 44 61 74 65 54  The parsed DateT
5990: 69 6d 65 20 76 61 6c 75 65 3c 2f 72 65 74 75 72  ime value</retur
59a0: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
59b0: 6c 20 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74  l DateTime ToDat
59c0: 65 54 69 6d 65 28 49 6e 74 50 74 72 20 70 74 72  eTime(IntPtr ptr
59d0: 2c 20 69 6e 74 20 6c 65 6e 29 0d 0a 20 20 20 20  , int len)..    
59e0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
59f0: 54 6f 44 61 74 65 54 69 6d 65 28 54 6f 53 74 72  ToDateTime(ToStr
5a00: 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 29 3b 0d  ing(ptr, len));.
5a10: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
5a20: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
5a30: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5a40: 20 2f 2f 2f 20 53 6d 61 72 74 20 6d 65 74 68 6f   /// Smart metho
5a50: 64 20 6f 66 20 73 70 6c 69 74 74 69 6e 67 20 61  d of splitting a
5a60: 20 73 74 72 69 6e 67 2e 20 20 53 6b 69 70 73 20   string.  Skips 
5a70: 71 75 6f 74 65 64 20 65 6c 65 6d 65 6e 74 73 2c  quoted elements,
5a80: 20 72 65 6d 6f 76 65 73 20 74 68 65 20 71 75 6f   removes the quo
5a90: 74 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tes...    /// </
5aa0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5ab0: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20  / <remarks>..   
5ac0: 20 2f 2f 2f 20 54 68 69 73 20 73 70 6c 69 74 20   /// This split 
5ad0: 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20 73  function works s
5ae0: 6f 6d 65 77 68 61 74 20 6c 69 6b 65 20 74 68 65  omewhat like the
5af0: 20 53 74 72 69 6e 67 2e 53 70 6c 69 74 28 29 20   String.Split() 
5b00: 66 75 6e 63 74 69 6f 6e 20 69 6e 20 74 68 61 74  function in that
5b10: 20 69 74 20 62 72 65 61 6b 73 20 61 70 61 72 74   it breaks apart
5b20: 20 61 20 73 74 72 69 6e 67 20 69 6e 74 6f 0d 0a   a string into..
5b30: 20 20 20 20 2f 2f 2f 20 70 69 65 63 65 73 20 61      /// pieces a
5b40: 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 70  nd returns the p
5b50: 69 65 63 65 73 20 61 73 20 61 6e 20 61 72 72 61  ieces as an arra
5b60: 79 2e 20 20 54 68 65 20 70 72 69 6d 61 72 79 20  y.  The primary 
5b70: 64 69 66 66 65 72 65 6e 63 65 73 20 61 72 65 3a  differences are:
5b80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73 74 20  ..    /// <list 
5b90: 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e 0d 0a  type="bullet">..
5ba0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
5bb0: 65 73 63 72 69 70 74 69 6f 6e 3e 4f 6e 6c 79 20  escription>Only 
5bc0: 6f 6e 65 20 63 68 61 72 61 63 74 65 72 20 63 61  one character ca
5bd0: 6e 20 62 65 20 70 72 6f 76 69 64 65 64 20 61 73  n be provided as
5be0: 20 61 20 73 65 70 61 72 61 74 6f 72 20 63 68 61   a separator cha
5bf0: 72 61 63 74 65 72 3c 2f 64 65 73 63 72 69 70 74  racter</descript
5c00: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  ion></item>..   
5c10: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
5c20: 72 69 70 74 69 6f 6e 3e 51 75 6f 74 65 64 20 74  ription>Quoted t
5c30: 65 78 74 20 69 6e 73 69 64 65 20 74 68 65 20 73  ext inside the s
5c40: 74 72 69 6e 67 20 69 73 20 73 6b 69 70 70 65 64  tring is skipped
5c50: 20 6f 76 65 72 20 77 68 65 6e 20 73 65 61 72 63   over when searc
5c60: 68 69 6e 67 20 66 6f 72 20 74 68 65 20 73 65 70  hing for the sep
5c70: 61 72 61 74 6f 72 2c 20 61 6e 64 20 74 68 65 20  arator, and the 
5c80: 71 75 6f 74 65 73 20 61 72 65 20 72 65 6d 6f 76  quotes are remov
5c90: 65 64 2e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  ed.</description
5ca0: 3e 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  ></item>..    //
5cb0: 2f 20 3c 2f 6c 69 73 74 3e 0d 0a 20 20 20 20 2f  / </list>..    /
5cc0: 2f 2f 20 54 68 75 73 2c 20 69 66 20 73 70 6c 69  // Thus, if spli
5cd0: 74 74 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  tting the follow
5ce0: 69 6e 67 20 73 74 72 69 6e 67 20 6c 6f 6f 6b 69  ing string looki
5cf0: 6e 67 20 66 6f 72 20 61 20 63 6f 6d 6d 61 3a 3c  ng for a comma:<
5d00: 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4f 6e  br/>..    /// On
5d10: 65 2c 54 77 6f 2c 20 22 54 68 72 65 65 2c 20 46  e,Two, "Three, F
5d20: 6f 75 72 22 2c 20 46 69 76 65 3c 62 72 2f 3e 0d  our", Five<br/>.
5d30: 0a 20 20 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a  .    /// <br/>..
5d40: 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75      /// The resu
5d50: 6c 74 69 6e 67 20 61 72 72 61 79 20 77 6f 75 6c  lting array woul
5d60: 64 20 63 6f 6e 74 61 69 6e 3c 62 72 2f 3e 0d 0a  d contain<br/>..
5d70: 20 20 20 20 2f 2f 2f 20 5b 30 5d 20 4f 6e 65 3c      /// [0] One<
5d80: 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 5b 31  br/>..    /// [1
5d90: 5d 20 54 77 6f 3c 62 72 2f 3e 0d 0a 20 20 20 20  ] Two<br/>..    
5da0: 2f 2f 2f 20 5b 32 5d 20 54 68 72 65 65 2c 20 46  /// [2] Three, F
5db0: 6f 75 72 3c 62 72 2f 3e 0d 0a 20 20 20 20 2f 2f  our<br/>..    //
5dc0: 2f 20 5b 33 5d 20 46 69 76 65 3c 62 72 2f 3e 0d  / [3] Five<br/>.
5dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a  .    /// <br/>..
5de0: 20 20 20 20 2f 2f 2f 20 4e 6f 74 65 20 74 68 61      /// Note tha
5df0: 74 20 74 68 65 20 6c 65 61 64 69 6e 67 20 61 6e  t the leading an
5e00: 64 20 74 72 61 69 6c 69 6e 67 20 73 70 61 63 65  d trailing space
5e10: 73 20 77 65 72 65 20 72 65 6d 6f 76 65 64 20 66  s were removed f
5e20: 72 6f 6d 20 65 61 63 68 20 69 74 65 6d 20 64 75  rom each item du
5e30: 72 69 6e 67 20 74 68 65 20 73 70 6c 69 74 2e 0d  ring the split..
5e40: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72  .    /// </remar
5e50: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ks>..    /// <pa
5e60: 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65  ram name="source
5e70: 22 3e 53 6f 75 72 63 65 20 73 74 72 69 6e 67 20  ">Source string 
5e80: 74 6f 20 73 70 6c 69 74 20 61 70 61 72 74 3c 2f  to split apart</
5e90: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
5ea0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 65 70  <param name="sep
5eb0: 61 72 61 74 6f 72 22 3e 53 65 70 61 72 61 74 6f  arator">Separato
5ec0: 72 20 63 68 61 72 61 63 74 65 72 3c 2f 70 61 72  r character</par
5ed0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
5ee0: 74 75 72 6e 73 3e 41 20 73 74 72 69 6e 67 20 61  turns>A string a
5ef0: 72 72 61 79 20 6f 66 20 74 68 65 20 73 70 6c 69  rray of the spli
5f00: 74 20 75 70 20 65 6c 65 6d 65 6e 74 73 3c 2f 72  t up elements</r
5f10: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
5f20: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
5f30: 67 5b 5d 20 53 70 6c 69 74 28 73 74 72 69 6e 67  g[] Split(string
5f40: 20 73 6f 75 72 63 65 2c 20 63 68 61 72 20 73 65   source, char se
5f50: 70 61 72 61 74 6f 72 29 0d 0a 20 20 20 20 7b 0d  parator)..    {.
5f60: 0a 20 20 20 20 20 20 63 68 61 72 5b 5d 20 74 6f  .      char[] to
5f70: 6b 73 20 3d 20 6e 65 77 20 63 68 61 72 5b 32 5d  ks = new char[2]
5f80: 20 7b 20 27 5c 22 27 2c 20 73 65 70 61 72 61 74   { '\"', separat
5f90: 6f 72 20 7d 3b 0d 0a 20 20 20 20 20 20 63 68 61  or };..      cha
5fa0: 72 5b 5d 20 71 75 6f 74 20 3d 20 6e 65 77 20 63  r[] quot = new c
5fb0: 68 61 72 5b 31 5d 20 7b 20 27 5c 22 27 20 7d 3b  har[1] { '\"' };
5fc0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ..      int n = 
5fd0: 30 3b 0d 0a 20 20 20 20 20 20 4c 69 73 74 3c 73  0;..      List<s
5fe0: 74 72 69 6e 67 3e 20 6c 73 20 3d 20 6e 65 77 20  tring> ls = new 
5ff0: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 28 29 3b 0d  List<string>();.
6000: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 3b  .      string s;
6010: 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20  ....      while 
6020: 28 73 6f 75 72 63 65 2e 4c 65 6e 67 74 68 20 3e  (source.Length >
6030: 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   0)..      {..  
6040: 20 20 20 20 20 20 6e 20 3d 20 73 6f 75 72 63 65        n = source
6050: 2e 49 6e 64 65 78 4f 66 41 6e 79 28 74 6f 6b 73  .IndexOfAny(toks
6060: 2c 20 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  , n);..        i
6070: 66 20 28 6e 20 3d 3d 20 2d 31 29 20 62 72 65 61  f (n == -1) brea
6080: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  k;..        if (
6090: 73 6f 75 72 63 65 5b 6e 5d 20 3d 3d 20 74 6f 6b  source[n] == tok
60a0: 73 5b 30 5d 29 0d 0a 20 20 20 20 20 20 20 20 7b  s[0])..        {
60b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 73 6f  ..          //so
60c0: 75 72 63 65 20 3d 20 73 6f 75 72 63 65 2e 52 65  urce = source.Re
60d0: 6d 6f 76 65 28 6e 2c 20 31 29 3b 0d 0a 20 20 20  move(n, 1);..   
60e0: 20 20 20 20 20 20 20 6e 20 3d 20 73 6f 75 72 63         n = sourc
60f0: 65 2e 49 6e 64 65 78 4f 66 41 6e 79 28 71 75 6f  e.IndexOfAny(quo
6100: 74 2c 20 6e 20 2b 20 31 29 3b 0d 0a 20 20 20 20  t, n + 1);..    
6110: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 2d        if (n == -
6120: 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  1)..          {.
6130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 73  .            //s
6140: 6f 75 72 63 65 20 3d 20 22 5c 22 22 20 2b 20 73  ource = "\"" + s
6150: 6f 75 72 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  ource;..        
6160: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
6170: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6180: 20 20 20 6e 2b 2b 3b 0d 0a 20 20 20 20 20 20 20     n++;..       
6190: 20 20 20 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f     //source = so
61a0: 75 72 63 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31  urce.Remove(n, 1
61b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
61c0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
61d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
61e0: 20 20 73 20 3d 20 73 6f 75 72 63 65 2e 53 75 62    s = source.Sub
61f0: 73 74 72 69 6e 67 28 30 2c 20 6e 29 2e 54 72 69  string(0, n).Tri
6200: 6d 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  m();..          
6210: 69 66 20 28 73 2e 4c 65 6e 67 74 68 20 3e 20 31  if (s.Length > 1
6220: 20 26 26 20 73 5b 30 5d 20 3d 3d 20 71 75 6f 74   && s[0] == quot
6230: 5b 30 5d 20 26 26 20 73 5b 73 2e 4c 65 6e 67 74  [0] && s[s.Lengt
6240: 68 20 2d 20 31 5d 20 3d 3d 20 73 5b 30 5d 29 0d  h - 1] == s[0]).
6250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 20 3d  .            s =
6260: 20 73 2e 53 75 62 73 74 72 69 6e 67 28 31 2c 20   s.Substring(1, 
6270: 73 2e 4c 65 6e 67 74 68 20 2d 20 32 29 3b 0d 0a  s.Length - 2);..
6280: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 6f 75 72  ..          sour
6290: 63 65 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73  ce = source.Subs
62a0: 74 72 69 6e 67 28 6e 20 2b 20 31 29 2e 54 72 69  tring(n + 1).Tri
62b0: 6d 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  m();..          
62c0: 69 66 20 28 73 2e 4c 65 6e 67 74 68 20 3e 20 30  if (s.Length > 0
62d0: 29 20 6c 73 2e 41 64 64 28 73 29 3b 0d 0a 20 20  ) ls.Add(s);..  
62e0: 20 20 20 20 20 20 20 20 6e 20 3d 20 30 3b 0d 0a          n = 0;..
62f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6300: 20 7d 0d 0a 20 20 20 20 20 20 69 66 20 28 73 6f   }..      if (so
6310: 75 72 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29  urce.Length > 0)
6320: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
6330: 20 20 20 73 20 3d 20 73 6f 75 72 63 65 2e 54 72     s = source.Tr
6340: 69 6d 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  im();..        i
6350: 66 20 28 73 2e 4c 65 6e 67 74 68 20 3e 20 31 20  f (s.Length > 1 
6360: 26 26 20 73 5b 30 5d 20 3d 3d 20 71 75 6f 74 5b  && s[0] == quot[
6370: 30 5d 20 26 26 20 73 5b 73 2e 4c 65 6e 67 74 68  0] && s[s.Length
6380: 20 2d 20 31 5d 20 3d 3d 20 73 5b 30 5d 29 0d 0a   - 1] == s[0])..
6390: 20 20 20 20 20 20 20 20 20 20 73 20 3d 20 73 2e            s = s.
63a0: 53 75 62 73 74 72 69 6e 67 28 31 2c 20 73 2e 4c  Substring(1, s.L
63b0: 65 6e 67 74 68 20 2d 20 32 29 3b 0d 0a 20 20 20  ength - 2);..   
63c0: 20 20 20 20 20 6c 73 2e 41 64 64 28 73 29 3b 0d       ls.Add(s);.
63d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
63e0: 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20    string[] ar = 
63f0: 6e 65 77 20 73 74 72 69 6e 67 5b 6c 73 2e 43 6f  new string[ls.Co
6400: 75 6e 74 5d 3b 0d 0a 20 20 20 20 20 20 6c 73 2e  unt];..      ls.
6410: 43 6f 70 79 54 6f 28 61 72 2c 20 30 29 3b 0d 0a  CopyTo(ar, 0);..
6420: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 61  ..      return a
6430: 72 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  r;..    }....   
6440: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6450: 20 20 20 20 2f 2f 2f 20 53 70 6c 69 74 73 20 74      /// Splits t
6460: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 72  he specified str
6470: 69 6e 67 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c  ing into multipl
6480: 65 20 73 74 72 69 6e 67 73 20 62 61 73 65 64 20  e strings based 
6490: 6f 6e 20 61 20 73 65 70 61 72 61 74 6f 72 0d 0a  on a separator..
64a0: 20 20 20 20 2f 2f 2f 20 61 6e 64 20 72 65 74 75      /// and retu
64b0: 72 6e 73 20 74 68 65 20 72 65 73 75 6c 74 20 61  rns the result a
64c0: 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  s an array of st
64d0: 72 69 6e 67 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  rings...    /// 
64e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
64f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6500: 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 2f 2f  "value">..    //
6510: 2f 20 54 68 65 20 73 74 72 69 6e 67 20 74 6f 20  / The string to 
6520: 73 70 6c 69 74 20 69 6e 74 6f 20 70 69 65 63 65  split into piece
6530: 73 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 73  s based on the s
6540: 65 70 61 72 61 74 6f 72 20 63 68 61 72 61 63 74  eparator charact
6550: 65 72 2e 20 20 49 66 0d 0a 20 20 20 20 2f 2f 2f  er.  If..    ///
6560: 20 74 68 69 73 20 73 74 72 69 6e 67 20 69 73 20   this string is 
6570: 6e 75 6c 6c 2c 20 6e 75 6c 6c 20 77 69 6c 6c 20  null, null will 
6580: 61 6c 77 61 79 73 20 62 65 20 72 65 74 75 72 6e  always be return
6590: 65 64 2e 20 20 49 66 20 74 68 69 73 20 73 74 72  ed.  If this str
65a0: 69 6e 67 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20  ing is..    /// 
65b0: 65 6d 70 74 79 2c 20 61 6e 20 61 72 72 61 79 20  empty, an array 
65c0: 6f 66 20 7a 65 72 6f 20 73 74 72 69 6e 67 73 20  of zero strings 
65d0: 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 72  will always be r
65e0: 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f  eturned...    //
65f0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
6600: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6610: 22 73 65 70 61 72 61 74 6f 72 22 3e 0d 0a 20 20  "separator">..  
6620: 20 20 2f 2f 2f 20 54 68 65 20 63 68 61 72 61 63    /// The charac
6630: 74 65 72 20 75 73 65 64 20 74 6f 20 64 69 76 69  ter used to divi
6640: 64 65 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  de the original 
6650: 73 74 72 69 6e 67 20 69 6e 74 6f 20 73 75 62 2d  string into sub-
6660: 73 74 72 69 6e 67 73 2e 0d 0a 20 20 20 20 2f 2f  strings...    //
6670: 2f 20 54 68 69 73 20 63 68 61 72 61 63 74 65 72  / This character
6680: 20 63 61 6e 6e 6f 74 20 62 65 20 61 20 62 61 63   cannot be a bac
6690: 6b 73 6c 61 73 68 20 6f 72 20 61 20 64 6f 75 62  kslash or a doub
66a0: 6c 65 2d 71 75 6f 74 65 3b 20 6f 74 68 65 72 77  le-quote; otherw
66b0: 69 73 65 2c 20 6e 6f 0d 0a 20 20 20 20 2f 2f 2f  ise, no..    ///
66c0: 20 77 6f 72 6b 20 77 69 6c 6c 20 62 65 20 70 65   work will be pe
66d0: 72 66 6f 72 6d 65 64 20 61 6e 64 20 6e 75 6c 6c  rformed and null
66e0: 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e 65   will be returne
66f0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
6700: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
6710: 61 72 61 6d 20 6e 61 6d 65 3d 22 6b 65 65 70 51  aram name="keepQ
6720: 75 6f 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  uote">..    /// 
6730: 49 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  If this paramete
6740: 72 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 61  r is non-zero, a
6750: 6c 6c 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 20  ll double-quote 
6760: 63 68 61 72 61 63 74 65 72 73 20 77 69 6c 6c 20  characters will 
6770: 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 74 61  be..    /// reta
6780: 69 6e 65 64 20 69 6e 20 74 68 65 20 72 65 74 75  ined in the retu
6790: 72 6e 65 64 20 6c 69 73 74 20 6f 66 20 73 74 72  rned list of str
67a0: 69 6e 67 73 3b 20 6f 74 68 65 72 77 69 73 65 2c  ings; otherwise,
67b0: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 0d 0a 20   they will be.. 
67c0: 20 20 20 2f 2f 2f 20 64 72 6f 70 70 65 64 2e 0d     /// dropped..
67d0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
67e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
67f0: 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d  m name="error">.
6800: 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61  .    /// Upon fa
6810: 69 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61  ilure, this para
6820: 6d 65 74 65 72 20 77 69 6c 6c 20 62 65 20 6d 6f  meter will be mo
6830: 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
6840: 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  n an appropriate
6850: 0d 0a 20 20 20 20 2f 2f 2f 20 65 72 72 6f 72 20  ..    /// error 
6860: 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f  message...    //
6870: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
6880: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
6890: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 61     /// The new a
68a0: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
68b0: 6f 72 20 6e 75 6c 6c 20 69 66 20 74 68 65 20 69  or null if the i
68c0: 6e 70 75 74 20 73 74 72 69 6e 67 20 69 73 20 6e  nput string is n
68d0: 75 6c 6c 20 2d 4f 52 2d 20 74 68 65 0d 0a 20 20  ull -OR- the..  
68e0: 20 20 2f 2f 2f 20 73 65 70 61 72 61 74 6f 72 20    /// separator 
68f0: 63 68 61 72 61 63 74 65 72 20 69 73 20 61 20 62  character is a b
6900: 61 63 6b 73 6c 61 73 68 20 6f 72 20 61 20 64 6f  ackslash or a do
6910: 75 62 6c 65 2d 71 75 6f 74 65 20 2d 4f 52 2d 20  uble-quote -OR- 
6920: 74 68 65 20 73 74 72 69 6e 67 0d 0a 20 20 20 20  the string..    
6930: 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20  /// contains an 
6940: 75 6e 62 61 6c 61 6e 63 65 64 20 62 61 63 6b 73  unbalanced backs
6950: 6c 61 73 68 20 6f 72 20 64 6f 75 62 6c 65 2d 71  lash or double-q
6960: 75 6f 74 65 20 63 68 61 72 61 63 74 65 72 2e 0d  uote character..
6970: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
6980: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
6990: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b  l static string[
69a0: 5d 20 4e 65 77 53 70 6c 69 74 28 0d 0a 20 20 20  ] NewSplit(..   
69b0: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
69c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 63 68 61 72  e,..        char
69d0: 20 73 65 70 61 72 61 74 6f 72 2c 0d 0a 20 20 20   separator,..   
69e0: 20 20 20 20 20 62 6f 6f 6c 20 6b 65 65 70 51 75       bool keepQu
69f0: 6f 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ote,..        re
6a00: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
6a10: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
6a20: 0d 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  ..        const 
6a30: 63 68 61 72 20 45 73 63 61 70 65 43 68 61 72 20  char EscapeChar 
6a40: 3d 20 27 5c 5c 27 3b 0d 0a 20 20 20 20 20 20 20  = '\\';..       
6a50: 20 63 6f 6e 73 74 20 63 68 61 72 20 51 75 6f 74   const char Quot
6a60: 65 43 68 61 72 20 3d 20 27 5c 22 27 3b 0d 0a 0d  eChar = '\"';...
6a70: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
6a80: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 74       // NOTE: It
6a90: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
6aa0: 74 68 65 20 73 65 70 61 72 61 74 6f 72 20 63 68  the separator ch
6ab0: 61 72 61 63 74 65 72 20 74 6f 20 62 65 20 65 69  aracter to be ei
6ac0: 74 68 65 72 20 61 0d 0a 20 20 20 20 20 20 20 20  ther a..        
6ad0: 2f 2f 20 20 20 20 20 20 20 62 61 63 6b 73 6c 61  //       backsla
6ae0: 73 68 20 6f 72 20 61 20 64 6f 75 62 6c 65 2d 71  sh or a double-q
6af0: 75 6f 74 65 20 62 65 63 61 75 73 65 20 62 6f 74  uote because bot
6b00: 68 20 6f 66 20 74 68 6f 73 65 20 63 68 61 72 61  h of those chara
6b10: 63 74 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  cters..        /
6b20: 2f 20 20 20 20 20 20 20 61 72 65 20 75 73 65 64  /       are used
6b30: 20 66 6f 72 20 65 73 63 61 70 69 6e 67 20 6f 74   for escaping ot
6b40: 68 65 72 20 63 68 61 72 61 63 74 65 72 73 20 28  her characters (
6b50: 65 2e 67 2e 20 74 68 65 20 73 65 70 61 72 61 74  e.g. the separat
6b60: 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  or..        //  
6b70: 20 20 20 20 20 63 68 61 72 61 63 74 65 72 29 2e       character).
6b80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
6b90: 20 20 20 20 20 20 69 66 20 28 28 73 65 70 61 72        if ((separ
6ba0: 61 74 6f 72 20 3d 3d 20 45 73 63 61 70 65 43 68  ator == EscapeCh
6bb0: 61 72 29 20 7c 7c 20 28 73 65 70 61 72 61 74 6f  ar) || (separato
6bc0: 72 20 3d 3d 20 51 75 6f 74 65 43 68 61 72 29 29  r == QuoteChar))
6bd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6be0: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
6bf0: 20 22 73 65 70 61 72 61 74 6f 72 20 63 68 61 72   "separator char
6c00: 61 63 74 65 72 20 63 61 6e 6e 6f 74 20 62 65 20  acter cannot be 
6c10: 74 68 65 20 65 73 63 61 70 65 20 6f 72 20 71 75  the escape or qu
6c20: 6f 74 65 20 63 68 61 72 61 63 74 65 72 73 22 3b  ote characters";
6c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
6c40: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
6c50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6c60: 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
6c70: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
6c80: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
6c90: 72 20 3d 20 22 73 74 72 69 6e 67 20 76 61 6c 75  r = "string valu
6ca0: 65 20 74 6f 20 73 70 6c 69 74 20 63 61 6e 6e 6f  e to split canno
6cb0: 74 20 62 65 20 6e 75 6c 6c 22 3b 0d 0a 20 20 20  t be null";..   
6cc0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6cd0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
6ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
6cf0: 6c 65 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c  length = value.L
6d00: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
6d10: 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20    if (length == 
6d20: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
6d30: 72 65 74 75 72 6e 20 6e 65 77 20 73 74 72 69 6e  return new strin
6d40: 67 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  g[0];....       
6d50: 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69   List<string> li
6d60: 73 74 20 3d 20 6e 65 77 20 4c 69 73 74 3c 73 74  st = new List<st
6d70: 72 69 6e 67 3e 28 29 3b 0d 0a 20 20 20 20 20 20  ring>();..      
6d80: 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20    StringBuilder 
6d90: 65 6c 65 6d 65 6e 74 20 3d 20 6e 65 77 20 53 74  element = new St
6da0: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
6db0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
6dc0: 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  x = 0;..        
6dd0: 62 6f 6f 6c 20 65 73 63 61 70 65 20 3d 20 66 61  bool escape = fa
6de0: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 62 6f  lse;..        bo
6df0: 6f 6c 20 71 75 6f 74 65 20 3d 20 66 61 6c 73 65  ol quote = false
6e00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 77 68 69  ;....        whi
6e10: 6c 65 20 28 69 6e 64 65 78 20 3c 20 6c 65 6e 67  le (index < leng
6e20: 74 68 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  th)..        {..
6e30: 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72              char
6e40: 20 63 68 61 72 61 63 74 65 72 20 3d 20 76 61 6c   character = val
6e50: 75 65 5b 69 6e 64 65 78 2b 2b 5d 3b 0d 0a 0d 0a  ue[index++];....
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6e70: 65 73 63 61 70 65 29 0d 0a 20 20 20 20 20 20 20  escape)..       
6e80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6e90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
6ea0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
6eb0: 41 43 4b 3a 20 4f 6e 6c 79 20 63 6f 6e 73 69 64  ACK: Only consid
6ec0: 65 72 20 74 68 65 20 65 73 63 61 70 65 20 63 68  er the escape ch
6ed0: 61 72 61 63 74 65 72 20 74 6f 20 62 65 20 61 6e  aracter to be an
6ee0: 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 20   actual..       
6ef0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
6f00: 20 20 22 65 73 63 61 70 65 22 20 69 66 20 69 74    "escape" if it
6f10: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
6f20: 61 20 72 65 73 65 72 76 65 64 20 63 68 61 72 61  a reserved chara
6f30: 63 74 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  cter;..         
6f40: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
6f50: 6f 74 68 65 72 77 69 73 65 2c 20 65 6d 69 74 20  otherwise, emit 
6f60: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 73 63  the original esc
6f70: 61 70 65 20 63 68 61 72 61 63 74 65 72 20 61 6e  ape character an
6f80: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
6f90: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
6fa0: 63 75 72 72 65 6e 74 20 63 68 61 72 61 63 74 65  current characte
6fb0: 72 20 69 6e 20 61 6e 20 65 66 66 6f 72 74 20 74  r in an effort t
6fc0: 6f 20 68 65 6c 70 20 70 72 65 73 65 72 76 65 0d  o help preserve.
6fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6fe0: 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 6f 72   //       the or
6ff0: 69 67 69 6e 61 6c 20 73 74 72 69 6e 67 20 63 6f  iginal string co
7000: 6e 74 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ntent...        
7010: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
7020: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7030: 28 63 68 61 72 61 63 74 65 72 20 21 3d 20 45 73  (character != Es
7040: 63 61 70 65 43 68 61 72 29 20 26 26 0d 0a 20 20  capeChar) &&..  
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7060: 20 20 28 63 68 61 72 61 63 74 65 72 20 21 3d 20    (character != 
7070: 51 75 6f 74 65 43 68 61 72 29 20 26 26 0d 0a 20  QuoteChar) &&.. 
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7090: 20 20 20 28 63 68 61 72 61 63 74 65 72 20 21 3d     (character !=
70a0: 20 73 65 70 61 72 61 74 6f 72 29 29 0d 0a 20 20   separator))..  
70b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
70c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
70d0: 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 41 70 70       element.App
70e0: 65 6e 64 28 45 73 63 61 70 65 43 68 61 72 29 3b  end(EscapeChar);
70f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7100: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7110: 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 41         element.A
7120: 70 70 65 6e 64 28 63 68 61 72 61 63 74 65 72 29  ppend(character)
7130: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7140: 20 20 20 65 73 63 61 70 65 20 3d 20 66 61 6c 73     escape = fals
7150: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
7160: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
7170: 6c 73 65 20 69 66 20 28 63 68 61 72 61 63 74 65  lse if (characte
7180: 72 20 3d 3d 20 45 73 63 61 70 65 43 68 61 72 29  r == EscapeChar)
7190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
71a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
71b0: 20 65 73 63 61 70 65 20 3d 20 74 72 75 65 3b 0d   escape = true;.
71c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
71e0: 20 69 66 20 28 63 68 61 72 61 63 74 65 72 20 3d   if (character =
71f0: 3d 20 51 75 6f 74 65 43 68 61 72 29 0d 0a 20 20  = QuoteChar)..  
7200: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7220: 28 6b 65 65 70 51 75 6f 74 65 29 0d 0a 20 20 20  (keepQuote)..   
7230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7240: 20 65 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 28   element.Append(
7250: 63 68 61 72 61 63 74 65 72 29 3b 0d 0a 0d 0a 20  character);.... 
7260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71                 q
7270: 75 6f 74 65 20 3d 20 21 71 75 6f 74 65 3b 0d 0a  uote = !quote;..
7280: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7290: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
72a0: 69 66 20 28 63 68 61 72 61 63 74 65 72 20 3d 3d  if (character ==
72b0: 20 73 65 70 61 72 61 74 6f 72 29 0d 0a 20 20 20   separator)..   
72c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
72e0: 71 75 6f 74 65 29 0d 0a 20 20 20 20 20 20 20 20  quote)..        
72f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
7310: 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 28 63 68  lement.Append(ch
7320: 61 72 61 63 74 65 72 29 3b 0d 0a 20 20 20 20 20  aracter);..     
7330: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
7350: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
7360: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7370: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 2e             list.
7380: 41 64 64 28 65 6c 65 6d 65 6e 74 2e 54 6f 53 74  Add(element.ToSt
7390: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
73b0: 65 6d 65 6e 74 2e 4c 65 6e 67 74 68 20 3d 20 30  ement.Length = 0
73c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
73d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
73e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
73f0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
7400: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7410: 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 41 70        element.Ap
7420: 70 65 6e 64 28 63 68 61 72 61 63 74 65 72 29 3b  pend(character);
7430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7440: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7450: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7460: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6e 20 75 6e    // NOTE: An un
7470: 62 61 6c 61 6e 63 65 64 20 65 73 63 61 70 65 20  balanced escape 
7480: 6f 72 20 71 75 6f 74 65 20 63 68 61 72 61 63 74  or quote charact
7490: 65 72 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  er in the string
74a0: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   is..        // 
74b0: 20 20 20 20 20 20 63 6f 6e 73 69 64 65 72 65 64        considered
74c0: 20 74 6f 20 62 65 20 61 20 66 61 74 61 6c 20 65   to be a fatal e
74d0: 72 72 6f 72 3b 20 74 68 65 72 65 66 6f 72 65 2c  rror; therefore,
74e0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 2e 0d 0a 20   return null... 
74f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
7500: 20 20 20 69 66 20 28 65 73 63 61 70 65 20 7c 7c     if (escape ||
7510: 20 71 75 6f 74 65 29 0d 0a 20 20 20 20 20 20 20   quote)..       
7520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7530: 65 72 72 6f 72 20 3d 20 22 75 6e 62 61 6c 61 6e  error = "unbalan
7540: 63 65 64 20 65 73 63 61 70 65 20 6f 72 20 71 75  ced escape or qu
7550: 6f 74 65 20 63 68 61 72 61 63 74 65 72 20 66 6f  ote character fo
7560: 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
7570: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
7580: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
7590: 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e        if (elemen
75a0: 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  t.Length > 0).. 
75b0: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 2e             list.
75c0: 41 64 64 28 65 6c 65 6d 65 6e 74 2e 54 6f 53 74  Add(element.ToSt
75d0: 72 69 6e 67 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  ring());....    
75e0: 20 20 20 20 72 65 74 75 72 6e 20 6c 69 73 74 2e      return list.
75f0: 54 6f 41 72 72 61 79 28 29 3b 0d 0a 20 20 20 20  ToArray();..    
7600: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
7610: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7620: 51 75 65 72 69 65 73 20 61 6e 64 20 72 65 74 75  Queries and retu
7630: 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 72  rns the string r
7640: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f  epresentation fo
7650: 72 20 61 6e 20 6f 62 6a 65 63 74 2c 20 75 73 69  r an object, usi
7660: 6e 67 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  ng the..    /// 
7670: 73 70 65 63 69 66 69 65 64 20 28 6f 72 20 63 75  specified (or cu
7680: 72 72 65 6e 74 29 20 66 6f 72 6d 61 74 20 70 72  rrent) format pr
7690: 6f 76 69 64 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f  ovider...    ///
76a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
76b0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
76c0: 3d 22 6f 62 6a 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ="obj">..    ///
76d0: 20 54 68 65 20 6f 62 6a 65 63 74 20 69 6e 73 74   The object inst
76e0: 61 6e 63 65 20 74 6f 20 72 65 74 75 72 6e 20 74  ance to return t
76f0: 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  he string repres
7700: 65 6e 74 61 74 69 6f 6e 20 66 6f 72 2e 0d 0a 20  entation for... 
7710: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
7720: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
7730: 6e 61 6d 65 3d 22 70 72 6f 76 69 64 65 72 22 3e  name="provider">
7740: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6f  ..    /// The fo
7750: 72 6d 61 74 20 70 72 6f 76 69 64 65 72 20 74 6f  rmat provider to
7760: 20 75 73 65 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69   use -OR- null i
7770: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 6f  f the current fo
7780: 72 6d 61 74 20 70 72 6f 76 69 64 65 72 20 66 6f  rmat provider fo
7790: 72 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 74  r..    /// the t
77a0: 68 72 65 61 64 20 73 68 6f 75 6c 64 20 62 65 20  hread should be 
77b0: 75 73 65 64 20 69 6e 73 74 65 61 64 2e 0d 0a 20  used instead... 
77c0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
77d0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
77e0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  s>..    /// The 
77f0: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
7800: 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 6f 62  ation for the ob
7810: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 2d 4f  ject instance -O
7820: 52 2d 20 6e 75 6c 6c 20 69 66 20 74 68 65 0d 0a  R- null if the..
7830: 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69      /// object i
7840: 6e 73 74 61 6e 63 65 20 69 73 20 61 6c 73 6f 20  nstance is also 
7850: 6e 75 6c 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  null...    /// <
7860: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
7870: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
7880: 69 6e 67 20 54 6f 53 74 72 69 6e 67 57 69 74 68  ing ToStringWith
7890: 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
78a0: 20 20 20 6f 62 6a 65 63 74 20 6f 62 6a 2c 0d 0a     object obj,..
78b0: 20 20 20 20 20 20 20 20 49 46 6f 72 6d 61 74 50          IFormatP
78c0: 72 6f 76 69 64 65 72 20 70 72 6f 76 69 64 65 72  rovider provider
78d0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
78e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
78f0: 6f 62 6a 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  obj == null)..  
7900: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7910: 20 6e 75 6c 6c 3b 20 2f 2a 20 6e 75 6c 6c 20 2d   null; /* null -
7920: 2d 3e 20 6e 75 6c 6c 20 2a 2f 0d 0a 0d 0a 20 20  -> null */....  
7930: 20 20 20 20 20 20 69 66 20 28 6f 62 6a 20 69 73        if (obj is
7940: 20 73 74 72 69 6e 67 29 0d 0a 20 20 20 20 20 20   string)..      
7950: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 74        return (st
7960: 72 69 6e 67 29 6f 62 6a 3b 20 2f 2a 20 69 64 65  ring)obj; /* ide
7970: 6e 74 69 74 79 20 2a 2f 0d 0a 0d 0a 20 20 20 20  ntity */....    
7980: 20 20 20 20 49 43 6f 6e 76 65 72 74 69 62 6c 65      IConvertible
7990: 20 63 6f 6e 76 65 72 74 69 62 6c 65 20 3d 20 6f   convertible = o
79a0: 62 6a 20 61 73 20 49 43 6f 6e 76 65 72 74 69 62  bj as IConvertib
79b0: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  le;....        i
79c0: 66 20 28 63 6f 6e 76 65 72 74 69 62 6c 65 20 21  f (convertible !
79d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
79e0: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 76       return conv
79f0: 65 72 74 69 62 6c 65 2e 54 6f 53 74 72 69 6e 67  ertible.ToString
7a00: 28 70 72 6f 76 69 64 65 72 29 3b 0d 0a 0d 0a 20  (provider);.... 
7a10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6f 62         return ob
7a20: 6a 2e 54 6f 53 74 72 69 6e 67 28 29 3b 20 2f 2a  j.ToString(); /*
7a30: 20 6e 6f 74 20 49 43 6f 6e 76 65 72 74 69 62 6c   not IConvertibl
7a40: 65 20 2a 2f 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e */..    }.... 
7a50: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7a60: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72  ..    /// Conver
7a70: 74 20 61 20 76 61 6c 75 65 20 74 6f 20 74 72 75  t a value to tru
7a80: 65 20 6f 72 20 66 61 6c 73 65 2e 0d 0a 20 20 20  e or false...   
7a90: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
7ab0: 6e 61 6d 65 3d 22 73 6f 75 72 63 65 22 3e 41 20  name="source">A 
7ac0: 73 74 72 69 6e 67 20 6f 72 20 6e 75 6d 62 65 72  string or number
7ad0: 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 72   representing tr
7ae0: 75 65 20 6f 72 20 66 61 6c 73 65 3c 2f 70 61 72  ue or false</par
7af0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
7b00: 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e  turns></returns>
7b10: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61  ..    public sta
7b20: 74 69 63 20 62 6f 6f 6c 20 54 6f 42 6f 6f 6c 65  tic bool ToBoole
7b30: 61 6e 28 6f 62 6a 65 63 74 20 73 6f 75 72 63 65  an(object source
7b40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7b50: 69 66 20 28 73 6f 75 72 63 65 20 69 73 20 62 6f  if (source is bo
7b60: 6f 6c 29 20 72 65 74 75 72 6e 20 28 62 6f 6f 6c  ol) return (bool
7b70: 29 73 6f 75 72 63 65 3b 0d 0a 0d 0a 20 20 20 20  )source;....    
7b80: 20 20 72 65 74 75 72 6e 20 54 6f 42 6f 6f 6c 65    return ToBoole
7b90: 61 6e 28 54 6f 53 74 72 69 6e 67 57 69 74 68 50  an(ToStringWithP
7ba0: 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
7bb0: 20 20 20 20 73 6f 75 72 63 65 2c 20 43 75 6c 74      source, Cult
7bc0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
7bd0: 74 43 75 6c 74 75 72 65 29 29 3b 0d 0a 20 20 20  tCulture));..   
7be0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
7bf0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7c00: 20 43 6f 6e 76 65 72 74 20 61 20 73 74 72 69 6e   Convert a strin
7c10: 67 20 74 6f 20 74 72 75 65 20 6f 72 20 66 61 6c  g to true or fal
7c20: 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  se...    /// </s
7c30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
7c40: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f   <param name="so
7c50: 75 72 63 65 22 3e 41 20 73 74 72 69 6e 67 20 72  urce">A string r
7c60: 65 70 72 65 73 65 6e 74 69 6e 67 20 74 72 75 65  epresenting true
7c70: 20 6f 72 20 66 61 6c 73 65 3c 2f 70 61 72 61 6d   or false</param
7c80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
7c90: 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  rns></returns>..
7ca0: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
7cb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 22 79 65 73 22  >..    /// "yes"
7cc0: 2c 20 22 6e 6f 22 2c 20 22 79 22 2c 20 22 6e 22  , "no", "y", "n"
7cd0: 2c 20 22 30 22 2c 20 22 31 22 2c 20 22 6f 6e 22  , "0", "1", "on"
7ce0: 2c 20 22 6f 66 66 22 20 61 73 20 77 65 6c 6c 20  , "off" as well 
7cf0: 61 73 20 42 6f 6f 6c 65 61 6e 2e 46 61 6c 73 65  as Boolean.False
7d00: 53 74 72 69 6e 67 20 61 6e 64 20 42 6f 6f 6c 65  String and Boole
7d10: 61 6e 2e 54 72 75 65 53 74 72 69 6e 67 20 77 69  an.TrueString wi
7d20: 6c 6c 20 61 6c 6c 20 62 65 0d 0a 20 20 20 20 2f  ll all be..    /
7d30: 2f 2f 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  // converted to 
7d40: 61 20 70 72 6f 70 65 72 20 62 6f 6f 6c 65 61 6e  a proper boolean
7d50: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f   value...    ///
7d60: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20   </remarks>..   
7d70: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
7d80: 6f 6f 6c 20 54 6f 42 6f 6f 6c 65 61 6e 28 73 74  ool ToBoolean(st
7d90: 72 69 6e 67 20 73 6f 75 72 63 65 29 0d 0a 20 20  ring source)..  
7da0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 53    {..      if (S
7db0: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73 6f  tring.Compare(so
7dc0: 75 72 63 65 2c 20 62 6f 6f 6c 2e 54 72 75 65 53  urce, bool.TrueS
7dd0: 74 72 69 6e 67 2c 20 53 74 72 69 6e 67 43 6f 6d  tring, StringCom
7de0: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
7df0: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
7e00: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
7e10: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74       else if (St
7e20: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73 6f 75  ring.Compare(sou
7e30: 72 63 65 2c 20 62 6f 6f 6c 2e 46 61 6c 73 65 53  rce, bool.FalseS
7e40: 74 72 69 6e 67 2c 20 53 74 72 69 6e 67 43 6f 6d  tring, StringCom
7e50: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
7e60: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 29  gnoreCase) == 0)
7e70: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
7e80: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 28 73  ..      switch(s
7e90: 6f 75 72 63 65 2e 54 6f 4c 6f 77 65 72 28 43 75  ource.ToLower(Cu
7ea0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
7eb0: 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20  antCulture))..  
7ec0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
7ed0: 61 73 65 20 22 79 65 73 22 3a 0d 0a 20 20 20 20  ase "yes":..    
7ee0: 20 20 20 20 63 61 73 65 20 22 79 22 3a 0d 0a 20      case "y":.. 
7ef0: 20 20 20 20 20 20 20 63 61 73 65 20 22 31 22 3a         case "1":
7f00: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  ..        case "
7f10: 6f 6e 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  on":..          
7f20: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
7f30: 20 20 20 20 20 20 63 61 73 65 20 22 6e 6f 22 3a        case "no":
7f40: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  ..        case "
7f50: 6e 22 3a 0d 0a 20 20 20 20 20 20 20 20 63 61 73  n":..        cas
7f60: 65 20 22 30 22 3a 0d 0a 20 20 20 20 20 20 20 20  e "0":..        
7f70: 63 61 73 65 20 22 6f 66 66 22 3a 0d 0a 20 20 20  case "off":..   
7f80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
7f90: 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 64 65  lse;..        de
7fa0: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
7fb0: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
7fc0: 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 22 73  mentException("s
7fd0: 6f 75 72 63 65 22 29 3b 0d 0a 20 20 20 20 20 20  ource");..      
7fe0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
7ff0: 23 72 65 67 69 6f 6e 20 54 79 70 65 20 43 6f 6e  #region Type Con
8000: 76 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f  versions..    //
8010: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8020: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
8030: 53 51 4c 69 74 65 54 79 70 65 20 74 6f 20 61 20  SQLiteType to a 
8040: 2e 4e 45 54 20 54 79 70 65 20 6f 62 6a 65 63 74  .NET Type object
8050: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
8060: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
8070: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 22 3e 54 68  aram name="t">Th
8080: 65 20 53 51 4c 69 74 65 54 79 70 65 20 74 6f 20  e SQLiteType to 
8090: 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0d  convert</param>.
80a0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
80b0: 73 3e 52 65 74 75 72 6e 73 20 61 20 2e 4e 45 54  s>Returns a .NET
80c0: 20 54 79 70 65 20 6f 62 6a 65 63 74 3c 2f 72 65   Type object</re
80d0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
80e0: 72 6e 61 6c 20 73 74 61 74 69 63 20 54 79 70 65  rnal static Type
80f0: 20 53 51 4c 69 74 65 54 79 70 65 54 6f 54 79 70   SQLiteTypeToTyp
8100: 65 28 53 51 4c 69 74 65 54 79 70 65 20 74 29 0d  e(SQLiteType t).
8110: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
8120: 20 28 74 2e 54 79 70 65 20 3d 3d 20 44 62 54 79   (t.Type == DbTy
8130: 70 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20  pe.Object)..    
8140: 20 20 20 20 72 65 74 75 72 6e 20 5f 61 66 66 69      return _affi
8150: 6e 69 74 79 74 6f 74 79 70 65 5b 28 69 6e 74 29  nitytotype[(int)
8160: 74 2e 41 66 66 69 6e 69 74 79 5d 3b 0d 0a 20 20  t.Affinity];..  
8170: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
8180: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43    return SQLiteC
8190: 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 54  onvert.DbTypeToT
81a0: 79 70 65 28 74 2e 54 79 70 65 29 3b 0d 0a 20 20  ype(t.Type);..  
81b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61    }....    priva
81c0: 74 65 20 73 74 61 74 69 63 20 54 79 70 65 5b 5d  te static Type[]
81d0: 20 5f 61 66 66 69 6e 69 74 79 74 6f 74 79 70 65   _affinitytotype
81e0: 20 3d 20 7b 0d 0a 20 20 20 20 20 20 74 79 70 65   = {..      type
81f0: 6f 66 28 6f 62 6a 65 63 74 29 2c 20 20 20 2f 2f  of(object),   //
8200: 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20 28   Uninitialized (
8210: 30 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  0)..      typeof
8220: 28 49 6e 74 36 34 29 2c 20 20 20 20 2f 2f 20 49  (Int64),    // I
8230: 6e 74 36 34 20 28 31 29 0d 0a 20 20 20 20 20 20  nt64 (1)..      
8240: 74 79 70 65 6f 66 28 44 6f 75 62 6c 65 29 2c 20  typeof(Double), 
8250: 20 20 2f 2f 20 44 6f 75 62 6c 65 20 28 32 29 0d    // Double (2).
8260: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74  .      typeof(st
8270: 72 69 6e 67 29 2c 20 20 20 2f 2f 20 54 65 78 74  ring),   // Text
8280: 20 28 33 29 0d 0a 20 20 20 20 20 20 74 79 70 65   (3)..      type
8290: 6f 66 28 62 79 74 65 5b 5d 29 2c 20 20 20 2f 2f  of(byte[]),   //
82a0: 20 42 6c 6f 62 20 28 34 29 0d 0a 20 20 20 20 20   Blob (4)..     
82b0: 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 2c   typeof(object),
82c0: 20 20 20 2f 2f 20 4e 75 6c 6c 20 28 35 29 0d 0a     // Null (5)..
82d0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 44 61 74        typeof(Dat
82e0: 65 54 69 6d 65 29 2c 20 2f 2f 20 44 61 74 65 54  eTime), // DateT
82f0: 69 6d 65 20 28 31 30 29 0d 0a 20 20 20 20 20 20  ime (10)..      
8300: 74 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 20 20  typeof(object)  
8310: 20 20 2f 2f 20 4e 6f 6e 65 20 28 31 31 29 0d 0a    // None (11)..
8320: 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      };....    //
8330: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8340: 20 2f 2f 2f 20 46 6f 72 20 61 20 67 69 76 65 6e   /// For a given
8350: 20 69 6e 74 72 69 6e 73 69 63 20 74 79 70 65 2c   intrinsic type,
8360: 20 72 65 74 75 72 6e 20 61 20 44 62 54 79 70 65   return a DbType
8370: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
8380: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
8390: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
83a0: 54 68 65 20 6e 61 74 69 76 65 20 74 79 70 65 20  The native type 
83b0: 74 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61  to convert</para
83c0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
83d0: 75 72 6e 73 3e 54 68 65 20 63 6f 72 72 65 73 70  urns>The corresp
83e0: 6f 6e 64 69 6e 67 20 28 63 6c 6f 73 65 73 74 20  onding (closest 
83f0: 6d 61 74 63 68 29 20 44 62 54 79 70 65 3c 2f 72  match) DbType</r
8400: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
8410: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 44 62 54  ernal static DbT
8420: 79 70 65 20 54 79 70 65 54 6f 44 62 54 79 70 65  ype TypeToDbType
8430: 28 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20  (Type typ)..    
8440: 7b 0d 0a 20 20 20 20 20 20 54 79 70 65 43 6f 64  {..      TypeCod
8450: 65 20 74 63 20 3d 20 54 79 70 65 2e 47 65 74 54  e tc = Type.GetT
8460: 79 70 65 43 6f 64 65 28 74 79 70 29 3b 0d 0a 20  ypeCode(typ);.. 
8470: 20 20 20 20 20 69 66 20 28 74 63 20 3d 3d 20 54       if (tc == T
8480: 79 70 65 43 6f 64 65 2e 4f 62 6a 65 63 74 29 0d  ypeCode.Object).
8490: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
84a0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 74 79 70    if (typ == typ
84b0: 65 6f 66 28 62 79 74 65 5b 5d 29 29 20 72 65 74  eof(byte[])) ret
84c0: 75 72 6e 20 44 62 54 79 70 65 2e 42 69 6e 61 72  urn DbType.Binar
84d0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  y;..        if (
84e0: 74 79 70 20 3d 3d 20 74 79 70 65 6f 66 28 47 75  typ == typeof(Gu
84f0: 69 64 29 29 20 72 65 74 75 72 6e 20 44 62 54 79  id)) return DbTy
8500: 70 65 2e 47 75 69 64 3b 0d 0a 20 20 20 20 20 20  pe.Guid;..      
8510: 20 20 72 65 74 75 72 6e 20 44 62 54 79 70 65 2e    return DbType.
8520: 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20 7d  String;..      }
8530: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ..      return _
8540: 74 79 70 65 74 6f 64 62 74 79 70 65 5b 28 69 6e  typetodbtype[(in
8550: 74 29 74 63 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  t)tc];..    }...
8560: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
8570: 74 69 63 20 44 62 54 79 70 65 5b 5d 20 5f 74 79  tic DbType[] _ty
8580: 70 65 74 6f 64 62 74 79 70 65 20 3d 20 7b 0d 0a  petodbtype = {..
8590: 20 20 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a        DbType.Obj
85a0: 65 63 74 2c 20 20 20 2f 2f 20 45 6d 70 74 79 20  ect,   // Empty 
85b0: 28 30 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70  (0)..      DbTyp
85c0: 65 2e 42 69 6e 61 72 79 2c 20 20 20 2f 2f 20 4f  e.Binary,   // O
85d0: 62 6a 65 63 74 20 28 31 29 0d 0a 20 20 20 20 20  bject (1)..     
85e0: 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 2c 20   DbType.Object, 
85f0: 20 20 2f 2f 20 44 42 4e 75 6c 6c 20 28 32 29 0d    // DBNull (2).
8600: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 42 6f  .      DbType.Bo
8610: 6f 6c 65 61 6e 2c 20 20 2f 2f 20 42 6f 6f 6c 65  olean,  // Boole
8620: 61 6e 20 28 33 29 0d 0a 20 20 20 20 20 20 44 62  an (3)..      Db
8630: 54 79 70 65 2e 53 42 79 74 65 2c 20 20 20 20 2f  Type.SByte,    /
8640: 2f 20 43 68 61 72 20 28 34 29 0d 0a 20 20 20 20  / Char (4)..    
8650: 20 20 44 62 54 79 70 65 2e 53 42 79 74 65 2c 20    DbType.SByte, 
8660: 20 20 20 2f 2f 20 53 42 79 74 65 20 28 35 29 0d     // SByte (5).
8670: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 42 79  .      DbType.By
8680: 74 65 2c 20 20 20 20 20 2f 2f 20 42 79 74 65 20  te,     // Byte 
8690: 28 36 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70  (6)..      DbTyp
86a0: 65 2e 49 6e 74 31 36 2c 20 20 20 20 2f 2f 20 49  e.Int16,    // I
86b0: 6e 74 31 36 20 28 37 29 0d 0a 20 20 20 20 20 20  nt16 (7)..      
86c0: 44 62 54 79 70 65 2e 55 49 6e 74 31 36 2c 20 20  DbType.UInt16,  
86d0: 20 2f 2f 20 55 49 6e 74 31 36 20 28 38 29 0d 0a   // UInt16 (8)..
86e0: 20 20 20 20 20 20 44 62 54 79 70 65 2e 49 6e 74        DbType.Int
86f0: 33 32 2c 20 20 20 20 2f 2f 20 49 6e 74 33 32 20  32,    // Int32 
8700: 28 39 29 0d 0a 20 20 20 20 20 20 44 62 54 79 70  (9)..      DbTyp
8710: 65 2e 55 49 6e 74 33 32 2c 20 20 20 2f 2f 20 55  e.UInt32,   // U
8720: 49 6e 74 33 32 20 28 31 30 29 0d 0a 20 20 20 20  Int32 (10)..    
8730: 20 20 44 62 54 79 70 65 2e 49 6e 74 36 34 2c 20    DbType.Int64, 
8740: 20 20 20 2f 2f 20 49 6e 74 36 34 20 28 31 31 29     // Int64 (11)
8750: 0d 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 55  ..      DbType.U
8760: 49 6e 74 36 34 2c 20 20 20 2f 2f 20 55 49 6e 74  Int64,   // UInt
8770: 36 34 20 28 31 32 29 0d 0a 20 20 20 20 20 20 44  64 (12)..      D
8780: 62 54 79 70 65 2e 53 69 6e 67 6c 65 2c 20 20 20  bType.Single,   
8790: 2f 2f 20 53 69 6e 67 6c 65 20 28 31 33 29 0d 0a  // Single (13)..
87a0: 20 20 20 20 20 20 44 62 54 79 70 65 2e 44 6f 75        DbType.Dou
87b0: 62 6c 65 2c 20 20 20 2f 2f 20 44 6f 75 62 6c 65  ble,   // Double
87c0: 20 28 31 34 29 0d 0a 20 20 20 20 20 20 44 62 54   (14)..      DbT
87d0: 79 70 65 2e 44 65 63 69 6d 61 6c 2c 20 20 2f 2f  ype.Decimal,  //
87e0: 20 44 65 63 69 6d 61 6c 20 28 31 35 29 0d 0a 20   Decimal (15).. 
87f0: 20 20 20 20 20 44 62 54 79 70 65 2e 44 61 74 65       DbType.Date
8800: 54 69 6d 65 2c 20 2f 2f 20 44 61 74 65 54 69 6d  Time, // DateTim
8810: 65 20 28 31 36 29 0d 0a 20 20 20 20 20 20 44 62  e (16)..      Db
8820: 54 79 70 65 2e 4f 62 6a 65 63 74 2c 20 20 20 2f  Type.Object,   /
8830: 2f 20 3f 3f 20 28 31 37 29 0d 0a 20 20 20 20 20  / ?? (17)..     
8840: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 20 20   DbType.String  
8850: 20 20 2f 2f 20 53 74 72 69 6e 67 20 28 31 38 29    // String (18)
8860: 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20  ..    };....    
8870: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8880: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
8890: 68 65 20 43 6f 6c 75 6d 6e 53 69 7a 65 20 66 6f  he ColumnSize fo
88a0: 72 20 74 68 65 20 67 69 76 65 6e 20 44 62 54 79  r the given DbTy
88b0: 70 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  pe..    /// </su
88c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
88d0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70  <param name="typ
88e0: 22 3e 54 68 65 20 44 62 54 79 70 65 20 74 6f 20  ">The DbType to 
88f0: 67 65 74 20 74 68 65 20 73 69 7a 65 20 6f 66 3c  get the size of<
8900: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
8910: 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75   <returns></retu
8920: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
8930: 61 6c 20 73 74 61 74 69 63 20 69 6e 74 20 44 62  al static int Db
8940: 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65  TypeToColumnSize
8950: 28 44 62 54 79 70 65 20 74 79 70 29 0d 0a 20 20  (DbType typ)..  
8960: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
8970: 6e 20 5f 64 62 74 79 70 65 74 6f 63 6f 6c 75 6d  n _dbtypetocolum
8980: 6e 73 69 7a 65 5b 28 69 6e 74 29 74 79 70 5d 3b  nsize[(int)typ];
8990: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
89a0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
89b0: 74 5b 5d 20 5f 64 62 74 79 70 65 74 6f 63 6f 6c  t[] _dbtypetocol
89c0: 75 6d 6e 73 69 7a 65 20 3d 20 7b 0d 0a 20 20 20  umnsize = {..   
89d0: 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65 2c     int.MaxValue,
89e0: 20 2f 2f 20 41 6e 73 69 53 74 72 69 6e 67 20 28   // AnsiString (
89f0: 30 29 0d 0a 20 20 20 20 20 20 69 6e 74 2e 4d 61  0)..      int.Ma
8a00: 78 56 61 6c 75 65 2c 20 2f 2f 20 42 69 6e 61 72  xValue, // Binar
8a10: 79 20 28 31 29 0d 0a 20 20 20 20 20 20 31 2c 20  y (1)..      1, 
8a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 79             // By
8a30: 74 65 20 28 32 29 0d 0a 20 20 20 20 20 20 31 2c  te (2)..      1,
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
8a50: 6f 6f 6c 65 61 6e 20 28 33 29 0d 0a 20 20 20 20  oolean (3)..    
8a60: 20 20 38 2c 20 20 20 20 20 20 20 20 20 20 20 20    8,            
8a70: 2f 2f 20 43 75 72 72 65 6e 63 79 20 28 34 29 0d  // Currency (4).
8a80: 0a 20 20 20 20 20 20 38 2c 20 20 20 20 20 20 20  .      8,       
8a90: 20 20 20 20 20 2f 2f 20 44 61 74 65 20 28 35 29       // Date (5)
8aa0: 0d 0a 20 20 20 20 20 20 38 2c 20 20 20 20 20 20  ..      8,      
8ab0: 20 20 20 20 20 20 2f 2f 20 44 61 74 65 54 69 6d        // DateTim
8ac0: 65 20 28 36 29 0d 0a 20 20 20 20 20 20 38 2c 20  e (6)..      8, 
8ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
8ae0: 63 69 6d 61 6c 20 28 37 29 0d 0a 20 20 20 20 20  cimal (7)..     
8af0: 20 38 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f   8,            /
8b00: 2f 20 44 6f 75 62 6c 65 20 28 38 29 0d 0a 20 20  / Double (8)..  
8b10: 20 20 20 20 31 36 2c 20 20 20 20 20 20 20 20 20      16,         
8b20: 20 20 2f 2f 20 47 75 69 64 20 28 39 29 0d 0a 20    // Guid (9).. 
8b30: 20 20 20 20 20 32 2c 20 20 20 20 20 20 20 20 20       2,         
8b40: 20 20 20 2f 2f 20 49 6e 74 31 36 20 28 31 30 29     // Int16 (10)
8b50: 0d 0a 20 20 20 20 20 20 34 2c 20 20 20 20 20 20  ..      4,      
8b60: 20 20 20 20 20 20 2f 2f 20 49 6e 74 33 32 20 28        // Int32 (
8b70: 31 31 29 0d 0a 20 20 20 20 20 20 38 2c 20 20 20  11)..      8,   
8b80: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e 74 36           // Int6
8b90: 34 20 28 31 32 29 0d 0a 20 20 20 20 20 20 69 6e  4 (12)..      in
8ba0: 74 2e 4d 61 78 56 61 6c 75 65 2c 20 2f 2f 20 4f  t.MaxValue, // O
8bb0: 62 6a 65 63 74 20 28 31 33 29 0d 0a 20 20 20 20  bject (13)..    
8bc0: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
8bd0: 2f 2f 20 53 42 79 74 65 20 28 31 34 29 0d 0a 20  // SByte (14).. 
8be0: 20 20 20 20 20 34 2c 20 20 20 20 20 20 20 20 20       4,         
8bf0: 20 20 20 2f 2f 20 53 69 6e 67 6c 65 20 28 31 35     // Single (15
8c00: 29 0d 0a 20 20 20 20 20 20 69 6e 74 2e 4d 61 78  )..      int.Max
8c10: 56 61 6c 75 65 2c 20 2f 2f 20 53 74 72 69 6e 67  Value, // String
8c20: 20 28 31 36 29 0d 0a 20 20 20 20 20 20 38 2c 20   (16)..      8, 
8c30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 69             // Ti
8c40: 6d 65 20 28 31 37 29 0d 0a 20 20 20 20 20 20 32  me (17)..      2
8c50: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ,            // 
8c60: 55 49 6e 74 31 36 20 28 31 38 29 0d 0a 20 20 20  UInt16 (18)..   
8c70: 20 20 20 34 2c 20 20 20 20 20 20 20 20 20 20 20     4,           
8c80: 20 2f 2f 20 55 49 6e 74 33 32 20 28 31 39 29 0d   // UInt32 (19).
8c90: 0a 20 20 20 20 20 20 38 2c 20 20 20 20 20 20 20  .      8,       
8ca0: 20 20 20 20 20 2f 2f 20 55 49 6e 74 36 34 20 28       // UInt64 (
8cb0: 32 30 29 0d 0a 20 20 20 20 20 20 38 2c 20 20 20  20)..      8,   
8cc0: 20 20 20 20 20 20 20 20 20 2f 2f 20 56 61 72 4e           // VarN
8cd0: 75 6d 65 72 69 63 20 28 32 31 29 0d 0a 20 20 20  umeric (21)..   
8ce0: 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c 75 65 2c     int.MaxValue,
8cf0: 20 2f 2f 20 41 6e 73 69 53 74 72 69 6e 67 46 69   // AnsiStringFi
8d00: 78 65 64 4c 65 6e 67 74 68 20 28 32 32 29 0d 0a  xedLength (22)..
8d10: 20 20 20 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c        int.MaxVal
8d20: 75 65 2c 20 2f 2f 20 53 74 72 69 6e 67 46 69 78  ue, // StringFix
8d30: 65 64 4c 65 6e 67 74 68 20 28 32 33 29 0d 0a 20  edLength (23).. 
8d40: 20 20 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c 75       int.MaxValu
8d50: 65 2c 20 2f 2f 20 3f 3f 20 28 32 34 29 0d 0a 20  e, // ?? (24).. 
8d60: 20 20 20 20 20 69 6e 74 2e 4d 61 78 56 61 6c 75       int.MaxValu
8d70: 65 20 20 2f 2f 20 58 6d 6c 20 28 32 35 29 0d 0a  e  // Xml (25)..
8d80: 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 69 6e      };....    in
8d90: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 6f 62  ternal static ob
8da0: 6a 65 63 74 20 44 62 54 79 70 65 54 6f 4e 75 6d  ject DbTypeToNum
8db0: 65 72 69 63 50 72 65 63 69 73 69 6f 6e 28 44 62  ericPrecision(Db
8dc0: 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b  Type typ)..    {
8dd0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ..      return _
8de0: 64 62 74 79 70 65 74 6f 6e 75 6d 65 72 69 63 70  dbtypetonumericp
8df0: 72 65 63 69 73 69 6f 6e 5b 28 69 6e 74 29 74 79  recision[(int)ty
8e00: 70 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  p];..    }....  
8e10: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
8e20: 20 6f 62 6a 65 63 74 5b 5d 20 5f 64 62 74 79 70   object[] _dbtyp
8e30: 65 74 6f 6e 75 6d 65 72 69 63 70 72 65 63 69 73  etonumericprecis
8e40: 69 6f 6e 20 3d 20 7b 0d 0a 20 20 20 20 20 20 44  ion = {..      D
8e50: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
8e60: 41 6e 73 69 53 74 72 69 6e 67 20 28 30 29 0d 0a  AnsiString (0)..
8e70: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
8e80: 75 65 2c 20 2f 2f 20 42 69 6e 61 72 79 20 28 31  ue, // Binary (1
8e90: 29 0d 0a 20 20 20 20 20 20 33 2c 20 20 20 20 20  )..      3,     
8ea0: 20 20 20 20 20 20 20 2f 2f 20 42 79 74 65 20 28         // Byte (
8eb0: 32 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  2)..      DBNull
8ec0: 2e 56 61 6c 75 65 2c 20 2f 2f 20 42 6f 6f 6c 65  .Value, // Boole
8ed0: 61 6e 20 28 33 29 0d 0a 20 20 20 20 20 20 31 39  an (3)..      19
8ee0: 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43  ,           // C
8ef0: 75 72 72 65 6e 63 79 20 28 34 29 0d 0a 20 20 20  urrency (4)..   
8f00: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
8f10: 20 2f 2f 20 44 61 74 65 20 28 35 29 0d 0a 20 20   // Date (5)..  
8f20: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
8f30: 2c 20 2f 2f 20 44 61 74 65 54 69 6d 65 20 28 36  , // DateTime (6
8f40: 29 0d 0a 20 20 20 20 20 20 35 33 2c 20 20 20 20  )..      53,    
8f50: 20 20 20 20 20 20 20 2f 2f 20 44 65 63 69 6d 61         // Decima
8f60: 6c 20 28 37 29 0d 0a 20 20 20 20 20 20 35 33 2c  l (7)..      53,
8f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 6f             // Do
8f80: 75 62 6c 65 20 28 38 29 0d 0a 20 20 20 20 20 20  uble (8)..      
8f90: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f  DBNull.Value, //
8fa0: 20 47 75 69 64 20 28 39 29 0d 0a 20 20 20 20 20   Guid (9)..     
8fb0: 20 35 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f   5,            /
8fc0: 2f 20 49 6e 74 31 36 20 28 31 30 29 0d 0a 20 20  / Int16 (10)..  
8fd0: 20 20 20 20 31 30 2c 20 20 20 20 20 20 20 20 20      10,         
8fe0: 20 20 2f 2f 20 49 6e 74 33 32 20 28 31 31 29 0d    // Int32 (11).
8ff0: 0a 20 20 20 20 20 20 31 39 2c 20 20 20 20 20 20  .      19,      
9000: 20 20 20 20 20 2f 2f 20 49 6e 74 36 34 20 28 31       // Int64 (1
9010: 32 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  2)..      DBNull
9020: 2e 56 61 6c 75 65 2c 20 2f 2f 20 4f 62 6a 65 63  .Value, // Objec
9030: 74 20 28 31 33 29 0d 0a 20 20 20 20 20 20 33 2c  t (13)..      3,
9040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53              // S
9050: 42 79 74 65 20 28 31 34 29 0d 0a 20 20 20 20 20  Byte (14)..     
9060: 20 32 34 2c 20 20 20 20 20 20 20 20 20 20 20 2f   24,           /
9070: 2f 20 53 69 6e 67 6c 65 20 28 31 35 29 0d 0a 20  / Single (15).. 
9080: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
9090: 65 2c 20 2f 2f 20 53 74 72 69 6e 67 20 28 31 36  e, // String (16
90a0: 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  )..      DBNull.
90b0: 56 61 6c 75 65 2c 20 2f 2f 20 54 69 6d 65 20 28  Value, // Time (
90c0: 31 37 29 0d 0a 20 20 20 20 20 20 35 2c 20 20 20  17)..      5,   
90d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 49 6e 74           // UInt
90e0: 31 36 20 28 31 38 29 0d 0a 20 20 20 20 20 20 31  16 (18)..      1
90f0: 30 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  0,           // 
9100: 55 49 6e 74 33 32 20 28 31 39 29 0d 0a 20 20 20  UInt32 (19)..   
9110: 20 20 20 31 39 2c 20 20 20 20 20 20 20 20 20 20     19,          
9120: 20 2f 2f 20 55 49 6e 74 36 34 20 28 32 30 29 0d   // UInt64 (20).
9130: 0a 20 20 20 20 20 20 35 33 2c 20 20 20 20 20 20  .      53,      
9140: 20 20 20 20 20 2f 2f 20 56 61 72 4e 75 6d 65 72       // VarNumer
9150: 69 63 20 28 32 31 29 0d 0a 20 20 20 20 20 20 44  ic (21)..      D
9160: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
9170: 41 6e 73 69 53 74 72 69 6e 67 46 69 78 65 64 4c  AnsiStringFixedL
9180: 65 6e 67 74 68 20 28 32 32 29 0d 0a 20 20 20 20  ength (22)..    
9190: 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20    DBNull.Value, 
91a0: 2f 2f 20 53 74 72 69 6e 67 46 69 78 65 64 4c 65  // StringFixedLe
91b0: 6e 67 74 68 20 28 32 33 29 0d 0a 20 20 20 20 20  ngth (23)..     
91c0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f   DBNull.Value, /
91d0: 2f 20 3f 3f 20 28 32 34 29 0d 0a 20 20 20 20 20  / ?? (24)..     
91e0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 20 20 2f   DBNull.Value  /
91f0: 2f 20 58 6d 6c 20 28 32 35 29 0d 0a 20 20 20 20  / Xml (25)..    
9200: 7d 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  };....    intern
9210: 61 6c 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  al static object
9220: 20 44 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63   DbTypeToNumeric
9230: 53 63 61 6c 65 28 44 62 54 79 70 65 20 74 79 70  Scale(DbType typ
9240: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9250: 72 65 74 75 72 6e 20 5f 64 62 74 79 70 65 74 6f  return _dbtypeto
9260: 6e 75 6d 65 72 69 63 73 63 61 6c 65 5b 28 69 6e  numericscale[(in
9270: 74 29 74 79 70 5d 3b 0d 0a 20 20 20 20 7d 0d 0a  t)typ];..    }..
9280: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
9290: 61 74 69 63 20 6f 62 6a 65 63 74 5b 5d 20 5f 64  atic object[] _d
92a0: 62 74 79 70 65 74 6f 6e 75 6d 65 72 69 63 73 63  btypetonumericsc
92b0: 61 6c 65 20 3d 20 7b 0d 0a 20 20 20 20 20 20 44  ale = {..      D
92c0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
92d0: 41 6e 73 69 53 74 72 69 6e 67 20 28 30 29 0d 0a  AnsiString (0)..
92e0: 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c        DBNull.Val
92f0: 75 65 2c 20 2f 2f 20 42 69 6e 61 72 79 20 28 31  ue, // Binary (1
9300: 29 0d 0a 20 20 20 20 20 20 30 2c 20 20 20 20 20  )..      0,     
9310: 20 20 20 20 20 20 20 2f 2f 20 42 79 74 65 20 28         // Byte (
9320: 32 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  2)..      DBNull
9330: 2e 56 61 6c 75 65 2c 20 2f 2f 20 42 6f 6f 6c 65  .Value, // Boole
9340: 61 6e 20 28 33 29 0d 0a 20 20 20 20 20 20 34 2c  an (3)..      4,
9350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43              // C
9360: 75 72 72 65 6e 63 79 20 28 34 29 0d 0a 20 20 20  urrency (4)..   
9370: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
9380: 20 2f 2f 20 44 61 74 65 20 28 35 29 0d 0a 20 20   // Date (5)..  
9390: 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65      DBNull.Value
93a0: 2c 20 2f 2f 20 44 61 74 65 54 69 6d 65 20 28 36  , // DateTime (6
93b0: 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  )..      DBNull.
93c0: 56 61 6c 75 65 2c 20 2f 2f 20 44 65 63 69 6d 61  Value, // Decima
93d0: 6c 20 28 37 29 0d 0a 20 20 20 20 20 20 44 42 4e  l (7)..      DBN
93e0: 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20 44 6f  ull.Value, // Do
93f0: 75 62 6c 65 20 28 38 29 0d 0a 20 20 20 20 20 20  uble (8)..      
9400: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f  DBNull.Value, //
9410: 20 47 75 69 64 20 28 39 29 0d 0a 20 20 20 20 20   Guid (9)..     
9420: 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f   0,            /
9430: 2f 20 49 6e 74 31 36 20 28 31 30 29 0d 0a 20 20  / Int16 (10)..  
9440: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20      0,          
9450: 20 20 2f 2f 20 49 6e 74 33 32 20 28 31 31 29 0d    // Int32 (11).
9460: 0a 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20  .      0,       
9470: 20 20 20 20 20 2f 2f 20 49 6e 74 36 34 20 28 31       // Int64 (1
9480: 32 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  2)..      DBNull
9490: 2e 56 61 6c 75 65 2c 20 2f 2f 20 4f 62 6a 65 63  .Value, // Objec
94a0: 74 20 28 31 33 29 0d 0a 20 20 20 20 20 20 30 2c  t (13)..      0,
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53              // S
94c0: 42 79 74 65 20 28 31 34 29 0d 0a 20 20 20 20 20  Byte (14)..     
94d0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f   DBNull.Value, /
94e0: 2f 20 53 69 6e 67 6c 65 20 28 31 35 29 0d 0a 20  / Single (15).. 
94f0: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
9500: 65 2c 20 2f 2f 20 53 74 72 69 6e 67 20 28 31 36  e, // String (16
9510: 29 0d 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  )..      DBNull.
9520: 56 61 6c 75 65 2c 20 2f 2f 20 54 69 6d 65 20 28  Value, // Time (
9530: 31 37 29 0d 0a 20 20 20 20 20 20 30 2c 20 20 20  17)..      0,   
9540: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 49 6e 74           // UInt
9550: 31 36 20 28 31 38 29 0d 0a 20 20 20 20 20 20 30  16 (18)..      0
9560: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  ,            // 
9570: 55 49 6e 74 33 32 20 28 31 39 29 0d 0a 20 20 20  UInt32 (19)..   
9580: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20     0,           
9590: 20 2f 2f 20 55 49 6e 74 36 34 20 28 32 30 29 0d   // UInt64 (20).
95a0: 0a 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20  .      0,       
95b0: 20 20 20 20 20 2f 2f 20 56 61 72 4e 75 6d 65 72       // VarNumer
95c0: 69 63 20 28 32 31 29 0d 0a 20 20 20 20 20 20 44  ic (21)..      D
95d0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
95e0: 41 6e 73 69 53 74 72 69 6e 67 46 69 78 65 64 4c  AnsiStringFixedL
95f0: 65 6e 67 74 68 20 28 32 32 29 0d 0a 20 20 20 20  ength (22)..    
9600: 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20    DBNull.Value, 
9610: 2f 2f 20 53 74 72 69 6e 67 46 69 78 65 64 4c 65  // StringFixedLe
9620: 6e 67 74 68 20 28 32 33 29 0d 0a 20 20 20 20 20  ngth (23)..     
9630: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f   DBNull.Value, /
9640: 2f 20 3f 3f 20 28 32 34 29 0d 0a 20 20 20 20 20  / ?? (24)..     
9650: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 20 20 2f   DBNull.Value  /
9660: 2f 20 58 6d 6c 20 28 32 35 29 0d 0a 20 20 20 20  / Xml (25)..    
9670: 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  };....    /// <s
9680: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9690: 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   Determines the 
96a0: 74 79 70 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  type name for th
96b0: 65 20 67 69 76 65 6e 20 64 61 74 61 62 61 73 65  e given database
96c0: 20 76 61 6c 75 65 20 74 79 70 65 2e 0d 0a 20 20   value type...  
96d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
96e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
96f0: 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f   name="connectio
9700: 6e 22 3e 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f  n">The connectio
9710: 6e 20 63 6f 6e 74 65 78 74 20 66 6f 72 20 63 75  n context for cu
9720: 73 74 6f 6d 20 74 79 70 65 20 6d 61 70 70 69 6e  stom type mappin
9730: 67 73 2c 20 69 66 20 61 6e 79 2e 3c 2f 70 61 72  gs, if any.</par
9740: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
9750: 72 61 6d 20 6e 61 6d 65 3d 22 64 62 54 79 70 65  ram name="dbType
9760: 22 3e 54 68 65 20 64 61 74 61 62 61 73 65 20 76  ">The database v
9770: 61 6c 75 65 20 74 79 70 65 2e 3c 2f 70 61 72 61  alue type.</para
9780: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
9790: 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
97a0: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
97b0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
97c0: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
97d0: 6f 62 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d  object.</param>.
97e0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
97f0: 73 3e 54 68 65 20 74 79 70 65 20 6e 61 6d 65 20  s>The type name 
9800: 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  or an empty stri
9810: 6e 67 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20  ng if it cannot 
9820: 62 65 20 64 65 74 65 72 6d 69 6e 65 64 2e 3c 2f  be determined.</
9830: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
9840: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74  ternal static st
9850: 72 69 6e 67 20 44 62 54 79 70 65 54 6f 54 79 70  ring DbTypeToTyp
9860: 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
9870: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9880: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20   connection,..  
9890: 20 20 20 20 20 20 44 62 54 79 70 65 20 64 62 54        DbType dbT
98a0: 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ype,..        SQ
98b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
98c0: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
98d0: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
98e0: 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74       if (connect
98f0: 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
9900: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9910: 20 20 20 20 20 66 6c 61 67 73 20 7c 3d 20 63 6f       flags |= co
9920: 6e 6e 65 63 74 69 6f 6e 2e 46 6c 61 67 73 3b 0d  nnection.Flags;.
9930: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
9940: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
9950: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
9960: 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 54  s.UseConnectionT
9970: 79 70 65 73 29 20 3d 3d 20 53 51 4c 69 74 65 43  ypes) == SQLiteC
9980: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
9990: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 54 79 70 65  seConnectionType
99a0: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
99b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
99c0: 20 20 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d     SQLiteDbTypeM
99d0: 61 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 54 79 70  ap connectionTyp
99e0: 65 4e 61 6d 65 73 20 3d 20 63 6f 6e 6e 65 63 74  eNames = connect
99f0: 69 6f 6e 2e 5f 74 79 70 65 4e 61 6d 65 73 3b 0d  ion._typeNames;.
9a00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9a10: 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f     if (connectio
9a20: 6e 54 79 70 65 4e 61 6d 65 73 20 21 3d 20 6e 75  nTypeNames != nu
9a30: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9a40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
9a60: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 20  teDbTypeMapping 
9a70: 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9a90: 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 54 79 70 65   (connectionType
9aa0: 4e 61 6d 65 73 2e 54 72 79 47 65 74 56 61 6c 75  Names.TryGetValu
9ab0: 65 28 64 62 54 79 70 65 2c 20 6f 75 74 20 76 61  e(dbType, out va
9ac0: 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lue))..         
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9ae0: 65 74 75 72 6e 20 76 61 6c 75 65 2e 74 79 70 65  eturn value.type
9af0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
9b00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9b10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9b20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74   }....        st
9b30: 72 69 6e 67 20 64 65 66 61 75 6c 74 54 79 70 65  ring defaultType
9b40: 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 45 6d  Name = String.Em
9b50: 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  pty;....        
9b60: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
9b70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
9b80: 67 73 2e 4e 6f 47 6c 6f 62 61 6c 54 79 70 65 73  gs.NoGlobalTypes
9b90: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
9ba0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 47 6c 6f  ctionFlags.NoGlo
9bb0: 62 61 6c 54 79 70 65 73 29 0d 0a 20 20 20 20 20  balTypes)..     
9bc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65         return de
9bd0: 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 3b 0d 0a  faultTypeName;..
9be0: 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28  ..        lock (
9bf0: 5f 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  _syncRoot)..    
9c00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9c10: 20 20 20 69 66 20 28 5f 74 79 70 65 4e 61 6d 65     if (_typeName
9c20: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 5f 74 79 70              _typ
9c40: 65 4e 61 6d 65 73 20 3d 20 47 65 74 53 51 4c 69  eNames = GetSQLi
9c50: 74 65 44 62 54 79 70 65 4d 61 70 28 29 3b 0d 0a  teDbTypeMap();..
9c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
9c70: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
9c80: 67 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  g value;....    
9c90: 20 20 20 20 20 20 20 20 69 66 20 28 5f 74 79 70          if (_typ
9ca0: 65 4e 61 6d 65 73 2e 54 72 79 47 65 74 56 61 6c  eNames.TryGetVal
9cb0: 75 65 28 64 62 54 79 70 65 2c 20 6f 75 74 20 76  ue(dbType, out v
9cc0: 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alue))..        
9cd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
9ce0: 61 6c 75 65 2e 74 79 70 65 4e 61 6d 65 3b 0d 0a  alue.typeName;..
9cf0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66          }....#if
9d00: 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
9d10: 20 26 26 20 54 52 41 43 45 5f 57 41 52 4e 49 4e   && TRACE_WARNIN
9d20: 47 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  G..        if ((
9d30: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
9d40: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 54 72  nnectionFlags.Tr
9d50: 61 63 65 57 61 72 6e 69 6e 67 29 20 3d 3d 20 53  aceWarning) == S
9d60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9d70: 6c 61 67 73 2e 54 72 61 63 65 57 61 72 6e 69 6e  lags.TraceWarnin
9d80: 67 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  g)..        {.. 
9d90: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
9da0: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
9db0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
9dc0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
9dd0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
9de0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
9df0: 20 20 20 20 20 20 20 20 22 57 41 52 4e 49 4e 47          "WARNING
9e00: 3a 20 54 79 70 65 20 6d 61 70 70 69 6e 67 20 66  : Type mapping f
9e10: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67  ailed, returning
9e20: 20 64 65 66 61 75 6c 74 20 6e 61 6d 65 20 5c 22   default name \"
9e30: 7b 30 7d 5c 22 20 66 6f 72 20 74 79 70 65 20 7b  {0}\" for type {
9e40: 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  1}.",..         
9e50: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 54 79         defaultTy
9e60: 70 65 4e 61 6d 65 2c 20 64 62 54 79 70 65 29 29  peName, dbType))
9e70: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
9e80: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
9e90: 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 54 79  return defaultTy
9ea0: 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a  peName;..    }..
9eb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
9ec0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ry>..    /// Con
9ed0: 76 65 72 74 20 61 20 44 62 54 79 70 65 20 74 6f  vert a DbType to
9ee0: 20 61 20 54 79 70 65 0d 0a 20 20 20 20 2f 2f 2f   a Type..    ///
9ef0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9f00: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
9f10: 3d 22 74 79 70 22 3e 54 68 65 20 44 62 54 79 70  ="typ">The DbTyp
9f20: 65 20 74 6f 20 63 6f 6e 76 65 72 74 20 66 72 6f  e to convert fro
9f30: 6d 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  m</param>..    /
9f40: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
9f50: 63 6c 6f 73 65 73 74 2d 6d 61 74 63 68 20 2e 4e  closest-match .N
9f60: 45 54 20 74 79 70 65 3c 2f 72 65 74 75 72 6e 73  ET type</returns
9f70: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
9f80: 73 74 61 74 69 63 20 54 79 70 65 20 44 62 54 79  static Type DbTy
9f90: 70 65 54 6f 54 79 70 65 28 44 62 54 79 70 65 20  peToType(DbType 
9fa0: 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  typ)..    {..   
9fb0: 20 20 20 72 65 74 75 72 6e 20 5f 64 62 74 79 70     return _dbtyp
9fc0: 65 54 6f 54 79 70 65 5b 28 69 6e 74 29 74 79 70  eToType[(int)typ
9fd0: 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ];..    }....   
9fe0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
9ff0: 54 79 70 65 5b 5d 20 5f 64 62 74 79 70 65 54 6f  Type[] _dbtypeTo
a000: 54 79 70 65 20 3d 20 7b 0d 0a 20 20 20 20 20 20  Type = {..      
a010: 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 20  typeof(string), 
a020: 20 20 2f 2f 20 41 6e 73 69 53 74 72 69 6e 67 20    // AnsiString 
a030: 28 30 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f  (0)..      typeo
a040: 66 28 62 79 74 65 5b 5d 29 2c 20 20 20 2f 2f 20  f(byte[]),   // 
a050: 42 69 6e 61 72 79 20 28 31 29 0d 0a 20 20 20 20  Binary (1)..    
a060: 20 20 74 79 70 65 6f 66 28 62 79 74 65 29 2c 20    typeof(byte), 
a070: 20 20 20 20 2f 2f 20 42 79 74 65 20 28 32 29 0d      // Byte (2).
a080: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 62 6f  .      typeof(bo
a090: 6f 6c 29 2c 20 20 20 20 20 2f 2f 20 42 6f 6f 6c  ol),     // Bool
a0a0: 65 61 6e 20 28 33 29 0d 0a 20 20 20 20 20 20 74  ean (3)..      t
a0b0: 79 70 65 6f 66 28 64 65 63 69 6d 61 6c 29 2c 20  ypeof(decimal), 
a0c0: 20 2f 2f 20 43 75 72 72 65 6e 63 79 20 28 34 29   // Currency (4)
a0d0: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 44  ..      typeof(D
a0e0: 61 74 65 54 69 6d 65 29 2c 20 2f 2f 20 44 61 74  ateTime), // Dat
a0f0: 65 20 28 35 29 0d 0a 20 20 20 20 20 20 74 79 70  e (5)..      typ
a100: 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20 2f  eof(DateTime), /
a110: 2f 20 44 61 74 65 54 69 6d 65 20 28 36 29 0d 0a  / DateTime (6)..
a120: 20 20 20 20 20 20 74 79 70 65 6f 66 28 64 65 63        typeof(dec
a130: 69 6d 61 6c 29 2c 20 20 2f 2f 20 44 65 63 69 6d  imal),  // Decim
a140: 61 6c 20 28 37 29 0d 0a 20 20 20 20 20 20 74 79  al (7)..      ty
a150: 70 65 6f 66 28 64 6f 75 62 6c 65 29 2c 20 20 20  peof(double),   
a160: 2f 2f 20 44 6f 75 62 6c 65 20 28 38 29 0d 0a 20  // Double (8).. 
a170: 20 20 20 20 20 74 79 70 65 6f 66 28 47 75 69 64       typeof(Guid
a180: 29 2c 20 20 20 20 20 2f 2f 20 47 75 69 64 20 28  ),     // Guid (
a190: 39 29 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66  9)..      typeof
a1a0: 28 49 6e 74 31 36 29 2c 20 20 20 20 2f 2f 20 49  (Int16),    // I
a1b0: 6e 74 31 36 20 28 31 30 29 0d 0a 20 20 20 20 20  nt16 (10)..     
a1c0: 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29 2c 20   typeof(Int32), 
a1d0: 20 20 20 2f 2f 20 49 6e 74 33 32 20 28 31 31 29     // Int32 (11)
a1e0: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 49  ..      typeof(I
a1f0: 6e 74 36 34 29 2c 20 20 20 20 2f 2f 20 49 6e 74  nt64),    // Int
a200: 36 34 20 28 31 32 29 0d 0a 20 20 20 20 20 20 74  64 (12)..      t
a210: 79 70 65 6f 66 28 6f 62 6a 65 63 74 29 2c 20 20  ypeof(object),  
a220: 20 2f 2f 20 4f 62 6a 65 63 74 20 28 31 33 29 0d   // Object (13).
a230: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 62  .      typeof(sb
a240: 79 74 65 29 2c 20 20 20 20 2f 2f 20 53 42 79 74  yte),    // SByt
a250: 65 20 28 31 34 29 0d 0a 20 20 20 20 20 20 74 79  e (14)..      ty
a260: 70 65 6f 66 28 66 6c 6f 61 74 29 2c 20 20 20 20  peof(float),    
a270: 2f 2f 20 53 69 6e 67 6c 65 20 28 31 35 29 0d 0a  // Single (15)..
a280: 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72        typeof(str
a290: 69 6e 67 29 2c 20 20 20 2f 2f 20 53 74 72 69 6e  ing),   // Strin
a2a0: 67 20 28 31 36 29 0d 0a 20 20 20 20 20 20 74 79  g (16)..      ty
a2b0: 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 20  peof(DateTime), 
a2c0: 2f 2f 20 54 69 6d 65 20 28 31 37 29 0d 0a 20 20  // Time (17)..  
a2d0: 20 20 20 20 74 79 70 65 6f 66 28 55 49 6e 74 31      typeof(UInt1
a2e0: 36 29 2c 20 20 20 2f 2f 20 55 49 6e 74 31 36 20  6),   // UInt16 
a2f0: 28 31 38 29 0d 0a 20 20 20 20 20 20 74 79 70 65  (18)..      type
a300: 6f 66 28 55 49 6e 74 33 32 29 2c 20 20 20 2f 2f  of(UInt32),   //
a310: 20 55 49 6e 74 33 32 20 28 31 39 29 0d 0a 20 20   UInt32 (19)..  
a320: 20 20 20 20 74 79 70 65 6f 66 28 55 49 6e 74 36      typeof(UInt6
a330: 34 29 2c 20 20 20 2f 2f 20 55 49 6e 74 36 34 20  4),   // UInt64 
a340: 28 32 30 29 0d 0a 20 20 20 20 20 20 74 79 70 65  (20)..      type
a350: 6f 66 28 64 6f 75 62 6c 65 29 2c 20 20 20 2f 2f  of(double),   //
a360: 20 56 61 72 4e 75 6d 65 72 69 63 20 28 32 31 29   VarNumeric (21)
a370: 0d 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 73  ..      typeof(s
a380: 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20 41 6e 73  tring),   // Ans
a390: 69 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67  iStringFixedLeng
a3a0: 74 68 20 28 32 32 29 0d 0a 20 20 20 20 20 20 74  th (22)..      t
a3b0: 79 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 20 20  ypeof(string),  
a3c0: 20 2f 2f 20 53 74 72 69 6e 67 46 69 78 65 64 4c   // StringFixedL
a3d0: 65 6e 67 74 68 20 28 32 33 29 0d 0a 20 20 20 20  ength (23)..    
a3e0: 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29    typeof(string)
a3f0: 2c 20 20 20 2f 2f 20 3f 3f 20 28 32 34 29 0d 0a  ,   // ?? (24)..
a400: 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72        typeof(str
a410: 69 6e 67 29 2c 20 20 20 2f 2f 20 58 6d 6c 20 28  ing),   // Xml (
a420: 32 35 29 0d 0a 20 20 20 20 7d 3b 0d 0a 0d 0a 20  25)..    };.... 
a430: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
a440: 0d 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 20 61 20  ..    /// For a 
a450: 67 69 76 65 6e 20 74 79 70 65 2c 20 72 65 74 75  given type, retu
a460: 72 6e 20 74 68 65 20 63 6c 6f 73 65 73 74 2d 6d  rn the closest-m
a470: 61 74 63 68 20 53 51 4c 69 74 65 20 54 79 70 65  atch SQLite Type
a480: 41 66 66 69 6e 69 74 79 2c 20 77 68 69 63 68 20  Affinity, which 
a490: 6f 6e 6c 79 20 75 6e 64 65 72 73 74 61 6e 64 73  only understands
a4a0: 20 61 20 76 65 72 79 20 6c 69 6d 69 74 65 64 20   a very limited 
a4b0: 73 75 62 73 65 74 20 6f 66 20 74 79 70 65 73 2e  subset of types.
a4c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
a4d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
a4e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
a4f0: 54 68 65 20 74 79 70 65 20 74 6f 20 65 76 61 6c  The type to eval
a500: 75 61 74 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  uate</param>..  
a510: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
a520: 68 65 20 53 51 4c 69 74 65 20 74 79 70 65 20 61  he SQLite type a
a530: 66 66 69 6e 69 74 79 20 66 6f 72 20 74 68 61 74  ffinity for that
a540: 20 74 79 70 65 2e 3c 2f 72 65 74 75 72 6e 73 3e   type.</returns>
a550: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
a560: 74 61 74 69 63 20 54 79 70 65 41 66 66 69 6e 69  tatic TypeAffini
a570: 74 79 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74  ty TypeToAffinit
a580: 79 28 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20  y(Type typ)..   
a590: 20 7b 0d 0a 20 20 20 20 20 20 54 79 70 65 43 6f   {..      TypeCo
a5a0: 64 65 20 74 63 20 3d 20 54 79 70 65 2e 47 65 74  de tc = Type.Get
a5b0: 54 79 70 65 43 6f 64 65 28 74 79 70 29 3b 0d 0a  TypeCode(typ);..
a5c0: 20 20 20 20 20 20 69 66 20 28 74 63 20 3d 3d 20        if (tc == 
a5d0: 54 79 70 65 43 6f 64 65 2e 4f 62 6a 65 63 74 29  TypeCode.Object)
a5e0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
a5f0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 74 79     if (typ == ty
a600: 70 65 6f 66 28 62 79 74 65 5b 5d 29 20 7c 7c 20  peof(byte[]) || 
a610: 74 79 70 20 3d 3d 20 74 79 70 65 6f 66 28 47 75  typ == typeof(Gu
a620: 69 64 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  id))..          
a630: 72 65 74 75 72 6e 20 54 79 70 65 41 66 66 69 6e  return TypeAffin
a640: 69 74 79 2e 42 6c 6f 62 3b 0d 0a 20 20 20 20 20  ity.Blob;..     
a650: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
a660: 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 41 66     return TypeAf
a670: 66 69 6e 69 74 79 2e 54 65 78 74 3b 0d 0a 20 20  finity.Text;..  
a680: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74      }..      ret
a690: 75 72 6e 20 5f 74 79 70 65 63 6f 64 65 41 66 66  urn _typecodeAff
a6a0: 69 6e 69 74 69 65 73 5b 28 69 6e 74 29 74 63 5d  inities[(int)tc]
a6b0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
a6c0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
a6d0: 79 70 65 41 66 66 69 6e 69 74 79 5b 5d 20 5f 74  ypeAffinity[] _t
a6e0: 79 70 65 63 6f 64 65 41 66 66 69 6e 69 74 69 65  ypecodeAffinitie
a6f0: 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 54 79 70  s = {..      Typ
a700: 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 20  eAffinity.Null, 
a710: 20 20 20 20 2f 2f 20 45 6d 70 74 79 20 28 30 29      // Empty (0)
a720: 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ..      TypeAffi
a730: 6e 69 74 79 2e 42 6c 6f 62 2c 20 20 20 20 20 2f  nity.Blob,     /
a740: 2f 20 4f 62 6a 65 63 74 20 28 31 29 0d 0a 20 20  / Object (1)..  
a750: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
a760: 2e 4e 75 6c 6c 2c 20 20 20 20 20 2f 2f 20 44 42  .Null,     // DB
a770: 4e 75 6c 6c 20 28 32 29 0d 0a 20 20 20 20 20 20  Null (2)..      
a780: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
a790: 36 34 2c 20 20 20 20 2f 2f 20 42 6f 6f 6c 65 61  64,    // Boolea
a7a0: 6e 20 28 33 29 0d 0a 20 20 20 20 20 20 54 79 70  n (3)..      Typ
a7b0: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c  eAffinity.Int64,
a7c0: 20 20 20 20 2f 2f 20 43 68 61 72 20 28 34 29 0d      // Char (4).
a7d0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
a7e0: 69 74 79 2e 49 6e 74 36 34 2c 20 20 20 20 2f 2f  ity.Int64,    //
a7f0: 20 53 42 79 74 65 20 28 35 29 0d 0a 20 20 20 20   SByte (5)..    
a800: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49    TypeAffinity.I
a810: 6e 74 36 34 2c 20 20 20 20 2f 2f 20 42 79 74 65  nt64,    // Byte
a820: 20 28 36 29 0d 0a 20 20 20 20 20 20 54 79 70 65   (6)..      Type
a830: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20  Affinity.Int64, 
a840: 20 20 20 2f 2f 20 49 6e 74 31 36 20 28 37 29 0d     // Int16 (7).
a850: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
a860: 69 74 79 2e 49 6e 74 36 34 2c 20 20 20 20 2f 2f  ity.Int64,    //
a870: 20 55 49 6e 74 31 36 20 28 38 29 0d 0a 20 20 20   UInt16 (8)..   
a880: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
a890: 49 6e 74 36 34 2c 20 20 20 20 2f 2f 20 49 6e 74  Int64,    // Int
a8a0: 33 32 20 28 39 29 0d 0a 20 20 20 20 20 20 54 79  32 (9)..      Ty
a8b0: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
a8c0: 2c 20 20 20 20 2f 2f 20 55 49 6e 74 33 32 20 28  ,    // UInt32 (
a8d0: 31 30 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41  10)..      TypeA
a8e0: 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 20 20  ffinity.Int64,  
a8f0: 20 20 2f 2f 20 49 6e 74 36 34 20 28 31 31 29 0d    // Int64 (11).
a900: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
a910: 69 74 79 2e 49 6e 74 36 34 2c 20 20 20 20 2f 2f  ity.Int64,    //
a920: 20 55 49 6e 74 36 34 20 28 31 32 29 0d 0a 20 20   UInt64 (12)..  
a930: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
a940: 2e 44 6f 75 62 6c 65 2c 20 20 20 2f 2f 20 53 69  .Double,   // Si
a950: 6e 67 6c 65 20 28 31 33 29 0d 0a 20 20 20 20 20  ngle (13)..     
a960: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f   TypeAffinity.Do
a970: 75 62 6c 65 2c 20 20 20 2f 2f 20 44 6f 75 62 6c  uble,   // Doubl
a980: 65 20 28 31 34 29 0d 0a 20 20 20 20 20 20 54 79  e (14)..      Ty
a990: 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
a9a0: 65 2c 20 20 20 2f 2f 20 44 65 63 69 6d 61 6c 20  e,   // Decimal 
a9b0: 28 31 35 29 0d 0a 20 20 20 20 20 20 54 79 70 65  (15)..      Type
a9c0: 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d  Affinity.DateTim
a9d0: 65 2c 20 2f 2f 20 44 61 74 65 54 69 6d 65 20 28  e, // DateTime (
a9e0: 31 36 29 0d 0a 20 20 20 20 20 20 54 79 70 65 41  16)..      TypeA
a9f0: 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 20 20 20  ffinity.Null,   
aa00: 20 20 2f 2f 20 3f 3f 20 28 31 37 29 0d 0a 20 20    // ?? (17)..  
aa10: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
aa20: 2e 54 65 78 74 20 20 20 20 20 20 2f 2f 20 53 74  .Text      // St
aa30: 72 69 6e 67 20 28 31 38 29 0d 0a 20 20 20 20 7d  ring (18)..    }
aa40: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
aa50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
aa60: 42 75 69 6c 64 73 20 61 6e 64 20 72 65 74 75 72  Builds and retur
aa70: 6e 73 20 61 20 6d 61 70 20 63 6f 6e 74 61 69 6e  ns a map contain
aa80: 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
aa90: 20 63 6f 6c 75 6d 6e 20 74 79 70 65 73 0d 0a 20   column types.. 
aaa0: 20 20 20 2f 2f 2f 20 72 65 63 6f 67 6e 69 7a 65     /// recognize
aab0: 64 20 62 79 20 74 68 69 73 20 70 72 6f 76 69 64  d by this provid
aac0: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
aad0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
aae0: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
aaf0: 2f 2f 2f 20 41 20 6d 61 70 20 63 6f 6e 74 61 69  /// A map contai
ab00: 6e 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ning the databas
ab10: 65 20 63 6f 6c 75 6d 6e 20 74 79 70 65 73 20 72  e column types r
ab20: 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 74 68 69  ecognized by thi
ab30: 73 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 76 69  s..    /// provi
ab40: 64 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  der...    /// </
ab50: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
ab60: 69 76 61 74 65 20 73 74 61 74 69 63 20 53 51 4c  ivate static SQL
ab70: 69 74 65 44 62 54 79 70 65 4d 61 70 20 47 65 74  iteDbTypeMap Get
ab80: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 28  SQLiteDbTypeMap(
ab90: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
aba0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
abb0: 69 74 65 44 62 54 79 70 65 4d 61 70 28 6e 65 77  iteDbTypeMap(new
abc0: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
abd0: 70 69 6e 67 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ping[] {..      
abe0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
abf0: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 42  DbTypeMapping("B
ac00: 49 47 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 49  IGINT", DbType.I
ac10: 6e 74 36 34 2c 20 66 61 6c 73 65 29 2c 0d 0a 20  nt64, false),.. 
ac20: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
ac30: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69  QLiteDbTypeMappi
ac40: 6e 67 28 22 42 49 47 55 49 4e 54 22 2c 20 44 62  ng("BIGUINT", Db
ac50: 54 79 70 65 2e 55 49 6e 74 36 34 2c 20 66 61 6c  Type.UInt64, fal
ac60: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
ac70: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
ac80: 70 65 4d 61 70 70 69 6e 67 28 22 42 49 4e 41 52  peMapping("BINAR
ac90: 59 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72  Y", DbType.Binar
aca0: 79 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20  y, false),..    
acb0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
acc0: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28  teDbTypeMapping(
acd0: 22 42 49 54 22 2c 20 44 62 54 79 70 65 2e 42 6f  "BIT", DbType.Bo
ace0: 6f 6c 65 61 6e 2c 20 74 72 75 65 29 2c 0d 0a 20  olean, true),.. 
acf0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
ad00: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69  QLiteDbTypeMappi
ad10: 6e 67 28 22 42 4c 4f 42 22 2c 20 44 62 54 79 70  ng("BLOB", DbTyp
ad20: 65 2e 42 69 6e 61 72 79 2c 20 74 72 75 65 29 2c  e.Binary, true),
ad30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
ad40: 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61  w SQLiteDbTypeMa
ad50: 70 70 69 6e 67 28 22 42 4f 4f 4c 22 2c 20 44 62  pping("BOOL", Db
ad60: 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 2c 20 66 61  Type.Boolean, fa
ad70: 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lse),..         
ad80: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54     new SQLiteDbT
ad90: 79 70 65 4d 61 70 70 69 6e 67 28 22 42 4f 4f 4c  ypeMapping("BOOL
ada0: 45 41 4e 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f  EAN", DbType.Boo
adb0: 6c 65 61 6e 2c 20 66 61 6c 73 65 29 2c 0d 0a 20  lean, false),.. 
adc0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
add0: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69  QLiteDbTypeMappi
ade0: 6e 67 28 22 43 48 41 52 22 2c 20 44 62 54 79 70  ng("CHAR", DbTyp
adf0: 65 2e 41 6e 73 69 53 74 72 69 6e 67 46 69 78 65  e.AnsiStringFixe
ae00: 64 4c 65 6e 67 74 68 2c 20 74 72 75 65 29 2c 0d  dLength, true),.
ae10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
ae20: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
ae30: 70 69 6e 67 28 22 43 4c 4f 42 22 2c 20 44 62 54  ping("CLOB", DbT
ae40: 79 70 65 2e 53 74 72 69 6e 67 2c 20 66 61 6c 73  ype.String, fals
ae50: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
ae60: 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70   new SQLiteDbTyp
ae70: 65 4d 61 70 70 69 6e 67 28 22 43 4f 55 4e 54 45  eMapping("COUNTE
ae80: 52 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34  R", DbType.Int64
ae90: 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20  , false),..     
aea0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
aeb0: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
aec0: 43 55 52 52 45 4e 43 59 22 2c 20 44 62 54 79 70  CURRENCY", DbTyp
aed0: 65 2e 44 65 63 69 6d 61 6c 2c 20 66 61 6c 73 65  e.Decimal, false
aee0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
aef0: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
af00: 4d 61 70 70 69 6e 67 28 22 44 41 54 45 22 2c 20  Mapping("DATE", 
af10: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 2c  DbType.DateTime,
af20: 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20   false),..      
af30: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
af40: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 44  DbTypeMapping("D
af50: 41 54 45 54 49 4d 45 22 2c 20 44 62 54 79 70 65  ATETIME", DbType
af60: 2e 44 61 74 65 54 69 6d 65 2c 20 74 72 75 65 29  .DateTime, true)
af70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
af80: 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d  ew SQLiteDbTypeM
af90: 61 70 70 69 6e 67 28 22 44 45 43 49 4d 41 4c 22  apping("DECIMAL"
afa0: 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c  , DbType.Decimal
afb0: 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20 20  , true),..      
afc0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
afd0: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 44  DbTypeMapping("D
afe0: 4f 55 42 4c 45 22 2c 20 44 62 54 79 70 65 2e 44  OUBLE", DbType.D
aff0: 6f 75 62 6c 65 2c 20 66 61 6c 73 65 29 2c 0d 0a  ouble, false),..
b000: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
b010: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70  SQLiteDbTypeMapp
b020: 69 6e 67 28 22 46 4c 4f 41 54 22 2c 20 44 62 54  ing("FLOAT", DbT
b030: 79 70 65 2e 44 6f 75 62 6c 65 2c 20 66 61 6c 73  ype.Double, fals
b040: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
b050: 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70   new SQLiteDbTyp
b060: 65 4d 61 70 70 69 6e 67 28 22 47 45 4e 45 52 41  eMapping("GENERA
b070: 4c 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72  L", DbType.Binar
b080: 79 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20  y, false),..    
b090: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
b0a0: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28  teDbTypeMapping(
b0b0: 22 47 55 49 44 22 2c 20 44 62 54 79 70 65 2e 47  "GUID", DbType.G
b0c0: 75 69 64 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20  uid, false),..  
b0d0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
b0e0: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
b0f0: 67 28 22 49 44 45 4e 54 49 54 59 22 2c 20 44 62  g("IDENTITY", Db
b100: 54 79 70 65 2e 49 6e 74 36 34 2c 20 66 61 6c 73  Type.Int64, fals
b110: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
b120: 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70   new SQLiteDbTyp
b130: 65 4d 61 70 70 69 6e 67 28 22 49 4d 41 47 45 22  eMapping("IMAGE"
b140: 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 2c  , DbType.Binary,
b150: 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20   false),..      
b160: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
b170: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 49  DbTypeMapping("I
b180: 4e 54 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 33  NT", DbType.Int3
b190: 32 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20  2, true),..     
b1a0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
b1b0: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
b1c0: 49 4e 54 38 22 2c 20 44 62 54 79 70 65 2e 53 42  INT8", DbType.SB
b1d0: 79 74 65 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20  yte, false),..  
b1e0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
b1f0: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
b200: 67 28 22 49 4e 54 31 36 22 2c 20 44 62 54 79 70  g("INT16", DbTyp
b210: 65 2e 49 6e 74 31 36 2c 20 66 61 6c 73 65 29 2c  e.Int16, false),
b220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
b230: 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61  w SQLiteDbTypeMa
b240: 70 70 69 6e 67 28 22 49 4e 54 33 32 22 2c 20 44  pping("INT32", D
b250: 62 54 79 70 65 2e 49 6e 74 33 32 2c 20 66 61 6c  bType.Int32, fal
b260: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
b270: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
b280: 70 65 4d 61 70 70 69 6e 67 28 22 49 4e 54 36 34  peMapping("INT64
b290: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 2c  ", DbType.Int64,
b2a0: 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20   false),..      
b2b0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
b2c0: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 49  DbTypeMapping("I
b2d0: 4e 54 45 47 45 52 22 2c 20 44 62 54 79 70 65 2e  NTEGER", DbType.
b2e0: 49 6e 74 36 34 2c 20 74 72 75 65 29 2c 0d 0a 20  Int64, true),.. 
b2f0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
b300: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69  QLiteDbTypeMappi
b310: 6e 67 28 22 49 4e 54 45 47 45 52 38 22 2c 20 44  ng("INTEGER8", D
b320: 62 54 79 70 65 2e 53 42 79 74 65 2c 20 66 61 6c  bType.SByte, fal
b330: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
b340: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
b350: 70 65 4d 61 70 70 69 6e 67 28 22 49 4e 54 45 47  peMapping("INTEG
b360: 45 52 31 36 22 2c 20 44 62 54 79 70 65 2e 49 6e  ER16", DbType.In
b370: 74 31 36 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20  t16, false),..  
b380: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
b390: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
b3a0: 67 28 22 49 4e 54 45 47 45 52 33 32 22 2c 20 44  g("INTEGER32", D
b3b0: 62 54 79 70 65 2e 49 6e 74 33 32 2c 20 66 61 6c  bType.Int32, fal
b3c0: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
b3d0: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
b3e0: 70 65 4d 61 70 70 69 6e 67 28 22 49 4e 54 45 47  peMapping("INTEG
b3f0: 45 52 36 34 22 2c 20 44 62 54 79 70 65 2e 49 6e  ER64", DbType.In
b400: 74 36 34 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20  t64, false),..  
b410: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
b420: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
b430: 67 28 22 4c 4f 47 49 43 41 4c 22 2c 20 44 62 54  g("LOGICAL", DbT
b440: 79 70 65 2e 42 6f 6f 6c 65 61 6e 2c 20 66 61 6c  ype.Boolean, fal
b450: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
b460: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
b470: 70 65 4d 61 70 70 69 6e 67 28 22 4c 4f 4e 47 22  peMapping("LONG"
b480: 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 2c 20  , DbType.Int64, 
b490: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
b4a0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
b4b0: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 4c 4f  bTypeMapping("LO
b4c0: 4e 47 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e  NGCHAR", DbType.
b4d0: 53 74 72 69 6e 67 2c 20 66 61 6c 73 65 29 2c 0d  String, false),.
b4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
b4f0: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
b500: 70 69 6e 67 28 22 4c 4f 4e 47 54 45 58 54 22 2c  ping("LONGTEXT",
b510: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 2c 20   DbType.String, 
b520: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
b530: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
b540: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 4c 4f  bTypeMapping("LO
b550: 4e 47 56 41 52 43 48 41 52 22 2c 20 44 62 54 79  NGVARCHAR", DbTy
b560: 70 65 2e 53 74 72 69 6e 67 2c 20 66 61 6c 73 65  pe.String, false
b570: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
b580: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
b590: 4d 61 70 70 69 6e 67 28 22 4d 45 4d 4f 22 2c 20  Mapping("MEMO", 
b5a0: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 2c 20 66  DbType.String, f
b5b0: 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  alse),..        
b5c0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
b5d0: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 4d 4f 4e  TypeMapping("MON
b5e0: 45 59 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69  EY", DbType.Deci
b5f0: 6d 61 6c 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20  mal, false),..  
b600: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
b610: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
b620: 67 28 22 4e 43 48 41 52 22 2c 20 44 62 54 79 70  g("NCHAR", DbTyp
b630: 65 2e 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e  e.StringFixedLen
b640: 67 74 68 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20  gth, true),..   
b650: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
b660: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
b670: 28 22 4e 4f 54 45 22 2c 20 44 62 54 79 70 65 2e  ("NOTE", DbType.
b680: 53 74 72 69 6e 67 2c 20 66 61 6c 73 65 29 2c 0d  String, false),.
b690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
b6a0: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
b6b0: 70 69 6e 67 28 22 4e 54 45 58 54 22 2c 20 44 62  ping("NTEXT", Db
b6c0: 54 79 70 65 2e 53 74 72 69 6e 67 2c 20 66 61 6c  Type.String, fal
b6d0: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
b6e0: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
b6f0: 70 65 4d 61 70 70 69 6e 67 28 22 4e 55 4d 42 45  peMapping("NUMBE
b700: 52 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d  R", DbType.Decim
b710: 61 6c 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20  al, false),..   
b720: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
b730: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
b740: 28 22 4e 55 4d 45 52 49 43 22 2c 20 44 62 54 79  ("NUMERIC", DbTy
b750: 70 65 2e 44 65 63 69 6d 61 6c 2c 20 66 61 6c 73  pe.Decimal, fals
b760: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
b770: 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70   new SQLiteDbTyp
b780: 65 4d 61 70 70 69 6e 67 28 22 4e 56 41 52 43 48  eMapping("NVARCH
b790: 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69  AR", DbType.Stri
b7a0: 6e 67 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20  ng, true),..    
b7b0: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
b7c0: 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28  teDbTypeMapping(
b7d0: 22 4f 4c 45 4f 42 4a 45 43 54 22 2c 20 44 62 54  "OLEOBJECT", DbT
b7e0: 79 70 65 2e 42 69 6e 61 72 79 2c 20 66 61 6c 73  ype.Binary, fals
b7f0: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
b800: 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70   new SQLiteDbTyp
b810: 65 4d 61 70 70 69 6e 67 28 22 52 41 57 22 2c 20  eMapping("RAW", 
b820: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 2c 20 66  DbType.Binary, f
b830: 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  alse),..        
b840: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
b850: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 52 45 41  TypeMapping("REA
b860: 4c 22 2c 20 44 62 54 79 70 65 2e 44 6f 75 62 6c  L", DbType.Doubl
b870: 65 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20  e, true),..     
b880: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
b890: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
b8a0: 53 49 4e 47 4c 45 22 2c 20 44 62 54 79 70 65 2e  SINGLE", DbType.
b8b0: 53 69 6e 67 6c 65 2c 20 74 72 75 65 29 2c 0d 0a  Single, true),..
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
b8d0: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70  SQLiteDbTypeMapp
b8e0: 69 6e 67 28 22 53 4d 41 4c 4c 44 41 54 45 22 2c  ing("SMALLDATE",
b8f0: 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65   DbType.DateTime
b900: 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20  , false),..     
b910: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
b920: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
b930: 53 4d 41 4c 4c 49 4e 54 22 2c 20 44 62 54 79 70  SMALLINT", DbTyp
b940: 65 2e 49 6e 74 31 36 2c 20 74 72 75 65 29 2c 0d  e.Int16, true),.
b950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
b960: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
b970: 70 69 6e 67 28 22 53 4d 41 4c 4c 55 49 4e 54 22  ping("SMALLUINT"
b980: 2c 20 44 62 54 79 70 65 2e 55 49 6e 74 31 36 2c  , DbType.UInt16,
b990: 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20 20 20   true),..       
b9a0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
b9b0: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 53 54  bTypeMapping("ST
b9c0: 52 49 4e 47 22 2c 20 44 62 54 79 70 65 2e 53 74  RING", DbType.St
b9d0: 72 69 6e 67 2c 20 66 61 6c 73 65 29 2c 0d 0a 20  ring, false),.. 
b9e0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
b9f0: 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69  QLiteDbTypeMappi
ba00: 6e 67 28 22 54 45 58 54 22 2c 20 44 62 54 79 70  ng("TEXT", DbTyp
ba10: 65 2e 53 74 72 69 6e 67 2c 20 66 61 6c 73 65 29  e.String, false)
ba20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
ba30: 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d  ew SQLiteDbTypeM
ba40: 61 70 70 69 6e 67 28 22 54 49 4d 45 22 2c 20 44  apping("TIME", D
ba50: 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 2c 20  bType.DateTime, 
ba60: 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20  false),..       
ba70: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44       new SQLiteD
ba80: 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 54 49  bTypeMapping("TI
ba90: 4d 45 53 54 41 4d 50 22 2c 20 44 62 54 79 70 65  MESTAMP", DbType
baa0: 2e 44 61 74 65 54 69 6d 65 2c 20 66 61 6c 73 65  .DateTime, false
bab0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
bac0: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
bad0: 4d 61 70 70 69 6e 67 28 22 54 49 4e 59 49 4e 54  Mapping("TINYINT
bae0: 22 2c 20 44 62 54 79 70 65 2e 42 79 74 65 2c 20  ", DbType.Byte, 
baf0: 74 72 75 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  true),..        
bb00: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
bb10: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 54 49 4e  TypeMapping("TIN
bb20: 59 53 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 53  YSINT", DbType.S
bb30: 42 79 74 65 2c 20 74 72 75 65 29 2c 0d 0a 20 20  Byte, true),..  
bb40: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
bb50: 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
bb60: 67 28 22 55 49 4e 54 22 2c 20 44 62 54 79 70 65  g("UINT", DbType
bb70: 2e 55 49 6e 74 33 32 2c 20 74 72 75 65 29 2c 0d  .UInt32, true),.
bb80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
bb90: 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
bba0: 70 69 6e 67 28 22 55 49 4e 54 38 22 2c 20 44 62  ping("UINT8", Db
bbb0: 54 79 70 65 2e 42 79 74 65 2c 20 66 61 6c 73 65  Type.Byte, false
bbc0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
bbd0: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
bbe0: 4d 61 70 70 69 6e 67 28 22 55 49 4e 54 31 36 22  Mapping("UINT16"
bbf0: 2c 20 44 62 54 79 70 65 2e 55 49 6e 74 31 36 2c  , DbType.UInt16,
bc00: 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20   false),..      
bc10: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
bc20: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 55  DbTypeMapping("U
bc30: 49 4e 54 33 32 22 2c 20 44 62 54 79 70 65 2e 55  INT32", DbType.U
bc40: 49 6e 74 33 32 2c 20 66 61 6c 73 65 29 2c 0d 0a  Int32, false),..
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
bc60: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70  SQLiteDbTypeMapp
bc70: 69 6e 67 28 22 55 49 4e 54 36 34 22 2c 20 44 62  ing("UINT64", Db
bc80: 54 79 70 65 2e 55 49 6e 74 36 34 2c 20 66 61 6c  Type.UInt64, fal
bc90: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
bca0: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
bcb0: 70 65 4d 61 70 70 69 6e 67 28 22 55 4c 4f 4e 47  peMapping("ULONG
bcc0: 22 2c 20 44 62 54 79 70 65 2e 55 49 6e 74 36 34  ", DbType.UInt64
bcd0: 2c 20 66 61 6c 73 65 29 2c 0d 0a 20 20 20 20 20  , false),..     
bce0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
bcf0: 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22  eDbTypeMapping("
bd00: 55 4e 49 51 55 45 49 44 45 4e 54 49 46 49 45 52  UNIQUEIDENTIFIER
bd10: 22 2c 20 44 62 54 79 70 65 2e 47 75 69 64 2c 20  ", DbType.Guid, 
bd20: 74 72 75 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  true),..        
bd30: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62      new SQLiteDb
bd40: 54 79 70 65 4d 61 70 70 69 6e 67 28 22 55 4e 53  TypeMapping("UNS
bd50: 49 47 4e 45 44 49 4e 54 45 47 45 52 22 2c 20 44  IGNEDINTEGER", D
bd60: 62 54 79 70 65 2e 55 49 6e 74 36 34 2c 20 74 72  bType.UInt64, tr
bd70: 75 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ue),..          
bd80: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
bd90: 70 65 4d 61 70 70 69 6e 67 28 22 55 4e 53 49 47  peMapping("UNSIG
bda0: 4e 45 44 49 4e 54 45 47 45 52 38 22 2c 20 44 62  NEDINTEGER8", Db
bdb0: 54 79 70 65 2e 42 79 74 65 2c 20 66 61 6c 73 65  Type.Byte, false
bdc0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
bdd0: 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
bde0: 4d 61 70 70 69 6e 67 28 22 55 4e 53 49 47 4e 45  Mapping("UNSIGNE
bdf0: 44 49 4e 54 45 47 45 52 31 36 22 2c 20 44 62 54  DINTEGER16", DbT
be00: 79 70 65 2e 55 49 6e 74 31 36 2c 20 66 61 6c 73  ype.UInt16, fals
be10: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
be20: 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70   new SQLiteDbTyp
be30: 65 4d 61 70 70 69 6e 67 28 22 55 4e 53 49 47 4e  eMapping("UNSIGN
be40: 45 44 49 4e 54 45 47 45 52 33 32 22 2c 20 44 62  EDINTEGER32", Db
be50: 54 79 70 65 2e 55 49 6e 74 33 32 2c 20 66 61 6c  Type.UInt32, fal
be60: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
be70: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
be80: 70 65 4d 61 70 70 69 6e 67 28 22 55 4e 53 49 47  peMapping("UNSIG
be90: 4e 45 44 49 4e 54 45 47 45 52 36 34 22 2c 20 44  NEDINTEGER64", D
bea0: 62 54 79 70 65 2e 55 49 6e 74 36 34 2c 20 66 61  bType.UInt64, fa
beb0: 6c 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lse),..         
bec0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54     new SQLiteDbT
bed0: 79 70 65 4d 61 70 70 69 6e 67 28 22 56 41 52 42  ypeMapping("VARB
bee0: 49 4e 41 52 59 22 2c 20 44 62 54 79 70 65 2e 42  INARY", DbType.B
bef0: 69 6e 61 72 79 2c 20 66 61 6c 73 65 29 2c 0d 0a  inary, false),..
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
bf10: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70  SQLiteDbTypeMapp
bf20: 69 6e 67 28 22 56 41 52 43 48 41 52 22 2c 20 44  ing("VARCHAR", D
bf30: 62 54 79 70 65 2e 41 6e 73 69 53 74 72 69 6e 67  bType.AnsiString
bf40: 2c 20 74 72 75 65 29 2c 0d 0a 20 20 20 20 20 20  , true),..      
bf50: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
bf60: 44 62 54 79 70 65 4d 61 70 70 69 6e 67 28 22 56  DbTypeMapping("V
bf70: 41 52 43 48 41 52 32 22 2c 20 44 62 54 79 70 65  ARCHAR2", DbType
bf80: 2e 41 6e 73 69 53 74 72 69 6e 67 2c 20 66 61 6c  .AnsiString, fal
bf90: 73 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se),..          
bfa0: 20 20 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79    new SQLiteDbTy
bfb0: 70 65 4d 61 70 70 69 6e 67 28 22 59 45 53 4e 4f  peMapping("YESNO
bfc0: 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61  ", DbType.Boolea
bfd0: 6e 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20  n, false)..     
bfe0: 20 20 20 7d 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d     });..    }...
bff0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
c000: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 20  y>..    /// For 
c010: 61 20 67 69 76 65 6e 20 74 79 70 65 20 6e 61 6d  a given type nam
c020: 65 2c 20 72 65 74 75 72 6e 20 61 20 63 6c 6f 73  e, return a clos
c030: 65 73 74 2d 6d 61 74 63 68 20 2e 4e 45 54 20 74  est-match .NET t
c040: 79 70 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ype..    /// </s
c050: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
c060: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
c070: 6e 6e 65 63 74 69 6f 6e 22 3e 54 68 65 20 63 6f  nnection">The co
c080: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 74 65 78 74  nnection context
c090: 20 66 6f 72 20 63 75 73 74 6f 6d 20 74 79 70 65   for custom type
c0a0: 20 6d 61 70 70 69 6e 67 73 2c 20 69 66 20 61 6e   mappings, if an
c0b0: 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  y.</param>..    
c0c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
c0d0: 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d 65 20  "name">The name 
c0e0: 6f 66 20 74 68 65 20 74 79 70 65 20 74 6f 20 6d  of the type to m
c0f0: 61 74 63 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  atch</param>..  
c100: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
c110: 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c  e="flags">The fl
c120: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
c130: 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63  ith the parent c
c140: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
c150: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
c160: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
c170: 2e 4e 45 54 20 44 42 54 79 70 65 20 74 68 65 20  .NET DBType the 
c180: 74 65 78 74 20 65 76 61 6c 75 61 74 65 73 20 74  text evaluates t
c190: 6f 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  o.</returns>..  
c1a0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
c1b0: 63 20 44 62 54 79 70 65 20 54 79 70 65 4e 61 6d  c DbType TypeNam
c1c0: 65 54 6f 44 62 54 79 70 65 28 0d 0a 20 20 20 20  eToDbType(..    
c1d0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
c1e0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  tion connection,
c1f0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
c200: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
c210: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c220: 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20  Flags flags..   
c230: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
c240: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65         if (conne
c250: 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ction != null)..
c260: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c270: 20 20 20 20 20 20 20 66 6c 61 67 73 20 7c 3d 20         flags |= 
c280: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 46 6c 61 67 73  connection.Flags
c290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c2a0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
c2b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
c2c0: 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
c2d0: 6e 54 79 70 65 73 29 20 3d 3d 20 53 51 4c 69 74  nTypes) == SQLit
c2e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
c2f0: 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 54 79  .UseConnectionTy
c300: 70 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  pes)..          
c310: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c320: 20 20 20 20 20 53 51 4c 69 74 65 44 62 54 79 70       SQLiteDbTyp
c330: 65 4d 61 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 54  eMap connectionT
c340: 79 70 65 4e 61 6d 65 73 20 3d 20 63 6f 6e 6e 65  ypeNames = conne
c350: 63 74 69 6f 6e 2e 5f 74 79 70 65 4e 61 6d 65 73  ction._typeNames
c360: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c370: 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74       if (connect
c380: 69 6f 6e 54 79 70 65 4e 61 6d 65 73 20 21 3d 20  ionTypeNames != 
c390: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
c3a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c3c0: 20 28 6e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d   (name != null).
c3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c3e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c400: 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70  SQLiteDbTypeMapp
c410: 69 6e 67 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ing value;....  
c420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c430: 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
c440: 74 69 6f 6e 54 79 70 65 4e 61 6d 65 73 2e 54 72  tionTypeNames.Tr
c450: 79 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  yGetValue(name, 
c460: 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20  out value))..   
c470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c480: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
c4b0: 2e 64 61 74 61 54 79 70 65 3b 0d 0a 20 20 20 20  .dataType;..    
c4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
c4f0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c520: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
c530: 69 6e 64 65 78 20 3d 20 6e 61 6d 65 2e 49 6e 64  index = name.Ind
c540: 65 78 4f 66 28 27 28 27 29 3b 0d 0a 0d 0a 20 20  exOf('(');....  
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c560: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 69            if ((i
c570: 6e 64 65 78 20 3e 20 30 29 20 26 26 0d 0a 20 20  ndex > 0) &&..  
c580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
c5a0: 6e 6e 65 63 74 69 6f 6e 54 79 70 65 4e 61 6d 65  nnectionTypeName
c5b0: 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6e 61  s.TryGetValue(na
c5c0: 6d 65 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20  me.Substring(0, 
c5d0: 69 6e 64 65 78 29 2e 54 72 69 6d 45 6e 64 28 29  index).TrimEnd()
c5e0: 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20  , out value)).. 
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c600: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c630: 74 75 72 6e 20 76 61 6c 75 65 2e 64 61 74 61 54  turn value.dataT
c640: 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ype;..          
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c660: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c690: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c6a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c6b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c6c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 62   }....        Db
c6d0: 54 79 70 65 20 64 65 66 61 75 6c 74 44 62 54 79  Type defaultDbTy
c6e0: 70 65 20 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65  pe = DbType.Obje
c6f0: 63 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ct;....        i
c700: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
c710: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
c720: 73 2e 4e 6f 47 6c 6f 62 61 6c 54 79 70 65 73 29  s.NoGlobalTypes)
c730: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
c740: 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 47 6c 6f 62  tionFlags.NoGlob
c750: 61 6c 54 79 70 65 73 29 0d 0a 20 20 20 20 20 20  alTypes)..      
c760: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65 66        return def
c770: 61 75 6c 74 44 62 54 79 70 65 3b 0d 0a 0d 0a 20  aultDbType;.... 
c780: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 79         lock (_sy
c790: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
c7a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c7b0: 69 66 20 28 5f 74 79 70 65 4e 61 6d 65 73 20 3d  if (_typeNames =
c7c0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
c7d0: 20 20 20 20 20 20 20 20 20 5f 74 79 70 65 4e 61           _typeNa
c7e0: 6d 65 73 20 3d 20 47 65 74 53 51 4c 69 74 65 44  mes = GetSQLiteD
c7f0: 62 54 79 70 65 4d 61 70 28 29 3b 0d 0a 0d 0a 20  bTypeMap();.... 
c800: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
c810: 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
c820: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
c840: 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67  iteDbTypeMapping
c850: 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20   value;....     
c860: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
c870: 74 79 70 65 4e 61 6d 65 73 2e 54 72 79 47 65 74  typeNames.TryGet
c880: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 6f 75 74 20  Value(name, out 
c890: 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
c8a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 64 61 74  return value.dat
c8d0: 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20  aType;..        
c8e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c8f0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
c900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c910: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c920: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
c930: 78 20 3d 20 6e 61 6d 65 2e 49 6e 64 65 78 4f 66  x = name.IndexOf
c940: 28 27 28 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ('(');....      
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c960: 20 28 28 69 6e 64 65 78 20 3e 20 30 29 20 26 26   ((index > 0) &&
c970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c980: 20 20 20 20 20 20 20 20 20 20 5f 74 79 70 65 4e            _typeN
c990: 61 6d 65 73 2e 54 72 79 47 65 74 56 61 6c 75 65  ames.TryGetValue
c9a0: 28 6e 61 6d 65 2e 53 75 62 73 74 72 69 6e 67 28  (name.Substring(
c9b0: 30 2c 20 69 6e 64 65 78 29 2e 54 72 69 6d 45 6e  0, index).TrimEn
c9c0: 64 28 29 2c 20 6f 75 74 20 76 61 6c 75 65 29 29  d(), out value))
c9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c9e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca00: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 64 61   return value.da
ca10: 74 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20  taType;..       
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
ca50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23  ..        }....#
ca60: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
ca70: 32 30 20 26 26 20 54 52 41 43 45 5f 57 41 52 4e  20 && TRACE_WARN
ca80: 49 4e 47 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ING..        if 
ca90: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
caa0: 72 45 6d 70 74 79 28 6e 61 6d 65 29 20 26 26 0d  rEmpty(name) &&.
cab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 28 66  .            ((f
cac0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
cad0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 54 72 61  nectionFlags.Tra
cae0: 63 65 57 61 72 6e 69 6e 67 29 20 3d 3d 20 53 51  ceWarning) == SQ
caf0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
cb00: 61 67 73 2e 54 72 61 63 65 57 61 72 6e 69 6e 67  ags.TraceWarning
cb10: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
cb20: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
cb30: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
cb40: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
cb50: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
cb60: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
cb70: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
cb80: 20 20 20 20 20 20 20 20 22 57 41 52 4e 49 4e 47          "WARNING
cb90: 3a 20 54 79 70 65 20 6d 61 70 70 69 6e 67 20 66  : Type mapping f
cba0: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67  ailed, returning
cbb0: 20 64 65 66 61 75 6c 74 20 74 79 70 65 20 7b 30   default type {0
cbc0: 7d 20 66 6f 72 20 6e 61 6d 65 20 5c 22 7b 31 7d  } for name \"{1}
cbd0: 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  \".",..         
cbe0: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 44 62         defaultDb
cbf0: 54 79 70 65 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20  Type, name));.. 
cc00: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
cc10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
cc20: 72 6e 20 64 65 66 61 75 6c 74 44 62 54 79 70 65  rn defaultDbType
cc30: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  ;..    }..    #e
cc40: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
cc50: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
cc60: 62 6a 65 63 74 20 5f 73 79 6e 63 52 6f 6f 74 20  bject _syncRoot 
cc70: 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d  = new object();.
cc80: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
cc90: 74 69 63 20 53 51 4c 69 74 65 44 62 54 79 70 65  tic SQLiteDbType
cca0: 4d 61 70 20 5f 74 79 70 65 4e 61 6d 65 73 20 3d  Map _typeNames =
ccb0: 20 6e 75 6c 6c 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20   null;..  }.... 
ccc0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ccd0: 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 68 61 73    /// SQLite has
cce0: 20 76 65 72 79 20 6c 69 6d 69 74 65 64 20 74 79   very limited ty
ccf0: 70 65 73 2c 20 61 6e 64 20 69 73 20 69 6e 68 65  pes, and is inhe
cd00: 72 65 6e 74 6c 79 20 74 65 78 74 2d 62 61 73 65  rently text-base
cd10: 64 2e 20 20 54 68 65 20 66 69 72 73 74 20 35 20  d.  The first 5 
cd20: 74 79 70 65 73 20 62 65 6c 6f 77 20 72 65 70 72  types below repr
cd30: 65 73 65 6e 74 20 74 68 65 20 73 75 6d 20 6f 66  esent the sum of
cd40: 20 61 6c 6c 20 74 79 70 65 73 20 53 51 4c 69 74   all types SQLit
cd50: 65 0d 0a 20 20 2f 2f 2f 20 75 6e 64 65 72 73 74  e..  /// underst
cd60: 61 6e 64 73 2e 20 20 54 68 65 20 44 61 74 65 54  ands.  The DateT
cd70: 69 6d 65 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f  ime extension to
cd80: 20 74 68 65 20 73 70 65 63 20 69 73 20 66 6f 72   the spec is for
cd90: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e   internal use on
cda0: 6c 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ly...  /// </sum
cdb0: 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20  mary>..  public 
cdc0: 65 6e 75 6d 20 54 79 70 65 41 66 66 69 6e 69 74  enum TypeAffinit
cdd0: 79 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20  y..  {..    /// 
cde0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
cdf0: 2f 2f 20 4e 6f 74 20 75 73 65 64 0d 0a 20 20 20  // Not used..   
ce00: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ce10: 0a 20 20 20 20 55 6e 69 6e 69 74 69 61 6c 69 7a  .    Uninitializ
ce20: 65 64 20 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f  ed = 0,..    ///
ce30: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ce40: 2f 2f 2f 20 41 6c 6c 20 69 6e 74 65 67 65 72 73  /// All integers
ce50: 20 69 6e 20 53 51 4c 69 74 65 20 64 65 66 61 75   in SQLite defau
ce60: 6c 74 20 74 6f 20 49 6e 74 36 34 0d 0a 20 20 20  lt to Int64..   
ce70: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ce80: 0a 20 20 20 20 49 6e 74 36 34 20 3d 20 31 2c 0d  .    Int64 = 1,.
ce90: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
cea0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 20  y>..    /// All 
ceb0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
cec0: 75 6d 62 65 72 73 20 69 6e 20 53 51 4c 69 74 65  umbers in SQLite
ced0: 20 64 65 66 61 75 6c 74 20 74 6f 20 64 6f 75 62   default to doub
cee0: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  le..    /// </su
cef0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 44 6f 75 62  mmary>..    Doub
cf00: 6c 65 20 3d 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f  le = 2,..    ///
cf10: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
cf20: 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20  /// The default 
cf30: 64 61 74 61 20 74 79 70 65 20 6f 66 20 53 51 4c  data type of SQL
cf40: 69 74 65 20 69 73 20 74 65 78 74 0d 0a 20 20 20  ite is text..   
cf50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
cf60: 0a 20 20 20 20 54 65 78 74 20 3d 20 33 2c 0d 0a  .    Text = 3,..
cf70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
cf80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 79 70 69 63  >..    /// Typic
cf90: 61 6c 6c 79 20 62 6c 6f 62 20 74 79 70 65 73 20  ally blob types 
cfa0: 61 72 65 20 6f 6e 6c 79 20 73 65 65 6e 20 77 68  are only seen wh
cfb0: 65 6e 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d  en returned from
cfc0: 20 61 20 66 75 6e 63 74 69 6f 6e 0d 0a 20 20 20   a function..   
cfd0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
cfe0: 0a 20 20 20 20 42 6c 6f 62 20 3d 20 34 2c 0d 0a  .    Blob = 4,..
cff0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
d000: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 75 6c 6c 20  >..    /// Null 
d010: 74 79 70 65 73 20 63 61 6e 20 62 65 20 72 65 74  types can be ret
d020: 75 72 6e 65 64 20 66 72 6f 6d 20 66 75 6e 63 74  urned from funct
d030: 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ions..    /// </
d040: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4e 75  summary>..    Nu
d050: 6c 6c 20 3d 20 35 2c 0d 0a 20 20 20 20 2f 2f 2f  ll = 5,..    ///
d060: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
d070: 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e 61  /// Used interna
d080: 6c 6c 79 20 62 79 20 74 68 69 73 20 70 72 6f 76  lly by this prov
d090: 69 64 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ider..    /// </
d0a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 44 61  summary>..    Da
d0b0: 74 65 54 69 6d 65 20 3d 20 31 30 2c 0d 0a 20 20  teTime = 10,..  
d0c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d0d0: 0a 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e  .    /// Used in
d0e0: 74 65 72 6e 61 6c 6c 79 20 62 79 20 74 68 69 73  ternally by this
d0f0: 20 70 72 6f 76 69 64 65 72 0d 0a 20 20 20 20 2f   provider..    /
d100: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d110: 20 20 20 4e 6f 6e 65 20 3d 20 31 31 2c 0d 0a 20     None = 11,.. 
d120: 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d   }....  /// <sum
d130: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65  mary>..  /// The
d140: 73 65 20 61 72 65 20 74 68 65 20 65 76 65 6e 74  se are the event
d150: 20 74 79 70 65 73 20 61 73 73 6f 63 69 61 74 65   types associate
d160: 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 2f 2f  d with the..  //
d170: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
d180: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
d190: 6e 74 48 61 6e 64 6c 65 72 22 20 2f 3e 0d 0a 20  ntHandler" />.. 
d1a0: 20 2f 2f 2f 20 64 65 6c 65 67 61 74 65 20 28 61   /// delegate (a
d1b0: 6e 64 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e  nd its correspon
d1c0: 64 69 6e 67 20 65 76 65 6e 74 29 20 61 6e 64 20  ding event) and 
d1d0: 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20  the..  /// <see 
d1e0: 63 72 65 66 3d 22 43 6f 6e 6e 65 63 74 69 6f 6e  cref="Connection
d1f0: 45 76 65 6e 74 41 72 67 73 22 20 2f 3e 20 63 6c  EventArgs" /> cl
d200: 61 73 73 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  ass...  /// </su
d210: 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63  mmary>..  public
d220: 20 65 6e 75 6d 20 53 51 4c 69 74 65 43 6f 6e 6e   enum SQLiteConn
d230: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 0d  ectionEventType.
d240: 0a 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  .  {..      /// 
d250: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d260: 20 2f 2f 2f 20 4e 6f 74 20 75 73 65 64 2e 0d 0a   /// Not used...
d270: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
d280: 61 72 79 3e 0d 0a 20 20 20 20 20 20 49 6e 76 61  ary>..      Inva
d290: 6c 69 64 20 3d 20 2d 31 2c 0d 0a 0d 0a 20 20 20  lid = -1,....   
d2a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
d2b0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 74 20  ..      /// Not 
d2c0: 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  used...      ///
d2d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d2e0: 20 20 20 55 6e 6b 6e 6f 77 6e 20 3d 20 30 2c 0d     Unknown = 0,.
d2f0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
d300: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
d310: 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  / The connection
d320: 20 69 73 20 62 65 69 6e 67 20 6f 70 65 6e 65 64   is being opened
d330: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
d340: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4f  ummary>..      O
d350: 70 65 6e 69 6e 67 20 3d 20 31 2c 0d 0a 0d 0a 20  pening = 1,.... 
d360: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
d370: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
d380: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
d390: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 70 61 72  ing has been par
d3a0: 73 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  sed...      /// 
d3b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d3c0: 20 20 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69    ConnectionStri
d3d0: 6e 67 20 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20  ng = 2,....     
d3e0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d3f0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f        /// The co
d400: 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70 65  nnection was ope
d410: 6e 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ned...      /// 
d420: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d430: 20 20 4f 70 65 6e 65 64 20 3d 20 33 2c 0d 0a 0d    Opened = 3,...
d440: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
d450: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
d460: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43  The <see cref="C
d470: 68 61 6e 67 65 44 61 74 61 62 61 73 65 22 20 2f  hangeDatabase" /
d480: 3e 20 6d 65 74 68 6f 64 20 77 61 73 20 63 61 6c  > method was cal
d490: 6c 65 64 20 6f 6e 20 74 68 65 0d 0a 20 20 20 20  led on the..    
d4a0: 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e    /// connection
d4b0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
d4c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 43  ummary>..      C
d4d0: 68 61 6e 67 65 44 61 74 61 62 61 73 65 20 3d 20  hangeDatabase = 
d4e0: 34 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  4,....      /// 
d4f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d500: 20 2f 2f 2f 20 41 20 74 72 61 6e 73 61 63 74 69   /// A transacti
d510: 6f 6e 20 77 61 73 20 63 72 65 61 74 65 64 20 75  on was created u
d520: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
d530: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ion...      /// 
d540: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d550: 20 20 4e 65 77 54 72 61 6e 73 61 63 74 69 6f 6e    NewTransaction
d560: 20 3d 20 35 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 5,....      /
d570: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
d580: 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e      /// The conn
d590: 65 63 74 69 6f 6e 20 77 61 73 20 65 6e 6c 69 73  ection was enlis
d5a0: 74 65 64 20 69 6e 74 6f 20 61 20 74 72 61 6e 73  ted into a trans
d5b0: 61 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f  action...      /
d5c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d5d0: 20 20 20 20 20 45 6e 6c 69 73 74 54 72 61 6e 73       EnlistTrans
d5e0: 61 63 74 69 6f 6e 20 3d 20 36 2c 0d 0a 0d 0a 20  action = 6,.... 
d5f0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
d600: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  y>..      /// A 
d610: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 63 72 65 61  command was crea
d620: 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 63 6f  ted using the co
d630: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  nnection...     
d640: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d650: 0a 20 20 20 20 20 20 4e 65 77 43 6f 6d 6d 61 6e  .      NewComman
d660: 64 20 3d 20 37 2c 0d 0a 0d 0a 20 20 20 20 20 20  d = 7,....      
d670: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d680: 20 20 20 20 20 2f 2f 2f 20 41 20 64 61 74 61 20       /// A data 
d690: 72 65 61 64 65 72 20 77 61 73 20 63 72 65 61 74  reader was creat
d6a0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ed using the con
d6b0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  nection...      
d6c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
d6d0: 20 20 20 20 20 20 4e 65 77 44 61 74 61 52 65 61        NewDataRea
d6e0: 64 65 72 20 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20  der = 8,....    
d6f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
d700: 0a 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20 69 6e  .      /// An in
d710: 73 74 61 6e 63 65 20 6f 66 20 61 20 3c 73 65 65  stance of a <see
d720: 20 63 72 65 66 3d 22 43 72 69 74 69 63 61 6c 48   cref="CriticalH
d730: 61 6e 64 6c 65 22 20 2f 3e 20 64 65 72 69 76 65  andle" /> derive
d740: 64 20 63 6c 61 73 73 20 68 61 73 0d 0a 20 20 20  d class has..   
d750: 20 20 20 2f 2f 2f 20 62 65 65 6e 20 63 72 65 61     /// been crea
d760: 74 65 64 20 74 6f 20 77 72 61 70 20 61 20 6e 61  ted to wrap a na
d770: 74 69 76 65 20 72 65 73 6f 75 72 63 65 2e 0d 0a  tive resource...
d780: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
d790: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 65 77 43  ary>..      NewC
d7a0: 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 20 3d 20  riticalHandle = 
d7b0: 39 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  9,....      /// 
d7c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d7d0: 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74   /// The connect
d7e0: 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 63 6c 6f  ion is being clo
d7f0: 73 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  sed...      /// 
d800: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d810: 20 20 43 6c 6f 73 69 6e 67 20 3d 20 31 30 2c 0d    Closing = 10,.
d820: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
d830: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
d840: 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  / The connection
d850: 20 77 61 73 20 63 6c 6f 73 65 64 2e 0d 0a 20 20   was closed...  
d860: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d870: 79 3e 0d 0a 20 20 20 20 20 20 43 6c 6f 73 65 64  y>..      Closed
d880: 20 3d 20 31 31 0d 0a 20 20 7d 0d 0a 0d 0a 20 20   = 11..  }....  
d890: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d8a0: 20 2f 2f 2f 20 54 68 69 73 20 69 6d 70 6c 65 6d   /// This implem
d8b0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 53 51 4c 69  entation of SQLi
d8c0: 74 65 20 66 6f 72 20 41 44 4f 2e 4e 45 54 20 63  te for ADO.NET c
d8d0: 61 6e 20 70 72 6f 63 65 73 73 20 64 61 74 65 2f  an process date/
d8e0: 74 69 6d 65 20 66 69 65 6c 64 73 20 69 6e 0d 0a  time fields in..
d8f0: 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 73 20    /// databases 
d900: 69 6e 20 6f 6e 65 20 6f 66 20 73 69 78 20 66 6f  in one of six fo
d910: 72 6d 61 74 73 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  rmats...  /// </
d920: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
d930: 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 2f 2f 2f  <remarks>..  ///
d940: 20 49 53 4f 38 36 30 31 20 66 6f 72 6d 61 74 20   ISO8601 format 
d950: 69 73 20 6d 6f 72 65 20 63 6f 6d 70 61 74 69 62  is more compatib
d960: 6c 65 2c 20 72 65 61 64 61 62 6c 65 2c 20 66 75  le, readable, fu
d970: 6c 6c 79 2d 70 72 6f 63 65 73 73 61 62 6c 65 2c  lly-processable,
d980: 20 62 75 74 20 6c 65 73 73 0d 0a 20 20 2f 2f 2f   but less..  ///
d990: 20 61 63 63 75 72 61 74 65 20 61 73 20 69 74 20   accurate as it 
d9a0: 64 6f 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65  does not provide
d9b0: 20 74 69 6d 65 20 64 6f 77 6e 20 74 6f 20 66 72   time down to fr
d9c0: 61 63 74 69 6f 6e 73 20 6f 66 20 61 20 73 65 63  actions of a sec
d9d0: 6f 6e 64 2e 0d 0a 20 20 2f 2f 2f 20 4a 75 6c 69  ond...  /// Juli
d9e0: 61 6e 44 61 79 20 69 73 20 74 68 65 20 6e 75 6d  anDay is the num
d9f0: 65 72 69 63 20 66 6f 72 6d 61 74 20 74 68 65 20  eric format the 
da00: 53 51 4c 69 74 65 20 75 73 65 73 20 69 6e 74 65  SQLite uses inte
da10: 72 6e 61 6c 6c 79 20 61 6e 64 20 69 73 20 61 72  rnally and is ar
da20: 67 75 61 62 6c 79 0d 0a 20 20 2f 2f 2f 20 74 68  guably..  /// th
da30: 65 20 6d 6f 73 74 20 63 6f 6d 70 61 74 69 62 6c  e most compatibl
da40: 65 20 77 69 74 68 20 33 72 64 20 70 61 72 74 79  e with 3rd party
da50: 20 74 6f 6f 6c 73 2e 20 20 49 74 20 69 73 20 6e   tools.  It is n
da60: 6f 74 20 72 65 61 64 61 62 6c 65 20 61 73 20 74  ot readable as t
da70: 65 78 74 0d 0a 20 20 2f 2f 2f 20 77 69 74 68 6f  ext..  /// witho
da80: 75 74 20 70 6f 73 74 2d 70 72 6f 63 65 73 73 69  ut post-processi
da90: 6e 67 2e 20 20 54 69 63 6b 73 20 6c 65 73 73 20  ng.  Ticks less 
daa0: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with 
dab0: 33 72 64 20 70 61 72 74 79 20 74 6f 6f 6c 73 20  3rd party tools 
dac0: 74 68 61 74 0d 0a 20 20 2f 2f 2f 20 71 75 65 72  that..  /// quer
dad0: 79 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  y the database, 
dae0: 61 6e 64 20 72 65 6e 64 65 72 73 20 74 68 65 20  and renders the 
daf0: 44 61 74 65 54 69 6d 65 20 66 69 65 6c 64 20 75  DateTime field u
db00: 6e 72 65 61 64 61 62 6c 65 20 61 73 20 74 65 78  nreadable as tex
db10: 74 0d 0a 20 20 2f 2f 2f 20 77 69 74 68 6f 75 74  t..  /// without
db20: 20 70 6f 73 74 2d 70 72 6f 63 65 73 73 69 6e 67   post-processing
db30: 2e 20 20 55 6e 69 78 45 70 6f 63 68 20 69 73 20  .  UnixEpoch is 
db40: 6d 6f 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 20  more compatible 
db50: 77 69 74 68 20 55 6e 69 78 20 73 79 73 74 65 6d  with Unix system
db60: 73 2e 0d 0a 20 20 2f 2f 2f 20 49 6e 76 61 72 69  s...  /// Invari
db70: 61 6e 74 43 75 6c 74 75 72 65 20 61 6c 6c 6f 77  antCulture allow
db80: 73 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64  s the configured
db90: 20 66 6f 72 6d 61 74 20 66 6f 72 20 74 68 65 20   format for the 
dba0: 69 6e 76 61 72 69 61 6e 74 20 63 75 6c 74 75 72  invariant cultur
dbb0: 65 0d 0a 20 20 2f 2f 2f 20 66 6f 72 6d 61 74 20  e..  /// format 
dbc0: 74 6f 20 62 65 20 75 73 65 64 20 61 6e 64 20 69  to be used and i
dbd0: 73 20 68 75 6d 61 6e 20 72 65 61 64 61 62 6c 65  s human readable
dbe0: 2e 20 20 43 75 72 72 65 6e 74 43 75 6c 74 75 72  .  CurrentCultur
dbf0: 65 20 61 6c 6c 6f 77 73 20 74 68 65 0d 0a 20 20  e allows the..  
dc00: 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 65 64 20 66  /// configured f
dc10: 6f 72 6d 61 74 20 66 6f 72 20 74 68 65 20 63 75  ormat for the cu
dc20: 72 72 65 6e 74 20 63 75 6c 74 75 72 65 20 74 6f  rrent culture to
dc30: 20 62 65 20 75 73 65 64 20 61 6e 64 20 69 73 20   be used and is 
dc40: 61 6c 73 6f 20 68 75 6d 61 6e 0d 0a 20 20 2f 2f  also human..  //
dc50: 2f 20 72 65 61 64 61 62 6c 65 2e 0d 0a 20 20 2f  / readable...  /
dc60: 2f 2f 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 70 72  //..  /// The pr
dc70: 65 66 65 72 72 65 64 20 6f 72 64 65 72 20 6f 66  eferred order of
dc80: 20 63 68 6f 6f 73 69 6e 67 20 61 20 44 61 74 65   choosing a Date
dc90: 54 69 6d 65 20 66 6f 72 6d 61 74 20 69 73 20 4a  Time format is J
dca0: 75 6c 69 61 6e 44 61 79 2c 20 49 53 4f 38 36 30  ulianDay, ISO860
dcb0: 31 2c 0d 0a 20 20 2f 2f 2f 20 61 6e 64 20 74 68  1,..  /// and th
dcc0: 65 6e 20 54 69 63 6b 73 2e 20 20 54 69 63 6b 73  en Ticks.  Ticks
dcd0: 20 69 73 20 6d 61 69 6e 6c 79 20 70 72 65 73 65   is mainly prese
dce0: 6e 74 20 66 6f 72 20 6c 65 67 61 63 79 20 63 6f  nt for legacy co
dcf0: 64 65 20 73 75 70 70 6f 72 74 2e 0d 0a 20 20 2f  de support...  /
dd00: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
dd10: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c   public enum SQL
dd20: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 0d 0a  iteDateFormats..
dd30: 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    {..    /// <su
dd40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
dd50: 55 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Use the value of
dd60: 20 44 61 74 65 54 69 6d 65 2e 54 69 63 6b 73 2e   DateTime.Ticks.
dd70: 20 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20    This value is 
dd80: 6e 6f 74 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  not recommended 
dd90: 61 6e 64 20 69 73 20 6e 6f 74 20 77 65 6c 6c 20  and is not well 
dda0: 73 75 70 70 6f 72 74 65 64 20 77 69 74 68 20 4c  supported with L
ddb0: 49 4e 51 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  INQ...    /// </
ddc0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 54 69  summary>..    Ti
ddd0: 63 6b 73 20 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f  cks = 0,..    //
dde0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ddf0: 20 2f 2f 2f 20 55 73 65 20 74 68 65 20 49 53 4f   /// Use the ISO
de00: 2d 38 36 30 31 20 66 6f 72 6d 61 74 2e 20 20 55  -8601 format.  U
de10: 73 65 73 20 74 68 65 20 22 79 79 79 79 2d 4d 4d  ses the "yyyy-MM
de20: 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46  -dd HH:mm:ss.FFF
de30: 46 46 46 46 4b 22 20 66 6f 72 6d 61 74 20 66 6f  FFFFK" format fo
de40: 72 20 55 54 43 20 44 61 74 65 54 69 6d 65 20 76  r UTC DateTime v
de50: 61 6c 75 65 73 20 61 6e 64 0d 0a 20 20 20 20 2f  alues and..    /
de60: 2f 2f 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48  // "yyyy-MM-dd H
de70: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22  H:mm:ss.FFFFFFF"
de80: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6c 6f 63 61   format for loca
de90: 6c 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65  l DateTime value
dea0: 73 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  s)...    /// </s
deb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 49 53 4f  ummary>..    ISO
dec0: 38 36 30 31 20 3d 20 31 2c 0d 0a 20 20 20 20 2f  8601 = 1,..    /
ded0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
dee0: 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 72 76    /// The interv
def0: 61 6c 20 6f 66 20 74 69 6d 65 20 69 6e 20 64 61  al of time in da
df00: 79 73 20 61 6e 64 20 66 72 61 63 74 69 6f 6e 73  ys and fractions
df10: 20 6f 66 20 61 20 64 61 79 20 73 69 6e 63 65 20   of a day since 
df20: 4a 61 6e 75 61 72 79 20 31 2c 20 34 37 31 33 20  January 1, 4713 
df30: 42 43 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  BC...    /// </s
df40: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4a 75 6c  ummary>..    Jul
df50: 69 61 6e 44 61 79 20 3d 20 32 2c 0d 0a 20 20 20  ianDay = 2,..   
df60: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
df70: 20 20 20 20 2f 2f 2f 20 54 68 65 20 77 68 6f 6c      /// The whol
df80: 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f  e number of seco
df90: 6e 64 73 20 73 69 6e 63 65 20 74 68 65 20 55 6e  nds since the Un
dfa0: 69 78 20 65 70 6f 63 68 20 28 4a 61 6e 75 61 72  ix epoch (Januar
dfb0: 79 20 31 2c 20 31 39 37 30 29 2e 0d 0a 20 20 20  y 1, 1970)...   
dfc0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
dfd0: 0a 20 20 20 20 55 6e 69 78 45 70 6f 63 68 20 3d  .    UnixEpoch =
dfe0: 20 33 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   3,..    /// <su
dff0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
e000: 41 6e 79 20 63 75 6c 74 75 72 65 2d 69 6e 64 65  Any culture-inde
e010: 70 65 6e 64 65 6e 74 20 73 74 72 69 6e 67 20 76  pendent string v
e020: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 2e 4e  alue that the .N
e030: 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 63 61 6e  ET Framework can
e040: 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61 20   interpret as a 
e050: 76 61 6c 69 64 20 44 61 74 65 54 69 6d 65 2e 0d  valid DateTime..
e060: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e070: 72 79 3e 0d 0a 20 20 20 20 49 6e 76 61 72 69 61  ry>..    Invaria
e080: 6e 74 43 75 6c 74 75 72 65 20 3d 20 34 2c 0d 0a  ntCulture = 4,..
e090: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
e0a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e 79 20 73  >..    /// Any s
e0b0: 74 72 69 6e 67 20 76 61 6c 75 65 20 74 68 61 74  tring value that
e0c0: 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
e0d0: 6f 72 6b 20 63 61 6e 20 69 6e 74 65 72 70 72 65  ork can interpre
e0e0: 74 20 61 73 20 61 20 76 61 6c 69 64 20 44 61 74  t as a valid Dat
e0f0: 65 54 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  eTime using the 
e100: 63 75 72 72 65 6e 74 20 63 75 6c 74 75 72 65 2e  current culture.
e110: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
e120: 61 72 79 3e 0d 0a 20 20 20 20 43 75 72 72 65 6e  ary>..    Curren
e130: 74 43 75 6c 74 75 72 65 20 3d 20 35 2c 0d 0a 20  tCulture = 5,.. 
e140: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e150: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65  ..    /// The de
e160: 66 61 75 6c 74 20 66 6f 72 6d 61 74 20 66 6f 72  fault format for
e170: 20 74 68 69 73 20 70 72 6f 76 69 64 65 72 2e 0d   this provider..
e180: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e190: 72 79 3e 0d 0a 20 20 20 20 44 65 66 61 75 6c 74  ry>..    Default
e1a0: 20 3d 20 49 53 4f 38 36 30 31 0d 0a 20 20 7d 0d   = ISO8601..  }.
e1b0: 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  ...  /// <summar
e1c0: 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 65  y>..  /// This e
e1d0: 6e 75 6d 20 64 65 74 65 72 6d 69 6e 65 73 20 68  num determines h
e1e0: 6f 77 20 53 51 4c 69 74 65 20 74 72 65 61 74 73  ow SQLite treats
e1f0: 20 69 74 73 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   its journal fil
e200: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e...  /// </summ
e210: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65 6d  ary>..  /// <rem
e220: 61 72 6b 73 3e 0d 0a 20 20 2f 2f 2f 20 42 79 20  arks>..  /// By 
e230: 64 65 66 61 75 6c 74 20 53 51 4c 69 74 65 20 77  default SQLite w
e240: 69 6c 6c 20 63 72 65 61 74 65 20 61 6e 64 20 64  ill create and d
e250: 65 6c 65 74 65 20 74 68 65 20 6a 6f 75 72 6e 61  elete the journa
e260: 6c 20 66 69 6c 65 20 77 68 65 6e 20 6e 65 65 64  l file when need
e270: 65 64 20 64 75 72 69 6e 67 20 61 20 74 72 61 6e  ed during a tran
e280: 73 61 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20  saction...  /// 
e290: 48 6f 77 65 76 65 72 2c 20 66 6f 72 20 73 6f 6d  However, for som
e2a0: 65 20 63 6f 6d 70 75 74 65 72 73 20 72 75 6e 6e  e computers runn
e2b0: 69 6e 67 20 63 65 72 74 61 69 6e 20 66 69 6c 65  ing certain file
e2c0: 73 79 73 74 65 6d 20 6d 6f 6e 69 74 6f 72 69 6e  system monitorin
e2d0: 67 20 74 6f 6f 6c 73 2c 20 74 68 65 20 72 61 70  g tools, the rap
e2e0: 69 64 0d 0a 20 20 2f 2f 2f 20 63 72 65 61 74 69  id..  /// creati
e2f0: 6f 6e 20 61 6e 64 20 64 65 6c 65 74 69 6f 6e 20  on and deletion 
e300: 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66  of the journal f
e310: 69 6c 65 20 63 61 6e 20 63 61 75 73 65 20 74 68  ile can cause th
e320: 6f 73 65 20 70 72 6f 67 72 61 6d 73 20 74 6f 20  ose programs to 
e330: 66 61 69 6c 2c 20 6f 72 20 74 6f 20 69 6e 74 65  fail, or to inte
e340: 72 66 65 72 65 20 77 69 74 68 20 53 51 4c 69 74  rfere with SQLit
e350: 65 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20 20 2f 2f 2f  e...  ///..  ///
e360: 20 49 66 20 61 20 70 72 6f 67 72 61 6d 20 6f 72   If a program or
e370: 20 76 69 72 75 73 20 73 63 61 6e 6e 65 72 20 69   virus scanner i
e380: 73 20 69 6e 74 65 72 66 65 72 69 6e 67 20 77 69  s interfering wi
e390: 74 68 20 53 51 4c 69 74 65 27 73 20 6a 6f 75 72  th SQLite's jour
e3a0: 6e 61 6c 20 66 69 6c 65 2c 20 79 6f 75 20 6d 61  nal file, you ma
e3b0: 79 20 72 65 63 65 69 76 65 20 65 72 72 6f 72 73  y receive errors
e3c0: 20 6c 69 6b 65 20 22 75 6e 61 62 6c 65 20 74 6f   like "unable to
e3d0: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66   open database f
e3e0: 69 6c 65 22 0d 0a 20 20 2f 2f 2f 20 77 68 65 6e  ile"..  /// when
e3f0: 20 73 74 61 72 74 69 6e 67 20 61 20 74 72 61 6e   starting a tran
e400: 73 61 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 69  saction.  If thi
e410: 73 20 69 73 20 68 61 70 70 65 6e 69 6e 67 2c 20  s is happening, 
e420: 79 6f 75 20 6d 61 79 20 77 61 6e 74 20 74 6f 20  you may want to 
e430: 63 68 61 6e 67 65 20 74 68 65 20 64 65 66 61 75  change the defau
e440: 6c 74 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  lt journal mode 
e450: 74 6f 20 50 65 72 73 69 73 74 2e 0d 0a 20 20 2f  to Persist...  /
e460: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
e470: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c   public enum SQL
e480: 69 74 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 45 6e  iteJournalModeEn
e490: 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f  um..  {..    ///
e4a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
e4b0: 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20  /// The default 
e4c0: 6d 6f 64 65 2c 20 74 68 69 73 20 63 61 75 73 65  mode, this cause
e4d0: 73 20 53 51 4c 69 74 65 20 74 6f 20 75 73 65 20  s SQLite to use 
e4e0: 74 68 65 20 65 78 69 73 74 69 6e 67 20 6a 6f 75  the existing jou
e4f0: 72 6e 61 6c 69 6e 67 20 6d 6f 64 65 20 66 6f 72  rnaling mode for
e500: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a   the database...
e510: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e520: 79 3e 0d 0a 20 20 20 20 44 65 66 61 75 6c 74 20  y>..    Default 
e530: 3d 20 2d 31 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c  = -1,..    /// <
e540: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e550: 2f 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 63 72  / SQLite will cr
e560: 65 61 74 65 20 61 6e 64 20 64 65 73 74 72 6f 79  eate and destroy
e570: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
e580: 65 20 61 73 2d 6e 65 65 64 65 64 2e 0d 0a 20 20  e as-needed...  
e590: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e5a0: 0d 0a 20 20 20 20 44 65 6c 65 74 65 20 3d 20 30  ..    Delete = 0
e5b0: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ,..    /// <summ
e5c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 57 68  ary>..    /// Wh
e5d0: 65 6e 20 74 68 69 73 20 69 73 20 73 65 74 2c 20  en this is set, 
e5e0: 53 51 4c 69 74 65 20 77 69 6c 6c 20 6b 65 65 70  SQLite will keep
e5f0: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
e600: 65 20 65 76 65 6e 20 61 66 74 65 72 20 61 20 74  e even after a t
e610: 72 61 6e 73 61 63 74 69 6f 6e 20 68 61 73 20 63  ransaction has c
e620: 6f 6d 70 6c 65 74 65 64 2e 20 20 49 74 27 73 20  ompleted.  It's 
e630: 63 6f 6e 74 65 6e 74 73 20 77 69 6c 6c 20 62 65  contents will be
e640: 20 65 72 61 73 65 64 2c 0d 0a 20 20 20 20 2f 2f   erased,..    //
e650: 2f 20 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61  / and the journa
e660: 6c 20 72 65 2d 75 73 65 64 20 61 73 20 6f 66 74  l re-used as oft
e670: 65 6e 20 61 73 20 6e 65 65 64 65 64 2e 20 20 49  en as needed.  I
e680: 66 20 69 74 20 69 73 20 64 65 6c 65 74 65 64 2c  f it is deleted,
e690: 20 69 74 20 77 69 6c 6c 20 62 65 20 72 65 63 72   it will be recr
e6a0: 65 61 74 65 64 20 74 68 65 20 6e 65 78 74 20 74  eated the next t
e6b0: 69 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65 64  ime it is needed
e6c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
e6d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 50 65 72 73 69  mary>..    Persi
e6e0: 73 74 20 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f 2f  st = 1,..    ///
e6f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
e700: 2f 2f 2f 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  /// This option 
e710: 64 69 73 61 62 6c 65 73 20 74 68 65 20 72 6f 6c  disables the rol
e720: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 65 6e  lback journal en
e730: 74 69 72 65 6c 79 2e 20 20 49 6e 74 65 72 72 75  tirely.  Interru
e740: 70 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  pted transaction
e750: 73 20 6f 72 20 61 20 70 72 6f 67 72 61 6d 20 63  s or a program c
e760: 72 61 73 68 20 63 61 6e 20 63 61 75 73 65 20 64  rash can cause d
e770: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
e780: 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 6e 20 74   corruption in t
e790: 68 69 73 20 6d 6f 64 65 21 0d 0a 20 20 20 20 2f  his mode!..    /
e7a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
e7b0: 20 20 20 4f 66 66 20 3d 20 32 2c 0d 0a 20 20 20     Off = 2,..   
e7c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e7d0: 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 77      /// SQLite w
e7e0: 69 6c 6c 20 74 72 75 6e 63 61 74 65 20 74 68 65  ill truncate the
e7f0: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 74 6f   journal file to
e800: 20 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 69 6e 73   zero-length ins
e810: 74 65 61 64 20 6f 66 20 64 65 6c 65 74 69 6e 67  tead of deleting
e820: 20 69 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f   it...    /// </
e830: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 54 72  summary>..    Tr
e840: 75 6e 63 61 74 65 20 3d 20 33 2c 0d 0a 20 20 20  uncate = 3,..   
e850: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e860: 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 77      /// SQLite w
e870: 69 6c 6c 20 73 74 6f 72 65 20 74 68 65 20 6a 6f  ill store the jo
e880: 75 72 6e 61 6c 20 69 6e 20 76 6f 6c 61 74 69 6c  urnal in volatil
e890: 65 20 52 41 4d 2e 20 20 54 68 69 73 20 73 61 76  e RAM.  This sav
e8a0: 65 73 20 64 69 73 6b 20 49 2f 4f 20 62 75 74 20  es disk I/O but 
e8b0: 61 74 20 74 68 65 20 65 78 70 65 6e 73 65 20 6f  at the expense o
e8c0: 66 20 64 61 74 61 62 61 73 65 20 73 61 66 65 74  f database safet
e8d0: 79 20 61 6e 64 20 69 6e 74 65 67 72 69 74 79 2e  y and integrity.
e8e0: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 74 68 65  ..    /// If the
e8f0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 75 73 69   application usi
e900: 6e 67 20 53 51 4c 69 74 65 20 63 72 61 73 68 65  ng SQLite crashe
e910: 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  s in the middle 
e920: 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  of a transaction
e930: 20 77 68 65 6e 20 74 68 65 20 4d 45 4d 4f 52 59   when the MEMORY
e940: 20 6a 6f 75 72 6e 61 6c 69 6e 67 20 6d 6f 64 65   journaling mode
e950: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
e960: 65 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  e..    /// datab
e970: 61 73 65 20 66 69 6c 65 20 77 69 6c 6c 20 76 65  ase file will ve
e980: 72 79 20 6c 69 6b 65 6c 79 20 67 6f 20 63 6f 72  ry likely go cor
e990: 72 75 70 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rupt...    /// <
e9a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 4d  /summary>..    M
e9b0: 65 6d 6f 72 79 20 3d 20 34 2c 0d 0a 20 20 20 20  emory = 4,..    
e9c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e9d0: 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 75 73     /// SQLite us
e9e0: 65 73 20 61 20 77 72 69 74 65 2d 61 68 65 61 64  es a write-ahead
e9f0: 20 6c 6f 67 20 69 6e 73 74 65 61 64 20 6f 66 20   log instead of 
ea00: 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
ea10: 61 6c 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  al to implement 
ea20: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 54  transactions.  T
ea30: 68 65 20 57 41 4c 20 6a 6f 75 72 6e 61 6c 69 6e  he WAL journalin
ea40: 67 20 6d 6f 64 65 20 69 73 20 70 65 72 73 69 73  g mode is persis
ea50: 74 65 6e 74 3b 0d 0a 20 20 20 20 2f 2f 2f 20 61  tent;..    /// a
ea60: 66 74 65 72 20 62 65 69 6e 67 20 73 65 74 20 69  fter being set i
ea70: 74 20 73 74 61 79 73 20 69 6e 20 65 66 66 65 63  t stays in effec
ea80: 74 20 61 63 72 6f 73 73 20 6d 75 6c 74 69 70 6c  t across multipl
ea90: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
eaa0: 63 74 69 6f 6e 73 20 61 6e 64 20 61 66 74 65 72  ctions and after
eab0: 20 63 6c 6f 73 69 6e 67 20 61 6e 64 20 72 65 6f   closing and reo
eac0: 70 65 6e 69 6e 67 20 74 68 65 20 64 61 74 61 62  pening the datab
ead0: 61 73 65 2e 20 41 20 64 61 74 61 62 61 73 65 0d  ase. A database.
eae0: 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 57 41 4c 20  .    /// in WAL 
eaf0: 6a 6f 75 72 6e 61 6c 69 6e 67 20 6d 6f 64 65 20  journaling mode 
eb00: 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61 63 63 65  can only be acce
eb10: 73 73 65 64 20 62 79 20 53 51 4c 69 74 65 20 76  ssed by SQLite v
eb20: 65 72 73 69 6f 6e 20 33 2e 37 2e 30 20 6f 72 20  ersion 3.7.0 or 
eb30: 6c 61 74 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  later...    /// 
eb40: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
eb50: 57 61 6c 20 3d 20 35 0d 0a 20 20 7d 0d 0a 0d 0a  Wal = 5..  }....
eb60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
eb70: 0a 20 20 2f 2f 2f 20 50 6f 73 73 69 62 6c 65 20  .  /// Possible 
eb80: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 22  values for the "
eb90: 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 64 61 74  synchronous" dat
eba0: 61 62 61 73 65 20 73 65 74 74 69 6e 67 2e 20 20  abase setting.  
ebb0: 54 68 69 73 20 73 65 74 74 69 6e 67 20 64 65 74  This setting det
ebc0: 65 72 6d 69 6e 65 73 0d 0a 20 20 2f 2f 2f 20 68  ermines..  /// h
ebd0: 6f 77 20 6f 66 74 65 6e 20 74 68 65 20 64 61 74  ow often the dat
ebe0: 61 62 61 73 65 20 65 6e 67 69 6e 65 20 63 61 6c  abase engine cal
ebf0: 6c 73 20 74 68 65 20 78 53 79 6e 63 20 6d 65 74  ls the xSync met
ec00: 68 6f 64 20 6f 66 20 74 68 65 20 56 46 53 2e 0d  hod of the VFS..
ec10: 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79  .  /// </summary
ec20: 3e 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e  >..  internal en
ec30: 75 6d 20 53 51 4c 69 74 65 53 79 6e 63 68 72 6f  um SQLiteSynchro
ec40: 6e 6f 75 73 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20  nousEnum..  {.. 
ec50: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
ec60: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 55 73  y>..      /// Us
ec70: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73  e the default "s
ec80: 79 6e 63 68 72 6f 6e 6f 75 73 22 20 64 61 74 61  ynchronous" data
ec90: 62 61 73 65 20 73 65 74 74 69 6e 67 2e 20 20 43  base setting.  C
eca0: 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 73  urrently, this s
ecb0: 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20  hould be..      
ecc0: 2f 2f 2f 20 74 68 65 20 73 61 6d 65 20 61 73 20  /// the same as 
ecd0: 75 73 69 6e 67 20 74 68 65 20 46 55 4c 4c 20 6d  using the FULL m
ece0: 6f 64 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ode...      /// 
ecf0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ed00: 20 20 44 65 66 61 75 6c 74 20 3d 20 2d 31 2c 0d    Default = -1,.
ed10: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
ed20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
ed30: 2f 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65  / The database e
ed40: 6e 67 69 6e 65 20 63 6f 6e 74 69 6e 75 65 73 20  ngine continues 
ed50: 77 69 74 68 6f 75 74 20 73 79 6e 63 69 6e 67 20  without syncing 
ed60: 61 73 20 73 6f 6f 6e 20 61 73 20 69 74 20 68 61  as soon as it ha
ed70: 73 20 68 61 6e 64 65 64 0d 0a 20 20 20 20 20 20  s handed..      
ed80: 2f 2f 2f 20 64 61 74 61 20 6f 66 66 20 74 6f 20  /// data off to 
ed90: 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79  the operating sy
eda0: 73 74 65 6d 2e 20 20 49 66 20 74 68 65 20 61 70  stem.  If the ap
edb0: 70 6c 69 63 61 74 69 6f 6e 20 72 75 6e 6e 69 6e  plication runnin
edc0: 67 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20  g SQLite..      
edd0: 2f 2f 2f 20 63 72 61 73 68 65 73 2c 20 74 68 65  /// crashes, the
ede0: 20 64 61 74 61 20 77 69 6c 6c 20 62 65 20 73 61   data will be sa
edf0: 66 65 2c 20 62 75 74 20 74 68 65 20 64 61 74 61  fe, but the data
ee00: 62 61 73 65 20 6d 69 67 68 74 20 62 65 63 6f 6d  base might becom
ee10: 65 20 63 6f 72 72 75 70 74 65 64 0d 0a 20 20 20  e corrupted..   
ee20: 20 20 20 2f 2f 2f 20 69 66 20 74 68 65 20 6f 70     /// if the op
ee30: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 63  erating system c
ee40: 72 61 73 68 65 73 20 6f 72 20 74 68 65 20 63 6f  rashes or the co
ee50: 6d 70 75 74 65 72 20 6c 6f 73 65 73 20 70 6f 77  mputer loses pow
ee60: 65 72 20 62 65 66 6f 72 65 20 74 68 61 74 0d 0a  er before that..
ee70: 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 68        /// data h
ee80: 61 73 20 62 65 65 6e 20 77 72 69 74 74 65 6e 20  as been written 
ee90: 74 6f 20 74 68 65 20 64 69 73 6b 20 73 75 72 66  to the disk surf
eea0: 61 63 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ace...      /// 
eeb0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
eec0: 20 20 4f 66 66 20 3d 20 30 2c 0d 0a 0d 0a 20 20    Off = 0,....  
eed0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
eee0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
eef0: 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
ef00: 20 77 69 6c 6c 20 73 74 69 6c 6c 20 73 79 6e 63   will still sync
ef10: 20 61 74 20 74 68 65 20 6d 6f 73 74 20 63 72 69   at the most cri
ef20: 74 69 63 61 6c 20 6d 6f 6d 65 6e 74 73 2c 20 62  tical moments, b
ef30: 75 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6c 65  ut..      /// le
ef40: 73 73 20 6f 66 74 65 6e 20 74 68 61 6e 20 69 6e  ss often than in
ef50: 20 46 55 4c 4c 20 6d 6f 64 65 2e 20 20 54 68 65   FULL mode.  The
ef60: 72 65 20 69 73 20 61 20 76 65 72 79 20 73 6d 61  re is a very sma
ef70: 6c 6c 20 28 74 68 6f 75 67 68 20 6e 6f 6e 2d 7a  ll (though non-z
ef80: 65 72 6f 29 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ero)..      /// 
ef90: 63 68 61 6e 63 65 20 74 68 61 74 20 61 20 70 6f  chance that a po
efa0: 77 65 72 20 66 61 69 6c 75 72 65 20 61 74 20 6a  wer failure at j
efb0: 75 73 74 20 74 68 65 20 77 72 6f 6e 67 20 74 69  ust the wrong ti
efc0: 6d 65 20 63 6f 75 6c 64 20 63 6f 72 72 75 70 74  me could corrupt
efd0: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
efe0: 64 61 74 61 62 61 73 65 20 69 6e 20 4e 4f 52 4d  database in NORM
eff0: 41 4c 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20  AL mode...      
f000: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f010: 20 20 20 20 20 20 4e 6f 72 6d 61 6c 20 3d 20 31        Normal = 1
f020: 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
f030: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
f040: 2f 2f 2f 20 54 68 65 20 64 61 74 61 62 61 73 65  /// The database
f050: 20 65 6e 67 69 6e 65 20 77 69 6c 6c 20 75 73 65   engine will use
f060: 20 74 68 65 20 78 53 79 6e 63 20 6d 65 74 68 6f   the xSync metho
f070: 64 20 6f 66 20 74 68 65 20 56 46 53 20 74 6f 20  d of the VFS to 
f080: 65 6e 73 75 72 65 20 74 68 61 74 0d 0a 20 20 20  ensure that..   
f090: 20 20 20 2f 2f 2f 20 61 6c 6c 20 63 6f 6e 74 65     /// all conte
f0a0: 6e 74 20 69 73 20 73 61 66 65 6c 79 20 77 72 69  nt is safely wri
f0b0: 74 74 65 6e 20 74 6f 20 74 68 65 20 64 69 73 6b  tten to the disk
f0c0: 20 73 75 72 66 61 63 65 20 70 72 69 6f 72 20 74   surface prior t
f0d0: 6f 20 63 6f 6e 74 69 6e 75 69 6e 67 2e 0d 0a 20  o continuing... 
f0e0: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 65 6e       /// This en
f0f0: 73 75 72 65 73 20 74 68 61 74 20 61 6e 20 6f 70  sures that an op
f100: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 63  erating system c
f110: 72 61 73 68 20 6f 72 20 70 6f 77 65 72 20 66 61  rash or power fa
f120: 69 6c 75 72 65 20 77 69 6c 6c 20 6e 6f 74 0d 0a  ilure will not..
f130: 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72 72 75 70        /// corrup
f140: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  t the database. 
f150: 20 46 55 4c 4c 20 73 79 6e 63 68 72 6f 6e 6f 75   FULL synchronou
f160: 73 20 69 73 20 76 65 72 79 20 73 61 66 65 2c 20  s is very safe, 
f170: 62 75 74 20 69 74 20 69 73 20 61 6c 73 6f 0d 0a  but it is also..
f180: 20 20 20 20 20 20 2f 2f 2f 20 73 6c 6f 77 65 72        /// slower
f190: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
f1a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 46  ummary>..      F
f1b0: 75 6c 6c 20 3d 20 32 0d 0a 20 20 7d 0d 0a 0d 0a  ull = 2..  }....
f1c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
f1d0: 0a 20 20 2f 2f 2f 20 54 68 65 20 72 65 71 75 65  .  /// The reque
f1e0: 73 74 65 64 20 63 6f 6d 6d 61 6e 64 20 65 78 65  sted command exe
f1f0: 63 75 74 69 6f 6e 20 74 79 70 65 2e 20 20 54 68  cution type.  Th
f200: 69 73 20 63 6f 6e 74 72 6f 6c 73 20 77 68 69 63  is controls whic
f210: 68 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 0d  h method of the.
f220: 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66  .  /// <see cref
f230: 3d 22 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 22  ="SQLiteCommand"
f240: 20 2f 3e 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20   /> object will 
f250: 62 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 2f 2f  be called...  //
f260: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
f270: 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c 69  public enum SQLi
f280: 74 65 45 78 65 63 75 74 65 54 79 70 65 0d 0a 20  teExecuteType.. 
f290: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73   {..      /// <s
f2a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
f2b0: 2f 2f 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20  // Do nothing.  
f2c0: 4e 6f 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 62  No method will b
f2d0: 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  e called...     
f2e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f2f0: 0a 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 2c  .      None = 0,
f300: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
f310: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
f320: 2f 2f 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 69  // The command i
f330: 73 20 6e 6f 74 20 65 78 70 65 63 74 65 64 20 74  s not expected t
f340: 6f 20 72 65 74 75 72 6e 20 61 20 72 65 73 75 6c  o return a resul
f350: 74 20 2d 4f 52 2d 20 74 68 65 20 72 65 73 75 6c  t -OR- the resul
f360: 74 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20  t is not..      
f370: 2f 2f 2f 20 6e 65 65 64 65 64 2e 20 20 54 68 65  /// needed.  The
f380: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
f390: 74 65 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  teCommand.Execut
f3a0: 65 4e 6f 6e 51 75 65 72 79 28 29 22 20 2f 3e 20  eNonQuery()" /> 
f3b0: 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  or..      /// <s
f3c0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
f3d0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
f3e0: 6e 51 75 65 72 79 28 43 6f 6d 6d 61 6e 64 42 65  nQuery(CommandBe
f3f0: 68 61 76 69 6f 72 29 22 20 2f 3e 20 20 6d 65 74  havior)" />  met
f400: 68 6f 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 77  hod..      /// w
f410: 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 2e 0d 0a  ill be called...
f420: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
f430: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 6e 51  ary>..      NonQ
f440: 75 65 72 79 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20  uery = 1,....   
f450: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
f460: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
f470: 63 6f 6d 6d 61 6e 64 20 69 73 20 65 78 70 65 63  command is expec
f480: 74 65 64 20 74 6f 20 72 65 74 75 72 6e 20 61 20  ted to return a 
f490: 73 63 61 6c 61 72 20 72 65 73 75 6c 74 20 2d 4f  scalar result -O
f4a0: 52 2d 20 74 68 65 20 72 65 73 75 6c 74 20 73 68  R- the result sh
f4b0: 6f 75 6c 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ould..      /// 
f4c0: 62 65 20 6c 69 6d 69 74 65 64 20 74 6f 20 61 20  be limited to a 
f4d0: 73 63 61 6c 61 72 20 72 65 73 75 6c 74 2e 20 20  scalar result.  
f4e0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
f4f0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 45 78 65  QLiteCommand.Exe
f500: 63 75 74 65 53 63 61 6c 61 72 28 29 22 20 2f 3e  cuteScalar()" />
f510: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6f 72 20 3c  ..      /// or <
f520: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
f530: 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  Command.ExecuteS
f540: 63 61 6c 61 72 28 43 6f 6d 6d 61 6e 64 42 65 68  calar(CommandBeh
f550: 61 76 69 6f 72 29 22 20 2f 3e 20 6d 65 74 68 6f  avior)" /> metho
f560: 64 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 2f 2f  d will..      //
f570: 2f 20 62 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20  / be called...  
f580: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
f590: 79 3e 0d 0a 20 20 20 20 20 20 53 63 61 6c 61 72  y>..      Scalar
f5a0: 20 3d 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 2,....      /
f5b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f5c0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6d 6d      /// The comm
f5d0: 61 6e 64 20 69 73 20 65 78 70 65 63 74 65 64 20  and is expected 
f5e0: 74 6f 20 72 65 74 75 72 6e 20 3c 73 65 65 20 63  to return <see c
f5f0: 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52  ref="SQLiteDataR
f600: 65 61 64 65 72 22 20 2f 3e 20 72 65 73 75 6c 74  eader" /> result
f610: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  ...      /// The
f620: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
f630: 74 65 43 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  teCommand.Execut
f640: 65 52 65 61 64 65 72 28 29 22 20 2f 3e 20 6f 72  eReader()" /> or
f650: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65  ..      /// <see
f660: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6d   cref="SQLiteCom
f670: 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64  mand.ExecuteRead
f680: 65 72 28 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69  er(CommandBehavi
f690: 6f 72 29 22 20 2f 3e 20 6d 65 74 68 6f 64 20 77  or)" /> method w
f6a0: 69 6c 6c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 62  ill..      /// b
f6b0: 65 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  e called...     
f6c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f6d0: 0a 20 20 20 20 20 20 52 65 61 64 65 72 20 3d 20  .      Reader = 
f6e0: 33 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  3,....      /// 
f6f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
f700: 20 2f 2f 2f 20 55 73 65 20 74 68 65 20 64 65 66   /// Use the def
f710: 61 75 6c 74 20 63 6f 6d 6d 61 6e 64 20 65 78 65  ault command exe
f720: 63 75 74 69 6f 6e 20 74 79 70 65 2e 20 20 55 73  cution type.  Us
f730: 69 6e 67 20 74 68 69 73 20 76 61 6c 75 65 20 69  ing this value i
f740: 73 20 74 68 65 20 73 61 6d 65 0d 0a 20 20 20 20  s the same..    
f750: 20 20 2f 2f 2f 20 61 73 20 75 73 69 6e 67 20 74    /// as using t
f760: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
f770: 4c 69 74 65 45 78 65 63 75 74 65 54 79 70 65 2e  LiteExecuteType.
f780: 4e 6f 6e 51 75 65 72 79 22 20 2f 3e 20 76 61 6c  NonQuery" /> val
f790: 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ue...      /// <
f7a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
f7b0: 20 44 65 66 61 75 6c 74 20 3d 20 4e 6f 6e 51 75   Default = NonQu
f7c0: 65 72 79 20 2f 2a 20 54 4f 44 4f 3a 20 47 6f 6f  ery /* TODO: Goo
f7d0: 64 20 64 65 66 61 75 6c 74 3f 20 2a 2f 0d 0a 20  d default? */.. 
f7e0: 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d   }....  /// <sum
f7f0: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65  mary>..  /// The
f800: 20 61 63 74 69 6f 6e 20 63 6f 64 65 20 72 65 73   action code res
f810: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65  ponsible for the
f820: 20 63 75 72 72 65 6e 74 20 63 61 6c 6c 20 69 6e   current call in
f830: 74 6f 20 74 68 65 20 61 75 74 68 6f 72 69 7a 65  to the authorize
f840: 72 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  r...  /// </summ
f850: 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65  ary>..  public e
f860: 6e 75 6d 20 53 51 4c 69 74 65 41 75 74 68 6f 72  num SQLiteAuthor
f870: 69 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 0d 0a  izerActionCode..
f880: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c    {..      /// <
f890: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
f8a0: 2f 2f 2f 20 4e 6f 20 61 63 74 69 6f 6e 20 69 73  /// No action is
f8b0: 20 62 65 69 6e 67 20 70 65 72 66 6f 72 6d 65 64   being performed
f8c0: 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 73 68  .  This value sh
f8d0: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64  ould not be used
f8e0: 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 2f 2f 2f   from..      ///
f8f0: 20 65 78 74 65 72 6e 61 6c 20 63 6f 64 65 2e 0d   external code..
f900: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
f910: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 6e  mary>..      Non
f920: 65 20 3d 20 2d 31 2c 0d 0a 0d 0a 20 20 20 20 20  e = -1,....     
f930: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f940: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 20 6c 6f 6e        /// No lon
f950: 67 65 72 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  ger used...     
f960: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f970: 0a 20 20 20 20 20 20 43 6f 70 79 20 3d 20 30 2c  .      Copy = 0,
f980: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
f990: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
f9a0: 2f 2f 20 41 6e 20 69 6e 64 65 78 20 77 69 6c 6c  // An index will
f9b0: 20 62 65 20 63 72 65 61 74 65 64 2e 20 20 54 68   be created.  Th
f9c0: 65 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69  e action-specifi
f9d0: 63 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  c arguments are 
f9e0: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 69  the..      /// i
f9f0: 6e 64 65 78 20 6e 61 6d 65 20 61 6e 64 20 74 68  ndex name and th
fa00: 65 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20  e table name... 
fa10: 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20 20       ///..      
fa20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
fa30: 20 20 20 20 20 20 43 72 65 61 74 65 49 6e 64 65        CreateInde
fa40: 78 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20 20  x = 1,....      
fa50: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fa60: 20 20 20 20 20 2f 2f 2f 20 41 20 74 61 62 6c 65       /// A table
fa70: 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64   will be created
fa80: 2e 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70  .  The action-sp
fa90: 65 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73  ecific arguments
faa0: 20 61 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20   are the..      
fab0: 2f 2f 2f 20 74 61 62 6c 65 20 6e 61 6d 65 20 61  /// table name a
fac0: 6e 64 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e  nd a null value.
fad0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
fae0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 43 72  mmary>..      Cr
faf0: 65 61 74 65 54 61 62 6c 65 20 3d 20 32 2c 0d 0a  eateTable = 2,..
fb00: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
fb10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
fb20: 20 41 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   A temporary ind
fb30: 65 78 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74  ex will be creat
fb40: 65 64 2e 20 20 54 68 65 20 61 63 74 69 6f 6e 2d  ed.  The action-
fb50: 73 70 65 63 69 66 69 63 20 61 72 67 75 6d 65 6e  specific argumen
fb60: 74 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72  ts..      /// ar
fb70: 65 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  e the index name
fb80: 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 6e   and the table n
fb90: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ame...      /// 
fba0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
fbb0: 20 20 43 72 65 61 74 65 54 65 6d 70 49 6e 64 65    CreateTempInde
fbc0: 78 20 3d 20 33 2c 0d 0a 0d 0a 20 20 20 20 20 20  x = 3,....      
fbd0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fbe0: 20 20 20 20 20 2f 2f 2f 20 41 20 74 65 6d 70 6f       /// A tempo
fbf0: 72 61 72 79 20 74 61 62 6c 65 20 77 69 6c 6c 20  rary table will 
fc00: 62 65 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  be created.  The
fc10: 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63   action-specific
fc20: 20 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20   arguments..    
fc30: 20 20 2f 2f 2f 20 61 72 65 20 74 68 65 20 74 61    /// are the ta
fc40: 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 20 6e  ble name and a n
fc50: 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  ull value...    
fc60: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
fc70: 0d 0a 20 20 20 20 20 20 43 72 65 61 74 65 54 65  ..      CreateTe
fc80: 6d 70 54 61 62 6c 65 20 3d 20 34 2c 0d 0a 0d 0a  mpTable = 4,....
fc90: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
fca0: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41  ry>..      /// A
fcb0: 20 74 65 6d 70 6f 72 61 72 79 20 74 72 69 67 67   temporary trigg
fcc0: 65 72 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74  er will be creat
fcd0: 65 64 2e 20 20 54 68 65 20 61 63 74 69 6f 6e 2d  ed.  The action-
fce0: 73 70 65 63 69 66 69 63 20 61 72 67 75 6d 65 6e  specific argumen
fcf0: 74 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72  ts..      /// ar
fd00: 65 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61  e the trigger na
fd10: 6d 65 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  me and the table
fd20: 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f   name...      //
fd30: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
fd40: 20 20 20 20 43 72 65 61 74 65 54 65 6d 70 54 72      CreateTempTr
fd50: 69 67 67 65 72 20 3d 20 35 2c 0d 0a 0d 0a 20 20  igger = 5,....  
fd60: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
fd70: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 74  >..      /// A t
fd80: 65 6d 70 6f 72 61 72 79 20 76 69 65 77 20 77 69  emporary view wi
fd90: 6c 6c 20 62 65 20 63 72 65 61 74 65 64 2e 20 20  ll be created.  
fda0: 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65 63 69  The action-speci
fdb0: 66 69 63 20 61 72 67 75 6d 65 6e 74 73 20 61 72  fic arguments ar
fdc0: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  e..      /// the
fdd0: 20 76 69 65 77 20 6e 61 6d 65 20 61 6e 64 20 61   view name and a
fde0: 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20 20   null value...  
fdf0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
fe00: 79 3e 0d 0a 20 20 20 20 20 20 43 72 65 61 74 65  y>..      Create
fe10: 54 65 6d 70 56 69 65 77 20 3d 20 36 2c 0d 0a 0d  TempView = 6,...
fe20: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
fe30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
fe40: 41 20 74 72 69 67 67 65 72 20 77 69 6c 6c 20 62  A trigger will b
fe50: 65 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  e created.  The 
fe60: 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  action-specific 
fe70: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68  arguments are th
fe80: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 72 69  e..      /// tri
fe90: 67 67 65 72 20 6e 61 6d 65 20 61 6e 64 20 74 68  gger name and th
fea0: 65 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20  e table name... 
feb0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
fec0: 72 79 3e 0d 0a 20 20 20 20 20 20 43 72 65 61 74  ry>..      Creat
fed0: 65 54 72 69 67 67 65 72 20 3d 20 37 2c 0d 0a 0d  eTrigger = 7,...
fee0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
fef0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
ff00: 41 20 76 69 65 77 20 77 69 6c 6c 20 62 65 20 63  A view will be c
ff10: 72 65 61 74 65 64 2e 20 20 54 68 65 20 61 63 74  reated.  The act
ff20: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67  ion-specific arg
ff30: 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 76  uments are the v
ff40: 69 65 77 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6e  iew..      /// n
ff50: 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76  ame and a null v
ff60: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  alue...      ///
ff70: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
ff80: 20 20 20 43 72 65 61 74 65 56 69 65 77 20 3d 20     CreateView = 
ff90: 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  8,....      /// 
ffa0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
ffb0: 20 2f 2f 2f 20 41 20 44 45 4c 45 54 45 20 73 74   /// A DELETE st
ffc0: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20  atement will be 
ffd0: 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 61  executed.  The a
ffe0: 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61  ction-specific a
fff0: 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20  rguments..      
10000 2f 2f 2f 20 61 72 65 20 74 68 65 20 74 61 62 6c  /// are the tabl
10010 65 20 6e 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c  e name and a nul
10020 6c 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  l value...      
10030 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10040 20 20 20 20 20 20 44 65 6c 65 74 65 20 3d 20 39        Delete = 9
10050 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
10060 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10070 2f 2f 2f 20 41 6e 20 69 6e 64 65 78 20 77 69 6c  /// An index wil
10080 6c 20 62 65 20 64 72 6f 70 70 65 64 2e 20 20 54  l be dropped.  T
10090 68 65 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66  he action-specif
100a0 69 63 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ic arguments are
100b0 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
100c0 69 6e 64 65 78 20 6e 61 6d 65 20 61 6e 64 20 74  index name and t
100d0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a  he table name...
100e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
100f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 44 72 6f 70  ary>..      Drop
10100 49 6e 64 65 78 20 3d 20 31 30 2c 0d 0a 0d 0a 20  Index = 10,.... 
10110 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
10120 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  y>..      /// A 
10130 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 64 72  table will be dr
10140 6f 70 70 65 64 2e 20 20 54 68 65 20 61 63 74 69  opped.  The acti
10150 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67 75  on-specific argu
10160 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 74 61  ments are the ta
10170 62 6c 65 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  bles..      /// 
10180 6e 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c 20  name and a null 
10190 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f  value...      //
101a0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
101b0 20 20 20 20 44 72 6f 70 54 61 62 6c 65 20 3d 20      DropTable = 
101c0 31 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  11,....      ///
101d0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
101e0 20 20 2f 2f 2f 20 41 20 74 65 6d 70 6f 72 61 72    /// A temporar
101f0 79 20 69 6e 64 65 78 20 77 69 6c 6c 20 62 65 20  y index will be 
10200 64 72 6f 70 70 65 64 2e 20 20 54 68 65 20 61 63  dropped.  The ac
10210 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72  tion-specific ar
10220 67 75 6d 65 6e 74 73 20 61 72 65 0d 0a 20 20 20  guments are..   
10230 20 20 20 2f 2f 2f 20 74 68 65 20 69 6e 64 65 78     /// the index
10240 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 74 61   name and the ta
10250 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ble name...     
10260 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10270 0a 20 20 20 20 20 20 44 72 6f 70 54 65 6d 70 49  .      DropTempI
10280 6e 64 65 78 20 3d 20 31 32 2c 0d 0a 0d 0a 20 20  ndex = 12,....  
10290 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
102a0 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 74  >..      /// A t
102b0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 77  emporary table w
102c0 69 6c 6c 20 62 65 20 64 72 6f 70 70 65 64 2e 20  ill be dropped. 
102d0 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65 63   The action-spec
102e0 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73 20 61  ific arguments a
102f0 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68  re..      /// th
10300 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64  e table name and
10310 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a   a null value...
10320 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
10330 61 72 79 3e 0d 0a 20 20 20 20 20 20 44 72 6f 70  ary>..      Drop
10340 54 65 6d 70 54 61 62 6c 65 20 3d 20 31 33 2c 0d  TempTable = 13,.
10350 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
10360 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
10370 2f 20 41 20 74 65 6d 70 6f 72 61 72 79 20 74 72  / A temporary tr
10380 69 67 67 65 72 20 77 69 6c 6c 20 62 65 20 64 72  igger will be dr
10390 6f 70 70 65 64 2e 20 20 54 68 65 20 61 63 74 69  opped.  The acti
103a0 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67 75  on-specific argu
103b0 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20 2f 2f 2f  ments..      ///
103c0 20 61 72 65 20 74 68 65 20 74 72 69 67 67 65 72   are the trigger
103d0 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 74 61   name and the ta
103e0 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ble name...     
103f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10400 0a 20 20 20 20 20 20 44 72 6f 70 54 65 6d 70 54  .      DropTempT
10410 72 69 67 67 65 72 20 3d 20 31 34 2c 0d 0a 0d 0a  rigger = 14,....
10420 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
10430 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41  ry>..      /// A
10440 20 74 65 6d 70 6f 72 61 72 79 20 76 69 65 77 20   temporary view 
10450 77 69 6c 6c 20 62 65 20 64 72 6f 70 70 65 64 2e  will be dropped.
10460 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65    The action-spe
10470 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73 20  cific arguments 
10480 61 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74  are..      /// t
10490 68 65 20 76 69 65 77 20 6e 61 6d 65 20 61 6e 64  he view name and
104a0 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a   a null value...
104b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
104c0 61 72 79 3e 0d 0a 20 20 20 20 20 20 44 72 6f 70  ary>..      Drop
104d0 54 65 6d 70 56 69 65 77 20 3d 20 31 35 2c 0d 0a  TempView = 15,..
104e0 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
104f0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
10500 20 41 20 74 72 69 67 67 65 72 20 77 69 6c 6c 20   A trigger will 
10510 62 65 20 64 72 6f 70 70 65 64 2e 20 20 54 68 65  be dropped.  The
10520 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63   action-specific
10530 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
10540 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 72  he..      /// tr
10550 69 67 67 65 72 20 6e 61 6d 65 20 61 6e 64 20 74  igger name and t
10560 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a  he table name...
10570 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
10580 61 72 79 3e 0d 0a 20 20 20 20 20 20 44 72 6f 70  ary>..      Drop
10590 54 72 69 67 67 65 72 20 3d 20 31 36 2c 0d 0a 0d  Trigger = 16,...
105a0 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
105b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
105c0 41 20 76 69 65 77 20 77 69 6c 6c 20 62 65 20 64  A view will be d
105d0 72 6f 70 70 65 64 2e 20 20 54 68 65 20 61 63 74  ropped.  The act
105e0 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72 67  ion-specific arg
105f0 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 76  uments are the v
10600 69 65 77 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6e  iew..      /// n
10610 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76  ame and a null v
10620 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  alue...      ///
10630 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10640 20 20 20 44 72 6f 70 56 69 65 77 20 3d 20 31 37     DropView = 17
10650 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
10660 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10670 2f 2f 2f 20 41 6e 20 49 4e 53 45 52 54 20 73 74  /// An INSERT st
10680 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20  atement will be 
10690 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 61  executed.  The a
106a0 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61  ction-specific a
106b0 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20  rguments..      
106c0 2f 2f 2f 20 61 72 65 20 74 68 65 20 74 61 62 6c  /// are the tabl
106d0 65 20 6e 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c  e name and a nul
106e0 6c 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  l value...      
106f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10700 20 20 20 20 20 20 49 6e 73 65 72 74 20 3d 20 31        Insert = 1
10710 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  8,....      /// 
10720 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
10730 20 2f 2f 2f 20 41 20 50 52 41 47 4d 41 20 73 74   /// A PRAGMA st
10740 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20  atement will be 
10750 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 61  executed.  The a
10760 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61  ction-specific a
10770 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20  rguments..      
10780 2f 2f 2f 20 61 72 65 20 74 68 65 20 6e 61 6d 65  /// are the name
10790 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 61   of the PRAGMA a
107a0 6e 64 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  nd the new value
107b0 20 6f 72 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65   or a null value
107c0 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
107d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 50  ummary>..      P
107e0 72 61 67 6d 61 20 3d 20 31 39 2c 0d 0a 0d 0a 20  ragma = 19,.... 
107f0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
10800 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  y>..      /// A 
10810 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 77 69 6c  table column wil
10820 6c 20 62 65 20 72 65 61 64 2e 20 20 54 68 65 20  l be read.  The 
10830 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  action-specific 
10840 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68  arguments are th
10850 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 61 62  e..      /// tab
10860 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  le name and the 
10870 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0d 0a 20 20  column name...  
10880 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10890 79 3e 0d 0a 20 20 20 20 20 20 52 65 61 64 20 3d  y>..      Read =
108a0 20 32 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f   20,....      //
108b0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
108c0 20 20 20 2f 2f 2f 20 41 20 53 45 4c 45 43 54 20     /// A SELECT 
108d0 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
108e0 65 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65  e executed.  The
108f0 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63   action-specific
10900 20 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20   arguments..    
10910 20 20 2f 2f 2f 20 61 72 65 20 62 6f 74 68 20 6e    /// are both n
10920 75 6c 6c 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  ull values...   
10930 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10940 3e 0d 0a 20 20 20 20 20 20 53 65 6c 65 63 74 20  >..      Select 
10950 3d 20 32 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  = 21,....      /
10960 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10970 20 20 20 20 2f 2f 2f 20 41 20 74 72 61 6e 73 61      /// A transa
10980 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 73 74  ction will be st
10990 61 72 74 65 64 2c 20 63 6f 6d 6d 69 74 74 65 64  arted, committed
109a0 2c 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b  , or rolled back
109b0 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 2f 2f  .  The..      //
109c0 2f 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69  / action-specifi
109d0 63 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  c arguments are 
109e0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
109f0 6f 70 65 72 61 74 69 6f 6e 20 28 42 45 47 49 4e  operation (BEGIN
10a00 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 43 4f 4d  ,..      /// COM
10a10 4d 49 54 2c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  MIT, or ROLLBACK
10a20 29 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76 61 6c  ) and a null val
10a30 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ue...      /// <
10a40 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
10a50 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 32   Transaction = 2
10a60 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  2,....      /// 
10a70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
10a80 20 2f 2f 2f 20 41 6e 20 55 50 44 41 54 45 20 73   /// An UPDATE s
10a90 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65  tatement will be
10aa0 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 65 20   executed.  The 
10ab0 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  action-specific 
10ac0 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20  arguments..     
10ad0 20 2f 2f 2f 20 61 72 65 20 74 68 65 20 74 61 62   /// are the tab
10ae0 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  le name and the 
10af0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0d 0a 20 20  column name...  
10b00 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10b10 79 3e 0d 0a 20 20 20 20 20 20 55 70 64 61 74 65  y>..      Update
10b20 20 3d 20 32 33 2c 0d 0a 0d 0a 20 20 20 20 20 20   = 23,....      
10b30 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10b40 20 20 20 20 20 2f 2f 2f 20 41 20 64 61 74 61 62       /// A datab
10b50 61 73 65 20 77 69 6c 6c 20 62 65 20 61 74 74 61  ase will be atta
10b60 63 68 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e  ched to the conn
10b70 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 61 63 74  ection.  The act
10b80 69 6f 6e 2d 73 70 65 63 69 66 69 63 0d 0a 20 20  ion-specific..  
10b90 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74      /// argument
10ba0 73 20 61 72 65 20 74 68 65 20 64 61 74 61 62 61  s are the databa
10bb0 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64  se file name and
10bc0 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a   a null value...
10bd0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
10be0 61 72 79 3e 0d 0a 20 20 20 20 20 20 41 74 74 61  ary>..      Atta
10bf0 63 68 20 3d 20 32 34 2c 0d 0a 0d 0a 20 20 20 20  ch = 24,....    
10c00 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10c10 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 64 61 74  .      /// A dat
10c20 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 64 65  abase will be de
10c30 74 61 63 68 65 64 20 66 72 6f 6d 20 74 68 65 20  tached from the 
10c40 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65  connection.  The
10c50 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63   action-specific
10c60 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75  ..      /// argu
10c70 6d 65 6e 74 73 20 61 72 65 20 74 68 65 20 64 61  ments are the da
10c80 74 61 62 61 73 65 20 6e 61 6d 65 20 61 6e 64 20  tabase name and 
10c90 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e 0d 0a 20  a null value... 
10ca0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
10cb0 72 79 3e 0d 0a 20 20 20 20 20 20 44 65 74 61 63  ry>..      Detac
10cc0 68 20 3d 20 32 35 2c 0d 0a 0d 0a 20 20 20 20 20  h = 25,....     
10cd0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
10ce0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 63        /// The sc
10cf0 68 65 6d 61 20 6f 66 20 61 20 74 61 62 6c 65 20  hema of a table 
10d00 77 69 6c 6c 20 62 65 20 61 6c 74 65 72 65 64 2e  will be altered.
10d10 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70 65    The action-spe
10d20 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73 0d  cific arguments.
10d30 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72 65 20 74  .      /// are t
10d40 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
10d50 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 6e   and the table n
10d60 61 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ame...      /// 
10d70 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10d80 20 20 41 6c 74 65 72 54 61 62 6c 65 20 3d 20 32    AlterTable = 2
10d90 36 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  6,....      /// 
10da0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
10db0 20 2f 2f 2f 20 41 6e 20 69 6e 64 65 78 20 77 69   /// An index wi
10dc0 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 61 6e  ll be deleted an
10dd0 64 20 74 68 65 6e 20 72 65 63 72 65 61 74 65 64  d then recreated
10de0 2e 20 20 54 68 65 20 61 63 74 69 6f 6e 2d 73 70  .  The action-sp
10df0 65 63 69 66 69 63 0d 0a 20 20 20 20 20 20 2f 2f  ecific..      //
10e00 2f 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  / arguments are 
10e10 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 20 61  the index name a
10e20 6e 64 20 61 20 6e 75 6c 6c 20 76 61 6c 75 65 2e  nd a null value.
10e30 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
10e40 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 52 65  mmary>..      Re
10e50 69 6e 64 65 78 20 3d 20 32 37 2c 0d 0a 0d 0a 20  index = 27,.... 
10e60 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
10e70 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  y>..      /// A 
10e80 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 61 6e  table will be an
10e90 61 6c 79 7a 65 64 20 74 6f 20 67 61 74 68 65 72  alyzed to gather
10ea0 73 20 73 74 61 74 69 73 74 69 63 73 20 61 62 6f  s statistics abo
10eb0 75 74 20 69 74 2e 20 20 54 68 65 0d 0a 20 20 20  ut it.  The..   
10ec0 20 20 20 2f 2f 2f 20 61 63 74 69 6f 6e 2d 73 70     /// action-sp
10ed0 65 63 69 66 69 63 20 61 72 67 75 6d 65 6e 74 73  ecific arguments
10ee0 20 61 72 65 20 74 68 65 20 74 61 62 6c 65 20 6e   are the table n
10ef0 61 6d 65 20 61 6e 64 20 61 20 6e 75 6c 6c 20 76  ame and a null v
10f00 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  alue...      ///
10f10 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10f20 20 20 20 41 6e 61 6c 79 7a 65 20 3d 20 32 38 2c     Analyze = 28,
10f30 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
10f40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
10f50 2f 2f 20 41 20 76 69 72 74 75 61 6c 20 74 61 62  // A virtual tab
10f60 6c 65 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74  le will be creat
10f70 65 64 2e 20 20 54 68 65 20 61 63 74 69 6f 6e 2d  ed.  The action-
10f80 73 70 65 63 69 66 69 63 20 61 72 67 75 6d 65 6e  specific argumen
10f90 74 73 20 61 72 65 0d 0a 20 20 20 20 20 20 2f 2f  ts are..      //
10fa0 2f 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  / the table name
10fb0 20 61 6e 64 20 74 68 65 20 6d 6f 64 75 6c 65 20   and the module 
10fc0 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  name...      ///
10fd0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10fe0 20 20 20 43 72 65 61 74 65 56 74 61 62 6c 65 20     CreateVtable 
10ff0 3d 20 32 39 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  = 29,....      /
11000 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11010 20 20 20 20 2f 2f 2f 20 41 20 76 69 72 74 75 61      /// A virtua
11020 6c 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  l table will be 
11030 64 72 6f 70 70 65 64 2e 20 20 54 68 65 20 61 63  dropped.  The ac
11040 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61 72  tion-specific ar
11050 67 75 6d 65 6e 74 73 20 61 72 65 0d 0a 20 20 20  guments are..   
11060 20 20 20 2f 2f 2f 20 74 68 65 20 74 61 62 6c 65     /// the table
11070 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 6d 6f   name and the mo
11080 64 75 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20  dule name...    
11090 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
110a0 0d 0a 20 20 20 20 20 20 44 72 6f 70 56 74 61 62  ..      DropVtab
110b0 6c 65 20 3d 20 33 30 2c 0d 0a 0d 0a 20 20 20 20  le = 30,....    
110c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
110d0 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 53 51 4c  .      /// A SQL
110e0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 62   function will b
110f0 65 20 63 61 6c 6c 65 64 2e 20 20 54 68 65 20 61  e called.  The a
11100 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 61  ction-specific a
11110 72 67 75 6d 65 6e 74 73 20 61 72 65 20 61 0d 0a  rguments are a..
11120 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6c 6c 20 76        /// null v
11130 61 6c 75 65 20 61 6e 64 20 74 68 65 20 66 75 6e  alue and the fun
11140 63 74 69 6f 6e 20 6e 61 6d 65 2e 0d 0a 20 20 20  ction name...   
11150 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
11160 3e 0d 0a 20 20 20 20 20 20 46 75 6e 63 74 69 6f  >..      Functio
11170 6e 20 3d 20 33 31 2c 0d 0a 0d 0a 20 20 20 20 20  n = 31,....     
11180 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
11190 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 61 76 65        /// A save
111a0 70 6f 69 6e 74 20 77 69 6c 6c 20 62 65 20 63 72  point will be cr
111b0 65 61 74 65 64 2c 20 72 65 6c 65 61 73 65 64 2c  eated, released,
111c0 20 6f 72 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   or rolled back.
111d0 20 20 54 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f    The..      ///
111e0 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69 63   action-specific
111f0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
11200 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f  he name of the o
11210 70 65 72 61 74 69 6f 6e 20 28 42 45 47 49 4e 2c  peration (BEGIN,
11220 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 52 45 4c 45  ..      /// RELE
11230 41 53 45 2c 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  ASE, or ROLLBACK
11240 29 20 61 6e 64 20 74 68 65 20 73 61 76 65 70 6f  ) and the savepo
11250 69 6e 74 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  int name...     
11260 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
11270 0a 20 20 20 20 20 20 53 61 76 65 70 6f 69 6e 74  .      Savepoint
11280 20 3d 20 33 32 2c 0d 0a 0d 0a 20 20 20 20 20 20   = 32,....      
11290 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
112a0 20 20 20 20 20 2f 2f 2f 20 41 20 72 65 63 75 72       /// A recur
112b0 73 69 76 65 20 71 75 65 72 79 20 77 69 6c 6c 20  sive query will 
112c0 62 65 20 65 78 65 63 75 74 65 64 2e 20 20 54 68  be executed.  Th
112d0 65 20 61 63 74 69 6f 6e 2d 73 70 65 63 69 66 69  e action-specifi
112e0 63 20 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20  c arguments..   
112f0 20 20 20 2f 2f 2f 20 61 72 65 20 74 77 6f 20 6e     /// are two n
11300 75 6c 6c 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  ull values...   
11310 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
11320 3e 0d 0a 20 20 20 20 20 20 52 65 63 75 72 73 69  >..      Recursi
11330 76 65 20 3d 20 33 33 0d 0a 20 20 7d 0d 0a 0d 0a  ve = 33..  }....
11340 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
11350 0a 20 20 2f 2f 2f 20 54 68 65 20 72 65 74 75 72  .  /// The retur
11360 6e 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 63  n code for the c
11370 75 72 72 65 6e 74 20 63 61 6c 6c 20 69 6e 74 6f  urrent call into
11380 20 74 68 65 20 61 75 74 68 6f 72 69 7a 65 72 2e   the authorizer.
11390 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
113a0 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75  y>..  public enu
113b0 6d 20 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a  m SQLiteAuthoriz
113c0 65 72 52 65 74 75 72 6e 43 6f 64 65 0d 0a 20 20  erReturnCode..  
113d0 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  {..      /// <su
113e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
113f0 2f 20 54 68 65 20 61 63 74 69 6f 6e 20 77 69 6c  / The action wil
11400 6c 20 62 65 20 61 6c 6c 6f 77 65 64 2e 0d 0a 20  l be allowed... 
11410 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
11420 72 79 3e 0d 0a 20 20 20 20 20 20 4f 6b 20 3d 20  ry>..      Ok = 
11430 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  0,....      /// 
11440 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
11450 20 2f 2f 2f 20 54 68 65 20 6f 76 65 72 61 6c 6c   /// The overall
11460 20 61 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20   action will be 
11470 64 69 73 61 6c 6c 6f 77 65 64 20 61 6e 64 20 61  disallowed and a
11480 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
11490 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 2f  will be..      /
114a0 2f 2f 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d  // returned from
114b0 20 74 68 65 20 71 75 65 72 79 20 70 72 65 70 61   the query prepa
114c0 72 61 74 69 6f 6e 20 6d 65 74 68 6f 64 2e 0d 0a  ration method...
114d0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
114e0 61 72 79 3e 0d 0a 20 20 20 20 20 20 44 65 6e 79  ary>..      Deny
114f0 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 1,....      /
11500 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11510 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 70 65 63      /// The spec
11520 69 66 69 63 20 61 63 74 69 6f 6e 20 77 69 6c 6c  ific action will
11530 20 62 65 20 64 69 73 61 6c 6c 6f 77 65 64 3b 20   be disallowed; 
11540 68 6f 77 65 76 65 72 2c 20 74 68 65 20 6f 76 65  however, the ove
11550 72 61 6c 6c 20 61 63 74 69 6f 6e 0d 0a 20 20 20  rall action..   
11560 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 63 6f 6e 74     /// will cont
11570 69 6e 75 65 2e 20 20 54 68 65 20 65 78 61 63 74  inue.  The exact
11580 20 65 66 66 65 63 74 73 20 6f 66 20 74 68 69 73   effects of this
11590 20 72 65 74 75 72 6e 20 63 6f 64 65 20 76 61 72   return code var
115a0 79 20 64 65 70 65 6e 64 69 6e 67 0d 0a 20 20 20  y depending..   
115b0 20 20 20 2f 2f 2f 20 6f 6e 20 74 68 65 20 73 70     /// on the sp
115c0 65 63 69 66 69 63 20 61 63 74 69 6f 6e 2c 20 70  ecific action, p
115d0 6c 65 61 73 65 20 72 65 66 65 72 20 74 6f 20 74  lease refer to t
115e0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
115f0 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 2f 2f  ibrary..      //
11600 2f 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  / documentation 
11610 66 6f 72 20 66 75 74 68 65 72 20 64 65 74 61 69  for futher detai
11620 6c 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ls...      /// <
11630 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
11640 20 49 67 6e 6f 72 65 20 3d 20 32 0d 0a 20 20 7d   Ignore = 2..  }
11650 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ....  /// <summa
11660 72 79 3e 0d 0a 20 20 2f 2f 2f 20 43 6c 61 73 73  ry>..  /// Class
11670 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
11680 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
11690 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 61 20  e datatype of a 
116a0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 72 65 73 75  column in a resu
116b0 6c 74 73 65 74 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  ltset..  /// </s
116c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72  ummary>..  inter
116d0 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73  nal sealed class
116e0 20 53 51 4c 69 74 65 54 79 70 65 0d 0a 20 20 7b   SQLiteType..  {
116f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
11700 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
11710 20 44 62 54 79 70 65 20 6f 66 20 74 68 65 20 63   DbType of the c
11720 6f 6c 75 6d 6e 2c 20 6f 72 20 44 62 54 79 70 65  olumn, or DbType
11730 2e 4f 62 6a 65 63 74 20 69 66 20 69 74 20 63 61  .Object if it ca
11740 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e  nnot be determin
11750 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ed..    /// </su
11760 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
11770 72 6e 61 6c 20 44 62 54 79 70 65 20 54 79 70 65  rnal DbType Type
11780 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
11790 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
117a0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 61 20  e affinity of a 
117b0 63 6f 6c 75 6d 6e 2c 20 75 73 65 64 20 66 6f 72  column, used for
117c0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 72 20   expressions or 
117d0 77 68 65 6e 20 54 79 70 65 20 69 73 20 44 62 54  when Type is DbT
117e0 79 70 65 2e 4f 62 6a 65 63 74 0d 0a 20 20 20 20  ype.Object..    
117f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
11800 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 54 79 70      internal Typ
11810 65 41 66 66 69 6e 69 74 79 20 41 66 66 69 6e 69  eAffinity Affini
11820 74 79 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f  ty;..  }....  //
11830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11880 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64   internal sealed
11890 20 63 6c 61 73 73 20 53 51 4c 69 74 65 44 62 54   class SQLiteDbT
118a0 79 70 65 4d 61 70 0d 0a 20 20 20 20 20 20 3a 20  ypeMap..      : 
118b0 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
118c0 67 2c 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d  g, SQLiteDbTypeM
118d0 61 70 70 69 6e 67 3e 0d 0a 20 20 7b 0d 0a 20 20  apping>..  {..  
118e0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
118f0 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ate Data..      
11900 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61  private Dictiona
11910 72 79 3c 44 62 54 79 70 65 2c 20 53 51 4c 69 74  ry<DbType, SQLit
11920 65 44 62 54 79 70 65 4d 61 70 70 69 6e 67 3e 20  eDbTypeMapping> 
11930 72 65 76 65 72 73 65 3b 0d 0a 20 20 20 20 20 20  reverse;..      
11940 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
11950 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
11960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
119a0 0a 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50  .      #region P
119b0 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
119c0 72 73 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  rs..      public
119d0 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
119e0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20  ()..          : 
119f0 62 61 73 65 28 6e 65 77 20 54 79 70 65 4e 61 6d  base(new TypeNam
11a00 65 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 28  eStringComparer(
11a10 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
11a20 20 20 20 20 20 20 20 72 65 76 65 72 73 65 20 3d         reverse =
11a30 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
11a40 44 62 54 79 70 65 2c 20 53 51 4c 69 74 65 44 62  DbType, SQLiteDb
11a50 54 79 70 65 4d 61 70 70 69 6e 67 3e 28 29 3b 0d  TypeMapping>();.
11a60 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
11a70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11ac0 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
11ad0 74 65 44 62 54 79 70 65 4d 61 70 28 0d 0a 20 20  teDbTypeMap(..  
11ae0 20 20 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61          IEnumera
11af0 62 6c 65 3c 53 51 4c 69 74 65 44 62 54 79 70 65  ble<SQLiteDbType
11b00 4d 61 70 70 69 6e 67 3e 20 63 6f 6c 6c 65 63 74  Mapping> collect
11b10 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 29  ion..          )
11b20 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 74 68  ..          : th
11b30 69 73 28 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  is()..      {.. 
11b40 20 20 20 20 20 20 20 20 20 41 64 64 28 63 6f 6c           Add(col
11b50 6c 65 63 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  lection);..     
11b60 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65   }..      #endre
11b70 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  gion....      //
11b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bc0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11bd0 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e   #region System.
11be0 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65  Collections.Gene
11bf0 72 69 63 2e 44 69 63 74 69 6f 6e 61 72 79 20 22  ric.Dictionary "
11c00 4f 76 65 72 72 69 64 65 73 22 0d 0a 20 20 20 20  Overrides"..    
11c10 20 20 70 75 62 6c 69 63 20 6e 65 77 20 69 6e 74    public new int
11c20 20 43 6c 65 61 72 28 29 0d 0a 20 20 20 20 20 20   Clear()..      
11c30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  {..          int
11c40 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a   result = 0;....
11c50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
11c60 76 65 72 73 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  verse != null)..
11c70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11c80 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
11c90 74 20 2b 3d 20 72 65 76 65 72 73 65 2e 43 6f 75  t += reverse.Cou
11ca0 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt;..           
11cb0 20 20 20 72 65 76 65 72 73 65 2e 43 6c 65 61 72     reverse.Clear
11cc0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
11cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
11ce0 73 75 6c 74 20 2b 3d 20 62 61 73 65 2e 43 6f 75  sult += base.Cou
11cf0 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  nt;..          b
11d00 61 73 65 2e 43 6c 65 61 72 28 29 3b 0d 0a 0d 0a  ase.Clear();....
11d10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11d20 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
11d30 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65 67  }..      #endreg
11d40 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  ion....      ///
11d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
11da0 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 44 62  #region SQLiteDb
11db0 54 79 70 65 4d 61 70 70 69 6e 67 20 48 65 6c 70  TypeMapping Help
11dc0 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
11dd0 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 41 64    public void Ad
11de0 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 49 45  d(..          IE
11df0 6e 75 6d 65 72 61 62 6c 65 3c 53 51 4c 69 74 65  numerable<SQLite
11e00 44 62 54 79 70 65 4d 61 70 70 69 6e 67 3e 20 63  DbTypeMapping> c
11e10 6f 6c 6c 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20  ollection..     
11e20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b 0d       )..      {.
11e30 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63  .          if (c
11e40 6f 6c 6c 65 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c  ollection == nul
11e50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11e60 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
11e70 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
11e80 6e 28 22 63 6f 6c 6c 65 63 74 69 6f 6e 22 29 3b  n("collection");
11e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
11ea0 72 65 61 63 68 20 28 53 51 4c 69 74 65 44 62 54  reach (SQLiteDbT
11eb0 79 70 65 4d 61 70 70 69 6e 67 20 69 74 65 6d 20  ypeMapping item 
11ec0 69 6e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a  in collection)..
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
11ee0 64 28 69 74 65 6d 29 3b 0d 0a 20 20 20 20 20 20  d(item);..      
11ef0 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
11f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75  ////....      pu
11f50 62 6c 69 63 20 76 6f 69 64 20 41 64 64 28 53 51  blic void Add(SQ
11f60 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
11f70 67 20 69 74 65 6d 29 0d 0a 20 20 20 20 20 20 7b  g item)..      {
11f80 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
11f90 69 74 65 6d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  item == null).. 
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
11fb0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
11fc0 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 69 74  ullException("it
11fd0 65 6d 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  em");....       
11fe0 20 20 20 69 66 20 28 69 74 65 6d 2e 74 79 70 65     if (item.type
11ff0 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
12010 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
12020 78 63 65 70 74 69 6f 6e 28 22 69 74 65 6d 20 74  xception("item t
12030 79 70 65 20 6e 61 6d 65 20 63 61 6e 6e 6f 74 20  ype name cannot 
12040 62 65 20 6e 75 6c 6c 22 29 3b 0d 0a 0d 0a 20 20  be null");....  
12050 20 20 20 20 20 20 20 20 62 61 73 65 2e 41 64 64          base.Add
12060 28 69 74 65 6d 2e 74 79 70 65 4e 61 6d 65 2c 20  (item.typeName, 
12070 69 74 65 6d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  item);....      
12080 20 20 20 20 69 66 20 28 69 74 65 6d 2e 70 72 69      if (item.pri
12090 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20  mary)..         
120a0 20 20 20 20 20 72 65 76 65 72 73 65 2e 41 64 64       reverse.Add
120b0 28 69 74 65 6d 2e 64 61 74 61 54 79 70 65 2c 20  (item.dataType, 
120c0 69 74 65 6d 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  item);..      }.
120d0 0a 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f  .      #endregio
120e0 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  n....      /////
120f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12130 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23 72  ////....      #r
12140 65 67 69 6f 6e 20 44 62 54 79 70 65 20 48 65 6c  egion DbType Hel
12150 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
12160 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43     public bool C
12170 6f 6e 74 61 69 6e 73 4b 65 79 28 44 62 54 79 70  ontainsKey(DbTyp
12180 65 20 6b 65 79 29 0d 0a 20 20 20 20 20 20 7b 0d  e key)..      {.
12190 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72  .          if (r
121a0 65 76 65 72 73 65 20 3d 3d 20 6e 75 6c 6c 29 0d  everse == null).
121b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
121c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
121d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
121e0 20 72 65 76 65 72 73 65 2e 43 6f 6e 74 61 69 6e   reverse.Contain
121f0 73 4b 65 79 28 6b 65 79 29 3b 0d 0a 20 20 20 20  sKey(key);..    
12200 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f    }....      ///
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 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
12260 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 72 79 47  public bool TryG
12270 65 74 56 61 6c 75 65 28 44 62 54 79 70 65 20 6b  etValue(DbType k
12280 65 79 2c 20 6f 75 74 20 53 51 4c 69 74 65 44 62  ey, out SQLiteDb
12290 54 79 70 65 4d 61 70 70 69 6e 67 20 76 61 6c 75  TypeMapping valu
122a0 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  e)..      {..   
122b0 20 20 20 20 20 20 20 69 66 20 28 72 65 76 65 72         if (rever
122c0 73 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  se == null)..   
122d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
122e0 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20          value = 
122f0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
12300 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
12310 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e;..          }.
12320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
12330 75 72 6e 20 72 65 76 65 72 73 65 2e 54 72 79 47  urn reverse.TryG
12340 65 74 56 61 6c 75 65 28 6b 65 79 2c 20 6f 75 74  etValue(key, out
12350 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
12360 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
12370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
123b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75  ////....      pu
123c0 62 6c 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  blic bool Remove
123d0 28 44 62 54 79 70 65 20 6b 65 79 29 0d 0a 20 20  (DbType key)..  
123e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
123f0 20 69 66 20 28 72 65 76 65 72 73 65 20 3d 3d 20   if (reverse == 
12400 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
12410 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
12420 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
12430 72 65 74 75 72 6e 20 72 65 76 65 72 73 65 2e 52  return reverse.R
12440 65 6d 6f 76 65 28 6b 65 79 29 3b 0d 0a 20 20 20  emove(key);..   
12450 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64     }..      #end
12460 72 65 67 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a 20  region..  }.... 
12470 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
124a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
124b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
124c0 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61  ..  internal sea
124d0 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
124e0 44 62 54 79 70 65 4d 61 70 70 69 6e 67 0d 0a 20  DbTypeMapping.. 
124f0 20 7b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c   {..    internal
12500 20 53 51 4c 69 74 65 44 62 54 79 70 65 4d 61 70   SQLiteDbTypeMap
12510 70 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 73  ping(..        s
12520 74 72 69 6e 67 20 6e 65 77 54 79 70 65 4e 61 6d  tring newTypeNam
12530 65 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 54 79  e,..        DbTy
12540 70 65 20 6e 65 77 44 61 74 61 54 79 70 65 2c 0d  pe newDataType,.
12550 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 65  .        bool ne
12560 77 50 72 69 6d 61 72 79 0d 0a 20 20 20 20 20 20  wPrimary..      
12570 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
12580 20 20 74 79 70 65 4e 61 6d 65 20 3d 20 6e 65 77    typeName = new
12590 54 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  TypeName;..     
125a0 20 64 61 74 61 54 79 70 65 20 3d 20 6e 65 77 44   dataType = newD
125b0 61 74 61 54 79 70 65 3b 0d 0a 20 20 20 20 20 20  ataType;..      
125c0 70 72 69 6d 61 72 79 20 3d 20 6e 65 77 50 72 69  primary = newPri
125d0 6d 61 72 79 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  mary;..    }....
125e0 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72      internal str
125f0 69 6e 67 20 74 79 70 65 4e 61 6d 65 3b 0d 0a 20  ing typeName;.. 
12600 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 62 54 79     internal DbTy
12610 70 65 20 64 61 74 61 54 79 70 65 3b 0d 0a 20 20  pe dataType;..  
12620 20 20 69 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20    internal bool 
12630 70 72 69 6d 61 72 79 3b 0d 0a 20 20 7d 0d 0a 0d  primary;..  }...
12640 0a 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c  .  internal seal
12650 65 64 20 63 6c 61 73 73 20 54 79 70 65 4e 61 6d  ed class TypeNam
12660 65 53 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 20  eStringComparer 
12670 3a 20 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61  : IEqualityCompa
12680 72 65 72 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 7b  rer<string>..  {
12690 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45  ..    #region IE
126a0 71 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c  qualityComparer<
126b0 73 74 72 69 6e 67 3e 20 4d 65 6d 62 65 72 73 0d  string> Members.
126c0 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c  .    public bool
126d0 20 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20   Equals(..      
126e0 73 74 72 69 6e 67 20 6c 65 66 74 2c 0d 0a 20 20  string left,..  
126f0 20 20 20 20 73 74 72 69 6e 67 20 72 69 67 68 74      string right
12700 0d 0a 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b  ..      )..    {
12710 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ..      return S
12720 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 6c 65 66  tring.Equals(lef
12730 74 2c 20 72 69 67 68 74 2c 20 53 74 72 69 6e 67  t, right, String
12740 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
12750 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 3b 0d 0a  alIgnoreCase);..
12760 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
12770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
127a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
127b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
127c0 70 75 62 6c 69 63 20 69 6e 74 20 47 65 74 48 61  public int GetHa
127d0 73 68 43 6f 64 65 28 0d 0a 20 20 20 20 20 20 73  shCode(..      s
127e0 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20  tring value..   
127f0 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
12800 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 2f 2f 20     //..      // 
12810 4e 4f 54 45 3a 20 54 68 65 20 6f 6e 6c 79 20 74  NOTE: The only t
12820 68 69 6e 67 20 74 68 61 74 20 77 65 20 6d 75 73  hing that we mus
12830 74 20 67 75 61 72 61 6e 74 65 65 20 68 65 72 65  t guarantee here
12840 2c 20 61 63 63 6f 72 64 69 6e 67 0d 0a 20 20 20  , according..   
12850 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 74     //       to t
12860 68 65 20 4d 53 44 4e 20 64 6f 63 75 6d 65 6e 74  he MSDN document
12870 61 74 69 6f 6e 20 66 6f 72 20 49 45 71 75 61 6c  ation for IEqual
12880 69 74 79 43 6f 6d 70 61 72 65 72 2c 20 69 73 0d  ityComparer, is.
12890 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
128a0 74 68 61 74 20 66 6f 72 20 74 77 6f 20 67 69 76  that for two giv
128b0 65 6e 20 73 74 72 69 6e 67 73 2c 20 69 66 20 45  en strings, if E
128c0 71 75 61 6c 73 20 72 65 74 75 72 6e 20 74 72 75  quals return tru
128d0 65 20 74 68 65 6e 0d 0a 20 20 20 20 20 20 2f 2f  e then..      //
128e0 20 20 20 20 20 20 20 74 68 65 20 74 77 6f 20 73         the two s
128f0 74 72 69 6e 67 73 20 6d 75 73 74 20 68 61 73 68  trings must hash
12900 20 74 6f 20 74 68 65 20 73 61 6d 65 20 76 61 6c   to the same val
12910 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20  ue...      //.. 
12920 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 21       if (value !
12930 3d 20 6e 75 6c 6c 29 0d 0a 23 69 66 20 21 50 4c  = null)..#if !PL
12940 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
12950 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
12960 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 54 6f   return value.To
12970 4c 6f 77 65 72 49 6e 76 61 72 69 61 6e 74 28 29  LowerInvariant()
12980 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29 3b 0d  .GetHashCode();.
12990 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
129a0 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 54 6f 4c  return value.ToL
129b0 6f 77 65 72 28 29 2e 47 65 74 48 61 73 68 43 6f  ower().GetHashCo
129c0 64 65 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  de();..#endif.. 
129d0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
129e0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
129f0 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
12a00 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 20 20  on("value");..  
12a10 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
12a20 69 6f 6e 0d 0a 20 20 7d 0d 0a 7d 0d 0a           ion..  }..}..