System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 82a40f11e981cc033046bfb8eb9aa5eb6131d08f:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n risk!.. ******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2f 0d 0a 0d 0a 23 69 66 20 55 53 45 5f 45  **/....#if USE_E
0130: 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f  NTITY_FRAMEWORK_
0140: 36 0d 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73  6..namespace Sys
0150: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
0160: 45 46 36 0d 0a 23 65 6c 73 65 0d 0a 6e 61 6d 65  EF6..#else..name
0170: 73 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74  space System.Dat
0180: 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 23  a.SQLite.Linq..#
0190: 65 6e 64 69 66 0d 0a 7b 0d 0a 20 20 75 73 69 6e  endif..{..  usin
01a0: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69  g System;..  usi
01b0: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63  ng System.Collec
01c0: 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a  tions.Generic;..
01d0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 49    using System.I
01e0: 4f 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  O;..  using Syst
01f0: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a  em.Reflection;..
0200: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
0210: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
0220: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0230: 2e 54 65 78 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a  .Text;..#endif..
0240: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0250: 2e 58 6d 6c 3b 0d 0a 0d 0a 23 69 66 20 55 53 45  .Xml;....#if USE
0260: 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52  _ENTITY_FRAMEWOR
0270: 4b 5f 36 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  K_6..  using Sys
0280: 74 65 6d 2e 44 61 74 61 2e 45 6e 74 69 74 79 2e  tem.Data.Entity.
0290: 43 6f 72 65 3b 0d 0a 20 20 75 73 69 6e 67 20 53  Core;..  using S
02a0: 79 73 74 65 6d 2e 44 61 74 61 2e 45 6e 74 69 74  ystem.Data.Entit
02b0: 79 2e 43 6f 72 65 2e 43 6f 6d 6d 6f 6e 3b 0d 0a  y.Core.Common;..
02c0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
02d0: 61 74 61 2e 45 6e 74 69 74 79 2e 43 6f 72 65 2e  ata.Entity.Core.
02e0: 4d 65 74 61 64 61 74 61 2e 45 64 6d 3b 0d 0a 23  Metadata.Edm;..#
02f0: 65 6c 73 65 0d 0a 20 20 75 73 69 6e 67 20 53 79  else..  using Sy
0300: 73 74 65 6d 2e 44 61 74 61 2e 43 6f 6d 6d 6f 6e  stem.Data.Common
0310: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0320: 6d 2e 44 61 74 61 2e 4d 65 74 61 64 61 74 61 2e  m.Data.Metadata.
0330: 45 64 6d 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  Edm;..#endif....
0340: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0350: 0a 20 20 2f 2f 2f 20 54 68 65 20 50 72 6f 76 69  .  /// The Provi
0360: 64 65 72 20 4d 61 6e 69 66 65 73 74 20 66 6f 72  der Manifest for
0370: 20 53 51 4c 20 53 65 72 76 65 72 0d 0a 20 20 2f   SQL Server..  /
0380: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0390: 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64   internal sealed
03a0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 50 72 6f   class SQLitePro
03b0: 76 69 64 65 72 4d 61 6e 69 66 65 73 74 20 3a 20  viderManifest : 
03c0: 44 62 58 6d 6c 45 6e 61 62 6c 65 64 50 72 6f 76  DbXmlEnabledProv
03d0: 69 64 65 72 4d 61 6e 69 66 65 73 74 0d 0a 20 20  iderManifest..  
03e0: 7b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  {..    internal 
03f0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
0400: 73 20 5f 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  s _dateTimeForma
0410: 74 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  t;..    internal
0420: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 5f 64   DateTimeKind _d
0430: 61 74 65 54 69 6d 65 4b 69 6e 64 3b 0d 0a 20 20  ateTimeKind;..  
0440: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e    internal strin
0450: 67 20 5f 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  g _dateTimeForma
0460: 74 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 69 6e  tString;..    in
0470: 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 5f 62 69 6e  ternal bool _bin
0480: 61 72 79 47 75 69 64 3b 0d 0a 0d 0a 20 20 20 20  aryGuid;....    
0490: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
04a0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
04b0: 73 20 74 68 65 20 70 72 6f 76 69 64 65 72 20 6d  s the provider m
04c0: 61 6e 69 66 65 73 74 2e 0d 0a 20 20 20 20 2f 2f  anifest...    //
04d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
04e0: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
04f0: 0a 20 20 20 20 2f 2f 2f 20 50 72 65 76 69 6f 75  .    /// Previou
0500: 73 6c 79 2c 20 74 68 65 20 6d 61 6e 69 66 65 73  sly, the manifes
0510: 74 20 74 6f 6b 65 6e 20 77 61 73 20 69 6e 74 65  t token was inte
0520: 72 70 72 65 74 65 64 20 61 73 20 61 20 3c 73 65  rpreted as a <se
0530: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61  e cref="SQLiteDa
0540: 74 65 46 6f 72 6d 61 74 73 22 20 2f 3e 2c 0d 0a  teFormats" />,..
0550: 20 20 20 20 2f 2f 2f 20 62 65 63 61 75 73 65 20      /// because 
0560: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  the <see cref="D
0570: 61 74 65 54 69 6d 65 22 20 2f 3e 20 66 75 6e 63  ateTime" /> func
0580: 74 69 6f 6e 73 20 61 72 65 20 76 61 73 74 6c 79  tions are vastly
0590: 20 64 69 66 66 65 72 65 6e 74 20 64 65 70 65 6e   different depen
05a0: 64 69 6e 67 20 6f 6e 20 74 68 65 0d 0a 20 20 20  ding on the..   
05b0: 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   /// connection 
05c0: 77 61 73 20 6f 70 65 6e 65 64 2e 20 20 48 6f 77  was opened.  How
05d0: 65 76 65 72 2c 20 74 68 65 20 6d 61 6e 69 66 65  ever, the manife
05e0: 73 74 20 74 6f 6b 65 6e 20 6d 61 79 20 73 70 65  st token may spe
05f0: 63 69 66 79 20 61 20 63 6f 6e 6e 65 63 74 69 6f  cify a connectio
0600: 6e 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f  n string..    //
0610: 2f 20 69 6e 73 74 65 61 64 2e 20 20 57 41 52 4e  / instead.  WARN
0620: 49 4e 47 3a 20 4f 6e 6c 79 20 74 68 65 20 22 44  ING: Only the "D
0630: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 22 2c 20  ateTimeFormat", 
0640: 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22 2c 20  "DateTimeKind", 
0650: 22 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 53  "DateTimeFormatS
0660: 74 72 69 6e 67 22 2c 0d 0a 20 20 20 20 2f 2f 2f  tring",..    ///
0670: 20 61 6e 64 20 22 42 69 6e 61 72 79 47 55 49 44   and "BinaryGUID
0680: 22 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 61 72  " connection par
0690: 61 6d 65 74 65 72 73 20 61 72 65 20 65 78 74 72  ameters are extr
06a0: 61 63 74 65 64 20 66 72 6f 6d 20 69 74 2e 20 20  acted from it.  
06b0: 41 6c 6c 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63  All other connec
06c0: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 70 61  tion..    /// pa
06d0: 72 61 6d 65 74 65 72 73 2c 20 69 66 20 61 6e 79  rameters, if any
06e0: 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20 61 72   are present, ar
06f0: 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72  e silently ignor
0700: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
0710: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
0720: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 61   <param name="ma
0730: 6e 69 66 65 73 74 54 6f 6b 65 6e 22 3e 0d 0a 20  nifestToken">.. 
0740: 20 20 20 2f 2f 2f 20 41 20 74 6f 6b 65 6e 20 75     /// A token u
0750: 73 65 64 20 74 6f 20 69 6e 66 65 72 20 74 68 65  sed to infer the
0760: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66   capabilities of
0770: 20 74 68 65 20 73 74 6f 72 65 2e 0d 0a 20 20 20   the store...   
0780: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
0790: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
07a0: 50 72 6f 76 69 64 65 72 4d 61 6e 69 66 65 73 74  ProviderManifest
07b0: 28 73 74 72 69 6e 67 20 6d 61 6e 69 66 65 73 74  (string manifest
07c0: 54 6f 6b 65 6e 29 0d 0a 20 20 20 20 20 20 3a 20  Token)..      : 
07d0: 62 61 73 65 28 47 65 74 50 72 6f 76 69 64 65 72  base(GetProvider
07e0: 4d 61 6e 69 66 65 73 74 28 29 29 0d 0a 20 20 20  Manifest())..   
07f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 65 74 46   {..        SetF
0800: 72 6f 6d 4f 70 74 69 6f 6e 73 28 50 61 72 73 65  romOptions(Parse
0810: 50 72 6f 76 69 64 65 72 4d 61 6e 69 66 65 73 74  ProviderManifest
0820: 54 6f 6b 65 6e 28 47 65 74 50 72 6f 76 69 64 65  Token(GetProvide
0830: 72 4d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 28 6d  rManifestToken(m
0840: 61 6e 69 66 65 73 74 54 6f 6b 65 6e 29 29 29 3b  anifestToken)));
0850: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
0860: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 58 6d  rivate static Xm
0870: 6c 52 65 61 64 65 72 20 47 65 74 50 72 6f 76 69  lReader GetProvi
0880: 64 65 72 4d 61 6e 69 66 65 73 74 28 29 0d 0a 20  derManifest().. 
0890: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
08a0: 72 6e 20 47 65 74 58 6d 6c 52 65 73 6f 75 72 63  rn GetXmlResourc
08b0: 65 28 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  e("System.Data.S
08c0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 50 72 6f 76  QLite.SQLiteProv
08d0: 69 64 65 72 53 65 72 76 69 63 65 73 2e 50 72 6f  iderServices.Pro
08e0: 76 69 64 65 72 4d 61 6e 69 66 65 73 74 2e 78 6d  viderManifest.xm
08f0: 6c 22 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  l");..    }.... 
0900: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0910: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
0920: 69 6e 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73  ines and returns
0930: 20 74 68 65 20 65 66 66 65 63 74 69 76 65 20 70   the effective p
0940: 72 6f 76 69 64 65 72 20 6d 61 6e 69 66 65 73 74  rovider manifest
0950: 20 74 6f 6b 65 6e 20 74 6f 20 75 73 65 2c 0d 0a   token to use,..
0960: 20 20 20 20 2f 2f 2f 20 62 61 73 65 64 20 6f 6e      /// based on
0970: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70   the specified p
0980: 72 6f 76 69 64 65 72 20 6d 61 6e 69 66 65 73 74  rovider manifest
0990: 20 74 6f 6b 65 6e 20 61 6e 64 20 74 68 65 20 65   token and the e
09a0: 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20  nvironment,..   
09b0: 20 2f 2f 2f 20 69 66 20 61 70 70 6c 69 63 61 62   /// if applicab
09c0: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
09d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
09e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 61   <param name="ma
09f0: 6e 69 66 65 73 74 54 6f 6b 65 6e 22 3e 0d 0a 20  nifestToken">.. 
0a00: 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69     /// The origi
0a10: 6e 61 6c 20 70 72 6f 76 69 64 65 72 20 6d 61 6e  nal provider man
0a20: 69 66 65 73 74 20 74 6f 6b 65 6e 20 70 61 73 73  ifest token pass
0a30: 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 74 72  ed to the constr
0a40: 75 63 74 6f 72 20 66 6f 72 20 74 68 69 73 0d 0a  uctor for this..
0a50: 20 20 20 20 2f 2f 2f 20 63 6c 61 73 73 2e 0d 0a      /// class...
0a60: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0a70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
0a80: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
0a90: 20 65 66 66 65 63 74 69 76 65 20 70 72 6f 76 69   effective provi
0aa0: 64 65 72 20 6d 61 6e 69 66 65 73 74 20 74 6f 6b  der manifest tok
0ab0: 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  en...    /// </r
0ac0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
0ad0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
0ae0: 6e 67 20 47 65 74 50 72 6f 76 69 64 65 72 4d 61  ng GetProviderMa
0af0: 6e 69 66 65 73 74 54 6f 6b 65 6e 28 0d 0a 20 20  nifestToken(..  
0b00: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 61 6e        string man
0b10: 69 66 65 73 74 54 6f 6b 65 6e 0d 0a 20 20 20 20  ifestToken..    
0b20: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 23 69      )..    {..#i
0b30: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
0b40: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
0b50: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
0b60: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
0b70: 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 65 74 74  eMethods.GetSett
0b80: 69 6e 67 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  ingValue(..     
0b90: 20 20 20 20 20 20 20 22 41 70 70 65 6e 64 4d 61         "AppendMa
0ba0: 6e 69 66 65 73 74 54 6f 6b 65 6e 5f 53 51 4c 69  nifestToken_SQLi
0bb0: 74 65 50 72 6f 76 69 64 65 72 4d 61 6e 69 66 65  teProviderManife
0bc0: 73 74 22 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  st", null);.... 
0bd0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
0be0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
0bf0: 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
0c00: 20 20 20 20 20 72 65 74 75 72 6e 20 6d 61 6e 69       return mani
0c10: 66 65 73 74 54 6f 6b 65 6e 3b 0d 0a 0d 0a 20 20  festToken;....  
0c20: 20 20 20 20 20 20 69 6e 74 20 63 61 70 61 63 69        int capaci
0c30: 74 79 20 3d 20 76 61 6c 75 65 2e 4c 65 6e 67 74  ty = value.Lengt
0c40: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  h;....        if
0c50: 20 28 6d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 20   (manifestToken 
0c60: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
0c70: 20 20 20 20 20 20 63 61 70 61 63 69 74 79 20 2b        capacity +
0c80: 3d 20 6d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 2e  = manifestToken.
0c90: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
0ca0: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
0cb0: 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77 20 53   builder = new S
0cc0: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 63 61 70  tringBuilder(cap
0cd0: 61 63 69 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  acity);....     
0ce0: 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e     builder.Appen
0cf0: 64 28 6d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 29  d(manifestToken)
0d00: 3b 0d 0a 20 20 20 20 20 20 20 20 62 75 69 6c 64  ;..        build
0d10: 65 72 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 29  er.Append(value)
0d20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
0d30: 75 72 6e 20 62 75 69 6c 64 65 72 2e 54 6f 53 74  urn builder.ToSt
0d40: 72 69 6e 67 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ring();..#else..
0d50: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
0d60: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
0d70: 20 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72   .NET Compact Fr
0d80: 61 6d 65 77 6f 72 6b 20 6c 61 63 6b 73 20 65 6e  amework lacks en
0d90: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
0da0: 6c 65 20 73 75 70 70 6f 72 74 2e 0d 0a 20 20 20  le support...   
0db0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 54 68       //       Th
0dc0: 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 20 72 65  erefore, just re
0dd0: 74 75 72 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  turn the origina
0de0: 6c 20 70 72 6f 76 69 64 65 72 20 6d 61 6e 69 66  l provider manif
0df0: 65 73 74 20 74 6f 6b 65 6e 0d 0a 20 20 20 20 20  est token..     
0e00: 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72 62     //       verb
0e10: 61 74 69 6d 20 69 6e 20 74 68 69 73 20 63 61 73  atim in this cas
0e20: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  e...        //..
0e30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
0e40: 61 6e 69 66 65 73 74 54 6f 6b 65 6e 3b 0d 0a 23  anifestToken;..#
0e50: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
0e60: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0e70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d  >..    /// Attem
0e80: 70 74 73 20 74 6f 20 70 61 72 73 65 20 61 20 70  pts to parse a p
0e90: 72 6f 76 69 64 65 72 20 6d 61 6e 69 66 65 73 74  rovider manifest
0ea0: 20 74 6f 6b 65 6e 2e 20 20 49 74 20 6d 75 73 74   token.  It must
0eb0: 20 63 6f 6e 74 61 69 6e 20 65 69 74 68 65 72 20   contain either 
0ec0: 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 65 67 61 63  a..    /// legac
0ed0: 79 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 70  y string that sp
0ee0: 65 63 69 66 69 65 73 20 74 68 65 20 3c 73 65 65  ecifies the <see
0ef0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74   cref="SQLiteDat
0f00: 65 46 6f 72 6d 61 74 73 22 20 2f 3e 20 76 61 6c  eFormats" /> val
0f10: 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 2d 4f 52 2d  ue..    /// -OR-
0f20: 20 73 74 72 69 6e 67 20 74 68 61 74 20 75 73 65   string that use
0f30: 73 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 63  s the standard c
0f40: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
0f50: 20 73 79 6e 74 61 78 3b 20 6f 74 68 65 72 77 69   syntax; otherwi
0f60: 73 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  se,..    /// the
0f70: 20 72 65 73 75 6c 74 73 20 61 72 65 20 75 6e 64   results are und
0f80: 65 66 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  efined...    ///
0f90: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0fa0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0fb0: 3d 22 6d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 22  ="manifestToken"
0fc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d  >..    /// The m
0fd0: 61 6e 69 66 65 73 74 20 74 6f 6b 65 6e 20 74 6f  anifest token to
0fe0: 20 70 61 72 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f   parse...    ///
0ff0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
1000: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1010: 20 20 2f 2f 2f 20 54 68 65 20 64 69 63 74 69 6f    /// The dictio
1020: 6e 61 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  nary containing 
1030: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
1040: 74 72 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73  tring parameters
1050: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
1060: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
1070: 74 65 20 73 74 61 74 69 63 20 53 6f 72 74 65 64  te static Sorted
1080: 4c 69 73 74 3c 73 74 72 69 6e 67 2c 20 73 74 72  List<string, str
1090: 69 6e 67 3e 20 50 61 72 73 65 50 72 6f 76 69 64  ing> ParseProvid
10a0: 65 72 4d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 28  erManifestToken(
10b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
10c0: 20 6d 61 6e 69 66 65 73 74 54 6f 6b 65 6e 0d 0a   manifestToken..
10d0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
10e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
10f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1100: 6e 2e 50 61 72 73 65 43 6f 6e 6e 65 63 74 69 6f  n.ParseConnectio
1110: 6e 53 74 72 69 6e 67 28 6d 61 6e 69 66 65 73 74  nString(manifest
1120: 54 6f 6b 65 6e 2c 20 66 61 6c 73 65 2c 20 74 72  Token, false, tr
1130: 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ue);..    }.... 
1140: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1150: 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70  ..    /// Attemp
1160: 74 73 20 74 6f 20 73 65 74 20 74 68 65 20 70 72  ts to set the pr
1170: 6f 76 69 64 65 72 20 6d 61 6e 69 66 65 73 74 20  ovider manifest 
1180: 6f 70 74 69 6f 6e 73 20 66 72 6f 6d 20 74 68 65  options from the
1190: 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
11a0: 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  /// connection s
11b0: 74 72 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73  tring parameters
11c0: 2e 20 20 41 6e 20 65 78 63 65 70 74 69 6f 6e 20  .  An exception 
11d0: 6d 61 79 20 62 65 20 74 68 72 6f 77 6e 20 69 66  may be thrown if
11e0: 20 6f 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72   one..    /// or
11f0: 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 63 6f 6e   more of the con
1200: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70  nection string p
1210: 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 73 20  arameter values 
1220: 64 6f 20 6e 6f 74 20 63 6f 6e 66 6f 72 6d 0d 0a  do not conform..
1230: 20 20 20 20 2f 2f 2f 20 74 6f 20 74 68 65 20 65      /// to the e
1240: 78 70 65 63 74 65 64 20 74 79 70 65 2e 0d 0a 20  xpected type... 
1250: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1260: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1270: 6d 20 6e 61 6d 65 3d 22 6f 70 74 73 22 3e 0d 0a  m name="opts">..
1280: 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 69 63 74      /// The dict
1290: 69 6f 6e 61 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ionary containin
12a0: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
12b0: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 65 74 65   string paramete
12c0: 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  rs...    /// </p
12d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
12e0: 6e 61 6c 20 76 6f 69 64 20 53 65 74 46 72 6f 6d  nal void SetFrom
12f0: 4f 70 74 69 6f 6e 73 28 0d 0a 20 20 20 20 20 20  Options(..      
1300: 20 20 53 6f 72 74 65 64 4c 69 73 74 3c 73 74 72    SortedList<str
1310: 69 6e 67 2c 20 73 74 72 69 6e 67 3e 20 6f 70 74  ing, string> opt
1320: 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  s..        )..  
1330: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 64 61    {..        _da
1340: 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 3d 20 53  teTimeFormat = S
1350: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1360: 44 65 66 61 75 6c 74 44 61 74 65 54 69 6d 65 46  DefaultDateTimeF
1370: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
1380: 5f 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 3d 20  _dateTimeKind = 
1390: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
13a0: 2e 44 65 66 61 75 6c 74 44 61 74 65 54 69 6d 65  .DefaultDateTime
13b0: 4b 69 6e 64 3b 0d 0a 20 20 20 20 20 20 20 20 5f  Kind;..        _
13c0: 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 53 74  dateTimeFormatSt
13d0: 72 69 6e 67 20 3d 20 53 51 4c 69 74 65 43 6f 6e  ring = SQLiteCon
13e0: 6e 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74 44  nection.DefaultD
13f0: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 53 74 72  ateTimeFormatStr
1400: 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 5f 62  ing;..        _b
1410: 69 6e 61 72 79 47 75 69 64 20 3d 20 2f 2a 20 53  inaryGuid = /* S
1420: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
1430: 44 65 66 61 75 6c 74 42 69 6e 61 72 79 47 55 49  DefaultBinaryGUI
1440: 44 3b 20 2a 2f 20 66 61 6c 73 65 3b 20 2f 2a 20  D; */ false; /* 
1450: 43 4f 4d 50 41 54 3a 20 4c 65 67 61 63 79 2e 20  COMPAT: Legacy. 
1460: 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  */....        if
1470: 20 28 6f 70 74 73 20 3d 3d 20 6e 75 6c 6c 29 0d   (opts == null).
1480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1490: 75 72 6e 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  urn;....#if !PLA
14a0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
14b0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
14c0: 73 74 72 69 6e 67 5b 5d 20 6e 61 6d 65 73 20 3d  string[] names =
14d0: 20 45 6e 75 6d 2e 47 65 74 4e 61 6d 65 73 28 74   Enum.GetNames(t
14e0: 79 70 65 6f 66 28 53 51 4c 69 74 65 44 61 74 65  ypeof(SQLiteDate
14f0: 46 6f 72 6d 61 74 73 29 29 3b 0d 0a 23 65 6c 73  Formats));..#els
1500: 65 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  e..        strin
1510: 67 5b 5d 20 6e 61 6d 65 73 20 3d 20 7b 0d 0a 20  g[] names = {.. 
1520: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1530: 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63  eDateFormats.Tic
1540: 6b 73 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a  ks.ToString(),..
1550: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1560: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 49 53  teDateFormats.IS
1570: 4f 38 36 30 31 2e 54 6f 53 74 72 69 6e 67 28 29  O8601.ToString()
1580: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ,..            S
1590: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
15a0: 2e 4a 75 6c 69 61 6e 44 61 79 2e 54 6f 53 74 72  .JulianDay.ToStr
15b0: 69 6e 67 28 29 2c 0d 0a 20 20 20 20 20 20 20 20  ing(),..        
15c0: 20 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f      SQLiteDateFo
15d0: 72 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 2e  rmats.UnixEpoch.
15e0: 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20 20 20  ToString(),..   
15f0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
1600: 61 74 65 46 6f 72 6d 61 74 73 2e 49 6e 76 61 72  ateFormats.Invar
1610: 69 61 6e 74 43 75 6c 74 75 72 65 2e 54 6f 53 74  iantCulture.ToSt
1620: 72 69 6e 67 28 29 2c 0d 0a 20 20 20 20 20 20 20  ring(),..       
1630: 20 20 20 20 20 53 51 4c 69 74 65 44 61 74 65 46       SQLiteDateF
1640: 6f 72 6d 61 74 73 2e 43 75 72 72 65 6e 74 43 75  ormats.CurrentCu
1650: 6c 74 75 72 65 2e 54 6f 53 74 72 69 6e 67 28 29  lture.ToString()
1660: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  ,..            "
1670: 44 65 66 61 75 6c 74 22 0d 0a 20 20 20 20 20 20  Default"..      
1680: 20 20 7d 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a    };..#endif....
1690: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
16a0: 28 73 74 72 69 6e 67 20 6e 61 6d 65 20 69 6e 20  (string name in 
16b0: 6e 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20  names)..        
16c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
16d0: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
16e0: 4f 72 45 6d 70 74 79 28 6e 61 6d 65 29 29 0d 0a  OrEmpty(name))..
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1700: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
1710: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1720: 76 61 6c 75 65 20 3d 20 53 51 4c 69 74 65 43 6f  value = SQLiteCo
1730: 6e 6e 65 63 74 69 6f 6e 2e 46 69 6e 64 4b 65 79  nnection.FindKey
1740: 28 6f 70 74 73 2c 20 6e 61 6d 65 2c 20 6e 75 6c  (opts, name, nul
1750: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
1760: 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
1770: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1780: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1790: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17a0: 5f 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20  _dateTimeFormat 
17b0: 3d 20 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72  = (SQLiteDateFor
17c0: 6d 61 74 73 29 45 6e 75 6d 2e 50 61 72 73 65 28  mats)Enum.Parse(
17d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e0: 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 44    typeof(SQLiteD
17f0: 61 74 65 46 6f 72 6d 61 74 73 29 2c 20 6e 61 6d  ateFormats), nam
1800: 65 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  e, true);..     
1810: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1820: 6f 62 6a 65 63 74 20 65 6e 75 6d 56 61 6c 75 65  object enumValue
1830: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 6e 75  ;....        enu
1840: 6d 56 61 6c 75 65 20 3d 20 53 51 4c 69 74 65 43  mValue = SQLiteC
1850: 6f 6e 6e 65 63 74 69 6f 6e 2e 54 72 79 50 61 72  onnection.TryPar
1860: 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
1870: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
1880: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 29 2c 20  teDateFormats), 
1890: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
18a0: 2e 46 69 6e 64 4b 65 79 28 0d 0a 20 20 20 20 20  .FindKey(..     
18b0: 20 20 20 20 20 20 20 6f 70 74 73 2c 20 22 44 61         opts, "Da
18c0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 22 2c 20 6e  teTimeFormat", n
18d0: 75 6c 6c 29 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  ull), true);....
18e0: 20 20 20 20 20 20 20 20 69 66 20 28 65 6e 75 6d          if (enum
18f0: 56 61 6c 75 65 20 69 73 20 53 51 4c 69 74 65 44  Value is SQLiteD
1900: 61 74 65 46 6f 72 6d 61 74 73 29 0d 0a 20 20 20  ateFormats)..   
1910: 20 20 20 20 20 20 20 20 20 5f 64 61 74 65 54 69           _dateTi
1920: 6d 65 46 6f 72 6d 61 74 20 3d 20 28 53 51 4c 69  meFormat = (SQLi
1930: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 29 65 6e  teDateFormats)en
1940: 75 6d 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  umValue;....    
1950: 20 20 20 20 65 6e 75 6d 56 61 6c 75 65 20 3d 20      enumValue = 
1960: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1970: 2e 54 72 79 50 61 72 73 65 45 6e 75 6d 28 0d 0a  .TryParseEnum(..
1980: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
1990: 6f 66 28 44 61 74 65 54 69 6d 65 4b 69 6e 64 29  of(DateTimeKind)
19a0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
19b0: 6f 6e 2e 46 69 6e 64 4b 65 79 28 0d 0a 20 20 20  on.FindKey(..   
19c0: 20 20 20 20 20 20 20 20 20 6f 70 74 73 2c 20 22           opts, "
19d0: 44 61 74 65 54 69 6d 65 4b 69 6e 64 22 2c 20 6e  DateTimeKind", n
19e0: 75 6c 6c 29 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  ull), true);....
19f0: 20 20 20 20 20 20 20 20 69 66 20 28 65 6e 75 6d          if (enum
1a00: 56 61 6c 75 65 20 69 73 20 44 61 74 65 54 69 6d  Value is DateTim
1a10: 65 4b 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  eKind)..        
1a20: 20 20 20 20 5f 64 61 74 65 54 69 6d 65 4b 69 6e      _dateTimeKin
1a30: 64 20 3d 20 28 44 61 74 65 54 69 6d 65 4b 69 6e  d = (DateTimeKin
1a40: 64 29 65 6e 75 6d 56 61 6c 75 65 3b 0d 0a 0d 0a  d)enumValue;....
1a50: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
1a60: 74 72 69 6e 67 56 61 6c 75 65 20 3d 20 53 51 4c  tringValue = SQL
1a70: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 46 69  iteConnection.Fi
1a80: 6e 64 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ndKey(..        
1a90: 20 20 20 20 6f 70 74 73 2c 20 22 44 61 74 65 54      opts, "DateT
1aa0: 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 22  imeFormatString"
1ab0: 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  , null);....    
1ac0: 20 20 20 20 69 66 20 28 73 74 72 69 6e 67 56 61      if (stringVa
1ad0: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue != null)..  
1ae0: 20 20 20 20 20 20 20 20 20 20 5f 64 61 74 65 54            _dateT
1af0: 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 20  imeFormatString 
1b00: 3d 20 73 74 72 69 6e 67 56 61 6c 75 65 3b 0d 0a  = stringValue;..
1b10: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
1b20: 56 61 6c 75 65 20 3d 20 53 51 4c 69 74 65 43 6f  Value = SQLiteCo
1b30: 6e 6e 65 63 74 69 6f 6e 2e 46 69 6e 64 4b 65 79  nnection.FindKey
1b40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  (..            o
1b50: 70 74 73 2c 20 22 42 69 6e 61 72 79 47 55 49 44  pts, "BinaryGUID
1b60: 22 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  ", null);....   
1b70: 20 20 20 20 20 69 66 20 28 73 74 72 69 6e 67 56       if (stringV
1b80: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  alue != null).. 
1b90: 20 20 20 20 20 20 20 20 20 20 20 5f 62 69 6e 61             _bina
1ba0: 72 79 47 75 69 64 20 3d 20 53 51 4c 69 74 65 43  ryGuid = SQLiteC
1bb0: 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e  onvert.ToBoolean
1bc0: 28 73 74 72 69 6e 67 56 61 6c 75 65 29 3b 0d 0a  (stringValue);..
1bd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1be0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1bf0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6d 61 6e 69  /// Returns mani
1c00: 66 65 73 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  fest information
1c10: 20 66 6f 72 20 74 68 65 20 70 72 6f 76 69 64 65   for the provide
1c20: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
1c30: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1c40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 66 6f  param name="info
1c50: 72 6d 61 74 69 6f 6e 54 79 70 65 22 3e 54 68 65  rmationType">The
1c60: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 66   name of the inf
1c70: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 62 65 20 72  ormation to be r
1c80: 65 74 72 69 65 76 65 64 2e 3c 2f 70 61 72 61 6d  etrieved.</param
1c90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1ca0: 72 6e 73 3e 41 6e 20 58 6d 6c 52 65 61 64 65 72  rns>An XmlReader
1cb0: 20 61 74 20 74 68 65 20 62 65 67 69 6e 69 6e 67   at the begining
1cc0: 20 6f 66 20 74 68 65 20 69 6e 66 6f 72 6d 61 74   of the informat
1cd0: 69 6f 6e 20 72 65 71 75 65 73 74 65 64 2e 3c 2f  ion requested.</
1ce0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
1cf0: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
1d00: 20 58 6d 6c 52 65 61 64 65 72 20 47 65 74 44 62   XmlReader GetDb
1d10: 49 6e 66 6f 72 6d 61 74 69 6f 6e 28 73 74 72 69  Information(stri
1d20: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 54 79  ng informationTy
1d30: 70 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  pe)..    {..    
1d40: 20 20 69 66 20 28 69 6e 66 6f 72 6d 61 74 69 6f    if (informatio
1d50: 6e 54 79 70 65 20 3d 3d 20 44 62 50 72 6f 76 69  nType == DbProvi
1d60: 64 65 72 4d 61 6e 69 66 65 73 74 2e 53 74 6f 72  derManifest.Stor
1d70: 65 53 63 68 65 6d 61 44 65 66 69 6e 69 74 69 6f  eSchemaDefinitio
1d80: 6e 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  n)..        retu
1d90: 72 6e 20 47 65 74 53 74 6f 72 65 53 63 68 65 6d  rn GetStoreSchem
1da0: 61 44 65 73 63 72 69 70 74 69 6f 6e 28 29 3b 0d  aDescription();.
1db0: 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28  .      else if (
1dc0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 54 79 70 65 20  informationType 
1dd0: 3d 3d 20 44 62 50 72 6f 76 69 64 65 72 4d 61 6e  == DbProviderMan
1de0: 69 66 65 73 74 2e 53 74 6f 72 65 53 63 68 65 6d  ifest.StoreSchem
1df0: 61 4d 61 70 70 69 6e 67 29 0d 0a 20 20 20 20 20  aMapping)..     
1e00: 20 20 20 72 65 74 75 72 6e 20 47 65 74 53 74 6f     return GetSto
1e10: 72 65 53 63 68 65 6d 61 4d 61 70 70 69 6e 67 28  reSchemaMapping(
1e20: 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69  );..      else i
1e30: 66 20 28 69 6e 66 6f 72 6d 61 74 69 6f 6e 54 79  f (informationTy
1e40: 70 65 20 3d 3d 20 44 62 50 72 6f 76 69 64 65 72  pe == DbProvider
1e50: 4d 61 6e 69 66 65 73 74 2e 43 6f 6e 63 65 70 74  Manifest.Concept
1e60: 75 61 6c 53 63 68 65 6d 61 44 65 66 69 6e 69 74  ualSchemaDefinit
1e70: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 72 65  ion)..        re
1e80: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
1e90: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 50 72      throw new Pr
1ea0: 6f 76 69 64 65 72 49 6e 63 6f 6d 70 61 74 69 62  oviderIncompatib
1eb0: 6c 65 45 78 63 65 70 74 69 6f 6e 28 53 74 72 69  leException(Stri
1ec0: 6e 67 2e 46 6f 72 6d 61 74 28 22 53 51 4c 69 74  ng.Format("SQLit
1ed0: 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  e does not suppo
1ee0: 72 74 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  rt this informat
1ef0: 69 6f 6e 20 74 79 70 65 20 27 7b 30 7d 27 2e 22  ion type '{0}'."
1f00: 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 54 79 70  , informationTyp
1f10: 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  e));..    }.... 
1f20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1f30: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
1f40: 65 74 68 6f 64 20 74 61 6b 65 73 20 61 20 74 79  ethod takes a ty
1f50: 70 65 20 61 6e 64 20 61 20 73 65 74 20 6f 66 20  pe and a set of 
1f60: 66 61 63 65 74 73 20 61 6e 64 20 72 65 74 75 72  facets and retur
1f70: 6e 73 20 74 68 65 20 62 65 73 74 20 6d 61 70 70  ns the best mapp
1f80: 65 64 20 65 71 75 69 76 61 6c 65 6e 74 20 74 79  ed equivalent ty
1f90: 70 65 20 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20  pe ..    /// in 
1fa0: 45 44 4d 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  EDM...    /// </
1fb0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1fc0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
1fd0: 74 6f 72 65 54 79 70 65 22 3e 41 20 54 79 70 65  toreType">A Type
1fe0: 55 73 61 67 65 20 65 6e 63 61 70 73 75 6c 61 74  Usage encapsulat
1ff0: 69 6e 67 20 61 20 73 74 6f 72 65 20 74 79 70 65  ing a store type
2000: 20 61 6e 64 20 61 20 73 65 74 20 6f 66 20 66 61   and a set of fa
2010: 63 65 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  cets</param>..  
2020: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
2030: 20 54 79 70 65 55 73 61 67 65 20 65 6e 63 61 70   TypeUsage encap
2040: 73 75 6c 61 74 69 6e 67 20 61 6e 20 45 44 4d 20  sulating an EDM 
2050: 74 79 70 65 20 61 6e 64 20 61 20 73 65 74 20 6f  type and a set o
2060: 66 20 66 61 63 65 74 73 3c 2f 72 65 74 75 72 6e  f facets</return
2070: 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
2080: 76 65 72 72 69 64 65 20 54 79 70 65 55 73 61 67  verride TypeUsag
2090: 65 20 47 65 74 45 64 6d 54 79 70 65 28 54 79 70  e GetEdmType(Typ
20a0: 65 55 73 61 67 65 20 73 74 6f 72 65 54 79 70 65  eUsage storeType
20b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
20c0: 69 66 20 28 73 74 6f 72 65 54 79 70 65 20 3d 3d  if (storeType ==
20d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d   null)..      {.
20e0: 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e  .        throw n
20f0: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
2100: 78 63 65 70 74 69 6f 6e 28 22 73 74 6f 72 65 54  xception("storeT
2110: 79 70 65 22 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  ype");..      }.
2120: 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ...      string 
2130: 73 74 6f 72 65 54 79 70 65 4e 61 6d 65 20 3d 20  storeTypeName = 
2140: 73 74 6f 72 65 54 79 70 65 2e 45 64 6d 54 79 70  storeType.EdmTyp
2150: 65 2e 4e 61 6d 65 2e 54 6f 4c 6f 77 65 72 49 6e  e.Name.ToLowerIn
2160: 76 61 72 69 61 6e 74 28 29 3b 0d 0a 20 20 20 20  variant();..    
2170: 20 20 2f 2f 69 66 20 28 21 62 61 73 65 2e 53 74    //if (!base.St
2180: 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f 45 64 6d  oreTypeNameToEdm
2190: 50 72 69 6d 69 74 69 76 65 54 79 70 65 2e 43 6f  PrimitiveType.Co
21a0: 6e 74 61 69 6e 73 4b 65 79 28 73 74 6f 72 65 54  ntainsKey(storeT
21b0: 79 70 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ypeName))..     
21c0: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 2f 2f 20 20   //{..      //  
21d0: 73 77 69 74 63 68 20 28 73 74 6f 72 65 54 79 70  switch (storeTyp
21e0: 65 4e 61 6d 65 29 0d 0a 20 20 20 20 20 20 2f 2f  eName)..      //
21f0: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20    {..      //   
2200: 20 63 61 73 65 20 22 69 6e 74 65 67 65 72 22 3a   case "integer":
2210: 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
2220: 72 65 74 75 72 6e 20 54 79 70 65 55 73 61 67 65  return TypeUsage
2230: 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74 54 79  .CreateDefaultTy
2240: 70 65 55 73 61 67 65 28 50 72 69 6d 69 74 69 76  peUsage(Primitiv
2250: 65 54 79 70 65 2e 47 65 74 45 64 6d 50 72 69 6d  eType.GetEdmPrim
2260: 69 74 69 76 65 54 79 70 65 28 50 72 69 6d 69 74  itiveType(Primit
2270: 69 76 65 54 79 70 65 4b 69 6e 64 2e 49 6e 74 36  iveTypeKind.Int6
2280: 34 29 29 3b 0d 0a 20 20 20 20 20 20 2f 2f 20 20  4));..      //  
2290: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
22a0: 20 20 2f 2f 20 20 20 20 20 20 74 68 72 6f 77 20    //      throw 
22b0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
22c0: 70 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72  ption(String.For
22d0: 6d 61 74 28 22 53 51 4c 69 74 65 20 64 6f 65 73  mat("SQLite does
22e0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65   not support the
22f0: 20 74 79 70 65 20 27 7b 30 7d 27 2e 22 2c 20 73   type '{0}'.", s
2300: 74 6f 72 65 54 79 70 65 4e 61 6d 65 29 29 3b 0d  toreTypeName));.
2310: 0a 20 20 20 20 20 20 2f 2f 20 20 7d 0d 0a 20 20  .      //  }..  
2320: 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20      //}....     
2330: 20 50 72 69 6d 69 74 69 76 65 54 79 70 65 20 65   PrimitiveType e
2340: 64 6d 50 72 69 6d 69 74 69 76 65 54 79 70 65 3b  dmPrimitiveType;
2350: 0d 0a 20 20 20 20 20 20 0d 0a 20 20 20 20 20 20  ..      ..      
2360: 69 66 20 28 62 61 73 65 2e 53 74 6f 72 65 54 79  if (base.StoreTy
2370: 70 65 4e 61 6d 65 54 6f 45 64 6d 50 72 69 6d 69  peNameToEdmPrimi
2380: 74 69 76 65 54 79 70 65 2e 54 72 79 47 65 74 56  tiveType.TryGetV
2390: 61 6c 75 65 28 73 74 6f 72 65 54 79 70 65 4e 61  alue(storeTypeNa
23a0: 6d 65 2c 20 6f 75 74 20 65 64 6d 50 72 69 6d 69  me, out edmPrimi
23b0: 74 69 76 65 54 79 70 65 29 20 3d 3d 20 66 61 6c  tiveType) == fal
23c0: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  se)..        thr
23d0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
23e0: 78 63 65 70 74 69 6f 6e 28 53 74 72 69 6e 67 2e  xception(String.
23f0: 46 6f 72 6d 61 74 28 22 53 51 4c 69 74 65 20 64  Format("SQLite d
2400: 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
2410: 74 68 65 20 74 79 70 65 20 27 7b 30 7d 27 2e 22  the type '{0}'."
2420: 2c 20 73 74 6f 72 65 54 79 70 65 4e 61 6d 65 29  , storeTypeName)
2430: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 6e 74 20  );....      int 
2440: 6d 61 78 4c 65 6e 67 74 68 20 3d 20 30 3b 0d 0a  maxLength = 0;..
2450: 20 20 20 20 20 20 62 6f 6f 6c 20 69 73 55 6e 69        bool isUni
2460: 63 6f 64 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  code = true;..  
2470: 20 20 20 20 62 6f 6f 6c 20 69 73 46 69 78 65 64      bool isFixed
2480: 4c 65 6e 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  Len = false;..  
2490: 20 20 20 20 62 6f 6f 6c 20 69 73 55 6e 62 6f 75      bool isUnbou
24a0: 6e 64 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  nded = true;....
24b0: 20 20 20 20 20 20 50 72 69 6d 69 74 69 76 65 54        PrimitiveT
24c0: 79 70 65 4b 69 6e 64 20 6e 65 77 50 72 69 6d 69  ypeKind newPrimi
24d0: 74 69 76 65 54 79 70 65 4b 69 6e 64 3b 0d 0a 0d  tiveTypeKind;...
24e0: 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 73  .      switch (s
24f0: 74 6f 72 65 54 79 70 65 4e 61 6d 65 29 0d 0a 20  toreTypeName).. 
2500: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2510: 63 61 73 65 20 22 74 69 6e 79 69 6e 74 22 3a 0d  case "tinyint":.
2520: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 73  .        case "s
2530: 6d 61 6c 6c 69 6e 74 22 3a 0d 0a 20 20 20 20 20  mallint":..     
2540: 20 20 20 63 61 73 65 20 22 69 6e 74 65 67 65 72     case "integer
2550: 22 3a 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  ":..        case
2560: 20 22 62 69 74 22 3a 0d 0a 20 20 20 20 20 20 20   "bit":..       
2570: 20 63 61 73 65 20 22 75 6e 69 71 75 65 69 64 65   case "uniqueide
2580: 6e 74 69 66 69 65 72 22 3a 0d 0a 20 20 20 20 20  ntifier":..     
2590: 20 20 20 63 61 73 65 20 22 69 6e 74 22 3a 0d 0a     case "int":..
25a0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 66 6c          case "fl
25b0: 6f 61 74 22 3a 0d 0a 20 20 20 20 20 20 20 20 63  oat":..        c
25c0: 61 73 65 20 22 72 65 61 6c 22 3a 0d 0a 20 20 20  ase "real":..   
25d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79         return Ty
25e0: 70 65 55 73 61 67 65 2e 43 72 65 61 74 65 44 65  peUsage.CreateDe
25f0: 66 61 75 6c 74 54 79 70 65 55 73 61 67 65 28 65  faultTypeUsage(e
2600: 64 6d 50 72 69 6d 69 74 69 76 65 54 79 70 65 29  dmPrimitiveType)
2610: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ;....        cas
2620: 65 20 22 76 61 72 63 68 61 72 22 3a 0d 0a 20 20  e "varchar":..  
2630: 20 20 20 20 20 20 20 20 6e 65 77 50 72 69 6d 69          newPrimi
2640: 74 69 76 65 54 79 70 65 4b 69 6e 64 20 3d 20 50  tiveTypeKind = P
2650: 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64  rimitiveTypeKind
2660: 2e 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20 20  .String;..      
2670: 20 20 20 20 69 73 55 6e 62 6f 75 6e 64 65 64 20      isUnbounded 
2680: 3d 20 21 54 79 70 65 48 65 6c 70 65 72 73 2e 54  = !TypeHelpers.T
2690: 72 79 47 65 74 4d 61 78 4c 65 6e 67 74 68 28 73  ryGetMaxLength(s
26a0: 74 6f 72 65 54 79 70 65 2c 20 6f 75 74 20 6d 61  toreType, out ma
26b0: 78 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  xLength);..     
26c0: 20 20 20 20 20 69 73 55 6e 69 63 6f 64 65 20 3d       isUnicode =
26d0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
26e0: 20 20 20 69 73 46 69 78 65 64 4c 65 6e 20 3d 20     isFixedLen = 
26f0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2700: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
2710: 20 20 63 61 73 65 20 22 63 68 61 72 22 3a 0d 0a    case "char":..
2720: 20 20 20 20 20 20 20 20 20 20 6e 65 77 50 72 69            newPri
2730: 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64 20 3d  mitiveTypeKind =
2740: 20 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69   PrimitiveTypeKi
2750: 6e 64 2e 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20  nd.String;..    
2760: 20 20 20 20 20 20 69 73 55 6e 62 6f 75 6e 64 65        isUnbounde
2770: 64 20 3d 20 21 54 79 70 65 48 65 6c 70 65 72 73  d = !TypeHelpers
2780: 2e 54 72 79 47 65 74 4d 61 78 4c 65 6e 67 74 68  .TryGetMaxLength
2790: 28 73 74 6f 72 65 54 79 70 65 2c 20 6f 75 74 20  (storeType, out 
27a0: 6d 61 78 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  maxLength);..   
27b0: 20 20 20 20 20 20 20 69 73 55 6e 69 63 6f 64 65         isUnicode
27c0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
27d0: 20 20 20 20 20 69 73 46 69 78 65 64 4c 65 6e 20       isFixedLen 
27e0: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
27f0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
2800: 20 20 20 63 61 73 65 20 22 6e 76 61 72 63 68 61     case "nvarcha
2810: 72 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 6e  r":..          n
2820: 65 77 50 72 69 6d 69 74 69 76 65 54 79 70 65 4b  ewPrimitiveTypeK
2830: 69 6e 64 20 3d 20 50 72 69 6d 69 74 69 76 65 54  ind = PrimitiveT
2840: 79 70 65 4b 69 6e 64 2e 53 74 72 69 6e 67 3b 0d  ypeKind.String;.
2850: 0a 20 20 20 20 20 20 20 20 20 20 69 73 55 6e 62  .          isUnb
2860: 6f 75 6e 64 65 64 20 3d 20 21 54 79 70 65 48 65  ounded = !TypeHe
2870: 6c 70 65 72 73 2e 54 72 79 47 65 74 4d 61 78 4c  lpers.TryGetMaxL
2880: 65 6e 67 74 68 28 73 74 6f 72 65 54 79 70 65 2c  ength(storeType,
2890: 20 6f 75 74 20 6d 61 78 4c 65 6e 67 74 68 29 3b   out maxLength);
28a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 73 55 6e  ..          isUn
28b0: 69 63 6f 64 65 20 3d 20 74 72 75 65 3b 0d 0a 20  icode = true;.. 
28c0: 20 20 20 20 20 20 20 20 20 69 73 46 69 78 65 64           isFixed
28d0: 4c 65 6e 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  Len = false;..  
28e0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
28f0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6e 63          case "nc
2900: 68 61 72 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  har":..         
2910: 20 6e 65 77 50 72 69 6d 69 74 69 76 65 54 79 70   newPrimitiveTyp
2920: 65 4b 69 6e 64 20 3d 20 50 72 69 6d 69 74 69 76  eKind = Primitiv
2930: 65 54 79 70 65 4b 69 6e 64 2e 53 74 72 69 6e 67  eTypeKind.String
2940: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 73 55  ;..          isU
2950: 6e 62 6f 75 6e 64 65 64 20 3d 20 21 54 79 70 65  nbounded = !Type
2960: 48 65 6c 70 65 72 73 2e 54 72 79 47 65 74 4d 61  Helpers.TryGetMa
2970: 78 4c 65 6e 67 74 68 28 73 74 6f 72 65 54 79 70  xLength(storeTyp
2980: 65 2c 20 6f 75 74 20 6d 61 78 4c 65 6e 67 74 68  e, out maxLength
2990: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 73  );..          is
29a0: 55 6e 69 63 6f 64 65 20 3d 20 74 72 75 65 3b 0d  Unicode = true;.
29b0: 0a 20 20 20 20 20 20 20 20 20 20 69 73 46 69 78  .          isFix
29c0: 65 64 4c 65 6e 20 3d 20 74 72 75 65 3b 0d 0a 20  edLen = true;.. 
29d0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
29e0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22 62  .        case "b
29f0: 6c 6f 62 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  lob":..         
2a00: 20 6e 65 77 50 72 69 6d 69 74 69 76 65 54 79 70   newPrimitiveTyp
2a10: 65 4b 69 6e 64 20 3d 20 50 72 69 6d 69 74 69 76  eKind = Primitiv
2a20: 65 54 79 70 65 4b 69 6e 64 2e 42 69 6e 61 72 79  eTypeKind.Binary
2a30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 73 55  ;..          isU
2a40: 6e 62 6f 75 6e 64 65 64 20 3d 20 21 54 79 70 65  nbounded = !Type
2a50: 48 65 6c 70 65 72 73 2e 54 72 79 47 65 74 4d 61  Helpers.TryGetMa
2a60: 78 4c 65 6e 67 74 68 28 73 74 6f 72 65 54 79 70  xLength(storeTyp
2a70: 65 2c 20 6f 75 74 20 6d 61 78 4c 65 6e 67 74 68  e, out maxLength
2a80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 73  );..          is
2a90: 46 69 78 65 64 4c 65 6e 20 3d 20 66 61 6c 73 65  FixedLen = false
2aa0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  ;..          bre
2ab0: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73  ak;..        cas
2ac0: 65 20 22 64 65 63 69 6d 61 6c 22 3a 0d 0a 20 20  e "decimal":..  
2ad0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ae0: 20 20 20 20 20 20 20 62 79 74 65 20 70 72 65 63         byte prec
2af0: 69 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  ision;..        
2b00: 20 20 20 20 62 79 74 65 20 73 63 61 6c 65 3b 0d      byte scale;.
2b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2b20: 28 54 79 70 65 48 65 6c 70 65 72 73 2e 54 72 79  (TypeHelpers.Try
2b30: 47 65 74 50 72 65 63 69 73 69 6f 6e 28 73 74 6f  GetPrecision(sto
2b40: 72 65 54 79 70 65 2c 20 6f 75 74 20 70 72 65 63  reType, out prec
2b50: 69 73 69 6f 6e 29 20 26 26 20 54 79 70 65 48 65  ision) && TypeHe
2b60: 6c 70 65 72 73 2e 54 72 79 47 65 74 53 63 61 6c  lpers.TryGetScal
2b70: 65 28 73 74 6f 72 65 54 79 70 65 2c 20 6f 75 74  e(storeType, out
2b80: 20 73 63 61 6c 65 29 29 0d 0a 20 20 20 20 20 20   scale))..      
2b90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ba0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79         return Ty
2bb0: 70 65 55 73 61 67 65 2e 43 72 65 61 74 65 44 65  peUsage.CreateDe
2bc0: 63 69 6d 61 6c 54 79 70 65 55 73 61 67 65 28 65  cimalTypeUsage(e
2bd0: 64 6d 50 72 69 6d 69 74 69 76 65 54 79 70 65 2c  dmPrimitiveType,
2be0: 20 70 72 65 63 69 73 69 6f 6e 2c 20 73 63 61 6c   precision, scal
2bf0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2c00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2c10: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2c20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c30: 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 55 73     return TypeUs
2c40: 61 67 65 2e 43 72 65 61 74 65 44 65 63 69 6d 61  age.CreateDecima
2c50: 6c 54 79 70 65 55 73 61 67 65 28 65 64 6d 50 72  lTypeUsage(edmPr
2c60: 69 6d 69 74 69 76 65 54 79 70 65 29 3b 0d 0a 20  imitiveType);.. 
2c70: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2c80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2c90: 20 20 20 63 61 73 65 20 22 64 61 74 65 74 69 6d     case "datetim
2ca0: 65 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  e":..          r
2cb0: 65 74 75 72 6e 20 54 79 70 65 55 73 61 67 65 2e  eturn TypeUsage.
2cc0: 43 72 65 61 74 65 44 61 74 65 54 69 6d 65 54 79  CreateDateTimeTy
2cd0: 70 65 55 73 61 67 65 28 65 64 6d 50 72 69 6d 69  peUsage(edmPrimi
2ce0: 74 69 76 65 54 79 70 65 2c 20 6e 75 6c 6c 29 3b  tiveType, null);
2cf0: 0d 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c  ..        defaul
2d00: 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68  t:..          th
2d10: 72 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70 70 6f  row new NotSuppo
2d20: 72 74 65 64 45 78 63 65 70 74 69 6f 6e 28 53 74  rtedException(St
2d30: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 51 4c  ring.Format("SQL
2d40: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
2d50: 70 6f 72 74 20 74 68 65 20 74 79 70 65 20 27 7b  port the type '{
2d60: 30 7d 27 2e 22 2c 20 73 74 6f 72 65 54 79 70 65  0}'.", storeType
2d70: 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 7d  Name));..      }
2d80: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
2d90: 20 28 6e 65 77 50 72 69 6d 69 74 69 76 65 54 79   (newPrimitiveTy
2da0: 70 65 4b 69 6e 64 29 0d 0a 20 20 20 20 20 20 7b  peKind)..      {
2db0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 50  ..        case P
2dc0: 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64  rimitiveTypeKind
2dd0: 2e 53 74 72 69 6e 67 3a 0d 0a 20 20 20 20 20 20  .String:..      
2de0: 20 20 20 20 69 66 20 28 21 69 73 55 6e 62 6f 75      if (!isUnbou
2df0: 6e 64 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  nded)..         
2e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e10: 72 65 74 75 72 6e 20 54 79 70 65 55 73 61 67 65  return TypeUsage
2e20: 2e 43 72 65 61 74 65 53 74 72 69 6e 67 54 79 70  .CreateStringTyp
2e30: 65 55 73 61 67 65 28 65 64 6d 50 72 69 6d 69 74  eUsage(edmPrimit
2e40: 69 76 65 54 79 70 65 2c 20 69 73 55 6e 69 63 6f  iveType, isUnico
2e50: 64 65 2c 20 69 73 46 69 78 65 64 4c 65 6e 2c 20  de, isFixedLen, 
2e60: 6d 61 78 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  maxLength);..   
2e70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2e80: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
2e90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ea0: 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 55 73     return TypeUs
2eb0: 61 67 65 2e 43 72 65 61 74 65 53 74 72 69 6e 67  age.CreateString
2ec0: 54 79 70 65 55 73 61 67 65 28 65 64 6d 50 72 69  TypeUsage(edmPri
2ed0: 6d 69 74 69 76 65 54 79 70 65 2c 20 69 73 55 6e  mitiveType, isUn
2ee0: 69 63 6f 64 65 2c 20 69 73 46 69 78 65 64 4c 65  icode, isFixedLe
2ef0: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n);..          }
2f00: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 50  ..        case P
2f10: 72 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64  rimitiveTypeKind
2f20: 2e 42 69 6e 61 72 79 3a 0d 0a 20 20 20 20 20 20  .Binary:..      
2f30: 20 20 20 20 69 66 20 28 21 69 73 55 6e 62 6f 75      if (!isUnbou
2f40: 6e 64 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  nded)..         
2f50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f60: 72 65 74 75 72 6e 20 54 79 70 65 55 73 61 67 65  return TypeUsage
2f70: 2e 43 72 65 61 74 65 42 69 6e 61 72 79 54 79 70  .CreateBinaryTyp
2f80: 65 55 73 61 67 65 28 65 64 6d 50 72 69 6d 69 74  eUsage(edmPrimit
2f90: 69 76 65 54 79 70 65 2c 20 69 73 46 69 78 65 64  iveType, isFixed
2fa0: 4c 65 6e 2c 20 6d 61 78 4c 65 6e 67 74 68 29 3b  Len, maxLength);
2fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
2fc0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2fd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2fe0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
2ff0: 79 70 65 55 73 61 67 65 2e 43 72 65 61 74 65 42  ypeUsage.CreateB
3000: 69 6e 61 72 79 54 79 70 65 55 73 61 67 65 28 65  inaryTypeUsage(e
3010: 64 6d 50 72 69 6d 69 74 69 76 65 54 79 70 65 2c  dmPrimitiveType,
3020: 20 69 73 46 69 78 65 64 4c 65 6e 29 3b 0d 0a 20   isFixedLen);.. 
3030: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3040: 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20      default:..  
3050: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
3060: 77 20 4e 6f 74 53 75 70 70 6f 72 74 65 64 45 78  w NotSupportedEx
3070: 63 65 70 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46  ception(String.F
3080: 6f 72 6d 61 74 28 22 53 51 4c 69 74 65 20 64 6f  ormat("SQLite do
3090: 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74  es not support t
30a0: 68 65 20 74 79 70 65 20 27 7b 30 7d 27 2e 22 2c  he type '{0}'.",
30b0: 20 73 74 6f 72 65 54 79 70 65 4e 61 6d 65 29 29   storeTypeName))
30c0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
30d0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
30e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
30f0: 54 68 69 73 20 6d 65 74 68 6f 64 20 74 61 6b 65  This method take
3100: 73 20 61 20 74 79 70 65 20 61 6e 64 20 61 20 73  s a type and a s
3110: 65 74 20 6f 66 20 66 61 63 65 74 73 20 61 6e 64  et of facets and
3120: 20 72 65 74 75 72 6e 73 20 74 68 65 20 62 65 73   returns the bes
3130: 74 20 6d 61 70 70 65 64 20 65 71 75 69 76 61 6c  t mapped equival
3140: 65 6e 74 20 74 79 70 65 20 0d 0a 20 20 20 20 2f  ent type ..    /
3150: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3160: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3170: 6d 65 3d 22 65 64 6d 54 79 70 65 22 3e 41 20 54  me="edmType">A T
3180: 79 70 65 55 73 61 67 65 20 65 6e 63 61 70 73 75  ypeUsage encapsu
3190: 6c 61 74 69 6e 67 20 61 6e 20 45 44 4d 20 74 79  lating an EDM ty
31a0: 70 65 20 61 6e 64 20 61 20 73 65 74 20 6f 66 20  pe and a set of 
31b0: 66 61 63 65 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a  facets</param>..
31c0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
31d0: 3e 41 20 54 79 70 65 55 73 61 67 65 20 65 6e 63  >A TypeUsage enc
31e0: 61 70 73 75 6c 61 74 69 6e 67 20 61 20 73 74 6f  apsulating a sto
31f0: 72 65 20 74 79 70 65 20 61 6e 64 20 61 20 73 65  re type and a se
3200: 74 20 6f 66 20 66 61 63 65 74 73 3c 2f 72 65 74  t of facets</ret
3210: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
3220: 63 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 55  c override TypeU
3230: 73 61 67 65 20 47 65 74 53 74 6f 72 65 54 79 70  sage GetStoreTyp
3240: 65 28 54 79 70 65 55 73 61 67 65 20 65 64 6d 54  e(TypeUsage edmT
3250: 79 70 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ype)..    {..   
3260: 20 20 20 69 66 20 28 65 64 6d 54 79 70 65 20 3d     if (edmType =
3270: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3280: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
3290: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
32a0: 28 22 65 64 6d 54 79 70 65 22 29 3b 0d 0a 0d 0a  ("edmType");....
32b0: 20 20 20 20 20 20 50 72 69 6d 69 74 69 76 65 54        PrimitiveT
32c0: 79 70 65 20 70 72 69 6d 69 74 69 76 65 54 79 70  ype primitiveTyp
32d0: 65 20 3d 20 65 64 6d 54 79 70 65 2e 45 64 6d 54  e = edmType.EdmT
32e0: 79 70 65 20 61 73 20 50 72 69 6d 69 74 69 76 65  ype as Primitive
32f0: 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 69 66 20  Type;..      if 
3300: 28 70 72 69 6d 69 74 69 76 65 54 79 70 65 20 3d  (primitiveType =
3310: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3320: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
3330: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74 72  entException(Str
3340: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 51 4c 69  ing.Format("SQLi
3350: 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  te does not supp
3360: 6f 72 74 20 74 68 65 20 74 79 70 65 20 27 7b 30  ort the type '{0
3370: 7d 27 2e 22 2c 20 65 64 6d 54 79 70 65 29 29 3b  }'.", edmType));
3380: 0d 0a 0d 0a 20 20 20 20 20 20 52 65 61 64 4f 6e  ....      ReadOn
3390: 6c 79 4d 65 74 61 64 61 74 61 43 6f 6c 6c 65 63  lyMetadataCollec
33a0: 74 69 6f 6e 3c 46 61 63 65 74 3e 20 66 61 63 65  tion<Facet> face
33b0: 74 73 20 3d 20 65 64 6d 54 79 70 65 2e 46 61 63  ts = edmType.Fac
33c0: 65 74 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ets;....      sw
33d0: 69 74 63 68 20 28 70 72 69 6d 69 74 69 76 65 54  itch (primitiveT
33e0: 79 70 65 2e 50 72 69 6d 69 74 69 76 65 54 79 70  ype.PrimitiveTyp
33f0: 65 4b 69 6e 64 29 0d 0a 20 20 20 20 20 20 7b 0d  eKind)..      {.
3400: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 50 72  .        case Pr
3410: 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e  imitiveTypeKind.
3420: 42 6f 6f 6c 65 61 6e 3a 0d 0a 20 20 20 20 20 20  Boolean:..      
3430: 20 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 55      return TypeU
3440: 73 61 67 65 2e 43 72 65 61 74 65 44 65 66 61 75  sage.CreateDefau
3450: 6c 74 54 79 70 65 55 73 61 67 65 28 53 74 6f 72  ltTypeUsage(Stor
3460: 65 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f 72 65  eTypeNameToStore
3470: 50 72 69 6d 69 74 69 76 65 54 79 70 65 5b 22 62  PrimitiveType["b
3480: 69 74 22 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20  it"]);..        
3490: 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54 79  case PrimitiveTy
34a0: 70 65 4b 69 6e 64 2e 42 79 74 65 3a 0d 0a 20 20  peKind.Byte:..  
34b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
34c0: 79 70 65 55 73 61 67 65 2e 43 72 65 61 74 65 44  ypeUsage.CreateD
34d0: 65 66 61 75 6c 74 54 79 70 65 55 73 61 67 65 28  efaultTypeUsage(
34e0: 53 74 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f 53  StoreTypeNameToS
34f0: 74 6f 72 65 50 72 69 6d 69 74 69 76 65 54 79 70  torePrimitiveTyp
3500: 65 5b 22 74 69 6e 79 69 6e 74 22 5d 29 3b 0d 0a  e["tinyint"]);..
3510: 20 20 20 20 20 20 20 20 63 61 73 65 20 50 72 69          case Pri
3520: 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e 49  mitiveTypeKind.I
3530: 6e 74 31 36 3a 0d 0a 20 20 20 20 20 20 20 20 20  nt16:..         
3540: 20 72 65 74 75 72 6e 20 54 79 70 65 55 73 61 67   return TypeUsag
3550: 65 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74 54  e.CreateDefaultT
3560: 79 70 65 55 73 61 67 65 28 53 74 6f 72 65 54 79  ypeUsage(StoreTy
3570: 70 65 4e 61 6d 65 54 6f 53 74 6f 72 65 50 72 69  peNameToStorePri
3580: 6d 69 74 69 76 65 54 79 70 65 5b 22 73 6d 61 6c  mitiveType["smal
3590: 6c 69 6e 74 22 5d 29 3b 0d 0a 20 20 20 20 20 20  lint"]);..      
35a0: 20 20 63 61 73 65 20 50 72 69 6d 69 74 69 76 65    case Primitive
35b0: 54 79 70 65 4b 69 6e 64 2e 49 6e 74 33 32 3a 0d  TypeKind.Int32:.
35c0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
35d0: 6e 20 54 79 70 65 55 73 61 67 65 2e 43 72 65 61  n TypeUsage.Crea
35e0: 74 65 44 65 66 61 75 6c 74 54 79 70 65 55 73 61  teDefaultTypeUsa
35f0: 67 65 28 53 74 6f 72 65 54 79 70 65 4e 61 6d 65  ge(StoreTypeName
3600: 54 6f 53 74 6f 72 65 50 72 69 6d 69 74 69 76 65  ToStorePrimitive
3610: 54 79 70 65 5b 22 69 6e 74 22 5d 29 3b 0d 0a 20  Type["int"]);.. 
3620: 20 20 20 20 20 20 20 63 61 73 65 20 50 72 69 6d         case Prim
3630: 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e 49 6e  itiveTypeKind.In
3640: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
3650: 72 65 74 75 72 6e 20 54 79 70 65 55 73 61 67 65  return TypeUsage
3660: 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74 54 79  .CreateDefaultTy
3670: 70 65 55 73 61 67 65 28 53 74 6f 72 65 54 79 70  peUsage(StoreTyp
3680: 65 4e 61 6d 65 54 6f 53 74 6f 72 65 50 72 69 6d  eNameToStorePrim
3690: 69 74 69 76 65 54 79 70 65 5b 22 69 6e 74 65 67  itiveType["integ
36a0: 65 72 22 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20  er"]);..        
36b0: 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54 79  case PrimitiveTy
36c0: 70 65 4b 69 6e 64 2e 47 75 69 64 3a 0d 0a 20 20  peKind.Guid:..  
36d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
36e0: 79 70 65 55 73 61 67 65 2e 43 72 65 61 74 65 44  ypeUsage.CreateD
36f0: 65 66 61 75 6c 74 54 79 70 65 55 73 61 67 65 28  efaultTypeUsage(
3700: 53 74 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f 53  StoreTypeNameToS
3710: 74 6f 72 65 50 72 69 6d 69 74 69 76 65 54 79 70  torePrimitiveTyp
3720: 65 5b 22 75 6e 69 71 75 65 69 64 65 6e 74 69 66  e["uniqueidentif
3730: 69 65 72 22 5d 29 3b 0d 0a 20 20 20 20 20 20 20  ier"]);..       
3740: 20 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54   case PrimitiveT
3750: 79 70 65 4b 69 6e 64 2e 44 6f 75 62 6c 65 3a 0d  ypeKind.Double:.
3760: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
3770: 6e 20 54 79 70 65 55 73 61 67 65 2e 43 72 65 61  n TypeUsage.Crea
3780: 74 65 44 65 66 61 75 6c 74 54 79 70 65 55 73 61  teDefaultTypeUsa
3790: 67 65 28 53 74 6f 72 65 54 79 70 65 4e 61 6d 65  ge(StoreTypeName
37a0: 54 6f 53 74 6f 72 65 50 72 69 6d 69 74 69 76 65  ToStorePrimitive
37b0: 54 79 70 65 5b 22 66 6c 6f 61 74 22 5d 29 3b 0d  Type["float"]);.
37c0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 50 72  .        case Pr
37d0: 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e  imitiveTypeKind.
37e0: 53 69 6e 67 6c 65 3a 0d 0a 20 20 20 20 20 20 20  Single:..       
37f0: 20 20 20 72 65 74 75 72 6e 20 54 79 70 65 55 73     return TypeUs
3800: 61 67 65 2e 43 72 65 61 74 65 44 65 66 61 75 6c  age.CreateDefaul
3810: 74 54 79 70 65 55 73 61 67 65 28 53 74 6f 72 65  tTypeUsage(Store
3820: 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f 72 65 50  TypeNameToStoreP
3830: 72 69 6d 69 74 69 76 65 54 79 70 65 5b 22 72 65  rimitiveType["re
3840: 61 6c 22 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20  al"]);..        
3850: 63 61 73 65 20 50 72 69 6d 69 74 69 76 65 54 79  case PrimitiveTy
3860: 70 65 4b 69 6e 64 2e 44 65 63 69 6d 61 6c 3a 20  peKind.Decimal: 
3870: 2f 2f 20 64 65 63 69 6d 61 6c 2c 20 6e 75 6d 65  // decimal, nume
3880: 72 69 63 2c 20 73 6d 61 6c 6c 6d 6f 6e 65 79 2c  ric, smallmoney,
3890: 20 6d 6f 6e 65 79 0d 0a 20 20 20 20 20 20 20 20   money..        
38a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
38b0: 20 62 79 74 65 20 70 72 65 63 69 73 69 6f 6e 3b   byte precision;
38c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
38d0: 20 28 21 54 79 70 65 48 65 6c 70 65 72 73 2e 54   (!TypeHelpers.T
38e0: 72 79 47 65 74 50 72 65 63 69 73 69 6f 6e 28 65  ryGetPrecision(e
38f0: 64 6d 54 79 70 65 2c 20 6f 75 74 20 70 72 65 63  dmType, out prec
3900: 69 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  ision))..       
3910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3920: 20 20 20 20 20 20 70 72 65 63 69 73 69 6f 6e 20        precision 
3930: 3d 20 31 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  = 18;..         
3940: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3950: 20 20 20 20 62 79 74 65 20 73 63 61 6c 65 3b 0d      byte scale;.
3960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
3970: 28 21 54 79 70 65 48 65 6c 70 65 72 73 2e 54 72  (!TypeHelpers.Tr
3980: 79 47 65 74 53 63 61 6c 65 28 65 64 6d 54 79 70  yGetScale(edmTyp
3990: 65 2c 20 6f 75 74 20 73 63 61 6c 65 29 29 0d 0a  e, out scale))..
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 63 61               sca
39c0: 6c 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  le = 0;..       
39d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
39e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
39f0: 65 55 73 61 67 65 2e 43 72 65 61 74 65 44 65 63  eUsage.CreateDec
3a00: 69 6d 61 6c 54 79 70 65 55 73 61 67 65 28 53 74  imalTypeUsage(St
3a10: 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f  oreTypeNameToSto
3a20: 72 65 50 72 69 6d 69 74 69 76 65 54 79 70 65 5b  rePrimitiveType[
3a30: 22 64 65 63 69 6d 61 6c 22 5d 2c 20 70 72 65 63  "decimal"], prec
3a40: 69 73 69 6f 6e 2c 20 73 63 61 6c 65 29 3b 0d 0a  ision, scale);..
3a50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3a60: 20 20 20 20 20 63 61 73 65 20 50 72 69 6d 69 74       case Primit
3a70: 69 76 65 54 79 70 65 4b 69 6e 64 2e 42 69 6e 61  iveTypeKind.Bina
3a80: 72 79 3a 20 2f 2f 20 62 69 6e 61 72 79 2c 20 76  ry: // binary, v
3a90: 61 72 62 69 6e 61 72 79 2c 20 76 61 72 62 69 6e  arbinary, varbin
3aa0: 61 72 79 28 6d 61 78 29 2c 20 69 6d 61 67 65 2c  ary(max), image,
3ab0: 20 74 69 6d 65 73 74 61 6d 70 2c 20 72 6f 77 76   timestamp, rowv
3ac0: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
3ad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3ae0: 20 62 6f 6f 6c 20 69 73 46 69 78 65 64 4c 65 6e   bool isFixedLen
3af0: 67 74 68 20 3d 20 6e 75 6c 6c 20 21 3d 20 66 61  gth = null != fa
3b00: 63 65 74 73 5b 22 46 69 78 65 64 4c 65 6e 67 74  cets["FixedLengt
3b10: 68 22 5d 2e 56 61 6c 75 65 20 26 26 20 28 62 6f  h"].Value && (bo
3b20: 6f 6c 29 66 61 63 65 74 73 5b 22 46 69 78 65 64  ol)facets["Fixed
3b30: 4c 65 6e 67 74 68 22 5d 2e 56 61 6c 75 65 3b 0d  Length"].Value;.
3b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 61 63  .            Fac
3b50: 65 74 20 66 20 3d 20 66 61 63 65 74 73 5b 22 4d  et f = facets["M
3b60: 61 78 4c 65 6e 67 74 68 22 5d 3b 0d 0a 0d 0a 20  axLength"];.... 
3b70: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
3b80: 69 73 4d 61 78 4c 65 6e 67 74 68 20 3d 20 66 2e  isMaxLength = f.
3b90: 49 73 55 6e 62 6f 75 6e 64 65 64 20 7c 7c 20 6e  IsUnbounded || n
3ba0: 75 6c 6c 20 3d 3d 20 66 2e 56 61 6c 75 65 20 7c  ull == f.Value |
3bb0: 7c 20 28 69 6e 74 29 66 2e 56 61 6c 75 65 20 3e  | (int)f.Value >
3bc0: 20 49 6e 74 33 32 2e 4d 61 78 56 61 6c 75 65 3b   Int32.MaxValue;
3bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
3be0: 74 20 6d 61 78 4c 65 6e 67 74 68 20 3d 20 21 69  t maxLength = !i
3bf0: 73 4d 61 78 4c 65 6e 67 74 68 20 3f 20 28 69 6e  sMaxLength ? (in
3c00: 74 29 66 2e 56 61 6c 75 65 20 3a 20 49 6e 74 33  t)f.Value : Int3
3c10: 32 2e 4d 69 6e 56 61 6c 75 65 3b 0d 0a 0d 0a 20  2.MinValue;.... 
3c20: 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 55             TypeU
3c30: 73 61 67 65 20 74 75 3b 0d 0a 20 20 20 20 20 20  sage tu;..      
3c40: 20 20 20 20 20 20 69 66 20 28 69 73 46 69 78 65        if (isFixe
3c50: 64 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20  dLength)..      
3c60: 20 20 20 20 20 20 20 20 74 75 20 3d 20 54 79 70          tu = Typ
3c70: 65 55 73 61 67 65 2e 43 72 65 61 74 65 42 69 6e  eUsage.CreateBin
3c80: 61 72 79 54 79 70 65 55 73 61 67 65 28 53 74 6f  aryTypeUsage(Sto
3c90: 72 65 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f 72  reTypeNameToStor
3ca0: 65 50 72 69 6d 69 74 69 76 65 54 79 70 65 5b 22  ePrimitiveType["
3cb0: 62 6c 6f 62 22 5d 2c 20 74 72 75 65 2c 20 6d 61  blob"], true, ma
3cc0: 78 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20  xLength);..     
3cd0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
3ce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3cf0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 73            if (is
3d00: 4d 61 78 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  MaxLength)..    
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 74 75 20 3d              tu =
3d20: 20 54 79 70 65 55 73 61 67 65 2e 43 72 65 61 74   TypeUsage.Creat
3d30: 65 42 69 6e 61 72 79 54 79 70 65 55 73 61 67 65  eBinaryTypeUsage
3d40: 28 53 74 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f  (StoreTypeNameTo
3d50: 53 74 6f 72 65 50 72 69 6d 69 74 69 76 65 54 79  StorePrimitiveTy
3d60: 70 65 5b 22 62 6c 6f 62 22 5d 2c 20 66 61 6c 73  pe["blob"], fals
3d70: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
3d80: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
3d90: 20 20 20 20 20 20 20 20 20 74 75 20 3d 20 54 79           tu = Ty
3da0: 70 65 55 73 61 67 65 2e 43 72 65 61 74 65 42 69  peUsage.CreateBi
3db0: 6e 61 72 79 54 79 70 65 55 73 61 67 65 28 53 74  naryTypeUsage(St
3dc0: 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f  oreTypeNameToSto
3dd0: 72 65 50 72 69 6d 69 74 69 76 65 54 79 70 65 5b  rePrimitiveType[
3de0: 22 62 6c 6f 62 22 5d 2c 20 66 61 6c 73 65 2c 20  "blob"], false, 
3df0: 6d 61 78 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  maxLength);..   
3e00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3e10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
3e20: 75 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  u;..          }.
3e30: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 50 72  .        case Pr
3e40: 69 6d 69 74 69 76 65 54 79 70 65 4b 69 6e 64 2e  imitiveTypeKind.
3e50: 53 74 72 69 6e 67 3a 20 2f 2f 20 63 68 61 72 2c  String: // char,
3e60: 20 6e 63 68 61 72 2c 20 76 61 72 63 68 61 72 2c   nchar, varchar,
3e70: 20 6e 76 61 72 63 68 61 72 2c 20 76 61 72 63 68   nvarchar, varch
3e80: 61 72 28 6d 61 78 29 2c 20 6e 76 61 72 63 68 61  ar(max), nvarcha
3e90: 72 28 6d 61 78 29 2c 20 6e 74 65 78 74 2c 20 74  r(max), ntext, t
3ea0: 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ext..          {
3eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
3ec0: 6f 6c 20 69 73 55 6e 69 63 6f 64 65 20 3d 20 6e  ol isUnicode = n
3ed0: 75 6c 6c 20 3d 3d 20 66 61 63 65 74 73 5b 22 55  ull == facets["U
3ee0: 6e 69 63 6f 64 65 22 5d 2e 56 61 6c 75 65 20 7c  nicode"].Value |
3ef0: 7c 20 28 62 6f 6f 6c 29 66 61 63 65 74 73 5b 22  | (bool)facets["
3f00: 55 6e 69 63 6f 64 65 22 5d 2e 56 61 6c 75 65 3b  Unicode"].Value;
3f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
3f20: 6f 6c 20 69 73 46 69 78 65 64 4c 65 6e 67 74 68  ol isFixedLength
3f30: 20 3d 20 6e 75 6c 6c 20 21 3d 20 66 61 63 65 74   = null != facet
3f40: 73 5b 22 46 69 78 65 64 4c 65 6e 67 74 68 22 5d  s["FixedLength"]
3f50: 2e 56 61 6c 75 65 20 26 26 20 28 62 6f 6f 6c 29  .Value && (bool)
3f60: 66 61 63 65 74 73 5b 22 46 69 78 65 64 4c 65 6e  facets["FixedLen
3f70: 67 74 68 22 5d 2e 56 61 6c 75 65 3b 0d 0a 20 20  gth"].Value;..  
3f80: 20 20 20 20 20 20 20 20 20 20 46 61 63 65 74 20            Facet 
3f90: 66 20 3d 20 66 61 63 65 74 73 5b 22 4d 61 78 4c  f = facets["MaxL
3fa0: 65 6e 67 74 68 22 5d 3b 0d 0a 20 20 20 20 20 20  ength"];..      
3fb0: 20 20 20 20 20 20 2f 2f 20 6d 61 78 6c 65 6e 20        // maxlen 
3fc0: 69 73 20 74 72 75 65 20 69 66 20 66 61 63 65 74  is true if facet
3fd0: 20 76 61 6c 75 65 20 69 73 20 75 6e 62 6f 75 6e   value is unboun
3fe0: 64 65 64 2c 20 74 68 65 20 76 61 6c 75 65 20 69  ded, the value i
3ff0: 73 20 62 69 67 67 65 72 20 74 68 61 6e 20 74 68  s bigger than th
4000: 65 20 6c 69 6d 69 74 65 64 20 73 74 72 69 6e 67  e limited string
4010: 20 73 69 7a 65 73 20 2a 6f 72 2a 20 74 68 65 20   sizes *or* the 
4020: 66 61 63 65 74 0d 0a 20 20 20 20 20 20 20 20 20  facet..         
4030: 20 20 20 2f 2f 20 76 61 6c 75 65 20 69 73 20 6e     // value is n
4040: 75 6c 6c 2e 20 74 68 69 73 20 69 73 20 6e 65 65  ull. this is nee
4050: 64 65 64 20 73 69 6e 63 65 20 66 75 6e 63 74 69  ded since functi
4060: 6f 6e 73 20 73 74 69 6c 6c 20 68 61 76 65 20 6d  ons still have m
4070: 61 78 6c 65 6e 67 74 68 20 66 61 63 65 74 20 76  axlength facet v
4080: 61 6c 75 65 20 61 73 20 6e 75 6c 6c 0d 0a 20 20  alue as null..  
4090: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69            bool i
40a0: 73 4d 61 78 4c 65 6e 67 74 68 20 3d 20 66 2e 49  sMaxLength = f.I
40b0: 73 55 6e 62 6f 75 6e 64 65 64 20 7c 7c 20 6e 75  sUnbounded || nu
40c0: 6c 6c 20 3d 3d 20 66 2e 56 61 6c 75 65 20 7c 7c  ll == f.Value ||
40d0: 20 28 69 6e 74 29 66 2e 56 61 6c 75 65 20 3e 20   (int)f.Value > 
40e0: 28 69 73 55 6e 69 63 6f 64 65 20 3f 20 49 6e 74  (isUnicode ? Int
40f0: 33 32 2e 4d 61 78 56 61 6c 75 65 20 3a 20 49 6e  32.MaxValue : In
4100: 74 33 32 2e 4d 61 78 56 61 6c 75 65 29 3b 0d 0a  t32.MaxValue);..
4110: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
4120: 6d 61 78 4c 65 6e 67 74 68 20 3d 20 21 69 73 4d  maxLength = !isM
4130: 61 78 4c 65 6e 67 74 68 20 3f 20 28 69 6e 74 29  axLength ? (int)
4140: 66 2e 56 61 6c 75 65 20 3a 20 49 6e 74 33 32 2e  f.Value : Int32.
4150: 4d 69 6e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  MinValue;....   
4160: 20 20 20 20 20 20 20 20 20 54 79 70 65 55 73 61           TypeUsa
4170: 67 65 20 74 75 3b 0d 0a 0d 0a 20 20 20 20 20 20  ge tu;....      
4180: 20 20 20 20 20 20 69 66 20 28 69 73 55 6e 69 63        if (isUnic
4190: 6f 64 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ode)..          
41a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
41b0: 20 20 20 69 66 20 28 69 73 46 69 78 65 64 4c 65     if (isFixedLe
41c0: 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20  ngth)..         
41d0: 20 20 20 20 20 20 20 74 75 20 3d 20 54 79 70 65         tu = Type
41e0: 55 73 61 67 65 2e 43 72 65 61 74 65 53 74 72 69  Usage.CreateStri
41f0: 6e 67 54 79 70 65 55 73 61 67 65 28 53 74 6f 72  ngTypeUsage(Stor
4200: 65 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f 72 65  eTypeNameToStore
4210: 50 72 69 6d 69 74 69 76 65 54 79 70 65 5b 22 6e  PrimitiveType["n
4220: 63 68 61 72 22 5d 2c 20 74 72 75 65 2c 20 74 72  char"], true, tr
4230: 75 65 2c 20 6d 61 78 4c 65 6e 67 74 68 29 3b 0d  ue, maxLength);.
4240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65  .              e
4250: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
4260: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4270: 20 20 20 20 20 20 69 66 20 28 69 73 4d 61 78 4c        if (isMaxL
4280: 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20  ength)..        
4290: 20 20 20 20 20 20 20 20 20 20 74 75 20 3d 20 54            tu = T
42a0: 79 70 65 55 73 61 67 65 2e 43 72 65 61 74 65 53  ypeUsage.CreateS
42b0: 74 72 69 6e 67 54 79 70 65 55 73 61 67 65 28 53  tringTypeUsage(S
42c0: 74 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f 53 74  toreTypeNameToSt
42d0: 6f 72 65 50 72 69 6d 69 74 69 76 65 54 79 70 65  orePrimitiveType
42e0: 5b 22 6e 76 61 72 63 68 61 72 22 5d 2c 20 74 72  ["nvarchar"], tr
42f0: 75 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ue, false);..   
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
4310: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
4320: 20 20 20 20 20 74 75 20 3d 20 54 79 70 65 55 73       tu = TypeUs
4330: 61 67 65 2e 43 72 65 61 74 65 53 74 72 69 6e 67  age.CreateString
4340: 54 79 70 65 55 73 61 67 65 28 53 74 6f 72 65 54  TypeUsage(StoreT
4350: 79 70 65 4e 61 6d 65 54 6f 53 74 6f 72 65 50 72  ypeNameToStorePr
4360: 69 6d 69 74 69 76 65 54 79 70 65 5b 22 6e 76 61  imitiveType["nva
4370: 72 63 68 61 72 22 5d 2c 20 74 72 75 65 2c 20 66  rchar"], true, f
4380: 61 6c 73 65 2c 20 6d 61 78 4c 65 6e 67 74 68 29  alse, maxLength)
4390: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
43a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
43b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
43c0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
43d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
43e0: 20 20 69 66 20 28 69 73 46 69 78 65 64 4c 65 6e    if (isFixedLen
43f0: 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gth)..          
4400: 20 20 20 20 20 20 74 75 20 3d 20 54 79 70 65 55        tu = TypeU
4410: 73 61 67 65 2e 43 72 65 61 74 65 53 74 72 69 6e  sage.CreateStrin
4420: 67 54 79 70 65 55 73 61 67 65 28 53 74 6f 72 65  gTypeUsage(Store
4430: 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f 72 65 50  TypeNameToStoreP
4440: 72 69 6d 69 74 69 76 65 54 79 70 65 5b 22 63 68  rimitiveType["ch
4450: 61 72 22 5d 2c 20 66 61 6c 73 65 2c 20 74 72 75  ar"], false, tru
4460: 65 2c 20 6d 61 78 4c 65 6e 67 74 68 29 3b 0d 0a  e, maxLength);..
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
4480: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
4490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
44a0: 20 20 20 20 20 69 66 20 28 69 73 4d 61 78 4c 65       if (isMaxLe
44b0: 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20  ngth)..         
44c0: 20 20 20 20 20 20 20 20 20 74 75 20 3d 20 54 79           tu = Ty
44d0: 70 65 55 73 61 67 65 2e 43 72 65 61 74 65 53 74  peUsage.CreateSt
44e0: 72 69 6e 67 54 79 70 65 55 73 61 67 65 28 53 74  ringTypeUsage(St
44f0: 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f  oreTypeNameToSto
4500: 72 65 50 72 69 6d 69 74 69 76 65 54 79 70 65 5b  rePrimitiveType[
4510: 22 76 61 72 63 68 61 72 22 5d 2c 20 66 61 6c 73  "varchar"], fals
4520: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
4530: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
4540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4550: 20 20 20 20 74 75 20 3d 20 54 79 70 65 55 73 61      tu = TypeUsa
4560: 67 65 2e 43 72 65 61 74 65 53 74 72 69 6e 67 54  ge.CreateStringT
4570: 79 70 65 55 73 61 67 65 28 53 74 6f 72 65 54 79  ypeUsage(StoreTy
4580: 70 65 4e 61 6d 65 54 6f 53 74 6f 72 65 50 72 69  peNameToStorePri
4590: 6d 69 74 69 76 65 54 79 70 65 5b 22 76 61 72 63  mitiveType["varc
45a0: 68 61 72 22 5d 2c 20 66 61 6c 73 65 2c 20 66 61  har"], false, fa
45b0: 6c 73 65 2c 20 6d 61 78 4c 65 6e 67 74 68 29 3b  lse, maxLength);
45c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
45e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
45f0: 74 75 72 6e 20 74 75 3b 0d 0a 20 20 20 20 20 20  turn tu;..      
4600: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63      }..        c
4610: 61 73 65 20 50 72 69 6d 69 74 69 76 65 54 79 70  ase PrimitiveTyp
4620: 65 4b 69 6e 64 2e 44 61 74 65 54 69 6d 65 3a 20  eKind.DateTime: 
4630: 2f 2f 20 64 61 74 65 74 69 6d 65 2c 20 73 6d 61  // datetime, sma
4640: 6c 6c 64 61 74 65 74 69 6d 65 0d 0a 20 20 20 20  lldatetime..    
4650: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 79 70        return Typ
4660: 65 55 73 61 67 65 2e 43 72 65 61 74 65 44 65 66  eUsage.CreateDef
4670: 61 75 6c 74 54 79 70 65 55 73 61 67 65 28 53 74  aultTypeUsage(St
4680: 6f 72 65 54 79 70 65 4e 61 6d 65 54 6f 53 74 6f  oreTypeNameToSto
4690: 72 65 50 72 69 6d 69 74 69 76 65 54 79 70 65 5b  rePrimitiveType[
46a0: 22 64 61 74 65 74 69 6d 65 22 5d 29 3b 0d 0a 20  "datetime"]);.. 
46b0: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
46c0: 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77  .          throw
46d0: 20 6e 65 77 20 4e 6f 74 53 75 70 70 6f 72 74 65   new NotSupporte
46e0: 64 45 78 63 65 70 74 69 6f 6e 28 53 74 72 69 6e  dException(Strin
46f0: 67 2e 46 6f 72 6d 61 74 28 22 54 68 65 72 65 20  g.Format("There 
4700: 69 73 20 6e 6f 20 73 74 6f 72 65 20 74 79 70 65  is no store type
4710: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
4720: 6f 20 74 68 65 20 45 44 4d 20 74 79 70 65 20 27  o the EDM type '
4730: 7b 30 7d 27 20 6f 66 20 70 72 69 6d 69 74 69 76  {0}' of primitiv
4740: 65 20 74 79 70 65 20 27 7b 31 7d 27 2e 22 2c 20  e type '{1}'.", 
4750: 65 64 6d 54 79 70 65 2c 20 70 72 69 6d 69 74 69  edmType, primiti
4760: 76 65 54 79 70 65 2e 50 72 69 6d 69 74 69 76 65  veType.Primitive
4770: 54 79 70 65 4b 69 6e 64 29 29 3b 0d 0a 20 20 20  TypeKind));..   
4780: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4790: 20 20 20 70 72 69 76 61 74 65 20 58 6d 6c 52 65     private XmlRe
47a0: 61 64 65 72 20 47 65 74 53 74 6f 72 65 53 63 68  ader GetStoreSch
47b0: 65 6d 61 4d 61 70 70 69 6e 67 28 29 0d 0a 20 20  emaMapping()..  
47c0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
47d0: 6e 20 47 65 74 58 6d 6c 52 65 73 6f 75 72 63 65  n GetXmlResource
47e0: 28 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  ("System.Data.SQ
47f0: 4c 69 74 65 2e 53 51 4c 69 74 65 50 72 6f 76 69  Lite.SQLiteProvi
4800: 64 65 72 53 65 72 76 69 63 65 73 2e 53 74 6f 72  derServices.Stor
4810: 65 53 63 68 65 6d 61 4d 61 70 70 69 6e 67 2e 6d  eSchemaMapping.m
4820: 73 6c 22 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  sl");..    }....
4830: 20 20 20 20 70 72 69 76 61 74 65 20 58 6d 6c 52      private XmlR
4840: 65 61 64 65 72 20 47 65 74 53 74 6f 72 65 53 63  eader GetStoreSc
4850: 68 65 6d 61 44 65 73 63 72 69 70 74 69 6f 6e 28  hemaDescription(
4860: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
4870: 72 65 74 75 72 6e 20 47 65 74 58 6d 6c 52 65 73  return GetXmlRes
4880: 6f 75 72 63 65 28 22 53 79 73 74 65 6d 2e 44 61  ource("System.Da
4890: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
48a0: 50 72 6f 76 69 64 65 72 53 65 72 76 69 63 65 73  ProviderServices
48b0: 2e 53 74 6f 72 65 53 63 68 65 6d 61 44 65 66 69  .StoreSchemaDefi
48c0: 6e 69 74 69 6f 6e 2e 73 73 64 6c 22 29 3b 0d 0a  nition.ssdl");..
48d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
48e0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 58 6d 6c  ernal static Xml
48f0: 52 65 61 64 65 72 20 47 65 74 58 6d 6c 52 65 73  Reader GetXmlRes
4900: 6f 75 72 63 65 28 73 74 72 69 6e 67 20 72 65 73  ource(string res
4910: 6f 75 72 63 65 4e 61 6d 65 29 0d 0a 20 20 20 20  ourceName)..    
4920: 7b 0d 0a 20 20 20 20 20 20 41 73 73 65 6d 62 6c  {..      Assembl
4930: 79 20 65 78 65 63 75 74 69 6e 67 41 73 73 65 6d  y executingAssem
4940: 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47  bly = Assembly.G
4950: 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d  etExecutingAssem
4960: 62 6c 79 28 29 3b 0d 0a 20 20 20 20 20 20 53 74  bly();..      St
4970: 72 65 61 6d 20 73 74 72 65 61 6d 20 3d 20 65 78  ream stream = ex
4980: 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 2e  ecutingAssembly.
4990: 47 65 74 4d 61 6e 69 66 65 73 74 52 65 73 6f 75  GetManifestResou
49a0: 72 63 65 53 74 72 65 61 6d 28 72 65 73 6f 75 72  rceStream(resour
49b0: 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ceName);..      
49c0: 72 65 74 75 72 6e 20 58 6d 6c 52 65 61 64 65 72  return XmlReader
49d0: 2e 43 72 65 61 74 65 28 73 74 72 65 61 6d 29 3b  .Create(stream);
49e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
49f0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63 6c  rivate static cl
4a00: 61 73 73 20 54 79 70 65 48 65 6c 70 65 72 73 0d  ass TypeHelpers.
4a10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75  .    {..      pu
4a20: 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c  blic static bool
4a30: 20 54 72 79 47 65 74 50 72 65 63 69 73 69 6f 6e   TryGetPrecision
4a40: 28 54 79 70 65 55 73 61 67 65 20 74 75 2c 20 6f  (TypeUsage tu, o
4a50: 75 74 20 62 79 74 65 20 70 72 65 63 69 73 69 6f  ut byte precisio
4a60: 6e 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  n)..      {..   
4a70: 20 20 20 20 20 46 61 63 65 74 20 66 3b 0d 0a 0d       Facet f;...
4a80: 0a 20 20 20 20 20 20 20 20 70 72 65 63 69 73 69  .        precisi
4a90: 6f 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  on = 0;..       
4aa0: 20 69 66 20 28 74 75 2e 46 61 63 65 74 73 2e 54   if (tu.Facets.T
4ab0: 72 79 47 65 74 56 61 6c 75 65 28 22 50 72 65 63  ryGetValue("Prec
4ac0: 69 73 69 6f 6e 22 2c 20 66 61 6c 73 65 2c 20 6f  ision", false, o
4ad0: 75 74 20 66 29 29 0d 0a 20 20 20 20 20 20 20 20  ut f))..        
4ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
4af0: 28 21 66 2e 49 73 55 6e 62 6f 75 6e 64 65 64 20  (!f.IsUnbounded 
4b00: 26 26 20 66 2e 56 61 6c 75 65 20 21 3d 20 6e 75  && f.Value != nu
4b10: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
4b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
4b30: 65 63 69 73 69 6f 6e 20 3d 20 28 62 79 74 65 29  ecision = (byte)
4b40: 66 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  f.Value;..      
4b50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
4b60: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e;..          }.
4b70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4b80: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
4b90: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
4ba0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
4bb0: 63 20 62 6f 6f 6c 20 54 72 79 47 65 74 4d 61 78  c bool TryGetMax
4bc0: 4c 65 6e 67 74 68 28 54 79 70 65 55 73 61 67 65  Length(TypeUsage
4bd0: 20 74 75 2c 20 6f 75 74 20 69 6e 74 20 6d 61 78   tu, out int max
4be0: 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 7b  Length)..      {
4bf0: 0d 0a 20 20 20 20 20 20 20 20 46 61 63 65 74 20  ..        Facet 
4c00: 66 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d 61  f;....        ma
4c10: 78 4c 65 6e 67 74 68 20 3d 20 30 3b 0d 0a 20 20  xLength = 0;..  
4c20: 20 20 20 20 20 20 69 66 20 28 74 75 2e 46 61 63        if (tu.Fac
4c30: 65 74 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  ets.TryGetValue(
4c40: 22 4d 61 78 4c 65 6e 67 74 68 22 2c 20 66 61 6c  "MaxLength", fal
4c50: 73 65 2c 20 6f 75 74 20 66 29 29 0d 0a 20 20 20  se, out f))..   
4c60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4c70: 20 20 69 66 20 28 21 66 2e 49 73 55 6e 62 6f 75    if (!f.IsUnbou
4c80: 6e 64 65 64 20 26 26 20 66 2e 56 61 6c 75 65 20  nded && f.Value 
4c90: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4ca0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4cb0: 20 20 20 6d 61 78 4c 65 6e 67 74 68 20 3d 20 28     maxLength = (
4cc0: 69 6e 74 29 66 2e 56 61 6c 75 65 3b 0d 0a 20 20  int)f.Value;..  
4cd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4ce0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
4cf0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
4d00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
4d10: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  alse;..      }..
4d20: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73  ..      public s
4d30: 74 61 74 69 63 20 62 6f 6f 6c 20 54 72 79 47 65  tatic bool TryGe
4d40: 74 53 63 61 6c 65 28 54 79 70 65 55 73 61 67 65  tScale(TypeUsage
4d50: 20 74 75 2c 20 6f 75 74 20 62 79 74 65 20 73 63   tu, out byte sc
4d60: 61 6c 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ale)..      {.. 
4d70: 20 20 20 20 20 20 20 46 61 63 65 74 20 66 3b 0d         Facet f;.
4d80: 0a 0d 0a 20 20 20 20 20 20 20 20 73 63 61 6c 65  ...        scale
4d90: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 69   = 0;..        i
4da0: 66 20 28 74 75 2e 46 61 63 65 74 73 2e 54 72 79  f (tu.Facets.Try
4db0: 47 65 74 56 61 6c 75 65 28 22 53 63 61 6c 65 22  GetValue("Scale"
4dc0: 2c 20 66 61 6c 73 65 2c 20 6f 75 74 20 66 29 29  , false, out f))
4dd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4de0: 20 20 20 20 20 20 20 69 66 20 28 21 66 2e 49 73         if (!f.Is
4df0: 55 6e 62 6f 75 6e 64 65 64 20 26 26 20 66 2e 56  Unbounded && f.V
4e00: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  alue != null).. 
4e10: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4e20: 20 20 20 20 20 20 20 20 73 63 61 6c 65 20 3d 20          scale = 
4e30: 28 62 79 74 65 29 66 2e 56 61 6c 75 65 3b 0d 0a  (byte)f.Value;..
4e40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4e50: 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
4e60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
4e70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4e80: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 7d   false;..      }
4e90: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d     ..    }..  }..}