System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact f62b1ba1f4eb0f21d16637a619c6ba4a0ec4219c:


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 20 20 75 73 69  alization;.  usi
01e0: 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b 0a  ng System.Text;.
01f0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
0200: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20  OMPACTFRAMEWORK 
0210: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0220: 43 6f 6d 70 6f 6e 65 6e 74 4d 6f 64 65 6c 2e 44  ComponentModel.D
0230: 65 73 69 67 6e 3b 0a 23 65 6e 64 69 66 0a 0a 20  esign;.#endif.. 
0240: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0250: 20 2f 2f 2f 20 53 51 4c 69 74 65 20 68 61 73 20   /// SQLite has 
0260: 76 65 72 79 20 6c 69 6d 69 74 65 64 20 74 79 70  very limited typ
0270: 65 73 2c 20 61 6e 64 20 69 73 20 69 6e 68 65 72  es, and is inher
0280: 65 6e 74 6c 79 20 74 65 78 74 2d 62 61 73 65 64  ently text-based
0290: 2e 20 20 54 68 65 20 66 69 72 73 74 20 35 20 74  .  The first 5 t
02a0: 79 70 65 73 20 62 65 6c 6f 77 20 72 65 70 72 65  ypes below repre
02b0: 73 65 6e 74 20 74 68 65 20 73 75 6d 20 6f 66 20  sent the sum of 
02c0: 61 6c 6c 20 74 79 70 65 73 20 53 51 4c 69 74 65  all types SQLite
02d0: 0a 20 20 2f 2f 2f 20 75 6e 64 65 72 73 74 61 6e  .  /// understan
02e0: 64 73 2e 20 20 54 68 65 20 44 61 74 65 54 69 6d  ds.  The DateTim
02f0: 65 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f 20 74  e extension to t
0300: 68 65 20 73 70 65 63 20 69 73 20 66 6f 72 20 69  he spec is for i
0310: 6e 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79  nternal use only
0320: 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0330: 79 3e 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  y>.  public enum
0340: 20 54 79 70 65 41 66 66 69 6e 69 74 79 0a 20 20   TypeAffinity.  
0350: 7b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  {.    /// <summa
0360: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74 20  ry>.    /// Not 
0370: 75 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  used.    /// </s
0380: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 55 6e 69 6e  ummary>.    Unin
0390: 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 2c 0a 20  itialized = 0,. 
03a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
03b0: 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 20 69 6e 74  .    /// All int
03c0: 65 67 65 72 73 20 69 6e 20 53 51 4c 69 74 65 20  egers in SQLite 
03d0: 64 65 66 61 75 6c 74 20 74 6f 20 49 6e 74 36 34  default to Int64
03e0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
03f0: 72 79 3e 0a 20 20 20 20 49 6e 74 36 34 20 3d 20  ry>.    Int64 = 
0400: 31 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  1,.    /// <summ
0410: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c  ary>.    /// All
0420: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
0430: 6e 75 6d 62 65 72 73 20 69 6e 20 53 51 4c 69 74  numbers in SQLit
0440: 65 20 64 65 66 61 75 6c 74 20 74 6f 20 64 6f 75  e default to dou
0450: 62 6c 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ble.    /// </su
0460: 6d 6d 61 72 79 3e 0a 20 20 20 20 44 6f 75 62 6c  mmary>.    Doubl
0470: 65 20 3d 20 32 2c 0a 20 20 20 20 2f 2f 2f 20 3c  e = 2,.    /// <
0480: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0490: 20 54 68 65 20 64 65 66 61 75 6c 74 20 64 61 74   The default dat
04a0: 61 20 74 79 70 65 20 6f 66 20 53 51 4c 69 74 65  a type of SQLite
04b0: 20 69 73 20 74 65 78 74 0a 20 20 20 20 2f 2f 2f   is text.    ///
04c0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
04d0: 54 65 78 74 20 3d 20 33 2c 0a 20 20 20 20 2f 2f  Text = 3,.    //
04e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
04f0: 2f 2f 2f 20 54 79 70 69 63 61 6c 6c 79 20 62 6c  /// Typically bl
0500: 6f 62 20 74 79 70 65 73 20 61 72 65 20 6f 6e 6c  ob types are onl
0510: 79 20 73 65 65 6e 20 77 68 65 6e 20 72 65 74 75  y seen when retu
0520: 72 6e 65 64 20 66 72 6f 6d 20 61 20 66 75 6e 63  rned from a func
0530: 74 69 6f 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  tion.    /// </s
0540: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 42 6c 6f 62  ummary>.    Blob
0550: 20 3d 20 34 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73   = 4,.    /// <s
0560: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0570: 4e 75 6c 6c 20 74 79 70 65 73 20 63 61 6e 20 62  Null types can b
0580: 65 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20  e returned from 
0590: 66 75 6e 63 74 69 6f 6e 73 0a 20 20 20 20 2f 2f  functions.    //
05a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
05b0: 20 4e 75 6c 6c 20 3d 20 35 2c 0a 20 20 20 20 2f   Null = 5,.    /
05c0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
05d0: 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e   /// Used intern
05e0: 61 6c 6c 79 20 62 79 20 74 68 69 73 20 70 72 6f  ally by this pro
05f0: 76 69 64 65 72 0a 20 20 20 20 2f 2f 2f 20 3c 2f  vider.    /// </
0600: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 44 61 74  summary>.    Dat
0610: 65 54 69 6d 65 20 3d 20 31 30 2c 0a 20 20 20 20  eTime = 10,.    
0620: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0630: 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72    /// Used inter
0640: 6e 61 6c 6c 79 0a 20 20 20 20 2f 2f 2f 20 3c 2f  nally.    /// </
0650: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 4e 6f 6e  summary>.    Non
0660: 65 20 3d 20 32 35 36 2c 0a 20 20 7d 0a 0a 20 20  e = 256,.  }..  
0670: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0680: 2f 2f 2f 20 54 68 69 73 20 69 6d 70 6c 65 6d 65  /// This impleme
0690: 6e 74 61 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74  ntation of SQLit
06a0: 65 20 66 6f 72 20 41 44 4f 2e 4e 45 54 20 63 61  e for ADO.NET ca
06b0: 6e 20 70 72 6f 63 65 73 73 20 64 61 74 65 2f 74  n process date/t
06c0: 69 6d 65 20 66 69 65 6c 64 73 20 69 6e 20 64 61  ime fields in da
06d0: 74 61 62 61 73 65 73 20 69 6e 20 6f 6e 6c 79 20  tabases in only 
06e0: 6f 6e 65 20 6f 66 20 74 77 6f 20 66 6f 72 6d 61  one of two forma
06f0: 74 73 2e 20 20 54 69 63 6b 73 20 61 6e 64 20 49  ts.  Ticks and I
0700: 53 4f 38 36 30 31 2e 0a 20 20 2f 2f 2f 20 54 69  SO8601..  /// Ti
0710: 63 6b 73 20 69 73 20 69 6e 68 65 72 65 6e 74 6c  cks is inherentl
0720: 79 20 6d 6f 72 65 20 61 63 63 75 72 61 74 65 2c  y more accurate,
0730: 20 62 75 74 20 6c 65 73 73 20 63 6f 6d 70 61 74   but less compat
0740: 69 62 6c 65 20 77 69 74 68 20 33 72 64 20 70 61  ible with 3rd pa
0750: 72 74 79 20 74 6f 6f 6c 73 20 74 68 61 74 20 71  rty tools that q
0760: 75 65 72 79 20 74 68 65 20 64 61 74 61 62 61 73  uery the databas
0770: 65 2c 20 61 6e 64 20 72 65 6e 64 65 72 73 20 74  e, and renders t
0780: 68 65 20 44 61 74 65 54 69 6d 65 20 66 69 65 6c  he DateTime fiel
0790: 64 0a 20 20 2f 2f 2f 20 75 6e 72 65 61 64 61 62  d.  /// unreadab
07a0: 6c 65 20 77 69 74 68 6f 75 74 20 70 6f 73 74 2d  le without post-
07b0: 70 72 6f 63 65 73 73 69 6e 67 2e 0a 20 20 2f 2f  processing..  //
07c0: 2f 20 49 53 4f 38 36 30 31 20 69 73 20 6d 6f 72  / ISO8601 is mor
07d0: 65 20 63 6f 6d 70 61 74 69 62 6c 65 2c 20 72 65  e compatible, re
07e0: 61 64 61 62 6c 65 2c 20 66 75 6c 6c 79 2d 70 72  adable, fully-pr
07f0: 6f 63 65 73 73 61 62 6c 65 2c 20 62 75 74 20 6c  ocessable, but l
0800: 65 73 73 20 61 63 63 75 72 61 74 65 20 61 73 20  ess accurate as 
0810: 69 74 20 64 6f 65 73 6e 27 74 20 70 72 6f 76 69  it doesn't provi
0820: 64 65 20 74 69 6d 65 20 64 6f 77 6e 20 74 6f 20  de time down to 
0830: 66 72 61 63 74 69 6f 6e 73 20 6f 66 20 61 20 73  fractions of a s
0840: 65 63 6f 6e 64 2e 0a 20 20 2f 2f 2f 20 3c 2f 73  econd..  /// </s
0850: 75 6d 6d 61 72 79 3e 0a 20 20 70 75 62 6c 69 63  ummary>.  public
0860: 20 65 6e 75 6d 20 53 51 4c 69 74 65 44 61 74 65   enum SQLiteDate
0870: 46 6f 72 6d 61 74 73 0a 20 20 7b 0a 20 20 20 20  Formats.  {.    
0880: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0890: 20 20 2f 2f 2f 20 55 73 69 6e 67 20 74 69 63 6b    /// Using tick
08a0: 73 20 69 73 20 6d 6f 72 65 20 61 63 63 75 72 61  s is more accura
08b0: 74 65 20 62 75 74 20 6c 65 73 73 20 63 6f 6d 70  te but less comp
08c0: 61 74 69 62 6c 65 20 77 69 74 68 20 6f 74 68 65  atible with othe
08d0: 72 20 76 69 65 77 65 72 73 20 61 6e 64 20 75 74  r viewers and ut
08e0: 69 6c 69 74 69 65 73 20 74 68 61 74 20 61 63 63  ilities that acc
08f0: 65 73 73 20 79 6f 75 72 20 64 61 74 61 62 61 73  ess your databas
0900: 65 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
0910: 6d 61 72 79 3e 0a 20 20 20 20 54 69 63 6b 73 20  mary>.    Ticks 
0920: 3d 20 30 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  = 0,.    /// <su
0930: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54  mmary>.    /// T
0940: 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 6d 61  he default forma
0950: 74 20 66 6f 72 20 74 68 69 73 20 70 72 6f 76 69  t for this provi
0960: 64 65 72 2e 20 20 4d 6f 72 65 20 63 6f 6d 70 61  der.  More compa
0970: 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74  tible with SQLit
0980: 65 27 73 20 69 6e 74 65 6e 64 65 64 20 75 73 61  e's intended usa
0990: 67 65 20 6f 66 20 64 61 74 65 74 69 6d 65 73 2c  ge of datetimes,
09a0: 20 62 75 74 20 6f 76 65 72 61 6c 6c 20 6c 65 73   but overall les
09b0: 73 20 61 63 63 75 72 61 74 65 20 74 68 61 6e 20  s accurate than 
09c0: 54 69 63 6b 73 20 61 73 20 69 74 20 64 6f 65 73  Ticks as it does
09d0: 6e 27 74 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  n't.    /// nati
09e0: 76 65 6c 79 20 73 75 70 70 6f 72 74 20 74 69 6d  vely support tim
09f0: 65 73 20 64 6f 77 6e 20 74 6f 20 66 72 61 63 74  es down to fract
0a00: 69 6f 6e 73 20 6f 66 20 61 20 73 65 63 6f 6e 64  ions of a second
0a10: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0a20: 61 72 79 3e 0a 20 20 20 20 49 53 4f 38 36 30 31  ary>.    ISO8601
0a30: 20 3d 20 31 2c 0a 20 20 7d 0a 0a 20 20 2f 2f 2f   = 1,.  }..  ///
0a40: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f   <summary>.  ///
0a50: 20 53 74 72 75 63 74 20 75 73 65 64 20 69 6e 74   Struct used int
0a60: 65 72 6e 61 6c 6c 79 20 74 6f 20 64 65 74 65 72  ernally to deter
0a70: 6d 69 6e 65 20 74 68 65 20 64 61 74 61 74 79 70  mine the datatyp
0a80: 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  e of a column in
0a90: 20 61 20 72 65 73 75 6c 74 73 65 74 0a 20 20 2f   a resultset.  /
0aa0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0ab0: 69 6e 74 65 72 6e 61 6c 20 73 74 72 75 63 74 20  internal struct 
0ac0: 53 51 4c 69 74 65 54 79 70 65 0a 20 20 7b 0a 20  SQLiteType.  {. 
0ad0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0ae0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 62 54  .    /// The DbT
0af0: 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ype of the colum
0b00: 6e 2c 20 6f 72 20 44 62 54 79 70 65 2e 4f 62 6a  n, or DbType.Obj
0b10: 65 63 74 20 69 66 20 69 74 20 63 61 6e 6e 6f 74  ect if it cannot
0b20: 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   be determined. 
0b30: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0b40: 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44  >.    internal D
0b50: 62 54 79 70 65 20 54 79 70 65 3b 0a 20 20 20 20  bType Type;.    
0b60: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0b70: 20 20 2f 2f 2f 20 54 68 65 20 61 66 66 69 6e 69    /// The affini
0b80: 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c 20  ty of a column, 
0b90: 75 73 65 64 20 66 6f 72 20 65 78 70 72 65 73 73  used for express
0ba0: 69 6f 6e 73 20 6f 72 20 77 68 65 6e 20 54 79 70  ions or when Typ
0bb0: 65 20 69 73 20 44 62 54 79 70 65 2e 4f 62 6a 65  e is DbType.Obje
0bc0: 63 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ct.    /// </sum
0bd0: 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74 65 72 6e  mary>.    intern
0be0: 61 6c 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  al TypeAffinity 
0bf0: 41 66 66 69 6e 69 74 79 3b 0a 20 20 7d 0a 0a 20  Affinity;.  }.. 
0c00: 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 75 63 74   internal struct
0c10: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
0c20: 0a 20 20 7b 0a 20 20 20 20 69 6e 74 65 72 6e 61  .  {.    interna
0c30: 6c 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  l SQLiteTypeName
0c40: 73 28 73 74 72 69 6e 67 20 6e 65 77 74 79 70 65  s(string newtype
0c50: 4e 61 6d 65 2c 20 44 62 54 79 70 65 20 6e 65 77  Name, DbType new
0c60: 64 61 74 61 54 79 70 65 29 0a 20 20 20 20 7b 0a  dataType).    {.
0c70: 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 20 3d        typeName =
0c80: 20 6e 65 77 74 79 70 65 4e 61 6d 65 3b 0a 20 20   newtypeName;.  
0c90: 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20 6e      dataType = n
0ca0: 65 77 64 61 74 61 54 79 70 65 3b 0a 20 20 20 20  ewdataType;.    
0cb0: 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  }..    internal 
0cc0: 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 3b  string typeName;
0cd0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44 62  .    internal Db
0ce0: 54 79 70 65 20 64 61 74 61 54 79 70 65 3b 0a 20  Type dataType;. 
0cf0: 20 7d 0a 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61   }..  /// <summa
0d00: 72 79 3e 0a 20 20 2f 2f 2f 20 54 68 69 73 20 62  ry>.  /// This b
0d10: 61 73 65 20 63 6c 61 73 73 20 70 72 6f 76 69 64  ase class provid
0d20: 65 73 20 64 61 74 61 74 79 70 65 20 63 6f 6e 76  es datatype conv
0d30: 65 72 73 69 6f 6e 20 73 65 72 76 69 63 65 73 20  ersion services 
0d40: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 70  for the SQLite p
0d50: 72 6f 76 69 64 65 72 2e 0a 20 20 2f 2f 2f 20 3c  rovider..  /// <
0d60: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 70 75 62 6c  /summary>.  publ
0d70: 69 63 20 61 62 73 74 72 61 63 74 20 63 6c 61 73  ic abstract clas
0d80: 73 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 0a  s SQLiteConvert.
0d90: 20 20 7b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d    {.    /// <sum
0da0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 41 6e  mary>.    /// An
0db0: 20 61 72 72 61 79 20 6f 66 20 49 53 4f 38 36 30   array of ISO860
0dc0: 31 20 64 61 74 65 74 69 6d 65 20 66 6f 72 6d 61  1 datetime forma
0dd0: 74 73 20 77 65 20 73 75 70 70 6f 72 74 20 63 6f  ts we support co
0de0: 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 0a 20 20  nversion from.  
0df0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e00: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
0e10: 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 5f 64 61  tic string[] _da
0e20: 74 65 74 69 6d 65 46 6f 72 6d 61 74 73 20 3d 20  tetimeFormats = 
0e30: 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 22 79  new string[] {"y
0e40: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a  yyy-MM-dd HH:mm:
0e50: 73 73 22 2c 0a 09 09 09 09 09 09 09 09 09 09 09  ss",............
0e60: 09 09 09 09 09 09 20 20 22 79 79 79 79 4d 4d 64  ......  "yyyyMMd
0e70: 64 48 48 6d 6d 73 73 22 2c 0a 09 09 09 09 09 09  dHHmmss",.......
0e80: 09 09 09 09 09 09 09 09 09 09 09 20 20 22 79 79  ...........  "yy
0e90: 79 79 4d 4d 64 64 54 48 48 6d 6d 73 73 66 66 66  yyMMddTHHmmssfff
0ea0: 66 66 66 66 22 2c 0a 09 09 09 09 09 09 09 09 09  ffff",..........
0eb0: 09 09 09 09 09 09 09 09 20 20 22 79 79 79 79 2d  ........  "yyyy-
0ec0: 4d 4d 2d 64 64 22 2c 0a 09 09 09 09 09 09 09 09  MM-dd",.........
0ed0: 09 09 09 09 09 09 09 09 09 20 20 22 79 79 2d 4d  .........  "yy-M
0ee0: 4d 2d 64 64 22 2c 0a 09 09 09 09 09 09 09 09 09  M-dd",..........
0ef0: 09 09 09 09 09 09 09 09 20 20 22 79 79 79 79 4d  ........  "yyyyM
0f00: 4d 64 64 22 2c 0a 09 09 09 09 09 09 09 09 09 09  Mdd",...........
0f10: 09 09 09 09 09 09 09 20 20 22 48 48 3a 6d 6d 3a  .......  "HH:mm:
0f20: 73 73 22 2c 0a 09 09 09 09 09 09 09 09 09 09 09  ss",............
0f30: 09 09 09 09 09 09 20 20 22 54 48 48 6d 6d 73 73  ......  "THHmmss
0f40: 22 0a 09 09 09 09 09 09 09 09 09 09 09 09 09 09  "...............
0f50: 09 20 7d 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73  . };..    /// <s
0f60: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0f70: 41 6e 20 55 54 46 2d 38 20 45 6e 63 6f 64 69 6e  An UTF-8 Encodin
0f80: 67 20 69 6e 73 74 61 6e 63 65 2c 20 73 6f 20 77  g instance, so w
0f90: 65 20 63 61 6e 20 63 6f 6e 76 65 72 74 20 73 74  e can convert st
0fa0: 72 69 6e 67 73 20 74 6f 20 61 6e 64 20 66 72 6f  rings to and fro
0fb0: 6d 20 55 54 46 2d 38 0a 20 20 20 20 2f 2f 2f 20  m UTF-8.    /// 
0fc0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70  </summary>.    p
0fd0: 72 69 76 61 74 65 20 45 6e 63 6f 64 69 6e 67 20  rivate Encoding 
0fe0: 5f 75 74 66 38 20 3d 20 6e 65 77 20 55 54 46 38  _utf8 = new UTF8
0ff0: 45 6e 63 6f 64 69 6e 67 28 29 3b 0a 20 20 20 20  Encoding();.    
1000: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
1010: 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c    /// The defaul
1020: 74 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  t DateTime forma
1030: 74 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61  t for this insta
1040: 6e 63 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  nce.    /// </su
1050: 6d 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61  mmary>.    priva
1060: 74 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  te SQLiteDateFor
1070: 6d 61 74 73 20 5f 64 61 74 65 74 69 6d 65 46 6f  mats _datetimeFo
1080: 72 6d 61 74 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73  rmat;.    /// <s
1090: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
10a0: 49 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20  Initializes the 
10b0: 63 6f 6e 76 65 72 73 69 6f 6e 20 63 6c 61 73 73  conversion class
10c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
10d0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
10e0: 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 22 3e 54 68  am name="fmt">Th
10f0: 65 20 64 65 66 61 75 6c 74 20 64 61 74 65 2f 74  e default date/t
1100: 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ime format to us
1110: 65 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61  e for this insta
1120: 6e 63 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  nce</param>.    
1130: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43  internal SQLiteC
1140: 6f 6e 76 65 72 74 28 53 51 4c 69 74 65 44 61 74  onvert(SQLiteDat
1150: 65 46 6f 72 6d 61 74 73 20 66 6d 74 29 0a 20 20  eFormats fmt).  
1160: 20 20 7b 0a 20 20 20 20 20 20 5f 64 61 74 65 74    {.      _datet
1170: 69 6d 65 46 6f 72 6d 61 74 20 3d 20 66 6d 74 3b  imeFormat = fmt;
1180: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67  .    }..    #reg
1190: 69 6f 6e 20 55 54 46 2d 38 20 43 6f 6e 76 65 72  ion UTF-8 Conver
11a0: 73 69 6f 6e 20 46 75 6e 63 74 69 6f 6e 73 0a 20  sion Functions. 
11b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11c0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
11d0: 73 20 61 20 73 74 72 69 6e 67 20 74 6f 20 61 20  s a string to a 
11e0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 62 79  UTF-8 encoded by
11f0: 74 65 20 61 72 72 61 79 20 73 69 7a 65 64 20 74  te array sized t
1200: 6f 20 69 6e 63 6c 75 64 65 20 61 20 6e 75 6c 6c  o include a null
1210: 2d 74 65 72 6d 69 6e 61 74 69 6e 67 20 63 68 61  -terminating cha
1220: 72 61 63 74 65 72 2e 0a 20 20 20 20 2f 2f 2f 20  racter..    /// 
1230: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
1240: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1250: 73 6f 75 72 63 65 54 65 78 74 22 3e 54 68 65 20  sourceText">The 
1260: 73 74 72 69 6e 67 20 74 6f 20 63 6f 6e 76 65 72  string to conver
1270: 74 20 74 6f 20 55 54 46 2d 38 3c 2f 70 61 72 61  t to UTF-8</para
1280: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
1290: 72 6e 73 3e 41 20 62 79 74 65 20 61 72 72 61 79  rns>A byte array
12a0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
12b0: 63 6f 6e 76 65 72 74 65 64 20 73 74 72 69 6e 67  converted string
12c0: 20 70 6c 75 73 20 61 6e 20 65 78 74 72 61 20 30   plus an extra 0
12d0: 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 62 79 74   terminating byt
12e0: 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  e at the end of 
12f0: 74 68 65 20 61 72 72 61 79 2e 3c 2f 72 65 74 75  the array.</retu
1300: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
1310: 62 79 74 65 5b 5d 20 54 6f 55 54 46 38 28 73 74  byte[] ToUTF8(st
1320: 72 69 6e 67 20 73 6f 75 72 63 65 54 65 78 74 29  ring sourceText)
1330: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 42 79 74  .    {.      Byt
1340: 65 5b 5d 20 62 79 74 65 41 72 72 61 79 3b 0a 20  e[] byteArray;. 
1350: 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20       int nlen = 
1360: 5f 75 74 66 38 2e 47 65 74 42 79 74 65 43 6f 75  _utf8.GetByteCou
1370: 6e 74 28 73 6f 75 72 63 65 54 65 78 74 29 20 2b  nt(sourceText) +
1380: 20 31 3b 0a 0a 20 20 20 20 20 20 62 79 74 65 41   1;..      byteA
1390: 72 72 61 79 20 3d 20 6e 65 77 20 62 79 74 65 5b  rray = new byte[
13a0: 6e 6c 65 6e 5d 3b 0a 20 20 20 20 20 20 6e 6c 65  nlen];.      nle
13b0: 6e 20 3d 20 5f 75 74 66 38 2e 47 65 74 42 79 74  n = _utf8.GetByt
13c0: 65 73 28 73 6f 75 72 63 65 54 65 78 74 2c 20 30  es(sourceText, 0
13d0: 2c 20 73 6f 75 72 63 65 54 65 78 74 2e 4c 65 6e  , sourceText.Len
13e0: 67 74 68 2c 20 62 79 74 65 41 72 72 61 79 2c 20  gth, byteArray, 
13f0: 30 29 3b 0a 20 20 20 20 20 20 62 79 74 65 41 72  0);.      byteAr
1400: 72 61 79 5b 6e 6c 65 6e 5d 20 3d 20 30 3b 0a 0a  ray[nlen] = 0;..
1410: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74        return byt
1420: 65 41 72 72 61 79 3b 0a 20 20 20 20 7d 0a 0a 20  eArray;.    }.. 
1430: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1440: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
1450: 20 61 20 44 61 74 65 54 69 6d 65 20 74 6f 20 61   a DateTime to a
1460: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2c 20   UTF-8 encoded, 
1470: 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65 64 20  zero-terminated 
1480: 62 79 74 65 20 61 72 72 61 79 2e 0a 20 20 20 20  byte array..    
1490: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
14a0: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
14b0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75  .    /// This fu
14c0: 6e 63 74 69 6f 6e 20 69 73 20 61 20 63 6f 6e 76  nction is a conv
14d0: 65 6e 69 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e  enience function
14e0: 2c 20 77 68 69 63 68 20 66 69 72 73 74 20 63 61  , which first ca
14f0: 6c 6c 73 20 54 6f 53 74 72 69 6e 67 28 29 20 6f  lls ToString() o
1500: 6e 20 74 68 65 20 44 61 74 65 54 69 6d 65 2c 20  n the DateTime, 
1510: 61 6e 64 20 74 68 65 6e 20 63 61 6c 6c 73 20 54  and then calls T
1520: 6f 55 54 46 38 28 29 20 77 69 74 68 20 74 68 65  oUTF8() with the
1530: 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 20  .    /// string 
1540: 72 65 73 75 6c 74 2e 0a 20 20 20 20 2f 2f 2f 20  result..    /// 
1550: 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f  </remarks>.    /
1560: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1570: 64 61 74 65 54 69 6d 65 56 61 6c 75 65 22 3e 54  dateTimeValue">T
1580: 68 65 20 44 61 74 65 54 69 6d 65 20 74 6f 20 63  he DateTime to c
1590: 6f 6e 76 65 72 74 2e 3c 2f 70 61 72 61 6d 3e 0a  onvert.</param>.
15a0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
15b0: 3e 54 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64  >The UTF-8 encod
15c0: 65 64 20 73 74 72 69 6e 67 2c 20 69 6e 63 6c 75  ed string, inclu
15d0: 64 69 6e 67 20 61 20 30 20 74 65 72 6d 69 6e 61  ding a 0 termina
15e0: 74 69 6e 67 20 62 79 74 65 20 61 74 20 74 68 65  ting byte at the
15f0: 20 65 6e 64 20 6f 66 20 74 68 65 20 61 72 72 61   end of the arra
1600: 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  y.</returns>.   
1610: 20 70 75 62 6c 69 63 20 62 79 74 65 5b 5d 20 54   public byte[] T
1620: 6f 55 54 46 38 28 44 61 74 65 54 69 6d 65 20 64  oUTF8(DateTime d
1630: 61 74 65 54 69 6d 65 56 61 6c 75 65 29 0a 20 20  ateTimeValue).  
1640: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
1650: 20 54 6f 55 54 46 38 28 54 6f 53 74 72 69 6e 67   ToUTF8(ToString
1660: 28 64 61 74 65 54 69 6d 65 56 61 6c 75 65 29 29  (dateTimeValue))
1670: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
1680: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
1690: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 55 54  // Converts a UT
16a0: 46 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e 74 50  F-8 encoded IntP
16b0: 74 72 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  tr of the specif
16c0: 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74 6f 20  ied length into 
16d0: 61 20 2e 4e 45 54 20 73 74 72 69 6e 67 0a 20 20  a .NET string.  
16e0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
16f0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1700: 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73 74 72 69  name="nativestri
1710: 6e 67 22 3e 54 68 65 20 70 6f 69 6e 74 65 72 20  ng">The pointer 
1720: 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 77 68  to the memory wh
1730: 65 72 65 20 74 68 65 20 55 54 46 2d 38 20 73 74  ere the UTF-8 st
1740: 72 69 6e 67 20 69 73 20 65 6e 63 6f 64 65 64 3c  ring is encoded<
1750: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
1760: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 74  <param name="nat
1770: 69 76 65 73 74 72 69 6e 67 6c 65 6e 22 3e 54 68  ivestringlen">Th
1780: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
1790: 73 20 74 6f 20 64 65 63 6f 64 65 3c 2f 70 61 72  s to decode</par
17a0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
17b0: 75 72 6e 73 3e 41 20 73 74 72 69 6e 67 20 63 6f  urns>A string co
17c0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 61  ntaining the tra
17d0: 6e 73 6c 61 74 65 64 20 63 68 61 72 61 63 74 65  nslated characte
17e0: 72 28 73 29 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  r(s)</returns>. 
17f0: 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61     public virtua
1800: 6c 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e  l string ToStrin
1810: 67 28 49 6e 74 50 74 72 20 6e 61 74 69 76 65 73  g(IntPtr natives
1820: 74 72 69 6e 67 2c 20 69 6e 74 20 6e 61 74 69 76  tring, int nativ
1830: 65 73 74 72 69 6e 67 6c 65 6e 29 0a 20 20 20 20  estringlen).    
1840: 7b 0a 20 20 20 20 20 20 69 66 20 28 6e 61 74 69  {.      if (nati
1850: 76 65 73 74 72 69 6e 67 6c 65 6e 20 3d 3d 20 30  vestringlen == 0
1860: 29 20 72 65 74 75 72 6e 20 22 22 3b 0a 0a 20 20  ) return "";..  
1870: 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 41      byte[] byteA
1880: 72 72 61 79 20 3d 20 6e 65 77 20 62 79 74 65 5b  rray = new byte[
1890: 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 5d  nativestringlen]
18a0: 3b 0a 0a 20 20 20 20 20 20 4d 61 72 73 68 61 6c  ;..      Marshal
18b0: 2e 43 6f 70 79 28 6e 61 74 69 76 65 73 74 72 69  .Copy(nativestri
18c0: 6e 67 2c 20 62 79 74 65 41 72 72 61 79 2c 20 30  ng, byteArray, 0
18d0: 2c 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65  , nativestringle
18e0: 6e 29 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72  n);..      retur
18f0: 6e 20 5f 75 74 66 38 2e 47 65 74 53 74 72 69 6e  n _utf8.GetStrin
1900: 67 28 62 79 74 65 41 72 72 61 79 2c 20 30 2c 20  g(byteArray, 0, 
1910: 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29  nativestringlen)
1920: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 65 6e  ;.    }..    #en
1930: 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72 65  dregion..    #re
1940: 67 69 6f 6e 20 44 61 74 65 54 69 6d 65 20 43 6f  gion DateTime Co
1950: 6e 76 65 72 73 69 6f 6e 20 46 75 6e 63 74 69 6f  nversion Functio
1960: 6e 73 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ns.    /// <summ
1970: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ary>.    /// Con
1980: 76 65 72 74 73 20 61 20 73 74 72 69 6e 67 20 69  verts a string i
1990: 6e 74 6f 20 61 20 44 61 74 65 54 69 6d 65 2c 20  nto a DateTime, 
19a0: 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  using the curren
19b0: 74 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  t DateTimeFormat
19c0: 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74   specified for t
19d0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  he connection wh
19e0: 65 6e 20 69 74 20 77 61 73 20 6f 70 65 6e 65 64  en it was opened
19f0: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a00: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ary>.    /// <re
1a10: 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 41  marks>.    /// A
1a20: 63 63 65 70 74 61 62 6c 65 20 49 53 4f 38 36 30  cceptable ISO860
1a30: 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  1 DateTime forma
1a40: 74 73 20 61 72 65 3a 0a 20 20 20 20 2f 2f 2f 20  ts are:.    /// 
1a50: 20 20 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a    yyyy-MM-dd HH:
1a60: 6d 6d 3a 73 73 0a 20 20 20 20 2f 2f 2f 20 20 20  mm:ss.    ///   
1a70: 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73 73 0a 20  yyyyMMddHHmmss. 
1a80: 20 20 20 2f 2f 2f 20 20 20 79 79 79 79 4d 4d 64     ///   yyyyMMd
1a90: 64 54 48 48 6d 6d 73 73 66 66 66 66 66 66 66 0a  dTHHmmssfffffff.
1aa0: 20 20 20 20 2f 2f 2f 20 20 20 79 79 79 79 2d 4d      ///   yyyy-M
1ab0: 4d 2d 64 64 0a 20 20 20 20 2f 2f 2f 20 20 20 79  M-dd.    ///   y
1ac0: 79 2d 4d 4d 2d 64 64 0a 20 20 20 20 2f 2f 2f 20  y-MM-dd.    /// 
1ad0: 20 20 79 79 79 79 4d 4d 64 64 0a 20 20 20 20 2f    yyyyMMdd.    /
1ae0: 2f 2f 20 20 20 48 48 3a 6d 6d 3a 73 73 0a 20 20  //   HH:mm:ss.  
1af0: 20 20 2f 2f 2f 20 20 20 54 48 48 6d 6d 73 73 0a    ///   THHmmss.
1b00: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
1b10: 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  s>.    /// <para
1b20: 6d 20 6e 61 6d 65 3d 22 64 61 74 65 54 65 78 74  m name="dateText
1b30: 22 3e 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e  ">The string con
1b40: 74 61 69 6e 69 6e 67 20 65 69 74 68 65 72 20 61  taining either a
1b50: 20 54 69 63 6b 20 76 61 6c 75 65 20 6f 72 20 61   Tick value or a
1b60: 6e 20 49 53 4f 38 36 30 31 2d 66 6f 72 6d 61 74  n ISO8601-format
1b70: 20 73 74 72 69 6e 67 3c 2f 70 61 72 61 6d 3e 0a   string</param>.
1b80: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1b90: 3e 41 20 44 61 74 65 54 69 6d 65 20 76 61 6c 75  >A DateTime valu
1ba0: 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  e</returns>.    
1bb0: 70 75 62 6c 69 63 20 44 61 74 65 54 69 6d 65 20  public DateTime 
1bc0: 54 6f 44 61 74 65 54 69 6d 65 28 73 74 72 69 6e  ToDateTime(strin
1bd0: 67 20 64 61 74 65 54 65 78 74 29 0a 20 20 20 20  g dateText).    
1be0: 7b 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  {.      switch (
1bf0: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29  _datetimeFormat)
1c00: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
1c10: 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74 65   case SQLiteDate
1c20: 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73 3a 0a 20  Formats.Ticks:. 
1c30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c40: 6e 65 77 20 44 61 74 65 54 69 6d 65 28 43 6f 6e  new DateTime(Con
1c50: 76 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 61 74  vert.ToInt64(dat
1c60: 65 54 65 78 74 2c 20 43 75 6c 74 75 72 65 49 6e  eText, CultureIn
1c70: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
1c80: 75 72 65 29 29 3b 0a 20 20 20 20 20 20 20 20 64  ure));.        d
1c90: 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20  efault:.        
1ca0: 20 20 72 65 74 75 72 6e 20 44 61 74 65 54 69 6d    return DateTim
1cb0: 65 2e 50 61 72 73 65 45 78 61 63 74 28 64 61 74  e.ParseExact(dat
1cc0: 65 54 65 78 74 2c 20 5f 64 61 74 65 74 69 6d 65  eText, _datetime
1cd0: 46 6f 72 6d 61 74 73 2c 20 44 61 74 65 54 69 6d  Formats, DateTim
1ce0: 65 46 6f 72 6d 61 74 49 6e 66 6f 2e 49 6e 76 61  eFormatInfo.Inva
1cf0: 72 69 61 6e 74 49 6e 66 6f 2c 20 44 61 74 65 54  riantInfo, DateT
1d00: 69 6d 65 53 74 79 6c 65 73 2e 4e 6f 6e 65 29 3b  imeStyles.None);
1d10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
1d20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1d30: 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72  >.    /// Conver
1d40: 74 73 20 61 20 44 61 74 65 54 69 6d 65 20 74 6f  ts a DateTime to
1d50: 20 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2c   a string value,
1d60: 20 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 65   using the curre
1d70: 6e 74 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  nt DateTimeForma
1d80: 74 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20  t specified for 
1d90: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77  the connection w
1da0: 68 65 6e 20 69 74 20 77 61 73 20 6f 70 65 6e 65  hen it was opene
1db0: 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  d..    /// </sum
1dc0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
1dd0: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74 65 56  aram name="dateV
1de0: 61 6c 75 65 22 3e 54 68 65 20 44 61 74 65 54 69  alue">The DateTi
1df0: 6d 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76  me value to conv
1e00: 65 72 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ert</param>.    
1e10: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 45 69 74  /// <returns>Eit
1e20: 68 65 72 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  her a string con
1e30: 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20 74  sisting of the t
1e40: 69 63 6b 20 63 6f 75 6e 74 20 66 6f 72 20 44 61  ick count for Da
1e50: 74 65 54 69 6d 65 46 6f 72 6d 61 74 2e 54 69 63  teTimeFormat.Tic
1e60: 6b 73 2c 20 6f 72 20 61 20 64 61 74 65 2f 74 69  ks, or a date/ti
1e70: 6d 65 20 69 6e 20 49 53 4f 38 36 30 31 20 66 6f  me in ISO8601 fo
1e80: 72 6d 61 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a  rmat.</returns>.
1e90: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
1ea0: 67 20 54 6f 53 74 72 69 6e 67 28 44 61 74 65 54  g ToString(DateT
1eb0: 69 6d 65 20 64 61 74 65 56 61 6c 75 65 29 0a 20  ime dateValue). 
1ec0: 20 20 20 7b 0a 20 20 20 20 20 20 73 77 69 74 63     {.      switc
1ed0: 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  h (_datetimeForm
1ee0: 61 74 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  at).      {.    
1ef0: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
1f00: 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
1f10: 3a 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  :.          retu
1f20: 72 6e 20 64 61 74 65 56 61 6c 75 65 2e 54 69 63  rn dateValue.Tic
1f30: 6b 73 2e 54 6f 53 74 72 69 6e 67 28 43 75 6c 74  ks.ToString(Cult
1f40: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
1f50: 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 20  tCulture);.     
1f60: 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
1f70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74        return dat
1f80: 65 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28  eValue.ToString(
1f90: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 73  _datetimeFormats
1fa0: 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  [0], CultureInfo
1fb0: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
1fc0: 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
1fd0: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
1fe0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 74  ary>.    /// Int
1ff0: 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 74  ernal function t
2000: 6f 20 63 6f 6e 76 65 72 74 20 61 20 55 54 46 2d  o convert a UTF-
2010: 38 20 65 6e 63 6f 64 65 64 20 49 6e 74 50 74 72  8 encoded IntPtr
2020: 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
2030: 64 20 6c 65 6e 67 74 68 20 74 6f 20 61 20 44 61  d length to a Da
2040: 74 65 54 69 6d 65 2e 0a 20 20 20 20 2f 2f 2f 20  teTime..    /// 
2050: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
2060: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20  // <remarks>.   
2070: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 20 63   /// This is a c
2080: 6f 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e 63 74  onvenience funct
2090: 69 6f 6e 2c 20 77 68 69 63 68 20 66 69 72 73 74  ion, which first
20a0: 20 63 61 6c 6c 73 20 54 6f 53 74 72 69 6e 67 28   calls ToString(
20b0: 29 20 6f 6e 20 74 68 65 20 49 6e 74 50 74 72 20  ) on the IntPtr 
20c0: 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  to convert it to
20d0: 20 61 20 73 74 72 69 6e 67 2c 20 74 68 65 6e 20   a string, then 
20e0: 63 61 6c 6c 73 0a 20 20 20 20 2f 2f 2f 20 54 6f  calls.    /// To
20f0: 44 61 74 65 54 69 6d 65 28 29 20 6f 6e 20 74 68  DateTime() on th
2100: 65 20 73 74 72 69 6e 67 20 74 6f 20 72 65 74 75  e string to retu
2110: 72 6e 20 61 20 44 61 74 65 54 69 6d 65 2e 0a 20  rn a DateTime.. 
2120: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
2130: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
2140: 20 6e 61 6d 65 3d 22 70 74 72 22 3e 41 20 70 6f   name="ptr">A po
2150: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55 54 46  inter to the UTF
2160: 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e  -8 encoded strin
2170: 67 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  g</param>.    //
2180: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
2190: 65 6e 22 3e 54 68 65 20 6c 65 6e 67 74 68 20 69  en">The length i
21a0: 6e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73  n bytes of the s
21b0: 74 72 69 6e 67 3c 2f 70 61 72 61 6d 3e 0a 20 20  tring</param>.  
21c0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
21d0: 68 65 20 70 61 72 73 65 64 20 44 61 74 65 54 69  he parsed DateTi
21e0: 6d 65 20 76 61 6c 75 65 3c 2f 72 65 74 75 72 6e  me value</return
21f0: 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  s>.    internal 
2200: 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74 65 54  DateTime ToDateT
2210: 69 6d 65 28 49 6e 74 50 74 72 20 70 74 72 2c 20  ime(IntPtr ptr, 
2220: 69 6e 74 20 6c 65 6e 29 0a 20 20 20 20 7b 0a 20  int len).    {. 
2230: 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
2240: 74 65 54 69 6d 65 28 54 6f 53 74 72 69 6e 67 28  teTime(ToString(
2250: 70 74 72 2c 20 6c 65 6e 29 29 3b 0a 20 20 20 20  ptr, len));.    
2260: 7d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  }.    #endregion
2270: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2280: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53 6d 61 72  ry>.    /// Smar
2290: 74 20 6d 65 74 68 6f 64 20 6f 66 20 73 70 6c 69  t method of spli
22a0: 74 74 69 6e 67 20 61 20 73 74 72 69 6e 67 2e 20  tting a string. 
22b0: 20 53 6b 69 70 73 20 71 75 6f 74 65 64 20 65 6c   Skips quoted el
22c0: 65 6d 65 6e 74 73 2c 20 72 65 6d 6f 76 65 73 20  ements, removes 
22d0: 74 68 65 20 71 75 6f 74 65 73 2e 0a 20 20 20 20  the quotes..    
22e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
22f0: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
2300: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 73 70  .    /// This sp
2310: 6c 69 74 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  lit function wor
2320: 6b 73 20 73 6f 6d 65 77 68 61 74 20 6c 69 6b 65  ks somewhat like
2330: 20 74 68 65 20 53 74 72 69 6e 67 2e 53 70 6c 69   the String.Spli
2340: 74 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20  t() function in 
2350: 74 68 61 74 20 69 74 20 62 72 65 61 6b 73 20 61  that it breaks a
2360: 70 61 72 74 20 61 20 73 74 72 69 6e 67 20 69 6e  part a string in
2370: 74 6f 0a 20 20 20 20 2f 2f 2f 20 70 69 65 63 65  to.    /// piece
2380: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
2390: 65 20 70 69 65 63 65 73 20 61 73 20 61 6e 20 61  e pieces as an a
23a0: 72 72 61 79 2e 20 20 54 68 65 20 70 72 69 6d 61  rray.  The prima
23b0: 72 79 20 64 69 66 66 65 72 65 6e 63 65 73 20 61  ry differences a
23c0: 72 65 3a 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73  re:.    /// <lis
23d0: 74 20 74 79 70 65 3d 22 62 75 6c 6c 65 74 22 3e  t type="bullet">
23e0: 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c  .    /// <item><
23f0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 4f 6e 6c 79  description>Only
2400: 20 6f 6e 65 20 63 68 61 72 61 63 74 65 72 20 63   one character c
2410: 61 6e 20 62 65 20 70 72 6f 76 69 64 65 64 20 61  an be provided a
2420: 73 20 61 20 73 65 70 61 72 61 74 6f 72 20 63 68  s a separator ch
2430: 61 72 61 63 74 65 72 3c 2f 64 65 73 63 72 69 70  aracter</descrip
2440: 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0a 20 20 20  tion></item>.   
2450: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64 65 73 63   /// <item><desc
2460: 72 69 70 74 69 6f 6e 3e 51 75 6f 74 65 64 20 74  ription>Quoted t
2470: 65 78 74 20 69 6e 73 69 64 65 20 74 68 65 20 73  ext inside the s
2480: 74 72 69 6e 67 20 69 73 20 73 6b 69 70 70 65 64  tring is skipped
2490: 20 6f 76 65 72 20 77 68 65 6e 20 73 65 61 72 63   over when searc
24a0: 68 69 6e 67 20 66 6f 72 20 74 68 65 20 73 65 70  hing for the sep
24b0: 61 72 61 74 6f 72 2c 20 61 6e 64 20 74 68 65 20  arator, and the 
24c0: 71 75 6f 74 65 73 20 61 72 65 20 72 65 6d 6f 76  quotes are remov
24d0: 65 64 2e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  ed.</description
24e0: 3e 3c 2f 69 74 65 6d 3e 0a 20 20 20 20 2f 2f 2f  ></item>.    ///
24f0: 20 3c 2f 6c 69 73 74 3e 0a 20 20 20 20 2f 2f 2f   </list>.    ///
2500: 20 54 68 75 73 2c 20 69 66 20 73 70 6c 69 74 74   Thus, if splitt
2510: 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ing the followin
2520: 67 20 73 74 72 69 6e 67 20 6c 6f 6f 6b 69 6e 67  g string looking
2530: 20 66 6f 72 20 61 20 63 6f 6d 6d 61 3a 3c 62 72   for a comma:<br
2540: 2f 3e 0a 20 20 20 20 2f 2f 2f 20 4f 6e 65 2c 54  />.    /// One,T
2550: 77 6f 2c 20 22 54 68 72 65 65 2c 20 46 6f 75 72  wo, "Three, Four
2560: 22 2c 20 46 69 76 65 3c 62 72 2f 3e 0a 20 20 20  ", Five<br/>.   
2570: 20 2f 2f 2f 20 3c 62 72 2f 3e 0a 20 20 20 20 2f   /// <br/>.    /
2580: 2f 2f 20 54 68 65 20 72 65 73 75 6c 74 69 6e 67  // The resulting
2590: 20 61 72 72 61 79 20 77 6f 75 6c 64 20 63 6f 6e   array would con
25a0: 74 61 69 6e 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f  tain<br/>.    //
25b0: 2f 20 5b 30 5d 20 4f 6e 65 3c 62 72 2f 3e 0a 20  / [0] One<br/>. 
25c0: 20 20 20 2f 2f 2f 20 5b 31 5d 20 54 77 6f 3c 62     /// [1] Two<b
25d0: 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 5b 32 5d 20  r/>.    /// [2] 
25e0: 54 68 72 65 65 2c 20 46 6f 75 72 3c 62 72 2f 3e  Three, Four<br/>
25f0: 0a 20 20 20 20 2f 2f 2f 20 5b 33 5d 20 46 69 76  .    /// [3] Fiv
2600: 65 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 3c  e<br/>.    /// <
2610: 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74  br/>.    /// Not
2620: 65 20 74 68 61 74 20 74 68 65 20 6c 65 61 64 69  e that the leadi
2630: 6e 67 20 61 6e 64 20 74 72 61 69 6c 69 6e 67 20  ng and trailing 
2640: 73 70 61 63 65 73 20 77 65 72 65 20 72 65 6d 6f  spaces were remo
2650: 76 65 64 20 66 72 6f 6d 20 65 61 63 68 20 69 74  ved from each it
2660: 65 6d 20 64 75 72 69 6e 67 20 74 68 65 20 73 70  em during the sp
2670: 6c 69 74 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  lit..    /// </r
2680: 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20  emarks>.    /// 
2690: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75  <param name="sou
26a0: 72 63 65 22 3e 53 6f 75 72 63 65 20 73 74 72 69  rce">Source stri
26b0: 6e 67 20 74 6f 20 73 70 6c 69 74 20 61 70 61 72  ng to split apar
26c0: 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  t</param>.    //
26d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
26e0: 65 70 61 72 61 74 6f 72 22 3e 53 65 70 61 72 61  eparator">Separa
26f0: 74 6f 72 20 63 68 61 72 61 63 74 65 72 3c 2f 70  tor character</p
2700: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
2710: 65 74 75 72 6e 73 3e 41 20 73 74 72 69 6e 67 20  eturns>A string 
2720: 61 72 72 61 79 20 6f 66 20 74 68 65 20 73 70 6c  array of the spl
2730: 69 74 20 75 70 20 65 6c 65 6d 65 6e 74 73 3c 2f  it up elements</
2740: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
2750: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
2760: 67 5b 5d 20 53 70 6c 69 74 28 73 74 72 69 6e 67  g[] Split(string
2770: 20 73 6f 75 72 63 65 2c 20 63 68 61 72 20 73 65   source, char se
2780: 70 61 72 61 74 6f 72 29 0a 20 20 20 20 7b 0a 20  parator).    {. 
2790: 20 20 20 20 20 63 68 61 72 5b 5d 20 74 6f 6b 73       char[] toks
27a0: 20 3d 20 6e 65 77 20 63 68 61 72 5b 32 5d 20 7b   = new char[2] {
27b0: 20 27 5c 22 27 2c 20 73 65 70 61 72 61 74 6f 72   '\"', separator
27c0: 20 7d 3b 0a 20 20 20 20 20 20 63 68 61 72 5b 5d   };.      char[]
27d0: 20 71 75 6f 74 20 3d 20 6e 65 77 20 63 68 61 72   quot = new char
27e0: 5b 31 5d 20 7b 20 27 5c 22 27 20 7d 3b 0a 20 20  [1] { '\"' };.  
27f0: 20 20 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20      int n = 0;. 
2800: 20 20 20 20 20 4c 69 73 74 3c 73 74 72 69 6e 67       List<string
2810: 3e 20 6c 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c  > ls = new List<
2820: 73 74 72 69 6e 67 3e 28 29 3b 0a 20 20 20 20 20  string>();.     
2830: 20 73 74 72 69 6e 67 20 73 3b 0a 0a 20 20 20 20   string s;..    
2840: 20 20 77 68 69 6c 65 20 28 73 6f 75 72 63 65 2e    while (source.
2850: 4c 65 6e 67 74 68 20 3e 20 30 29 0a 20 20 20 20  Length > 0).    
2860: 20 20 7b 0a 20 20 20 20 20 20 20 20 6e 20 3d 20    {.        n = 
2870: 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 41 6e  source.IndexOfAn
2880: 79 28 74 6f 6b 73 2c 20 6e 29 3b 0a 20 20 20 20  y(toks, n);.    
2890: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 2d 31 29      if (n == -1)
28a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
28b0: 69 66 20 28 73 6f 75 72 63 65 5b 6e 5d 20 3d 3d  if (source[n] ==
28c0: 20 74 6f 6b 73 5b 30 5d 29 0a 20 20 20 20 20 20   toks[0]).      
28d0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 6f    {.          so
28e0: 75 72 63 65 20 3d 20 73 6f 75 72 63 65 2e 52 65  urce = source.Re
28f0: 6d 6f 76 65 28 6e 2c 20 31 29 3b 0a 20 20 20 20  move(n, 1);.    
2900: 20 20 20 20 20 20 6e 20 3d 20 73 6f 75 72 63 65        n = source
2910: 2e 49 6e 64 65 78 4f 66 41 6e 79 28 71 75 6f 74  .IndexOfAny(quot
2920: 2c 20 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , n);.          
2930: 69 66 20 28 6e 20 3d 3d 20 2d 31 29 0a 20 20 20  if (n == -1).   
2940: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
2950: 20 20 20 20 20 73 6f 75 72 63 65 20 3d 20 22 5c       source = "\
2960: 22 22 20 2b 20 73 6f 75 72 63 65 3b 0a 20 20 20  "" + source;.   
2970: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2980: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2990: 20 20 20 20 20 20 73 6f 75 72 63 65 20 3d 20 73        source = s
29a0: 6f 75 72 63 65 2e 52 65 6d 6f 76 65 28 6e 2c 20  ource.Remove(n, 
29b0: 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  1);.        }.  
29c0: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
29d0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73     {.          s
29e0: 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73 74 72   = source.Substr
29f0: 69 6e 67 28 30 2c 20 6e 29 2e 54 72 69 6d 28 29  ing(0, n).Trim()
2a00: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 6f 75 72  ;.          sour
2a10: 63 65 20 3d 20 73 6f 75 72 63 65 2e 53 75 62 73  ce = source.Subs
2a20: 74 72 69 6e 67 28 6e 20 2b 20 31 29 2e 54 72 69  tring(n + 1).Tri
2a30: 6d 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  m();.          i
2a40: 66 20 28 73 2e 4c 65 6e 67 74 68 20 3e 20 30 29  f (s.Length > 0)
2a50: 20 6c 73 2e 41 64 64 28 73 29 3b 0a 20 20 20 20   ls.Add(s);.    
2a60: 20 20 20 20 20 20 6e 20 3d 20 30 3b 0a 20 20 20        n = 0;.   
2a70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
2a80: 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 2e       if (source.
2a90: 4c 65 6e 67 74 68 20 3e 20 30 29 20 6c 73 2e 41  Length > 0) ls.A
2aa0: 64 64 28 73 6f 75 72 63 65 29 3b 0a 0a 20 20 20  dd(source);..   
2ab0: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20 3d     string[] ar =
2ac0: 20 6e 65 77 20 73 74 72 69 6e 67 5b 6c 73 2e 43   new string[ls.C
2ad0: 6f 75 6e 74 5d 3b 0a 20 20 20 20 20 20 6c 73 2e  ount];.      ls.
2ae0: 43 6f 70 79 54 6f 28 61 72 2c 20 30 29 3b 0a 0a  CopyTo(ar, 0);..
2af0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 3b        return ar;
2b00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 72 65 67  .    }..    #reg
2b10: 69 6f 6e 20 54 79 70 65 20 43 6f 6e 76 65 72 73  ion Type Convers
2b20: 69 6f 6e 73 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ions.    /// <su
2b30: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 44  mmary>.    /// D
2b40: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 64 61  etermines the da
2b50: 74 61 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ta type of a col
2b60: 75 6d 6e 20 69 6e 20 61 20 73 74 61 74 65 6d 65  umn in a stateme
2b70: 6e 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  nt.    /// </sum
2b80: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
2b90: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22  aram name="stmt"
2ba0: 3e 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74  >The statement t
2bb0: 6f 20 72 65 74 72 69 65 76 65 20 69 6e 66 6f 72  o retrieve infor
2bc0: 6d 61 74 69 6f 6e 20 66 6f 72 3c 2f 70 61 72 61  mation for</para
2bd0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  m>.    /// <para
2be0: 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 63  m name="i">The c
2bf0: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
2c00: 65 20 74 79 70 65 20 69 6e 66 6f 72 6d 61 74 69  e type informati
2c10: 6f 6e 20 6f 6e 3c 2f 70 61 72 61 6d 3e 0a 20 20  on on</param>.  
2c20: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
2c30: 65 74 75 72 6e 73 20 61 20 53 51 4c 69 74 65 54  eturns a SQLiteT
2c40: 79 70 65 20 73 74 72 75 63 74 3c 2f 72 65 74 75  ype struct</retu
2c50: 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61  rns>.    interna
2c60: 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 54  l static SQLiteT
2c70: 79 70 65 20 43 6f 6c 75 6d 6e 54 6f 54 79 70 65  ype ColumnToType
2c80: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2c90: 20 73 74 6d 74 2c 20 69 6e 74 20 69 29 0a 20 20   stmt, int i).  
2ca0: 20 20 7b 0a 20 20 20 20 20 20 53 51 4c 69 74 65    {.      SQLite
2cb0: 54 79 70 65 20 74 79 70 3b 0a 0a 20 20 20 20 20  Type typ;..     
2cc0: 20 74 79 70 2e 54 79 70 65 20 3d 20 54 79 70 65   typ.Type = Type
2cd0: 4e 61 6d 65 54 6f 44 62 54 79 70 65 28 73 74 6d  NameToDbType(stm
2ce0: 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70  t._sql.ColumnTyp
2cf0: 65 28 73 74 6d 74 2c 20 69 2c 20 6f 75 74 20 74  e(stmt, i, out t
2d00: 79 70 2e 41 66 66 69 6e 69 74 79 29 29 3b 0a 0a  yp.Affinity));..
2d10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 79 70        return typ
2d20: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
2d30: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
2d40: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 53 51  // Converts a SQ
2d50: 4c 69 74 65 54 79 70 65 20 74 6f 20 61 20 2e 4e  LiteType to a .N
2d60: 45 54 20 54 79 70 65 20 6f 62 6a 65 63 74 0a 20  ET Type object. 
2d70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2d80: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
2d90: 20 6e 61 6d 65 3d 22 74 22 3e 54 68 65 20 53 51   name="t">The SQ
2da0: 4c 69 74 65 54 79 70 65 20 74 6f 20 63 6f 6e 76  LiteType to conv
2db0: 65 72 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ert</param>.    
2dc0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
2dd0: 75 72 6e 73 20 61 20 2e 4e 45 54 20 54 79 70 65  urns a .NET Type
2de0: 20 6f 62 6a 65 63 74 3c 2f 72 65 74 75 72 6e 73   object</returns
2df0: 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  >.    internal s
2e00: 74 61 74 69 63 20 54 79 70 65 20 53 51 4c 69 74  tatic Type SQLit
2e10: 65 54 79 70 65 54 6f 54 79 70 65 28 53 51 4c 69  eTypeToType(SQLi
2e20: 74 65 54 79 70 65 20 74 29 0a 20 20 20 20 7b 0a  teType t).    {.
2e30: 20 20 20 20 20 20 69 66 20 28 74 2e 54 79 70 65        if (t.Type
2e40: 20 21 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63   != DbType.Objec
2e50: 74 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  t).        retur
2e60: 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  n SQLiteConvert.
2e70: 44 62 54 79 70 65 54 6f 54 79 70 65 28 74 2e 54  DbTypeToType(t.T
2e80: 79 70 65 29 3b 0a 0a 20 20 20 20 20 20 72 65 74  ype);..      ret
2e90: 75 72 6e 20 5f 74 79 70 65 61 66 66 69 6e 69 74  urn _typeaffinit
2ea0: 69 65 73 5b 28 69 6e 74 29 74 2e 41 66 66 69 6e  ies[(int)t.Affin
2eb0: 69 74 79 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ity];.    }..   
2ec0: 20 73 74 61 74 69 63 20 54 79 70 65 5b 5d 20 5f   static Type[] _
2ed0: 74 79 70 65 61 66 66 69 6e 69 74 69 65 73 20 3d  typeaffinities =
2ee0: 20 7b 0a 20 20 20 20 20 20 6e 75 6c 6c 2c 0a 20   {.      null,. 
2ef0: 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74 36       typeof(Int6
2f00: 34 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66  4),.      typeof
2f10: 28 44 6f 75 62 6c 65 29 2c 0a 20 20 20 20 20 20  (Double),.      
2f20: 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 0a  typeof(string),.
2f30: 20 20 20 20 20 20 74 79 70 65 6f 66 28 62 79 74        typeof(byt
2f40: 65 5b 5d 29 2c 0a 20 20 20 20 20 20 74 79 70 65  e[]),.      type
2f50: 6f 66 28 44 42 4e 75 6c 6c 29 2c 0a 20 20 20 20  of(DBNull),.    
2f60: 20 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 6e 75    null,.      nu
2f70: 6c 6c 2c 0a 20 20 20 20 20 20 6e 75 6c 6c 2c 0a  ll,.      null,.
2f80: 20 20 20 20 20 20 6e 75 6c 6c 2c 0a 20 20 20 20        null,.    
2f90: 20 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d    typeof(DateTim
2fa0: 65 29 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20  e),.    };..    
2fb0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
2fc0: 20 20 2f 2f 2f 20 46 6f 72 20 61 20 67 69 76 65    /// For a give
2fd0: 6e 20 69 6e 74 72 69 6e 73 69 63 20 74 79 70 65  n intrinsic type
2fe0: 2c 20 72 65 74 75 72 6e 20 61 20 44 62 54 79 70  , return a DbTyp
2ff0: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
3000: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3010: 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54  ram name="typ">T
3020: 68 65 20 6e 61 74 69 76 65 20 74 79 70 65 20 74  he native type t
3030: 6f 20 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d  o convert</param
3040: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
3050: 6e 73 3e 54 68 65 20 63 6f 72 72 65 73 70 6f 6e  ns>The correspon
3060: 64 69 6e 67 20 28 63 6c 6f 73 65 73 74 20 6d 61  ding (closest ma
3070: 74 63 68 29 20 44 62 54 79 70 65 3c 2f 72 65 74  tch) DbType</ret
3080: 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e  urns>.    intern
3090: 61 6c 20 73 74 61 74 69 63 20 44 62 54 79 70 65  al static DbType
30a0: 20 54 79 70 65 54 6f 44 62 54 79 70 65 28 54 79   TypeToDbType(Ty
30b0: 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a 20 20  pe typ).    {.  
30c0: 20 20 20 20 54 79 70 65 43 6f 64 65 20 74 63 20      TypeCode tc 
30d0: 3d 20 54 79 70 65 2e 47 65 74 54 79 70 65 43 6f  = Type.GetTypeCo
30e0: 64 65 28 74 79 70 29 3b 0a 20 20 20 20 20 20 69  de(typ);.      i
30f0: 66 20 28 74 63 20 3d 3d 20 54 79 70 65 43 6f 64  f (tc == TypeCod
3100: 65 2e 4f 62 6a 65 63 74 29 0a 20 20 20 20 20 20  e.Object).      
3110: 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79  {.        if (ty
3120: 70 20 3d 3d 20 74 79 70 65 6f 66 28 62 79 74 65  p == typeof(byte
3130: 5b 5d 29 29 20 72 65 74 75 72 6e 20 44 62 54 79  [])) return DbTy
3140: 70 65 2e 42 69 6e 61 72 79 3b 0a 20 20 20 20 20  pe.Binary;.     
3150: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 74 79     if (typ == ty
3160: 70 65 6f 66 28 47 75 69 64 29 29 20 72 65 74 75  peof(Guid)) retu
3170: 72 6e 20 44 62 54 79 70 65 2e 47 75 69 64 3b 0a  rn DbType.Guid;.
3180: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
3190: 62 54 79 70 65 2e 53 74 72 69 6e 67 3b 0a 20 20  bType.String;.  
31a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
31b0: 72 6e 20 5f 74 79 70 65 74 6f 64 62 74 79 70 65  rn _typetodbtype
31c0: 5b 28 69 6e 74 29 74 63 5d 3b 0a 20 20 20 20 7d  [(int)tc];.    }
31d0: 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
31e0: 61 74 69 63 20 44 62 54 79 70 65 5b 5d 20 5f 74  atic DbType[] _t
31f0: 79 70 65 74 6f 64 62 74 79 70 65 20 3d 20 7b 0a  ypetodbtype = {.
3200: 20 20 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a        DbType.Obj
3210: 65 63 74 2c 0a 20 20 20 20 20 20 44 62 54 79 70  ect,.      DbTyp
3220: 65 2e 42 69 6e 61 72 79 2c 0a 20 20 20 20 20 20  e.Binary,.      
3230: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 2c 0a 20  DbType.Object,. 
3240: 20 20 20 20 20 44 62 54 79 70 65 2e 42 6f 6f 6c       DbType.Bool
3250: 65 61 6e 2c 0a 20 20 20 20 20 20 44 62 54 79 70  ean,.      DbTyp
3260: 65 2e 53 42 79 74 65 2c 0a 20 20 20 20 20 20 44  e.SByte,.      D
3270: 62 54 79 70 65 2e 53 42 79 74 65 2c 0a 20 20 20  bType.SByte,.   
3280: 20 20 20 44 62 54 79 70 65 2e 42 79 74 65 2c 0a     DbType.Byte,.
3290: 20 20 20 20 20 20 44 62 54 79 70 65 2e 49 6e 74        DbType.Int
32a0: 31 36 2c 20 2f 2f 20 37 0a 20 20 20 20 20 20 44  16, // 7.      D
32b0: 62 54 79 70 65 2e 55 49 6e 74 31 36 2c 0a 20 20  bType.UInt16,.  
32c0: 20 20 20 20 44 62 54 79 70 65 2e 49 6e 74 33 32      DbType.Int32
32d0: 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 55  ,.      DbType.U
32e0: 49 6e 74 33 32 2c 0a 20 20 20 20 20 20 44 62 54  Int32,.      DbT
32f0: 79 70 65 2e 49 6e 74 36 34 2c 20 2f 2f 20 31 31  ype.Int64, // 11
3300: 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 55 49  .      DbType.UI
3310: 6e 74 36 34 2c 0a 20 20 20 20 20 20 44 62 54 79  nt64,.      DbTy
3320: 70 65 2e 53 69 6e 67 6c 65 2c 0a 20 20 20 20 20  pe.Single,.     
3330: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 2c 0a   DbType.Double,.
3340: 20 20 20 20 20 20 44 62 54 79 70 65 2e 44 65 63        DbType.Dec
3350: 69 6d 61 6c 2c 0a 20 20 20 20 20 20 44 62 54 79  imal,.      DbTy
3360: 70 65 2e 44 61 74 65 54 69 6d 65 2c 0a 20 20 20  pe.DateTime,.   
3370: 20 20 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74     DbType.Object
3380: 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e 53  ,.      DbType.S
3390: 74 72 69 6e 67 2c 0a 20 20 20 20 7d 3b 0a 0a 20  tring,.    };.. 
33a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
33b0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
33c0: 20 61 20 44 62 54 79 70 65 20 74 6f 20 61 20 54   a DbType to a T
33d0: 79 70 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ype.    /// </su
33e0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
33f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
3400: 3e 54 68 65 20 44 62 54 79 70 65 20 74 6f 20 63  >The DbType to c
3410: 6f 6e 76 65 72 74 20 66 72 6f 6d 3c 2f 70 61 72  onvert from</par
3420: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
3430: 75 72 6e 73 3e 54 68 65 20 63 6c 6f 73 65 73 74  urns>The closest
3440: 2d 6d 61 74 63 68 20 2e 4e 45 54 20 74 79 70 65  -match .NET type
3450: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 69  </returns>.    i
3460: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 54  nternal static T
3470: 79 70 65 20 44 62 54 79 70 65 54 6f 54 79 70 65  ype DbTypeToType
3480: 28 44 62 54 79 70 65 20 74 79 70 29 0a 20 20 20  (DbType typ).   
3490: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
34a0: 5f 64 62 74 79 70 65 54 6f 54 79 70 65 5b 28 69  _dbtypeToType[(i
34b0: 6e 74 29 74 79 70 5d 3b 0a 20 20 20 20 7d 0a 0a  nt)typ];.    }..
34c0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
34d0: 69 63 20 54 79 70 65 5b 5d 20 5f 64 62 74 79 70  ic Type[] _dbtyp
34e0: 65 54 6f 54 79 70 65 20 3d 20 7b 0a 20 20 20 20  eToType = {.    
34f0: 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29    typeof(string)
3500: 2c 20 20 20 2f 2f 20 30 0a 20 20 20 20 20 20 74  ,   // 0.      t
3510: 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 2c 20 20  ypeof(byte[]),  
3520: 20 2f 2f 20 31 0a 20 20 20 20 20 20 74 79 70 65   // 1.      type
3530: 6f 66 28 62 79 74 65 29 2c 20 20 20 20 20 2f 2f  of(byte),     //
3540: 20 32 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28   2.      typeof(
3550: 62 6f 6f 6c 29 2c 20 20 20 20 20 2f 2f 20 33 0a  bool),     // 3.
3560: 20 20 20 20 20 20 74 79 70 65 6f 66 28 64 65 63        typeof(dec
3570: 69 6d 61 6c 29 2c 20 20 2f 2f 20 34 0a 20 20 20  imal),  // 4.   
3580: 20 20 20 74 79 70 65 6f 66 28 44 61 74 65 54 69     typeof(DateTi
3590: 6d 65 29 2c 20 2f 2f 20 35 0a 20 20 20 20 20 20  me), // 5.      
35a0: 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29  typeof(DateTime)
35b0: 2c 20 2f 2f 20 36 0a 20 20 20 20 20 20 74 79 70  , // 6.      typ
35c0: 65 6f 66 28 64 65 63 69 6d 61 6c 29 2c 20 20 2f  eof(decimal),  /
35d0: 2f 20 37 0a 20 20 20 20 20 20 74 79 70 65 6f 66  / 7.      typeof
35e0: 28 64 6f 75 62 6c 65 29 2c 20 20 20 2f 2f 20 38  (double),   // 8
35f0: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 47 75  .      typeof(Gu
3600: 69 64 29 2c 20 20 20 20 20 2f 2f 20 39 0a 20 20  id),     // 9.  
3610: 20 20 20 20 74 79 70 65 6f 66 28 49 6e 74 31 36      typeof(Int16
3620: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
3630: 49 6e 74 33 32 29 2c 0a 20 20 20 20 20 20 74 79  Int32),.      ty
3640: 70 65 6f 66 28 49 6e 74 36 34 29 2c 0a 20 20 20  peof(Int64),.   
3650: 20 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74     typeof(object
3660: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
3670: 73 62 79 74 65 29 2c 0a 20 20 20 20 20 20 74 79  sbyte),.      ty
3680: 70 65 6f 66 28 66 6c 6f 61 74 29 2c 0a 20 20 20  peof(float),.   
3690: 20 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67     typeof(string
36a0: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
36b0: 44 61 74 65 54 69 6d 65 29 2c 0a 20 20 20 20 20  DateTime),.     
36c0: 20 74 79 70 65 6f 66 28 55 49 6e 74 31 36 29 2c   typeof(UInt16),
36d0: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 55 49  .      typeof(UI
36e0: 6e 74 33 32 29 2c 0a 20 20 20 20 20 20 74 79 70  nt32),.      typ
36f0: 65 6f 66 28 55 49 6e 74 36 34 29 2c 0a 20 20 20  eof(UInt64),.   
3700: 20 20 20 74 79 70 65 6f 66 28 64 6f 75 62 6c 65     typeof(double
3710: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
3720: 73 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 74  string),.      t
3730: 79 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 0a 20  ypeof(string),. 
3740: 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72 69       typeof(stri
3750: 6e 67 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f  ng),.      typeo
3760: 66 28 73 74 72 69 6e 67 29 2c 20 20 20 2f 2f 20  f(string),   // 
3770: 32 35 20 28 58 6d 6c 29 0a 20 20 20 20 7d 3b 0a  25 (Xml).    };.
3780: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3790: 79 3e 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 20 61  y>.    /// For a
37a0: 20 67 69 76 65 6e 20 74 79 70 65 2c 20 72 65 74   given type, ret
37b0: 75 72 6e 20 74 68 65 20 63 6c 6f 73 65 73 74 2d  urn the closest-
37c0: 6d 61 74 63 68 20 53 51 4c 69 74 65 20 54 79 70  match SQLite Typ
37d0: 65 41 66 66 69 6e 69 74 79 2c 20 77 68 69 63 68  eAffinity, which
37e0: 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 61 6e 64   only understand
37f0: 73 20 61 20 76 65 72 79 20 6c 69 6d 69 74 65 64  s a very limited
3800: 20 73 75 62 73 65 74 20 6f 66 20 74 79 70 65 73   subset of types
3810: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3820: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3830: 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54  ram name="typ">T
3840: 68 65 20 74 79 70 65 20 74 6f 20 65 76 61 6c 75  he type to evalu
3850: 61 74 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ate</param>.    
3860: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
3870: 20 53 51 4c 69 74 65 20 74 79 70 65 20 61 66 66   SQLite type aff
3880: 69 6e 69 74 79 20 66 6f 72 20 74 68 61 74 20 74  inity for that t
3890: 79 70 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  ype.</returns>. 
38a0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
38b0: 69 63 20 54 79 70 65 41 66 66 69 6e 69 74 79 20  ic TypeAffinity 
38c0: 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79 28 54  TypeToAffinity(T
38d0: 79 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a 20  ype typ).    {. 
38e0: 20 20 20 20 20 54 79 70 65 43 6f 64 65 20 74 63       TypeCode tc
38f0: 20 3d 20 54 79 70 65 2e 47 65 74 54 79 70 65 43   = Type.GetTypeC
3900: 6f 64 65 28 74 79 70 29 3b 0a 20 20 20 20 20 20  ode(typ);.      
3910: 69 66 20 28 74 63 20 3d 3d 20 54 79 70 65 43 6f  if (tc == TypeCo
3920: 64 65 2e 4f 62 6a 65 63 74 29 0a 20 20 20 20 20  de.Object).     
3930: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 74   {.        if (t
3940: 79 70 20 3d 3d 20 74 79 70 65 6f 66 28 62 79 74  yp == typeof(byt
3950: 65 5b 5d 29 29 0a 20 20 20 20 20 20 20 20 20 20  e[])).          
3960: 72 65 74 75 72 6e 20 54 79 70 65 41 66 66 69 6e  return TypeAffin
3970: 69 74 79 2e 42 6c 6f 62 3b 0a 20 20 20 20 20 20  ity.Blob;.      
3980: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20    else.         
3990: 20 72 65 74 75 72 6e 20 54 79 70 65 41 66 66 69   return TypeAffi
39a0: 6e 69 74 79 2e 54 65 78 74 3b 0a 20 20 20 20 20  nity.Text;.     
39b0: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
39c0: 5f 74 79 70 65 63 6f 64 65 41 66 66 69 6e 69 74  _typecodeAffinit
39d0: 69 65 73 5b 28 69 6e 74 29 74 63 5d 3b 0a 20 20  ies[(int)tc];.  
39e0: 20 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65    }..    private
39f0: 20 73 74 61 74 69 63 20 54 79 70 65 41 66 66 69   static TypeAffi
3a00: 6e 69 74 79 5b 5d 20 5f 74 79 70 65 63 6f 64 65  nity[] _typecode
3a10: 41 66 66 69 6e 69 74 69 65 73 20 3d 20 7b 0a 20  Affinities = {. 
3a20: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
3a30: 79 2e 4e 75 6c 6c 2c 0a 20 20 20 20 20 20 54 79  y.Null,.      Ty
3a40: 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 2c  peAffinity.Blob,
3a50: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
3a60: 69 74 79 2e 4e 75 6c 6c 2c 0a 20 20 20 20 20 20  ity.Null,.      
3a70: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
3a80: 36 34 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66  64,.      TypeAf
3a90: 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a 20 20  finity.Int64,.  
3aa0: 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79      TypeAffinity
3ab0: 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20 20 54 79  .Int64,.      Ty
3ac0: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
3ad0: 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ,.      TypeAffi
3ae0: 6e 69 74 79 2e 49 6e 74 36 34 2c 20 2f 2f 20 37  nity.Int64, // 7
3af0: 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e  .      TypeAffin
3b00: 69 74 79 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20  ity.Int64,.     
3b10: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
3b20: 74 36 34 2c 0a 20 20 20 20 20 20 54 79 70 65 41  t64,.      TypeA
3b30: 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a 20  ffinity.Int64,. 
3b40: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
3b50: 79 2e 49 6e 74 36 34 2c 20 2f 2f 20 31 31 0a 20  y.Int64, // 11. 
3b60: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
3b70: 79 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20 20 54  y.Int64,.      T
3b80: 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62  ypeAffinity.Doub
3b90: 6c 65 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66  le,.      TypeAf
3ba0: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 0a 20  finity.Double,. 
3bb0: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
3bc0: 79 2e 44 6f 75 62 6c 65 2c 0a 20 20 20 20 20 20  y.Double,.      
3bd0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74  TypeAffinity.Dat
3be0: 65 54 69 6d 65 2c 0a 20 20 20 20 20 20 54 79 70  eTime,.      Typ
3bf0: 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 2c 0a  eAffinity.Null,.
3c00: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
3c10: 74 79 2e 54 65 78 74 2c 0a 20 20 20 20 7d 3b 0a  ty.Text,.    };.
3c20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3c30: 79 3e 0a 20 20 20 20 2f 2f 2f 20 46 6f 72 20 61  y>.    /// For a
3c40: 20 67 69 76 65 6e 20 74 79 70 65 20 6e 61 6d 65   given type name
3c50: 2c 20 72 65 74 75 72 6e 20 61 20 63 6c 6f 73 65  , return a close
3c60: 73 74 2d 6d 61 74 63 68 20 2e 4e 45 54 20 74 79  st-match .NET ty
3c70: 70 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  pe.    /// </sum
3c80: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
3c90: 61 72 61 6d 20 6e 61 6d 65 3d 22 4e 61 6d 65 22  aram name="Name"
3ca0: 3e 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  >The name of the
3cb0: 20 74 79 70 65 20 74 6f 20 6d 61 74 63 68 3c 2f   type to match</
3cc0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
3cd0: 72 65 74 75 72 6e 73 3e 54 68 65 20 2e 4e 45 54  returns>The .NET
3ce0: 20 44 42 54 79 70 65 20 74 68 65 20 74 65 78 74   DBType the text
3cf0: 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 3c 2f   evaluates to.</
3d00: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 69 6e 74  returns>.    int
3d10: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 44 62 54  ernal static DbT
3d20: 79 70 65 20 54 79 70 65 4e 61 6d 65 54 6f 44 62  ype TypeNameToDb
3d30: 54 79 70 65 28 73 74 72 69 6e 67 20 4e 61 6d 65  Type(string Name
3d40: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66  ).    {.      if
3d50: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
3d60: 72 45 6d 70 74 79 28 4e 61 6d 65 29 29 20 72 65  rEmpty(Name)) re
3d70: 74 75 72 6e 20 44 62 54 79 70 65 2e 4f 62 6a 65  turn DbType.Obje
3d80: 63 74 3b 0a 0a 20 20 20 20 20 20 69 6e 74 20 78  ct;..      int x
3d90: 20 3d 20 5f 74 79 70 65 4e 61 6d 65 73 2e 4c 65   = _typeNames.Le
3da0: 6e 67 74 68 3b 0a 20 20 20 20 20 20 66 6f 72 20  ngth;.      for 
3db0: 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20  (int n = 0; n < 
3dc0: 78 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20 7b 0a  x; n++).      {.
3dd0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
3de0: 6e 67 2e 43 6f 6d 70 61 72 65 28 4e 61 6d 65 2c  ng.Compare(Name,
3df0: 20 30 2c 20 5f 74 79 70 65 4e 61 6d 65 73 5b 6e   0, _typeNames[n
3e00: 5d 2e 74 79 70 65 4e 61 6d 65 2c 20 30 2c 20 5f  ].typeName, 0, _
3e10: 74 79 70 65 4e 61 6d 65 73 5b 6e 5d 2e 74 79 70  typeNames[n].typ
3e20: 65 4e 61 6d 65 2e 4c 65 6e 67 74 68 2c 20 74 72  eName.Length, tr
3e30: 75 65 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  ue, CultureInfo.
3e40: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29 20  CurrentCulture) 
3e50: 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20 20  == 0).          
3e60: 72 65 74 75 72 6e 20 5f 74 79 70 65 4e 61 6d 65  return _typeName
3e70: 73 5b 6e 5d 2e 64 61 74 61 54 79 70 65 3b 20 0a  s[n].dataType; .
3e80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
3e90: 74 75 72 6e 20 44 62 54 79 70 65 2e 4f 62 6a 65  turn DbType.Obje
3ea0: 63 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 23 65  ct;.    }.    #e
3eb0: 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 70 72  ndregion..    pr
3ec0: 69 76 61 74 65 20 73 74 61 74 69 63 20 53 51 4c  ivate static SQL
3ed0: 69 74 65 54 79 70 65 4e 61 6d 65 73 5b 5d 20 5f  iteTypeNames[] _
3ee0: 74 79 70 65 4e 61 6d 65 73 20 3d 20 7b 0a 20 20  typeNames = {.  
3ef0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
3f00: 70 65 4e 61 6d 65 73 28 22 43 4f 55 4e 54 45 52  peNames("COUNTER
3f10: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  ", DbType.Int64)
3f20: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
3f30: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 41 55 54  teTypeNames("AUT
3f40: 4f 49 4e 43 52 45 4d 45 4e 54 22 2c 20 44 62 54  OINCREMENT", DbT
3f50: 79 70 65 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20  ype.Int64),.    
3f60: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
3f70: 4e 61 6d 65 73 28 22 49 44 45 4e 54 49 54 59 22  Names("IDENTITY"
3f80: 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29 2c  , DbType.Int64),
3f90: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
3fa0: 65 54 79 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47  eTypeNames("LONG
3fb0: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  ", DbType.Int64)
3fc0: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
3fd0: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 54 49 4e  teTypeNames("TIN
3fe0: 59 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 42 79  YINT", DbType.By
3ff0: 74 65 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  te),.      new S
4000: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
4010: 49 4e 54 45 47 45 52 22 2c 20 44 62 54 79 70 65  INTEGER", DbType
4020: 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20 20 20 6e  .Int64),.      n
4030: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
4040: 65 73 28 22 49 4e 54 22 2c 20 44 62 54 79 70 65  es("INT", DbType
4050: 2e 49 6e 74 33 32 29 2c 0a 20 20 20 20 20 20 6e  .Int32),.      n
4060: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
4070: 65 73 28 22 56 41 52 43 48 41 52 22 2c 20 44 62  es("VARCHAR", Db
4080: 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20  Type.String),.  
4090: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
40a0: 70 65 4e 61 6d 65 73 28 22 4e 56 41 52 43 48 41  peNames("NVARCHA
40b0: 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  R", DbType.Strin
40c0: 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  g),.      new SQ
40d0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 43  LiteTypeNames("C
40e0: 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72  HAR", DbType.Str
40f0: 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  ing),.      new 
4100: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
4110: 22 54 45 58 54 22 2c 20 44 62 54 79 70 65 2e 53  "TEXT", DbType.S
4120: 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65  tring),.      ne
4130: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
4140: 73 28 22 44 4f 55 42 4c 45 22 2c 20 44 62 54 79  s("DOUBLE", DbTy
4150: 70 65 2e 44 6f 75 62 6c 65 29 2c 0a 20 20 20 20  pe.Double),.    
4160: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
4170: 4e 61 6d 65 73 28 22 46 4c 4f 41 54 22 2c 20 44  Names("FLOAT", D
4180: 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 2c 0a 20  bType.Double),. 
4190: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
41a0: 79 70 65 4e 61 6d 65 73 28 22 52 45 41 4c 22 2c  ypeNames("REAL",
41b0: 20 44 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 2c   DbType.Single),
41c0: 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20            .     
41d0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
41e0: 61 6d 65 73 28 22 42 49 54 22 2c 20 44 62 54 79  ames("BIT", DbTy
41f0: 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0a 20 20 20  pe.Boolean),.   
4200: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
4210: 65 4e 61 6d 65 73 28 22 59 45 53 4e 4f 22 2c 20  eNames("YESNO", 
4220: 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c  DbType.Boolean),
4230: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
4240: 65 54 79 70 65 4e 61 6d 65 73 28 22 4c 4f 47 49  eTypeNames("LOGI
4250: 43 41 4c 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f  CAL", DbType.Boo
4260: 6c 65 61 6e 29 2c 0a 20 20 20 20 20 20 6e 65 77  lean),.      new
4270: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
4280: 28 22 42 4f 4f 4c 22 2c 20 44 62 54 79 70 65 2e  ("BOOL", 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 4e 55 4d 45 52 49 43 22 2c 20 44  mes("NUMERIC", D
42c0: 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0a  bType.Decimal),.
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 44 45 43 49 4d  TypeNames("DECIM
42f0: 41 4c 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69  AL", DbType.Deci
4300: 6d 61 6c 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  mal),.      new 
4310: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
4320: 22 4d 4f 4e 45 59 22 2c 20 44 62 54 79 70 65 2e  "MONEY", DbType.
4330: 44 65 63 69 6d 61 6c 29 2c 0a 20 20 20 20 20 20  Decimal),.      
4340: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
4350: 6d 65 73 28 22 43 55 52 52 45 4e 43 59 22 2c 20  mes("CURRENCY", 
4360: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c  DbType.Decimal),
4370: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
4380: 65 54 79 70 65 4e 61 6d 65 73 28 22 54 49 4d 45  eTypeNames("TIME
4390: 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  ", DbType.DateTi
43a0: 6d 65 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  me),.      new S
43b0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
43c0: 44 41 54 45 22 2c 20 44 62 54 79 70 65 2e 44 61  DATE", DbType.Da
43d0: 74 65 54 69 6d 65 29 2c 0a 20 20 20 20 20 20 6e  teTime),.      n
43e0: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
43f0: 65 73 28 22 42 4c 4f 42 22 2c 20 44 62 54 79 70  es("BLOB", DbTyp
4400: 65 2e 42 69 6e 61 72 79 29 2c 0a 20 20 20 20 20  e.Binary),.     
4410: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4420: 61 6d 65 73 28 22 42 49 4e 41 52 59 22 2c 20 44  ames("BINARY", D
4430: 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a 20  bType.Binary),. 
4440: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4450: 79 70 65 4e 61 6d 65 73 28 22 56 41 52 42 49 4e  ypeNames("VARBIN
4460: 41 52 59 22 2c 20 44 62 54 79 70 65 2e 42 69 6e  ARY", DbType.Bin
4470: 61 72 79 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  ary),.      new 
4480: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
4490: 22 49 4d 41 47 45 22 2c 20 44 62 54 79 70 65 2e  "IMAGE", DbType.
44a0: 42 69 6e 61 72 79 29 2c 0a 20 20 20 20 20 20 6e  Binary),.      n
44b0: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
44c0: 65 73 28 22 47 45 4e 45 52 41 4c 22 2c 20 44 62  es("GENERAL", Db
44d0: 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a 20 20  Type.Binary),.  
44e0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
44f0: 70 65 4e 61 6d 65 73 28 22 4f 4c 45 4f 42 4a 45  peNames("OLEOBJE
4500: 43 54 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61  CT", DbType.Bina
4510: 72 79 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  ry),.      new S
4520: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
4530: 47 55 49 44 22 2c 20 44 62 54 79 70 65 2e 47 75  GUID", DbType.Gu
4540: 69 64 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  id),.      new S
4550: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
4560: 55 4e 49 51 55 45 49 44 45 4e 54 49 46 49 45 52  UNIQUEIDENTIFIER
4570: 22 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29 2c  ", DbType.Guid),
4580: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
4590: 65 54 79 70 65 4e 61 6d 65 73 28 22 4d 45 4d 4f  eTypeNames("MEMO
45a0: 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  ", DbType.String
45b0: 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ),.      new SQL
45c0: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4e 4f  iteTypeNames("NO
45d0: 54 45 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69  TE", DbType.Stri
45e0: 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  ng),.      new S
45f0: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
4600: 4c 4f 4e 47 54 45 58 54 22 2c 20 44 62 54 79 70  LONGTEXT", DbTyp
4610: 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20 20  e.String),.     
4620: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4630: 61 6d 65 73 28 22 4c 4f 4e 47 43 48 41 52 22 2c  ames("LONGCHAR",
4640: 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c   DbType.String),
4650: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
4660: 65 54 79 70 65 4e 61 6d 65 73 28 22 53 4d 41 4c  eTypeNames("SMAL
4670: 4c 49 4e 54 22 2c 20 44 62 54 79 70 65 2e 49 6e  LINT", DbType.In
4680: 74 31 36 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  t16),.      new 
4690: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
46a0: 22 42 49 47 49 4e 54 22 2c 20 44 62 54 79 70 65  "BIGINT", DbType
46b0: 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20 7d 3b 0a  .Int64),.    };.
46c0: 20 20 7d 0a 7d 0a                                  }.}.