System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 74c07b5a21badf1b7fb34bb258eae0c50ac9ba80:


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 54 68 69 73 20 62 61 73 65 20 63   /// This base c
0260: 6c 61 73 73 20 70 72 6f 76 69 64 65 73 20 64 61  lass provides da
0270: 74 61 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f  tatype conversio
0280: 6e 20 73 65 72 76 69 63 65 73 20 66 6f 72 20 74  n services for t
0290: 68 65 20 53 51 4c 69 74 65 20 70 72 6f 76 69 64  he SQLite provid
02a0: 65 72 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  er..  /// </summ
02b0: 61 72 79 3e 0a 20 20 70 75 62 6c 69 63 20 61 62  ary>.  public ab
02c0: 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c  stract class SQL
02d0: 69 74 65 43 6f 6e 76 65 72 74 0a 20 20 7b 0a 20  iteConvert.  {. 
02e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
02f0: 0a 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61  .    /// An arra
0300: 79 20 6f 66 20 49 53 4f 38 36 30 31 20 64 61 74  y of ISO8601 dat
0310: 65 74 69 6d 65 20 66 6f 72 6d 61 74 73 20 77 65  etime formats we
0320: 20 73 75 70 70 6f 72 74 20 63 6f 6e 76 65 72 73   support convers
0330: 69 6f 6e 20 66 72 6f 6d 0a 20 20 20 20 2f 2f 2f  ion from.    ///
0340: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
0350: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
0360: 74 72 69 6e 67 5b 5d 20 5f 64 61 74 65 74 69 6d  tring[] _datetim
0370: 65 46 6f 72 6d 61 74 73 20 3d 20 6e 65 77 20 73  eFormats = new s
0380: 74 72 69 6e 67 5b 5d 20 7b 0a 20 20 20 20 20 20  tring[] {.      
0390: 22 54 48 48 6d 6d 73 73 22 2c 0a 20 20 20 20 20  "THHmmss",.     
03a0: 20 22 54 48 48 6d 6d 22 2c 0a 20 20 20 20 20 20   "THHmm",.      
03b0: 22 48 48 3a 6d 6d 3a 73 73 22 2c 0a 20 20 20 20  "HH:mm:ss",.    
03c0: 20 20 22 48 48 3a 6d 6d 22 2c 0a 20 20 20 20 20    "HH:mm",.     
03d0: 20 22 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46   "HH:mm:ss.FFFFF
03e0: 46 46 22 2c 0a 20 20 20 20 20 20 22 79 79 2d 4d  FF",.      "yy-M
03f0: 4d 2d 64 64 22 2c 0a 20 20 20 20 20 20 22 79 79  M-dd",.      "yy
0400: 79 79 2d 4d 4d 2d 64 64 22 2c 0a 20 20 20 20 20  yy-MM-dd",.     
0410: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a   "yyyy-MM-dd HH:
0420: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22 2c 0a  mm:ss.FFFFFFF",.
0430: 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64        "yyyy-MM-d
0440: 64 20 48 48 3a 6d 6d 3a 73 73 22 2c 0a 20 20 20  d HH:mm:ss",.   
0450: 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48     "yyyy-MM-dd H
0460: 48 3a 6d 6d 22 2c 20 20 20 20 20 20 20 20 20 20  H:mm",          
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 20 20 20 0a 20 20 20 20 20 20 22 79 79 79       .      "yyy
0490: 79 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73  y-MM-ddTHH:mm:ss
04a0: 2e 46 46 46 46 46 46 46 22 2c 0a 20 20 20 20 20  .FFFFFFF",.     
04b0: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a   "yyyy-MM-ddTHH:
04c0: 6d 6d 22 2c 0a 20 20 20 20 20 20 22 79 79 79 79  mm",.      "yyyy
04d0: 2d 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 22  -MM-ddTHH:mm:ss"
04e0: 2c 0a 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64  ,.      "yyyyMMd
04f0: 64 48 48 6d 6d 73 73 22 2c 0a 20 20 20 20 20 20  dHHmmss",.      
0500: 22 79 79 79 79 4d 4d 64 64 48 48 6d 6d 22 2c 0a  "yyyyMMddHHmm",.
0510: 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64 64 54        "yyyyMMddT
0520: 48 48 6d 6d 73 73 46 46 46 46 46 46 46 22 2c 0a  HHmmssFFFFFFF",.
0530: 20 20 20 20 20 20 22 79 79 79 79 4d 4d 64 64 22        "yyyyMMdd"
0540: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2f 2f  .    };..    ///
0550: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0560: 2f 2f 20 41 6e 20 55 54 46 2d 38 20 45 6e 63 6f  // An UTF-8 Enco
0570: 64 69 6e 67 20 69 6e 73 74 61 6e 63 65 2c 20 73  ding instance, s
0580: 6f 20 77 65 20 63 61 6e 20 63 6f 6e 76 65 72 74  o we can convert
0590: 20 73 74 72 69 6e 67 73 20 74 6f 20 61 6e 64 20   strings to and 
05a0: 66 72 6f 6d 20 55 54 46 2d 38 0a 20 20 20 20 2f  from UTF-8.    /
05b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
05c0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
05d0: 20 45 6e 63 6f 64 69 6e 67 20 5f 75 74 66 38 20   Encoding _utf8 
05e0: 3d 20 6e 65 77 20 55 54 46 38 45 6e 63 6f 64 69  = new UTF8Encodi
05f0: 6e 67 28 29 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73  ng();.    /// <s
0600: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0610: 54 68 65 20 64 65 66 61 75 6c 74 20 44 61 74 65  The default Date
0620: 54 69 6d 65 20 66 6f 72 6d 61 74 20 66 6f 72 20  Time format for 
0630: 74 68 69 73 20 69 6e 73 74 61 6e 63 65 0a 20 20  this instance.  
0640: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0650: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51  .    internal SQ
0660: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20  LiteDateFormats 
0670: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 3b  _datetimeFormat;
0680: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0690: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 69 74 69  y>.    /// Initi
06a0: 61 6c 69 7a 65 73 20 74 68 65 20 63 6f 6e 76 65  alizes the conve
06b0: 72 73 69 6f 6e 20 63 6c 61 73 73 0a 20 20 20 20  rsion class.    
06c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
06d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
06e0: 6d 65 3d 22 66 6d 74 22 3e 54 68 65 20 64 65 66  me="fmt">The def
06f0: 61 75 6c 74 20 64 61 74 65 2f 74 69 6d 65 20 66  ault date/time f
0700: 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
0710: 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 3c 2f   this instance</
0720: 70 61 72 61 6d 3e 0a 20 20 20 20 69 6e 74 65 72  param>.    inter
0730: 6e 61 6c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  nal SQLiteConver
0740: 74 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  t(SQLiteDateForm
0750: 61 74 73 20 66 6d 74 29 0a 20 20 20 20 7b 0a 20  ats fmt).    {. 
0760: 20 20 20 20 20 5f 64 61 74 65 74 69 6d 65 46 6f       _datetimeFo
0770: 72 6d 61 74 20 3d 20 66 6d 74 3b 0a 20 20 20 20  rmat = fmt;.    
0780: 7d 0a 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 55  }..    #region U
0790: 54 46 2d 38 20 43 6f 6e 76 65 72 73 69 6f 6e 20  TF-8 Conversion 
07a0: 46 75 6e 63 74 69 6f 6e 73 0a 20 20 20 20 2f 2f  Functions.    //
07b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
07c0: 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 73  /// Converts a s
07d0: 74 72 69 6e 67 20 74 6f 20 61 20 55 54 46 2d 38  tring to a UTF-8
07e0: 20 65 6e 63 6f 64 65 64 20 62 79 74 65 20 61 72   encoded byte ar
07f0: 72 61 79 20 73 69 7a 65 64 20 74 6f 20 69 6e 63  ray sized to inc
0800: 6c 75 64 65 20 61 20 6e 75 6c 6c 2d 74 65 72 6d  lude a null-term
0810: 69 6e 61 74 69 6e 67 20 63 68 61 72 61 63 74 65  inating characte
0820: 72 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0830: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
0840: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63  aram name="sourc
0850: 65 54 65 78 74 22 3e 54 68 65 20 73 74 72 69 6e  eText">The strin
0860: 67 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 6f 20  g to convert to 
0870: 55 54 46 2d 38 3c 2f 70 61 72 61 6d 3e 0a 20 20  UTF-8</param>.  
0880: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
0890: 20 62 79 74 65 20 61 72 72 61 79 20 63 6f 6e 74   byte array cont
08a0: 61 69 6e 69 6e 67 20 74 68 65 20 63 6f 6e 76 65  aining the conve
08b0: 72 74 65 64 20 73 74 72 69 6e 67 20 70 6c 75 73  rted string plus
08c0: 20 61 6e 20 65 78 74 72 61 20 30 20 74 65 72 6d   an extra 0 term
08d0: 69 6e 61 74 69 6e 67 20 62 79 74 65 20 61 74 20  inating byte at 
08e0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 61  the end of the a
08f0: 72 72 61 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a  rray.</returns>.
0900: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
0910: 63 20 62 79 74 65 5b 5d 20 54 6f 55 54 46 38 28  c byte[] ToUTF8(
0920: 73 74 72 69 6e 67 20 73 6f 75 72 63 65 54 65 78  string sourceTex
0930: 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 42  t).    {.      B
0940: 79 74 65 5b 5d 20 62 79 74 65 41 72 72 61 79 3b  yte[] byteArray;
0950: 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20  .      int nlen 
0960: 3d 20 5f 75 74 66 38 2e 47 65 74 42 79 74 65 43  = _utf8.GetByteC
0970: 6f 75 6e 74 28 73 6f 75 72 63 65 54 65 78 74 29  ount(sourceText)
0980: 20 2b 20 31 3b 0a 0a 20 20 20 20 20 20 62 79 74   + 1;..      byt
0990: 65 41 72 72 61 79 20 3d 20 6e 65 77 20 62 79 74  eArray = new byt
09a0: 65 5b 6e 6c 65 6e 5d 3b 0a 20 20 20 20 20 20 6e  e[nlen];.      n
09b0: 6c 65 6e 20 3d 20 5f 75 74 66 38 2e 47 65 74 42  len = _utf8.GetB
09c0: 79 74 65 73 28 73 6f 75 72 63 65 54 65 78 74 2c  ytes(sourceText,
09d0: 20 30 2c 20 73 6f 75 72 63 65 54 65 78 74 2e 4c   0, sourceText.L
09e0: 65 6e 67 74 68 2c 20 62 79 74 65 41 72 72 61 79  ength, byteArray
09f0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 62 79 74 65  , 0);.      byte
0a00: 41 72 72 61 79 5b 6e 6c 65 6e 5d 20 3d 20 30 3b  Array[nlen] = 0;
0a10: 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 62  ..      return b
0a20: 79 74 65 41 72 72 61 79 3b 0a 20 20 20 20 7d 0a  yteArray;.    }.
0a30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0a40: 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65  y>.    /// Conve
0a50: 72 74 20 61 20 44 61 74 65 54 69 6d 65 20 74 6f  rt a DateTime to
0a60: 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64   a UTF-8 encoded
0a70: 2c 20 7a 65 72 6f 2d 74 65 72 6d 69 6e 61 74 65  , zero-terminate
0a80: 64 20 62 79 74 65 20 61 72 72 61 79 2e 0a 20 20  d byte array..  
0a90: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0aa0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  .    /// <remark
0ab0: 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  s>.    /// This 
0ac0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 63 6f  function is a co
0ad0: 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e 63 74 69  nvenience functi
0ae0: 6f 6e 2c 20 77 68 69 63 68 20 66 69 72 73 74 20  on, which first 
0af0: 63 61 6c 6c 73 20 54 6f 53 74 72 69 6e 67 28 29  calls ToString()
0b00: 20 6f 6e 20 74 68 65 20 44 61 74 65 54 69 6d 65   on the DateTime
0b10: 2c 20 61 6e 64 20 74 68 65 6e 20 63 61 6c 6c 73  , and then calls
0b20: 20 54 6f 55 54 46 38 28 29 20 77 69 74 68 20 74   ToUTF8() with t
0b30: 68 65 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e  he.    /// strin
0b40: 67 20 72 65 73 75 6c 74 2e 0a 20 20 20 20 2f 2f  g result..    //
0b50: 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20  / </remarks>.   
0b60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0b70: 3d 22 64 61 74 65 54 69 6d 65 56 61 6c 75 65 22  ="dateTimeValue"
0b80: 3e 54 68 65 20 44 61 74 65 54 69 6d 65 20 74 6f  >The DateTime to
0b90: 20 63 6f 6e 76 65 72 74 2e 3c 2f 70 61 72 61 6d   convert.</param
0ba0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
0bb0: 6e 73 3e 54 68 65 20 55 54 46 2d 38 20 65 6e 63  ns>The UTF-8 enc
0bc0: 6f 64 65 64 20 73 74 72 69 6e 67 2c 20 69 6e 63  oded string, inc
0bd0: 6c 75 64 69 6e 67 20 61 20 30 20 74 65 72 6d 69  luding a 0 termi
0be0: 6e 61 74 69 6e 67 20 62 79 74 65 20 61 74 20 74  nating byte at t
0bf0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 61 72  he end of the ar
0c00: 72 61 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  ray.</returns>. 
0c10: 20 20 20 70 75 62 6c 69 63 20 62 79 74 65 5b 5d     public byte[]
0c20: 20 54 6f 55 54 46 38 28 44 61 74 65 54 69 6d 65   ToUTF8(DateTime
0c30: 20 64 61 74 65 54 69 6d 65 56 61 6c 75 65 29 0a   dateTimeValue).
0c40: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
0c50: 72 6e 20 54 6f 55 54 46 38 28 54 6f 53 74 72 69  rn ToUTF8(ToStri
0c60: 6e 67 28 64 61 74 65 54 69 6d 65 56 61 6c 75 65  ng(dateTimeValue
0c70: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
0c80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0c90: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20   /// Converts a 
0ca0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e  UTF-8 encoded In
0cb0: 74 50 74 72 20 6f 66 20 74 68 65 20 73 70 65 63  tPtr of the spec
0cc0: 69 66 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74  ified length int
0cd0: 6f 20 61 20 2e 4e 45 54 20 73 74 72 69 6e 67 0a  o a .NET string.
0ce0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0cf0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
0d00: 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73 74  m name="nativest
0d10: 72 69 6e 67 22 3e 54 68 65 20 70 6f 69 6e 74 65  ring">The pointe
0d20: 72 20 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20  r to the memory 
0d30: 77 68 65 72 65 20 74 68 65 20 55 54 46 2d 38 20  where the UTF-8 
0d40: 73 74 72 69 6e 67 20 69 73 20 65 6e 63 6f 64 65  string is encode
0d50: 64 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  d</param>.    //
0d60: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
0d70: 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 22 3e  ativestringlen">
0d80: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  The number of by
0d90: 74 65 73 20 74 6f 20 64 65 63 6f 64 65 3c 2f 70  tes to decode</p
0da0: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
0db0: 65 74 75 72 6e 73 3e 41 20 73 74 72 69 6e 67 20  eturns>A string 
0dc0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
0dd0: 72 61 6e 73 6c 61 74 65 64 20 63 68 61 72 61 63  ranslated charac
0de0: 74 65 72 28 73 29 3c 2f 72 65 74 75 72 6e 73 3e  ter(s)</returns>
0df0: 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74  .    public virt
0e00: 75 61 6c 20 73 74 72 69 6e 67 20 54 6f 53 74 72  ual string ToStr
0e10: 69 6e 67 28 49 6e 74 50 74 72 20 6e 61 74 69 76  ing(IntPtr nativ
0e20: 65 73 74 72 69 6e 67 2c 20 69 6e 74 20 6e 61 74  estring, int nat
0e30: 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 0a 20 20  ivestringlen).  
0e40: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e    {.      return
0e50: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 6e 61   UTF8ToString(na
0e60: 74 69 76 65 73 74 72 69 6e 67 2c 20 6e 61 74 69  tivestring, nati
0e70: 76 65 73 74 72 69 6e 67 6c 65 6e 29 3b 0a 20 20  vestringlen);.  
0e80: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
0e90: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43  mmary>.    /// C
0ea0: 6f 6e 76 65 72 74 73 20 61 20 55 54 46 2d 38 20  onverts a UTF-8 
0eb0: 65 6e 63 6f 64 65 64 20 49 6e 74 50 74 72 20 6f  encoded IntPtr o
0ec0: 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  f the specified 
0ed0: 6c 65 6e 67 74 68 20 69 6e 74 6f 20 61 20 2e 4e  length into a .N
0ee0: 45 54 20 73 74 72 69 6e 67 0a 20 20 20 20 2f 2f  ET string.    //
0ef0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
0f00: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0f10: 3d 22 6e 61 74 69 76 65 73 74 72 69 6e 67 22 3e  ="nativestring">
0f20: 54 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  The pointer to t
0f30: 68 65 20 6d 65 6d 6f 72 79 20 77 68 65 72 65 20  he memory where 
0f40: 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
0f50: 20 69 73 20 65 6e 63 6f 64 65 64 3c 2f 70 61 72   is encoded</par
0f60: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  am>.    /// <par
0f70: 61 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65 73  am name="natives
0f80: 74 72 69 6e 67 6c 65 6e 22 3e 54 68 65 20 6e 75  tringlen">The nu
0f90: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f  mber of bytes to
0fa0: 20 64 65 63 6f 64 65 3c 2f 70 61 72 61 6d 3e 0a   decode</param>.
0fb0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
0fc0: 3e 41 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  >A string contai
0fd0: 6e 69 6e 67 20 74 68 65 20 74 72 61 6e 73 6c 61  ning the transla
0fe0: 74 65 64 20 63 68 61 72 61 63 74 65 72 28 73 29  ted character(s)
0ff0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
1000: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
1010: 69 6e 67 20 55 54 46 38 54 6f 53 74 72 69 6e 67  ing UTF8ToString
1020: 28 49 6e 74 50 74 72 20 6e 61 74 69 76 65 73 74  (IntPtr nativest
1030: 72 69 6e 67 2c 20 69 6e 74 20 6e 61 74 69 76 65  ring, int native
1040: 73 74 72 69 6e 67 6c 65 6e 29 0a 20 20 20 20 7b  stringlen).    {
1050: 0a 20 20 20 20 20 20 69 66 20 28 6e 61 74 69 76  .      if (nativ
1060: 65 73 74 72 69 6e 67 6c 65 6e 20 3d 3d 20 30 20  estringlen == 0 
1070: 7c 7c 20 6e 61 74 69 76 65 73 74 72 69 6e 67 20  || nativestring 
1080: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  == IntPtr.Zero) 
1090: 72 65 74 75 72 6e 20 22 22 3b 0a 20 20 20 20 20  return "";.     
10a0: 20 69 66 20 28 6e 61 74 69 76 65 73 74 72 69 6e   if (nativestrin
10b0: 67 6c 65 6e 20 3d 3d 20 2d 31 29 0a 20 20 20 20  glen == -1).    
10c0: 20 20 7b 0a 20 20 20 20 20 20 20 20 64 6f 0a 20    {.        do. 
10d0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
10e0: 20 20 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c     nativestringl
10f0: 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 20  en++;.        } 
1100: 77 68 69 6c 65 20 28 4d 61 72 73 68 61 6c 2e 52  while (Marshal.R
1110: 65 61 64 42 79 74 65 28 6e 61 74 69 76 65 73 74  eadByte(nativest
1120: 72 69 6e 67 2c 20 6e 61 74 69 76 65 73 74 72 69  ring, nativestri
1130: 6e 67 6c 65 6e 29 20 21 3d 20 30 29 3b 0a 20 20  nglen) != 0);.  
1140: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 62 79 74      }..      byt
1150: 65 5b 5d 20 62 79 74 65 41 72 72 61 79 20 3d 20  e[] byteArray = 
1160: 6e 65 77 20 62 79 74 65 5b 6e 61 74 69 76 65 73  new byte[natives
1170: 74 72 69 6e 67 6c 65 6e 5d 3b 0a 20 20 20 20 20  tringlen];.     
1180: 20 0a 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e   .      Marshal.
1190: 43 6f 70 79 28 6e 61 74 69 76 65 73 74 72 69 6e  Copy(nativestrin
11a0: 67 2c 20 62 79 74 65 41 72 72 61 79 2c 20 30 2c  g, byteArray, 0,
11b0: 20 6e 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e   nativestringlen
11c0: 29 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e  );..      return
11d0: 20 5f 75 74 66 38 2e 47 65 74 53 74 72 69 6e 67   _utf8.GetString
11e0: 28 62 79 74 65 41 72 72 61 79 2c 20 30 2c 20 6e  (byteArray, 0, n
11f0: 61 74 69 76 65 73 74 72 69 6e 67 6c 65 6e 29 3b  ativestringlen);
1200: 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 23 65 6e  .    }...    #en
1210: 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 23 72 65  dregion..    #re
1220: 67 69 6f 6e 20 44 61 74 65 54 69 6d 65 20 43 6f  gion DateTime Co
1230: 6e 76 65 72 73 69 6f 6e 20 46 75 6e 63 74 69 6f  nversion Functio
1240: 6e 73 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ns.    /// <summ
1250: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ary>.    /// Con
1260: 76 65 72 74 73 20 61 20 73 74 72 69 6e 67 20 69  verts a string i
1270: 6e 74 6f 20 61 20 44 61 74 65 54 69 6d 65 2c 20  nto a DateTime, 
1280: 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  using the curren
1290: 74 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  t DateTimeFormat
12a0: 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74   specified for t
12b0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  he connection wh
12c0: 65 6e 20 69 74 20 77 61 73 20 6f 70 65 6e 65 64  en it was opened
12d0: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
12e0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ary>.    /// <re
12f0: 6d 61 72 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 41  marks>.    /// A
1300: 63 63 65 70 74 61 62 6c 65 20 49 53 4f 38 36 30  cceptable ISO860
1310: 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  1 DateTime forma
1320: 74 73 20 61 72 65 3a 0a 20 20 20 20 2f 2f 2f 20  ts are:.    /// 
1330: 20 20 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a    yyyy-MM-dd HH:
1340: 6d 6d 3a 73 73 0a 20 20 20 20 2f 2f 2f 20 20 20  mm:ss.    ///   
1350: 79 79 79 79 4d 4d 64 64 48 48 6d 6d 73 73 0a 20  yyyyMMddHHmmss. 
1360: 20 20 20 2f 2f 2f 20 20 20 79 79 79 79 4d 4d 64     ///   yyyyMMd
1370: 64 54 48 48 6d 6d 73 73 66 66 66 66 66 66 66 0a  dTHHmmssfffffff.
1380: 20 20 20 20 2f 2f 2f 20 20 20 79 79 79 79 2d 4d      ///   yyyy-M
1390: 4d 2d 64 64 0a 20 20 20 20 2f 2f 2f 20 20 20 79  M-dd.    ///   y
13a0: 79 2d 4d 4d 2d 64 64 0a 20 20 20 20 2f 2f 2f 20  y-MM-dd.    /// 
13b0: 20 20 79 79 79 79 4d 4d 64 64 0a 20 20 20 20 2f    yyyyMMdd.    /
13c0: 2f 2f 20 20 20 48 48 3a 6d 6d 3a 73 73 0a 20 20  //   HH:mm:ss.  
13d0: 20 20 2f 2f 2f 20 20 20 54 48 48 6d 6d 73 73 0a    ///   THHmmss.
13e0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
13f0: 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  s>.    /// <para
1400: 6d 20 6e 61 6d 65 3d 22 64 61 74 65 54 65 78 74  m name="dateText
1410: 22 3e 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6e  ">The string con
1420: 74 61 69 6e 69 6e 67 20 65 69 74 68 65 72 20 61  taining either a
1430: 20 54 69 63 6b 20 76 61 6c 75 65 2c 20 61 20 4a   Tick value, a J
1440: 75 6c 69 61 6e 44 61 79 20 64 6f 75 62 6c 65 2c  ulianDay double,
1450: 20 6f 72 20 61 6e 20 49 53 4f 38 36 30 31 2d 66   or an ISO8601-f
1460: 6f 72 6d 61 74 20 73 74 72 69 6e 67 3c 2f 70 61  ormat string</pa
1470: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
1480: 74 75 72 6e 73 3e 41 20 44 61 74 65 54 69 6d 65  turns>A DateTime
1490: 20 76 61 6c 75 65 3c 2f 72 65 74 75 72 6e 73 3e   value</returns>
14a0: 0a 20 20 20 20 70 75 62 6c 69 63 20 44 61 74 65  .    public Date
14b0: 54 69 6d 65 20 54 6f 44 61 74 65 54 69 6d 65 28  Time ToDateTime(
14c0: 73 74 72 69 6e 67 20 64 61 74 65 54 65 78 74 29  string dateText)
14d0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 73 77 69  .    {.      swi
14e0: 74 63 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f  tch (_datetimeFo
14f0: 72 6d 61 74 29 0a 20 20 20 20 20 20 7b 0a 20 20  rmat).      {.  
1500: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74        case SQLit
1510: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63  eDateFormats.Tic
1520: 6b 73 3a 0a 20 20 20 20 20 20 20 20 20 20 72 65  ks:.          re
1530: 74 75 72 6e 20 6e 65 77 20 44 61 74 65 54 69 6d  turn new DateTim
1540: 65 28 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36  e(Convert.ToInt6
1550: 34 28 64 61 74 65 54 65 78 74 2c 20 43 75 6c 74  4(dateText, Cult
1560: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
1570: 74 43 75 6c 74 75 72 65 29 29 3b 0a 20 20 20 20  tCulture));.    
1580: 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 44      case SQLiteD
1590: 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61  ateFormats.Julia
15a0: 6e 44 61 79 3a 0a 20 20 20 20 20 20 20 20 20 20  nDay:.          
15b0: 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69 6d  return ToDateTim
15c0: 65 28 43 6f 6e 76 65 72 74 2e 54 6f 44 6f 75 62  e(Convert.ToDoub
15d0: 6c 65 28 64 61 74 65 54 65 78 74 2c 20 43 75 6c  le(dateText, Cul
15e0: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
15f0: 6e 74 43 75 6c 74 75 72 65 29 29 3b 0a 20 20 20  ntCulture));.   
1600: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
1610: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
1620: 61 74 65 54 69 6d 65 2e 50 61 72 73 65 45 78 61  ateTime.ParseExa
1630: 63 74 28 64 61 74 65 54 65 78 74 2c 20 5f 64 61  ct(dateText, _da
1640: 74 65 74 69 6d 65 46 6f 72 6d 61 74 73 2c 20 44  tetimeFormats, D
1650: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 49 6e 66  ateTimeFormatInf
1660: 6f 2e 49 6e 76 61 72 69 61 6e 74 49 6e 66 6f 2c  o.InvariantInfo,
1670: 20 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 2e   DateTimeStyles.
1680: 4e 6f 6e 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  None);.      }. 
1690: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
16a0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
16b0: 43 6f 6e 76 65 72 74 73 20 61 20 6a 75 6c 69 61  Converts a julia
16c0: 6e 64 61 79 20 76 61 6c 75 65 20 69 6e 74 6f 20  nday value into 
16d0: 61 20 44 61 74 65 54 69 6d 65 0a 20 20 20 20 2f  a DateTime.    /
16e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
16f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1700: 65 3d 22 6a 75 6c 69 61 6e 44 61 79 22 3e 54 68  e="julianDay">Th
1710: 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 6e 76 65  e value to conve
1720: 72 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  rt</param>.    /
1730: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 2e 4e  // <returns>A .N
1740: 45 54 20 44 61 74 65 54 69 6d 65 3c 2f 72 65 74  ET DateTime</ret
1750: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
1760: 20 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74 65   DateTime ToDate
1770: 54 69 6d 65 28 64 6f 75 62 6c 65 20 6a 75 6c 69  Time(double juli
1780: 61 6e 44 61 79 29 0a 20 20 20 20 7b 0a 20 20 20  anDay).    {.   
1790: 20 20 20 72 65 74 75 72 6e 20 44 61 74 65 54 69     return DateTi
17a0: 6d 65 2e 46 72 6f 6d 4f 41 44 61 74 65 28 6a 75  me.FromOADate(ju
17b0: 6c 69 61 6e 44 61 79 20 2d 20 32 34 31 35 30 31  lianDay - 241501
17c0: 38 2e 35 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  8.5);.    }..   
17d0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
17e0: 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20     /// Converts 
17f0: 61 20 44 61 74 65 54 69 6d 65 20 73 74 72 75 63  a DateTime struc
1800: 74 20 74 6f 20 61 20 4a 75 6c 69 61 6e 44 61 79  t to a JulianDay
1810: 20 64 6f 75 62 6c 65 0a 20 20 20 20 2f 2f 2f 20   double.    /// 
1820: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
1830: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1840: 76 61 6c 75 65 22 3e 54 68 65 20 44 61 74 65 54  value">The DateT
1850: 69 6d 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f  ime to convert</
1860: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
1870: 72 65 74 75 72 6e 73 3e 54 68 65 20 4a 75 6c 69  returns>The Juli
1880: 61 6e 44 61 79 20 76 61 6c 75 65 20 74 68 65 20  anDay value the 
1890: 44 61 74 65 74 69 6d 65 20 72 65 70 72 65 73 65  Datetime represe
18a0: 6e 74 73 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  nts</returns>.  
18b0: 20 20 70 75 62 6c 69 63 20 64 6f 75 62 6c 65 20    public double 
18c0: 54 6f 4a 75 6c 69 61 6e 44 61 79 28 44 61 74 65  ToJulianDay(Date
18d0: 54 69 6d 65 20 76 61 6c 75 65 29 0a 20 20 20 20  Time value).    
18e0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76  {.      return v
18f0: 61 6c 75 65 2e 54 6f 4f 41 44 61 74 65 28 29 20  alue.ToOADate() 
1900: 2b 20 32 34 31 35 30 31 38 2e 35 3b 0a 20 20 20  + 2415018.5;.   
1910: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
1920: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f  mary>.    /// Co
1930: 6e 76 65 72 74 73 20 61 20 44 61 74 65 54 69 6d  nverts a DateTim
1940: 65 20 74 6f 20 61 20 73 74 72 69 6e 67 20 76 61  e to a string va
1950: 6c 75 65 2c 20 75 73 69 6e 67 20 74 68 65 20 63  lue, using the c
1960: 75 72 72 65 6e 74 20 44 61 74 65 54 69 6d 65 46  urrent DateTimeF
1970: 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 64 20  ormat specified 
1980: 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  for the connecti
1990: 6f 6e 20 77 68 65 6e 20 69 74 20 77 61 73 20 6f  on when it was o
19a0: 70 65 6e 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c  pened..    /// <
19b0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
19c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
19d0: 61 74 65 56 61 6c 75 65 22 3e 54 68 65 20 44 61  ateValue">The Da
19e0: 74 65 54 69 6d 65 20 76 61 6c 75 65 20 74 6f 20  teTime value to 
19f0: 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0a  convert</param>.
1a00: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1a10: 3e 45 69 74 68 65 72 20 61 20 73 74 72 69 6e 67  >Either a string
1a20: 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 74   consisting of t
1a30: 68 65 20 74 69 63 6b 20 63 6f 75 6e 74 20 66 6f  he tick count fo
1a40: 72 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  r DateTimeFormat
1a50: 2e 54 69 63 6b 73 2c 20 61 20 4a 75 6c 69 61 6e  .Ticks, a Julian
1a60: 44 61 79 20 64 6f 75 62 6c 65 2c 20 6f 72 20 61  Day double, or a
1a70: 20 64 61 74 65 2f 74 69 6d 65 20 69 6e 20 49 53   date/time in IS
1a80: 4f 38 36 30 31 20 66 6f 72 6d 61 74 2e 3c 2f 72  O8601 format.</r
1a90: 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c  eturns>.    publ
1aa0: 69 63 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69  ic string ToStri
1ab0: 6e 67 28 44 61 74 65 54 69 6d 65 20 64 61 74 65  ng(DateTime date
1ac0: 56 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20 20  Value).    {.   
1ad0: 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74 65     switch (_date
1ae0: 74 69 6d 65 46 6f 72 6d 61 74 29 0a 20 20 20 20  timeFormat).    
1af0: 20 20 7b 0a 20 20 20 20 20 20 20 20 63 61 73 65    {.        case
1b00: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
1b10: 74 73 2e 54 69 63 6b 73 3a 0a 20 20 20 20 20 20  ts.Ticks:.      
1b20: 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65 56      return dateV
1b30: 61 6c 75 65 2e 54 69 63 6b 73 2e 54 6f 53 74 72  alue.Ticks.ToStr
1b40: 69 6e 67 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  ing(CultureInfo.
1b50: 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
1b60: 29 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  );.        case 
1b70: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
1b80: 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0a 20 20 20  s.JulianDay:.   
1b90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f         return To
1ba0: 4a 75 6c 69 61 6e 44 61 79 28 64 61 74 65 56 61  JulianDay(dateVa
1bb0: 6c 75 65 29 2e 54 6f 53 74 72 69 6e 67 28 43 75  lue).ToString(Cu
1bc0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
1bd0: 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20  antCulture);.   
1be0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
1bf0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64          return d
1c00: 61 74 65 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e  ateValue.ToStrin
1c10: 67 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61  g(_datetimeForma
1c20: 74 73 5b 37 5d 2c 20 43 75 6c 74 75 72 65 49 6e  ts[7], CultureIn
1c30: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
1c40: 75 72 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ure);.      }.  
1c50: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
1c60: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49  mmary>.    /// I
1c70: 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
1c80: 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 55 54   to convert a UT
1c90: 46 2d 38 20 65 6e 63 6f 64 65 64 20 49 6e 74 50  F-8 encoded IntP
1ca0: 74 72 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  tr of the specif
1cb0: 69 65 64 20 6c 65 6e 67 74 68 20 74 6f 20 61 20  ied length to a 
1cc0: 44 61 74 65 54 69 6d 65 2e 0a 20 20 20 20 2f 2f  DateTime..    //
1cd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
1ce0: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20   /// <remarks>. 
1cf0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61     /// This is a
1d00: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 66 75 6e   convenience fun
1d10: 63 74 69 6f 6e 2c 20 77 68 69 63 68 20 66 69 72  ction, which fir
1d20: 73 74 20 63 61 6c 6c 73 20 54 6f 53 74 72 69 6e  st calls ToStrin
1d30: 67 28 29 20 6f 6e 20 74 68 65 20 49 6e 74 50 74  g() on the IntPt
1d40: 72 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20  r to convert it 
1d50: 74 6f 20 61 20 73 74 72 69 6e 67 2c 20 74 68 65  to a string, the
1d60: 6e 20 63 61 6c 6c 73 0a 20 20 20 20 2f 2f 2f 20  n calls.    /// 
1d70: 54 6f 44 61 74 65 54 69 6d 65 28 29 20 6f 6e 20  ToDateTime() on 
1d80: 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20 72 65  the string to re
1d90: 74 75 72 6e 20 61 20 44 61 74 65 54 69 6d 65 2e  turn a DateTime.
1da0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72  .    /// </remar
1db0: 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ks>.    /// <par
1dc0: 61 6d 20 6e 61 6d 65 3d 22 70 74 72 22 3e 41 20  am name="ptr">A 
1dd0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 55  pointer to the U
1de0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 73 74 72  TF-8 encoded str
1df0: 69 6e 67 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ing</param>.    
1e00: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e10: 22 6c 65 6e 22 3e 54 68 65 20 6c 65 6e 67 74 68  "len">The length
1e20: 20 69 6e 20 62 79 74 65 73 20 6f 66 20 74 68 65   in bytes of the
1e30: 20 73 74 72 69 6e 67 3c 2f 70 61 72 61 6d 3e 0a   string</param>.
1e40: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1e50: 3e 54 68 65 20 70 61 72 73 65 64 20 44 61 74 65  >The parsed Date
1e60: 54 69 6d 65 20 76 61 6c 75 65 3c 2f 72 65 74 75  Time value</retu
1e70: 72 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61  rns>.    interna
1e80: 6c 20 44 61 74 65 54 69 6d 65 20 54 6f 44 61 74  l DateTime ToDat
1e90: 65 54 69 6d 65 28 49 6e 74 50 74 72 20 70 74 72  eTime(IntPtr ptr
1ea0: 2c 20 69 6e 74 20 6c 65 6e 29 0a 20 20 20 20 7b  , int len).    {
1eb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f  .      return To
1ec0: 44 61 74 65 54 69 6d 65 28 54 6f 53 74 72 69 6e  DateTime(ToStrin
1ed0: 67 28 70 74 72 2c 20 6c 65 6e 29 29 3b 0a 20 20  g(ptr, len));.  
1ee0: 20 20 7d 0a 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
1ef0: 69 6f 6e 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ion..    /// <su
1f00: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 53  mmary>.    /// S
1f10: 6d 61 72 74 20 6d 65 74 68 6f 64 20 6f 66 20 73  mart method of s
1f20: 70 6c 69 74 74 69 6e 67 20 61 20 73 74 72 69 6e  plitting a strin
1f30: 67 2e 20 20 53 6b 69 70 73 20 71 75 6f 74 65 64  g.  Skips quoted
1f40: 20 65 6c 65 6d 65 6e 74 73 2c 20 72 65 6d 6f 76   elements, remov
1f50: 65 73 20 74 68 65 20 71 75 6f 74 65 73 2e 0a 20  es the quotes.. 
1f60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1f70: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  >.    /// <remar
1f80: 6b 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  ks>.    /// This
1f90: 20 73 70 6c 69 74 20 66 75 6e 63 74 69 6f 6e 20   split function 
1fa0: 77 6f 72 6b 73 20 73 6f 6d 65 77 68 61 74 20 6c  works somewhat l
1fb0: 69 6b 65 20 74 68 65 20 53 74 72 69 6e 67 2e 53  ike the String.S
1fc0: 70 6c 69 74 28 29 20 66 75 6e 63 74 69 6f 6e 20  plit() function 
1fd0: 69 6e 20 74 68 61 74 20 69 74 20 62 72 65 61 6b  in that it break
1fe0: 73 20 61 70 61 72 74 20 61 20 73 74 72 69 6e 67  s apart a string
1ff0: 20 69 6e 74 6f 0a 20 20 20 20 2f 2f 2f 20 70 69   into.    /// pi
2000: 65 63 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73  eces and returns
2010: 20 74 68 65 20 70 69 65 63 65 73 20 61 73 20 61   the pieces as a
2020: 6e 20 61 72 72 61 79 2e 20 20 54 68 65 20 70 72  n array.  The pr
2030: 69 6d 61 72 79 20 64 69 66 66 65 72 65 6e 63 65  imary difference
2040: 73 20 61 72 65 3a 0a 20 20 20 20 2f 2f 2f 20 3c  s are:.    /// <
2050: 6c 69 73 74 20 74 79 70 65 3d 22 62 75 6c 6c 65  list type="bulle
2060: 74 22 3e 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65  t">.    /// <ite
2070: 6d 3e 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4f  m><description>O
2080: 6e 6c 79 20 6f 6e 65 20 63 68 61 72 61 63 74 65  nly one characte
2090: 72 20 63 61 6e 20 62 65 20 70 72 6f 76 69 64 65  r can be provide
20a0: 64 20 61 73 20 61 20 73 65 70 61 72 61 74 6f 72  d as a separator
20b0: 20 63 68 61 72 61 63 74 65 72 3c 2f 64 65 73 63   character</desc
20c0: 72 69 70 74 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0a  ription></item>.
20d0: 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 3c 64      /// <item><d
20e0: 65 73 63 72 69 70 74 69 6f 6e 3e 51 75 6f 74 65  escription>Quote
20f0: 64 20 74 65 78 74 20 69 6e 73 69 64 65 20 74 68  d text inside th
2100: 65 20 73 74 72 69 6e 67 20 69 73 20 73 6b 69 70  e string is skip
2110: 70 65 64 20 6f 76 65 72 20 77 68 65 6e 20 73 65  ped over when se
2120: 61 72 63 68 69 6e 67 20 66 6f 72 20 74 68 65 20  arching for the 
2130: 73 65 70 61 72 61 74 6f 72 2c 20 61 6e 64 20 74  separator, and t
2140: 68 65 20 71 75 6f 74 65 73 20 61 72 65 20 72 65  he quotes are re
2150: 6d 6f 76 65 64 2e 3c 2f 64 65 73 63 72 69 70 74  moved.</descript
2160: 69 6f 6e 3e 3c 2f 69 74 65 6d 3e 0a 20 20 20 20  ion></item>.    
2170: 2f 2f 2f 20 3c 2f 6c 69 73 74 3e 0a 20 20 20 20  /// </list>.    
2180: 2f 2f 2f 20 54 68 75 73 2c 20 69 66 20 73 70 6c  /// Thus, if spl
2190: 69 74 74 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f  itting the follo
21a0: 77 69 6e 67 20 73 74 72 69 6e 67 20 6c 6f 6f 6b  wing string look
21b0: 69 6e 67 20 66 6f 72 20 61 20 63 6f 6d 6d 61 3a  ing for a comma:
21c0: 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 4f 6e  <br/>.    /// On
21d0: 65 2c 54 77 6f 2c 20 22 54 68 72 65 65 2c 20 46  e,Two, "Three, F
21e0: 6f 75 72 22 2c 20 46 69 76 65 3c 62 72 2f 3e 0a  our", Five<br/>.
21f0: 20 20 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0a 20 20      /// <br/>.  
2200: 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75 6c 74    /// The result
2210: 69 6e 67 20 61 72 72 61 79 20 77 6f 75 6c 64 20  ing array would 
2220: 63 6f 6e 74 61 69 6e 3c 62 72 2f 3e 0a 20 20 20  contain<br/>.   
2230: 20 2f 2f 2f 20 5b 30 5d 20 4f 6e 65 3c 62 72 2f   /// [0] One<br/
2240: 3e 0a 20 20 20 20 2f 2f 2f 20 5b 31 5d 20 54 77  >.    /// [1] Tw
2250: 6f 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 5b  o<br/>.    /// [
2260: 32 5d 20 54 68 72 65 65 2c 20 46 6f 75 72 3c 62  2] Three, Four<b
2270: 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20 5b 33 5d 20  r/>.    /// [3] 
2280: 46 69 76 65 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f  Five<br/>.    //
2290: 2f 20 3c 62 72 2f 3e 0a 20 20 20 20 2f 2f 2f 20  / <br/>.    /// 
22a0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 6c 65  Note that the le
22b0: 61 64 69 6e 67 20 61 6e 64 20 74 72 61 69 6c 69  ading and traili
22c0: 6e 67 20 73 70 61 63 65 73 20 77 65 72 65 20 72  ng spaces were r
22d0: 65 6d 6f 76 65 64 20 66 72 6f 6d 20 65 61 63 68  emoved from each
22e0: 20 69 74 65 6d 20 64 75 72 69 6e 67 20 74 68 65   item during the
22f0: 20 73 70 6c 69 74 2e 0a 20 20 20 20 2f 2f 2f 20   split..    /// 
2300: 3c 2f 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f  </remarks>.    /
2310: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2320: 73 6f 75 72 63 65 22 3e 53 6f 75 72 63 65 20 73  source">Source s
2330: 74 72 69 6e 67 20 74 6f 20 73 70 6c 69 74 20 61  tring to split a
2340: 70 61 72 74 3c 2f 70 61 72 61 6d 3e 0a 20 20 20  part</param>.   
2350: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2360: 3d 22 73 65 70 61 72 61 74 6f 72 22 3e 53 65 70  ="separator">Sep
2370: 61 72 61 74 6f 72 20 63 68 61 72 61 63 74 65 72  arator character
2380: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
2390: 20 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 72 69   <returns>A stri
23a0: 6e 67 20 61 72 72 61 79 20 6f 66 20 74 68 65 20  ng array of the 
23b0: 73 70 6c 69 74 20 75 70 20 65 6c 65 6d 65 6e 74  split up element
23c0: 73 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  s</returns>.    
23d0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
23e0: 72 69 6e 67 5b 5d 20 53 70 6c 69 74 28 73 74 72  ring[] Split(str
23f0: 69 6e 67 20 73 6f 75 72 63 65 2c 20 63 68 61 72  ing source, char
2400: 20 73 65 70 61 72 61 74 6f 72 29 0a 20 20 20 20   separator).    
2410: 7b 0a 20 20 20 20 20 20 63 68 61 72 5b 5d 20 74  {.      char[] t
2420: 6f 6b 73 20 3d 20 6e 65 77 20 63 68 61 72 5b 32  oks = new char[2
2430: 5d 20 7b 20 27 5c 22 27 2c 20 73 65 70 61 72 61  ] { '\"', separa
2440: 74 6f 72 20 7d 3b 0a 20 20 20 20 20 20 63 68 61  tor };.      cha
2450: 72 5b 5d 20 71 75 6f 74 20 3d 20 6e 65 77 20 63  r[] quot = new c
2460: 68 61 72 5b 31 5d 20 7b 20 27 5c 22 27 20 7d 3b  har[1] { '\"' };
2470: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 30  .      int n = 0
2480: 3b 0a 20 20 20 20 20 20 4c 69 73 74 3c 73 74 72  ;.      List<str
2490: 69 6e 67 3e 20 6c 73 20 3d 20 6e 65 77 20 4c 69  ing> ls = new Li
24a0: 73 74 3c 73 74 72 69 6e 67 3e 28 29 3b 0a 20 20  st<string>();.  
24b0: 20 20 20 20 73 74 72 69 6e 67 20 73 3b 0a 0a 20      string s;.. 
24c0: 20 20 20 20 20 77 68 69 6c 65 20 28 73 6f 75 72       while (sour
24d0: 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0a 20  ce.Length > 0). 
24e0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 6e       {.        n
24f0: 20 3d 20 73 6f 75 72 63 65 2e 49 6e 64 65 78 4f   = source.IndexO
2500: 66 41 6e 79 28 74 6f 6b 73 2c 20 6e 29 3b 0a 20  fAny(toks, n);. 
2510: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
2520: 2d 31 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  -1) break;.     
2530: 20 20 20 69 66 20 28 73 6f 75 72 63 65 5b 6e 5d     if (source[n]
2540: 20 3d 3d 20 74 6f 6b 73 5b 30 5d 29 0a 20 20 20   == toks[0]).   
2550: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
2560: 20 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f 75 72   //source = sour
2570: 63 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31 29 3b  ce.Remove(n, 1);
2580: 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 73  .          n = s
2590: 6f 75 72 63 65 2e 49 6e 64 65 78 4f 66 41 6e 79  ource.IndexOfAny
25a0: 28 71 75 6f 74 2c 20 6e 20 2b 20 31 29 3b 0a 20  (quot, n + 1);. 
25b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d           if (n =
25c0: 3d 20 2d 31 29 0a 20 20 20 20 20 20 20 20 20 20  = -1).          
25d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  {.            //
25e0: 73 6f 75 72 63 65 20 3d 20 22 5c 22 22 20 2b 20  source = "\"" + 
25f0: 73 6f 75 72 63 65 3b 0a 20 20 20 20 20 20 20 20  source;.        
2600: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2610: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2620: 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20   n++;.          
2630: 2f 2f 73 6f 75 72 63 65 20 3d 20 73 6f 75 72 63  //source = sourc
2640: 65 2e 52 65 6d 6f 76 65 28 6e 2c 20 31 29 3b 0a  e.Remove(n, 1);.
2650: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2660: 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 7b    else.        {
2670: 0a 20 20 20 20 20 20 20 20 20 20 73 20 3d 20 73  .          s = s
2680: 6f 75 72 63 65 2e 53 75 62 73 74 72 69 6e 67 28  ource.Substring(
2690: 30 2c 20 6e 29 2e 54 72 69 6d 28 29 3b 0a 20 20  0, n).Trim();.  
26a0: 20 20 20 20 20 20 20 20 69 66 20 28 73 2e 4c 65          if (s.Le
26b0: 6e 67 74 68 20 3e 20 31 20 26 26 20 73 5b 30 5d  ngth > 1 && s[0]
26c0: 20 3d 3d 20 71 75 6f 74 5b 30 5d 20 26 26 20 73   == quot[0] && s
26d0: 5b 73 2e 4c 65 6e 67 74 68 20 2d 20 31 5d 20 3d  [s.Length - 1] =
26e0: 3d 20 73 5b 30 5d 29 0a 20 20 20 20 20 20 20 20  = s[0]).        
26f0: 20 20 20 20 73 20 3d 20 73 2e 53 75 62 73 74 72      s = s.Substr
2700: 69 6e 67 28 31 2c 20 73 2e 4c 65 6e 67 74 68 20  ing(1, s.Length 
2710: 2d 20 32 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  - 2);..         
2720: 20 73 6f 75 72 63 65 20 3d 20 73 6f 75 72 63 65   source = source
2730: 2e 53 75 62 73 74 72 69 6e 67 28 6e 20 2b 20 31  .Substring(n + 1
2740: 29 2e 54 72 69 6d 28 29 3b 0a 20 20 20 20 20 20  ).Trim();.      
2750: 20 20 20 20 69 66 20 28 73 2e 4c 65 6e 67 74 68      if (s.Length
2760: 20 3e 20 30 29 20 6c 73 2e 41 64 64 28 73 29 3b   > 0) ls.Add(s);
2770: 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 30  .          n = 0
2780: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2790: 20 20 7d 0a 20 20 20 20 20 20 69 66 20 28 73 6f    }.      if (so
27a0: 75 72 63 65 2e 4c 65 6e 67 74 68 20 3e 20 30 29  urce.Length > 0)
27b0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
27c0: 20 73 20 3d 20 73 6f 75 72 63 65 2e 54 72 69 6d   s = source.Trim
27d0: 28 29 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  ();.        if (
27e0: 73 2e 4c 65 6e 67 74 68 20 3e 20 31 20 26 26 20  s.Length > 1 && 
27f0: 73 5b 30 5d 20 3d 3d 20 71 75 6f 74 5b 30 5d 20  s[0] == quot[0] 
2800: 26 26 20 73 5b 73 2e 4c 65 6e 67 74 68 20 2d 20  && s[s.Length - 
2810: 31 5d 20 3d 3d 20 73 5b 30 5d 29 0a 20 20 20 20  1] == s[0]).    
2820: 20 20 20 20 20 20 73 20 3d 20 73 2e 53 75 62 73        s = s.Subs
2830: 74 72 69 6e 67 28 31 2c 20 73 2e 4c 65 6e 67 74  tring(1, s.Lengt
2840: 68 20 2d 20 32 29 3b 0a 20 20 20 20 20 20 20 20  h - 2);.        
2850: 6c 73 2e 41 64 64 28 73 29 3b 0a 20 20 20 20 20  ls.Add(s);.     
2860: 20 7d 0a 0a 20 20 20 20 20 20 73 74 72 69 6e 67   }..      string
2870: 5b 5d 20 61 72 20 3d 20 6e 65 77 20 73 74 72 69  [] ar = new stri
2880: 6e 67 5b 6c 73 2e 43 6f 75 6e 74 5d 3b 0a 20 20  ng[ls.Count];.  
2890: 20 20 20 20 6c 73 2e 43 6f 70 79 54 6f 28 61 72      ls.CopyTo(ar
28a0: 2c 20 30 29 3b 0a 0a 20 20 20 20 20 20 72 65 74  , 0);..      ret
28b0: 75 72 6e 20 61 72 3b 0a 20 20 20 20 7d 0a 0a 20  urn ar;.    }.. 
28c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
28d0: 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65 72 74  .    /// Convert
28e0: 20 61 20 76 61 6c 75 65 20 74 6f 20 74 72 75 65   a value to true
28f0: 20 6f 72 20 66 61 6c 73 65 2e 0a 20 20 20 20 2f   or false..    /
2900: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
2910: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2920: 65 3d 22 73 6f 75 72 63 65 22 3e 41 20 73 74 72  e="source">A str
2930: 69 6e 67 20 6f 72 20 6e 75 6d 62 65 72 20 72 65  ing or number re
2940: 70 72 65 73 65 6e 74 69 6e 67 20 74 72 75 65 20  presenting true 
2950: 6f 72 20 66 61 6c 73 65 3c 2f 70 61 72 61 6d 3e  or false</param>
2960: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
2970: 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  s></returns>.   
2980: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62   public static b
2990: 6f 6f 6c 20 54 6f 42 6f 6f 6c 65 61 6e 28 6f 62  ool ToBoolean(ob
29a0: 6a 65 63 74 20 73 6f 75 72 63 65 29 0a 20 20 20  ject source).   
29b0: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 73 6f 75   {.      if (sou
29c0: 72 63 65 20 69 73 20 62 6f 6f 6c 29 20 72 65 74  rce is bool) ret
29d0: 75 72 6e 20 28 62 6f 6f 6c 29 73 6f 75 72 63 65  urn (bool)source
29e0: 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
29f0: 54 6f 42 6f 6f 6c 65 61 6e 28 73 6f 75 72 63 65  ToBoolean(source
2a00: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0a 20 20  .ToString());.  
2a10: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
2a20: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43  mmary>.    /// C
2a30: 6f 6e 76 65 72 74 20 61 20 73 74 72 69 6e 67 20  onvert a string 
2a40: 74 6f 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  to true or false
2a50: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2a60: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
2a70: 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65  ram name="source
2a80: 22 3e 41 20 73 74 72 69 6e 67 20 72 65 70 72 65  ">A string repre
2a90: 73 65 6e 74 69 6e 67 20 74 72 75 65 20 6f 72 20  senting true or 
2aa0: 66 61 6c 73 65 3c 2f 70 61 72 61 6d 3e 0a 20 20  false</param>.  
2ab0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
2ac0: 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f  /returns>.    //
2ad0: 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20  / <remarks>.    
2ae0: 2f 2f 2f 20 22 79 65 73 22 2c 20 22 6e 6f 22 2c  /// "yes", "no",
2af0: 20 22 79 22 2c 20 22 6e 22 2c 20 22 30 22 2c 20   "y", "n", "0", 
2b00: 22 31 22 2c 20 22 6f 6e 22 2c 20 22 6f 66 66 22  "1", "on", "off"
2b10: 20 61 73 20 77 65 6c 6c 20 61 73 20 42 6f 6f 6c   as well as Bool
2b20: 65 61 6e 2e 46 61 6c 73 65 53 74 72 69 6e 67 20  ean.FalseString 
2b30: 61 6e 64 20 42 6f 6f 6c 65 61 6e 2e 54 72 75 65  and Boolean.True
2b40: 53 74 72 69 6e 67 20 77 69 6c 6c 20 61 6c 6c 20  String will all 
2b50: 62 65 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65  be.    /// conve
2b60: 72 74 65 64 20 74 6f 20 61 20 70 72 6f 70 65 72  rted to a proper
2b70: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 0a   boolean value..
2b80: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
2b90: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  s>.    public st
2ba0: 61 74 69 63 20 62 6f 6f 6c 20 54 6f 42 6f 6f 6c  atic bool ToBool
2bb0: 65 61 6e 28 73 74 72 69 6e 67 20 73 6f 75 72 63  ean(string sourc
2bc0: 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69  e).    {.      i
2bd0: 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  f (String.Compar
2be0: 65 28 73 6f 75 72 63 65 2c 20 62 6f 6f 6c 2e 54  e(source, bool.T
2bf0: 72 75 65 53 74 72 69 6e 67 2c 20 53 74 72 69 6e  rueString, Strin
2c00: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
2c10: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
2c20: 3d 20 30 29 20 72 65 74 75 72 6e 20 74 72 75 65  = 0) return true
2c30: 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ;.      else if 
2c40: 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28  (String.Compare(
2c50: 73 6f 75 72 63 65 2c 20 62 6f 6f 6c 2e 46 61 6c  source, bool.Fal
2c60: 73 65 53 74 72 69 6e 67 2c 20 53 74 72 69 6e 67  seString, String
2c70: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
2c80: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
2c90: 20 30 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65   0) return false
2ca0: 3b 0a 0a 20 20 20 20 20 20 73 77 69 74 63 68 28  ;..      switch(
2cb0: 73 6f 75 72 63 65 2e 54 6f 4c 6f 77 65 72 28 43  source.ToLower(C
2cc0: 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
2cd0: 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0a 20 20  iantCulture)).  
2ce0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 63 61      {.        ca
2cf0: 73 65 20 22 79 65 73 22 3a 0a 20 20 20 20 20 20  se "yes":.      
2d00: 20 20 63 61 73 65 20 22 79 22 3a 0a 20 20 20 20    case "y":.    
2d10: 20 20 20 20 63 61 73 65 20 22 31 22 3a 0a 20 20      case "1":.  
2d20: 20 20 20 20 20 20 63 61 73 65 20 22 6f 6e 22 3a        case "on":
2d30: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
2d40: 6e 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  n true;.        
2d50: 63 61 73 65 20 22 6e 6f 22 3a 0a 20 20 20 20 20  case "no":.     
2d60: 20 20 20 63 61 73 65 20 22 6e 22 3a 0a 20 20 20     case "n":.   
2d70: 20 20 20 20 20 63 61 73 65 20 22 30 22 3a 0a 20       case "0":. 
2d80: 20 20 20 20 20 20 20 63 61 73 65 20 22 6f 66 66         case "off
2d90: 22 3a 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ":.          ret
2da0: 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  urn false;.     
2db0: 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
2dc0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2dd0: 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
2de0: 6e 28 22 73 6f 75 72 63 65 22 29 3b 0a 20 20 20  n("source");.   
2df0: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
2e00: 23 72 65 67 69 6f 6e 20 54 79 70 65 20 43 6f 6e  #region Type Con
2e10: 76 65 72 73 69 6f 6e 73 0a 20 20 20 20 2f 2f 2f  versions.    ///
2e20: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
2e30: 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68  // Determines th
2e40: 65 20 64 61 74 61 20 74 79 70 65 20 6f 66 20 61  e data type of a
2e50: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 73 74 61   column in a sta
2e60: 74 65 6d 65 6e 74 0a 20 20 20 20 2f 2f 2f 20 3c  tement.    /// <
2e70: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
2e80: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
2e90: 74 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65  tmt">The stateme
2ea0: 6e 74 20 74 6f 20 72 65 74 72 69 65 76 65 20 69  nt to retrieve i
2eb0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 3c 2f  nformation for</
2ec0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
2ed0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54  param name="i">T
2ee0: 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74  he column to ret
2ef0: 72 69 65 76 65 20 74 79 70 65 20 69 6e 66 6f 72  rieve type infor
2f00: 6d 61 74 69 6f 6e 20 6f 6e 3c 2f 70 61 72 61 6d  mation on</param
2f10: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
2f20: 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20   name="typ">The 
2f30: 53 51 4c 69 74 65 54 79 70 65 20 74 6f 20 72 65  SQLiteType to re
2f40: 63 65 69 76 65 20 74 68 65 20 61 66 66 69 6e 69  ceive the affini
2f50: 74 79 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e  ty for the given
2f60: 20 63 6f 6c 75 6d 6e 3c 2f 70 61 72 61 6d 3e 0a   column</param>.
2f70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
2f80: 74 69 63 20 76 6f 69 64 20 43 6f 6c 75 6d 6e 54  tic void ColumnT
2f90: 6f 54 79 70 65 28 53 51 4c 69 74 65 53 74 61 74  oType(SQLiteStat
2fa0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
2fb0: 69 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79  i, SQLiteType ty
2fc0: 70 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 74  p).    {.      t
2fd0: 79 70 2e 54 79 70 65 20 3d 20 54 79 70 65 4e 61  yp.Type = TypeNa
2fe0: 6d 65 54 6f 44 62 54 79 70 65 28 73 74 6d 74 2e  meToDbType(stmt.
2ff0: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28  _sql.ColumnType(
3000: 73 74 6d 74 2c 20 69 2c 20 6f 75 74 20 74 79 70  stmt, i, out typ
3010: 2e 41 66 66 69 6e 69 74 79 29 29 3b 0a 20 20 20  .Affinity));.   
3020: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
3030: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f  mary>.    /// Co
3040: 6e 76 65 72 74 73 20 61 20 53 51 4c 69 74 65 54  nverts a SQLiteT
3050: 79 70 65 20 74 6f 20 61 20 2e 4e 45 54 20 54 79  ype to a .NET Ty
3060: 70 65 20 6f 62 6a 65 63 74 0a 20 20 20 20 2f 2f  pe object.    //
3070: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
3080: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3090: 3d 22 74 22 3e 54 68 65 20 53 51 4c 69 74 65 54  ="t">The SQLiteT
30a0: 79 70 65 20 74 6f 20 63 6f 6e 76 65 72 74 3c 2f  ype to convert</
30b0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
30c0: 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
30d0: 61 20 2e 4e 45 54 20 54 79 70 65 20 6f 62 6a 65  a .NET Type obje
30e0: 63 74 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  ct</returns>.   
30f0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
3100: 20 54 79 70 65 20 53 51 4c 69 74 65 54 79 70 65   Type SQLiteType
3110: 54 6f 54 79 70 65 28 53 51 4c 69 74 65 54 79 70  ToType(SQLiteTyp
3120: 65 20 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  e t).    {.     
3130: 20 69 66 20 28 74 2e 54 79 70 65 20 3d 3d 20 44   if (t.Type == D
3140: 62 54 79 70 65 2e 4f 62 6a 65 63 74 29 0a 20 20  bType.Object).  
3150: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61 66        return _af
3160: 66 69 6e 69 74 79 74 6f 74 79 70 65 5b 28 69 6e  finitytotype[(in
3170: 74 29 74 2e 41 66 66 69 6e 69 74 79 5d 3b 0a 20  t)t.Affinity];. 
3180: 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20       else.      
3190: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43    return SQLiteC
31a0: 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54 6f 54  onvert.DbTypeToT
31b0: 79 70 65 28 74 2e 54 79 70 65 29 3b 0a 20 20 20  ype(t.Type);.   
31c0: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
31d0: 73 74 61 74 69 63 20 54 79 70 65 5b 5d 20 5f 61  static Type[] _a
31e0: 66 66 69 6e 69 74 79 74 6f 74 79 70 65 20 3d 20  ffinitytotype = 
31f0: 7b 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 6f  {.      typeof(o
3200: 62 6a 65 63 74 29 2c 0a 20 20 20 20 20 20 74 79  bject),.      ty
3210: 70 65 6f 66 28 49 6e 74 36 34 29 2c 0a 20 20 20  peof(Int64),.   
3220: 20 20 20 74 79 70 65 6f 66 28 44 6f 75 62 6c 65     typeof(Double
3230: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
3240: 73 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 74  string),.      t
3250: 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 2c 0a 20  ypeof(byte[]),. 
3260: 20 20 20 20 20 74 79 70 65 6f 66 28 6f 62 6a 65       typeof(obje
3270: 63 74 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f  ct),.      typeo
3280: 66 28 44 61 74 65 54 69 6d 65 29 2c 0a 20 20 20  f(DateTime),.   
3290: 20 20 20 74 79 70 65 6f 66 28 6f 62 6a 65 63 74     typeof(object
32a0: 29 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2f  ).    };..    //
32b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
32c0: 2f 2f 2f 20 46 6f 72 20 61 20 67 69 76 65 6e 20  /// For a given 
32d0: 69 6e 74 72 69 6e 73 69 63 20 74 79 70 65 2c 20  intrinsic type, 
32e0: 72 65 74 75 72 6e 20 61 20 44 62 54 79 70 65 0a  return a DbType.
32f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
3300: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  y>.    /// <para
3310: 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68 65  m name="typ">The
3320: 20 6e 61 74 69 76 65 20 74 79 70 65 20 74 6f 20   native type to 
3330: 63 6f 6e 76 65 72 74 3c 2f 70 61 72 61 6d 3e 0a  convert</param>.
3340: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3350: 3e 54 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  >The correspondi
3360: 6e 67 20 28 63 6c 6f 73 65 73 74 20 6d 61 74 63  ng (closest matc
3370: 68 29 20 44 62 54 79 70 65 3c 2f 72 65 74 75 72  h) DbType</retur
3380: 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ns>.    internal
3390: 20 73 74 61 74 69 63 20 44 62 54 79 70 65 20 54   static DbType T
33a0: 79 70 65 54 6f 44 62 54 79 70 65 28 54 79 70 65  ypeToDbType(Type
33b0: 20 74 79 70 29 0a 20 20 20 20 7b 0a 20 20 20 20   typ).    {.    
33c0: 20 20 54 79 70 65 43 6f 64 65 20 74 63 20 3d 20    TypeCode tc = 
33d0: 54 79 70 65 2e 47 65 74 54 79 70 65 43 6f 64 65  Type.GetTypeCode
33e0: 28 74 79 70 29 3b 0a 20 20 20 20 20 20 69 66 20  (typ);.      if 
33f0: 28 74 63 20 3d 3d 20 54 79 70 65 43 6f 64 65 2e  (tc == TypeCode.
3400: 4f 62 6a 65 63 74 29 0a 20 20 20 20 20 20 7b 0a  Object).      {.
3410: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
3420: 3d 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d  == typeof(byte[]
3430: 29 29 20 72 65 74 75 72 6e 20 44 62 54 79 70 65  )) return DbType
3440: 2e 42 69 6e 61 72 79 3b 0a 20 20 20 20 20 20 20  .Binary;.       
3450: 20 69 66 20 28 74 79 70 20 3d 3d 20 74 79 70 65   if (typ == type
3460: 6f 66 28 47 75 69 64 29 29 20 72 65 74 75 72 6e  of(Guid)) return
3470: 20 44 62 54 79 70 65 2e 47 75 69 64 3b 0a 20 20   DbType.Guid;.  
3480: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 62 54        return DbT
3490: 79 70 65 2e 53 74 72 69 6e 67 3b 0a 20 20 20 20  ype.String;.    
34a0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
34b0: 20 5f 74 79 70 65 74 6f 64 62 74 79 70 65 5b 28   _typetodbtype[(
34c0: 69 6e 74 29 74 63 5d 3b 0a 20 20 20 20 7d 0a 0a  int)tc];.    }..
34d0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
34e0: 69 63 20 44 62 54 79 70 65 5b 5d 20 5f 74 79 70  ic DbType[] _typ
34f0: 65 74 6f 64 62 74 79 70 65 20 3d 20 7b 0a 20 20  etodbtype = {.  
3500: 20 20 20 20 44 62 54 79 70 65 2e 4f 62 6a 65 63      DbType.Objec
3510: 74 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  t,.      DbType.
3520: 42 69 6e 61 72 79 2c 0a 20 20 20 20 20 20 44 62  Binary,.      Db
3530: 54 79 70 65 2e 4f 62 6a 65 63 74 2c 0a 20 20 20  Type.Object,.   
3540: 20 20 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61     DbType.Boolea
3550: 6e 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65 2e  n,.      DbType.
3560: 53 42 79 74 65 2c 0a 20 20 20 20 20 20 44 62 54  SByte,.      DbT
3570: 79 70 65 2e 53 42 79 74 65 2c 0a 20 20 20 20 20  ype.SByte,.     
3580: 20 44 62 54 79 70 65 2e 42 79 74 65 2c 0a 20 20   DbType.Byte,.  
3590: 20 20 20 20 44 62 54 79 70 65 2e 49 6e 74 31 36      DbType.Int16
35a0: 2c 20 2f 2f 20 37 0a 20 20 20 20 20 20 44 62 54  , // 7.      DbT
35b0: 79 70 65 2e 55 49 6e 74 31 36 2c 0a 20 20 20 20  ype.UInt16,.    
35c0: 20 20 44 62 54 79 70 65 2e 49 6e 74 33 32 2c 0a    DbType.Int32,.
35d0: 20 20 20 20 20 20 44 62 54 79 70 65 2e 55 49 6e        DbType.UIn
35e0: 74 33 32 2c 0a 20 20 20 20 20 20 44 62 54 79 70  t32,.      DbTyp
35f0: 65 2e 49 6e 74 36 34 2c 20 2f 2f 20 31 31 0a 20  e.Int64, // 11. 
3600: 20 20 20 20 20 44 62 54 79 70 65 2e 55 49 6e 74       DbType.UInt
3610: 36 34 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65  64,.      DbType
3620: 2e 53 69 6e 67 6c 65 2c 0a 20 20 20 20 20 20 44  .Single,.      D
3630: 62 54 79 70 65 2e 44 6f 75 62 6c 65 2c 0a 20 20  bType.Double,.  
3640: 20 20 20 20 44 62 54 79 70 65 2e 44 65 63 69 6d      DbType.Decim
3650: 61 6c 2c 0a 20 20 20 20 20 20 44 62 54 79 70 65  al,.      DbType
3660: 2e 44 61 74 65 54 69 6d 65 2c 0a 20 20 20 20 20  .DateTime,.     
3670: 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 2c 0a   DbType.Object,.
3680: 20 20 20 20 20 20 44 62 54 79 70 65 2e 53 74 72        DbType.Str
3690: 69 6e 67 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20  ing,.    };..   
36a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
36b0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
36c0: 68 65 20 43 6f 6c 75 6d 6e 53 69 7a 65 20 66 6f  he ColumnSize fo
36d0: 72 20 74 68 65 20 67 69 76 65 6e 20 44 62 54 79  r the given DbTy
36e0: 70 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  pe.    /// </sum
36f0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
3700: 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e  aram name="typ">
3710: 54 68 65 20 44 62 54 79 70 65 20 74 6f 20 67 65  The DbType to ge
3720: 74 20 74 68 65 20 73 69 7a 65 20 6f 66 3c 2f 70  t the size of</p
3730: 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72  aram>.    /// <r
3740: 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73  eturns></returns
3750: 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  >.    internal s
3760: 74 61 74 69 63 20 69 6e 74 20 44 62 54 79 70 65  tatic int DbType
3770: 54 6f 43 6f 6c 75 6d 6e 53 69 7a 65 28 44 62 54  ToColumnSize(DbT
3780: 79 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a 20  ype typ).    {. 
3790: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64 62 74       return _dbt
37a0: 79 70 65 74 6f 63 6f 6c 75 6d 6e 73 69 7a 65 5b  ypetocolumnsize[
37b0: 28 69 6e 74 29 74 79 70 5d 3b 0a 20 20 20 20 7d  (int)typ];.    }
37c0: 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
37d0: 61 74 69 63 20 69 6e 74 5b 5d 20 5f 64 62 74 79  atic int[] _dbty
37e0: 70 65 74 6f 63 6f 6c 75 6d 6e 73 69 7a 65 20 3d  petocolumnsize =
37f0: 20 7b 0a 20 20 20 20 20 20 32 31 34 37 34 38 33   {.      2147483
3800: 36 34 37 2c 20 20 20 2f 2f 20 30 0a 20 20 20 20  647,   // 0.    
3810: 20 20 32 31 34 37 34 38 33 36 34 37 2c 20 20 20    2147483647,   
3820: 2f 2f 20 31 0a 20 20 20 20 20 20 31 2c 20 20 20  // 1.      1,   
3830: 20 20 2f 2f 20 32 0a 20 20 20 20 20 20 31 2c 20    // 2.      1, 
3840: 20 20 20 20 2f 2f 20 33 0a 20 20 20 20 20 20 38      // 3.      8
3850: 2c 20 20 2f 2f 20 34 0a 20 20 20 20 20 20 38 2c  ,  // 4.      8,
3860: 20 2f 2f 20 35 0a 20 20 20 20 20 20 38 2c 20 2f   // 5.      8, /
3870: 2f 20 36 0a 20 20 20 20 20 20 38 2c 20 20 2f 2f  / 6.      8,  //
3880: 20 37 0a 20 20 20 20 20 20 38 2c 20 20 20 2f 2f   7.      8,   //
3890: 20 38 0a 20 20 20 20 20 20 31 36 2c 20 20 20 20   8.      16,    
38a0: 20 2f 2f 20 39 0a 20 20 20 20 20 20 32 2c 0a 20   // 9.      2,. 
38b0: 20 20 20 20 20 34 2c 0a 20 20 20 20 20 20 38 2c       4,.      8,
38c0: 0a 20 20 20 20 20 20 32 31 34 37 34 38 33 36 34  .      214748364
38d0: 37 2c 0a 20 20 20 20 20 20 31 2c 0a 20 20 20 20  7,.      1,.    
38e0: 20 20 34 2c 0a 20 20 20 20 20 20 32 31 34 37 34    4,.      21474
38f0: 38 33 36 34 37 2c 0a 20 20 20 20 20 20 38 2c 0a  83647,.      8,.
3900: 20 20 20 20 20 20 32 2c 0a 20 20 20 20 20 20 34        2,.      4
3910: 2c 0a 20 20 20 20 20 20 38 2c 0a 20 20 20 20 20  ,.      8,.     
3920: 20 38 2c 0a 20 20 20 20 20 20 32 31 34 37 34 38   8,.      214748
3930: 33 36 34 37 2c 0a 20 20 20 20 20 20 32 31 34 37  3647,.      2147
3940: 34 38 33 36 34 37 2c 0a 20 20 20 20 20 20 32 31  483647,.      21
3950: 34 37 34 38 33 36 34 37 2c 0a 20 20 20 20 20 20  47483647,.      
3960: 32 31 34 37 34 38 33 36 34 37 2c 20 20 20 2f 2f  2147483647,   //
3970: 20 32 35 20 28 58 6d 6c 29 0a 20 20 20 20 7d 3b   25 (Xml).    };
3980: 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
3990: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 44 62 54  tatic object DbT
39a0: 79 70 65 54 6f 4e 75 6d 65 72 69 63 50 72 65 63  ypeToNumericPrec
39b0: 69 73 69 6f 6e 28 44 62 54 79 70 65 20 74 79 70  ision(DbType typ
39c0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65  ).    {.      re
39d0: 74 75 72 6e 20 5f 64 62 74 79 70 65 74 6f 6e 75  turn _dbtypetonu
39e0: 6d 65 72 69 63 70 72 65 63 69 73 69 6f 6e 5b 28  mericprecision[(
39f0: 69 6e 74 29 74 79 70 5d 3b 0a 20 20 20 20 7d 0a  int)typ];.    }.
3a00: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
3a10: 74 69 63 20 6f 62 6a 65 63 74 5b 5d 20 5f 64 62  tic object[] _db
3a20: 74 79 70 65 74 6f 6e 75 6d 65 72 69 63 70 72 65  typetonumericpre
3a30: 63 69 73 69 6f 6e 20 3d 20 7b 0a 20 20 20 20 20  cision = {.     
3a40: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f   DBNull.Value, /
3a50: 2f 20 30 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  / 0.      DBNull
3a60: 2e 56 61 6c 75 65 2c 20 2f 2f 20 31 0a 20 20 20  .Value, // 1.   
3a70: 20 20 20 33 2c 0a 20 20 20 20 20 20 44 42 4e 75     3,.      DBNu
3a80: 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20 20  ll.Value,.      
3a90: 31 39 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c  19,.      DBNull
3aa0: 2e 56 61 6c 75 65 2c 20 2f 2f 20 35 0a 20 20 20  .Value, // 5.   
3ab0: 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c     DBNull.Value,
3ac0: 20 2f 2f 20 36 0a 20 20 20 20 20 20 35 33 2c 0a   // 6.      53,.
3ad0: 20 20 20 20 20 20 35 33 2c 0a 20 20 20 20 20 20        53,.      
3ae0: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20  DBNull.Value,.  
3af0: 20 20 20 20 35 2c 0a 20 20 20 20 20 20 31 30 2c      5,.      10,
3b00: 0a 20 20 20 20 20 20 31 39 2c 0a 20 20 20 20 20  .      19,.     
3b10: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20   DBNull.Value,. 
3b20: 20 20 20 20 20 33 2c 0a 20 20 20 20 20 20 32 34       3,.      24
3b30: 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ,.      DBNull.V
3b40: 61 6c 75 65 2c 0a 20 20 20 20 20 20 44 42 4e 75  alue,.      DBNu
3b50: 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20 20  ll.Value,.      
3b60: 35 2c 0a 20 20 20 20 20 20 31 30 2c 0a 20 20 20  5,.      10,.   
3b70: 20 20 20 31 39 2c 0a 20 20 20 20 20 20 35 33 2c     19,.      53,
3b80: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
3b90: 6c 75 65 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c  lue,.      DBNul
3ba0: 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 44  l.Value,.      D
3bb0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 0a 20 20 20 20  BNull.Value.    
3bc0: 7d 3b 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  };..    internal
3bd0: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 44   static object D
3be0: 62 54 79 70 65 54 6f 4e 75 6d 65 72 69 63 53 63  bTypeToNumericSc
3bf0: 61 6c 65 28 44 62 54 79 70 65 20 74 79 70 29 0a  ale(DbType typ).
3c00: 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74 75      {.      retu
3c10: 72 6e 20 5f 64 62 74 79 70 65 74 6f 6e 75 6d 65  rn _dbtypetonume
3c20: 72 69 63 73 63 61 6c 65 5b 28 69 6e 74 29 74 79  ricscale[(int)ty
3c30: 70 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  p];.    }..    p
3c40: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
3c50: 6a 65 63 74 5b 5d 20 5f 64 62 74 79 70 65 74 6f  ject[] _dbtypeto
3c60: 6e 75 6d 65 72 69 63 73 63 61 6c 65 20 3d 20 7b  numericscale = {
3c70: 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61  .      DBNull.Va
3c80: 6c 75 65 2c 20 2f 2f 20 30 0a 20 20 20 20 20 20  lue, // 0.      
3c90: 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f  DBNull.Value, //
3ca0: 20 31 0a 20 20 20 20 20 20 30 2c 0a 20 20 20 20   1.      0,.    
3cb0: 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0a    DBNull.Value,.
3cc0: 20 20 20 20 20 20 34 2c 0a 20 20 20 20 20 20 44        4,.      D
3cd0: 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 20 2f 2f 20  BNull.Value, // 
3ce0: 35 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  5.      DBNull.V
3cf0: 61 6c 75 65 2c 20 2f 2f 20 36 0a 20 20 20 20 20  alue, // 6.     
3d00: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20   DBNull.Value,. 
3d10: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
3d20: 65 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  e,.      DBNull.
3d30: 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 30 2c 0a  Value,.      0,.
3d40: 20 20 20 20 20 20 30 2c 0a 20 20 20 20 20 20 30        0,.      0
3d50: 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56  ,.      DBNull.V
3d60: 61 6c 75 65 2c 0a 20 20 20 20 20 20 30 2c 0a 20  alue,.      0,. 
3d70: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
3d80: 65 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  e,.      DBNull.
3d90: 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 44 42 4e  Value,.      DBN
3da0: 75 6c 6c 2e 56 61 6c 75 65 2c 0a 20 20 20 20 20  ull.Value,.     
3db0: 20 30 2c 0a 20 20 20 20 20 20 30 2c 0a 20 20 20   0,.      0,.   
3dc0: 20 20 20 30 2c 0a 20 20 20 20 20 20 30 2c 0a 20     0,.      0,. 
3dd0: 20 20 20 20 20 44 42 4e 75 6c 6c 2e 56 61 6c 75       DBNull.Valu
3de0: 65 2c 0a 20 20 20 20 20 20 44 42 4e 75 6c 6c 2e  e,.      DBNull.
3df0: 56 61 6c 75 65 2c 0a 20 20 20 20 20 20 44 42 4e  Value,.      DBN
3e00: 75 6c 6c 2e 56 61 6c 75 65 0a 20 20 20 20 7d 3b  ull.Value.    };
3e10: 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
3e20: 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 62 54  tatic string DbT
3e30: 79 70 65 54 6f 54 79 70 65 4e 61 6d 65 28 44 62  ypeToTypeName(Db
3e40: 54 79 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a  Type typ).    {.
3e50: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 6e        for (int n
3e60: 20 3d 20 30 3b 20 6e 20 3c 20 5f 64 62 74 79 70   = 0; n < _dbtyp
3e70: 65 4e 61 6d 65 73 2e 4c 65 6e 67 74 68 3b 20 6e  eNames.Length; n
3e80: 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ++).      {.    
3e90: 20 20 20 20 69 66 20 28 5f 64 62 74 79 70 65 4e      if (_dbtypeN
3ea0: 61 6d 65 73 5b 6e 5d 2e 64 61 74 61 54 79 70 65  ames[n].dataType
3eb0: 20 3d 3d 20 74 79 70 29 0a 20 20 20 20 20 20 20   == typ).       
3ec0: 20 20 20 72 65 74 75 72 6e 20 5f 64 62 74 79 70     return _dbtyp
3ed0: 65 4e 61 6d 65 73 5b 6e 5d 2e 74 79 70 65 4e 61  eNames[n].typeNa
3ee0: 6d 65 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  me;.      }..   
3ef0: 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
3f00: 2e 45 6d 70 74 79 3b 0a 20 20 20 20 7d 0a 0a 20  .Empty;.    }.. 
3f10: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
3f20: 63 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  c SQLiteTypeName
3f30: 73 5b 5d 20 5f 64 62 74 79 70 65 4e 61 6d 65 73  s[] _dbtypeNames
3f40: 20 3d 20 7b 0a 20 20 20 20 20 20 6e 65 77 20 53   = {.      new S
3f50: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
3f60: 49 4e 54 45 47 45 52 22 2c 20 44 62 54 79 70 65  INTEGER", DbType
3f70: 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20 20 20 6e  .Int64),.      n
3f80: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
3f90: 65 73 28 22 54 49 4e 59 49 4e 54 22 2c 20 44 62  es("TINYINT", Db
3fa0: 54 79 70 65 2e 42 79 74 65 29 2c 0a 20 20 20 20  Type.Byte),.    
3fb0: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
3fc0: 4e 61 6d 65 73 28 22 49 4e 54 22 2c 20 44 62 54  Names("INT", DbT
3fd0: 79 70 65 2e 49 6e 74 33 32 29 2c 0a 20 20 20 20  ype.Int32),.    
3fe0: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
3ff0: 4e 61 6d 65 73 28 22 56 41 52 43 48 41 52 22 2c  Names("VARCHAR",
4000: 20 44 62 54 79 70 65 2e 41 6e 73 69 53 74 72 69   DbType.AnsiStri
4010: 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  ng),.      new S
4020: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
4030: 4e 56 41 52 43 48 41 52 22 2c 20 44 62 54 79 70  NVARCHAR", DbTyp
4040: 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20 20  e.String),.     
4050: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4060: 61 6d 65 73 28 22 43 48 41 52 22 2c 20 44 62 54  ames("CHAR", DbT
4070: 79 70 65 2e 41 6e 73 69 53 74 72 69 6e 67 46 69  ype.AnsiStringFi
4080: 78 65 64 4c 65 6e 67 74 68 29 2c 0a 20 20 20 20  xedLength),.    
4090: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
40a0: 4e 61 6d 65 73 28 22 4e 43 48 41 52 22 2c 20 44  Names("NCHAR", D
40b0: 62 54 79 70 65 2e 53 74 72 69 6e 67 46 69 78 65  bType.StringFixe
40c0: 64 4c 65 6e 67 74 68 29 2c 0a 20 20 20 20 20 20  dLength),.      
40d0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
40e0: 6d 65 73 28 22 46 4c 4f 41 54 22 2c 20 44 62 54  mes("FLOAT", DbT
40f0: 79 70 65 2e 44 6f 75 62 6c 65 29 2c 0a 20 20 20  ype.Double),.   
4100: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
4110: 65 4e 61 6d 65 73 28 22 52 45 41 4c 22 2c 20 44  eNames("REAL", D
4120: 62 54 79 70 65 2e 53 69 6e 67 6c 65 29 2c 20 20  bType.Single),  
4130: 20 20 20 20 20 20 20 20 0a 20 20 20 20 20 20 6e          .      n
4140: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
4150: 65 73 28 22 42 49 54 22 2c 20 44 62 54 79 70 65  es("BIT", DbType
4160: 2e 42 6f 6f 6c 65 61 6e 29 2c 0a 20 20 20 20 20  .Boolean),.     
4170: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4180: 61 6d 65 73 28 22 44 45 43 49 4d 41 4c 22 2c 20  ames("DECIMAL", 
4190: 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29 2c  DbType.Decimal),
41a0: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
41b0: 65 54 79 70 65 4e 61 6d 65 73 28 22 44 41 54 45  eTypeNames("DATE
41c0: 54 49 4d 45 22 2c 20 44 62 54 79 70 65 2e 44 61  TIME", DbType.Da
41d0: 74 65 54 69 6d 65 29 2c 0a 20 20 20 20 20 20 6e  teTime),.      n
41e0: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
41f0: 65 73 28 22 42 4c 4f 42 22 2c 20 44 62 54 79 70  es("BLOB", DbTyp
4200: 65 2e 42 69 6e 61 72 79 29 2c 0a 20 20 20 20 20  e.Binary),.     
4210: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4220: 61 6d 65 73 28 22 55 4e 49 51 55 45 49 44 45 4e  ames("UNIQUEIDEN
4230: 54 49 46 49 45 52 22 2c 20 44 62 54 79 70 65 2e  TIFIER", DbType.
4240: 47 75 69 64 29 2c 0a 20 20 20 20 20 20 6e 65 77  Guid),.      new
4250: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
4260: 28 22 53 4d 41 4c 4c 49 4e 54 22 2c 20 44 62 54  ("SMALLINT", DbT
4270: 79 70 65 2e 49 6e 74 31 36 29 2c 0a 20 20 20 20  ype.Int16),.    
4280: 7d 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  };.    /// <summ
4290: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e  ary>.    /// Con
42a0: 76 65 72 74 20 61 20 44 62 54 79 70 65 20 74 6f  vert a DbType to
42b0: 20 61 20 54 79 70 65 0a 20 20 20 20 2f 2f 2f 20   a Type.    /// 
42c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
42d0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
42e0: 74 79 70 22 3e 54 68 65 20 44 62 54 79 70 65 20  typ">The DbType 
42f0: 74 6f 20 63 6f 6e 76 65 72 74 20 66 72 6f 6d 3c  to convert from<
4300: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
4310: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 63 6c 6f  <returns>The clo
4320: 73 65 73 74 2d 6d 61 74 63 68 20 2e 4e 45 54 20  sest-match .NET 
4330: 74 79 70 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20  type</returns>. 
4340: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4350: 69 63 20 54 79 70 65 20 44 62 54 79 70 65 54 6f  ic Type DbTypeTo
4360: 54 79 70 65 28 44 62 54 79 70 65 20 74 79 70 29  Type(DbType typ)
4370: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 72 65 74  .    {.      ret
4380: 75 72 6e 20 5f 64 62 74 79 70 65 54 6f 54 79 70  urn _dbtypeToTyp
4390: 65 5b 28 69 6e 74 29 74 79 70 5d 3b 0a 20 20 20  e[(int)typ];.   
43a0: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
43b0: 73 74 61 74 69 63 20 54 79 70 65 5b 5d 20 5f 64  static Type[] _d
43c0: 62 74 79 70 65 54 6f 54 79 70 65 20 3d 20 7b 0a  btypeToType = {.
43d0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74 72        typeof(str
43e0: 69 6e 67 29 2c 20 20 20 2f 2f 20 30 0a 20 20 20  ing),   // 0.   
43f0: 20 20 20 74 79 70 65 6f 66 28 62 79 74 65 5b 5d     typeof(byte[]
4400: 29 2c 20 20 20 2f 2f 20 31 0a 20 20 20 20 20 20  ),   // 1.      
4410: 74 79 70 65 6f 66 28 62 79 74 65 29 2c 20 20 20  typeof(byte),   
4420: 20 20 2f 2f 20 32 0a 20 20 20 20 20 20 74 79 70    // 2.      typ
4430: 65 6f 66 28 62 6f 6f 6c 29 2c 20 20 20 20 20 2f  eof(bool),     /
4440: 2f 20 33 0a 20 20 20 20 20 20 74 79 70 65 6f 66  / 3.      typeof
4450: 28 64 65 63 69 6d 61 6c 29 2c 20 20 2f 2f 20 34  (decimal),  // 4
4460: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 44 61  .      typeof(Da
4470: 74 65 54 69 6d 65 29 2c 20 2f 2f 20 35 0a 20 20  teTime), // 5.  
4480: 20 20 20 20 74 79 70 65 6f 66 28 44 61 74 65 54      typeof(DateT
4490: 69 6d 65 29 2c 20 2f 2f 20 36 0a 20 20 20 20 20  ime), // 6.     
44a0: 20 74 79 70 65 6f 66 28 64 65 63 69 6d 61 6c 29   typeof(decimal)
44b0: 2c 20 20 2f 2f 20 37 0a 20 20 20 20 20 20 74 79  ,  // 7.      ty
44c0: 70 65 6f 66 28 64 6f 75 62 6c 65 29 2c 20 20 20  peof(double),   
44d0: 2f 2f 20 38 0a 20 20 20 20 20 20 74 79 70 65 6f  // 8.      typeo
44e0: 66 28 47 75 69 64 29 2c 20 20 20 20 20 2f 2f 20  f(Guid),     // 
44f0: 39 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 49  9.      typeof(I
4500: 6e 74 31 36 29 2c 0a 20 20 20 20 20 20 74 79 70  nt16),.      typ
4510: 65 6f 66 28 49 6e 74 33 32 29 2c 0a 20 20 20 20  eof(Int32),.    
4520: 20 20 74 79 70 65 6f 66 28 49 6e 74 36 34 29 2c    typeof(Int64),
4530: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 6f 62  .      typeof(ob
4540: 6a 65 63 74 29 2c 0a 20 20 20 20 20 20 74 79 70  ject),.      typ
4550: 65 6f 66 28 73 62 79 74 65 29 2c 0a 20 20 20 20  eof(sbyte),.    
4560: 20 20 74 79 70 65 6f 66 28 66 6c 6f 61 74 29 2c    typeof(float),
4570: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 73 74  .      typeof(st
4580: 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 74 79 70  ring),.      typ
4590: 65 6f 66 28 44 61 74 65 54 69 6d 65 29 2c 0a 20  eof(DateTime),. 
45a0: 20 20 20 20 20 74 79 70 65 6f 66 28 55 49 6e 74       typeof(UInt
45b0: 31 36 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f  16),.      typeo
45c0: 66 28 55 49 6e 74 33 32 29 2c 0a 20 20 20 20 20  f(UInt32),.     
45d0: 20 74 79 70 65 6f 66 28 55 49 6e 74 36 34 29 2c   typeof(UInt64),
45e0: 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28 64 6f  .      typeof(do
45f0: 75 62 6c 65 29 2c 0a 20 20 20 20 20 20 74 79 70  uble),.      typ
4600: 65 6f 66 28 73 74 72 69 6e 67 29 2c 0a 20 20 20  eof(string),.   
4610: 20 20 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67     typeof(string
4620: 29 2c 0a 20 20 20 20 20 20 74 79 70 65 6f 66 28  ),.      typeof(
4630: 73 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 74  string),.      t
4640: 79 70 65 6f 66 28 73 74 72 69 6e 67 29 2c 20 20  ypeof(string),  
4650: 20 2f 2f 20 32 35 20 28 58 6d 6c 29 0a 20 20 20   // 25 (Xml).   
4660: 20 7d 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   };..    /// <su
4670: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 46  mmary>.    /// F
4680: 6f 72 20 61 20 67 69 76 65 6e 20 74 79 70 65 2c  or a given type,
4690: 20 72 65 74 75 72 6e 20 74 68 65 20 63 6c 6f 73   return the clos
46a0: 65 73 74 2d 6d 61 74 63 68 20 53 51 4c 69 74 65  est-match SQLite
46b0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2c 20 77   TypeAffinity, w
46c0: 68 69 63 68 20 6f 6e 6c 79 20 75 6e 64 65 72 73  hich only unders
46d0: 74 61 6e 64 73 20 61 20 76 65 72 79 20 6c 69 6d  tands a very lim
46e0: 69 74 65 64 20 73 75 62 73 65 74 20 6f 66 20 74  ited subset of t
46f0: 79 70 65 73 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ypes..    /// </
4700: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
4710: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79   <param name="ty
4720: 70 22 3e 54 68 65 20 74 79 70 65 20 74 6f 20 65  p">The type to e
4730: 76 61 6c 75 61 74 65 3c 2f 70 61 72 61 6d 3e 0a  valuate</param>.
4740: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4750: 3e 54 68 65 20 53 51 4c 69 74 65 20 74 79 70 65  >The SQLite type
4760: 20 61 66 66 69 6e 69 74 79 20 66 6f 72 20 74 68   affinity for th
4770: 61 74 20 74 79 70 65 2e 3c 2f 72 65 74 75 72 6e  at type.</return
4780: 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  s>.    internal 
4790: 73 74 61 74 69 63 20 54 79 70 65 41 66 66 69 6e  static TypeAffin
47a0: 69 74 79 20 54 79 70 65 54 6f 41 66 66 69 6e 69  ity TypeToAffini
47b0: 74 79 28 54 79 70 65 20 74 79 70 29 0a 20 20 20  ty(Type typ).   
47c0: 20 7b 0a 20 20 20 20 20 20 54 79 70 65 43 6f 64   {.      TypeCod
47d0: 65 20 74 63 20 3d 20 54 79 70 65 2e 47 65 74 54  e tc = Type.GetT
47e0: 79 70 65 43 6f 64 65 28 74 79 70 29 3b 0a 20 20  ypeCode(typ);.  
47f0: 20 20 20 20 69 66 20 28 74 63 20 3d 3d 20 54 79      if (tc == Ty
4800: 70 65 43 6f 64 65 2e 4f 62 6a 65 63 74 29 0a 20  peCode.Object). 
4810: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69       {.        i
4820: 66 20 28 74 79 70 20 3d 3d 20 74 79 70 65 6f 66  f (typ == typeof
4830: 28 62 79 74 65 5b 5d 29 20 7c 7c 20 74 79 70 20  (byte[]) || typ 
4840: 3d 3d 20 74 79 70 65 6f 66 28 47 75 69 64 29 29  == typeof(Guid))
4850: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
4860: 6e 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 42  n TypeAffinity.B
4870: 6c 6f 62 3b 0a 20 20 20 20 20 20 20 20 65 6c 73  lob;.        els
4880: 65 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  e.          retu
4890: 72 6e 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  rn TypeAffinity.
48a0: 54 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Text;.      }.  
48b0: 20 20 20 20 72 65 74 75 72 6e 20 5f 74 79 70 65      return _type
48c0: 63 6f 64 65 41 66 66 69 6e 69 74 69 65 73 5b 28  codeAffinities[(
48d0: 69 6e 74 29 74 63 5d 3b 0a 20 20 20 20 7d 0a 0a  int)tc];.    }..
48e0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
48f0: 69 63 20 54 79 70 65 41 66 66 69 6e 69 74 79 5b  ic TypeAffinity[
4900: 5d 20 5f 74 79 70 65 63 6f 64 65 41 66 66 69 6e  ] _typecodeAffin
4910: 69 74 69 65 73 20 3d 20 7b 0a 20 20 20 20 20 20  ities = {.      
4920: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
4930: 6c 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  l,.      TypeAff
4940: 69 6e 69 74 79 2e 42 6c 6f 62 2c 0a 20 20 20 20  inity.Blob,.    
4950: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e    TypeAffinity.N
4960: 75 6c 6c 2c 0a 20 20 20 20 20 20 54 79 70 65 41  ull,.      TypeA
4970: 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a 20  ffinity.Int64,. 
4980: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
4990: 79 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20 20 54  y.Int64,.      T
49a0: 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
49b0: 34 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  4,.      TypeAff
49c0: 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a 20 20 20  inity.Int64,.   
49d0: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e     TypeAffinity.
49e0: 49 6e 74 36 34 2c 20 2f 2f 20 37 0a 20 20 20 20  Int64, // 7.    
49f0: 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49    TypeAffinity.I
4a00: 6e 74 36 34 2c 0a 20 20 20 20 20 20 54 79 70 65  nt64,.      Type
4a10: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 2c 0a  Affinity.Int64,.
4a20: 20 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69        TypeAffini
4a30: 74 79 2e 49 6e 74 36 34 2c 0a 20 20 20 20 20 20  ty.Int64,.      
4a40: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
4a50: 36 34 2c 20 2f 2f 20 31 31 0a 20 20 20 20 20 20  64, // 11.      
4a60: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
4a70: 36 34 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66  64,.      TypeAf
4a80: 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 2c 0a 20  finity.Double,. 
4a90: 20 20 20 20 20 54 79 70 65 41 66 66 69 6e 69 74       TypeAffinit
4aa0: 79 2e 44 6f 75 62 6c 65 2c 0a 20 20 20 20 20 20  y.Double,.      
4ab0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
4ac0: 62 6c 65 2c 0a 20 20 20 20 20 20 54 79 70 65 41  ble,.      TypeA
4ad0: 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
4ae0: 2c 0a 20 20 20 20 20 20 54 79 70 65 41 66 66 69  ,.      TypeAffi
4af0: 6e 69 74 79 2e 4e 75 6c 6c 2c 0a 20 20 20 20 20  nity.Null,.     
4b00: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
4b10: 78 74 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20  xt,.    };..    
4b20: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
4b30: 20 20 2f 2f 2f 20 46 6f 72 20 61 20 67 69 76 65    /// For a give
4b40: 6e 20 74 79 70 65 20 6e 61 6d 65 2c 20 72 65 74  n type name, ret
4b50: 75 72 6e 20 61 20 63 6c 6f 73 65 73 74 2d 6d 61  urn a closest-ma
4b60: 74 63 68 20 2e 4e 45 54 20 74 79 70 65 0a 20 20  tch .NET type.  
4b70: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4b80: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4b90: 6e 61 6d 65 3d 22 4e 61 6d 65 22 3e 54 68 65 20  name="Name">The 
4ba0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 79 70 65  name of the type
4bb0: 20 74 6f 20 6d 61 74 63 68 3c 2f 70 61 72 61 6d   to match</param
4bc0: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
4bd0: 6e 73 3e 54 68 65 20 2e 4e 45 54 20 44 42 54 79  ns>The .NET DBTy
4be0: 70 65 20 74 68 65 20 74 65 78 74 20 65 76 61 6c  pe the text eval
4bf0: 75 61 74 65 73 20 74 6f 2e 3c 2f 72 65 74 75 72  uates to.</retur
4c00: 6e 73 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ns>.    internal
4c10: 20 73 74 61 74 69 63 20 44 62 54 79 70 65 20 54   static DbType T
4c20: 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70 65 28  ypeNameToDbType(
4c30: 73 74 72 69 6e 67 20 4e 61 6d 65 29 0a 20 20 20  string Name).   
4c40: 20 7b 0a 20 20 20 20 20 20 69 66 20 28 53 74 72   {.      if (Str
4c50: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
4c60: 79 28 4e 61 6d 65 29 29 20 72 65 74 75 72 6e 20  y(Name)) return 
4c70: 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 3b 0a 0a  DbType.Object;..
4c80: 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 5f 74        int x = _t
4c90: 79 70 65 4e 61 6d 65 73 2e 4c 65 6e 67 74 68 3b  ypeNames.Length;
4ca0: 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20  .      for (int 
4cb0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b 20 6e 2b  n = 0; n < x; n+
4cc0: 2b 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  +).      {.     
4cd0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
4ce0: 6d 70 61 72 65 28 4e 61 6d 65 2c 20 30 2c 20 5f  mpare(Name, 0, _
4cf0: 74 79 70 65 4e 61 6d 65 73 5b 6e 5d 2e 74 79 70  typeNames[n].typ
4d00: 65 4e 61 6d 65 2c 20 30 2c 20 5f 74 79 70 65 4e  eName, 0, _typeN
4d10: 61 6d 65 73 5b 6e 5d 2e 74 79 70 65 4e 61 6d 65  ames[n].typeName
4d20: 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 43  .Length, StringC
4d30: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
4d40: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
4d50: 30 29 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  0).          ret
4d60: 75 72 6e 20 5f 74 79 70 65 4e 61 6d 65 73 5b 6e  urn _typeNames[n
4d70: 5d 2e 64 61 74 61 54 79 70 65 3b 20 0a 20 20 20  ].dataType; .   
4d80: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
4d90: 6e 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 3b  n DbType.Object;
4da0: 0a 20 20 20 20 7d 0a 20 20 20 20 23 65 6e 64 72  .    }.    #endr
4db0: 65 67 69 6f 6e 0a 0a 20 20 20 20 70 72 69 76 61  egion..    priva
4dc0: 74 65 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  te static SQLite
4dd0: 54 79 70 65 4e 61 6d 65 73 5b 5d 20 5f 74 79 70  TypeNames[] _typ
4de0: 65 4e 61 6d 65 73 20 3d 20 7b 0a 20 20 20 20 20  eNames = {.     
4df0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4e00: 61 6d 65 73 28 22 43 4f 55 4e 54 45 52 22 2c 20  ames("COUNTER", 
4e10: 44 62 54 79 70 65 2e 49 6e 74 36 34 29 2c 0a 20  DbType.Int64),. 
4e20: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
4e30: 79 70 65 4e 61 6d 65 73 28 22 41 55 54 4f 49 4e  ypeNames("AUTOIN
4e40: 43 52 45 4d 45 4e 54 22 2c 20 44 62 54 79 70 65  CREMENT", DbType
4e50: 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20 20 20 6e  .Int64),.      n
4e60: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
4e70: 65 73 28 22 49 44 45 4e 54 49 54 59 22 2c 20 44  es("IDENTITY", D
4e80: 62 54 79 70 65 2e 49 6e 74 36 34 29 2c 0a 20 20  bType.Int64),.  
4e90: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
4ea0: 70 65 4e 61 6d 65 73 28 22 4c 4f 4e 47 54 45 58  peNames("LONGTEX
4eb0: 54 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  T", DbType.Strin
4ec0: 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  g),.      new SQ
4ed0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4c  LiteTypeNames("L
4ee0: 4f 4e 47 43 48 41 52 22 2c 20 44 62 54 79 70 65  ONGCHAR", DbType
4ef0: 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20  .String),.      
4f00: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
4f10: 6d 65 73 28 22 4c 4f 4e 47 56 41 52 43 48 41 52  mes("LONGVARCHAR
4f20: 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  ", DbType.String
4f30: 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ),.      new SQL
4f40: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4c 4f  iteTypeNames("LO
4f50: 4e 47 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36  NG", DbType.Int6
4f60: 34 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  4),.      new SQ
4f70: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 54  LiteTypeNames("T
4f80: 49 4e 59 49 4e 54 22 2c 20 44 62 54 79 70 65 2e  INYINT", DbType.
4f90: 42 79 74 65 29 2c 0a 20 20 20 20 20 20 6e 65 77  Byte),.      new
4fa0: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
4fb0: 28 22 49 4e 54 45 47 45 52 22 2c 20 44 62 54 79  ("INTEGER", DbTy
4fc0: 70 65 2e 49 6e 74 36 34 29 2c 0a 20 20 20 20 20  pe.Int64),.     
4fd0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
4fe0: 61 6d 65 73 28 22 49 4e 54 22 2c 20 44 62 54 79  ames("INT", DbTy
4ff0: 70 65 2e 49 6e 74 33 32 29 2c 0a 20 20 20 20 20  pe.Int32),.     
5000: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
5010: 61 6d 65 73 28 22 56 41 52 43 48 41 52 22 2c 20  ames("VARCHAR", 
5020: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a  DbType.String),.
5030: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
5040: 54 79 70 65 4e 61 6d 65 73 28 22 4e 56 41 52 43  TypeNames("NVARC
5050: 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53 74 72  HAR", DbType.Str
5060: 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  ing),.      new 
5070: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
5080: 22 43 48 41 52 22 2c 20 44 62 54 79 70 65 2e 53  "CHAR", DbType.S
5090: 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65  tring),.      ne
50a0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
50b0: 73 28 22 4e 43 48 41 52 22 2c 20 44 62 54 79 70  s("NCHAR", DbTyp
50c0: 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20 20  e.String),.     
50d0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
50e0: 61 6d 65 73 28 22 54 45 58 54 22 2c 20 44 62 54  ames("TEXT", DbT
50f0: 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20  ype.String),.   
5100: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
5110: 65 4e 61 6d 65 73 28 22 4e 54 45 58 54 22 2c 20  eNames("NTEXT", 
5120: 44 62 54 79 70 65 2e 53 74 72 69 6e 67 29 2c 0a  DbType.String),.
5130: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
5140: 54 79 70 65 4e 61 6d 65 73 28 22 53 54 52 49 4e  TypeNames("STRIN
5150: 47 22 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e  G", DbType.Strin
5160: 67 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  g),.      new SQ
5170: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 44  LiteTypeNames("D
5180: 4f 55 42 4c 45 22 2c 20 44 62 54 79 70 65 2e 44  OUBLE", DbType.D
5190: 6f 75 62 6c 65 29 2c 0a 20 20 20 20 20 20 6e 65  ouble),.      ne
51a0: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
51b0: 73 28 22 46 4c 4f 41 54 22 2c 20 44 62 54 79 70  s("FLOAT", DbTyp
51c0: 65 2e 44 6f 75 62 6c 65 29 2c 0a 20 20 20 20 20  e.Double),.     
51d0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
51e0: 61 6d 65 73 28 22 52 45 41 4c 22 2c 20 44 62 54  ames("REAL", DbT
51f0: 79 70 65 2e 53 69 6e 67 6c 65 29 2c 20 20 20 20  ype.Single),    
5200: 20 20 20 20 20 20 0a 20 20 20 20 20 20 6e 65 77        .      new
5210: 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73   SQLiteTypeNames
5220: 28 22 42 49 54 22 2c 20 44 62 54 79 70 65 2e 42  ("BIT", DbType.B
5230: 6f 6f 6c 65 61 6e 29 2c 0a 20 20 20 20 20 20 6e  oolean),.      n
5240: 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  ew SQLiteTypeNam
5250: 65 73 28 22 59 45 53 4e 4f 22 2c 20 44 62 54 79  es("YESNO", DbTy
5260: 70 65 2e 42 6f 6f 6c 65 61 6e 29 2c 0a 20 20 20  pe.Boolean),.   
5270: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
5280: 65 4e 61 6d 65 73 28 22 4c 4f 47 49 43 41 4c 22  eNames("LOGICAL"
5290: 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c 65 61 6e  , DbType.Boolean
52a0: 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ),.      new SQL
52b0: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 42 4f  iteTypeNames("BO
52c0: 4f 4c 22 2c 20 44 62 54 79 70 65 2e 42 6f 6f 6c  OL", DbType.Bool
52d0: 65 61 6e 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  ean),.      new 
52e0: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
52f0: 22 4e 55 4d 45 52 49 43 22 2c 20 44 62 54 79 70  "NUMERIC", DbTyp
5300: 65 2e 44 65 63 69 6d 61 6c 29 2c 0a 20 20 20 20  e.Decimal),.    
5310: 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65    new SQLiteType
5320: 4e 61 6d 65 73 28 22 44 45 43 49 4d 41 4c 22 2c  Names("DECIMAL",
5330: 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61 6c 29   DbType.Decimal)
5340: 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69  ,.      new SQLi
5350: 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4d 4f 4e  teTypeNames("MON
5360: 45 59 22 2c 20 44 62 54 79 70 65 2e 44 65 63 69  EY", DbType.Deci
5370: 6d 61 6c 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  mal),.      new 
5380: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
5390: 22 43 55 52 52 45 4e 43 59 22 2c 20 44 62 54 79  "CURRENCY", DbTy
53a0: 70 65 2e 44 65 63 69 6d 61 6c 29 2c 0a 20 20 20  pe.Decimal),.   
53b0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70     new SQLiteTyp
53c0: 65 4e 61 6d 65 73 28 22 54 49 4d 45 22 2c 20 44  eNames("TIME", D
53d0: 62 54 79 70 65 2e 44 61 74 65 54 69 6d 65 29 2c  bType.DateTime),
53e0: 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74  .      new SQLit
53f0: 65 54 79 70 65 4e 61 6d 65 73 28 22 44 41 54 45  eTypeNames("DATE
5400: 22 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69  ", DbType.DateTi
5410: 6d 65 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53  me),.      new S
5420: 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22  QLiteTypeNames("
5430: 53 4d 41 4c 4c 44 41 54 45 22 2c 20 44 62 54 79  SMALLDATE", DbTy
5440: 70 65 2e 44 61 74 65 54 69 6d 65 29 2c 0a 20 20  pe.DateTime),.  
5450: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
5460: 70 65 4e 61 6d 65 73 28 22 42 4c 4f 42 22 2c 20  peNames("BLOB", 
5470: 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a  DbType.Binary),.
5480: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
5490: 54 79 70 65 4e 61 6d 65 73 28 22 42 49 4e 41 52  TypeNames("BINAR
54a0: 59 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72  Y", DbType.Binar
54b0: 79 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51  y),.      new SQ
54c0: 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 56  LiteTypeNames("V
54d0: 41 52 42 49 4e 41 52 59 22 2c 20 44 62 54 79 70  ARBINARY", DbTyp
54e0: 65 2e 42 69 6e 61 72 79 29 2c 0a 20 20 20 20 20  e.Binary),.     
54f0: 20 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e   new SQLiteTypeN
5500: 61 6d 65 73 28 22 49 4d 41 47 45 22 2c 20 44 62  ames("IMAGE", Db
5510: 54 79 70 65 2e 42 69 6e 61 72 79 29 2c 0a 20 20  Type.Binary),.  
5520: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54 79      new SQLiteTy
5530: 70 65 4e 61 6d 65 73 28 22 47 45 4e 45 52 41 4c  peNames("GENERAL
5540: 22 2c 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79  ", DbType.Binary
5550: 29 2c 0a 20 20 20 20 20 20 6e 65 77 20 53 51 4c  ),.      new SQL
5560: 69 74 65 54 79 70 65 4e 61 6d 65 73 28 22 4f 4c  iteTypeNames("OL
5570: 45 4f 42 4a 45 43 54 22 2c 20 44 62 54 79 70 65  EOBJECT", DbType
5580: 2e 42 69 6e 61 72 79 29 2c 0a 20 20 20 20 20 20  .Binary),.      
5590: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
55a0: 6d 65 73 28 22 47 55 49 44 22 2c 20 44 62 54 79  mes("GUID", DbTy
55b0: 70 65 2e 47 75 69 64 29 2c 0a 20 20 20 20 20 20  pe.Guid),.      
55c0: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
55d0: 6d 65 73 28 22 55 4e 49 51 55 45 49 44 45 4e 54  mes("UNIQUEIDENT
55e0: 49 46 49 45 52 22 2c 20 44 62 54 79 70 65 2e 47  IFIER", DbType.G
55f0: 75 69 64 29 2c 0a 20 20 20 20 20 20 6e 65 77 20  uid),.      new 
5600: 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65 73 28  SQLiteTypeNames(
5610: 22 4d 45 4d 4f 22 2c 20 44 62 54 79 70 65 2e 53  "MEMO", DbType.S
5620: 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20 6e 65  tring),.      ne
5630: 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  w SQLiteTypeName
5640: 73 28 22 4e 4f 54 45 22 2c 20 44 62 54 79 70 65  s("NOTE", DbType
5650: 2e 53 74 72 69 6e 67 29 2c 0a 20 20 20 20 20 20  .String),.      
5660: 6e 65 77 20 53 51 4c 69 74 65 54 79 70 65 4e 61  new SQLiteTypeNa
5670: 6d 65 73 28 22 53 4d 41 4c 4c 49 4e 54 22 2c 20  mes("SMALLINT", 
5680: 44 62 54 79 70 65 2e 49 6e 74 31 36 29 2c 0a 20  DbType.Int16),. 
5690: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 54       new SQLiteT
56a0: 79 70 65 4e 61 6d 65 73 28 22 42 49 47 49 4e 54  ypeNames("BIGINT
56b0: 22 2c 20 44 62 54 79 70 65 2e 49 6e 74 36 34 29  ", DbType.Int64)
56c0: 2c 0a 20 20 20 20 7d 3b 0a 20 20 7d 0a 0a 20 20  ,.    };.  }..  
56d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
56e0: 2f 2f 2f 20 53 51 4c 69 74 65 20 68 61 73 20 76  /// SQLite has v
56f0: 65 72 79 20 6c 69 6d 69 74 65 64 20 74 79 70 65  ery limited type
5700: 73 2c 20 61 6e 64 20 69 73 20 69 6e 68 65 72 65  s, and is inhere
5710: 6e 74 6c 79 20 74 65 78 74 2d 62 61 73 65 64 2e  ntly text-based.
5720: 20 20 54 68 65 20 66 69 72 73 74 20 35 20 74 79    The first 5 ty
5730: 70 65 73 20 62 65 6c 6f 77 20 72 65 70 72 65 73  pes below repres
5740: 65 6e 74 20 74 68 65 20 73 75 6d 20 6f 66 20 61  ent the sum of a
5750: 6c 6c 20 74 79 70 65 73 20 53 51 4c 69 74 65 0a  ll types SQLite.
5760: 20 20 2f 2f 2f 20 75 6e 64 65 72 73 74 61 6e 64    /// understand
5770: 73 2e 20 20 54 68 65 20 44 61 74 65 54 69 6d 65  s.  The DateTime
5780: 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f 20 74 68   extension to th
5790: 65 20 73 70 65 63 20 69 73 20 66 6f 72 20 69 6e  e spec is for in
57a0: 74 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 2e  ternal use only.
57b0: 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79  .  /// </summary
57c0: 3e 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20  >.  public enum 
57d0: 54 79 70 65 41 66 66 69 6e 69 74 79 0a 20 20 7b  TypeAffinity.  {
57e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
57f0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e 6f 74 20 75  y>.    /// Not u
5800: 73 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  sed.    /// </su
5810: 6d 6d 61 72 79 3e 0a 20 20 20 20 55 6e 69 6e 69  mmary>.    Unini
5820: 74 69 61 6c 69 7a 65 64 20 3d 20 30 2c 0a 20 20  tialized = 0,.  
5830: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
5840: 20 20 20 20 2f 2f 2f 20 41 6c 6c 20 69 6e 74 65      /// All inte
5850: 67 65 72 73 20 69 6e 20 53 51 4c 69 74 65 20 64  gers in SQLite d
5860: 65 66 61 75 6c 74 20 74 6f 20 49 6e 74 36 34 0a  efault to Int64.
5870: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5880: 79 3e 0a 20 20 20 20 49 6e 74 36 34 20 3d 20 31  y>.    Int64 = 1
5890: 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ,.    /// <summa
58a0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 41 6c 6c 20  ry>.    /// All 
58b0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
58c0: 75 6d 62 65 72 73 20 69 6e 20 53 51 4c 69 74 65  umbers in SQLite
58d0: 20 64 65 66 61 75 6c 74 20 74 6f 20 64 6f 75 62   default to doub
58e0: 6c 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  le.    /// </sum
58f0: 6d 61 72 79 3e 0a 20 20 20 20 44 6f 75 62 6c 65  mary>.    Double
5900: 20 3d 20 32 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73   = 2,.    /// <s
5910: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
5920: 54 68 65 20 64 65 66 61 75 6c 74 20 64 61 74 61  The default data
5930: 20 74 79 70 65 20 6f 66 20 53 51 4c 69 74 65 20   type of SQLite 
5940: 69 73 20 74 65 78 74 0a 20 20 20 20 2f 2f 2f 20  is text.    /// 
5950: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 54  </summary>.    T
5960: 65 78 74 20 3d 20 33 2c 0a 20 20 20 20 2f 2f 2f  ext = 3,.    ///
5970: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
5980: 2f 2f 20 54 79 70 69 63 61 6c 6c 79 20 62 6c 6f  // Typically blo
5990: 62 20 74 79 70 65 73 20 61 72 65 20 6f 6e 6c 79  b types are only
59a0: 20 73 65 65 6e 20 77 68 65 6e 20 72 65 74 75 72   seen when retur
59b0: 6e 65 64 20 66 72 6f 6d 20 61 20 66 75 6e 63 74  ned from a funct
59c0: 69 6f 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ion.    /// </su
59d0: 6d 6d 61 72 79 3e 0a 20 20 20 20 42 6c 6f 62 20  mmary>.    Blob 
59e0: 3d 20 34 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  = 4,.    /// <su
59f0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e  mmary>.    /// N
5a00: 75 6c 6c 20 74 79 70 65 73 20 63 61 6e 20 62 65  ull types can be
5a10: 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 66   returned from f
5a20: 75 6e 63 74 69 6f 6e 73 0a 20 20 20 20 2f 2f 2f  unctions.    ///
5a30: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
5a40: 4e 75 6c 6c 20 3d 20 35 2c 0a 20 20 20 20 2f 2f  Null = 5,.    //
5a50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
5a60: 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e 61  /// Used interna
5a70: 6c 6c 79 20 62 79 20 74 68 69 73 20 70 72 6f 76  lly by this prov
5a80: 69 64 65 72 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ider.    /// </s
5a90: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 44 61 74 65  ummary>.    Date
5aa0: 54 69 6d 65 20 3d 20 31 30 2c 0a 20 20 20 20 2f  Time = 10,.    /
5ab0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
5ac0: 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e   /// Used intern
5ad0: 61 6c 6c 79 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ally.    /// </s
5ae0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 4e 6f 6e 65  ummary>.    None
5af0: 20 3d 20 31 31 2c 0a 20 20 7d 0a 0a 20 20 2f 2f   = 11,.  }..  //
5b00: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f  / <summary>.  //
5b10: 2f 20 54 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74  / This implement
5b20: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  ation of SQLite 
5b30: 66 6f 72 20 41 44 4f 2e 4e 45 54 20 63 61 6e 20  for ADO.NET can 
5b40: 70 72 6f 63 65 73 73 20 64 61 74 65 2f 74 69 6d  process date/tim
5b50: 65 20 66 69 65 6c 64 73 20 69 6e 20 64 61 74 61  e fields in data
5b60: 62 61 73 65 73 20 69 6e 20 6f 6e 6c 79 20 6f 6e  bases in only on
5b70: 65 20 6f 66 20 74 68 72 65 65 20 66 6f 72 6d 61  e of three forma
5b80: 74 73 2e 20 20 54 69 63 6b 73 2c 20 49 53 4f 38  ts.  Ticks, ISO8
5b90: 36 30 31 0a 20 20 2f 2f 2f 20 61 6e 64 20 4a 75  601.  /// and Ju
5ba0: 6c 69 61 6e 44 61 79 2e 0a 20 20 2f 2f 2f 20 3c  lianDay..  /// <
5bb0: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f 20  /summary>.  /// 
5bc0: 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 2f 2f 2f 20  <remarks>.  /// 
5bd0: 49 53 4f 38 36 30 31 20 69 73 20 6d 6f 72 65 20  ISO8601 is more 
5be0: 63 6f 6d 70 61 74 69 62 6c 65 2c 20 72 65 61 64  compatible, read
5bf0: 61 62 6c 65 2c 20 66 75 6c 6c 79 2d 70 72 6f 63  able, fully-proc
5c00: 65 73 73 61 62 6c 65 2c 20 62 75 74 20 6c 65 73  essable, but les
5c10: 73 20 61 63 63 75 72 61 74 65 20 61 73 20 69 74  s accurate as it
5c20: 20 64 6f 65 73 6e 27 74 20 70 72 6f 76 69 64 65   doesn't provide
5c30: 20 74 69 6d 65 20 64 6f 77 6e 20 74 6f 20 66 72   time down to fr
5c40: 61 63 74 69 6f 6e 73 20 6f 66 20 61 20 73 65 63  actions of a sec
5c50: 6f 6e 64 2e 0a 20 20 2f 2f 2f 20 4a 75 6c 69 61  ond..  /// Julia
5c60: 6e 44 61 79 20 69 73 20 74 68 65 20 6e 75 6d 65  nDay is the nume
5c70: 72 69 63 20 66 6f 72 6d 61 74 20 74 68 65 20 53  ric format the S
5c80: 51 4c 69 74 65 20 75 73 65 73 20 69 6e 74 65 72  QLite uses inter
5c90: 6e 61 6c 6c 79 20 61 6e 64 20 69 73 20 61 72 67  nally and is arg
5ca0: 75 61 62 6c 79 20 74 68 65 20 6d 6f 73 74 20 63  uably the most c
5cb0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 33  ompatible with 3
5cc0: 72 64 20 70 61 72 74 79 20 74 6f 6f 6c 73 2e 20  rd party tools. 
5cd0: 20 49 74 20 69 73 0a 20 20 2f 2f 2f 20 6e 6f 74   It is.  /// not
5ce0: 20 72 65 61 64 61 62 6c 65 20 61 73 20 74 65 78   readable as tex
5cf0: 74 20 77 69 74 68 6f 75 74 20 70 6f 73 74 2d 70  t without post-p
5d00: 72 6f 63 65 73 73 69 6e 67 2e 0a 20 20 2f 2f 2f  rocessing..  ///
5d10: 20 54 69 63 6b 73 20 6c 65 73 73 20 63 6f 6d 70   Ticks less comp
5d20: 61 74 69 62 6c 65 20 77 69 74 68 20 33 72 64 20  atible with 3rd 
5d30: 70 61 72 74 79 20 74 6f 6f 6c 73 20 74 68 61 74  party tools that
5d40: 20 71 75 65 72 79 20 74 68 65 20 64 61 74 61 62   query the datab
5d50: 61 73 65 2c 20 61 6e 64 20 72 65 6e 64 65 72 73  ase, and renders
5d60: 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 69   the DateTime fi
5d70: 65 6c 64 20 75 6e 72 65 61 64 61 62 6c 65 20 61  eld unreadable a
5d80: 73 20 74 65 78 74 20 77 69 74 68 6f 75 74 20 70  s text without p
5d90: 6f 73 74 2d 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ost-processing..
5da0: 20 20 2f 2f 2f 20 0a 20 20 2f 2f 2f 20 54 68 65    /// .  /// The
5db0: 20 70 72 65 66 65 72 72 65 64 20 6f 72 64 65 72   preferred order
5dc0: 20 6f 66 20 63 68 6f 6f 73 69 6e 67 20 61 20 64   of choosing a d
5dd0: 61 74 65 74 69 6d 65 20 66 6f 72 6d 61 74 20 69  atetime format i
5de0: 73 20 4a 75 6c 69 61 6e 44 61 79 2c 20 49 53 4f  s JulianDay, ISO
5df0: 38 36 30 31 2c 20 61 6e 64 20 74 68 65 6e 20 54  8601, and then T
5e00: 69 63 6b 73 2e 20 20 54 69 63 6b 73 20 69 73 20  icks.  Ticks is 
5e10: 6d 61 69 6e 6c 79 20 70 72 65 73 65 6e 74 20 66  mainly present f
5e20: 6f 72 20 6c 65 67 61 63 79 20 0a 20 20 2f 2f 2f  or legacy .  ///
5e30: 20 63 6f 64 65 20 73 75 70 70 6f 72 74 2e 0a 20   code support.. 
5e40: 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0a   /// </remarks>.
5e50: 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51    public enum SQ
5e60: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 0a  LiteDateFormats.
5e70: 20 20 7b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d    {.    /// <sum
5e80: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 55 73  mary>.    /// Us
5e90: 69 6e 67 20 74 69 63 6b 73 20 69 73 20 6e 6f 74  ing ticks is not
5ea0: 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 61 6e 64   recommended and
5eb0: 20 69 73 20 6e 6f 74 20 77 65 6c 6c 20 73 75 70   is not well sup
5ec0: 70 6f 72 74 65 64 20 77 69 74 68 20 4c 49 4e 51  ported with LINQ
5ed0: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5ee0: 61 72 79 3e 0a 20 20 20 20 54 69 63 6b 73 20 3d  ary>.    Ticks =
5ef0: 20 30 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   0,.    /// <sum
5f00: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68  mary>.    /// Th
5f10: 65 20 64 65 66 61 75 6c 74 20 66 6f 72 6d 61 74  e default format
5f20: 20 66 6f 72 20 74 68 69 73 20 70 72 6f 76 69 64   for this provid
5f30: 65 72 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  er..    /// </su
5f40: 6d 6d 61 72 79 3e 0a 20 20 20 20 49 53 4f 38 36  mmary>.    ISO86
5f50: 30 31 20 3d 20 31 2c 0a 20 20 20 20 2f 2f 2f 20  01 = 1,.    /// 
5f60: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
5f70: 2f 20 4a 75 6c 69 61 6e 44 61 79 20 66 6f 72 6d  / JulianDay form
5f80: 61 74 2c 20 77 68 69 63 68 20 69 73 20 77 68 61  at, which is wha
5f90: 74 20 53 51 4c 69 74 65 20 75 73 65 73 20 69 6e  t SQLite uses in
5fa0: 74 65 72 6e 61 6c 6c 79 0a 20 20 20 20 2f 2f 2f  ternally.    ///
5fb0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
5fc0: 4a 75 6c 69 61 6e 44 61 79 20 3d 20 32 0a 20 20  JulianDay = 2.  
5fd0: 7d 0a 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  }..  /// <summar
5fe0: 79 3e 0a 20 20 2f 2f 2f 20 54 68 69 73 20 65 6e  y>.  /// This en
5ff0: 75 6d 20 64 65 74 65 72 6d 69 6e 65 73 20 68 6f  um determines ho
6000: 77 20 53 51 4c 69 74 65 20 74 72 65 61 74 73 20  w SQLite treats 
6010: 69 74 73 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  its journal file
6020: 2e 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
6030: 79 3e 0a 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  y>.  /// <remark
6040: 73 3e 0a 20 20 2f 2f 2f 20 42 79 20 64 65 66 61  s>.  /// By defa
6050: 75 6c 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  ult SQLite will 
6060: 63 72 65 61 74 65 20 61 6e 64 20 64 65 6c 65 74  create and delet
6070: 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  e the journal fi
6080: 6c 65 20 77 68 65 6e 20 6e 65 65 64 65 64 20 64  le when needed d
6090: 75 72 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74  uring a transact
60a0: 69 6f 6e 2e 0a 20 20 2f 2f 2f 20 48 6f 77 65 76  ion..  /// Howev
60b0: 65 72 2c 20 66 6f 72 20 73 6f 6d 65 20 63 6f 6d  er, for some com
60c0: 70 75 74 65 72 73 20 72 75 6e 6e 69 6e 67 20 63  puters running c
60d0: 65 72 74 61 69 6e 20 66 69 6c 65 73 79 73 74 65  ertain filesyste
60e0: 6d 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 74 6f 6f  m monitoring too
60f0: 6c 73 2c 20 74 68 65 20 72 61 70 69 64 0a 20 20  ls, the rapid.  
6100: 2f 2f 2f 20 63 72 65 61 74 69 6f 6e 20 61 6e 64  /// creation and
6110: 20 64 65 6c 65 74 69 6f 6e 20 6f 66 20 74 68 65   deletion of the
6120: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61   journal file ca
6130: 6e 20 63 61 75 73 65 20 74 68 6f 73 65 20 70 72  n cause those pr
6140: 6f 67 72 61 6d 73 20 74 6f 20 66 61 69 6c 2c 20  ograms to fail, 
6150: 6f 72 20 74 6f 20 69 6e 74 65 72 66 65 72 65 20  or to interfere 
6160: 77 69 74 68 20 53 51 4c 69 74 65 2e 0a 20 20 2f  with SQLite..  /
6170: 2f 2f 20 0a 20 20 2f 2f 2f 20 49 66 20 61 20 70  // .  /// If a p
6180: 72 6f 67 72 61 6d 20 6f 72 20 76 69 72 75 73 20  rogram or virus 
6190: 73 63 61 6e 6e 65 72 20 69 73 20 69 6e 74 65 72  scanner is inter
61a0: 66 65 72 69 6e 67 20 77 69 74 68 20 53 51 4c 69  fering with SQLi
61b0: 74 65 27 73 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  te's journal fil
61c0: 65 2c 20 79 6f 75 20 6d 61 79 20 72 65 63 65 69  e, you may recei
61d0: 76 65 20 65 72 72 6f 72 73 20 6c 69 6b 65 20 22  ve errors like "
61e0: 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
61f0: 61 74 61 62 61 73 65 20 66 69 6c 65 22 0a 20 20  atabase file".  
6200: 2f 2f 2f 20 77 68 65 6e 20 73 74 61 72 74 69 6e  /// when startin
6210: 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  g a transaction.
6220: 20 20 49 66 20 74 68 69 73 20 69 73 20 68 61 70    If this is hap
6230: 70 65 6e 69 6e 67 2c 20 79 6f 75 20 6d 61 79 20  pening, you may 
6240: 77 61 6e 74 20 74 6f 20 63 68 61 6e 67 65 20 74  want to change t
6250: 68 65 20 64 65 66 61 75 6c 74 20 6a 6f 75 72 6e  he default journ
6260: 61 6c 20 6d 6f 64 65 20 74 6f 20 50 65 72 73 69  al mode to Persi
6270: 73 74 2e 0a 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61  st..  /// </rema
6280: 72 6b 73 3e 0a 20 20 70 75 62 6c 69 63 20 65 6e  rks>.  public en
6290: 75 6d 20 53 51 4c 69 74 65 4a 6f 75 72 6e 61 6c  um SQLiteJournal
62a0: 4d 6f 64 65 45 6e 75 6d 0a 20 20 7b 0a 20 20 20  ModeEnum.  {.   
62b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
62c0: 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75     /// The defau
62d0: 6c 74 20 6d 6f 64 65 2c 20 74 68 69 73 20 63 61  lt mode, this ca
62e0: 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 63  uses SQLite to c
62f0: 72 65 61 74 65 20 61 6e 64 20 64 65 73 74 72 6f  reate and destro
6300: 79 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  y the journal fi
6310: 6c 65 20 61 73 2d 6e 65 65 64 65 64 2e 0a 20 20  le as-needed..  
6320: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6330: 0a 20 20 20 20 44 65 6c 65 74 65 20 3d 20 30 2c  .    Delete = 0,
6340: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6350: 79 3e 0a 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20  y>.    /// When 
6360: 74 68 69 73 20 69 73 20 73 65 74 2c 20 53 51 4c  this is set, SQL
6370: 69 74 65 20 77 69 6c 6c 20 6b 65 65 70 20 74 68  ite will keep th
6380: 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 65  e journal file e
6390: 76 65 6e 20 61 66 74 65 72 20 61 20 74 72 61 6e  ven after a tran
63a0: 73 61 63 74 69 6f 6e 20 68 61 73 20 63 6f 6d 70  saction has comp
63b0: 6c 65 74 65 64 2e 20 20 49 74 27 73 20 63 6f 6e  leted.  It's con
63c0: 74 65 6e 74 73 20 77 69 6c 6c 20 62 65 20 65 72  tents will be er
63d0: 61 73 65 64 2c 0a 20 20 20 20 2f 2f 2f 20 61 6e  ased,.    /// an
63e0: 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 72 65  d the journal re
63f0: 2d 75 73 65 64 20 61 73 20 6f 66 74 65 6e 20 61  -used as often a
6400: 73 20 6e 65 65 64 65 64 2e 20 20 49 66 20 69 74  s needed.  If it
6410: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 69 74 20   is deleted, it 
6420: 77 69 6c 6c 20 62 65 20 72 65 63 72 65 61 74 65  will be recreate
6430: 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
6440: 69 74 20 69 73 20 6e 65 65 64 65 64 2e 0a 20 20  it is needed..  
6450: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6460: 0a 20 20 20 20 50 65 72 73 69 73 74 20 3d 20 31  .    Persist = 1
6470: 2c 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ,.    /// <summa
6480: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  ry>.    /// This
6490: 20 6f 70 74 69 6f 6e 20 64 69 73 61 62 6c 65 73   option disables
64a0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f   the rollback jo
64b0: 75 72 6e 61 6c 20 65 6e 74 69 72 65 6c 79 2e 20  urnal entirely. 
64c0: 20 49 6e 74 65 72 72 75 70 74 65 64 20 74 72 61   Interrupted tra
64d0: 6e 73 61 63 74 69 6f 6e 73 20 6f 72 20 61 20 70  nsactions or a p
64e0: 72 6f 67 72 61 6d 20 63 72 61 73 68 20 63 61 6e  rogram crash can
64f0: 20 63 61 75 73 65 20 64 61 74 61 62 61 73 65 0a   cause database.
6500: 20 20 20 20 2f 2f 2f 20 63 6f 72 72 75 70 74 69      /// corrupti
6510: 6f 6e 20 69 6e 20 74 68 69 73 20 6d 6f 64 65 21  on in this mode!
6520: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6530: 72 79 3e 0a 20 20 20 20 4f 66 66 20 3d 20 32 2c  ry>.    Off = 2,
6540: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
6550: 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  y>.    /// This 
6560: 6f 70 74 69 6f 6e 20 63 6f 6d 6d 69 74 73 20 74  option commits t
6570: 72 61 6e 73 61 63 74 69 6f 6e 73 20 62 79 20 74  ransactions by t
6580: 72 75 6e 63 61 74 69 6e 67 20 74 68 65 20 72 6f  runcating the ro
6590: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 74  llback journal t
65a0: 6f 20 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 69 6e  o zero-length in
65b0: 73 74 65 61 64 20 6f 66 20 64 65 6c 65 74 69 6e  stead of deletin
65c0: 67 20 69 74 2e 20 4f 6e 20 6d 61 6e 79 20 73 79  g it. On many sy
65d0: 73 74 65 6d 73 2c 0a 20 20 20 20 2f 2f 2f 20 74  stems,.    /// t
65e0: 72 75 6e 63 61 74 69 6e 67 20 61 20 66 69 6c 65  runcating a file
65f0: 20 69 73 20 6d 75 63 68 20 66 61 73 74 65 72 20   is much faster 
6600: 74 68 61 6e 20 64 65 6c 65 74 69 6e 67 20 74 68  than deleting th
6610: 65 20 66 69 6c 65 20 73 69 6e 63 65 20 74 68 65  e file since the
6620: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 64 69 72 65   containing dire
6630: 63 74 6f 72 79 20 64 6f 65 73 20 6e 6f 74 20 6e  ctory does not n
6640: 65 65 64 20 74 6f 20 62 65 20 63 68 61 6e 67 65  eed to be change
6650: 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  d..    /// </sum
6660: 6d 61 72 79 3e 0a 20 20 20 20 54 72 75 6e 63 61  mary>.    Trunca
6670: 74 65 20 3d 20 33 2c 0a 20 20 7d 0a 0a 20 20 2f  te = 3,.  }..  /
6680: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 2f  // <summary>.  /
6690: 2f 2f 20 53 74 72 75 63 74 20 75 73 65 64 20 69  // Struct used i
66a0: 6e 74 65 72 6e 61 6c 6c 79 20 74 6f 20 64 65 74  nternally to det
66b0: 65 72 6d 69 6e 65 20 74 68 65 20 64 61 74 61 74  ermine the datat
66c0: 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  ype of a column 
66d0: 69 6e 20 61 20 72 65 73 75 6c 74 73 65 74 0a 20  in a resultset. 
66e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
66f0: 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73    internal class
6700: 20 53 51 4c 69 74 65 54 79 70 65 0a 20 20 7b 0a   SQLiteType.  {.
6710: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6720: 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 62  >.    /// The Db
6730: 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Type of the colu
6740: 6d 6e 2c 20 6f 72 20 44 62 54 79 70 65 2e 4f 62  mn, or DbType.Ob
6750: 6a 65 63 74 20 69 66 20 69 74 20 63 61 6e 6e 6f  ject if it canno
6760: 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64 0a  t be determined.
6770: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6780: 79 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  y>.    internal 
6790: 44 62 54 79 70 65 20 54 79 70 65 3b 0a 20 20 20  DbType Type;.   
67a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
67b0: 20 20 20 2f 2f 2f 20 54 68 65 20 61 66 66 69 6e     /// The affin
67c0: 69 74 79 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 2c  ity of a column,
67d0: 20 75 73 65 64 20 66 6f 72 20 65 78 70 72 65 73   used for expres
67e0: 73 69 6f 6e 73 20 6f 72 20 77 68 65 6e 20 54 79  sions or when Ty
67f0: 70 65 20 69 73 20 44 62 54 79 70 65 2e 4f 62 6a  pe is DbType.Obj
6800: 65 63 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ect.    /// </su
6810: 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74 65 72  mmary>.    inter
6820: 6e 61 6c 20 54 79 70 65 41 66 66 69 6e 69 74 79  nal TypeAffinity
6830: 20 41 66 66 69 6e 69 74 79 3b 0a 20 20 7d 0a 0a   Affinity;.  }..
6840: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 75 63    internal struc
6850: 74 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d 65  t SQLiteTypeName
6860: 73 0a 20 20 7b 0a 20 20 20 20 69 6e 74 65 72 6e  s.  {.    intern
6870: 61 6c 20 53 51 4c 69 74 65 54 79 70 65 4e 61 6d  al SQLiteTypeNam
6880: 65 73 28 73 74 72 69 6e 67 20 6e 65 77 74 79 70  es(string newtyp
6890: 65 4e 61 6d 65 2c 20 44 62 54 79 70 65 20 6e 65  eName, DbType ne
68a0: 77 64 61 74 61 54 79 70 65 29 0a 20 20 20 20 7b  wdataType).    {
68b0: 0a 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 20  .      typeName 
68c0: 3d 20 6e 65 77 74 79 70 65 4e 61 6d 65 3b 0a 20  = newtypeName;. 
68d0: 20 20 20 20 20 64 61 74 61 54 79 70 65 20 3d 20       dataType = 
68e0: 6e 65 77 64 61 74 61 54 79 70 65 3b 0a 20 20 20  newdataType;.   
68f0: 20 7d 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c   }..    internal
6900: 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
6910: 3b 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 44  ;.    internal D
6920: 62 54 79 70 65 20 64 61 74 61 54 79 70 65 3b 0a  bType dataType;.
6930: 20 20 7d 0a 7d 0a                                  }.}.