System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact e3e7599248d4d4da5ff31931927fba5c40a90a09:


0000: ef bb bf 2f 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 2a 2a 2a 0a 20 2a 20  ************. * 
0040: 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61  ADO.NET 2.0 Data
0050: 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51   Provider for SQ
0060: 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58  Lite Version 3.X
0070: 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52  . * Written by R
0080: 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72  obert Simpson (r
0090: 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c  obert@blackcastl
00a0: 65 73 6f 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20  esoft.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 0a 20 2a 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: 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  /..namespace Sys
0130: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a  tem.Data.SQLite.
0140: 7b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  {.  using System
0150: 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ;.  using System
0160: 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f 70  .Runtime.Interop
0170: 53 65 72 76 69 63 65 73 3b 0a 20 20 75 73 69 6e  Services;.  usin
0180: 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74  g System.Collect
0190: 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0a 20 20  ions.Generic;.  
01a0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d  using System.Com
01b0: 70 6f 6e 65 6e 74 4d 6f 64 65 6c 3b 0a 20 20 75  ponentModel;.  u
01c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62  sing System.Glob
01d0: 61 6c 69 7a 61 74 69 6f 6e 3b 0a 0a 23 69 66 20  alization;..#if 
01e0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
01f0: 54 46 52 41 4d 45 57 4f 52 4b 20 0a 20 20 75 73  TFRAMEWORK .  us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f  ing System.Compo
0210: 6e 65 6e 74 4d 6f 64 65 6c 2e 44 65 73 69 67 6e  nentModel.Design
0220: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2f 2f 20  ;.#endif..  /// 
0230: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20  <summary>.  /// 
0240: 53 51 4c 69 74 65 20 68 61 73 20 76 65 72 79 20  SQLite has very 
0250: 6c 69 6d 69 74 65 64 20 74 79 70 65 73 2c 20 61  limited types, a
0260: 6e 64 20 69 73 20 69 6e 68 65 72 65 6e 74 6c 79  nd is inherently
0270: 20 74 65 78 74 2d 62 61 73 65 64 2e 20 20 54 68   text-based.  Th
0280: 65 20 66 69 72 73 74 20 35 20 74 79 70 65 73 20  e first 5 types 
0290: 62 65 6c 6f 77 20 72 65 70 72 65 73 65 6e 74 20  below represent 
02a0: 74 68 65 20 73 75 6d 20 6f 66 20 61 6c 6c 20 74  the sum of all t
02b0: 79 70 65 73 20 53 51 4c 69 74 65 0a 20 20 2f 2f  ypes SQLite.  //
02c0: 2f 20 75 6e 64 65 72 73 74 61 6e 64 73 2e 20 20  / understands.  
02d0: 54 68 65 20 44 61 74 65 54 69 6d 65 20 65 78 74  The DateTime ext
02e0: 65 6e 73 69 6f 6e 20 74 6f 20 74 68 65 20 73 70  ension to the sp
02f0: 65 63 20 69 73 20 66 6f 72 20 69 6e 74 65 72 6e  ec is for intern
0300: 61 6c 20 75 73 65 20 6f 6e 6c 79 2e 0a 20 20 2f  al use only..  /
0310: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0320: 70 75 62 6c 69 63 20 65 6e 75 6d 20 54 79 70 65  public enum Type
0330: 41 66 66 69 6e 69 74 79 0a 20 20 7b 0a 20 20 20  Affinity.  {.   
0340: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0350: 20 20 20 2f 2f 2f 20 4e 6f 74 20 75 73 65 64 0a     /// Not used.
0360: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0370: 79 3e 0a 20 20 20 20 55 6e 69 6e 69 74 69 61 6c  y>.    Uninitial
0380: 69 7a 65 64 20 3d 20 30 2c 0a 20 20 20 20 2f 2f  ized = 0,.    //
0390: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
03a0: 2f 2f 2f 20 41 6c 6c 20 69 6e 74 65 67 65 72 73  /// All integers
03b0: 20 69 6e 20 53 51 4c 69 74 65 20 64 65 66 61 75   in SQLite defau
03c0: 6c 74 20 74 6f 20 49 6e 74 36 34 0a 20 20 20 20  lt to Int64.    
03d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
03e0: 20 20 20 49 6e 74 36 34 20 3d 20 31 2c 0a 20 20     Int64 = 1,.  
03f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0400: 20 20 20 20 2f 2f 2f 20 41 6c 6c 20 66 6c 6f 61      /// All floa
0410: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
0420: 72 73 20 69 6e 20 53 51 4c 69 74 65 20 64 65 66  rs in SQLite def
0430: 61 75 6c 74 20 74 6f 20 64 6f 75 62 6c 65 0a 20  ault to double. 
0440: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0450: 3e 0a 20 20 20 20 44 6f 75 62 6c 65 20 3d 20 32  >.    Double = 2
0460: 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ,.    /// <summa
0470: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ry>.    /// The 
0480: 64 65 66 61 75 6c 74 20 64 61 74 61 20 74 79 70  default data typ
0490: 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73 20 74  e of SQLite is t
04a0: 65 78 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ext.    /// </su
04b0: 6d 6d 61 72 79 3e 0a 20 20 20 20 54 65 78 74 20  mmary>.    Text 
04c0: 3d 20 33 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  = 3,.    /// <su
04d0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54  mmary>.    /// T
04e0: 79 70 69 63 61 6c 6c 79 20 62 6c 6f 62 20 74 79  ypically blob ty
04f0: 70 65 73 20 61 72 65 20 6f 6e 6c 79 20 73 65 65  pes are only see
0500: 6e 20 77 68 65 6e 20 72 65 74 75 72 6e 65 64 20  n when returned 
0510: 66 72 6f 6d 20 61 20 66 75 6e 63 74 69 6f 6e 0a  from a function.
0520: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0530: 79 3e 0a 20 20 20 20 42 6c 6f 62 20 3d 20 34 2c  y>.    Blob = 4,
0540: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0550: 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e 75 6c 6c 20  y>.    /// Null 
0560: 74 79 70 65 73 20 63 61 6e 20 62 65 20 72 65 74  types can be ret
0570: 75 72 6e 65 64 20 66 72 6f 6d 20 66 75 6e 63 74  urned from funct
0580: 69 6f 6e 73 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ions.    /// </s
0590: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 4e 75 6c 6c  ummary>.    Null
05a0: 20 3d 20 35 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73   = 5,.    /// <s
05b0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
05c0: 55 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  Used internally 
05d0: 62 79 20 74 68 69 73 20 70 72 6f 76 69 64 65 72  by this provider
05e0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
05f0: 72 79 3e 0a 20 20 20 20 44 61 74 65 54 69 6d 65  ry>.    DateTime
0600: 20 3d 20 31 30 2c 0a 20 20 20 20 2f 2f 2f 20 3c   = 10,.    /// <
0610: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0620: 20 55 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   Used internally
0630: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0640: 72 79 3e 0a 20 20 20 20 4e 6f 6e 65 20 3d 20 32  ry>.    None = 2
0650: 35 36 2c 0a 20 20 7d 0a 0a 20 20 2f 2f 2f 20 3c  56,.  }..  /// <
0660: 73 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20 54  summary>.  /// T
0670: 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  his implementati
0680: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 66 6f 72  on of SQLite for
0690: 20 41 44 4f 2e 4e 45 54 20 63 61 6e 20 70 72 6f   ADO.NET can pro
06a0: 63 65 73 73 20 64 61 74 65 2f 74 69 6d 65 20 66  cess date/time f
06b0: 69 65 6c 64 73 20 69 6e 20 64 61 74 61 62 61 73  ields in databas
06c0: 65 73 20 69 6e 20 6f 6e 6c 79 20 6f 6e 65 20 6f  es in only one o
06d0: 66 20 74 77 6f 20 66 6f 72 6d 61 74 73 2e 20 20  f two formats.  
06e0: 54 69 63 6b 73 20 61 6e 64 20 49 53 4f 38 36 30  Ticks and ISO860
06f0: 31 2e 0a 20 20 2f 2f 2f 20 54 69 63 6b 73 20 69  1..  /// Ticks i
0700: 73 20 69 6e 68 65 72 65 6e 74 6c 79 20 6d 6f 72  s inherently mor
0710: 65 20 61 63 63 75 72 61 74 65 2c 20 62 75 74 20  e accurate, but 
0720: 6c 65 73 73 20 63 6f 6d 70 61 74 69 62 6c 65 20  less compatible 
0730: 77 69 74 68 20 33 72 64 20 70 61 72 74 79 20 74  with 3rd party t
0740: 6f 6f 6c 73 20 74 68 61 74 20 71 75 65 72 79 20  ools that query 
0750: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 61 6e  the database, an
0760: 64 20 72 65 6e 64 65 72 73 20 74 68 65 20 44 61  d renders the Da
0770: 74 65 54 69 6d 65 20 66 69 65 6c 64 0a 20 20 2f  teTime field.  /
0780: 2f 2f 20 75 6e 72 65 61 64 61 62 6c 65 20 77 69  // unreadable wi
0790: 74 68 6f 75 74 20 70 6f 73 74 2d 70 72 6f 63 65  thout post-proce
07a0: 73 73 69 6e 67 2e 0a 20 20 2f 2f 2f 20 49 53 4f  ssing..  /// ISO
07b0: 38 36 30 31 20 69 73 20 6d 6f 72 65 20 63 6f 6d  8601 is more com
07c0: 70 61 74 69 62 6c 65 2c 20 72 65 61 64 61 62 6c  patible, readabl
07d0: 65 2c 20 66 75 6c 6c 79 2d 70 72 6f 63 65 73 73  e, fully-process
07e0: 61 62 6c 65 2c 20 62 75 74 20 6c 65 73 73 20 61  able, but less a
07f0: 63 63 75 72 61 74 65 20 61 73 20 69 74 20 64 6f  ccurate as it do
0800: 65 73 6e 27 74 20 70 72 6f 76 69 64 65 20 74 69  esn't provide ti
0810: 6d 65 20 64 6f 77 6e 20 74 6f 20 66 72 61 63 74  me down to fract
0820: 69 6f 6e 73 20 6f 66 20 61 20 73 65 63 6f 6e 64  ions of a second
0830: 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0840: 79 3e 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  y>.  public enum
0850: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
0860: 74 73 0a 20 20 7b 0a 20 20 20 20 2f 2f 2f 20 3c  ts.  {.    /// <
0870: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0880: 20 55 73 69 6e 67 20 74 69 63 6b 73 20 69 73 20   Using ticks is 
0890: 6d 6f 72 65 20 61 63 63 75 72 61 74 65 20 62 75  more accurate bu
08a0: 74 20 6c 65 73 73 20 63 6f 6d 70 61 74 69 62 6c  t less compatibl
08b0: 65 20 77 69 74 68 20 6f 74 68 65 72 20 76 69 65  e with other vie
08c0: 77 65 72 73 20 61 6e 64 20 75 74 69 6c 69 74 69  wers and utiliti
08d0: 65 73 20 74 68 61 74 20 61 63 63 65 73 73 20 79  es that access y
08e0: 6f 75 72 20 64 61 74 61 62 61 73 65 2e 0a 20 20  our database..  
08f0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0900: 0a 20 20 20 20 54 69 63 6b 73 20 3d 20 30 2c 0a  .    Ticks = 0,.
0910: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0920: 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65  >.    /// The de
0930: 66 61 75 6c 74 20 66 6f 72 6d 61 74 20 66 6f 72  fault format for
0940: 20 74 68 69 73 20 70 72 6f 76 69 64 65 72 2e 20   this provider. 
0950: 20 4d 6f 72 65 20 63 6f 6d 70 61 74 69 62 6c 65   More compatible
0960: 20 77 69 74 68 20 53 51 4c 69 74 65 27 73 20 69   with SQLite's i
0970: 6e 74 65 6e 64 65 64 20 75 73 61 67 65 20 6f 66  ntended usage of
0980: 20 64 61 74 65 74 69 6d 65 73 2c 20 62 75 74 20   datetimes, but 
0990: 6f 76 65 72 61 6c 6c 20 6c 65 73 73 20 61 63 63  overall less acc
09a0: 75 72 61 74 65 20 74 68 61 6e 20 54 69 63 6b 73  urate than Ticks
09b0: 20 61 73 20 69 74 20 64 6f 65 73 6e 27 74 0a 20   as it doesn't. 
09c0: 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 6c 79 20     /// natively 
09d0: 73 75 70 70 6f 72 74 20 74 69 6d 65 73 20 64 6f  support times do
09e0: 77 6e 20 74 6f 20 66 72 61 63 74 69 6f 6e 73 20  wn to fractions 
09f0: 6f 66 20 61 20 73 65 63 6f 6e 64 2e 0a 20 20 20  of a second..   
0a00: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
0a10: 20 20 20 20 49 53 4f 38 36 30 31 20 3d 20 31 2c      ISO8601 = 1,
0a20: 0a 20 20 7d 0a 0a 20 20 2f 2f 2f 20 3c 73 75 6d  .  }..  /// <sum
0a30: 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20 53 74 72 75  mary>.  /// Stru
0a40: 63 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  ct used internal
0a50: 6c 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ly to determine 
0a60: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
0a70: 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 72 65  a column in a re
0a80: 73 75 6c 74 73 65 74 0a 20 20 2f 2f 2f 20 3c 2f  sultset.  /// </
0a90: 73 75 6d 6d 61 72 79 3e 0a 20 20 69 6e 74 65 72  summary>.  inter
0aa0: 6e 61 6c 20 73 74 72 75 63 74 20 53 51 4c 69 74  nal struct SQLit
0ab0: 65 54 79 70 65 0a 20 20 7b 0a 20 20 20 20 2f 2f  eType.  {.    //
0ac0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0ad0: 2f 2f 2f 20 54 68 65 20 44 62 54 79 70 65 20 6f  /// The DbType o
0ae0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 72  f the column, or
0af0: 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 20 69   DbType.Object i
0b00: 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64  f it cannot be d
0b10: 65 74 65 72 6d 69 6e 65 64 0a 20 20 20 20 2f 2f  etermined.    //
0b20: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
0b30: 20 69 6e 74 65 72 6e 61 6c 20 44 62 54 79 70 65   internal DbType
0b40: 20 54 79 70 65 3b 0a 20 20 20 20 2f 2f 2f 20 3c   Type;.    /// <
0b50: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0b60: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
0b70: 20 61 20 63 6f 6c 75 6d 6e 2c 20 75 73 65 64 20   a column, used 
0b80: 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
0b90: 6f 72 20 77 68 65 6e 20 54 79 70 65 20 69 73 20  or when Type is 
0ba0: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 0a 20 20  DbType.Object.  
0bb0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0bc0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 54 79  .    internal Ty
0bd0: 70 65 41 66 66 69 6e 69 74 79 20 41 66 66 69 6e  peAffinity Affin
0be0: 69 74 79 3b 0a 20 20 7d 0a 0a 20 20 69 6e 74 65  ity;.  }..  inte
0bf0: 72 6e 61 6c 20 73 74 72 75 63 74 20 53 51 4c 69  rnal struct SQLi
0c00: 74 65 54 79 70 65 4e 61 6d 65 73 0a 20 20 7b 0a  teTypeNames.  {.
0c10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
0c20: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 73 74 72  iteTypeNames(str
0c30: 69 6e 67 20 6e 65 77 74 79 70 65 4e 61 6d 65 2c  ing newtypeName,
0c40: 20 44 62 54 79 70 65 20 6e 65 77 64 61 74 61 54   DbType newdataT
0c50: 79 70 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ype).    {.     
0c60: 20 74 79 70 65 4e 61 6d 65 20 3d 20 6e 65 77 74   typeName = newt
0c70: 79 70 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 64  ypeName;.      d
0c80: 61 74 61 54 79 70 65 20 3d 20 6e 65 77 64 61 74  ataType = newdat
0c90: 61 54 79 70 65 3b 0a 20 20 20 20 7d 0a 0a 20 20  aType;.    }..  
0ca0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e    internal strin
0cb0: 67 20 74 79 70 65 4e 61 6d 65 3b 0a 20 20 20 20  g typeName;.    
0cc0: 69 6e 74 65 72 6e 61 6c 20 44 62 54 79 70 65 20  internal DbType 
0cd0: 64 61 74 61 54 79 70 65 3b 0a 20 20 7d 0a 0a 20  dataType;.  }.. 
0ce0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0cf0: 20 2f 2f 2f 20 54 68 69 73 20 62 61 73 65 20 63   /// This base c
0d00: 6c 61 73 73 20 70 72 6f 76 69 64 65 73 20 64 61  lass provides da
0d10: 74 61 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f  tatype conversio
0d20: 6e 20 73 65 72 76 69 63 65 73 20 66 6f 72 20 74  n services for t
0d30: 68 65 20 53 51 4c 69 74 65 20 70 72 6f 76 69 64  he SQLite provid
0d40: 65 72 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  er..  /// </summ
0d50: 61 72 79 3e 0a 20 20 70 75 62 6c 69 63 20 61 62  ary>.  public ab
0d60: 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c  stract class SQL
0d70: 69 74 65 43 6f 6e 76 65 72 74 0a 20 20 7b 0a 20  iteConvert.  {. 
0d80: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0d90: 0a 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61  .    /// An arra
0da0: 79 20 6f 66 20 49 53 4f 38 36 30 31 20 64 61 74  y of ISO8601 dat
0db0: 65 74 69 6d 65 20 66 6f 72 6d 61 74 73 20 77 65  etime formats we
0dc0: 20 73 75 70 70 6f 72 74 20 63 6f 6e 76 65 72 73   support convers
0dd0: 69 6f 6e 20 66 72 6f 6d 0a 20 20 20 20 2f 2f 2f  ion from.    ///
0de0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0df0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
0e00: 74 72 69 6e 67 5b 5d 20 5f 64 61 74 65 74 69 6d  tring[] _datetim
0e10: 65 46 6f 72 6d 61 74 73 20 3d 20 6e 65 77 20 73  eFormats = new s
0e20: 74 72 69 6e 67 5b 5d 20 7b 22 79 79 79 79 2d 4d  tring[] {"yyyy-M
0e30: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 22 2c 0a  M-dd HH:mm:ss",.
0e40: 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09  ................
0e50: 09 20 20 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d  .  "yyyyMMddHHmm
0e60: 73 73 22 2c 0a 09 09 09 09 09 09 09 09 09 09 09  ss",............
0e70: 09 09 09 09 09 09 20 20 22 79 79 79 79 4d 4d 64  ......  "yyyyMMd
0e80: 64 54 48 48 6d 6d 73 73 66 66 66 66 66 66 66 22  dTHHmmssfffffff"
0e90: 2c 0a 09 09 09 09 09 09 09 09 09 09 09 09 09 09  ,...............
0ea0: 09 09 09 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64  ...  "yyyy-MM-dd
0eb0: 22 2c 0a 09 09 09 09 09 09 09 09 09 09 09 09 09  ",..............
0ec0: 09 09 09 09 20 20 22 79 79 2d 4d 4d 2d 64 64 22  ....  "yy-MM-dd"
0ed0: 2c 0a 09 09 09 09 09 09 09 09 09 09 09 09 09 09  ,...............
0ee0: 09 09 09 20 20 22 79 79 79 79 4d 4d 64 64 22 2c  ...  "yyyyMMdd",
0ef0: 0a 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09  ................
0f00: 09 09 20 20 22 48 48 3a 6d 6d 3a 73 73 22 2c 0a  ..  "HH:mm:ss",.
0f10: 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09 09  ................
0f20: 09 20 20 22 54 48 48 6d 6d 73 73 22 0a 09 09 09  .  "THHmmss"....
0f30: 09 09 09 09 09 09 09 09 09 09 09 09 20 7d 3b 0a  ............ };.
0f40: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0f50: 79 3e 0a 20 20 20 20 2f 2f 2f 20 41 6e 20 55 54  y>.    /// An UT
0f60: 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20 69 6e 73  F-8 Encoding ins
0f70: 74 61 6e 63 65 2c 20 73 6f 20 77 65 20 63 61 6e  tance, so we can
0f80: 20 63 6f 6e 76 65 72 74 20 73 74 72 69 6e 67 73   convert strings
0f90: 20 74 6f 20 61 6e 64 20 66 72 6f 6d 20 55 54 46   to and from UTF
0fa0: 38 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  8.    /// </summ
0fb0: 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ary>.    private
0fc0: 20 73 74 61 74 69 63 20 54 65 78 74 2e 55 54 46   static Text.UTF
0fd0: 38 45 6e 63 6f 64 69 6e 67 20 5f 75 74 66 38 20  8Encoding _utf8 
0fe0: 3d 20 6e 65 77 20 54 65 78 74 2e 55 54 46 38 45  = new Text.UTF8E
0ff0: 6e 63 6f 64 69 6e 67 28 29 3b 0a 20 20 20 20 2f  ncoding();.    /
1000: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
1010: 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74   /// The default
1020: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
1030: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
1040: 63 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ce.    /// </sum
1050: 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74  mary>.    privat
1060: 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e SQLiteDateForm
1070: 61 74 73 20 5f 64 61 74 65 74 69 6d 65 46 6f 72  ats _datetimeFor
1080: 6d 61 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  mat;.    /// <su
1090: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49  mmary>.    /// I
10a0: 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 63  nitializes the c
10b0: 6f 6e 76 65 72 73 69 6f 6e 20 63 6c 61 73 73 0a  onversion class.
10c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10d0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
10e0: 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 54 68 65  m name="fmt">The
10f0: 20 64 65 66 61 75 6c 74 20 64 61 74 65 2f 74 69   default date/ti
1100: 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  me format to use
1110: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
1120: 63 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 69  ce</param>.    i
1130: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43 6f  nternal SQLiteCo
1140: 6e 76 65 72 74 28 53 51 4c 69 74 65 44 61 74 65  nvert(SQLiteDate
1150: 46 6f 72 6d 61 74 73 20 66 6d 74 29 0a 20 20 20  Formats fmt).   
1160: 20 7b 0a 20 20 20 20 20 20 5f 64 61 74 65 74 69   {.      _dateti
1170: 6d 65 46 6f 72 6d 61 74 20 3d 20 66 6d 74 3b 0a  meFormat = fmt;.
1180: 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67 69      }..    #regi
1190: 6f 6e 20 55 54 46 2d 38 20 43 6f 6e 76 65 72 73  on UTF-8 Convers
11a0: 69 6f 6e 20 46 75 6e 63 74 69 6f 6e 73 0a 20 20  ion Functions.  
11b0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
11c0: 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73      /// Converts
11d0: 20 61 20 73 74 72 69 6e 67 20 74 6f 20 61 20 55   a string to a U
11e0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 62 79 74  TF-8 encoded byt
11f0: 65 20 61 72 72 61 79 20 73 69 7a 65 64 20 74 6f  e array sized to
1200: 20 69 6e 63 6c 75 64 65 20 61 20 6e 75 6c 6c 2d   include a null-
1210: 74 65 72 6d 69 6e 61 74 69 6e 67 20 63 68 61 72  terminating char
1220: 61 63 74 65 72 2e 0a 20 20 20 20 2f 2f 2f 20 3c  acter..    /// <
1230: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
1240: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
1250: 6f 75 72 63 65 54 65 78 74 22 3e 54 68 65 20 73  ourceText">The s
1260: 74 72 69 6e 67 20 74 6f 20 63 6f 6e 76 65 72 74  tring to convert
1270: 20 74 6f 20 55 54 46 2d 38 3c 2f 70 61 72 61 6d   to UTF-8</param
1280: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
1290: 6e 73 3e 41 20 62 79 74 65 20 61 72 72 61 79 20  ns>A byte array 
12a0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63  containing the c
12b0: 6f 6e 76 65 72 74 65 64 20 73 74 72 69 6e 67 20  onverted string 
12c0: 70 6c 75 73 20 61 6e 20 65 78 74 72 61 20 30 20  plus an extra 0 
12d0: 74 65 72 6d 69 6e 61 74 69 6e 67 20 62 79 74 65  terminating byte
12e0: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
12f0: 68 65 20 61 72 72 61 79 2e 3c 2f 72 65 74 75 72  he array.</retur
1300: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 73  ns>.    public s
1310: 74 61 74 69 63 20 62 79 74 65 5b 5d 20 54 6f 55  tatic byte[] ToU
1320: 54 46 38 28 73 74 72 69 6e 67 20 73 6f 75 72 63  TF8(string sourc
1330: 65 54 65 78 74 29 0a 20 20 20 20 7b 0a 20 20 20  eText).    {.   
1340: 20 20 20 42 79 74 65 5b 5d 20 62 79 74 65 41 72     Byte[] byteAr
1350: 72 61 79 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ray;.      int n
1360: 6c 65 6e 20 3d 20 5f 75 74 66 38 2e 47 65 74 42  len = _utf8.GetB
1370: 79 74 65 43 6f 75 6e 74 28 73 6f 75 72 63 65 54  yteCount(sourceT
1380: 65 78 74 29 20 2b 20 31 3b 0a 0a 20 20 20 20 20  ext) + 1;..     
1390: 20 62 79 74 65 41 72 72 61 79 20 3d 20 6e 65 77   byteArray = new
13a0: 20 62 79 74 65 5b 6e 6c 65 6e 5d 3b 0a 20 20 20   byte[nlen];.   
13b0: 20 20 20 6e 6c 65 6e 20 3d 20 5f 75 74 66 38 2e     nlen = _utf8.
13c0: 47 65 74 42 79 74 65 73 28 73 6f 75 72 63 65 54  GetBytes(sourceT
13d0: 65 78 74 2c 20 30 2c 20 73 6f 75 72 63 65 54 65  ext, 0, sourceTe
13e0: 78 74 2e 4c 65 6e 67 74 68 2c 20 62 79 74 65 41  xt.Length, byteA
13f0: 72 72 61 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  rray, 0);.      
1400: 62 79 74 65 41 72 72 61 79 5b 6e 6c 65 6e 5d 20  byteArray[nlen] 
1410: 3d 20 30 3b 0a 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
1420: 72 6e 20 62 79 74 65 41 72 72 61 79 3b 0a 20 20  rn byteArray;.  
1430: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
1440: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43  mmary>.    /// C
1450: 6f 6e 76 65 72 74 20 61 20 44 61 74 65 54 69 6d  onvert a DateTim
1460: 65 20 74 6f 20 61 20 55 54 46 2d 38 20 65 6e 63  e to a UTF-8 enc
1470: 6f 64 65 64 2c 20 7a 65 72 6f 2d 74 65 72 6d 69  oded, zero-termi
1480: 6e 61 74 65 64 20 62 79 74 65 20 61 72 72 61 79  nated byte array
1490: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
14a0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ary>.    /// <re
14b0: 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 54  marks>.    /// T
14c0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
14d0: 61 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 66 75  a convenience fu
14e0: 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68 20 66 69  nction, which fi
14f0: 72 73 74 20 63 61 6c 6c 73 20 54 6f 53 74 72 69  rst calls ToStri
1500: 6e 67 28 29 20 6f 6e 20 74 68 65 20 44 61 74 65  ng() on the Date
1510: 54 69 6d 65 2c 20 61 6e 64 20 74 68 65 6e 20 63  Time, and then c
1520: 61 6c 6c 73 20 54 6f 55 54 46 38 28 29 20 77 69  alls ToUTF8() wi
1530: 74 68 20 74 68 65 0a 20 20 20 20 2f 2f 2f 20 73  th the.    /// s
1540: 74 72 69 6e 67 20 72 65 73 75 6c 74 2e 0a 20 20  tring result..  
1550: 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e    /// </remarks>
1560: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1570: 6e 61 6d 65 3d 22 64 61 74 65 54 69 6d 65 56 61  name="dateTimeVa
1580: 6c 75 65 22 3e 54 68 65 20 44 61 74 65 54 69 6d  lue">The DateTim
1590: 65 20 74 6f 20 63 6f 6e 76 65 72 74 2e 3c 2f 70  e to convert.</p
15a0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
15b0: 65 74 75 72 6e 73 3e 54 68 65 20 55 54 46 2d 38  eturns>The UTF-8
15c0: 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 2c   encoded string,
15d0: 20 69 6e 63 6c 75 64 69 6e 67 20 61 20 30 20 74   including a 0 t
15e0: 65 72 6d 69 6e 61 74 69 6e 67 20 62 79 74 65 20  erminating byte 
15f0: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
1600: 65 20 61 72 72 61 79 2e 3c 2f 72 65 74 75 72 6e  e array.</return
1610: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 62 79  s>.    public by
1620: 74 65 5b 5d 20 54 6f 55 54 46 38 28 44 61 74 65  te[] ToUTF8(Date
1630: 54 69 6d 65 20 64 61 74 65 54 69 6d 65 56 61 6c  Time dateTimeVal
1640: 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ue).    {.      
1650: 72 65 74 75 72 6e 20 54 6f 55 54 46 38 28 54 6f  return ToUTF8(To
1660: 53 74 72 69 6e 67 28 64 61 74 65 54 69 6d 65 56  String(dateTimeV
1670: 61 6c 75 65 29 29 3b 0a 20 20 20 20 7d 0a 0a 20  alue));.    }.. 
1680: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1690: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
16a0: 73 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  s a UTF-8 encode
16b0: 64 20 49 6e 74 50 74 72 20 6f 66 20 74 68 65 20  d IntPtr of the 
16c0: 73 70 65 63 69 66 69 65 64 20 6c 65 6e 67 74 68  specified length
16d0: 20 69 6e 74 6f 20 61 20 2e 4e 45 54 20 73 74 72   into a .NET str
16e0: 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ing.    /// </su
16f0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
1700: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 74 69  param name="nati
1710: 76 65 73 74 72 69 6e 67 22 3e 54 68 65 20 70 6f  vestring">The po
1720: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d 65 6d  inter to the mem
1730: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 55 54  ory where the UT
1740: 46 2d 38 20 73 74 72 69 6e 67 20 69 73 20 65 6e  F-8 string is en
1750: 63 6f 64 65 64 3c 2f 70 61 72 61 6d 3e 0a 20 20  coded</param>.  
1760: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1770: 65 3d 22 6e 61 74 69 76 65 73 74 72 69 6e 67 6c  e="nativestringl
1780: 65 6e 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  en">The number o
1790: 66 20 62 79 74 65 73 20 74 6f 20 64 65 63 6f 64  f bytes to decod
17a0: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
17b0: 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 72  / <returns>A str
17c0: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
17d0: 68 65 20 74 72 61 6e 73 6c 61 74 65 64 20 63 68  he translated ch
17e0: 61 72 61 63 74 65 72 28 73 29 3c 2f 72 65 74 75  aracter(s)</retu
17f0: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
1800: 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20 54  virtual string T
1810: 6f 53 74 72 69 6e 67 28 49 6e 74 50 74 72 20 6e  oString(IntPtr n
1820: 61 74 69 76 65 73 74 72 69 6e 67 2c 20 69 6e 74  ativestring, int
1830: 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e   nativestringlen
1840: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
1850: 20 28 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65   (nativestringle
1860: 6e 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 22  n == 0) return "
1870: 22 3b 0a 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  ";..      byte[]
1880: 20 62 79 74 65 41 72 72 61 79 3b 0a 0a 20 20 20   byteArray;..   
1890: 20 20 20 62 79 74 65 41 72 72 61 79 20 3d 20 6e     byteArray = n
18a0: 65 77 20 62 79 74 65 5b 6e 61 74 69 76 65 73 74  ew byte[nativest
18b0: 72 69 6e 67 6c 65 6e 5d 3b 0a 20 20 20 20 20 20  ringlen];.      
18c0: 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 6e 61 74  Marshal.Copy(nat
18d0: 69 76 65 73 74 72 69 6e 67 2c 20 62 79 74 65 41  ivestring, byteA
18e0: 72 72 61 79 2c 20 30 2c 20 6e 61 74 69 76 65 73  rray, 0, natives
18f0: 74 72 69 6e 67 6c 65 6e 29 3b 0a 0a 20 20 20 20  tringlen);..    
1900: 20 20 72 65 74 75 72 6e 20 5f 75 74 66 38 2e 47    return _utf8.G
1910: 65 74 53 74 72 69 6e 67 28 62 79 74 65 41 72 72  etString(byteArr
1920: 61 79 2c 20 30 2c 20 6e 61 74 69 76 65 73 74 72  ay, 0, nativestr
1930: 69 6e 67 6c 65 6e 29 3b 0a 20 20 20 20 7d 0a 0a  inglen);.    }..
1940: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a      #endregion..
1950: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 61 74 65      #region Date
1960: 54 69 6d 65 20 43 6f 6e 76 65 72 73 69 6f 6e 20  Time Conversion 
1970: 46 75 6e 63 74 69 6f 6e 73 0a 20 20 20 20 2f 2f  Functions.    //
1980: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
1990: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 73  /// Converts a s
19a0: 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 44 61 74  tring into a Dat
19b0: 65 54 69 6d 65 2c 20 75 73 69 6e 67 20 74 68 65  eTime, using the
19c0: 20 63 75 72 72 65 6e 74 20 44 61 74 65 54 69 6d   current DateTim
19d0: 65 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65  eFormat specifie
19e0: 64 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63  d for the connec
19f0: 74 69 6f 6e 20 77 68 65 6e 20 69 74 20 77 61 73  tion when it was
1a00: 20 6f 70 65 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f   opened..    ///
1a10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
1a20: 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20  /// <remarks>.  
1a30: 20 20 2f 2f 2f 20 41 63 63 65 70 74 61 62 6c 65    /// Acceptable
1a40: 20 49 53 4f 38 36 30 31 20 44 61 74 65 54 69 6d   ISO8601 DateTim
1a50: 65 20 66 6f 72 6d 61 74 73 20 61 72 65 3a 0a 20  e formats are:. 
1a60: 20 20 20 2f 2f 2f 20 20 20 79 79 79 79 2d 4d 4d     ///   yyyy-MM
1a70: 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 0a 20 20 20  -dd HH:mm:ss.   
1a80: 20 2f 2f 2f 20 20 20 79 79 79 79 4d 4d 64 64 48   ///   yyyyMMddH
1a90: 48 6d 6d 73 73 0a 20 20 20 20 2f 2f 2f 20 20 20  Hmmss.    ///   
1aa0: 79 79 79 79 4d 4d 64 64 54 48 48 6d 6d 73 73 66  yyyyMMddTHHmmssf
1ab0: 66 66 66 66 66 66 0a 20 20 20 20 2f 2f 2f 20 20  ffffff.    ///  
1ac0: 20 79 79 79 79 2d 4d 4d 2d 64 64 0a 20 20 20 20   yyyy-MM-dd.    
1ad0: 2f 2f 2f 20 20 20 79 79 2d 4d 4d 2d 64 64 0a 20  ///   yy-MM-dd. 
1ae0: 20 20 20 2f 2f 2f 20 20 20 79 79 79 79 4d 4d 64     ///   yyyyMMd
1af0: 64 0a 20 20 20 20 2f 2f 2f 20 20 20 48 48 3a 6d  d.    ///   HH:m
1b00: 6d 3a 73 73 0a 20 20 20 20 2f 2f 2f 20 20 20 54  m:ss.    ///   T
1b10: 48 48 6d 6d 73 73 0a 20 20 20 20 2f 2f 2f 20 3c  HHmmss.    /// <
1b20: 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f  /remarks>.    //
1b30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
1b40: 61 74 65 54 65 78 74 22 3e 54 68 65 20 73 74 72  ateText">The str
1b50: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 65  ing containing e
1b60: 69 74 68 65 72 20 61 20 54 69 63 6b 20 76 61 6c  ither a Tick val
1b70: 75 65 20 6f 72 20 61 6e 20 49 53 4f 38 36 30 31  ue or an ISO8601
1b80: 2d 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 3c 2f  -format string</
1b90: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
1ba0: 72 65 74 75 72 6e 73 3e 41 20 44 61 74 65 54 69  returns>A DateTi
1bb0: 6d 65 20 76 61 6c 75 65 3c 2f 72 65 74 75 72 6e  me value</return
1bc0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 44 61  s>.    public Da
1bd0: 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d  teTime ToDateTim
1be0: 65 28 73 74 72 69 6e 67 20 64 61 74 65 54 65 78  e(string dateTex
1bf0: 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 73  t).    {.      s
1c00: 77 69 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65  witch (_datetime
1c10: 46 6f 72 6d 61 74 29 0a 20 20 20 20 20 20 7b 0a  Format).      {.
1c20: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
1c30: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54  iteDateFormats.T
1c40: 69 63 6b 73 3a 0a 20 20 20 20 20 20 20 20 20 20  icks:.          
1c50: 72 65 74 75 72 6e 20 6e 65 77 20 44 61 74 65 54  return new DateT
1c60: 69 6d 65 28 43 6f 6e 76 65 72 74 2e 54 6f 49 6e  ime(Convert.ToIn
1c70: 74 36 34 28 64 61 74 65 54 65 78 74 2c 20 53 79  t64(dateText, Sy
1c80: 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69  stem.Globalizati
1c90: 6f 6e 2e 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  on.CultureInfo.I
1ca0: 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
1cb0: 29 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61 75  );.        defau
1cc0: 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20 72 65  lt:.          re
1cd0: 74 75 72 6e 20 44 61 74 65 54 69 6d 65 2e 50 61  turn DateTime.Pa
1ce0: 72 73 65 45 78 61 63 74 28 64 61 74 65 54 65 78  rseExact(dateTex
1cf0: 74 2c 20 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  t, _datetimeForm
1d00: 61 74 73 2c 20 53 79 73 74 65 6d 2e 47 6c 6f 62  ats, System.Glob
1d10: 61 6c 69 7a 61 74 69 6f 6e 2e 44 61 74 65 54 69  alization.DateTi
1d20: 6d 65 46 6f 72 6d 61 74 49 6e 66 6f 2e 49 6e 76  meFormatInfo.Inv
1d30: 61 72 69 61 6e 74 49 6e 66 6f 2c 20 53 79 73 74  ariantInfo, Syst
1d40: 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
1d50: 2e 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e  .DateTimeStyles.
1d60: 4e 6f 6e 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  None);.      }. 
1d70: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
1d80: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
1d90: 43 6f 6e 76 65 72 74 73 20 61 20 44 61 74 65 54  Converts a DateT
1da0: 69 6d 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20  ime to a string 
1db0: 76 61 6c 75 65 2c 20 75 73 69 6e 67 20 74 68 65  value, using the
1dc0: 20 63 75 72 72 65 6e 74 20 44 61 74 65 54 69 6d   current DateTim
1dd0: 65 46 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65  eFormat specifie
1de0: 64 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63  d for the connec
1df0: 74 69 6f 6e 20 77 68 65 6e 20 69 74 20 77 61 73  tion when it was
1e00: 20 6f 70 65 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f   opened..    ///
1e10: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
1e20: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e30: 22 64 61 74 65 56 61 6c 75 65 22 3e 54 68 65 20  "dateValue">The 
1e40: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 20 74  DateTime value t
1e50: 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d  o convert</param
1e60: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
1e70: 6e 73 3e 45 69 74 68 65 72 20 61 20 73 74 72 69  ns>Either a stri
1e80: 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  ng consisting of
1e90: 20 74 68 65 20 74 69 63 6b 20 63 6f 75 6e 74 20   the tick count 
1ea0: 66 6f 72 20 44 61 74 65 54 69 6d 65 46 6f 72 6d  for DateTimeForm
1eb0: 61 74 2e 54 69 63 6b 73 2c 20 6f 72 20 61 20 64  at.Ticks, or a d
1ec0: 61 74 65 2f 74 69 6d 65 20 69 6e 20 49 53 4f 38  ate/time in ISO8
1ed0: 36 30 31 20 66 6f 72 6d 61 74 2e 3c 2f 72 65 74  601 format.</ret
1ee0: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
1ef0: 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67   string ToString
1f00: 28 44 61 74 65 54 69 6d 65 20 64 61 74 65 56 61  (DateTime dateVa
1f10: 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  lue).    {.     
1f20: 20 73 77 69 74 63 68 20 28 5f 64 61 74 65 74 69   switch (_dateti
1f30: 6d 65 46 6f 72 6d 61 74 29 0a 20 20 20 20 20 20  meFormat).      
1f40: 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 53  {.        case S
1f50: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
1f60: 2e 54 69 63 6b 73 3a 0a 20 20 20 20 20 20 20 20  .Ticks:.        
1f70: 20 20 72 65 74 75 72 6e 20 64 61 74 65 56 61 6c    return dateVal
1f80: 75 65 2e 54 69 63 6b 73 2e 54 6f 53 74 72 69 6e  ue.Ticks.ToStrin
1f90: 67 28 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69  g(System.Globali
1fa0: 7a 61 74 69 6f 6e 2e 43 75 6c 74 75 72 65 49 6e  zation.CultureIn
1fb0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
1fc0: 75 72 65 29 3b 0a 20 20 20 20 20 20 20 20 64 65  ure);.        de
1fd0: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20  fault:.         
1fe0: 20 72 65 74 75 72 6e 20 64 61 74 65 56 61 6c 75   return dateValu
1ff0: 65 2e 54 6f 53 74 72 69 6e 67 28 5f 64 61 74 65  e.ToString(_date
2000: 74 69 6d 65 46 6f 72 6d 61 74 73 5b 30 5d 2c 20  timeFormats[0], 
2010: 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61  System.Globaliza
2020: 74 69 6f 6e 2e 43 75 6c 74 75 72 65 49 6e 66 6f  tion.CultureInfo
2030: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
2040: 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
2050: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
2060: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 74  ary>.    /// Int
2070: 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 74  ernal function t
2080: 6f 20 63 6f 6e 76 65 72 74 20 61 20 55 54 46 2d  o convert a UTF-
2090: 38 20 65 6e 63 6f 64 65 64 20 49 6e 74 50 74 72  8 encoded IntPtr
20a0: 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
20b0: 64 20 6c 65 6e 67 74 68 20 74 6f 20 61 20 44 61  d length to a Da
20c0: 74 65 54 69 6d 65 2e 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
20d0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
20e0: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20  // <remarks>.   
20f0: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 20 63   /// This is a c
2100: 6f 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e 63 74  onvenience funct
2110: 69 6f 6e 2c 20 77 68 69 63 68 20 66 69 72 73 74  ion, which first
2120: 20 63 61 6c 6c 73 20 54 6f 53 74 72 69 6e 67 28   calls ToString(
2130: 29 20 6f 6e 20 74 68 65 20 49 6e 74 50 74 72 20  ) on the IntPtr 
2140: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
2150: 20 61 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20   a string, then 
2160: 63 61 6c 6c 73 0a 20 20 20 20 2f 2f 2f 20 54 6f  calls.    /// To
2170: 44 61 74 65 54 69 6d 65 28 29 20 6f 6e 20 74 68  DateTime() on th
2180: 65 20 73 74 72 69 6e 67 20 74 6f 20 72 65 74 75  e string to retu
2190: 72 6e 20 61 20 44 61 74 65 54 69 6d 65 2e 0a 20  rn a DateTime.. 
21a0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
21b0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
21c0: 20 6e 61 6d 65 3d 22 70 74 72 22 3e 41 20 70 6f   name="ptr">A po
21d0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55 54 46  inter to the UTF
21e0: 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e  -8 encoded strin
21f0: 67 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  g</param>.    //
2200: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
2210: 65 6e 22 3e 54 68 65 20 6c 65 6e 67 74 68 20 69  en">The length i
2220: 6e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73  n bytes of the s
2230: 74 72 69 6e 67 3c 2f 70 61 72 61 6d 3e 0a 20 20  tring</param>.  
2240: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
2250: 68 65 20 70 61 72 73 65 64 20 44 61 74 65 54 69  he parsed DateTi
2260: 6d 65 20 76 61 6c 75 65 3c 2f 72 65 74 75 72 6e  me value</return
2270: 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  s>.    internal 
2280: 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54  DateTime ToDateT
2290: 69 6d 65 28 49 6e 74 50 74 72 20 70 74 72 2c 20  ime(IntPtr ptr, 
22a0: 69 6e 74 20 6c 65 6e 29 0a 20 20 20 20 7b 0a 20  int len).    {. 
22b0: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
22c0: 74 65 54 69 6d 65 28 54 6f 53 74 72 69 6e 67 28  teTime(ToString(
22d0: 70 74 72 2c 20 6c 65 6e 29 29 3b 0a 20 20 20 20  ptr, len));.    
22e0: 7d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  }.    #endregion
22f0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2300: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 6d 61 72  ry>.    /// Smar
2310: 74 20 6d 65 74 68 6f 64 20 6f 66 20 73 70 6c 69  t method of spli
2320: 74 74 69 6e 67 20 61 20 73 74 72 69 6e 67 2e 20  tting a string. 
2330: 20 53 6b 69 70 73 20 71 75 6f 74 65 64 20 65 6c   Skips quoted el
2340: 65 6d 65 6e 74 73 2c 20 72 65 6d 6f 76 65 73 20  ements, removes 
2350: 74 68 65 20 71 75 6f 74 65 73 2e 0a 20 20 20 20  the quotes..    
2360: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
2370: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
2380: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 73 70  .    /// This sp
2390: 6c 69 74 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  lit function wor
23a0: 6b 73 20 73 6f 6d 65 77 68 61 74 20 6c 69 6b 65  ks somewhat like
23b0: 20 74 68 65 20 53 74 72 69 6e 67 2e 53 70 6c 69   the String.Spli
23c0: 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20  t() function in 
23d0: 74 68 61 74 20 69 74 20 62 72 65 61 6b 73 20 61  that it breaks a
23e0: 70 61 72 74 20 61 20 73 74 72 69 6e 67 20 69 6e  part a string in
23f0: 74 6f 0a 20 20 20 20 2f 2f 2f 20 70 69 65 63 65  to.    /// piece
2400: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
2410: 65 20 70 69 65 63 65 73 20 61 73 20 61 6e 20 61  e pieces as an a
2420: 72 72 61 79 2e 20 20 54 68 65 20 70 72 69 6d 61  rray.  The prima
2430: 72 79 20 64 69 66 66 65 72 65 6e 63 65 73 20 61  ry differences a
2440: 72 65 3a 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73  re:.    /// <lis
2450: 74 20 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e  t type="bullet">
2460: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
2470: 64 65 73 63 72 69 70 74 69 6f 6e 3e 4f 6e 6c 79  description>Only
2480: 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 20 63   one character c
2490: 61 6e 20 62 65 20 70 72 6f 76 69 64 65 64 20 61  an be provided a
24a0: 73 20 61 20 73 65 70 61 72 61 74 6f 72 20 63 68  s a separator ch
24b0: 61 72 61 63 74 65 72 3c 2f 64 65 73 63 72 69 70  aracter</descrip
24c0: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0a 20 20 20  tion></item>.   
24d0: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
24e0: 72 69 70 74 69 6f 6e 3e 51 75 6f 74 65 64 20 74  ription>Quoted t
24f0: 65 78 74 20 69 6e 73 69 64 65 20 74 68 65 20 73  ext inside the s
2500: 74 72 69 6e 67 20 69 73 20 73 6b 69 70 70 65 64  tring is skipped
2510: 20 6f 76 65 72 20 77 68 65 6e 20 73 65 61 72 63   over when searc
2520: 68 69 6e 67 20 66 6f 72 20 74 68 65 20 73 65 70  hing for the sep
2530: 61 72 61 74 6f 72 2c 20 61 6e 64 20 74 68 65 20  arator, and the 
2540: 71 75 6f 74 65 73 20 61 72 65 20 72 65 6d 6f 76  quotes are remov
2550: 65 64 2e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  ed.</description
2560: 3e 3c 2f 69 74 65 6d 3e 0a 20 20 20 20 2f 2f 2f  ></item>.    ///
2570: 20 3c 2f 6c 69 73 74 3e 0a 20 20 20 20 2f 2f 2f   </list>.    ///
2580: 20 54 68 75 73 2c 20 69 66 20 73 70 6c 69 74 74   Thus, if splitt
2590: 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ing the followin
25a0: 67 20 73 74 72 69 6e 67 20 6c 6f 6f 6b 69 6e 67  g string looking
25b0: 20 66 6f 72 20 61 20 63 6f 6d 6d 61 3a 3c 62 72   for a comma:<br
25c0: 2f 3e 0a 20 20 20 20 2f 2f 2f 20 4f 6e 65 2c 54  />.    /// One,T
25d0: 77 6f 2c 20 22 54 68 72 65 65 2c 20 46 6f 75 72  wo, "Three, Four
25e0: 22 2c 20 46 69 76 65 3c 62 72 2f 3e 0a 20 20 20  ", Five<br/>.   
25f0: 20 2f 2f 2f 20 3c 62 72 2f 3e 0a 20 20 20 20 2f   /// <br/>.    /
2600: 2f 2f 20 54 68 65 20 72 65 73 75 6c 74 69 6e 67  // The resulting
2610: 20 61 72 72 61 79 20 77 6f 75 6c 64 20 63 6f 6e   array would con
2620: 74 61 69 6e 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f  tain<br/>.    //
2630: 2f 20 5b 30 5d 20 4f 6e 65 3c 62 72 2f 3e 0a 20  / [0] One<br/>. 
2640: 20 20 20 2f 2f 2f 20 5b 31 5d 20 54 77 6f 3c 62     /// [1] Two<b
2650: 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 5b 32 5d 20  r/>.    /// [2] 
2660: 54 68 72 65 65 2c 20 46 6f 75 72 3c 62 72 2f 3e  Three, Four<br/>
2670: 0a 20 20 20 20 2f 2f 2f 20 5b 33 5d 20 46 69 76  .    /// [3] Fiv
2680: 65 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 3c  e<br/>.    /// <
2690: 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74  br/>.    /// Not
26a0: 65 20 74 68 61 74 20 74 68 65 20 6c 65 61 64 69  e that the leadi
26b0: 6e 67 20 61 6e 64 20 74 72 61 69 6c 69 6e 67 20  ng and trailing 
26c0: 73 70 61 63 65 73 20 77 65 72 65 20 72 65 6d 6f  spaces were remo
26d0: 76 65 64 20 66 72 6f 6d 20 65 61 63 68 20 69 74  ved from each it
26e0: 65 6d 20 64 75 72 69 6e 67 20 74 68 65 20 73 70  em during the sp
26f0: 6c 69 74 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  lit..    /// </r
2700: 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20  emarks>.    /// 
2710: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75  <param name="sou
2720: 72 63 65 22 3e 53 6f 75 72 63 65 20 73 74 72 69  rce">Source stri
2730: 6e 67 20 74 6f 20 73 70 6c 69 74 20 61 70 61 72  ng to split apar
2740: 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  t</param>.    //
2750: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
2760: 65 70 61 72 61 74 6f 72 22 3e 53 65 70 61 72 61  eparator">Separa
2770: 74 6f 72 20 63 68 61 72 61 63 74 65 72 3c 2f 70  tor character</p
2780: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
2790: 65 74 75 72 6e 73 3e 41 20 73 74 72 69 6e 67 20  eturns>A string 
27a0: 61 72 72 61 79 20 6f 66 20 74 68 65 20 73 70 6c  array of the spl
27b0: 69 74 20 75 70 20 65 6c 65 6d 65 6e 74 73 3c 2f  it up elements</
27c0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
27d0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
27e0: 67 5b 5d 20 53 70 6c 69 74 28 73 74 72 69 6e 67  g[] Split(string
27f0: 20 73 6f 75 72 63 65 2c 20 63 68 61 72 20 73 65   source, char se
2800: 70 61 72 61 74 6f 72 29 0a 20 20 20 20 7b 0a 20  parator).    {. 
2810: 20 20 20 20 20 63 68 61 72 5b 5d 20 74 6f 6b 73       char[] toks
2820: 20 3d 20 6e 65 77 20 63 68 61 72 5b 32 5d 20 7b   = new char[2] {
2830: 20 27 5c 22 27 2c 20 73 65 70 61 72 61 74 6f 72   '\"', separator
2840: 20 7d 3b 0a 20 20 20 20 20 20 63 68 61 72 5b 5d   };.      char[]
2850: 20 71 75 6f 74 20 3d 20 6e 65 77 20 63 68 61 72   quot = new char
2860: 5b 31 5d 20 7b 20 27 5c 22 27 20 7d 3b 0a 20 20  [1] { '\"' };.  
2870: 20 20 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20      int n = 0;. 
2880: 20 20 20 20 20 4c 69 73 74 3c 73 74 72 69 6e 67       List<string
2890: 3e 20 6c 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c  > ls = new List<
28a0: 73 74 72 69 6e 67 3e 28 29 3b 0a 20 20 20 20 20  string>();.     
28b0: 20 73 74 72 69 6e 67 20 73 3b 0a 0a 20 20 20 20   string s;..    
28c0: 20 20 77 68 69 6c 65 20 28 73 6f 75 72 63 65 2e    while (source.
28d0: 4c 65 6e 67 74 68 20 3e 20 30 29 0a 20 20 20 20  Length > 0).    
28e0: 20 20 7b 0a 20 20 20 20 20 20 20 20 6e 20 3d 20    {.        n = 
28f0: 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 41 6e  source.IndexOfAn
2900: 79 28 74 6f 6b 73 2c 20 6e 29 3b 0a 20 20 20 20  y(toks, n);.    
2910: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 2d 31 29      if (n == -1)
2920: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
2930: 69 66 20 28 73 6f 75 72 63 65 5b 6e 5d 20 3d 3d  if (source[n] ==
2940: 20 74 6f 6b 73 5b 30 5d 29 0a 20 20 20 20 20 20   toks[0]).      
2950: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 6f    {.          so
2960: 75 72 63 65 20 3d 20 73 6f 75 72 63 65 2e 52 65  urce = source.Re
2970: 6d 6f 76 65 28 6e 2c 20 31 29 3b 0a 20 20 20 20  move(n, 1);.    
2980: 20 20 20 20 20 20 6e 20 3d 20 73 6f 75 72 63 65        n = source
2990: 2e 49 6e 64 65 78 4f 66 41 6e 79 28 71 75 6f 74  .IndexOfAny(quot
29a0: 2c 20 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , n);.          
29b0: 69 66 20 28 6e 20 3d 3d 20 2d 31 29 0a 20 20 20  if (n == -1).   
29c0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
29d0: 20 20 20 20 20 73 6f 75 72 63 65 20 3d 20 22 5c       source = "\
29e0: 22 22 20 2b 20 73 6f 75 72 63 65 3b 0a 20 20 20  "" + source;.   
29f0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2a00: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2a10: 20 20 20 20 20 20 73 6f 75 72 63 65 20 3d 20 73        source = s
2a20: 6f 75 72 63 65 2e 52 65 6d 6f 76 65 28 6e 2c 20  ource.Remove(n, 
2a30: 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  1);.        }.  
2a40: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
2a50: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73     {.          s
2a60: 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73 74 72   = source.Substr
2a70: 69 6e 67 28 30 2c 20 6e 29 2e 54 72 69 6d 28 29  ing(0, n).Trim()
2a80: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 6f 75 72  ;.          sour
2a90: 63 65 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73  ce = source.Subs
2aa0: 74 72 69 6e 67 28 6e 20 2b 20 31 29 2e 54 72 69  tring(n + 1).Tri
2ab0: 6d 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  m();.          i
2ac0: 66 20 28 73 2e 4c 65 6e 67 74 68 20 3e 20 30 29  f (s.Length > 0)
2ad0: 20 6c 73 2e 41 64 64 28 73 29 3b 0a 20 20 20 20   ls.Add(s);.    
2ae0: 20 20 20 20 20 20 6e 20 3d 20 30 3b 0a 20 20 20        n = 0;.   
2af0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
2b00: 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 2e       if (source.
2b10: 4c 65 6e 67 74 68 20 3e 20 30 29 20 6c 73 2e 41  Length > 0) ls.A
2b20: 64 64 28 73 6f 75 72 63 65 29 3b 0a 0a 20 20 20  dd(source);..   
2b30: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d     string[] ar =
2b40: 20 6e 65 77 20 73 74 72 69 6e 67 5b 6c 73 2e 43   new string[ls.C
2b50: 6f 75 6e 74 5d 3b 0a 20 20 20 20 20 20 6c 73 2e  ount];.      ls.
2b60: 43 6f 70 79 54 6f 28 61 72 2c 20 30 29 3b 0a 0a  CopyTo(ar, 0);..
2b70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 3b        return ar;
2b80: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67  .    }..    #reg
2b90: 69 6f 6e 20 54 79 70 65 20 43 6f 6e 76 65 72 73  ion Type Convers
2ba0: 69 6f 6e 73 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ions.    /// <su
2bb0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 44  mmary>.    /// D
2bc0: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 64 61  etermines the da
2bd0: 74 61 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ta type of a col
2be0: 75 6d 6e 20 69 6e 20 61 20 73 74 61 74 65 6d 65  umn in a stateme
2bf0: 6e 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  nt.    /// </sum
2c00: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
2c10: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
2c20: 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74  >The statement t
2c30: 6f 20 72 65 74 72 69 65 76 65 20 69 6e 66 6f 72  o retrieve infor
2c40: 6d 61 74 69 6f 6e 20 66 6f 72 3c 2f 70 61 72 61  mation for</para
2c50: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  m>.    /// <para
2c60: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 63  m name="i">The c
2c70: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
2c80: 65 20 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69  e type informati
2c90: 6f 6e 20 6f 6e 3c 2f 70 61 72 61 6d 3e 0a 20 20  on on</param>.  
2ca0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
2cb0: 65 74 75 72 6e 73 20 61 20 53 51 4c 69 74 65 54  eturns a SQLiteT
2cc0: 79 70 65 20 73 74 72 75 63 74 3c 2f 72 65 74 75  ype struct</retu
2cd0: 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61  rns>.    interna
2ce0: 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 54  l static SQLiteT
2cf0: 79 70 65 20 43 6f 6c 75 6d 6e 54 6f 54 79 70 65  ype ColumnToType
2d00: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2d10: 20 73 74 6d 74 2c 20 69 6e 74 20 69 29 0a 20 20   stmt, int i).  
2d20: 20 20 7b 0a 20 20 20 20 20 20 53 51 4c 69 74 65    {.      SQLite
2d30: 54 79 70 65 20 74 79 70 3b 0a 0a 20 20 20 20 20  Type typ;..     
2d40: 20 74 79 70 2e 54 79 70 65 20 3d 20 54 79 70 65   typ.Type = Type
2d50: 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 73 74 6d  NameToDbType(stm
2d60: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70  t._sql.ColumnTyp
2d70: 65 28 73 74 6d 74 2c 20 69 2c 20 6f 75 74 20 74  e(stmt, i, out t
2d80: 79 70 2e 41 66 66 69 6e 69 74 79 29 29 3b 0a 0a  yp.Affinity));..
2d90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 79 70        return typ
2da0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
2db0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
2dc0: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 53 51  // Converts a SQ
2dd0: 4c 69 74 65 54 79 70 65 20 74 6f 20 61 20 2e 4e  LiteType to a .N
2de0: 45 54 20 54 79 70 65 20 6f 62 6a 65 63 74 0a 20  ET Type object. 
2df0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2e00: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
2e10: 20 6e 61 6d 65 3d 22 74 22 3e 54 68 65 20 53 51   name="t">The SQ
2e20: 4c 69 74 65 54 79 70 65 20 74 6f 20 63 6f 6e 76  LiteType to conv
2e30: 65 72 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ert</param>.    
2e40: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
2e50: 75 72 6e 73 20 61 20 2e 4e 45 54 20 54 79 70 65  urns a .NET Type
2e60: 20 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73   object</returns
2e70: 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  >.    internal s
2e80: 74 61 74 69 63 20 54 79 70 65 20 53 51 4c 69 74  tatic Type SQLit
2e90: 65 54 79 70 65 54 6f 54 79 70 65 28 53 51 4c 69  eTypeToType(SQLi
2ea0: 74 65 54 79 70 65 20 74 29 0a 20 20 20 20 7b 0a  teType t).    {.
2eb0: 20 20 20 20 20 20 69 66 20 28 74 2e 54 79 70 65        if (t.Type
2ec0: 20 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63   != DbType.Objec
2ed0: 74 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  t).        retur
2ee0: 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  n SQLiteConvert.
2ef0: 44 62 54 79 70 65 54 6f 54 79 70 65 28 74 2e 54  DbTypeToType(t.T
2f00: 79 70 65 29 3b 0a 0a 20 20 20 20 20 20 72 65 74  ype);..      ret
2f10: 75 72 6e 20 5f 74 79 70 65 61 66 66 69 6e 69 74  urn _typeaffinit
2f20: 69 65 73 5b 28 69 6e 74 29 74 2e 41 66 66 69 6e  ies[(int)t.Affin
2f30: 69 74 79 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ity];.    }..   
2f40: 20 73 74 61 74 69 63 20 54 79 70 65 5b 5d 20 5f   static Type[] _
2f50: 74 79 70 65 61 66 66 69 6e 69 74 69 65 73 20 3d  typeaffinities =
2f60: 20 7b 0a 20 20 20 20 20 20 6e 75 6c 6c 2c 0a 20   {.      null,. 
2f70: 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74 36       typeof(Int6
2f80: 34 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66  4),.      typeof
2f90: 28 44 6f 75 62 6c 65 29 2c 0a 20 20 20 20 20 20  (Double),.      
2fa0: 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 0a  typeof(string),.
2fb0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 62 79 74        typeof(byt
2fc0: 65 5b 5d 29 2c 0a 20 20 20 20 20 20 74 79 70 65  e[]),.      type
2fd0: 6f 66 28 44 42 4e 75 6c 6c 29 2c 0a 20 20 20 20  of(DBNull),.    
2fe0: 20 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 6e 75    null,.      nu
2ff0: 6c 6c 2c 0a 20 20 20 20 20 20 6e 75 6c 6c 2c 0a  ll,.      null,.
3000: 20 20 20 20 20 20 6e 75 6c 6c 2c 0a 20 20 20 20        null,.    
3010: 20 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d    typeof(DateTim
3020: 65 29 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20  e),.    };..    
3030: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
3040: 20 20 2f 2f 2f 20 46 6f 72 20 61 20 67 69 76 65    /// For a give
3050: 6e 20 69 6e 74 72 69 6e 73 69 63 20 74 79 70 65  n intrinsic type
3060: 2c 20 72 65 74 75 72 6e 20 61 20 44 62 54 79 70  , return a DbTyp
3070: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
3080: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3090: 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54  ram name="typ">T
30a0: 68 65 20 6e 61 74 69 76 65 20 74 79 70 65 20 74  he native type t
30b0: 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d  o convert</param
30c0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
30d0: 6e 73 3e 54 68 65 20 63 6f 72 72 65 73 70 6f 6e  ns>The correspon
30e0: 64 69 6e 67 20 28 63 6c 6f 73 65 73 74 20 6d 61  ding (closest ma
30f0: 74 63 68 29 20 44 62 54 79 70 65 3c 2f 72 65 74  tch) DbType</ret
3100: 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e  urns>.    intern
3110: 61 6c 20 73 74 61 74 69 63 20 44 62 54 79 70 65  al static DbType
3120: 20 54 79 70 65 54 6f 44 62 54 79 70 65 28 54 79   TypeToDbType(Ty
3130: 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a 20 20  pe typ).    {.  
3140: 20 20 20 20 54 79 70 65 43 6f 64 65 20 74 63 20      TypeCode tc 
3150: 3d 20 54 79 70 65 2e 47 65 74 54 79 70 65 43 6f  = Type.GetTypeCo
3160: 64 65 28 74 79 70 29 3b 0a 20 20 20 20 20 20 69  de(typ);.      i
3170: 66 20 28 74 63 20 3d 3d 20 54 79 70 65 43 6f 64  f (tc == TypeCod
3180: 65 2e 4f 62 6a 65 63 74 29 0a 20 20 20 20 20 20  e.Object).      
3190: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79  {.        if (ty
31a0: 70 20 3d 3d 20 74 79 70 65 6f 66 28 62 79 74 65  p == typeof(byte
31b0: 5b 5d 29 29 20 72 65 74 75 72 6e 20 44 62 54 79  [])) return DbTy
31c0: 70 65 2e 42 69 6e 61 72 79 3b 0a 20 20 20 20 20  pe.Binary;.     
31d0: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 74 79     if (typ == ty
31e0: 70 65 6f 66 28 47 75 69 64 29 29 20 72 65 74 75  peof(Guid)) retu
31f0: 72 6e 20 44 62 54 79 70 65 2e 47 75 69 64 3b 0a  rn DbType.Guid;.
3200: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
3210: 62 54 79 70 65 2e 53 74 72 69 6e 67 3b 0a 20 20  bType.String;.  
3220: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
3230: 72 6e 20 5f 74 79 70 65 74 6f 64 62 74 79 70 65  rn _typetodbtype
3240: 5b 28 69 6e 74 29 74 63 5d 3b 0a 20 20 20 20 7d  [(int)tc];.    }
3250: 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
3260: 61 74 69 63 20 44 62 54 79 70 65 5b 5d 20 5f 74  atic DbType[] _t
3270: 79 70 65 74 6f 64 62 74 79 70 65 20 3d 20 7b 0a  ypetodbtype = {.
3280: 20 20 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a        DbType.Obj
3290: 65 63 74 2c 0a 20 20 20 20 20 20 44 62 54 79 70  ect,.      DbTyp
32a0: 65 2e 42 69 6e 61 72 79 2c 0a 20 20 20 20 20 20  e.Binary,.      
32b0: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 2c 0a 20  DbType.Object,. 
32c0: 20 20 20 20 20 44 62 54 79 70 65 2e 42 6f 6f 6c       DbType.Bool
32d0: 65 61 6e 2c 0a 20 20 20 20 20 20 44 62 54 79 70  ean,.      DbTyp
32e0: 65 2e 53 42 79 74 65 2c 0a 20 20 20 20 20 20 44  e.SByte,.      D
32f0: 62 54 79 70 65 2e 53 42 79 74 65 2c 0a 20 20 20  bType.SByte,.   
3300: 20 20 20 44 62 54 79 70 65 2e 42 79 74 65 2c 0a     DbType.Byte,.
3310: 20 20 20 20 20 20 44 62 54 79 70 65 2e 49 6e 74        DbType.Int
3320: 31 36 2c 20 2f 2f 20 37 0a 20 20 20 20 20 20 44  16, // 7.      D
3330: 62 54 79 70 65 2e 55 49 6e 74 31 36 2c 0a 20 20  bType.UInt16,.  
3340: 20 20 20 20 44 62 54 79 70 65 2e 49 6e 74 33 32      DbType.Int32
3350: 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 55  ,.      DbType.U
3360: 49 6e 74 33 32 2c 0a 20 20 20 20 20 20 44 62 54  Int32,.      DbT
3370: 79 70 65 2e 49 6e 74 36 34 2c 20 2f 2f 20 31 31  ype.Int64, // 11
3380: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 55 49  .      DbType.UI
3390: 6e 74 36 34 2c 0a 20 20 20 20 20 20 44 62 54 79  nt64,.      DbTy
33a0: 70 65 2e 53 69 6e 67 6c 65 2c 0a 20 20 20 20 20  pe.Single,.     
33b0: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 2c 0a   DbType.Double,.
33c0: 20 20 20 20 20 20 44 62 54 79 70 65 2e 44 65 63        DbType.Dec
33d0: 69 6d 61 6c 2c 0a 20 20 20 20 20 20 44 62 54 79  imal,.      DbTy
33e0: 70 65 2e 44 61 74 65 54 69 6d 65 2c 0a 20 20 20  pe.DateTime,.   
33f0: 20 20 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74     DbType.Object
3400: 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 53  ,.      DbType.S
3410: 74 72 69 6e 67 2c 0a 20 20 20 20 7d 3b 0a 0a 20  tring,.    };.. 
3420: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3430: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
3440: 20 61 20 44 62 54 79 70 65 20 74 6f 20 61 20 54   a DbType to a T
3450: 79 70 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ype.    /// </su
3460: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
3470: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
3480: 3e 54 68 65 20 44 62 54 79 70 65 20 74 6f 20 63  >The DbType to c
3490: 6f 6e 76 65 72 74 20 66 72 6f 6d 3c 2f 70 61 72  onvert from</par
34a0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
34b0: 75 72 6e 73 3e 54 68 65 20 63 6c 6f 73 65 73 74  urns>The closest
34c0: 2d 6d 61 74 63 68 20 2e 4e 45 54 20 74 79 70 65  -match .NET type
34d0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 69  </returns>.    i
34e0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 54  nternal static T
34f0: 79 70 65 20 44 62 54 79 70 65 54 6f 54 79 70 65  ype DbTypeToType
3500: 28 44 62 54 79 70 65 20 74 79 70 29 0a 20 20 20  (DbType typ).   
3510: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
3520: 5f 64 62 74 79 70 65 54 6f 54 79 70 65 5b 28 69  _dbtypeToType[(i
3530: 6e 74 29 74 79 70 5d 3b 0a 20 20 20 20 7d 0a 0a  nt)typ];.    }..
3540: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
3550: 69 63 20 54 79 70 65 5b 5d 20 5f 64 62 74 79 70  ic Type[] _dbtyp
3560: 65 54 6f 54 79 70 65 20 3d 20 7b 0a 20 20 20 20  eToType = {.    
3570: 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29    typeof(string)
3580: 2c 20 20 20 2f 2f 20 30 0a 20 20 20 20 20 20 74  ,   // 0.      t
3590: 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 2c 20 20  ypeof(byte[]),  
35a0: 20 2f 2f 20 31 0a 20 20 20 20 20 20 74 79 70 65   // 1.      type
35b0: 6f 66 28 62 79 74 65 29 2c 20 20 20 20 20 2f 2f  of(byte),     //
35c0: 20 32 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28   2.      typeof(
35d0: 62 6f 6f 6c 29 2c 20 20 20 20 20 2f 2f 20 33 0a  bool),     // 3.
35e0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 64 65 63        typeof(dec
35f0: 69 6d 61 6c 29 2c 20 20 2f 2f 20 34 0a 20 20 20  imal),  // 4.   
3600: 20 20 20 74 79 70 65 6f 66 28 44 61 74 65 54 69     typeof(DateTi
3610: 6d 65 29 2c 20 2f 2f 20 35 0a 20 20 20 20 20 20  me), // 5.      
3620: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
3630: 2c 20 2f 2f 20 36 0a 20 20 20 20 20 20 74 79 70  , // 6.      typ
3640: 65 6f 66 28 64 65 63 69 6d 61 6c 29 2c 20 20 2f  eof(decimal),  /
3650: 2f 20 37 0a 20 20 20 20 20 20 74 79 70 65 6f 66  / 7.      typeof
3660: 28 64 6f 75 62 6c 65 29 2c 20 20 20 2f 2f 20 38  (double),   // 8
3670: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 47 75  .      typeof(Gu
3680: 69 64 29 2c 20 20 20 20 20 2f 2f 20 39 0a 20 20  id),     // 9.  
3690: 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74 31 36      typeof(Int16
36a0: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
36b0: 49 6e 74 33 32 29 2c 0a 20 20 20 20 20 20 74 79  Int32),.      ty
36c0: 70 65 6f 66 28 49 6e 74 36 34 29 2c 0a 20 20 20  peof(Int64),.   
36d0: 20 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74     typeof(object
36e0: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
36f0: 73 62 79 74 65 29 2c 0a 20 20 20 20 20 20 74 79  sbyte),.      ty
3700: 70 65 6f 66 28 66 6c 6f 61 74 29 2c 0a 20 20 20  peof(float),.   
3710: 20 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67     typeof(string
3720: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
3730: 44 61 74 65 54 69 6d 65 29 2c 0a 20 20 20 20 20  DateTime),.     
3740: 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 2c   typeof(UInt16),
3750: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 55 49  .      typeof(UI
3760: 6e 74 33 32 29 2c 0a 20 20 20 20 20 20 74 79 70  nt32),.      typ
3770: 65 6f 66 28 55 49 6e 74 36 34 29 2c 0a 20 20 20  eof(UInt64),.   
3780: 20 20 20 74 79 70 65 6f 66 28 64 6f 75 62 6c 65     typeof(double
3790: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
37a0: 73 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 74  string),.      t
37b0: 79 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 0a 20  ypeof(string),. 
37c0: 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72 69       typeof(stri
37d0: 6e 67 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f  ng),.      typeo
37e0: 66 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20  f(string),   // 
37f0: 32 35 20 28 58 6d 6c 29 0a 20 20 20 20 7d 3b 0a  25 (Xml).    };.
3800: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3810: 79 3e 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 20 61  y>.    /// For a
3820: 20 67 69 76 65 6e 20 74 79 70 65 2c 20 72 65 74   given type, ret
3830: 75 72 6e 20 74 68 65 20 63 6c 6f 73 65 73 74 2d  urn the closest-
3840: 6d 61 74 63 68 20 53 51 4c 69 74 65 20 54 79 70  match SQLite Typ
3850: 65 41 66 66 69 6e 69 74 79 2c 20 77 68 69 63 68  eAffinity, which
3860: 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 61 6e 64   only understand
3870: 73 20 61 20 76 65 72 79 20 6c 69 6d 69 74 65 64  s a very limited
3880: 20 73 75 62 73 65 74 20 6f 66 20 74 79 70 65 73   subset of types
3890: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
38a0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
38b0: 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54  ram name="typ">T
38c0: 68 65 20 74 79 70 65 20 74 6f 20 65 76 61 6c 75  he type to evalu
38d0: 61 74 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ate</param>.    
38e0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
38f0: 20 53 51 4c 69 74 65 20 74 79 70 65 20 61 66 66   SQLite type aff
3900: 69 6e 69 74 79 20 66 6f 72 20 74 68 61 74 20 74  inity for that t
3910: 79 70 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  ype.</returns>. 
3920: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
3930: 69 63 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  ic TypeAffinity 
3940: 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28 54  TypeToAffinity(T
3950: 79 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a 20  ype typ).    {. 
3960: 20 20 20 20 20 54 79 70 65 43 6f 64 65 20 74 63       TypeCode tc
3970: 20 3d 20 54 79 70 65 2e 47 65 74 54 79 70 65 43   = Type.GetTypeC
3980: 6f 64 65 28 74 79 70 29 3b 0a 20 20 20 20 20 20  ode(typ);.      
3990: 69 66 20 28 74 63 20 3d 3d 20 54 79 70 65 43 6f  if (tc == TypeCo
39a0: 64 65 2e 4f 62 6a 65 63 74 29 0a 20 20 20 20 20  de.Object).     
39b0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74   {.        if (t
39c0: 79 70 20 3d 3d 20 74 79 70 65 6f 66 28 62 79 74  yp == typeof(byt
39d0: 65 5b 5d 29 29 0a 20 20 20 20 20 20 20 20 20 20  e[])).          
39e0: 72 65 74 75 72 6e 20 54 79 70 65 41 66 66 69 6e  return TypeAffin
39f0: 69 74 79 2e 42 6c 6f 62 3b 0a 20 20 20 20 20 20  ity.Blob;.      
3a00: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20    else.         
3a10: 20 72 65 74 75 72 6e 20 54 79 70 65 41 66 66 69   return TypeAffi
3a20: 6e 69 74 79 2e 54 65 78 74 3b 0a 20 20 20 20 20  nity.Text;.     
3a30: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
3a40: 5f 74 79 70 65 63 6f 64 65 41 66 66 69 6e 69 74  _typecodeAffinit
3a50: 69 65 73 5b 28 69 6e 74 29 74 63 5d 3b 0a 20 20  ies[(int)tc];.  
3a60: 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65    }..    private
3a70: 20 73 74 61 74 69 63 20 54 79 70 65 41 66 66 69   static TypeAffi
3a80: 6e 69 74 79 5b 5d 20 5f 74 79 70 65 63 6f 64 65  nity[] _typecode
3a90: 41 66 66 69 6e 69 74 69 65 73 20 3d 20 7b 0a 20  Affinities = {. 
3aa0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
3ab0: 79 2e 4e 75 6c 6c 2c 0a 20 20 20 20 20 20 54 79  y.Null,.      Ty
3ac0: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 2c  peAffinity.Blob,
3ad0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
3ae0: 69 74 79 2e 4e 75 6c 6c 2c 0a 20 20 20 20 20 20  ity.Null,.      
3af0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
3b00: 36 34 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66  64,.      TypeAf
3b10: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a 20 20  finity.Int64,.  
3b20: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
3b30: 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20 20 54 79  .Int64,.      Ty
3b40: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
3b50: 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ,.      TypeAffi
3b60: 6e 69 74 79 2e 49 6e 74 36 34 2c 20 2f 2f 20 37  nity.Int64, // 7
3b70: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
3b80: 69 74 79 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20  ity.Int64,.     
3b90: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
3ba0: 74 36 34 2c 0a 20 20 20 20 20 20 54 79 70 65 41  t64,.      TypeA
3bb0: 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a 20  ffinity.Int64,. 
3bc0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
3bd0: 79 2e 49 6e 74 36 34 2c 20 2f 2f 20 31 31 0a 20  y.Int64, // 11. 
3be0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
3bf0: 79 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20 20 54  y.Int64,.      T
3c00: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62  ypeAffinity.Doub
3c10: 6c 65 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66  le,.      TypeAf
3c20: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 0a 20  finity.Double,. 
3c30: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
3c40: 79 2e 44 6f 75 62 6c 65 2c 0a 20 20 20 20 20 20  y.Double,.      
3c50: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
3c60: 65 54 69 6d 65 2c 0a 20 20 20 20 20 20 54 79 70  eTime,.      Typ
3c70: 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 0a  eAffinity.Null,.
3c80: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
3c90: 74 79 2e 54 65 78 74 2c 0a 20 20 20 20 7d 3b 0a  ty.Text,.    };.
3ca0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3cb0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 20 61  y>.    /// For a
3cc0: 20 67 69 76 65 6e 20 74 79 70 65 20 6e 61 6d 65   given type name
3cd0: 2c 20 72 65 74 75 72 6e 20 61 20 63 6c 6f 73 65  , return a close
3ce0: 73 74 2d 6d 61 74 63 68 20 2e 4e 45 54 20 74 79  st-match .NET ty
3cf0: 70 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  pe.    /// </sum
3d00: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
3d10: 61 72 61 6d 20 6e 61 6d 65 3d 22 4e 61 6d 65 22  aram name="Name"
3d20: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
3d30: 20 74 79 70 65 20 74 6f 20 6d 61 74 63 68 3c 2f   type to match</
3d40: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
3d50: 72 65 74 75 72 6e 73 3e 54 68 65 20 2e 4e 45 54  returns>The .NET
3d60: 20 44 42 54 79 70 65 20 74 68 65 20 74 65 78 74   DBType the text
3d70: 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 3c 2f   evaluates to.</
3d80: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74  returns>.    int
3d90: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 44 62 54  ernal static DbT
3da0: 79 70 65 20 54 79 70 65 4e 61 6d 65 54 6f 44 62  ype TypeNameToDb
3db0: 54 79 70 65 28 73 74 72 69 6e 67 20 4e 61 6d 65  Type(string Name
3dc0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
3dd0: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
3de0: 72 45 6d 70 74 79 28 4e 61 6d 65 29 29 20 72 65  rEmpty(Name)) re
3df0: 74 75 72 6e 20 44 62 54 79 70 65 2e 4f 62 6a 65  turn DbType.Obje
3e00: 63 74 3b 0a 0a 20 20 20 20 20 20 4e 61 6d 65 20  ct;..      Name 
3e10: 3d 20 4e 61 6d 65 2e 54 6f 55 70 70 65 72 28 43  = Name.ToUpper(C
3e20: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
3e30: 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 0a 20  iantCulture);.. 
3e40: 20 20 20 20 20 69 6e 74 20 78 20 3d 20 5f 74 79       int x = _ty
3e50: 70 65 4e 61 6d 65 73 2e 4c 65 6e 67 74 68 3b 0a  peNames.Length;.
3e60: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
3e70: 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b 2b   = 0; n < x; n++
3e80: 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  ).      {.      
3e90: 20 20 69 66 20 28 4e 61 6d 65 2e 53 74 61 72 74    if (Name.Start
3ea0: 73 57 69 74 68 28 5f 74 79 70 65 4e 61 6d 65 73  sWith(_typeNames
3eb0: 5b 6e 5d 2e 74 79 70 65 4e 61 6d 65 29 29 0a 20  [n].typeName)). 
3ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3ed0: 5f 74 79 70 65 4e 61 6d 65 73 5b 6e 5d 2e 64 61  _typeNames[n].da
3ee0: 74 61 54 79 70 65 3b 20 0a 20 20 20 20 20 20 7d  taType; .      }
3ef0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 62  .      return Db
3f00: 54 79 70 65 2e 4f 62 6a 65 63 74 3b 0a 20 20 20  Type.Object;.   
3f10: 20 7d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f   }.    #endregio
3f20: 6e 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  n..    private s
3f30: 74 61 74 69 63 20 53 51 4c 69 74 65 54 79 70 65  tatic SQLiteType
3f40: 4e 61 6d 65 73 5b 5d 20 5f 74 79 70 65 4e 61 6d  Names[] _typeNam
3f50: 65 73 20 3d 20 7b 0a 20 20 20 20 20 20 6e 65 77  es = {.      new
3f60: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
3f70: 28 22 43 4f 55 4e 54 45 52 22 2c 20 44 62 54 79  ("COUNTER", DbTy
3f80: 70 65 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20 20  pe.Int64),.     
3f90: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
3fa0: 61 6d 65 73 28 22 41 55 54 4f 49 4e 43 52 45 4d  ames("AUTOINCREM
3fb0: 45 4e 54 22 2c 20 44 62 54 79 70 65 2e 49 6e 74  ENT", DbType.Int
3fc0: 36 34 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  64),.      new S
3fd0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
3fe0: 49 44 45 4e 54 49 54 59 22 2c 20 44 62 54 79 70  IDENTITY", DbTyp
3ff0: 65 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20 20 20  e.Int64),.      
4000: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
4010: 6d 65 73 28 22 4c 4f 4e 47 22 2c 20 44 62 54 79  mes("LONG", DbTy
4020: 70 65 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20 20  pe.Int64),.     
4030: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4040: 61 6d 65 73 28 22 54 49 4e 59 49 4e 54 22 2c 20  ames("TINYINT", 
4050: 44 62 54 79 70 65 2e 42 79 74 65 29 2c 0a 20 20  DbType.Byte),.  
4060: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
4070: 70 65 4e 61 6d 65 73 28 22 49 4e 54 45 47 45 52  peNames("INTEGER
4080: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  ", DbType.Int64)
4090: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
40a0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 49 4e 54  teTypeNames("INT
40b0: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29  ", DbType.Int32)
40c0: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
40d0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 56 41 52  teTypeNames("VAR
40e0: 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74  CHAR", DbType.St
40f0: 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65 77  ring),.      new
4100: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
4110: 28 22 4e 56 41 52 43 48 41 52 22 2c 20 44 62 54  ("NVARCHAR", DbT
4120: 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20  ype.String),.   
4130: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
4140: 65 4e 61 6d 65 73 28 22 43 48 41 52 22 2c 20 44  eNames("CHAR", D
4150: 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20  bType.String),. 
4160: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4170: 79 70 65 4e 61 6d 65 73 28 22 54 45 58 54 22 2c  ypeNames("TEXT",
4180: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c   DbType.String),
4190: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
41a0: 65 54 79 70 65 4e 61 6d 65 73 28 22 44 4f 55 42  eTypeNames("DOUB
41b0: 4c 45 22 2c 20 44 62 54 79 70 65 2e 44 6f 75 62  LE", DbType.Doub
41c0: 6c 65 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  le),.      new S
41d0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
41e0: 46 4c 4f 41 54 22 2c 20 44 62 54 79 70 65 2e 44  FLOAT", DbType.D
41f0: 6f 75 62 6c 65 29 2c 0a 20 20 20 20 20 20 6e 65  ouble),.      ne
4200: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
4210: 73 28 22 52 45 41 4c 22 2c 20 44 62 54 79 70 65  s("REAL", DbType
4220: 2e 53 69 6e 67 6c 65 29 2c 20 20 20 20 20 20 20  .Single),       
4230: 20 20 20 0a 20 20 20 20 20 20 6e 65 77 20 53 51     .      new SQ
4240: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42  LiteTypeNames("B
4250: 49 54 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c  IT", DbType.Bool
4260: 65 61 6e 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  ean),.      new 
4270: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
4280: 22 59 45 53 4e 4f 22 2c 20 44 62 54 79 70 65 2e  "YESNO", DbType.
4290: 42 6f 6f 6c 65 61 6e 29 2c 0a 20 20 20 20 20 20  Boolean),.      
42a0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
42b0: 6d 65 73 28 22 4c 4f 47 49 43 41 4c 22 2c 20 44  mes("LOGICAL", D
42c0: 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0a  bType.Boolean),.
42d0: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
42e0: 54 79 70 65 4e 61 6d 65 73 28 22 42 4f 4f 4c 22  TypeNames("BOOL"
42f0: 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e  , DbType.Boolean
4300: 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ),.      new SQL
4310: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4e 55  iteTypeNames("NU
4320: 4d 45 52 49 43 22 2c 20 44 62 54 79 70 65 2e 44  MERIC", DbType.D
4330: 65 63 69 6d 61 6c 29 2c 0a 20 20 20 20 20 20 6e  ecimal),.      n
4340: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
4350: 65 73 28 22 44 45 43 49 4d 41 4c 22 2c 20 44 62  es("DECIMAL", Db
4360: 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0a 20  Type.Decimal),. 
4370: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4380: 79 70 65 4e 61 6d 65 73 28 22 4d 4f 4e 45 59 22  ypeNames("MONEY"
4390: 2c 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c  , DbType.Decimal
43a0: 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ),.      new SQL
43b0: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 43 55  iteTypeNames("CU
43c0: 52 52 45 4e 43 59 22 2c 20 44 62 54 79 70 65 2e  RRENCY", DbType.
43d0: 44 65 63 69 6d 61 6c 29 2c 0a 20 20 20 20 20 20  Decimal),.      
43e0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
43f0: 6d 65 73 28 22 54 49 4d 45 22 2c 20 44 62 54 79  mes("TIME", DbTy
4400: 70 65 2e 44 61 74 65 54 69 6d 65 29 2c 0a 20 20  pe.DateTime),.  
4410: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
4420: 70 65 4e 61 6d 65 73 28 22 44 41 54 45 22 2c 20  peNames("DATE", 
4430: 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29  DbType.DateTime)
4440: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
4450: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42 4c 4f  teTypeNames("BLO
4460: 42 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72  B", DbType.Binar
4470: 79 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  y),.      new SQ
4480: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42  LiteTypeNames("B
4490: 49 4e 41 52 59 22 2c 20 44 62 54 79 70 65 2e 42  INARY", DbType.B
44a0: 69 6e 61 72 79 29 2c 0a 20 20 20 20 20 20 6e 65  inary),.      ne
44b0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
44c0: 73 28 22 56 41 52 42 49 4e 41 52 59 22 2c 20 44  s("VARBINARY", D
44d0: 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a 20  bType.Binary),. 
44e0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
44f0: 79 70 65 4e 61 6d 65 73 28 22 49 4d 41 47 45 22  ypeNames("IMAGE"
4500: 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29  , DbType.Binary)
4510: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
4520: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 47 45 4e  teTypeNames("GEN
4530: 45 52 41 4c 22 2c 20 44 62 54 79 70 65 2e 42 69  ERAL", DbType.Bi
4540: 6e 61 72 79 29 2c 0a 20 20 20 20 20 20 6e 65 77  nary),.      new
4550: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
4560: 28 22 4f 4c 45 4f 42 4a 45 43 54 22 2c 20 44 62  ("OLEOBJECT", Db
4570: 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a 20 20  Type.Binary),.  
4580: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
4590: 70 65 4e 61 6d 65 73 28 22 47 55 49 44 22 2c 20  peNames("GUID", 
45a0: 44 62 54 79 70 65 2e 47 75 69 64 29 2c 0a 20 20  DbType.Guid),.  
45b0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
45c0: 70 65 4e 61 6d 65 73 28 22 55 4e 49 51 55 45 49  peNames("UNIQUEI
45d0: 44 45 4e 54 49 46 49 45 52 22 2c 20 44 62 54 79  DENTIFIER", DbTy
45e0: 70 65 2e 47 75 69 64 29 2c 0a 20 20 20 20 20 20  pe.Guid),.      
45f0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
4600: 6d 65 73 28 22 4d 45 4d 4f 22 2c 20 44 62 54 79  mes("MEMO", DbTy
4610: 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20  pe.String),.    
4620: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
4630: 4e 61 6d 65 73 28 22 4e 4f 54 45 22 2c 20 44 62  Names("NOTE", Db
4640: 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20  Type.String),.  
4650: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
4660: 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 54 45 58  peNames("LONGTEX
4670: 54 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  T", DbType.Strin
4680: 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  g),.      new SQ
4690: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4c  LiteTypeNames("L
46a0: 4f 4e 47 43 48 41 52 22 2c 20 44 62 54 79 70 65  ONGCHAR", DbType
46b0: 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20  .String),.      
46c0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
46d0: 6d 65 73 28 22 53 4d 41 4c 4c 49 4e 54 22 2c 20  mes("SMALLINT", 
46e0: 44 62 54 79 70 65 2e 49 6e 74 31 36 29 2c 0a 20  DbType.Int16),. 
46f0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4700: 79 70 65 4e 61 6d 65 73 28 22 42 49 47 49 4e 54  ypeNames("BIGINT
4710: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  ", DbType.Int64)
4720: 2c 0a 20 20 20 20 7d 3b 0a 20 20 7d 0a 7d 0a     ,.    };.  }.}.