System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 2655e9d89a9ccdee36cf9a7b3453a84289075662:


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 4a 6f   * Written by Jo
0080: 65 20 4d 69 73 74 61 63 68 6b 69 6e 20 28 6a 6f  e Mistachkin (jo
0090: 65 40 6d 69 73 74 61 63 68 6b 69 6e 2e 63 6f 6d  e@mistachkin.com
00a0: 29 0d 0a 20 2a 0d 0a 20 2a 20 52 65 6c 65 61 73  ).. *.. * Releas
00b0: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00c0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at 
00d0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00e0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
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 2f 0d 0a 0d 0a 75 73  *********/....us
0120: 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61  ing System.Globa
0130: 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 0d 0a 23 72 65  lization;....#re
0140: 67 69 6f 6e 20 4e 6f 6e 2d 47 65 6e 65 72 69 63  gion Non-Generic
0150: 20 43 6c 61 73 73 65 73 0d 0a 6e 61 6d 65 73 70   Classes..namesp
0160: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
0170: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23  SQLite..{..    #
0180: 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 6f 64  region SQLiteMod
0190: 75 6c 65 43 6f 6d 6d 6f 6e 20 43 6c 61 73 73 0d  uleCommon Class.
01a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
01b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
01c0: 20 63 6c 61 73 73 20 63 6f 6e 74 61 69 6e 73 20   class contains 
01d0: 73 6f 6d 65 20 76 69 72 74 75 61 6c 20 6d 65 74  some virtual met
01e0: 68 6f 64 73 20 74 68 61 74 20 6d 61 79 20 62 65  hods that may be
01f0: 20 75 73 65 66 75 6c 20 66 6f 72 20 6f 74 68 65   useful for othe
0200: 72 0d 0a 20 20 20 20 2f 2f 2f 20 76 69 72 74 75  r..    /// virtu
0210: 61 6c 20 74 61 62 6c 65 20 63 6c 61 73 73 65 73  al table classes
0220: 2e 20 20 49 74 20 73 70 65 63 69 66 69 63 61 6c  .  It specifical
0230: 6c 79 20 64 6f 65 73 20 4e 4f 54 20 69 6d 70 6c  ly does NOT impl
0240: 65 6d 65 6e 74 20 61 6e 79 20 6f 66 20 74 68 65  ement any of the
0250: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63  ..    /// <see c
0260: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
0270: 67 65 64 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e  gedModule" /> in
0280: 74 65 72 66 61 63 65 20 6d 65 74 68 6f 64 73 2e  terface methods.
0290: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
02a0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
02b0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 6f 64   class SQLiteMod
02c0: 75 6c 65 43 6f 6d 6d 6f 6e 20 3a 20 53 51 4c 69  uleCommon : SQLi
02d0: 74 65 4d 6f 64 75 6c 65 4e 6f 6f 70 20 2f 2a 20  teModuleNoop /* 
02e0: 4e 4f 54 20 53 45 41 4c 45 44 20 2a 2f 0d 0a 20  NOT SEALED */.. 
02f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
0300: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
0310: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..       
0320: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0330: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
0340: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
0350: 74 65 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 64  tement used to d
0360: 65 63 6c 61 72 65 20 74 68 65 20 73 63 68 65 6d  eclare the schem
0370: 61 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20  a for the..     
0380: 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
0390: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
03a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
03b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
03c0: 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73  tatic readonly s
03d0: 74 72 69 6e 67 20 64 65 63 6c 61 72 65 53 71 6c  tring declareSql
03e0: 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
03f0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
0400: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
0420: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
0430: 6e 74 43 75 6c 74 75 72 65 2c 20 22 43 52 45 41  ntCulture, "CREA
0440: 54 45 20 54 41 42 4c 45 20 7b 30 7d 28 78 29 3b  TE TABLE {0}(x);
0450: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
0460: 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
0470: 65 4d 6f 64 75 6c 65 43 6f 6d 6d 6f 6e 29 2e 4e  eModuleCommon).N
0480: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 23  ame);..        #
0490: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
04a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
04b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
04f0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0500: 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20  Private Data..  
0510: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
0520: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
0530: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 64 69 66   Non-zero if dif
0540: 66 65 72 65 6e 74 20 6f 62 6a 65 63 74 20 69 6e  ferent object in
0550: 73 74 61 6e 63 65 73 20 77 69 74 68 20 74 68 65  stances with the
0560: 20 73 61 6d 65 20 76 61 6c 75 65 20 73 68 6f 75   same value shou
0570: 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ld..        /// 
0580: 67 65 6e 65 72 61 74 65 20 64 69 66 66 65 72 65  generate differe
0590: 6e 74 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65  nt row identifie
05a0: 72 73 2c 20 77 68 65 72 65 20 61 70 70 6c 69 63  rs, where applic
05b0: 61 62 6c 65 2e 20 20 54 68 69 73 20 68 61 73 20  able.  This has 
05c0: 6e 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  no..        /// 
05d0: 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 2e 4e  effect on the .N
05e0: 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65  ET Compact Frame
05f0: 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f  work...        /
0600: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0610: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
0620: 6f 6f 6c 20 6f 62 6a 65 63 74 49 64 65 6e 74 69  ool objectIdenti
0630: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ty;..        #en
0640: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
0650: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
06a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
06b0: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
06c0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
06d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
06e0: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
06f0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
0700: 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
0710: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
0720: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
0730: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61   <param name="na
0740: 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  me">..        //
0750: 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
0760: 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 69 73 20  e module.  This 
0770: 70 61 72 61 6d 65 74 65 72 20 63 61 6e 6e 6f 74  parameter cannot
0780: 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20   be null...     
0790: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
07a0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
07b0: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 43 6f 6d 6d  SQLiteModuleComm
07c0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
07d0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20   string name..  
07e0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
07f0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
0800: 6e 61 6d 65 2c 20 66 61 6c 73 65 29 0d 0a 20 20  name, false)..  
0810: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0820: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
0830: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
0840: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0890: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
08a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
08b0: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
08c0: 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
08d0: 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20  f this class... 
08e0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
08f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
0900: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
0910: 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  name">..        
0920: 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
0930: 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 69  the module.  Thi
0940: 73 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 6e  s parameter cann
0950: 6f 74 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20  ot be null...   
0960: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
0970: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
0980: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 62 6a 65  param name="obje
0990: 63 74 49 64 65 6e 74 69 74 79 22 3e 0d 0a 20 20  ctIdentity">..  
09a0: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
09b0: 72 6f 20 69 66 20 64 69 66 66 65 72 65 6e 74 20  ro if different 
09c0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73  object instances
09d0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 76   with the same v
09e0: 61 6c 75 65 20 73 68 6f 75 6c 64 0d 0a 20 20 20  alue should..   
09f0: 20 20 20 20 20 2f 2f 2f 20 67 65 6e 65 72 61 74       /// generat
0a00: 65 20 64 69 66 66 65 72 65 6e 74 20 72 6f 77 20  e different row 
0a10: 69 64 65 6e 74 69 66 69 65 72 73 2c 20 77 68 65  identifiers, whe
0a20: 72 65 20 61 70 70 6c 69 63 61 62 6c 65 2e 20 20  re applicable.  
0a30: 54 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  This..        //
0a40: 2f 20 70 61 72 61 6d 65 74 65 72 20 68 61 73 20  / parameter has 
0a50: 6e 6f 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65  no effect on the
0a60: 20 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72   .NET Compact Fr
0a70: 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...      
0a80: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0a90: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
0aa0: 51 4c 69 74 65 4d 6f 64 75 6c 65 43 6f 6d 6d 6f  QLiteModuleCommo
0ab0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
0ac0: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
0ad0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f            bool o
0ae0: 62 6a 65 63 74 49 64 65 6e 74 69 74 79 0d 0a 20  bjectIdentity.. 
0af0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
0b00: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
0b10: 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  (name)..        
0b20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
0b30: 68 69 73 2e 6f 62 6a 65 63 74 49 64 65 6e 74 69  his.objectIdenti
0b40: 74 79 20 3d 20 6f 62 6a 65 63 74 49 64 65 6e 74  ty = objectIdent
0b50: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ity;..        }.
0b60: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
0b70: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
0b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0bd0: 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 74 65 63    #region Protec
0be0: 74 65 64 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ted Methods..   
0bf0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
0c00: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
0c10: 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 53  Determines the S
0c20: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  QL statement use
0c30: 64 20 74 6f 20 64 65 63 6c 61 72 65 20 74 68 65  d to declare the
0c40: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
0c50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
0c60: 73 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64 20  s method should 
0c70: 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 69 6e  be overridden in
0c80: 20 64 65 72 69 76 65 64 20 63 6c 61 73 73 65 73   derived classes
0c90: 20 69 66 20 74 68 65 79 20 72 65 71 75 69 72 65   if they require
0ca0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 20  ..        /// a 
0cb0: 63 75 73 74 6f 6d 20 76 69 72 74 75 61 6c 20 74  custom virtual t
0cc0: 61 62 6c 65 20 73 63 68 65 6d 61 2e 0d 0a 20 20  able schema...  
0cd0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
0ce0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
0cf0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
0d00: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c       /// The SQL
0d10: 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
0d20: 74 6f 20 64 65 63 6c 61 72 65 20 74 68 65 20 76  to declare the v
0d30: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2d 4f 52  irtual table -OR
0d40: 2d 20 6e 75 6c 6c 20 69 66 20 69 74 0d 0a 20 20  - null if it..  
0d50: 20 20 20 20 20 20 2f 2f 2f 20 63 61 6e 6e 6f 74        /// cannot
0d60: 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d   be determined..
0d70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
0d80: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
0d90: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
0da0: 61 6c 20 73 74 72 69 6e 67 20 47 65 74 53 71 6c  al string GetSql
0db0: 46 6f 72 44 65 63 6c 61 72 65 54 61 62 6c 65 28  ForDeclareTable(
0dc0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
0dd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0de0: 20 64 65 63 6c 61 72 65 53 71 6c 3b 0d 0a 20 20   declareSql;..  
0df0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0e00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0e50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
0e60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
0e70: 20 53 65 74 73 20 74 68 65 20 74 61 62 6c 65 20   Sets the table 
0e80: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 6f  error message to
0e90: 20 6f 6e 65 20 74 68 61 74 20 69 6e 64 69 63 61   one that indica
0ea0: 74 65 73 20 74 68 65 20 76 69 72 74 75 61 6c 0d  tes the virtual.
0eb0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62  .        /// tab
0ec0: 6c 65 20 63 75 72 73 6f 72 20 69 73 20 6f 66 20  le cursor is of 
0ed0: 74 68 65 20 77 72 6f 6e 67 20 74 79 70 65 2e 0d  the wrong type..
0ee0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
0ef0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
0f00: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0f10: 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  ="cursor">..    
0f20: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
0f30: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
0f40: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22  tualTableCursor"
0f50: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
0f60: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
0f70: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
0f80: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0f90: 61 6d 65 3d 22 74 79 70 65 22 3e 0d 0a 20 20 20  ame="type">..   
0fa0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
0fb0: 65 20 63 72 65 66 3d 22 54 79 70 65 22 20 2f 3e  e cref="Type" />
0fc0: 20 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61   that the virtua
0fd0: 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 73  l table cursor s
0fe0: 68 6f 75 6c 64 20 62 65 2e 0d 0a 20 20 20 20 20  hould be...     
0ff0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1000: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1010: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1020: 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 6f 66  /// The value of
1030: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1040: 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f  teErrorCode.Erro
1050: 72 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  r" />...        
1060: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1070: 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
1080: 64 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65  d virtual SQLite
1090: 45 72 72 6f 72 43 6f 64 65 20 43 75 72 73 6f 72  ErrorCode Cursor
10a0: 54 79 70 65 4d 69 73 6d 61 74 63 68 45 72 72 6f  TypeMismatchErro
10b0: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
10c0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
10d0: 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 2c  leCursor cursor,
10e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79  ..            Ty
10f0: 70 65 20 74 79 70 65 0d 0a 20 20 20 20 20 20 20  pe type..       
1100: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1110: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1120: 66 20 28 74 79 70 65 20 21 3d 20 6e 75 6c 6c 29  f (type != null)
1130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1150: 20 53 65 74 43 75 72 73 6f 72 45 72 72 6f 72 28   SetCursorError(
1160: 63 75 72 73 6f 72 2c 20 48 65 6c 70 65 72 4d 65  cursor, HelperMe
1170: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
1180: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1190: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
11a0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
11b0: 75 72 65 2c 20 22 6e 6f 74 20 61 20 5c 22 7b 30  ure, "not a \"{0
11c0: 7d 5c 22 20 63 75 72 73 6f 72 22 2c 0d 0a 20 20  }\" cursor",..  
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e0: 20 20 74 79 70 65 29 29 3b 0d 0a 20 20 20 20 20    type));..     
11f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1200: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1210: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1220: 20 20 20 20 20 20 20 20 20 20 20 53 65 74 43 75             SetCu
1230: 72 73 6f 72 45 72 72 6f 72 28 63 75 72 73 6f 72  rsorError(cursor
1240: 2c 20 22 63 75 72 73 6f 72 20 74 79 70 65 20 6d  , "cursor type m
1250: 69 73 6d 61 74 63 68 22 29 3b 0d 0a 20 20 20 20  ismatch");..    
1260: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1270: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1280: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
1290: 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
12a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1300: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1310: 20 20 20 20 20 20 20 2f 2f 2f 20 44 65 74 65 72         /// Deter
1320: 6d 69 6e 65 73 20 74 68 65 20 73 74 72 69 6e 67  mines the string
1330: 20 74 6f 20 72 65 74 75 72 6e 20 61 73 20 74 68   to return as th
1340: 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 66  e column value f
1350: 6f 72 20 74 68 65 20 6f 62 6a 65 63 74 0d 0a 20  or the object.. 
1360: 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
1370: 6e 63 65 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  nce value...    
1380: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1390: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
13a0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72  <param name="cur
13b0: 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
13c0: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
13d0: 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
13e0: 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f  ableCursor" /> o
13f0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a  bject instance..
1400: 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
1410: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1420: 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1430: 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  d virtual table 
1440: 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20  cursor to be..  
1450: 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d        /// used..
1460: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1470: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1480: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1490: 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
14a0: 20 2f 2f 2f 20 54 68 65 20 6f 62 6a 65 63 74 20   /// The object 
14b0: 69 6e 73 74 61 6e 63 65 20 74 6f 20 72 65 74 75  instance to retu
14c0: 72 6e 20 61 20 73 74 72 69 6e 67 20 72 65 70 72  rn a string repr
14d0: 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 2e 0d  esentation for..
14e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14f0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1500: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1510: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74        /// The st
1520: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
1530: 69 6f 6e 20 6f 66 20 74 68 65 20 73 70 65 63 69  ion of the speci
1540: 66 69 65 64 20 6f 62 6a 65 63 74 20 69 6e 73 74  fied object inst
1550: 61 6e 63 65 20 6f 72 20 6e 75 6c 6c 0d 0a 20 20  ance or null..  
1560: 20 20 20 20 20 20 2f 2f 2f 20 75 70 6f 6e 20 66        /// upon f
1570: 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ailure...       
1580: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1590: 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
15a0: 65 64 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ed virtual strin
15b0: 67 20 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  g GetStringFromO
15c0: 62 6a 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  bject(..        
15d0: 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
15e0: 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
15f0: 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
1600: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
1610: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1620: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1630: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1640: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1650: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1660: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
1670: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1680: 69 73 20 73 74 72 69 6e 67 29 0d 0a 20 20 20 20  is string)..    
1690: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16a0: 72 6e 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65  rn (string)value
16b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16c0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 54 6f   return value.To
16d0: 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20  String();..     
16e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1750: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
1760: 6e 73 74 72 75 63 74 73 20 61 6e 20 3c 73 65 65  nstructs an <see
1770: 20 63 72 65 66 3d 22 49 6e 74 36 34 22 20 2f 3e   cref="Int64" />
1780: 20 75 6e 69 71 75 65 20 72 6f 77 20 69 64 65 6e   unique row iden
1790: 74 69 66 69 65 72 20 66 72 6f 6d 20 74 77 6f 0d  tifier from two.
17a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
17b0: 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f  e cref="Int32" /
17c0: 3e 20 76 61 6c 75 65 73 2e 20 20 54 68 65 20 66  > values.  The f
17d0: 69 72 73 74 20 3c 73 65 65 20 63 72 65 66 3d 22  irst <see cref="
17e0: 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 0d  Int32" /> value.
17f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 75 73  .        /// mus
1800: 74 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 72 6f  t contain the ro
1810: 77 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  w sequence numbe
1820: 72 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  r for the curren
1830: 74 20 72 6f 77 20 61 6e 64 20 74 68 65 0d 0a 20  t row and the.. 
1840: 20 20 20 20 20 20 20 2f 2f 2f 20 73 65 63 6f 6e         /// secon
1850: 64 20 76 61 6c 75 65 20 6d 75 73 74 20 63 6f 6e  d value must con
1860: 74 61 69 6e 20 74 68 65 20 68 61 73 68 20 63 6f  tain the hash co
1870: 64 65 20 6f 66 20 74 68 65 20 6b 65 79 20 63 6f  de of the key co
1880: 6c 75 6d 6e 20 76 61 6c 75 65 0d 0a 20 20 20 20  lumn value..    
1890: 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74 68 65 20      /// for the 
18a0: 63 75 72 72 65 6e 74 20 72 6f 77 2e 0d 0a 20 20  current row...  
18b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
18c0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
18d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
18e0: 6f 77 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20  owIndex">..     
18f0: 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67     /// The integ
1900: 65 72 20 72 6f 77 20 73 65 71 75 65 6e 63 65 20  er row sequence 
1910: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 63  number for the c
1920: 75 72 72 65 6e 74 20 72 6f 77 2e 0d 0a 20 20 20  urrent row...   
1930: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1940: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1950: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 68 61 73 68  param name="hash
1960: 43 6f 64 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  Code">..        
1970: 2f 2f 2f 20 54 68 65 20 68 61 73 68 20 63 6f 64  /// The hash cod
1980: 65 20 6f 66 20 74 68 65 20 6b 65 79 20 63 6f 6c  e of the key col
1990: 75 6d 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68  umn value for th
19a0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 0d 0a  e current row...
19b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
19c0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
19d0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
19e0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 75 6e 69       /// The uni
19f0: 71 75 65 20 72 6f 77 20 69 64 65 6e 74 69 66 69  que row identifi
1a00: 65 72 20 6f 72 20 7a 65 72 6f 20 75 70 6f 6e 20  er or zero upon 
1a10: 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20  failure...      
1a20: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1a30: 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
1a40: 74 65 64 20 76 69 72 74 75 61 6c 20 6c 6f 6e 67  ted virtual long
1a50: 20 4d 61 6b 65 52 6f 77 49 64 28 0d 0a 20 20 20   MakeRowId(..   
1a60: 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 6f 77           int row
1a70: 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20 20  Index,..        
1a80: 20 20 20 20 69 6e 74 20 68 61 73 68 43 6f 64 65      int hashCode
1a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1aa0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1ab0: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 72 65 73          long res
1ac0: 75 6c 74 20 3d 20 72 6f 77 49 6e 64 65 78 3b 0d  ult = rowIndex;.
1ad0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1ae0: 65 73 75 6c 74 20 3c 3c 3d 20 33 32 3b 20 2f 2a  esult <<= 32; /*
1af0: 20 74 79 70 65 6f 66 28 69 6e 74 29 20 62 69 74   typeof(int) bit
1b00: 73 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  s */..          
1b10: 20 20 72 65 73 75 6c 74 20 7c 3d 20 28 6c 6f 6e    result |= (lon
1b20: 67 29 28 75 69 6e 74 29 68 61 73 68 43 6f 64 65  g)(uint)hashCode
1b30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b40: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
1b50: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1b60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1bb0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1bc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1bd0: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74  /// Determines t
1be0: 68 65 20 75 6e 69 71 75 65 20 72 6f 77 20 69 64  he unique row id
1bf0: 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65  entifier for the
1c00: 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 0d 0a 20   current row... 
1c10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1c20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1c30: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1c40: 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20  cursor">..      
1c50: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1c60: 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75  ref="SQLiteVirtu
1c70: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20 2f  alTableCursor" /
1c80: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1c90: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  e..        /// a
1ca0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1cb0: 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  he previously op
1cc0: 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61 62  ened virtual tab
1cd0: 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65 0d  le cursor to be.
1ce0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65  .        /// use
1cf0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1d00: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1d10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1d20: 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
1d30: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 62 6a 65      /// The obje
1d40: 63 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 72  ct instance to r
1d50: 65 74 75 72 6e 20 61 20 75 6e 69 71 75 65 20 72  eturn a unique r
1d60: 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f  ow identifier fo
1d70: 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
1d80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1d90: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1da0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1db0: 20 75 6e 69 71 75 65 20 72 6f 77 20 69 64 65 6e   unique row iden
1dc0: 74 69 66 69 65 72 20 6f 72 20 7a 65 72 6f 20 75  tifier or zero u
1dd0: 70 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20  pon failure...  
1de0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
1df0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
1e00: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
1e10: 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 72 6f  long GetRowIdFro
1e20: 6d 4f 62 6a 65 63 74 28 0d 0a 20 20 20 20 20 20  mObject(..      
1e30: 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1e40: 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1e50: 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20  ursor,..        
1e60: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
1e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1e80: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1e90: 20 20 20 20 20 20 20 20 69 6e 74 20 72 6f 77 49          int rowI
1ea0: 6e 64 65 78 20 3d 20 28 63 75 72 73 6f 72 20 21  ndex = (cursor !
1eb0: 3d 20 6e 75 6c 6c 29 20 3f 20 63 75 72 73 6f 72  = null) ? cursor
1ec0: 2e 47 65 74 52 6f 77 49 6e 64 65 78 28 29 20 3a  .GetRowIndex() :
1ed0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
1ee0: 20 69 6e 74 20 68 61 73 68 43 6f 64 65 20 3d 20   int hashCode = 
1ef0: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 47 65  SQLiteMarshal.Ge
1f00: 74 48 61 73 68 43 6f 64 65 28 76 61 6c 75 65 2c  tHashCode(value,
1f10: 20 6f 62 6a 65 63 74 49 64 65 6e 74 69 74 79 29   objectIdentity)
1f20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f30: 20 72 65 74 75 72 6e 20 4d 61 6b 65 52 6f 77 49   return MakeRowI
1f40: 64 28 72 6f 77 49 6e 64 65 78 2c 20 68 61 73 68  d(rowIndex, hash
1f50: 43 6f 64 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Code);..        
1f60: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1f70: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1f80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fd0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
1fe0: 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e  posable "Pattern
1ff0: 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  " Members..     
2000: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
2010: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
2020: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2030: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
2040: 72 6f 77 73 20 61 6e 20 3c 73 65 65 20 63 72 65  rows an <see cre
2050: 66 3d 22 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  f="ObjectDispose
2060: 64 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 69  dException" /> i
2070: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20  f this object.. 
2080: 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
2090: 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  nce has been dis
20a0: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
20b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
20c0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20d0: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
20e0: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
20f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
2100: 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53   THROW_ON_DISPOS
2110: 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ED..            
2120: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
2130: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2150: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
2160: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
2170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2180: 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
2190: 69 74 65 4d 6f 64 75 6c 65 43 6f 6d 6d 6f 6e 29  iteModuleCommon)
21a0: 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  .Name);..       
21b0: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
21c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2220: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2230: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2240: 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20 74  // Disposes of t
2250: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
2260: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
2270: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2280: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2290: 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67   name="disposing
22a0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
22b0: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73  Non-zero if this
22c0: 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67   method is being
22d0: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   called from the
22e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
22f0: 65 65 20 63 72 65 66 3d 22 49 44 69 73 70 6f 73  ee cref="IDispos
2300: 61 62 6c 65 2e 44 69 73 70 6f 73 65 22 20 2f 3e  able.Dispose" />
2310: 20 6d 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69   method.  Zero i
2320: 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73  f this method is
2330: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65  ..        /// be
2340: 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ing called from 
2350: 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a  the finalizer...
2360: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2370: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ram>..        pr
2380: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
2390: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
23a0: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  ol disposing).. 
23b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23c0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
23d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
23f0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
2400: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2420: 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67   //if (disposing
2430: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2440: 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20         //{..    
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2460: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a0: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
24b0: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
24c0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e0: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
24f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2520: 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  //}....         
2530: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2560: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2570: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
2580: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
2590: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
25e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2600: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
2610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2630: 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69   base.Dispose(di
2640: 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20  sposing);....   
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2670: 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74   // NOTE: Everyt
2680: 68 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66  hing should be f
2690: 75 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74  ully disposed at
26a0: 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20   this point...  
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26d0: 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75    disposed = tru
26e0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26f0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
2700: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2710: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
2720: 64 72 65 67 69 6f 6e 0d 0a 7d 0d 0a 23 65 6e 64  dregion..}..#end
2730: 72 65 67 69 6f 6e 0d 0a                          region..