System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 62178a8eec35bc65585f0fc71da270ba8fa30e4e:


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 43 6f 6c 6c 65  ing System.Colle
0130: 63 74 69 6f 6e 73 3b 0d 0a 75 73 69 6e 67 20 53  ctions;..using S
0140: 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e  ystem.Collection
0150: 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a 23 69  s.Generic;....#i
0160: 66 20 44 45 42 55 47 0d 0a 75 73 69 6e 67 20 53  f DEBUG..using S
0170: 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
0180: 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 75 73  s;..#endif....us
0190: 69 6e 67 20 53 79 73 74 65 6d 2e 49 4f 3b 0d 0a  ing System.IO;..
01a0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f  using System.Glo
01b0: 62 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 75 73 69  balization;..usi
01c0: 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d  ng System.Runtim
01d0: 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63 65  e.InteropService
01e0: 73 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  s;....namespace 
01f0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0200: 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65 67 69  te..{..    #regi
0210: 6f 6e 20 53 65 73 73 69 6f 6e 20 45 78 74 65 6e  on Session Exten
0220: 73 69 6f 6e 20 45 6e 75 6d 65 72 61 74 69 6f 6e  sion Enumeration
0230: 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
0240: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
0250: 69 73 20 65 6e 75 6d 65 72 61 74 65 64 20 74 79  is enumerated ty
0260: 70 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  pe represents a 
0270: 74 79 70 65 20 6f 66 20 63 6f 6e 66 6c 69 63 74  type of conflict
0280: 20 73 65 65 6e 20 77 68 65 6e 20 61 70 70 6c 79   seen when apply
0290: 0d 0a 20 20 20 20 2f 2f 2f 20 63 68 61 6e 67 65  ..    /// change
02a0: 73 20 66 72 6f 6d 20 61 20 63 68 61 6e 67 65 20  s from a change 
02b0: 73 65 74 20 6f 72 20 70 61 74 63 68 20 73 65 74  set or patch set
02c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
02d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
02e0: 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 43 68 61  c enum SQLiteCha
02f0: 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63 74 54 79  ngeSetConflictTy
0300: 70 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  pe..    {..     
0310: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0320: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
0330: 69 73 20 76 61 6c 75 65 20 69 73 20 73 65 65 6e  is value is seen
0340: 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
0350: 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
0360: 41 54 45 20 63 68 61 6e 67 65 20 69 66 20 61 0d  ATE change if a.
0370: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 6f 77  .        /// row
0380: 20 77 69 74 68 20 74 68 65 20 72 65 71 75 69 72   with the requir
0390: 65 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  ed PRIMARY KEY f
03a0: 69 65 6c 64 73 20 69 73 20 70 72 65 73 65 6e 74  ields is present
03b0: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20   in the..       
03c0: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 2c 20 62   /// database, b
03d0: 75 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  ut one or more o
03e0: 74 68 65 72 20 28 6e 6f 6e 20 70 72 69 6d 61 72  ther (non primar
03f0: 79 2d 6b 65 79 29 20 66 69 65 6c 64 73 20 6d 6f  y-key) fields mo
0400: 64 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20  dified..        
0410: 2f 2f 2f 20 62 79 20 74 68 65 20 75 70 64 61 74  /// by the updat
0420: 65 20 64 6f 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  e do not contain
0430: 20 74 68 65 20 65 78 70 65 63 74 65 64 20 22 62   the expected "b
0440: 65 66 6f 72 65 22 20 76 61 6c 75 65 73 2e 0d 0a  efore" values...
0450: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
0460: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
0470: 44 61 74 61 20 3d 20 31 2c 0d 0a 0d 0a 20 20 20  Data = 1,....   
0480: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
0490: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
04a0: 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 73 65  This value is se
04b0: 65 6e 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  en when processi
04c0: 6e 67 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  ng a DELETE or U
04d0: 50 44 41 54 45 20 63 68 61 6e 67 65 20 69 66 20  PDATE change if 
04e0: 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  a..        /// r
04f0: 6f 77 20 77 69 74 68 20 74 68 65 20 72 65 71 75  ow with the requ
0500: 69 72 65 64 20 50 52 49 4d 41 52 59 20 4b 45 59  ired PRIMARY KEY
0510: 20 66 69 65 6c 64 73 20 69 73 20 6e 6f 74 20 70   fields is not p
0520: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 0d 0a 20  resent in the.. 
0530: 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62         /// datab
0540: 61 73 65 2e 20 20 54 68 65 72 65 20 69 73 20 6e  ase.  There is n
0550: 6f 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 6f  o conflicting ro
0560: 77 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 0d  w in this case..
0570: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20  .        ///..  
0580: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65        /// The re
0590: 73 75 6c 74 73 20 6f 66 20 69 6e 76 6f 6b 69 6e  sults of invokin
05a0: 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
05b0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
05c0: 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65  QLiteChangeSetMe
05d0: 74 61 64 61 74 61 49 74 65 6d 2e 47 65 74 43 6f  tadataItem.GetCo
05e0: 6e 66 6c 69 63 74 56 61 6c 75 65 22 20 2f 3e 0d  nflictValue" />.
05f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74  .        /// met
0600: 68 6f 64 20 61 72 65 20 75 6e 64 65 66 69 6e 65  hod are undefine
0610: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
0620: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0630: 20 20 20 20 4e 6f 74 46 6f 75 6e 64 20 3d 20 32      NotFound = 2
0640: 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ,....        ///
0650: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0660: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c      /// This val
0670: 75 65 20 69 73 20 73 65 65 6e 20 77 68 65 6e 20  ue is seen when 
0680: 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 20 49 4e  processing an IN
0690: 53 45 52 54 20 63 68 61 6e 67 65 20 69 66 20 74  SERT change if t
06a0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
06b0: 6f 70 65 72 61 74 69 6f 6e 20 77 6f 75 6c 64 20  operation would 
06c0: 72 65 73 75 6c 74 20 69 6e 20 64 75 70 6c 69 63  result in duplic
06d0: 61 74 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ate primary key 
06e0: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20 20 20  values...       
06f0: 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 66 6c 69 63   /// The conflic
0700: 74 69 6e 67 20 72 6f 77 20 69 6e 20 74 68 69 73  ting row in this
0710: 20 63 61 73 65 20 69 73 20 74 68 65 20 64 61 74   case is the dat
0720: 61 62 61 73 65 20 72 6f 77 20 77 69 74 68 20 74  abase row with t
0730: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
0740: 6d 61 74 63 68 69 6e 67 20 70 72 69 6d 61 72 79  matching primary
0750: 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f   key...        /
0760: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0770: 20 20 20 20 20 20 20 43 6f 6e 66 6c 69 63 74 20         Conflict 
0780: 3d 20 33 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 3,....        
0790: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
07a0: 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 61 20         /// If a 
07b0: 6e 6f 6e 2d 66 6f 72 65 69 67 6e 20 6b 65 79 20  non-foreign key 
07c0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
07d0: 74 69 6f 6e 20 6f 63 63 75 72 73 20 77 68 69 6c  tion occurs whil
07e0: 65 20 61 70 70 6c 79 69 6e 67 20 61 0d 0a 20 20  e applying a..  
07f0: 20 20 20 20 20 20 2f 2f 2f 20 63 68 61 6e 67 65        /// change
0800: 20 28 69 2e 65 2e 20 61 20 55 4e 49 51 55 45 2c   (i.e. a UNIQUE,
0810: 20 43 48 45 43 4b 20 6f 72 20 4e 4f 54 20 4e 55   CHECK or NOT NU
0820: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 29 2c 20  LL constraint), 
0830: 74 68 65 20 63 6f 6e 66 6c 69 63 74 0d 0a 20 20  the conflict..  
0840: 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 62 61        /// callba
0850: 63 6b 20 77 69 6c 6c 20 73 65 65 20 74 68 69 73  ck will see this
0860: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
0870: 20 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f   ///..        //
0880: 2f 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  / There is no co
0890: 6e 66 6c 69 63 74 69 6e 67 20 72 6f 77 20 69 6e  nflicting row in
08a0: 20 74 68 69 73 20 63 61 73 65 2e 20 54 68 65 20   this case. The 
08b0: 72 65 73 75 6c 74 73 20 6f 66 20 69 6e 76 6f 6b  results of invok
08c0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ing..        ///
08d0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
08e0: 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  ISQLiteChangeSet
08f0: 4d 65 74 61 64 61 74 61 49 74 65 6d 2e 47 65 74  MetadataItem.Get
0900: 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 22 20 2f  ConflictValue" /
0910: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
0920: 65 74 68 6f 64 20 61 72 65 20 75 6e 64 65 66 69  ethod are undefi
0930: 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ned...        //
0940: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0950: 20 20 20 20 20 20 43 6f 6e 73 74 72 61 69 6e 74        Constraint
0960: 20 3d 20 34 2c 0d 0a 0d 0a 20 20 20 20 20 20 20   = 4,....       
0970: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0980: 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 66          /// If f
0990: 6f 72 65 69 67 6e 20 6b 65 79 20 68 61 6e 64 6c  oreign key handl
09a0: 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  ing is enabled, 
09b0: 61 6e 64 20 61 70 70 6c 79 69 6e 67 20 61 20 63  and applying a c
09c0: 68 61 6e 67 65 73 20 6c 65 61 76 65 73 0d 0a 20  hanges leaves.. 
09d0: 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 64         /// the d
09e0: 61 74 61 62 61 73 65 20 69 6e 20 61 20 73 74 61  atabase in a sta
09f0: 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 66 6f  te containing fo
0a00: 72 65 69 67 6e 20 6b 65 79 20 76 69 6f 6c 61 74  reign key violat
0a10: 69 6f 6e 73 2c 20 74 68 69 73 0d 0a 20 20 20 20  ions, this..    
0a20: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 77 69      /// value wi
0a30: 6c 6c 20 62 65 20 73 65 65 6e 20 65 78 61 63 74  ll be seen exact
0a40: 6c 79 20 6f 6e 63 65 20 62 65 66 6f 72 65 20 74  ly once before t
0a50: 68 65 20 63 68 61 6e 67 65 73 20 61 72 65 20 63  he changes are c
0a60: 6f 6d 6d 69 74 74 65 64 2e 0d 0a 20 20 20 20 20  ommitted...     
0a70: 20 20 20 2f 2f 2f 20 49 66 20 74 68 65 20 63 6f     /// If the co
0a80: 6e 66 6c 69 63 74 20 68 61 6e 64 6c 65 72 0d 0a  nflict handler..
0a90: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
0aa0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 68 61   cref="SQLiteCha
0ab0: 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63 74 52 65  ngeSetConflictRe
0ac0: 73 75 6c 74 2e 4f 6d 69 74 22 20 2f 3e 2c 20 74  sult.Omit" />, t
0ad0: 68 65 20 63 68 61 6e 67 65 73 2c 0d 0a 20 20 20  he changes,..   
0ae0: 20 20 20 20 20 2f 2f 2f 20 69 6e 63 6c 75 64 69       /// includi
0af0: 6e 67 20 74 68 6f 73 65 20 74 68 61 74 20 63 61  ng those that ca
0b00: 75 73 65 64 20 74 68 65 20 66 6f 72 65 69 67 6e  used the foreign
0b10: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
0b20: 76 69 6f 6c 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  violation,..    
0b30: 20 20 20 20 2f 2f 2f 20 61 72 65 20 63 6f 6d 6d      /// are comm
0b40: 69 74 74 65 64 2e 20 4f 72 2c 20 69 66 20 69 74  itted. Or, if it
0b50: 20 72 65 74 75 72 6e 73 0d 0a 20 20 20 20 20 20   returns..      
0b60: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
0b70: 22 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  "SQLiteChangeSet
0b80: 43 6f 6e 66 6c 69 63 74 52 65 73 75 6c 74 2e 41  ConflictResult.A
0b90: 62 6f 72 74 22 20 2f 3e 2c 20 74 68 65 20 63 68  bort" />, the ch
0ba0: 61 6e 67 65 73 20 61 72 65 0d 0a 20 20 20 20 20  anges are..     
0bb0: 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61     /// rolled ba
0bc0: 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ck...        ///
0bd0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
0be0: 20 63 75 72 72 65 6e 74 20 6f 72 20 63 6f 6e 66   current or conf
0bf0: 6c 69 63 74 69 6e 67 20 72 6f 77 20 69 6e 66 6f  licting row info
0c00: 72 6d 61 74 69 6f 6e 20 69 73 20 70 72 6f 76 69  rmation is provi
0c10: 64 65 64 2e 20 54 68 65 20 6f 6e 6c 79 0d 0a 20  ded. The only.. 
0c20: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
0c30: 64 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  d it is possible
0c40: 20 74 6f 20 63 61 6c 6c 20 6f 6e 20 74 68 65 20   to call on the 
0c50: 73 75 70 70 6c 69 65 64 0d 0a 20 20 20 20 20 20  supplied..      
0c60: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
0c70: 22 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65  "ISQLiteChangeSe
0c80: 74 4d 65 74 61 64 61 74 61 49 74 65 6d 22 20 2f  tMetadataItem" /
0c90: 3e 20 6f 62 6a 65 63 74 20 69 73 0d 0a 20 20 20  > object is..   
0ca0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
0cb0: 65 66 3d 22 49 53 51 4c 69 74 65 43 68 61 6e 67  ef="ISQLiteChang
0cc0: 65 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d  eSetMetadataItem
0cd0: 2e 4e 75 6d 62 65 72 4f 66 46 6f 72 65 69 67 6e  .NumberOfForeign
0ce0: 4b 65 79 43 6f 6e 66 6c 69 63 74 73 22 20 2f 3e  KeyConflicts" />
0cf0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
0d00: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
0d10: 20 20 20 46 6f 72 65 69 67 6e 4b 65 79 20 3d 20     ForeignKey = 
0d20: 35 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  5..    }....    
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0d80: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0d90: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 65  ..    /// This e
0da0: 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65 20 72  numerated type r
0db0: 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 72 65  epresents the re
0dc0: 73 75 6c 74 20 6f 66 20 61 20 75 73 65 72 2d 64  sult of a user-d
0dd0: 65 66 69 6e 65 64 20 63 6f 6e 66 6c 69 63 74 0d  efined conflict.
0de0: 0a 20 20 20 20 2f 2f 2f 20 72 65 73 6f 6c 75 74  .    /// resolut
0df0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20  ion callback... 
0e00: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0e10: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e  >..    public en
0e20: 75 6d 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53  um SQLiteChangeS
0e30: 65 74 43 6f 6e 66 6c 69 63 74 52 65 73 75 6c 74  etConflictResult
0e40: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
0e50: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0e60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 61          /// If a
0e70: 20 63 6f 6e 66 6c 69 63 74 20 63 61 6c 6c 62 61   conflict callba
0e80: 63 6b 20 72 65 74 75 72 6e 73 20 74 68 69 73 20  ck returns this 
0e90: 76 61 6c 75 65 20 6e 6f 20 73 70 65 63 69 61 6c  value no special
0ea0: 20 61 63 74 69 6f 6e 20 69 73 0d 0a 20 20 20 20   action is..    
0eb0: 20 20 20 20 2f 2f 2f 20 74 61 6b 65 6e 2e 20 54      /// taken. T
0ec0: 68 65 20 63 68 61 6e 67 65 20 74 68 61 74 20 63  he change that c
0ed0: 61 75 73 65 64 20 74 68 65 20 63 6f 6e 66 6c 69  aused the confli
0ee0: 63 74 20 69 73 20 6e 6f 74 20 61 70 70 6c 69 65  ct is not applie
0ef0: 64 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  d. The..        
0f00: 2f 2f 2f 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  /// application 
0f10: 6f 66 20 63 68 61 6e 67 65 73 20 63 6f 6e 74 69  of changes conti
0f20: 6e 75 65 73 20 77 69 74 68 20 74 68 65 20 6e 65  nues with the ne
0f30: 78 74 20 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20  xt change...    
0f40: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0f50: 79 3e 0d 0a 20 20 20 20 20 20 20 20 4f 6d 69 74  y>..        Omit
0f60: 20 3d 20 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0,....       
0f70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0f80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
0f90: 20 76 61 6c 75 65 20 6d 61 79 20 6f 6e 6c 79 20   value may only 
0fa0: 62 65 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d  be returned from
0fb0: 20 61 20 63 6f 6e 66 6c 69 63 74 20 63 61 6c 6c   a conflict call
0fc0: 62 61 63 6b 20 69 66 20 74 68 65 0d 0a 20 20 20  back if the..   
0fd0: 20 20 20 20 20 2f 2f 2f 20 74 79 70 65 20 6f 66       /// type of
0fe0: 20 63 6f 6e 66 6c 69 63 74 20 77 61 73 20 3c 73   conflict was <s
0ff0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
1000: 68 61 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63 74  hangeSetConflict
1010: 54 79 70 65 2e 44 61 74 61 22 20 2f 3e 0d 0a 20  Type.Data" />.. 
1020: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72 20 3c 73         /// or <s
1030: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
1040: 68 61 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63 74  hangeSetConflict
1050: 54 79 70 65 2e 43 6f 6e 66 6c 69 63 74 22 20 2f  Type.Conflict" /
1060: 3e 2e 20 49 66 20 74 68 69 73 20 69 73 0d 0a 20  >. If this is.. 
1070: 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f 74 20 74         /// not t
1080: 68 65 20 63 61 73 65 2c 20 61 6e 79 20 63 68 61  he case, any cha
1090: 6e 67 65 73 20 61 70 70 6c 69 65 64 20 73 6f 20  nges applied so 
10a0: 66 61 72 20 61 72 65 20 72 6f 6c 6c 65 64 20 62  far are rolled b
10b0: 61 63 6b 20 61 6e 64 20 74 68 65 0d 0a 20 20 20  ack and the..   
10c0: 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 20 74 6f       /// call to
10d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
10e0: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
10f0: 43 68 61 6e 67 65 53 65 74 2e 41 70 70 6c 79 28  ChangeSet.Apply(
1100: 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 43  SessionConflictC
1110: 61 6c 6c 62 61 63 6b 2c 53 65 73 73 69 6f 6e 54  allback,SessionT
1120: 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61  ableFilterCallba
1130: 63 6b 2c 6f 62 6a 65 63 74 29 22 20 2f 3e 0d 0a  ck,object)" />..
1140: 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c          /// will
1150: 20 72 61 69 73 65 20 61 20 3c 73 65 65 20 63 72   raise a <see cr
1160: 65 66 3d 22 53 51 4c 69 74 65 45 78 63 65 70 74  ef="SQLiteExcept
1170: 69 6f 6e 22 20 2f 3e 20 77 69 74 68 20 61 6e 20  ion" /> with an 
1180: 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 0d 0a 20  error code of.. 
1190: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
11a0: 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72 6f  cref="SQLiteErro
11b0: 72 43 6f 64 65 2e 4d 69 73 75 73 65 22 20 2f 3e  rCode.Misuse" />
11c0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 0d 0a  ...        ///..
11d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74          /// If t
11e0: 68 69 73 20 76 61 6c 75 65 20 69 73 20 72 65 74  his value is ret
11f0: 75 72 6e 65 64 20 66 6f 72 20 61 0d 0a 20 20 20  urned for a..   
1200: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
1210: 65 66 3d 22 53 51 4c 69 74 65 43 68 61 6e 67 65  ef="SQLiteChange
1220: 53 65 74 43 6f 6e 66 6c 69 63 74 54 79 70 65 2e  SetConflictType.
1230: 44 61 74 61 22 20 2f 3e 20 63 6f 6e 66 6c 69 63  Data" /> conflic
1240: 74 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20  t, then the..   
1250: 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 6c 69 63       /// conflic
1260: 74 69 6e 67 20 72 6f 77 20 69 73 20 65 69 74 68  ting row is eith
1270: 65 72 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  er updated or de
1280: 6c 65 74 65 64 2c 20 64 65 70 65 6e 64 69 6e 67  leted, depending
1290: 20 6f 6e 20 74 68 65 20 74 79 70 65 0d 0a 20 20   on the type..  
12a0: 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 63 68 61        /// of cha
12b0: 6e 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nge...        //
12c0: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  /..        /// I
12d0: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20  f this value is 
12e0: 72 65 74 75 72 6e 65 64 20 66 6f 72 20 61 0d 0a  returned for a..
12f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
1300: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 68 61   cref="SQLiteCha
1310: 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63 74 54 79  ngeSetConflictTy
1320: 70 65 2e 43 6f 6e 66 6c 69 63 74 22 20 2f 3e 20  pe.Conflict" /> 
1330: 63 6f 6e 66 6c 69 63 74 2c 20 74 68 65 6e 0d 0a  conflict, then..
1340: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
1350: 63 6f 6e 66 6c 69 63 74 69 6e 67 20 72 6f 77 20  conflicting row 
1360: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
1370: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
1380: 20 61 20 73 65 63 6f 6e 64 0d 0a 20 20 20 20 20   a second..     
1390: 20 20 20 2f 2f 2f 20 61 74 74 65 6d 70 74 20 74     /// attempt t
13a0: 6f 20 61 70 70 6c 79 20 74 68 65 20 63 68 61 6e  o apply the chan
13b0: 67 65 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  ge is made. If t
13c0: 68 69 73 20 73 65 63 6f 6e 64 20 61 74 74 65 6d  his second attem
13d0: 70 74 20 66 61 69 6c 73 2c 0d 0a 20 20 20 20 20  pt fails,..     
13e0: 20 20 20 2f 2f 2f 20 74 68 65 20 6f 72 69 67 69     /// the origi
13f0: 6e 61 6c 20 72 6f 77 20 69 73 20 72 65 73 74 6f  nal row is resto
1400: 72 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  red to the datab
1410: 61 73 65 20 62 65 66 6f 72 65 20 63 6f 6e 74 69  ase before conti
1420: 6e 75 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  nuing...        
1430: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1440: 20 20 20 20 20 20 20 20 52 65 70 6c 61 63 65 20          Replace 
1450: 3d 20 31 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 1,....        
1460: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1470: 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74 68         /// If th
1480: 69 73 20 76 61 6c 75 65 20 69 73 20 72 65 74 75  is value is retu
1490: 72 6e 65 64 2c 20 61 6e 79 20 63 68 61 6e 67 65  rned, any change
14a0: 73 20 61 70 70 6c 69 65 64 20 73 6f 20 66 61 72  s applied so far
14b0: 20 61 72 65 20 72 6f 6c 6c 65 64 0d 0a 20 20 20   are rolled..   
14c0: 20 20 20 20 20 2f 2f 2f 20 62 61 63 6b 20 61 6e       /// back an
14d0: 64 20 74 68 65 20 63 61 6c 6c 20 74 6f 0d 0a 20  d the call to.. 
14e0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
14f0: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 43 68 61  cref="ISQLiteCha
1500: 6e 67 65 53 65 74 2e 41 70 70 6c 79 28 53 65 73  ngeSet.Apply(Ses
1510: 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c  sionConflictCall
1520: 62 61 63 6b 2c 53 65 73 73 69 6f 6e 54 61 62 6c  back,SessionTabl
1530: 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 2c  eFilterCallback,
1540: 6f 62 6a 65 63 74 29 22 20 2f 3e 0d 0a 20 20 20  object)" />..   
1550: 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 72 61       /// will ra
1560: 69 73 65 20 61 20 3c 73 65 65 20 63 72 65 66 3d  ise a <see cref=
1570: 22 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  "SQLiteException
1580: 22 20 2f 3e 20 77 69 74 68 20 61 6e 20 65 72 72  " /> with an err
1590: 6f 72 20 63 6f 64 65 20 6f 66 0d 0a 20 20 20 20  or code of..    
15a0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
15b0: 66 3d 22 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  f="SQLiteErrorCo
15c0: 64 65 2e 41 62 6f 72 74 22 20 2f 3e 2e 0d 0a 20  de.Abort" />... 
15d0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
15e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 41  mary>..        A
15f0: 62 6f 72 74 20 3d 20 32 0d 0a 20 20 20 20 7d 0d  bort = 2..    }.
1600: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
1610: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1670: 6e 20 53 65 73 73 69 6f 6e 20 45 78 74 65 6e 73  n Session Extens
1680: 69 6f 6e 20 44 65 6c 65 67 61 74 65 73 0d 0a 20  ion Delegates.. 
1690: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
16a0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63  ..    /// This c
16b0: 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 6f 6b  allback is invok
16c0: 65 64 20 77 68 65 6e 20 61 20 64 65 74 65 72 6d  ed when a determ
16d0: 69 6e 61 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  ination must be 
16e0: 6d 61 64 65 20 61 62 6f 75 74 0d 0a 20 20 20 20  made about..    
16f0: 2f 2f 2f 20 77 68 65 74 68 65 72 20 63 68 61 6e  /// whether chan
1700: 67 65 73 20 74 6f 20 61 20 73 70 65 63 69 66 69  ges to a specifi
1710: 63 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 62  c table should b
1720: 65 20 74 72 61 63 6b 65 64 20 2d 4f 52 2d 20 61  e tracked -OR- a
1730: 70 70 6c 69 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  pplied...    ///
1740: 20 49 74 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20   It will not be 
1750: 63 61 6c 6c 65 64 20 66 6f 72 20 74 61 62 6c 65  called for table
1760: 73 20 74 68 61 74 20 61 72 65 20 61 6c 72 65 61  s that are alrea
1770: 64 79 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  dy attached to a
1780: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63  ..    /// <see c
1790: 72 65 66 3d 22 49 53 51 4c 69 74 65 53 65 73 73  ref="ISQLiteSess
17a0: 69 6f 6e 22 20 2f 3e 2e 0d 0a 20 20 20 20 2f 2f  ion" />...    //
17b0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
17c0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17d0: 65 3d 22 63 6c 69 65 6e 74 44 61 74 61 22 3e 0d  e="clientData">.
17e0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 74  .    /// The opt
17f0: 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74 69 6f  ional applicatio
1800: 6e 2d 64 65 66 69 6e 65 64 20 63 6f 6e 74 65 78  n-defined contex
1810: 74 20 64 61 74 61 20 74 68 61 74 20 77 61 73 20  t data that was 
1820: 6f 72 69 67 69 6e 61 6c 6c 79 0d 0a 20 20 20 20  originally..    
1830: 2f 2f 2f 20 70 61 73 73 65 64 20 74 6f 20 74 68  /// passed to th
1840: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
1850: 4c 69 74 65 53 65 73 73 69 6f 6e 2e 53 65 74 54  LiteSession.SetT
1860: 61 62 6c 65 46 69 6c 74 65 72 22 20 2f 3e 20 6f  ableFilter" /> o
1870: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  r..    /// <see 
1880: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 43 68 61  cref="ISQLiteCha
1890: 6e 67 65 53 65 74 2e 41 70 70 6c 79 28 53 65 73  ngeSet.Apply(Ses
18a0: 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c  sionConflictCall
18b0: 62 61 63 6b 2c 53 65 73 73 69 6f 6e 54 61 62 6c  back,SessionTabl
18c0: 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 2c  eFilterCallback,
18d0: 6f 62 6a 65 63 74 29 22 20 2f 3e 0d 0a 20 20 20  object)" />..   
18e0: 20 2f 2f 2f 20 6d 65 74 68 6f 64 73 2e 20 20 54   /// methods.  T
18f0: 68 69 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65  his value may be
1900: 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20   null...    /// 
1910: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1920: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
1930: 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ame">..    /// T
1940: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
1950: 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
1960: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1970: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
1980: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
1990: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 74  changes to the t
19a0: 61 62 6c 65 20 73 68 6f 75 6c 64 20 62 65 20 63  able should be c
19b0: 6f 6e 73 69 64 65 72 65 64 3b 20 6f 74 68 65 72  onsidered; other
19c0: 77 69 73 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 7a  wise,..    /// z
19d0: 65 72 6f 2e 20 20 54 68 72 6f 77 69 6e 67 20 61  ero.  Throwing a
19e0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 66 72 6f 6d  n exception from
19f0: 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 77   this callback w
1a00: 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 0d 0a 20  ill result in.. 
1a10: 20 20 20 2f 2f 2f 20 75 6e 64 65 66 69 6e 65 64     /// undefined
1a20: 20 62 65 68 61 76 69 6f 72 2e 0d 0a 20 20 20 20   behavior...    
1a30: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1a40: 20 20 20 20 70 75 62 6c 69 63 20 64 65 6c 65 67      public deleg
1a50: 61 74 65 20 62 6f 6f 6c 20 53 65 73 73 69 6f 6e  ate bool Session
1a60: 54 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62  TableFilterCallb
1a70: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 6f 62  ack(..        ob
1a80: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
1a90: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
1aa0: 20 6e 61 6d 65 0d 0a 20 20 20 20 29 3b 0d 0a 0d   name..    );...
1ab0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1b10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
1b20: 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  his callback is 
1b30: 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 74 68 65  invoked when the
1b40: 72 65 20 69 73 20 61 20 63 6f 6e 66 6c 69 63 74  re is a conflict
1b50: 20 77 68 69 6c 65 20 61 70 70 6c 79 20 63 68 61   while apply cha
1b60: 6e 67 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f  nges..    /// to
1b70: 20 61 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20   a database...  
1b80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1b90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1ba0: 20 6e 61 6d 65 3d 22 63 6c 69 65 6e 74 44 61 74   name="clientDat
1bb0: 61 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  a">..    /// The
1bc0: 20 6f 70 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63   optional applic
1bd0: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 63 6f  ation-defined co
1be0: 6e 74 65 78 74 20 64 61 74 61 20 74 68 61 74 20  ntext data that 
1bf0: 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 0d 0a  was originally..
1c00: 20 20 20 20 2f 2f 2f 20 70 61 73 73 65 64 20 74      /// passed t
1c10: 6f 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  o the..    /// <
1c20: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1c30: 65 43 68 61 6e 67 65 53 65 74 2e 41 70 70 6c 79  eChangeSet.Apply
1c40: 28 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74  (SessionConflict
1c50: 43 61 6c 6c 62 61 63 6b 2c 53 65 73 73 69 6f 6e  Callback,Session
1c60: 54 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62  TableFilterCallb
1c70: 61 63 6b 2c 6f 62 6a 65 63 74 29 22 20 2f 3e 0d  ack,object)" />.
1c80: 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e  .    /// method.
1c90: 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d 61 79    This value may
1ca0: 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 2f   be null...    /
1cb0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1cc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1cd0: 3d 22 74 79 70 65 22 3e 0d 0a 20 20 20 20 2f 2f  ="type">..    //
1ce0: 2f 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68  / The type of th
1cf0: 69 73 20 63 6f 6e 66 6c 69 63 74 2e 0d 0a 20 20  is conflict...  
1d00: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1d10: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1d20: 61 6d 65 3d 22 69 74 65 6d 22 3e 0d 0a 20 20 20  ame="item">..   
1d30: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1d40: 65 66 3d 22 49 53 51 4c 69 74 65 43 68 61 6e 67  ef="ISQLiteChang
1d50: 65 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d  eSetMetadataItem
1d60: 22 20 2f 3e 20 6f 62 6a 65 63 74 20 61 73 73 6f  " /> object asso
1d70: 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20  ciated with..   
1d80: 20 2f 2f 2f 20 74 68 69 73 20 63 6f 6e 66 6c 69   /// this confli
1d90: 63 74 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ct.  This value 
1da0: 6d 61 79 20 6e 6f 74 20 62 65 20 6e 75 6c 6c 3b  may not be null;
1db0: 20 68 6f 77 65 76 65 72 2c 20 6f 6e 6c 79 20 70   however, only p
1dc0: 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 2f  roperties..    /
1dd0: 2f 2f 20 74 68 61 74 20 61 72 65 20 61 70 70 6c  // that are appl
1de0: 69 63 61 62 6c 65 20 74 6f 20 74 68 65 20 63 6f  icable to the co
1df0: 6e 66 6c 69 63 74 20 74 79 70 65 20 77 69 6c 6c  nflict type will
1e00: 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 20   be available.  
1e10: 46 75 72 74 68 65 72 0d 0a 20 20 20 20 2f 2f 2f  Further..    ///
1e20: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20   information on 
1e30: 74 68 69 73 20 69 73 20 61 76 61 69 6c 61 62 6c  this is availabl
1e40: 65 20 77 69 74 68 69 6e 20 74 68 65 20 64 65 73  e within the des
1e50: 63 72 69 70 74 69 6f 6e 73 20 6f 66 20 74 68 65  criptions of the
1e60: 0d 0a 20 20 20 20 2f 2f 2f 20 61 76 61 69 6c 61  ..    /// availa
1e70: 62 6c 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ble <see cref="S
1e80: 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 43 6f  QLiteChangeSetCo
1e90: 6e 66 6c 69 63 74 54 79 70 65 22 20 2f 3e 20 76  nflictType" /> v
1ea0: 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  alues...    /// 
1eb0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1ec0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1ed0: 20 2f 2f 2f 20 41 20 3c 73 65 65 20 63 72 65 66   /// A <see cref
1ee0: 3d 22 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65  ="SQLiteChangeSe
1ef0: 74 43 6f 6e 66 6c 69 63 74 52 65 73 75 6c 74 22  tConflictResult"
1f00: 20 2f 3e 20 76 61 6c 75 65 20 74 68 61 74 20 69   /> value that i
1f10: 6e 64 69 63 61 74 65 73 20 74 68 65 0d 0a 20 20  ndicates the..  
1f20: 20 20 2f 2f 2f 20 61 63 74 69 6f 6e 20 74 6f 20    /// action to 
1f30: 62 65 20 74 61 6b 65 6e 20 69 6e 20 6f 72 64 65  be taken in orde
1f40: 72 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 68 65  r to resolve the
1f50: 20 63 6f 6e 66 6c 69 63 74 2e 20 20 54 68 72 6f   conflict.  Thro
1f60: 77 69 6e 67 20 61 6e 0d 0a 20 20 20 20 2f 2f 2f  wing an..    ///
1f70: 20 65 78 63 65 70 74 69 6f 6e 20 66 72 6f 6d 20   exception from 
1f80: 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 77 69  this callback wi
1f90: 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 75 6e 64  ll result in und
1fa0: 65 66 69 6e 65 64 20 62 65 68 61 76 69 6f 72 2e  efined behavior.
1fb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
1fc0: 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
1fd0: 20 64 65 6c 65 67 61 74 65 20 53 51 4c 69 74 65   delegate SQLite
1fe0: 43 68 61 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63  ChangeSetConflic
1ff0: 74 52 65 73 75 6c 74 20 53 65 73 73 69 6f 6e 43  tResult SessionC
2000: 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 28  onflictCallback(
2010: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
2020: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
2030: 20 20 20 20 20 20 53 51 4c 69 74 65 43 68 61 6e        SQLiteChan
2040: 67 65 53 65 74 43 6f 6e 66 6c 69 63 74 54 79 70  geSetConflictTyp
2050: 65 20 74 79 70 65 2c 0d 0a 20 20 20 20 20 20 20  e type,..       
2060: 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65   ISQLiteChangeSe
2070: 74 4d 65 74 61 64 61 74 61 49 74 65 6d 20 69 74  tMetadataItem it
2080: 65 6d 0d 0a 20 20 20 20 29 3b 0d 0a 20 20 20 20  em..    );..    
2090: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
20a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20f0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51  .    #region ISQ
2100: 4c 69 74 65 43 68 61 6e 67 65 53 65 74 20 49 6e  LiteChangeSet In
2110: 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f  terface..    ///
2120: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2130: 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61  /// This interfa
2140: 63 65 20 63 6f 6e 74 61 69 6e 73 20 6d 65 74 68  ce contains meth
2150: 6f 64 73 20 75 73 65 64 20 74 6f 20 6d 61 6e 69  ods used to mani
2160: 70 75 6c 61 74 65 20 61 20 73 65 74 20 6f 66 20  pulate a set of 
2170: 63 68 61 6e 67 65 73 20 66 6f 72 0d 0a 20 20 20  changes for..   
2180: 20 2f 2f 2f 20 61 20 64 61 74 61 62 61 73 65 2e   /// a database.
2190: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
21a0: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
21b0: 20 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69   interface ISQLi
21c0: 74 65 43 68 61 6e 67 65 53 65 74 20 3a 0d 0a 20  teChangeSet :.. 
21d0: 20 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61 62         IEnumerab
21e0: 6c 65 3c 49 53 51 4c 69 74 65 43 68 61 6e 67 65  le<ISQLiteChange
21f0: 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d 3e  SetMetadataItem>
2200: 2c 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20  , IDisposable.. 
2210: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
2220: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2230: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
2240: 74 68 6f 64 20 22 69 6e 76 65 72 74 73 22 20 74  thod "inverts" t
2250: 68 65 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65  he set of change
2260: 73 20 77 69 74 68 69 6e 20 74 68 69 73 20 69 6e  s within this in
2270: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
2280: 20 2f 2f 2f 20 41 70 70 6c 79 69 6e 67 20 61 6e   /// Applying an
2290: 20 69 6e 76 65 72 74 65 64 20 73 65 74 20 6f 66   inverted set of
22a0: 20 63 68 61 6e 67 65 73 20 74 6f 20 61 20 64 61   changes to a da
22b0: 74 61 62 61 73 65 20 72 65 76 65 72 73 65 73 20  tabase reverses 
22c0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
22d0: 20 65 66 66 65 63 74 73 20 6f 66 20 61 70 70 6c   effects of appl
22e0: 79 69 6e 67 20 74 68 65 20 75 6e 69 6e 76 65 72  ying the uninver
22f0: 74 65 64 20 63 68 61 6e 67 65 73 2e 20 20 53 70  ted changes.  Sp
2300: 65 63 69 66 69 63 61 6c 6c 79 3a 0d 0a 20 20 20  ecifically:..   
2310: 20 20 20 20 20 2f 2f 2f 20 3c 21 5b 43 44 41 54       /// <![CDAT
2320: 41 5b 3c 75 6c 3e 5d 5d 3e 3c 21 5b 43 44 41 54  A[<ul>]]><![CDAT
2330: 41 5b 3c 6c 69 3e 5d 5d 3e 0d 0a 20 20 20 20 20  A[<li>]]>..     
2340: 20 20 20 2f 2f 2f 20 45 61 63 68 20 44 45 4c 45     /// Each DELE
2350: 54 45 20 63 68 61 6e 67 65 20 69 73 20 63 68 61  TE change is cha
2360: 6e 67 65 64 20 74 6f 20 61 6e 20 49 4e 53 45 52  nged to an INSER
2370: 54 2c 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  T, and..        
2380: 2f 2f 2f 20 3c 21 5b 43 44 41 54 41 5b 3c 2f 6c  /// <![CDATA[</l
2390: 69 3e 5d 5d 3e 3c 21 5b 43 44 41 54 41 5b 3c 6c  i>]]><![CDATA[<l
23a0: 69 3e 5d 5d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  i>]]>..        /
23b0: 2f 2f 20 45 61 63 68 20 49 4e 53 45 52 54 20 63  // Each INSERT c
23c0: 68 61 6e 67 65 20 69 73 20 63 68 61 6e 67 65 64  hange is changed
23d0: 20 74 6f 20 61 20 44 45 4c 45 54 45 2c 20 61 6e   to a DELETE, an
23e0: 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
23f0: 21 5b 43 44 41 54 41 5b 3c 2f 6c 69 3e 5d 5d 3e  ![CDATA[</li>]]>
2400: 3c 21 5b 43 44 41 54 41 5b 3c 6c 69 3e 5d 5d 3e  <![CDATA[<li>]]>
2410: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f  ..        /// Fo
2420: 72 20 65 61 63 68 20 55 50 44 41 54 45 20 63 68  r each UPDATE ch
2430: 61 6e 67 65 2c 20 74 68 65 20 6f 6c 64 2e 2a 20  ange, the old.* 
2440: 61 6e 64 20 6e 65 77 2e 2a 20 76 61 6c 75 65 73  and new.* values
2450: 20 61 72 65 20 65 78 63 68 61 6e 67 65 64 2e 0d   are exchanged..
2460: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 21 5b  .        /// <![
2470: 43 44 41 54 41 5b 3c 2f 6c 69 3e 5d 5d 3e 3c 21  CDATA[</li>]]><!
2480: 5b 43 44 41 54 41 5b 3c 2f 75 6c 3e 5d 5d 3e 0d  [CDATA[</ul>]]>.
2490: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
24a0: 73 20 6d 65 74 68 6f 64 20 64 6f 65 73 20 6e 6f  s method does no
24b0: 74 20 63 68 61 6e 67 65 20 74 68 65 20 6f 72 64  t change the ord
24c0: 65 72 20 69 6e 20 77 68 69 63 68 20 63 68 61 6e  er in which chan
24d0: 67 65 73 20 61 70 70 65 61 72 0d 0a 20 20 20 20  ges appear..    
24e0: 20 20 20 20 2f 2f 2f 20 77 69 74 68 69 6e 20 74      /// within t
24f0: 68 65 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65  he set of change
2500: 73 2e 20 49 74 20 6d 65 72 65 6c 79 20 72 65 76  s. It merely rev
2510: 65 72 73 65 73 20 74 68 65 20 73 65 6e 73 65 20  erses the sense 
2520: 6f 66 20 65 61 63 68 0d 0a 20 20 20 20 20 20 20  of each..       
2530: 20 2f 2f 2f 20 69 6e 64 69 76 69 64 75 61 6c 20   /// individual 
2540: 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20 20 20 20  change...       
2550: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2560: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
2570: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2580: 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65 65  /// The new <see
2590: 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 43 68   cref="ISQLiteCh
25a0: 61 6e 67 65 53 65 74 22 20 2f 3e 20 69 6e 73 74  angeSet" /> inst
25b0: 61 6e 63 65 20 74 68 61 74 20 72 65 70 72 65 73  ance that repres
25c0: 65 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ents..        //
25d0: 2f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  / the resulting 
25e0: 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 20 2d  set of changes -
25f0: 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 69  OR- null if it i
2600: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e  s not available.
2610: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2620: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2630: 20 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53    ISQLiteChangeS
2640: 65 74 20 49 6e 76 65 72 74 28 29 3b 0d 0a 0d 0a  et Invert();....
2650: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2660: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2670: 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 63  // This method c
2680: 6f 6d 62 69 6e 65 73 20 74 68 65 20 73 70 65 63  ombines the spec
2690: 69 66 69 65 64 20 73 65 74 20 6f 66 20 63 68 61  ified set of cha
26a0: 6e 67 65 73 20 77 69 74 68 20 74 68 65 20 6f 6e  nges with the on
26b0: 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  es..        /// 
26c0: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69  contained in thi
26d0: 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  s instance...   
26e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
26f0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2700: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 68   <param name="ch
2710: 61 6e 67 65 53 65 74 22 3e 0d 0a 20 20 20 20 20  angeSet">..     
2720: 20 20 20 2f 2f 2f 20 54 68 65 20 63 68 61 6e 67     /// The chang
2730: 65 73 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65  es to be combine
2740: 64 20 77 69 74 68 20 74 68 6f 73 65 20 69 6e 20  d with those in 
2750: 74 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  this instance...
2760: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2770: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
2780: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2790: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77       /// The new
27a0: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
27b0: 69 74 65 43 68 61 6e 67 65 53 65 74 22 20 2f 3e  iteChangeSet" />
27c0: 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20 72   instance that r
27d0: 65 70 72 65 73 65 6e 74 73 0d 0a 20 20 20 20 20  epresents..     
27e0: 20 20 20 2f 2f 2f 20 74 68 65 20 72 65 73 75 6c     /// the resul
27f0: 74 69 6e 67 20 73 65 74 20 6f 66 20 63 68 61 6e  ting set of chan
2800: 67 65 73 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66  ges -OR- null if
2810: 20 69 74 20 69 73 20 6e 6f 74 20 61 76 61 69 6c   it is not avail
2820: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
2830: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2840: 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 43 68         ISQLiteCh
2850: 61 6e 67 65 53 65 74 20 43 6f 6d 62 69 6e 65 57  angeSet CombineW
2860: 69 74 68 28 49 53 51 4c 69 74 65 43 68 61 6e 67  ith(ISQLiteChang
2870: 65 53 65 74 20 63 68 61 6e 67 65 53 65 74 29 3b  eSet changeSet);
2880: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
2890: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28a0: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
28b0: 74 6f 20 61 70 70 6c 79 20 74 68 65 20 73 65 74  to apply the set
28c0: 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74   of changes in t
28d0: 68 69 73 20 69 6e 73 74 61 6e 63 65 20 74 6f 20  his instance to 
28e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
28f0: 20 61 73 73 6f 63 69 61 74 65 64 20 64 61 74 61   associated data
2900: 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  base...        /
2910: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2920: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2930: 6d 20 6e 61 6d 65 3d 22 63 6f 6e 66 6c 69 63 74  m name="conflict
2940: 43 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20  Callback">..    
2950: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
2960: 20 63 72 65 66 3d 22 53 65 73 73 69 6f 6e 43 6f   cref="SessionCo
2970: 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 22 20  nflictCallback" 
2980: 2f 3e 20 64 65 6c 65 67 61 74 65 20 74 68 61 74  /> delegate that
2990: 20 77 69 6c 6c 20 6e 65 65 64 0d 0a 20 20 20 20   will need..    
29a0: 20 20 20 20 2f 2f 2f 20 74 6f 20 68 61 6e 64 6c      /// to handl
29b0: 65 20 61 6e 79 20 63 6f 6e 66 6c 69 63 74 69 6e  e any conflictin
29c0: 67 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 6d  g changes that m
29d0: 61 79 20 61 72 69 73 65 2e 0d 0a 20 20 20 20 20  ay arise...     
29e0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
29f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
2a00: 72 61 6d 20 6e 61 6d 65 3d 22 63 6c 69 65 6e 74  ram name="client
2a10: 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20  Data">..        
2a20: 2f 2f 2f 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c  /// The optional
2a30: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66   application-def
2a40: 69 6e 65 64 20 63 6f 6e 74 65 78 74 20 64 61 74  ined context dat
2a50: 61 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d  a.  This value m
2a60: 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  ay be..        /
2a70: 2f 2f 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  // null...      
2a80: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2a90: 20 20 20 20 20 20 20 20 76 6f 69 64 20 41 70 70          void App
2aa0: 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly(..           
2ab0: 20 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74   SessionConflict
2ac0: 43 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 6c 69 63  Callback conflic
2ad0: 74 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  tCallback,..    
2ae0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2af0: 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20  lientData..     
2b00: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
2b10: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2b20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65          /// Atte
2b30: 6d 70 74 73 20 74 6f 20 61 70 70 6c 79 20 74 68  mpts to apply th
2b40: 65 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73  e set of changes
2b50: 20 69 6e 20 74 68 69 73 20 69 6e 73 74 61 6e 63   in this instanc
2b60: 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
2b70: 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
2b80: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
2b90: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2ba0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2bb0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
2bc0: 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 22 3e 0d  flictCallback">.
2bd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
2be0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 65 73 73   <see cref="Sess
2bf0: 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  ionConflictCallb
2c00: 61 63 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74 65  ack" /> delegate
2c10: 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 0d   that will need.
2c20: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
2c30: 68 61 6e 64 6c 65 20 61 6e 79 20 63 6f 6e 66 6c  handle any confl
2c40: 69 63 74 69 6e 67 20 63 68 61 6e 67 65 73 20 74  icting changes t
2c50: 68 61 74 20 6d 61 79 20 61 72 69 73 65 2e 0d 0a  hat may arise...
2c60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2c70: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
2c80: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
2c90: 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61  ableFilterCallba
2ca0: 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ck">..        //
2cb0: 2f 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 3c  / The optional <
2cc0: 73 65 65 20 63 72 65 66 3d 22 53 65 73 73 69 6f  see cref="Sessio
2cd0: 6e 54 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c  nTableFilterCall
2ce0: 62 61 63 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74  back" /> delegat
2cf0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
2d00: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
2d10: 74 6f 20 66 69 6c 74 65 72 20 74 68 65 20 6c 69  to filter the li
2d20: 73 74 20 6f 66 20 74 61 62 6c 65 73 20 69 6d 70  st of tables imp
2d30: 61 63 74 65 64 20 62 79 20 74 68 65 20 73 65 74  acted by the set
2d40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66  ..        /// of
2d50: 20 63 68 61 6e 67 65 73 2e 0d 0a 20 20 20 20 20   changes...     
2d60: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2d70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
2d80: 72 61 6d 20 6e 61 6d 65 3d 22 63 6c 69 65 6e 74  ram name="client
2d90: 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20  Data">..        
2da0: 2f 2f 2f 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c  /// The optional
2db0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66   application-def
2dc0: 69 6e 65 64 20 63 6f 6e 74 65 78 74 20 64 61 74  ined context dat
2dd0: 61 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d  a.  This value m
2de0: 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  ay be..        /
2df0: 2f 2f 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  // null...      
2e00: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2e10: 20 20 20 20 20 20 20 20 76 6f 69 64 20 41 70 70          void App
2e20: 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly(..           
2e30: 20 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74   SessionConflict
2e40: 43 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 6c 69 63  Callback conflic
2e50: 74 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  tCallback,..    
2e60: 20 20 20 20 20 20 20 20 53 65 73 73 69 6f 6e 54          SessionT
2e70: 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61  ableFilterCallba
2e80: 63 6b 20 74 61 62 6c 65 46 69 6c 74 65 72 43 61  ck tableFilterCa
2e90: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
2ea0: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
2eb0: 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ntData..        
2ec0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  );..    }..    #
2ed0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2ee0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f30: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
2f40: 69 74 65 43 68 61 6e 67 65 47 72 6f 75 70 20 49  iteChangeGroup I
2f50: 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f  nterface..    //
2f60: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2f70: 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66   /// This interf
2f80: 61 63 65 20 63 6f 6e 74 61 69 6e 73 20 6d 65 74  ace contains met
2f90: 68 6f 64 73 20 75 73 65 64 20 74 6f 20 6d 61 6e  hods used to man
2fa0: 69 70 75 6c 61 74 65 20 6d 75 6c 74 69 70 6c 65  ipulate multiple
2fb0: 20 73 65 74 73 20 6f 66 0d 0a 20 20 20 20 2f 2f   sets of..    //
2fc0: 2f 20 63 68 61 6e 67 65 73 20 66 6f 72 20 61 20  / changes for a 
2fd0: 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f  database...    /
2fe0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2ff0: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66     public interf
3000: 61 63 65 20 49 53 51 4c 69 74 65 43 68 61 6e 67  ace ISQLiteChang
3010: 65 47 72 6f 75 70 20 3a 20 49 44 69 73 70 6f 73  eGroup : IDispos
3020: 61 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  able..    {..   
3030: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
3040: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
3050: 41 74 74 65 6d 70 74 73 20 74 6f 20 61 64 64 20  Attempts to add 
3060: 61 20 63 68 61 6e 67 65 20 73 65 74 20 28 6f 72  a change set (or
3070: 20 70 61 74 63 68 20 73 65 74 29 20 74 6f 20 74   patch set) to t
3080: 68 69 73 20 63 68 61 6e 67 65 20 67 72 6f 75 70  his change group
3090: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
30a0: 73 74 61 6e 63 65 2e 20 20 54 68 65 20 75 6e 64  stance.  The und
30b0: 65 72 6c 79 69 6e 67 20 64 61 74 61 20 6d 75 73  erlying data mus
30c0: 74 20 62 65 20 63 6f 6e 74 61 69 6e 65 64 20 65  t be contained e
30d0: 6e 74 69 72 65 6c 79 20 77 69 74 68 69 6e 0d 0a  ntirely within..
30e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
30f0: 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
3100: 72 61 77 44 61 74 61 22 20 2f 3e 20 62 79 74 65  rawData" /> byte
3110: 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20   array...       
3120: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3130: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
3140: 72 61 6d 20 6e 61 6d 65 3d 22 72 61 77 44 61 74  ram name="rawDat
3150: 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  a">..        ///
3160: 20 54 68 65 20 72 61 77 20 62 79 74 65 20 64 61   The raw byte da
3170: 74 61 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  ta for the speci
3180: 66 69 65 64 20 63 68 61 6e 67 65 20 73 65 74 20  fied change set 
3190: 28 6f 72 20 70 61 74 63 68 20 73 65 74 29 2e 0d  (or patch set)..
31a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
31b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 76  aram>..        v
31c0: 6f 69 64 20 41 64 64 43 68 61 6e 67 65 53 65 74  oid AddChangeSet
31d0: 28 62 79 74 65 5b 5d 20 72 61 77 44 61 74 61 29  (byte[] rawData)
31e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
31f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3200: 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73      /// Attempts
3210: 20 74 6f 20 61 64 64 20 61 20 63 68 61 6e 67 65   to add a change
3220: 20 73 65 74 20 28 6f 72 20 70 61 74 63 68 20 73   set (or patch s
3230: 65 74 29 20 74 6f 20 74 68 69 73 20 63 68 61 6e  et) to this chan
3240: 67 65 20 67 72 6f 75 70 0d 0a 20 20 20 20 20 20  ge group..      
3250: 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 20    /// instance. 
3260: 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   The underlying 
3270: 64 61 74 61 20 77 69 6c 6c 20 62 65 20 72 65 61  data will be rea
3280: 64 20 66 72 6f 6d 20 74 68 65 20 73 70 65 63 69  d from the speci
3290: 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  fied..        //
32a0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72  / <see cref="Str
32b0: 65 61 6d 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  eam" />...      
32c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
32d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
32e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 65 61  aram name="strea
32f0: 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  m">..        ///
3300: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
3310: 53 74 72 65 61 6d 22 20 2f 3e 20 69 6e 73 74 61  Stream" /> insta
3320: 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  nce containing t
3330: 68 65 20 72 61 77 20 63 68 61 6e 67 65 20 73 65  he raw change se
3340: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 28  t..        /// (
3350: 6f 72 20 70 61 74 63 68 20 73 65 74 29 20 64 61  or patch set) da
3360: 74 61 20 74 6f 20 72 65 61 64 2e 0d 0a 20 20 20  ta to read...   
3370: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
3380: 3e 0d 0a 20 20 20 20 20 20 20 20 76 6f 69 64 20  >..        void 
3390: 41 64 64 43 68 61 6e 67 65 53 65 74 28 53 74 72  AddChangeSet(Str
33a0: 65 61 6d 20 73 74 72 65 61 6d 29 3b 0d 0a 0d 0a  eam stream);....
33b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
33c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
33d0: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 63  // Attempts to c
33e0: 72 65 61 74 65 20 61 6e 64 20 72 65 74 75 72 6e  reate and return
33f0: 2c 20 76 69 61 20 3c 70 61 72 61 6d 72 65 66 20  , via <paramref 
3400: 6e 61 6d 65 3d 22 72 61 77 44 61 74 61 22 20 2f  name="rawData" /
3410: 3e 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  >, the..        
3420: 2f 2f 2f 20 63 6f 6d 62 69 6e 65 64 20 73 65 74  /// combined set
3430: 20 6f 66 20 63 68 61 6e 67 65 73 20 72 65 70 72   of changes repr
3440: 65 73 65 6e 74 65 64 20 62 79 20 74 68 69 73 20  esented by this 
3450: 63 68 61 6e 67 65 20 67 72 6f 75 70 20 69 6e 73  change group ins
3460: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
3470: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3480: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
3490: 61 6d 20 6e 61 6d 65 3d 22 72 61 77 44 61 74 61  am name="rawData
34a0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
34b0: 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
34c0: 69 73 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  is will contain 
34d0: 74 68 65 20 72 61 77 20 62 79 74 65 20 64 61 74  the raw byte dat
34e0: 61 20 66 6f 72 20 61 6c 6c 20 74 68 65 0d 0a 20  a for all the.. 
34f0: 20 20 20 20 20 20 20 2f 2f 2f 20 63 68 61 6e 67         /// chang
3500: 65 73 20 69 6e 20 74 68 69 73 20 63 68 61 6e 67  es in this chang
3510: 65 20 67 72 6f 75 70 20 69 6e 73 74 61 6e 63 65  e group instance
3520: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
3530: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
3540: 20 76 6f 69 64 20 43 72 65 61 74 65 43 68 61 6e   void CreateChan
3550: 67 65 53 65 74 28 72 65 66 20 62 79 74 65 5b 5d  geSet(ref byte[]
3560: 20 72 61 77 44 61 74 61 29 3b 0d 0a 0d 0a 20 20   rawData);....  
3570: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
3580: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3590: 20 41 74 74 65 6d 70 74 73 20 74 6f 20 63 72 65   Attempts to cre
35a0: 61 74 65 20 61 6e 64 20 77 72 69 74 65 2c 20 76  ate and write, v
35b0: 69 61 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  ia <paramref nam
35c0: 65 3d 22 73 74 72 65 61 6d 22 20 2f 3e 2c 20 74  e="stream" />, t
35d0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
35e0: 63 6f 6d 62 69 6e 65 64 20 73 65 74 20 6f 66 20  combined set of 
35f0: 63 68 61 6e 67 65 73 20 72 65 70 72 65 73 65 6e  changes represen
3600: 74 65 64 20 62 79 20 74 68 69 73 20 63 68 61 6e  ted by this chan
3610: 67 65 20 67 72 6f 75 70 20 69 6e 73 74 61 6e 63  ge group instanc
3620: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
3630: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3640: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
3650: 61 6d 65 3d 22 73 74 72 65 61 6d 22 3e 0d 0a 20  ame="stream">.. 
3660: 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
3670: 73 75 63 63 65 73 73 2c 20 74 68 65 20 72 61 77  success, the raw
3680: 20 62 79 74 65 20 64 61 74 61 20 66 6f 72 20 61   byte data for a
3690: 6c 6c 20 74 68 65 20 63 68 61 6e 67 65 73 20 69  ll the changes i
36a0: 6e 20 74 68 69 73 20 63 68 61 6e 67 65 0d 0a 20  n this change.. 
36b0: 20 20 20 20 20 20 20 2f 2f 2f 20 67 72 6f 75 70         /// group
36c0: 20 69 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20 62   instance will b
36d0: 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68 69  e written to thi
36e0: 73 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72  s <see cref="Str
36f0: 65 61 6d 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  eam" />...      
3700: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3710: 20 20 20 20 20 20 20 20 76 6f 69 64 20 43 72 65          void Cre
3720: 61 74 65 43 68 61 6e 67 65 53 65 74 28 53 74 72  ateChangeSet(Str
3730: 65 61 6d 20 73 74 72 65 61 6d 29 3b 0d 0a 20 20  eam stream);..  
3740: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
3750: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
3760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
37b0: 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 43 68 61  egion ISQLiteCha
37c0: 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61 49 74  ngeSetMetadataIt
37d0: 65 6d 20 49 6e 74 65 72 66 61 63 65 0d 0a 20 20  em Interface..  
37e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
37f0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 6e  .    /// This in
3800: 74 65 72 66 61 63 65 20 63 6f 6e 74 61 69 6e 73  terface contains
3810: 20 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64 20   properties and 
3820: 6d 65 74 68 6f 64 73 20 75 73 65 64 20 74 6f 20  methods used to 
3830: 66 65 74 63 68 20 6d 65 74 61 64 61 74 61 0d 0a  fetch metadata..
3840: 20 20 20 20 2f 2f 2f 20 61 62 6f 75 74 20 6f 6e      /// about on
3850: 65 20 63 68 61 6e 67 65 20 77 69 74 68 69 6e 20  e change within 
3860: 61 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73  a set of changes
3870: 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 2e   for a database.
3880: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3890: 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
38a0: 20 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69   interface ISQLi
38b0: 74 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64  teChangeSetMetad
38c0: 61 74 61 49 74 65 6d 20 3a 20 49 44 69 73 70 6f  ataItem : IDispo
38d0: 73 61 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20  sable..    {..  
38e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
38f0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3900: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
3910: 20 74 61 62 6c 65 20 74 68 65 20 63 68 61 6e 67   table the chang
3920: 65 20 77 61 73 20 6d 61 64 65 20 74 6f 2e 0d 0a  e was made to...
3930: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
3940: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3950: 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d 65  string TableName
3960: 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20   { get; }....   
3970: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
3980: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
3990: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  The number of co
39a0: 6c 75 6d 6e 73 20 69 6d 70 61 63 74 65 64 20 62  lumns impacted b
39b0: 79 20 74 68 69 73 20 63 68 61 6e 67 65 2e 20 20  y this change.  
39c0: 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e 20 62  This value can b
39d0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75  e..        /// u
39e0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
39f0: 20 74 68 65 20 68 69 67 68 65 73 74 20 76 61 6c   the highest val
3a00: 69 64 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  id column index 
3a10: 74 68 61 74 20 6d 61 79 20 62 65 20 75 73 65 64  that may be used
3a20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
3a30: 74 68 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  th the <see cref
3a40: 3d 22 47 65 74 4f 6c 64 56 61 6c 75 65 22 20 2f  ="GetOldValue" /
3a50: 3e 2c 20 3c 73 65 65 20 63 72 65 66 3d 22 47 65  >, <see cref="Ge
3a60: 74 4e 65 77 56 61 6c 75 65 22 20 2f 3e 2c 0d 0a  tNewValue" />,..
3a70: 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20          /// and 
3a80: 3c 73 65 65 20 63 72 65 66 3d 22 47 65 74 43 6f  <see cref="GetCo
3a90: 6e 66 6c 69 63 74 56 61 6c 75 65 22 20 2f 3e 20  nflictValue" /> 
3aa0: 6d 65 74 68 6f 64 73 20 6f 66 20 74 68 69 73 20  methods of this 
3ab0: 69 6e 74 65 72 66 61 63 65 2e 20 20 49 74 0d 0a  interface.  It..
3ac0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c          /// will
3ad0: 20 62 65 20 74 68 69 73 20 76 61 6c 75 65 20 6d   be this value m
3ae0: 69 6e 75 73 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  inus one...     
3af0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3b00: 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 4e  >..        int N
3b10: 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 7b  umberOfColumns {
3b20: 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20   get; }....     
3b30: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3b40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
3b50: 69 73 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  is will contain 
3b60: 74 68 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  the value..     
3b70: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
3b80: 3d 22 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a  ="SQLiteAuthoriz
3b90: 65 72 41 63 74 69 6f 6e 43 6f 64 65 2e 49 6e 73  erActionCode.Ins
3ba0: 65 72 74 22 20 2f 3e 2c 0d 0a 20 20 20 20 20 20  ert" />,..      
3bb0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
3bc0: 22 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65  "SQLiteAuthorize
3bd0: 72 41 63 74 69 6f 6e 43 6f 64 65 2e 55 70 64 61  rActionCode.Upda
3be0: 74 65 22 20 2f 3e 2c 20 6f 72 0d 0a 20 20 20 20  te" />, or..    
3bf0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
3c00: 66 3d 22 53 51 4c 69 74 65 41 75 74 68 6f 72 69  f="SQLiteAuthori
3c10: 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 2e 44 65  zerActionCode.De
3c20: 6c 65 74 65 22 20 2f 3e 2c 20 63 6f 72 72 65 73  lete" />, corres
3c30: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20  ponding to..    
3c40: 20 20 20 20 2f 2f 2f 20 74 68 65 20 6f 76 65 72      /// the over
3c50: 61 6c 6c 20 74 79 70 65 20 6f 66 20 63 68 61 6e  all type of chan
3c60: 67 65 20 74 68 69 73 20 69 74 65 6d 20 72 65 70  ge this item rep
3c70: 72 65 73 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20  resents...      
3c80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3c90: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
3ca0: 41 75 74 68 6f 72 69 7a 65 72 41 63 74 69 6f 6e  AuthorizerAction
3cb0: 43 6f 64 65 20 4f 70 65 72 61 74 69 6f 6e 43 6f  Code OperationCo
3cc0: 64 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20  de { get; }.... 
3cd0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
3ce0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3cf0: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
3d00: 69 73 20 63 68 61 6e 67 65 20 69 73 20 63 6f 6e  is change is con
3d10: 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 69 6e  sidered to be in
3d20: 64 69 72 65 63 74 20 28 69 2e 65 2e 20 61 73 0d  direct (i.e. as.
3d30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 6f  .        /// tho
3d40: 75 67 68 20 74 68 65 79 20 77 65 72 65 20 6d 61  ugh they were ma
3d50: 64 65 20 76 69 61 20 61 20 74 72 69 67 67 65 72  de via a trigger
3d60: 20 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20   or foreign key 
3d70: 61 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20  action)...      
3d80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3d90: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 49  ..        bool I
3da0: 6e 64 69 72 65 63 74 20 7b 20 67 65 74 3b 20 7d  ndirect { get; }
3db0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
3dc0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
3dd0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 61 72 72 61     /// This arra
3de0: 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 3c 73 65  y contains a <se
3df0: 65 20 63 72 65 66 3d 22 42 6f 6f 6c 65 61 6e 22  e cref="Boolean"
3e00: 20 2f 3e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /> for each col
3e10: 75 6d 6e 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  umn in..        
3e20: 2f 2f 2f 20 74 68 65 20 74 61 62 6c 65 20 61 73  /// the table as
3e30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
3e40: 69 73 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20  is change.  The 
3e50: 65 6c 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20  element will be 
3e60: 7a 65 72 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  zero..        //
3e70: 2f 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  / if the column 
3e80: 69 73 20 6e 6f 74 20 70 61 72 74 20 6f 66 20 74  is not part of t
3e90: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 3b 20  he primary key; 
3ea0: 6f 74 68 65 72 77 69 73 65 2c 20 69 74 20 77 69  otherwise, it wi
3eb0: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ll..        /// 
3ec0: 62 65 20 6e 6f 6e 2d 7a 65 72 6f 2e 0d 0a 20 20  be non-zero...  
3ed0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
3ee0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f  ary>..        bo
3ef0: 6f 6c 5b 5d 20 50 72 69 6d 61 72 79 4b 65 79 43  ol[] PrimaryKeyC
3f00: 6f 6c 75 6d 6e 73 20 7b 20 67 65 74 3b 20 7d 0d  olumns { get; }.
3f10: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
3f20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
3f30: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
3f40: 64 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 63 61  d may only be ca
3f50: 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
3f60: 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   a..        /// 
3f70: 3c 73 65 65 20 63 72 65 66 3d 22 53 65 73 73 69  <see cref="Sessi
3f80: 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61  onConflictCallba
3f90: 63 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74 65 20  ck" /> delegate 
3fa0: 77 68 65 6e 20 74 68 65 20 63 6f 6e 66 6c 69 63  when the conflic
3fb0: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  t..        /// t
3fc0: 79 70 65 20 69 73 20 3c 73 65 65 20 63 72 65 66  ype is <see cref
3fd0: 3d 22 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65  ="SQLiteChangeSe
3fe0: 74 43 6f 6e 66 6c 69 63 74 54 79 70 65 2e 46 6f  tConflictType.Fo
3ff0: 72 65 69 67 6e 4b 65 79 22 20 2f 3e 2e 20 20 49  reignKey" />.  I
4000: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  t..        /// r
4010: 65 74 75 72 6e 73 20 74 68 65 20 74 6f 74 61 6c  eturns the total
4020: 20 6e 75 6d 62 65 72 20 6f 66 20 6b 6e 6f 77 6e   number of known
4030: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 69 6f   foreign key vio
4040: 6c 61 74 69 6f 6e 73 20 69 6e 20 74 68 65 0d 0a  lations in the..
4050: 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 73 74          /// dest
4060: 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65  ination database
4070: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
4080: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
4090: 20 20 20 69 6e 74 20 4e 75 6d 62 65 72 4f 66 46     int NumberOfF
40a0: 6f 72 65 69 67 6e 4b 65 79 43 6f 6e 66 6c 69 63  oreignKeyConflic
40b0: 74 73 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20  ts { get; }.... 
40c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
40d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
40e0: 2f 20 51 75 65 72 69 65 73 20 61 6e 64 20 72 65  / Queries and re
40f0: 74 75 72 6e 73 20 74 68 65 20 6f 72 69 67 69 6e  turns the origin
4100: 61 6c 20 76 61 6c 75 65 20 6f 66 20 61 20 67 69  al value of a gi
4110: 76 65 6e 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 74  ven column for t
4120: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  his..        ///
4130: 20 63 68 61 6e 67 65 2e 20 20 54 68 69 73 20 6d   change.  This m
4140: 65 74 68 6f 64 20 6d 61 79 20 6f 6e 6c 79 20 62  ethod may only b
4150: 65 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 74 68  e called when th
4160: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
4170: 73 65 65 20 63 72 65 66 3d 22 4f 70 65 72 61 74  see cref="Operat
4180: 69 6f 6e 43 6f 64 65 22 20 2f 3e 20 68 61 73 20  ionCode" /> has 
4190: 61 20 76 61 6c 75 65 20 6f 66 0d 0a 20 20 20 20  a value of..    
41a0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
41b0: 66 3d 22 53 51 4c 69 74 65 41 75 74 68 6f 72 69  f="SQLiteAuthori
41c0: 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 2e 55 70  zerActionCode.Up
41d0: 64 61 74 65 22 20 2f 3e 20 6f 72 0d 0a 20 20 20  date" /> or..   
41e0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
41f0: 65 66 3d 22 53 51 4c 69 74 65 41 75 74 68 6f 72  ef="SQLiteAuthor
4200: 69 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 2e 44  izerActionCode.D
4210: 65 6c 65 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20  elete" />...    
4220: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4230: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
4240: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6c  <param name="col
4250: 75 6d 6e 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20  umnIndex">..    
4260: 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65      /// The inde
4270: 78 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  x for the column
4280: 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d 75  .  This value mu
4290: 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 7a 65  st be between ze
42a0: 72 6f 20 61 6e 64 20 6f 6e 65 0d 0a 20 20 20 20  ro and one..    
42b0: 20 20 20 20 2f 2f 2f 20 6c 65 73 73 20 74 68 61      /// less tha
42c0: 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  n the total numb
42d0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
42e0: 72 20 74 68 69 73 20 74 61 62 6c 65 2e 0d 0a 20  r this table... 
42f0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
4300: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
4310: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
4320: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67      /// The orig
4330: 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 61 20  inal value of a 
4340: 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 20 66 6f 72  given column for
4350: 20 74 68 69 73 20 63 68 61 6e 67 65 2e 0d 0a 20   this change... 
4360: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
4370: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
4380: 51 4c 69 74 65 56 61 6c 75 65 20 47 65 74 4f 6c  QLiteValue GetOl
4390: 64 56 61 6c 75 65 28 69 6e 74 20 63 6f 6c 75 6d  dValue(int colum
43a0: 6e 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20  nIndex);....    
43b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
43c0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 51  >..        /// Q
43d0: 75 65 72 69 65 73 20 61 6e 64 20 72 65 74 75 72  ueries and retur
43e0: 6e 73 20 74 68 65 20 75 70 64 61 74 65 64 20 76  ns the updated v
43f0: 61 6c 75 65 20 6f 66 20 61 20 67 69 76 65 6e 20  alue of a given 
4400: 63 6f 6c 75 6d 6e 20 66 6f 72 20 74 68 69 73 0d  column for this.
4410: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 68 61  .        /// cha
4420: 6e 67 65 2e 20 20 54 68 69 73 20 6d 65 74 68 6f  nge.  This metho
4430: 64 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 63 61  d may only be ca
4440: 6c 6c 65 64 20 77 68 65 6e 20 74 68 65 0d 0a 20  lled when the.. 
4450: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
4460: 63 72 65 66 3d 22 4f 70 65 72 61 74 69 6f 6e 43  cref="OperationC
4470: 6f 64 65 22 20 2f 3e 20 68 61 73 20 61 20 76 61  ode" /> has a va
4480: 6c 75 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  lue of..        
4490: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
44a0: 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 41  QLiteAuthorizerA
44b0: 63 74 69 6f 6e 43 6f 64 65 2e 49 6e 73 65 72 74  ctionCode.Insert
44c0: 22 20 2f 3e 20 6f 72 0d 0a 20 20 20 20 20 20 20  " /> or..       
44d0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
44e0: 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72  SQLiteAuthorizer
44f0: 41 63 74 69 6f 6e 43 6f 64 65 2e 55 70 64 61 74  ActionCode.Updat
4500: 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  e" />...        
4510: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4520: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
4530: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6c 75 6d 6e 49  am name="columnI
4540: 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  ndex">..        
4550: 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20 66 6f  /// The index fo
4560: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20 54  r the column.  T
4570: 68 69 73 20 76 61 6c 75 65 20 6d 75 73 74 20 62  his value must b
4580: 65 20 62 65 74 77 65 65 6e 20 7a 65 72 6f 20 61  e between zero a
4590: 6e 64 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20  nd one..        
45a0: 2f 2f 2f 20 6c 65 73 73 20 74 68 61 6e 20 74 68  /// less than th
45b0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
45c0: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 74 68  f columns for th
45d0: 69 73 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  is table...     
45e0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
45f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
4600: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
4610: 2f 2f 2f 20 54 68 65 20 75 70 64 61 74 65 64 20  /// The updated 
4620: 76 61 6c 75 65 20 6f 66 20 61 20 67 69 76 65 6e  value of a given
4630: 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 74 68 69 73   column for this
4640: 20 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20 20 20   change...      
4650: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
4660: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
4670: 56 61 6c 75 65 20 47 65 74 4e 65 77 56 61 6c 75  Value GetNewValu
4680: 65 28 69 6e 74 20 63 6f 6c 75 6d 6e 49 6e 64 65  e(int columnInde
4690: 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  x);....        /
46a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
46b0: 20 20 20 20 20 20 2f 2f 2f 20 51 75 65 72 69 65        /// Querie
46c0: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
46d0: 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 76 61  e conflicting va
46e0: 6c 75 65 20 6f 66 20 61 20 67 69 76 65 6e 20 63  lue of a given c
46f0: 6f 6c 75 6d 6e 20 66 6f 72 0d 0a 20 20 20 20 20  olumn for..     
4700: 20 20 20 2f 2f 2f 20 74 68 69 73 20 63 68 61 6e     /// this chan
4710: 67 65 2e 20 20 54 68 69 73 20 6d 65 74 68 6f 64  ge.  This method
4720: 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 63 61 6c   may only be cal
4730: 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
4740: 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
4750: 73 65 65 20 63 72 65 66 3d 22 53 65 73 73 69 6f  see cref="Sessio
4760: 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63  nConflictCallbac
4770: 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74 65 20 77  k" /> delegate w
4780: 68 65 6e 20 74 68 65 20 63 6f 6e 66 6c 69 63 74  hen the conflict
4790: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 79  ..        /// ty
47a0: 70 65 20 69 73 20 3c 73 65 65 20 63 72 65 66 3d  pe is <see cref=
47b0: 22 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  "SQLiteChangeSet
47c0: 43 6f 6e 66 6c 69 63 74 54 79 70 65 2e 44 61 74  ConflictType.Dat
47d0: 61 22 20 2f 3e 20 6f 72 0d 0a 20 20 20 20 20 20  a" /> or..      
47e0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
47f0: 22 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  "SQLiteChangeSet
4800: 43 6f 6e 66 6c 69 63 74 54 79 70 65 2e 43 6f 6e  ConflictType.Con
4810: 66 6c 69 63 74 22 20 2f 3e 2e 0d 0a 20 20 20 20  flict" />...    
4820: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4830: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
4840: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6c  <param name="col
4850: 75 6d 6e 49 6e 64 65 78 22 3e 0d 0a 20 20 20 20  umnIndex">..    
4860: 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65      /// The inde
4870: 78 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  x for the column
4880: 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d 75  .  This value mu
4890: 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 7a 65  st be between ze
48a0: 72 6f 20 61 6e 64 20 6f 6e 65 0d 0a 20 20 20 20  ro and one..    
48b0: 20 20 20 20 2f 2f 2f 20 6c 65 73 73 20 74 68 61      /// less tha
48c0: 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  n the total numb
48d0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
48e0: 72 20 74 68 69 73 20 74 61 62 6c 65 2e 0d 0a 20  r this table... 
48f0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
4900: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
4910: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
4920: 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 66      /// The conf
4930: 6c 69 63 74 69 6e 67 20 76 61 6c 75 65 20 6f 66  licting value of
4940: 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 20   a given column 
4950: 66 6f 72 20 74 68 69 73 20 63 68 61 6e 67 65 2e  for this change.
4960: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
4970: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
4980: 20 20 53 51 4c 69 74 65 56 61 6c 75 65 20 47 65    SQLiteValue Ge
4990: 74 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 28 69  tConflictValue(i
49a0: 6e 74 20 63 6f 6c 75 6d 6e 49 6e 64 65 78 29 3b  nt columnIndex);
49b0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
49c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
49d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4a20: 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74    #region ISQLit
4a30: 65 53 65 73 73 69 6f 6e 20 49 6e 74 65 72 66 61  eSession Interfa
4a40: 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ce..    /// <sum
4a50: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
4a60: 68 69 73 20 69 6e 74 65 72 66 61 63 65 20 63 6f  his interface co
4a70: 6e 74 61 69 6e 73 20 6d 65 74 68 6f 64 73 20 74  ntains methods t
4a80: 6f 20 71 75 65 72 79 20 61 6e 64 20 6d 61 6e 69  o query and mani
4a90: 70 75 6c 61 74 65 20 74 68 65 20 73 74 61 74 65  pulate the state
4aa0: 20 6f 66 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 63   of a..    /// c
4ab0: 68 61 6e 67 65 20 74 72 61 63 6b 69 6e 67 20 73  hange tracking s
4ac0: 65 73 73 69 6f 6e 20 66 6f 72 20 61 20 64 61 74  ession for a dat
4ad0: 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  abase...    /// 
4ae0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
4af0: 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65  public interface
4b00: 20 49 53 51 4c 69 74 65 53 65 73 73 69 6f 6e 20   ISQLiteSession 
4b10: 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20  : IDisposable.. 
4b20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
4b30: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4b40: 20 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69       /// Determi
4b50: 6e 65 73 20 69 66 20 74 68 69 73 20 73 65 73 73  nes if this sess
4b60: 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
4b70: 20 74 72 61 63 6b 69 6e 67 20 63 68 61 6e 67 65   tracking change
4b80: 73 20 74 6f 20 69 74 73 0d 0a 20 20 20 20 20 20  s to its..      
4b90: 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
4ba0: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
4bb0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4bc0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
4bd0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
4be0: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
4bf0: 69 66 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  if changes to th
4c00: 65 20 61 73 73 6f 63 69 61 74 65 64 20 64 61 74  e associated dat
4c10: 61 62 61 73 65 20 61 72 65 20 62 65 69 6e 67 20  abase are being 
4c20: 74 72 61 6b 63 65 64 3b 0d 0a 20 20 20 20 20 20  trakced;..      
4c30: 20 20 2f 2f 2f 20 6f 74 68 65 72 77 69 73 65 2c    /// otherwise,
4c40: 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20   zero...        
4c50: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
4c60: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 49 73 45          bool IsE
4c70: 6e 61 62 6c 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  nabled();....   
4c80: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
4c90: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
4ca0: 45 6e 61 62 6c 65 73 20 74 72 61 63 6b 69 6e 67  Enables tracking
4cb0: 20 6f 66 20 63 68 61 6e 67 65 73 20 74 6f 20 74   of changes to t
4cc0: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 64 61  he associated da
4cd0: 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 20  tabase...       
4ce0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4cf0: 0a 20 20 20 20 20 20 20 20 76 6f 69 64 20 53 65  .        void Se
4d00: 74 54 6f 45 6e 61 62 6c 65 64 28 29 3b 0d 0a 0d  tToEnabled();...
4d10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
4d20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
4d30: 2f 2f 2f 20 44 69 73 61 62 6c 65 73 20 74 72 61  /// Disables tra
4d40: 63 6b 69 6e 67 20 6f 66 20 63 68 61 6e 67 65 73  cking of changes
4d50: 20 74 6f 20 74 68 65 20 61 73 73 6f 63 69 61 74   to the associat
4d60: 65 64 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20  ed database...  
4d70: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
4d80: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 76 6f  ary>..        vo
4d90: 69 64 20 53 65 74 54 6f 44 69 73 61 62 6c 65 64  id SetToDisabled
4da0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ();....        /
4db0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
4dc0: 20 20 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d        /// Determ
4dd0: 69 6e 65 73 20 69 66 20 74 68 69 73 20 73 65 73  ines if this ses
4de0: 73 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  sion is currentl
4df0: 79 20 73 65 74 20 74 6f 20 6d 61 72 6b 20 63 68  y set to mark ch
4e00: 61 6e 67 65 73 20 61 73 0d 0a 20 20 20 20 20 20  anges as..      
4e10: 20 20 2f 2f 2f 20 69 6e 64 69 72 65 63 74 20 28    /// indirect (
4e20: 69 2e 65 2e 20 61 73 20 74 68 6f 75 67 68 20 74  i.e. as though t
4e30: 68 65 79 20 77 65 72 65 20 6d 61 64 65 20 76 69  hey were made vi
4e40: 61 20 61 20 74 72 69 67 67 65 72 20 6f 72 20 66  a a trigger or f
4e50: 6f 72 65 69 67 6e 0d 0a 20 20 20 20 20 20 20 20  oreign..        
4e60: 2f 2f 2f 20 6b 65 79 20 61 63 74 69 6f 6e 29 2e  /// key action).
4e70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
4e80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
4e90: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
4ea0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
4eb0: 2d 7a 65 72 6f 20 69 66 20 63 68 61 6e 67 65 73  -zero if changes
4ec0: 20 74 6f 20 74 68 65 20 61 73 73 6f 63 69 61 74   to the associat
4ed0: 65 64 20 64 61 74 61 62 61 73 65 20 61 72 65 20  ed database are 
4ee0: 62 65 69 6e 67 20 6d 61 72 6b 65 64 20 61 73 0d  being marked as.
4ef0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64  .        /// ind
4f00: 69 72 65 63 74 3b 20 6f 74 68 65 72 77 69 73 65  irect; otherwise
4f10: 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20  , zero...       
4f20: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
4f30: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 49 73  .        bool Is
4f40: 49 6e 64 69 72 65 63 74 28 29 3b 0d 0a 0d 0a 20  Indirect();.... 
4f50: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
4f60: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
4f70: 2f 20 53 65 74 73 20 74 68 65 20 69 6e 64 69 72  / Sets the indir
4f80: 65 63 74 20 66 6c 61 67 20 66 6f 72 20 74 68 69  ect flag for thi
4f90: 73 20 73 65 73 73 69 6f 6e 2e 20 20 53 75 62 73  s session.  Subs
4fa0: 65 71 75 65 6e 74 20 63 68 61 6e 67 65 73 20 77  equent changes w
4fb0: 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
4fc0: 20 62 65 20 6d 61 72 6b 65 64 20 61 73 20 69 6e   be marked as in
4fd0: 64 69 72 65 63 74 20 75 6e 74 69 6c 20 74 68 69  direct until thi
4fe0: 73 20 66 6c 61 67 20 69 73 20 63 68 61 6e 67 65  s flag is change
4ff0: 64 20 61 67 61 69 6e 2e 0d 0a 20 20 20 20 20 20  d again...      
5000: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5010: 0d 0a 20 20 20 20 20 20 20 20 76 6f 69 64 20 53  ..        void S
5020: 65 74 54 6f 49 6e 64 69 72 65 63 74 28 29 3b 0d  etToIndirect();.
5030: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
5040: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
5050: 20 20 2f 2f 2f 20 43 6c 65 61 72 73 20 74 68 65    /// Clears the
5060: 20 69 6e 64 69 72 65 63 74 20 66 6c 61 67 20 66   indirect flag f
5070: 6f 72 20 74 68 69 73 20 73 65 73 73 69 6f 6e 2e  or this session.
5080: 20 20 53 75 62 73 65 71 75 65 6e 74 20 63 68 61    Subsequent cha
5090: 6e 67 65 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20  nges will..     
50a0: 20 20 20 2f 2f 2f 20 62 65 20 6d 61 72 6b 65 64     /// be marked
50b0: 20 61 73 20 64 69 72 65 63 74 20 75 6e 74 69 6c   as direct until
50c0: 20 74 68 69 73 20 66 6c 61 67 20 69 73 20 63 68   this flag is ch
50d0: 61 6e 67 65 64 20 61 67 61 69 6e 2e 0d 0a 20 20  anged again...  
50e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
50f0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 76 6f  ary>..        vo
5100: 69 64 20 53 65 74 54 6f 44 69 72 65 63 74 28 29  id SetToDirect()
5110: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
5120: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5130: 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
5140: 65 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20  es if there are 
5150: 61 6e 79 20 74 72 61 63 6b 65 64 20 63 68 61 6e  any tracked chan
5160: 67 65 73 20 63 75 72 72 65 6e 74 6c 79 20 77 69  ges currently wi
5170: 74 68 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  thin the..      
5180: 20 20 2f 2f 2f 20 64 61 74 61 20 66 6f 72 20 74    /// data for t
5190: 68 69 73 20 73 65 73 73 69 6f 6e 2e 0d 0a 20 20  his session...  
51a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
51b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
51c0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
51d0: 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
51e0: 6f 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  o if there are n
51f0: 6f 20 63 68 61 6e 67 65 73 20 77 69 74 68 69 6e  o changes within
5200: 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
5210: 69 73 20 73 65 73 73 69 6f 6e 3b 0d 0a 20 20 20  is session;..   
5220: 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 77 69       /// otherwi
5230: 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  se, zero...     
5240: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
5250: 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  >..        bool 
5260: 49 73 45 6d 70 74 79 28 29 3b 0d 0a 0d 0a 20 20  IsEmpty();....  
5270: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
5280: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
5290: 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 63   Upon success, c
52a0: 61 75 73 65 73 20 63 68 61 6e 67 65 73 20 74 6f  auses changes to
52b0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
52c0: 61 62 6c 65 28 73 29 20 74 6f 20 73 74 61 72 74  able(s) to start
52d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65  ..        /// be
52e0: 69 6e 67 20 74 72 61 63 6b 65 64 2e 20 20 41 6e  ing tracked.  An
52f0: 79 20 74 61 62 6c 65 73 20 69 6d 70 61 63 74 65  y tables impacte
5300: 64 20 62 79 20 63 61 6c 6c 73 20 74 6f 20 74 68  d by calls to th
5310: 69 73 20 6d 65 74 68 6f 64 20 77 69 6c 6c 0d 0a  is method will..
5320: 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f 74 20          /// not 
5330: 63 61 75 73 65 20 74 68 65 20 3c 73 65 65 20 63  cause the <see c
5340: 72 65 66 3d 22 53 65 73 73 69 6f 6e 54 61 62 6c  ref="SessionTabl
5350: 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 22  eFilterCallback"
5360: 20 2f 3e 20 63 61 6c 6c 62 61 63 6b 0d 0a 20 20   /> callback..  
5370: 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 62 65 20        /// to be 
5380: 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20  invoked...      
5390: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
53a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
53b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
53c0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
53d0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
53e0: 61 62 6c 65 20 74 6f 20 62 65 20 74 72 61 63 6b  able to be track
53f0: 65 64 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 20  ed -OR- null to 
5400: 74 72 61 63 6b 20 61 6c 6c 0d 0a 20 20 20 20 20  track all..     
5410: 20 20 20 2f 2f 2f 20 61 70 70 6c 69 63 61 62 6c     /// applicabl
5420: 65 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20  e tables within 
5430: 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 0d 0a  this database...
5440: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
5450: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 76 6f  ram>..        vo
5460: 69 64 20 41 74 74 61 63 68 54 61 62 6c 65 28 73  id AttachTable(s
5470: 74 72 69 6e 67 20 6e 61 6d 65 29 3b 0d 0a 0d 0a  tring name);....
5480: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
5490: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
54a0: 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
54b0: 73 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  s used to set th
54c0: 65 20 74 61 62 6c 65 20 66 69 6c 74 65 72 20 66  e table filter f
54d0: 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65  or this instance
54e0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
54f0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
5500: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5510: 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22 3e 0d 0a  me="callback">..
5520: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
5530: 74 61 62 6c 65 20 66 69 6c 74 65 72 20 63 61 6c  table filter cal
5540: 6c 62 61 63 6b 20 2d 4f 52 2d 20 6e 75 6c 6c 20  lback -OR- null 
5550: 74 6f 20 63 6c 65 61 72 20 61 6e 79 20 65 78 69  to clear any exi
5560: 73 74 69 6e 67 20 74 61 62 6c 65 0d 0a 20 20 20  sting table..   
5570: 20 20 20 20 20 2f 2f 2f 20 66 69 6c 74 65 72 20       /// filter 
5580: 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 20  callback...     
5590: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
55a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
55b0: 72 61 6d 20 6e 61 6d 65 3d 22 63 6c 69 65 6e 74  ram name="client
55c0: 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20  Data">..        
55d0: 2f 2f 2f 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c  /// The optional
55e0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66   application-def
55f0: 69 6e 65 64 20 63 6f 6e 74 65 78 74 20 64 61 74  ined context dat
5600: 61 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d  a.  This value m
5610: 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  ay be..        /
5620: 2f 2f 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  // null...      
5630: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
5640: 20 20 20 20 20 20 20 20 76 6f 69 64 20 53 65 74          void Set
5650: 54 61 62 6c 65 46 69 6c 74 65 72 28 0d 0a 20 20  TableFilter(..  
5660: 20 20 20 20 20 20 20 20 20 20 53 65 73 73 69 6f            Sessio
5670: 6e 54 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c  nTableFilterCall
5680: 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a  back callback,..
5690: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
56a0: 63 74 20 63 6c 69 65 6e 74 44 61 74 61 0d 0a 20  ct clientData.. 
56b0: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
56c0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
56d0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
56e0: 41 74 74 65 6d 70 74 73 20 74 6f 20 63 72 65 61  Attempts to crea
56f0: 74 65 20 61 6e 64 20 72 65 74 75 72 6e 2c 20 76  te and return, v
5700: 69 61 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  ia <paramref nam
5710: 65 3d 22 72 61 77 44 61 74 61 22 20 2f 3e 2c 20  e="rawData" />, 
5720: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
5730: 20 63 6f 6d 62 69 6e 65 64 20 73 65 74 20 6f 66   combined set of
5740: 20 63 68 61 6e 67 65 73 20 72 65 70 72 65 73 65   changes represe
5750: 6e 74 65 64 20 62 79 20 74 68 69 73 20 73 65 73  nted by this ses
5760: 73 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  sion instance...
5770: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
5780: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5790: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
57a0: 22 72 61 77 44 61 74 61 22 3e 0d 0a 20 20 20 20  "rawData">..    
57b0: 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63      /// Upon suc
57c0: 63 65 73 73 2c 20 74 68 69 73 20 77 69 6c 6c 20  cess, this will 
57d0: 63 6f 6e 74 61 69 6e 20 74 68 65 20 72 61 77 20  contain the raw 
57e0: 62 79 74 65 20 64 61 74 61 20 66 6f 72 20 61 6c  byte data for al
57f0: 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  l the..        /
5800: 2f 2f 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  // changes in th
5810: 69 73 20 73 65 73 73 69 6f 6e 20 69 6e 73 74 61  is session insta
5820: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
5830: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
5840: 20 20 20 20 76 6f 69 64 20 43 72 65 61 74 65 43      void CreateC
5850: 68 61 6e 67 65 53 65 74 28 72 65 66 20 62 79 74  hangeSet(ref byt
5860: 65 5b 5d 20 72 61 77 44 61 74 61 29 3b 0d 0a 0d  e[] rawData);...
5870: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
5880: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5890: 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
58a0: 63 72 65 61 74 65 20 61 6e 64 20 77 72 69 74 65  create and write
58b0: 2c 20 76 69 61 20 3c 70 61 72 61 6d 72 65 66 20  , via <paramref 
58c0: 6e 61 6d 65 3d 22 73 74 72 65 61 6d 22 20 2f 3e  name="stream" />
58d0: 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  , the..        /
58e0: 2f 2f 20 63 6f 6d 62 69 6e 65 64 20 73 65 74 20  // combined set 
58f0: 6f 66 20 63 68 61 6e 67 65 73 20 72 65 70 72 65  of changes repre
5900: 73 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 73  sented by this s
5910: 65 73 73 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e  ession instance.
5920: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5930: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
5940: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5950: 65 3d 22 73 74 72 65 61 6d 22 3e 0d 0a 20 20 20  e="stream">..   
5960: 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
5970: 63 63 65 73 73 2c 20 74 68 65 20 72 61 77 20 62  ccess, the raw b
5980: 79 74 65 20 64 61 74 61 20 66 6f 72 20 61 6c 6c  yte data for all
5990: 20 74 68 65 20 63 68 61 6e 67 65 73 20 69 6e 20   the changes in 
59a0: 74 68 69 73 20 73 65 73 73 69 6f 6e 0d 0a 20 20  this session..  
59b0: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
59c0: 63 65 20 77 69 6c 6c 20 62 65 20 77 72 69 74 74  ce will be writt
59d0: 65 6e 20 74 6f 20 74 68 69 73 20 3c 73 65 65 20  en to this <see 
59e0: 63 72 65 66 3d 22 53 74 72 65 61 6d 22 20 2f 3e  cref="Stream" />
59f0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
5a00: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
5a10: 20 76 6f 69 64 20 43 72 65 61 74 65 43 68 61 6e   void CreateChan
5a20: 67 65 53 65 74 28 53 74 72 65 61 6d 20 73 74 72  geSet(Stream str
5a30: 65 61 6d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  eam);....       
5a40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5a50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65          /// Atte
5a60: 6d 70 74 73 20 74 6f 20 63 72 65 61 74 65 20 61  mpts to create a
5a70: 6e 64 20 72 65 74 75 72 6e 2c 20 76 69 61 20 3c  nd return, via <
5a80: 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 72  paramref name="r
5a90: 61 77 44 61 74 61 22 20 2f 3e 2c 20 74 68 65 0d  awData" />, the.
5aa0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d  .        /// com
5ab0: 62 69 6e 65 64 20 73 65 74 20 6f 66 20 63 68 61  bined set of cha
5ac0: 6e 67 65 73 20 72 65 70 72 65 73 65 6e 74 65 64  nges represented
5ad0: 20 62 79 20 74 68 69 73 20 73 65 73 73 69 6f 6e   by this session
5ae0: 20 69 6e 73 74 61 6e 63 65 20 61 73 20 61 0d 0a   instance as a..
5af0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 61 74 63          /// patc
5b00: 68 20 73 65 74 2e 0d 0a 20 20 20 20 20 20 20 20  h set...        
5b10: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5b20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
5b30: 61 6d 20 6e 61 6d 65 3d 22 72 61 77 44 61 74 61  am name="rawData
5b40: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
5b50: 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68  Upon success, th
5b60: 69 73 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  is will contain 
5b70: 74 68 65 20 72 61 77 20 62 79 74 65 20 64 61 74  the raw byte dat
5b80: 61 20 66 6f 72 20 61 6c 6c 20 74 68 65 0d 0a 20  a for all the.. 
5b90: 20 20 20 20 20 20 20 2f 2f 2f 20 63 68 61 6e 67         /// chang
5ba0: 65 73 20 69 6e 20 74 68 69 73 20 73 65 73 73 69  es in this sessi
5bb0: 6f 6e 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  on instance...  
5bc0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
5bd0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 76 6f 69 64  m>..        void
5be0: 20 43 72 65 61 74 65 50 61 74 63 68 53 65 74 28   CreatePatchSet(
5bf0: 72 65 66 20 62 79 74 65 5b 5d 20 72 61 77 44 61  ref byte[] rawDa
5c00: 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ta);....        
5c10: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5c20: 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d         /// Attem
5c30: 70 74 73 20 74 6f 20 63 72 65 61 74 65 20 61 6e  pts to create an
5c40: 64 20 77 72 69 74 65 2c 20 76 69 61 20 3c 70 61  d write, via <pa
5c50: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 73 74 72  ramref name="str
5c60: 65 61 6d 22 20 2f 3e 2c 20 74 68 65 0d 0a 20 20  eam" />, the..  
5c70: 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 62 69 6e        /// combin
5c80: 65 64 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65  ed set of change
5c90: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  s represented by
5ca0: 20 74 68 69 73 20 73 65 73 73 69 6f 6e 20 69 6e   this session in
5cb0: 73 74 61 6e 63 65 20 61 73 20 61 0d 0a 20 20 20  stance as a..   
5cc0: 20 20 20 20 20 2f 2f 2f 20 70 61 74 63 68 20 73       /// patch s
5cd0: 65 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  et...        ///
5ce0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5cf0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
5d00: 6e 61 6d 65 3d 22 73 74 72 65 61 6d 22 3e 0d 0a  name="stream">..
5d10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
5d20: 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 72 61   success, the ra
5d30: 77 20 62 79 74 65 20 64 61 74 61 20 66 6f 72 20  w byte data for 
5d40: 61 6c 6c 20 74 68 65 20 63 68 61 6e 67 65 73 20  all the changes 
5d50: 69 6e 20 74 68 69 73 20 73 65 73 73 69 6f 6e 0d  in this session.
5d60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73  .        /// ins
5d70: 74 61 6e 63 65 20 77 69 6c 6c 20 62 65 20 77 72  tance will be wr
5d80: 69 74 74 65 6e 20 74 6f 20 74 68 69 73 20 3c 73  itten to this <s
5d90: 65 65 20 63 72 65 66 3d 22 53 74 72 65 61 6d 22  ee cref="Stream"
5da0: 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   />...        //
5db0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
5dc0: 20 20 20 20 76 6f 69 64 20 43 72 65 61 74 65 50      void CreateP
5dd0: 61 74 63 68 53 65 74 28 53 74 72 65 61 6d 20 73  atchSet(Stream s
5de0: 74 72 65 61 6d 29 3b 0d 0a 0d 0a 20 20 20 20 20  tream);....     
5df0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5e00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
5e10: 69 73 20 6d 65 74 68 6f 64 20 6c 6f 61 64 73 20  is method loads 
5e20: 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 73 20  the differences 
5e30: 62 65 74 77 65 65 6e 20 74 77 6f 20 74 61 62 6c  between two tabl
5e40: 65 73 20 5b 77 69 74 68 20 74 68 65 20 73 61 6d  es [with the sam
5e50: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
5e60: 61 6d 65 2c 20 73 65 74 20 6f 66 20 63 6f 6c 75  ame, set of colu
5e70: 6d 6e 73 2c 20 61 6e 64 20 70 72 69 6d 61 72 79  mns, and primary
5e80: 20 6b 65 79 20 64 65 66 69 6e 69 74 69 6f 6e 5d   key definition]
5e90: 20 69 6e 74 6f 20 74 68 69 73 20 73 65 73 73 69   into this sessi
5ea0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  on..        /// 
5eb0: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
5ec0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5ed0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
5ee0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 72 6f 6d  param name="from
5ef0: 44 61 74 61 62 61 73 65 4e 61 6d 65 22 3e 0d 0a  DatabaseName">..
5f00: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
5f10: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
5f20: 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  base containing 
5f30: 74 68 65 20 74 61 62 6c 65 20 77 69 74 68 20 74  the table with t
5f40: 68 65 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20  he original..   
5f50: 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 28 69       /// data (i
5f60: 2e 65 2e 20 69 74 20 77 69 6c 6c 20 6e 65 65 64  .e. it will need
5f70: 20 75 70 64 61 74 69 6e 67 20 69 6e 20 6f 72 64   updating in ord
5f80: 65 72 20 74 6f 20 62 65 20 69 64 65 6e 74 69 63  er to be identic
5f90: 61 6c 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  al to the..     
5fa0: 20 20 20 2f 2f 2f 20 6f 6e 65 20 77 69 74 68 69     /// one withi
5fb0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
5fc0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
5fd0: 68 69 73 20 73 65 73 73 69 6f 6e 20 69 6e 73 74  his session inst
5fe0: 61 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20 20 20  ance)...        
5ff0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
6000: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
6010: 20 6e 61 6d 65 3d 22 74 61 62 6c 65 4e 61 6d 65   name="tableName
6020: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
6030: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
6040: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
6050: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
6060: 20 20 20 20 20 20 76 6f 69 64 20 4c 6f 61 64 44        void LoadD
6070: 69 66 66 65 72 65 6e 63 65 73 46 72 6f 6d 54 61  ifferencesFromTa
6080: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
6090: 20 20 73 74 72 69 6e 67 20 66 72 6f 6d 44 61 74    string fromDat
60a0: 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  abaseName,..    
60b0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
60c0: 61 62 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  ableName..      
60d0: 20 20 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20    );..    }..   
60e0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
60f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6140: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51  ..    #region SQ
6150: 4c 69 74 65 53 65 73 73 69 6f 6e 48 65 6c 70 65  LiteSessionHelpe
6160: 72 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  rs Class..    //
6170: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6180: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
6190: 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
61a0: 61 74 69 63 20 68 65 6c 70 65 72 20 6d 65 74 68  atic helper meth
61b0: 6f 64 73 20 66 6f 72 20 75 73 65 20 77 69 74 68  ods for use with
61c0: 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 2f 2f 2f  in this..    ///
61d0: 20 73 75 62 73 79 73 74 65 6d 2e 0d 0a 20 20 20   subsystem...   
61e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
61f0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
6200: 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  atic class SQLit
6210: 65 53 65 73 73 69 6f 6e 48 65 6c 70 65 72 73 0d  eSessionHelpers.
6220: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6230: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
6240: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
6250: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6260: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
6270: 6d 65 74 68 6f 64 20 63 68 65 63 6b 73 20 74 68  method checks th
6280: 65 20 62 79 74 65 20 61 72 72 61 79 20 73 70 65  e byte array spe
6290: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 63 61  cified by the ca
62a0: 6c 6c 65 72 20 74 6f 20 6d 61 6b 65 0d 0a 20 20  ller to make..  
62b0: 20 20 20 20 20 20 2f 2f 2f 20 73 75 72 65 20 69        /// sure i
62c0: 74 20 77 69 6c 6c 20 62 65 20 75 73 61 62 6c 65  t will be usable
62d0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
62e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
62f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
6300: 6d 65 3d 22 72 61 77 44 61 74 61 22 3e 0d 0a 20  me="rawData">.. 
6310: 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 62 79 74         /// A byt
6320: 65 20 61 72 72 61 79 20 70 72 6f 76 69 64 65 64  e array provided
6330: 20 62 79 20 74 68 65 20 63 61 6c 6c 65 72 20 69   by the caller i
6340: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 70  nto one of the p
6350: 75 62 6c 69 63 20 6d 65 74 68 6f 64 73 0d 0a 20  ublic methods.. 
6360: 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74         /// for t
6370: 68 65 20 63 6c 61 73 73 65 73 20 74 68 61 74 20  he classes that 
6380: 62 65 6c 6f 6e 67 20 74 6f 20 74 68 69 73 20 73  belong to this s
6390: 75 62 73 79 73 74 65 6d 2e 20 20 54 68 69 73 20  ubsystem.  This 
63a0: 76 61 6c 75 65 20 63 61 6e 6e 6f 74 0d 0a 20 20  value cannot..  
63b0: 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 6e 75 6c        /// be nul
63c0: 6c 20 6f 72 20 72 65 70 72 65 73 65 6e 74 20 61  l or represent a
63d0: 6e 20 65 6d 70 74 79 20 61 72 72 61 79 3b 20 6f  n empty array; o
63e0: 74 68 65 72 77 69 73 65 2c 20 61 6e 20 61 70 70  therwise, an app
63f0: 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 20 20 20  ropriate..      
6400: 20 20 2f 2f 2f 20 65 78 63 65 70 74 69 6f 6e 20    /// exception 
6410: 77 69 6c 6c 20 62 65 20 74 68 72 6f 77 6e 2e 0d  will be thrown..
6420: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
6430: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
6440: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
6450: 64 20 43 68 65 63 6b 52 61 77 44 61 74 61 28 0d  d CheckRawData(.
6460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
6470: 65 5b 5d 20 72 61 77 44 61 74 61 0d 0a 20 20 20  e[] rawData..   
6480: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6490: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
64a0: 20 20 20 69 66 20 28 72 61 77 44 61 74 61 20 3d     if (rawData =
64b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
64c0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
64d0: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
64e0: 78 63 65 70 74 69 6f 6e 28 22 72 61 77 44 61 74  xception("rawDat
64f0: 61 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  a");....        
6500: 20 20 20 20 69 66 20 28 72 61 77 44 61 74 61 2e      if (rawData.
6510: 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20  Length == 0)..  
6520: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
6540: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
6550: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
6560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
6570: 65 6d 70 74 79 20 63 68 61 6e 67 65 20 73 65 74  empty change set
6580: 20 64 61 74 61 22 2c 20 22 72 61 77 44 61 74 61   data", "rawData
6590: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
65a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
65b0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
65c0: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
65d0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
65e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6630: 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
6640: 65 43 6f 6e 6e 65 63 74 69 6f 6e 4c 6f 63 6b 20  eConnectionLock 
6650: 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Class..    /// <
6660: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6670: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 73 20  / This class is 
6680: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
6690: 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69   native connecti
66a0: 6f 6e 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69  on handle associ
66b0: 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 2f  ated with..    /
66c0: 2f 2f 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22  // a <see cref="
66d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
66e0: 22 20 2f 3e 20 6f 70 65 6e 20 75 6e 74 69 6c 20  " /> open until 
66f0: 74 68 69 73 20 73 75 62 73 79 73 74 65 6d 20 69  this subsystem i
6700: 73 20 74 6f 74 61 6c 6c 79 0d 0a 20 20 20 20 2f  s totally..    /
6710: 2f 2f 20 64 6f 6e 65 20 77 69 74 68 20 69 74 2e  // done with it.
6720: 20 20 54 68 69 73 20 63 6c 61 73 73 20 69 73 20    This class is 
6730: 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65  for internal use
6740: 20 62 79 20 74 68 69 73 20 73 75 62 73 79 73 74   by this subsyst
6750: 65 6d 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 2f 2f  em only...    //
6760: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6770: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
6780: 61 63 74 20 63 6c 61 73 73 20 53 51 4c 69 74 65  act class SQLite
6790: 43 6f 6e 6e 65 63 74 69 6f 6e 4c 6f 63 6b 20 3a  ConnectionLock :
67a0: 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20   IDisposable..  
67b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
67c0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
67d0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
67e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
67f0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53         /// The S
6800: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  QL statement use
6810: 64 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20  d when creating 
6820: 74 68 65 20 6e 61 74 69 76 65 20 73 74 61 74 65  the native state
6830: 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  ment handle...  
6840: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 72 65 20        /// There 
6850: 61 72 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 72  are no special r
6860: 65 71 75 69 72 65 6d 65 6e 74 73 20 66 6f 72 20  equirements for 
6870: 74 68 69 73 20 6f 74 68 65 72 20 74 68 61 6e 20  this other than 
6880: 63 6f 75 6e 74 69 6e 67 20 61 73 0d 0a 20 20 20  counting as..   
6890: 20 20 20 20 20 2f 2f 2f 20 61 6e 20 22 6f 70 65       /// an "ope
68a0: 6e 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64  n statement hand
68b0: 6c 65 22 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le"...        //
68c0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
68d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
68e0: 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 63 6b 4e  nst string LockN
68f0: 6f 70 53 71 6c 20 3d 20 22 53 45 4c 45 43 54 20  opSql = "SELECT 
6900: 31 3b 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  1;";....        
6910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6960: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6970: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
6980: 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
6990: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75 73  error message us
69a0: 65 64 20 77 68 65 6e 20 72 65 70 6f 72 74 69 6e  ed when reportin
69b0: 67 2c 20 64 75 72 69 6e 67 20 6f 62 6a 65 63 74  g, during object
69c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 69  ..        /// di
69d0: 73 70 6f 73 61 6c 2c 20 74 68 61 74 20 74 68 65  sposal, that the
69e0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c   statement handl
69f0: 65 20 69 73 20 73 74 69 6c 6c 20 6f 70 65 6e 20  e is still open 
6a00: 28 69 2e 65 2e 20 62 65 63 61 75 73 65 0d 0a 20  (i.e. because.. 
6a10: 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20         /// this 
6a20: 73 69 74 75 61 74 69 6f 6e 20 69 73 20 63 6f 6e  situation is con
6a30: 73 69 64 65 72 65 64 20 61 20 66 61 69 72 6c 79  sidered a fairly
6a40: 20 73 65 72 69 6f 75 73 20 70 72 6f 67 72 61 6d   serious program
6a50: 6d 69 6e 67 20 65 72 72 6f 72 29 2e 0d 0a 20 20  ming error)...  
6a60: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
6a70: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
6a80: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
6a90: 6e 67 20 53 74 61 74 65 6d 65 6e 74 4d 65 73 73  ng StatementMess
6aa0: 61 67 65 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20  ageFormat =..   
6ab0: 20 20 20 20 20 20 20 20 20 22 43 6f 6e 6e 65 63           "Connec
6ac0: 74 69 6f 6e 20 6c 6f 63 6b 20 6f 62 6a 65 63 74  tion lock object
6ad0: 20 77 61 73 20 7b 30 7d 20 77 69 74 68 20 73 74   was {0} with st
6ae0: 61 74 65 6d 65 6e 74 20 7b 31 7d 22 3b 0d 0a 20  atement {1}";.. 
6af0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6b00: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
6b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6b60: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
6b70: 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Data..        //
6b80: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6b90: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 77 72 61       /// The wra
6ba0: 70 70 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e  pped native conn
6bb0: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 73  ection handle as
6bc0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
6bd0: 69 73 20 6c 6f 63 6b 2e 0d 0a 20 20 20 20 20 20  is lock...      
6be0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6bf0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
6c00: 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e SQLiteConnecti
6c10: 6f 6e 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 3b  onHandle handle;
6c20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
6c30: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
6c40: 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
6c50: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
6c60: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
6c70: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 74  represented by t
6c80: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
6c90: 3c 73 65 65 20 63 72 65 66 3d 22 68 61 6e 64 6c  <see cref="handl
6ca0: 65 22 20 2f 3e 20 76 61 6c 75 65 2e 0d 0a 20 20  e" /> value...  
6cb0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
6cc0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
6cd0: 69 76 61 74 65 20 53 51 4c 69 74 65 43 6f 6e 6e  ivate SQLiteConn
6ce0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
6cf0: 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s;....        //
6d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6d50: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6d60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
6d70: 6e 61 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  native statement
6d80: 20 68 61 6e 64 6c 65 20 66 6f 72 20 74 68 69 73   handle for this
6d90: 20 6c 6f 63 6b 2e 20 20 54 68 65 20 67 61 72 62   lock.  The garb
6da0: 61 67 65 20 63 6f 6c 6c 65 63 74 6f 72 0d 0a 20  age collector.. 
6db0: 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6e 6e 6f         /// canno
6dc0: 74 20 63 61 75 73 65 20 74 68 69 73 20 73 74 61  t cause this sta
6dd0: 74 65 6d 65 6e 74 20 74 6f 20 62 65 20 66 69 6e  tement to be fin
6de0: 61 6c 69 7a 65 64 3b 20 74 68 65 72 65 66 6f 72  alized; therefor
6df0: 65 2c 20 69 74 20 77 69 6c 6c 0d 0a 20 20 20 20  e, it will..    
6e00: 20 20 20 20 2f 2f 2f 20 73 65 72 76 65 20 74 6f      /// serve to
6e10: 20 68 6f 6c 64 20 74 68 65 20 61 73 73 6f 63 69   hold the associ
6e20: 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e  ated native conn
6e30: 65 63 74 69 6f 6e 20 6f 70 65 6e 20 75 6e 74 69  ection open unti
6e40: 6c 20 69 74 20 69 73 0d 0a 20 20 20 20 20 20 20  l it is..       
6e50: 20 2f 2f 2f 20 66 72 65 65 64 20 6d 61 6e 75 61   /// freed manua
6e60: 6c 6c 79 20 75 73 69 6e 67 20 74 68 65 20 3c 73  lly using the <s
6e70: 65 65 20 63 72 65 66 3d 22 55 6e 6c 6f 63 6b 22  ee cref="Unlock"
6e80: 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
6e90: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6ea0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
6eb0: 76 61 74 65 20 49 6e 74 50 74 72 20 73 74 61 74  vate IntPtr stat
6ec0: 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20  ement;..        
6ed0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
6ee0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6f30: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
6f40: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
6f50: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tors..        //
6f60: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6f70: 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75       /// Constru
6f80: 63 74 73 20 61 20 6e 65 77 20 69 6e 73 74 61 6e  cts a new instan
6f90: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
6fa0: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
6fb0: 66 69 65 64 20 77 72 61 70 70 65 64 0d 0a 20 20  fied wrapped..  
6fc0: 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65        /// native
6fd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
6fe0: 6c 65 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65  le and associate
6ff0: 64 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20  d flags...      
7000: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7010: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
7020: 61 72 61 6d 20 6e 61 6d 65 3d 22 68 61 6e 64 6c  aram name="handl
7030: 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
7040: 20 54 68 65 20 77 72 61 70 70 65 64 20 6e 61 74   The wrapped nat
7050: 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ive connection h
7060: 61 6e 64 6c 65 20 74 6f 20 62 65 20 61 73 73 6f  andle to be asso
7070: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
7080: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
7090: 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ck...        ///
70a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
70b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
70c0: 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
70d0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61       /// The fla
70e0: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
70f0: 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  th the connectio
7100: 6e 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79  n represented by
7110: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
7120: 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65  / <paramref name
7130: 3d 22 68 61 6e 64 6c 65 22 20 2f 3e 20 76 61 6c  ="handle" /> val
7140: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
7150: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
7160: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7170: 6d 65 3d 22 61 75 74 6f 4c 6f 63 6b 22 3e 0d 0a  me="autoLock">..
7180: 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
7190: 7a 65 72 6f 20 69 66 20 74 68 65 20 3c 73 65 65  zero if the <see
71a0: 20 63 72 65 66 3d 22 4c 6f 63 6b 22 20 2f 3e 20   cref="Lock" /> 
71b0: 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64 20 62 65  method should be
71c0: 20 63 61 6c 6c 65 64 20 70 72 69 6f 72 0d 0a 20   called prior.. 
71d0: 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 72 65         /// to re
71e0: 74 75 72 6e 69 6e 67 20 66 72 6f 6d 20 74 68 69  turning from thi
71f0: 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 2e 0d 0a  s constructor...
7200: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
7210: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
7220: 62 6c 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e 65  blic SQLiteConne
7230: 63 74 69 6f 6e 4c 6f 63 6b 28 0d 0a 20 20 20 20  ctionLock(..    
7240: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
7250: 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68  nnectionHandle h
7260: 61 6e 64 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  andle,..        
7270: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
7280: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
7290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
72a0: 6f 6c 20 61 75 74 6f 4c 6f 63 6b 0d 0a 20 20 20  ol autoLock..   
72b0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
72c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
72d0: 20 20 20 74 68 69 73 2e 68 61 6e 64 6c 65 20 3d     this.handle =
72e0: 20 68 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20   handle;..      
72f0: 20 20 20 20 20 20 74 68 69 73 2e 66 6c 61 67 73        this.flags
7300: 20 3d 20 66 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20   = flags;....   
7310: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 75 74           if (aut
7320: 6f 4c 6f 63 6b 29 0d 0a 20 20 20 20 20 20 20 20  oLock)..        
7330: 20 20 20 20 20 20 20 20 4c 6f 63 6b 28 29 3b 0d          Lock();.
7340: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7350: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7360: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
7370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
73c0: 67 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d  gion Protected M
73d0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
73e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
73f0: 20 20 20 20 20 20 20 2f 2f 2f 20 51 75 65 72 69         /// Queri
7400: 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  es and returns t
7410: 68 65 20 77 72 61 70 70 65 64 20 6e 61 74 69 76  he wrapped nativ
7420: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
7430: 64 6c 65 20 66 6f 72 20 74 68 69 73 0d 0a 20 20  dle for this..  
7440: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
7450: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
7460: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
7470: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
7480: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
7490: 54 68 65 20 77 72 61 70 70 65 64 20 6e 61 74 69  The wrapped nati
74a0: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ve connection ha
74b0: 6e 64 6c 65 20 66 6f 72 20 74 68 69 73 20 69 6e  ndle for this in
74c0: 73 74 61 6e 63 65 20 2d 4f 52 2d 20 6e 75 6c 6c  stance -OR- null
74d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 66  ..        /// if
74e0: 20 69 74 20 69 73 20 75 6e 61 76 61 69 6c 61 62   it is unavailab
74f0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
7500: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
7510: 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 53       protected S
7520: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
7530: 61 6e 64 6c 65 20 47 65 74 48 61 6e 64 6c 65 28  andle GetHandle(
7540: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7550: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7560: 20 68 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20   handle;..      
7570: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
7580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
75d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
75e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 51 75 65  .        /// Que
75f0: 72 69 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73  ries and returns
7600: 20 74 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63   the flags assoc
7610: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
7620: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72 0d 0a 20  onnection for.. 
7630: 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20         /// this 
7640: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
7650: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7660: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
7670: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
7680: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
7690: 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
76a0: 63 74 69 6f 6e 46 6c 61 67 73 22 20 2f 3e 20 76  ctionFlags" /> v
76b0: 61 6c 75 65 2e 20 20 54 68 65 72 65 20 69 73 20  alue.  There is 
76c0: 6e 6f 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20  no return..     
76d0: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 72 65 73     /// value res
76e0: 65 72 76 65 64 20 74 6f 20 69 6e 64 69 63 61 74  erved to indicat
76f0: 65 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20 20  e an error...   
7700: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
7710: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  ns>..        pro
7720: 74 65 63 74 65 64 20 53 51 4c 69 74 65 43 6f 6e  tected SQLiteCon
7730: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 47 65 74  nectionFlags Get
7740: 46 6c 61 67 73 28 29 0d 0a 20 20 20 20 20 20 20  Flags()..       
7750: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7760: 72 65 74 75 72 6e 20 66 6c 61 67 73 3b 0d 0a 20  return flags;.. 
7770: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7780: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
77d0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
77e0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
77f0: 2f 20 51 75 65 72 69 65 73 20 61 6e 64 20 72 65  / Queries and re
7800: 74 75 72 6e 73 20 74 68 65 20 6e 61 74 69 76 65  turns the native
7810: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
7820: 6c 65 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74  le for this inst
7830: 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
7840: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7850: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
7860: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
7870: 2f 20 54 68 65 20 6e 61 74 69 76 65 20 63 6f 6e  / The native con
7880: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66  nection handle f
7890: 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65  or this instance
78a0: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65  .  If this value
78b0: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
78c0: 20 75 6e 61 76 61 69 6c 61 62 6c 65 20 6f 72 20   unavailable or 
78d0: 69 6e 76 61 6c 69 64 20 61 6e 20 65 78 63 65 70  invalid an excep
78e0: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 68 72  tion will be thr
78f0: 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  own...        //
7900: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
7910: 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
7920: 49 6e 74 50 74 72 20 47 65 74 49 6e 74 50 74 72  IntPtr GetIntPtr
7930: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
7940: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 68             if (h
7950: 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  andle == null)..
7960: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7980: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
7990: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
79a0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
79b0: 20 20 20 20 20 20 20 20 20 22 43 6f 6e 6e 65 63           "Connec
79c0: 74 69 6f 6e 20 6c 6f 63 6b 20 6f 62 6a 65 63 74  tion lock object
79d0: 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20   has an invalid 
79e0: 68 61 6e 64 6c 65 2e 22 29 3b 0d 0a 20 20 20 20  handle.");..    
79f0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7a00: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
7a10: 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61 6e 64  handlePtr = hand
7a20: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
7a30: 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
7a40: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
7a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a70: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
7a80: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
7a90: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
7aa0: 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 6e             "Conn
7ab0: 65 63 74 69 6f 6e 20 6c 6f 63 6b 20 6f 62 6a 65  ection lock obje
7ac0: 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
7ad0: 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
7ae0: 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  .");..          
7af0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7b00: 20 20 20 72 65 74 75 72 6e 20 68 61 6e 64 6c 65     return handle
7b10: 50 74 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  Ptr;..        }.
7b20: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
7b30: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7b90: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
7ba0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
7bb0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7bc0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
7bd0: 73 20 6d 65 74 68 6f 64 20 61 74 74 65 6d 70 74  s method attempt
7be0: 73 20 74 6f 20 22 6c 6f 63 6b 22 20 74 68 65 20  s to "lock" the 
7bf0: 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76  associated nativ
7c00: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  e connection..  
7c10: 20 20 20 20 20 20 2f 2f 2f 20 68 61 6e 64 6c 65        /// handle
7c20: 20 62 79 20 70 72 65 70 61 72 69 6e 67 20 61 20   by preparing a 
7c30: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68  SQL statement th
7c40: 61 74 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 66  at will not be f
7c50: 69 6e 61 6c 69 7a 65 64 0d 0a 20 20 20 20 20 20  inalized..      
7c60: 20 20 2f 2f 2f 20 75 6e 74 69 6c 20 74 68 65 20    /// until the 
7c70: 3c 73 65 65 20 63 72 65 66 3d 22 55 6e 6c 6f 63  <see cref="Unloc
7c80: 6b 22 20 2f 3e 20 6d 65 74 68 6f 64 20 69 73 20  k" /> method is 
7c90: 63 61 6c 6c 65 64 20 28 69 2e 65 2e 20 61 6e 64  called (i.e. and
7ca0: 20 77 68 69 63 68 0d 0a 20 20 20 20 20 20 20 20   which..        
7cb0: 2f 2f 2f 20 63 61 6e 6e 6f 74 20 62 65 20 64 6f  /// cannot be do
7cc0: 6e 65 20 62 79 20 74 68 65 20 67 61 72 62 61 67  ne by the garbag
7cd0: 65 20 63 6f 6c 6c 65 63 74 6f 72 29 2e 20 20 49  e collector).  I
7ce0: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
7cf0: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
7d00: 61 6c 72 65 61 64 79 20 70 72 65 70 61 72 65 64  already prepared
7d10: 2c 20 6e 6f 74 68 69 6e 67 20 69 73 20 64 6f 6e  , nothing is don
7d20: 65 2e 20 20 49 66 20 74 68 65 20 73 74 61 74 65  e.  If the state
7d30: 6d 65 6e 74 20 63 61 6e 6e 6f 74 20 62 65 0d 0a  ment cannot be..
7d40: 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 65 70          /// prep
7d50: 61 72 65 64 20 66 6f 72 20 61 6e 79 20 72 65 61  ared for any rea
7d60: 73 6f 6e 2c 20 61 6e 20 65 78 63 65 70 74 69 6f  son, an exceptio
7d70: 6e 20 77 69 6c 6c 20 62 65 20 74 68 72 6f 77 6e  n will be thrown
7d80: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7d90: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7da0: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 4c     public void L
7db0: 6f 63 6b 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ock()..        {
7dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
7dd0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
7de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
7df0: 20 28 73 74 61 74 65 6d 65 6e 74 20 21 3d 20 49   (statement != I
7e00: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7e20: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
7e30: 20 20 20 20 49 6e 74 50 74 72 20 70 53 71 6c 20      IntPtr pSql 
7e40: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
7e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
7e60: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
7e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e80: 20 20 69 6e 74 20 6e 53 71 6c 20 3d 20 30 3b 0d    int nSql = 0;.
7e90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7ea0: 20 20 20 70 53 71 6c 20 3d 20 53 51 4c 69 74 65     pSql = SQLite
7eb0: 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
7ec0: 72 46 72 6f 6d 53 74 72 69 6e 67 28 4c 6f 63 6b  rFromString(Lock
7ed0: 4e 6f 70 53 71 6c 2c 20 72 65 66 20 6e 53 71 6c  NopSql, ref nSql
7ee0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7ef0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 52 65        IntPtr pRe
7f00: 6d 61 69 6e 20 3d 20 49 6e 74 50 74 72 2e 5a 65  main = IntPtr.Ze
7f10: 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
7f20: 20 20 20 20 20 69 6e 74 20 6e 52 65 6d 61 69 6e       int nRemain
7f30: 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
7f40: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
7f50: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
7f60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7f70: 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  s.sqlite3_prepar
7f80: 65 5f 69 6e 74 65 72 6f 70 28 0d 0a 20 20 20 20  e_interop(..    
7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fa0: 47 65 74 49 6e 74 50 74 72 28 29 2c 20 70 53 71  GetIntPtr(), pSq
7fb0: 6c 2c 20 6e 53 71 6c 2c 20 72 65 66 20 73 74 61  l, nSql, ref sta
7fc0: 74 65 6d 65 6e 74 2c 20 72 65 66 20 70 52 65 6d  tement, ref pRem
7fd0: 61 69 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ain,..          
7fe0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6e 52            ref nR
7ff0: 65 6d 61 69 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  emain);....     
8000: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
8010: 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c != SQLiteError
8020: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8040: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8050: 63 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c  ception(rc, "sql
8060: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
8070: 65 72 6f 70 22 29 3b 0d 0a 20 20 20 20 20 20 20  erop");..       
8080: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8090: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
80a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
80c0: 70 53 71 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a  pSql != IntPtr.Z
80d0: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
80e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
8100: 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
8110: 53 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  Sql);..         
8120: 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20             pSql 
8130: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8150: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
8160: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
8170: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
81c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
81d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
81e0: 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
81f0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 22 75 6e   attempts to "un
8200: 6c 6f 63 6b 22 20 74 68 65 20 61 73 73 6f 63 69  lock" the associ
8210: 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e  ated native conn
8220: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ection..        
8230: 2f 2f 2f 20 68 61 6e 64 6c 65 20 62 79 20 66 69  /// handle by fi
8240: 6e 61 6c 69 7a 69 6e 67 20 74 68 65 20 70 72 65  nalizing the pre
8250: 76 69 6f 75 73 6c 79 20 70 72 65 70 61 72 65 64  viously prepared
8260: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 66 20   statement.  If 
8270: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
8280: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 6c   statement is al
8290: 72 65 61 64 79 20 66 69 6e 61 6c 69 7a 65 64 2c  ready finalized,
82a0: 20 6e 6f 74 68 69 6e 67 20 69 73 20 64 6f 6e 65   nothing is done
82b0: 2e 20 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  .  If the statem
82c0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ent..        ///
82d0: 20 63 61 6e 6e 6f 74 20 62 65 20 66 69 6e 61 6c   cannot be final
82e0: 69 7a 65 64 20 66 6f 72 20 61 6e 79 20 72 65 61  ized for any rea
82f0: 73 6f 6e 2c 20 61 6e 20 65 78 63 65 70 74 69 6f  son, an exceptio
8300: 6e 20 77 69 6c 6c 20 62 65 20 74 68 72 6f 77 6e  n will be thrown
8310: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
8320: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
8330: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 55     public void U
8340: 6e 6c 6f 63 6b 28 29 0d 0a 20 20 20 20 20 20 20  nlock()..       
8350: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8360: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
8370: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8380: 69 66 20 28 73 74 61 74 65 6d 65 6e 74 20 3d 3d  if (statement ==
8390: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
83b0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
83c0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
83d0: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
83e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
83f0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f  qlite3_finalize_
8400: 69 6e 74 65 72 6f 70 28 0d 0a 20 20 20 20 20 20  interop(..      
8410: 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
8420: 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ent);....       
8430: 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53       if (rc != S
8440: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
8450: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
8460: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
8470: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63  LiteException(rc
8480: 2c 20 22 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  , "sqlite3_final
8490: 69 7a 65 5f 69 6e 74 65 72 6f 70 22 29 3b 0d 0a  ize_interop");..
84a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
84b0: 61 74 65 6d 65 6e 74 20 3d 20 49 6e 74 50 74 72  atement = IntPtr
84c0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
84d0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
84e0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
84f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8540: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
8550: 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  posable Members.
8560: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
8570: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
8580: 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20  /// Disposes of 
8590: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
85a0: 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
85b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
85c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
85d0: 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20  id Dispose()..  
85e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
85f0: 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75       Dispose(tru
8600: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8610: 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61   GC.SuppressFina
8620: 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20  lize(this);..   
8630: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8640: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
8650: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
86a0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
86b0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
86c0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
86d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
86e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
86f0: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
8700: 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
8710: 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  nce has been dis
8720: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
8730: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
8740: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
8750: 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a  bool disposed;..
8760: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8770: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8780: 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 65   /// Throws an e
8790: 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 69 73  xception if this
87a0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
87b0: 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73   has been dispos
87c0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
87d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
87e0: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
87f0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
8800: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
8810: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
8820: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
8830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
8840: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
8850: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8860: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
8870: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
8880: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88a0: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
88b0: 43 6f 6e 6e 65 63 74 69 6f 6e 4c 6f 63 6b 29 2e  ConnectionLock).
88c0: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
88d0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
88e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
88f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8940: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
8950: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
8960: 2f 20 44 69 73 70 6f 73 65 73 20 6f 72 20 66 69  / Disposes or fi
8970: 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a  nalizes this obj
8980: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
8990: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
89a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
89b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
89c0: 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20  disposing">..   
89d0: 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
89e0: 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74  o if this object
89f0: 20 69 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73   is being dispos
8a00: 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  ed; otherwise, t
8a10: 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20  his object..    
8a20: 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69 6e 67      /// is being
8a30: 20 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20 20 20   finalized...   
8a40: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
8a50: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65  >..        prote
8a60: 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69  cted virtual voi
8a70: 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64  d Dispose(bool d
8a80: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
8a90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8aa0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
8ab0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8ac0: 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f        if (!dispo
8ad0: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
8ae0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
8b00: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b20: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
8b40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b60: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
8b80: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
8b90: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
8ba0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
8bc0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8be0: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
8c00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8c10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c50: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
8c60: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
8c70: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
8cd0: 28 73 74 61 74 65 6d 65 6e 74 20 21 3d 20 49 6e  (statement != In
8ce0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8d10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d30: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
8d40: 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 65 76 65  This should neve
8d50: 72 20 68 61 70 70 65 6e 2e 20 20 54 68 69 73 20  r happen.  This 
8d60: 6f 62 6a 65 63 74 20 77 61 73 0d 0a 20 20 20 20  object was..    
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d80: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73      //       dis
8d90: 70 6f 73 65 64 20 28 6f 72 20 66 69 6e 61 6c 69  posed (or finali
8da0: 7a 65 64 29 20 77 69 74 68 6f 75 74 20 74 68 65  zed) without the
8db0: 20 55 6e 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20   Unlock..       
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dd0: 20 2f 2f 20 20 20 20 20 20 20 6d 65 74 68 6f 64   //       method
8de0: 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 69   being called fi
8df0: 72 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  rst...          
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e20: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e60: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
8e70: 4d 65 74 68 6f 64 73 2e 4c 6f 67 50 72 65 70 61  Methods.LogPrepa
8e80: 72 65 28 47 65 74 46 6c 61 67 73 28 29 29 29 0d  re(GetFlags())).
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ed0: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
8f00: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
8f10: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f30: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
8f40: 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 2c 0d  rorCode.Misuse,.
8f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f       HelperMetho
8f80: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
8f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
8fc0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
8fd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ff0: 20 20 20 20 20 20 20 53 74 61 74 65 6d 65 6e 74         Statement
9000: 4d 65 73 73 61 67 65 46 6f 72 6d 61 74 2c 20 64  MessageFormat, d
9010: 69 73 70 6f 73 69 6e 67 20 3f 0d 0a 20 20 20 20  isposing ?..    
9020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9040: 20 20 20 20 22 64 69 73 70 6f 73 65 64 22 20 3a      "disposed" :
9050: 20 22 66 69 6e 61 6c 69 7a 65 64 22 2c 0d 0a 20   "finalized",.. 
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9080: 20 20 20 73 74 61 74 65 6d 65 6e 74 29 29 3b 0d     statement));.
9090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90e0: 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9100: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9120: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
9130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9140: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69           }....#i
9150: 66 20 44 45 42 55 47 0d 0a 20 20 20 20 20 20 20  f DEBUG..       
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9170: 20 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b 28   Debugger.Break(
9180: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
91b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
91c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
91d0: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
91e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
91f0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9210: 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67  NOTE: Everything
9220: 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79   should be fully
9230: 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69   disposed at thi
9240: 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20  s point...      
9250: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
9270: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
9280: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9290: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
92a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
92b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
92c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9300: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
9310: 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20  on Destructor.. 
9320: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
9330: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
9340: 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73  / Finalizes this
9350: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
9360: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
9370: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
9380: 20 20 20 7e 53 51 4c 69 74 65 43 6f 6e 6e 65 63     ~SQLiteConnec
9390: 74 69 6f 6e 4c 6f 63 6b 28 29 0d 0a 20 20 20 20  tionLock()..    
93a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
93b0: 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65     Dispose(false
93c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
93d0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
93e0: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
93f0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
9400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9450: 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
9460: 65 43 68 61 6e 67 65 53 65 74 49 74 65 72 61 74  eChangeSetIterat
9470: 6f 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  or Class..    //
9480: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9490: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
94a0: 6d 61 6e 61 67 65 73 20 74 68 65 20 6e 61 74 69  manages the nati
94b0: 76 65 20 63 68 61 6e 67 65 20 73 65 74 20 69 74  ve change set it
94c0: 65 72 61 74 6f 72 2e 20 20 49 74 20 69 73 20 75  erator.  It is u
94d0: 73 65 64 20 61 73 20 74 68 65 0d 0a 20 20 20 20  sed as the..    
94e0: 2f 2f 2f 20 62 61 73 65 20 63 6c 61 73 73 20 66  /// base class f
94f0: 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  or the <see cref
9500: 3d 22 53 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68  ="SQLiteMemoryCh
9510: 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 22  angeSetIterator"
9520: 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 2f 2f 2f   /> and..    ///
9530: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
9540: 74 65 53 74 72 65 61 6d 43 68 61 6e 67 65 53 65  teStreamChangeSe
9550: 74 49 74 65 72 61 74 6f 72 22 20 2f 3e 20 63 6c  tIterator" /> cl
9560: 61 73 73 65 73 2e 20 20 49 74 20 6b 6e 6f 77 73  asses.  It knows
9570: 20 68 6f 77 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f   how to..    ///
9580: 20 61 64 76 61 6e 63 65 20 74 68 65 20 6e 61 74   advance the nat
9590: 69 76 65 20 69 74 65 72 61 74 6f 72 20 68 61 6e  ive iterator han
95a0: 64 6c 65 20 61 73 20 77 65 6c 6c 20 61 73 20 66  dle as well as f
95b0: 69 6e 61 6c 69 7a 65 20 69 74 2e 0d 0a 20 20 20  inalize it...   
95c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
95d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c  .    internal cl
95e0: 61 73 73 20 53 51 4c 69 74 65 43 68 61 6e 67 65  ass SQLiteChange
95f0: 53 65 74 49 74 65 72 61 74 6f 72 20 3a 20 49 44  SetIterator : ID
9600: 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 7b  isposable..    {
9610: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
9620: 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a  n Private Data..
9630: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
9640: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
9650: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 63 68  // The native ch
9660: 61 6e 67 65 20 73 65 74 20 28 61 2e 6b 2e 61 2e  ange set (a.k.a.
9670: 20 69 74 65 72 61 74 6f 72 29 20 68 61 6e 64 6c   iterator) handl
9680: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
9690: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
96a0: 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74 50      private IntP
96b0: 74 72 20 69 74 65 72 61 74 6f 72 3b 0d 0a 0d 0a  tr iterator;....
96c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9710: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
9720: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
9730: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
9740: 66 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 20  f this instance 
9750: 6f 77 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20  owns the native 
9760: 69 74 65 72 61 74 6f 72 20 68 61 6e 64 6c 65 20  iterator handle 
9770: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
9780: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 69  /// <see cref="i
9790: 74 65 72 61 74 6f 72 22 20 2f 3e 20 66 69 65 6c  terator" /> fiel
97a0: 64 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  d.  In that case
97b0: 2c 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 20  , this instance 
97c0: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
97d0: 2f 20 66 69 6e 61 6c 69 7a 65 20 74 68 65 20 6e  / finalize the n
97e0: 61 74 69 76 65 20 69 74 65 72 61 74 6f 72 20 68  ative iterator h
97f0: 61 6e 64 6c 65 20 75 70 6f 6e 20 62 65 69 6e 67  andle upon being
9800: 20 64 69 73 70 6f 73 65 64 20 6f 72 0d 0a 20 20   disposed or..  
9810: 20 20 20 20 20 20 2f 2f 2f 20 66 69 6e 61 6c 69        /// finali
9820: 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  zed...        //
9830: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9840: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
9850: 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20  ol ownHandle;.. 
9860: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
9870: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
98d0: 23 72 65 67 69 6f 6e 20 50 72 6f 74 65 63 74 65  #region Protecte
98e0: 64 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  d Constructors..
98f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
9900: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
9910: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 20  // Constructs a 
9920: 6e 65 77 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  new instance of 
9930: 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67  this class using
9940: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
9950: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f  ative..        /
9960: 2f 2f 20 69 74 65 72 61 74 6f 72 20 68 61 6e 64  // iterator hand
9970: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
9980: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9990: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
99a0: 6e 61 6d 65 3d 22 69 74 65 72 61 74 6f 72 22 3e  name="iterator">
99b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
99c0: 65 20 6e 61 74 69 76 65 20 69 74 65 72 61 74 6f  e native iterato
99d0: 72 20 68 61 6e 64 6c 65 20 74 6f 20 75 73 65 2e  r handle to use.
99e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
99f0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
9a00: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
9a10: 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a 20 20  "ownHandle">..  
9a20: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
9a30: 72 6f 20 69 66 20 74 68 69 73 20 69 6e 73 74 61  ro if this insta
9a40: 6e 63 65 20 69 73 20 74 6f 20 74 61 6b 65 20 6f  nce is to take o
9a50: 77 6e 65 72 73 68 69 70 20 6f 66 20 74 68 65 20  wnership of the 
9a60: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
9a70: 2f 2f 2f 20 69 74 65 72 61 74 6f 72 20 68 61 6e  /// iterator han
9a80: 64 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 79  dle specified by
9a90: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
9aa0: 22 69 74 65 72 61 74 6f 72 22 20 2f 3e 2e 0d 0a  "iterator" />...
9ab0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
9ac0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ram>..        pr
9ad0: 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65 43 68  otected SQLiteCh
9ae0: 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 28  angeSetIterator(
9af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
9b00: 74 50 74 72 20 69 74 65 72 61 74 6f 72 2c 0d 0a  tPtr iterator,..
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9b20: 20 6f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20 20   ownHandle..    
9b30: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9b50: 20 20 74 68 69 73 2e 69 74 65 72 61 74 6f 72 20    this.iterator 
9b60: 3d 20 69 74 65 72 61 74 6f 72 3b 0d 0a 20 20 20  = iterator;..   
9b70: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6f 77           this.ow
9b80: 6e 48 61 6e 64 6c 65 20 3d 20 6f 77 6e 48 61 6e  nHandle = ownHan
9b90: 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  dle;..        }.
9ba0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
9bb0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
9bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c00: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9c10: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
9c20: 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  e Methods..     
9c30: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
9c40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
9c50: 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f  rows an exceptio
9c60: 6e 20 69 66 20 74 68 65 20 6e 61 74 69 76 65 20  n if the native 
9c70: 69 74 65 72 61 74 6f 72 20 68 61 6e 64 6c 65 20  iterator handle 
9c80: 69 73 20 69 6e 76 61 6c 69 64 2e 0d 0a 20 20 20  is invalid...   
9c90: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
9ca0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ry>..        int
9cb0: 65 72 6e 61 6c 20 76 6f 69 64 20 43 68 65 63 6b  ernal void Check
9cc0: 48 61 6e 64 6c 65 28 29 0d 0a 20 20 20 20 20 20  Handle()..      
9cd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9ce0: 20 69 66 20 28 69 74 65 72 61 74 6f 72 20 3d 3d   if (iterator ==
9cf0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
9d10: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
9d20: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
9d30: 6f 6e 28 22 69 74 65 72 61 74 6f 72 20 69 73 20  on("iterator is 
9d40: 6e 6f 74 20 6f 70 65 6e 22 29 3b 0d 0a 20 20 20  not open");..   
9d50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9d60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9db0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
9dc0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
9dd0: 55 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68  Used to query th
9de0: 65 20 6e 61 74 69 76 65 20 69 74 65 72 61 74 6f  e native iterato
9df0: 72 20 68 61 6e 64 6c 65 2e 20 20 54 68 69 73 20  r handle.  This 
9e00: 6d 65 74 68 6f 64 20 69 73 20 6f 6e 6c 79 20 75  method is only u
9e10: 73 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  sed..        ///
9e20: 20 62 79 20 74 68 65 20 3c 73 65 65 20 63 72 65   by the <see cre
9e30: 66 3d 22 53 51 4c 69 74 65 43 68 61 6e 67 65 53  f="SQLiteChangeS
9e40: 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d 22 20  etMetadataItem" 
9e50: 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  /> class...     
9e60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9e70: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
9e80: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
9e90: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
9ea0: 20 69 74 65 72 61 74 6f 72 20 68 61 6e 64 6c 65   iterator handle
9eb0: 20 2d 4f 52 2d 20 3c 73 65 65 20 63 72 65 66 3d   -OR- <see cref=
9ec0: 22 49 6e 74 50 74 72 2e 5a 65 72 6f 22 20 2f 3e  "IntPtr.Zero" />
9ed0: 20 69 66 20 69 74 0d 0a 20 20 20 20 20 20 20 20   if it..        
9ee0: 2f 2f 2f 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  /// is not avail
9ef0: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
9f00: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
9f10: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
9f20: 49 6e 74 50 74 72 20 47 65 74 49 6e 74 50 74 72  IntPtr GetIntPtr
9f30: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
9f40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9f50: 6e 20 69 74 65 72 61 74 6f 72 3b 0d 0a 20 20 20  n iterator;..   
9f60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9f70: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
9f80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9fd0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
9fe0: 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
9ff0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
a000: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
a010: 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
a020: 61 64 76 61 6e 63 65 20 74 68 65 20 6e 61 74 69  advance the nati
a030: 76 65 20 69 74 65 72 61 74 6f 72 20 68 61 6e 64  ve iterator hand
a040: 6c 65 20 74 6f 20 69 74 73 20 6e 65 78 74 20 69  le to its next i
a050: 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tem...        //
a060: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a070: 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
a080: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
a090: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   Non-zero if the
a0a0: 20 6e 61 74 69 76 65 20 69 74 65 72 61 74 6f 72   native iterator
a0b0: 20 68 61 6e 64 6c 65 20 77 61 73 20 61 64 76 61   handle was adva
a0c0: 6e 63 65 64 20 61 6e 64 20 63 6f 6e 74 61 69 6e  nced and contain
a0d0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  s..        /// m
a0e0: 6f 72 65 20 64 61 74 61 3b 20 6f 74 68 65 72 77  ore data; otherw
a0f0: 69 73 65 2c 20 7a 65 72 6f 2e 20 20 49 66 20 74  ise, zero.  If t
a100: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61  he underlying na
a110: 74 69 76 65 20 41 50 49 20 72 65 74 75 72 6e 73  tive API returns
a120: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e  ..        /// an
a130: 20 75 6e 65 78 70 65 63 74 65 64 20 76 61 6c 75   unexpected valu
a140: 65 20 74 68 65 6e 20 61 6e 20 65 78 63 65 70 74  e then an except
a150: 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 68 72 6f  ion will be thro
a160: 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  wn...        ///
a170: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
a180: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
a190: 20 4e 65 78 74 28 29 0d 0a 20 20 20 20 20 20 20   Next()..       
a1a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a1b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
a1d0: 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a  eckHandle();....
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
a1f0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
a200: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
a210: 68 6f 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e  hods.sqlite3chan
a220: 67 65 73 65 74 5f 6e 65 78 74 28 0d 0a 20 20 20  geset_next(..   
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65               ite
a240: 72 61 74 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  rator);....     
a250: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 72         switch (r
a260: 63 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c)..            
a270: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a280: 20 20 20 63 61 73 65 20 53 51 4c 69 74 65 45 72     case SQLiteEr
a290: 72 6f 72 43 6f 64 65 2e 4f 6b 3a 0d 0a 20 20 20  rorCode.Ok:..   
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
a2d0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
a2e0: 70 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f  ption(SQLiteErro
a2f0: 72 43 6f 64 65 2e 4f 6b 2c 0d 0a 20 20 20 20 20  rCode.Ok,..     
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a310: 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 63         "sqlite3c
a320: 68 61 6e 67 65 73 65 74 5f 6e 65 78 74 3a 20 75  hangeset_next: u
a330: 6e 65 78 70 65 63 74 65 64 20 72 65 73 75 6c 74  nexpected result
a340: 20 4f 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20   Ok");..        
a350: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
a370: 61 73 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ase SQLiteErrorC
a380: 6f 64 65 2e 52 6f 77 3a 0d 0a 20 20 20 20 20 20  ode.Row:..      
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
a3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a3b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a3c0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
a3d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
a3f0: 73 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  se SQLiteErrorCo
a400: 64 65 2e 44 6f 6e 65 3a 0d 0a 20 20 20 20 20 20  de.Done:..      
a410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
a420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a430: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a440: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
a450: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
a470: 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20  efault:..       
a480: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4a0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
a4b0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
a4c0: 6e 28 72 63 2c 20 22 73 71 6c 69 74 65 33 63 68  n(rc, "sqlite3ch
a4d0: 61 6e 67 65 73 65 74 5f 6e 65 78 74 22 29 3b 0d  angeset_next");.
a4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a4f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a500: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
a510: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
a520: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a570: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a580: 20 20 20 23 72 65 67 69 6f 6e 20 53 74 61 74 69     #region Stati
a590: 63 20 22 46 61 63 74 6f 72 79 22 20 4d 65 74 68  c "Factory" Meth
a5a0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
a5b0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
a5c0: 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73      /// Attempts
a5d0: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 69 6e   to create an in
a5e0: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
a5f0: 6c 61 73 73 20 74 68 61 74 20 69 73 20 61 73 73  lass that is ass
a600: 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20  ociated..       
a610: 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70   /// with the sp
a620: 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 20 69  ecified native i
a630: 74 65 72 61 74 6f 72 20 68 61 6e 64 6c 65 2e 20  terator handle. 
a640: 20 4f 77 6e 65 72 73 68 69 70 20 6f 66 20 74 68   Ownership of th
a650: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
a660: 61 74 69 76 65 20 69 74 65 72 61 74 6f 72 20 68  ative iterator h
a670: 61 6e 64 6c 65 20 69 73 20 4e 4f 54 20 74 72 61  andle is NOT tra
a680: 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
a690: 6e 65 77 20 69 6e 73 74 61 6e 63 65 20 6f 66 0d  new instance of.
a6a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69  .        /// thi
a6b0: 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20  s class...      
a6c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a6d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
a6e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 74 65 72 61  aram name="itera
a6f0: 74 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tor">..        /
a700: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 69 74  // The native it
a710: 65 72 61 74 6f 72 20 68 61 6e 64 6c 65 20 74 6f  erator handle to
a720: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
a730: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
a740: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
a750: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
a760: 54 68 65 20 6e 65 77 20 69 6e 73 74 61 6e 63 65  The new instance
a770: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 20   of this class. 
a780: 20 4e 6f 20 72 65 74 75 72 6e 20 76 61 6c 75 65   No return value
a790: 20 69 73 20 72 65 73 65 72 76 65 64 20 74 6f 0d   is reserved to.
a7a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64  .        /// ind
a7b0: 69 63 61 74 65 20 61 6e 20 65 72 72 6f 72 3b 20  icate an error; 
a7c0: 68 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20  however, if the 
a7d0: 6e 61 74 69 76 65 20 69 74 65 72 61 74 6f 72 20  native iterator 
a7e0: 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0d 0a 20  handle is not.. 
a7f0: 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 69 64         /// valid
a800: 2c 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  , any subsequent
a810: 20 61 74 74 65 6d 70 74 20 74 6f 20 6d 61 6b 65   attempt to make
a820: 20 75 73 65 20 6f 66 20 69 74 20 76 69 61 20 74   use of it via t
a830: 68 65 20 72 65 74 75 72 6e 65 64 0d 0a 20 20 20  he returned..   
a840: 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63       /// instanc
a850: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20  e of this class 
a860: 6d 61 79 20 74 68 72 6f 77 20 65 78 63 65 70 74  may throw except
a870: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ions...        /
a880: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
a890: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
a8a0: 61 74 69 63 20 53 51 4c 69 74 65 43 68 61 6e 67  atic SQLiteChang
a8b0: 65 53 65 74 49 74 65 72 61 74 6f 72 20 41 74 74  eSetIterator Att
a8c0: 61 63 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ach(..          
a8d0: 20 20 49 6e 74 50 74 72 20 69 74 65 72 61 74 6f    IntPtr iterato
a8e0: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
a8f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a900: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a910: 6e 65 77 20 53 51 4c 69 74 65 43 68 61 6e 67 65  new SQLiteChange
a920: 53 65 74 49 74 65 72 61 74 6f 72 28 69 74 65 72  SetIterator(iter
a930: 61 74 6f 72 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  ator, false);.. 
a940: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a950: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a960: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a9b0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
a9c0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
a9d0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
a9e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
a9f0: 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f         /// Dispo
aa00: 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  ses of this obje
aa10: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
aa20: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
aa30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
aa40: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
aa50: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
aa70: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
aa80: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
aa90: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
aaa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
aab0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
aac0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ab20: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
ab30: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
ab40: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  mbers..        /
ab50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
ab60: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
ab70: 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63  ro if this objec
ab80: 74 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62  t instance has b
ab90: 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  een disposed... 
aba0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
abb0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
abc0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
abd0: 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  osed;....       
abe0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
abf0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f          /// Thro
ac00: 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ws an exception 
ac10: 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  if this object i
ac20: 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e  nstance has been
ac30: 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
ac40: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
ac50: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
ac60: 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69  ate void CheckDi
ac70: 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f  sposed() /* thro
ac80: 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  w */..        {.
ac90: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
aca0: 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
acb0: 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64      if (disposed
acc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
acd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ace0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
acf0: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
ad00: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
ad10: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
ad20: 28 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  (SQLiteChangeSet
ad30: 49 74 65 72 61 74 6f 72 29 2e 4e 61 6d 65 29 3b  Iterator).Name);
ad40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ad50: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
ad60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ada0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
adc0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
add0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70          /// Disp
ade0: 6f 73 65 73 20 6f 72 20 66 69 6e 61 6c 69 7a 65  oses or finalize
adf0: 73 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  s this object in
ae00: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
ae10: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ae20: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
ae30: 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73  ram name="dispos
ae40: 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ing">..        /
ae50: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
ae60: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 62 65  his object is be
ae70: 69 6e 67 20 64 69 73 70 6f 73 65 64 3b 20 6f 74  ing disposed; ot
ae80: 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 6f 62  herwise, this ob
ae90: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
aea0: 2f 20 69 73 20 62 65 69 6e 67 20 66 69 6e 61 6c  / is being final
aeb0: 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ized...        /
aec0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
aed0: 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
aee0: 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69 73 70  irtual void Disp
aef0: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
af00: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng)..        {..
af10: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
af20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af40: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
af70: 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73         //if (dis
af80: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
af90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b               //{
afa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afb0: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aff0: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64        //    // d
b000: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
b010: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
b020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b030: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
b040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b070: 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20        //}....   
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
b0d0: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
b0e0: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
b0f0: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
b100: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b130: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b140: 20 20 20 20 20 20 20 69 66 20 28 69 74 65 72 61         if (itera
b150: 74 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  tor != IntPtr.Ze
b160: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
b170: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b190: 20 20 20 20 69 66 20 28 6f 77 6e 48 61 6e 64 6c      if (ownHandl
b1a0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1d0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
b1e0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
b1f0: 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f  qlite3changeset_
b200: 66 69 6e 61 6c 69 7a 65 28 0d 0a 20 20 20 20 20  finalize(..     
b210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b220: 20 20 20 20 20 20 20 20 20 20 20 69 74 65 72 61             itera
b230: 74 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tor);..         
b240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b260: 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65 72              iter
b270: 61 74 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  ator = IntPtr.Ze
b280: 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
b290: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b2c0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
b2d0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
b2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b2f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b300: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45        // NOTE: E
b310: 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64  verything should
b320: 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73   be fully dispos
b330: 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ed at this point
b340: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b350: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
b360: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
b370: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
b380: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b390: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
b3a0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
b3b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b400: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
b410: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
b420: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b430: 20 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e 61 6c         /// Final
b440: 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65 63 74  izes this object
b450: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
b460: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b470: 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e 53 51 4c  y>..        ~SQL
b480: 69 74 65 43 68 61 6e 67 65 53 65 74 49 74 65 72  iteChangeSetIter
b490: 61 74 6f 72 28 29 0d 0a 20 20 20 20 20 20 20 20  ator()..        
b4a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44  {..            D
b4b0: 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
b4c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b4d0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
b4e0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
b4f0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b540: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
b550: 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 65 6d  region SQLiteMem
b560: 6f 72 79 43 68 61 6e 67 65 53 65 74 49 74 65 72  oryChangeSetIter
b570: 61 74 6f 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  ator Class..    
b580: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b590: 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
b5a0: 73 20 6d 61 6e 61 67 65 73 20 74 68 65 20 6e 61  s manages the na
b5b0: 74 69 76 65 20 63 68 61 6e 67 65 20 73 65 74 20  tive change set 
b5c0: 69 74 65 72 61 74 6f 72 20 66 6f 72 20 61 20 73  iterator for a s
b5d0: 65 74 20 6f 66 20 63 68 61 6e 67 65 73 0d 0a 20  et of changes.. 
b5e0: 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 65 64     /// contained
b5f0: 20 65 6e 74 69 72 65 6c 79 20 69 6e 20 6d 65 6d   entirely in mem
b600: 6f 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ory...    /// </
b610: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
b620: 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c  ternal sealed cl
b630: 61 73 73 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  ass SQLiteMemory
b640: 43 68 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f  ChangeSetIterato
b650: 72 20 3a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  r :..        SQL
b660: 69 74 65 43 68 61 6e 67 65 53 65 74 49 74 65 72  iteChangeSetIter
b670: 61 74 6f 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ator..    {..   
b680: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
b690: 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20  vate Data..     
b6a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
b6b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
b6c0: 65 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20  e native memory 
b6d0: 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65 64  buffer allocated
b6e0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20   to contain the 
b6f0: 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 0d 0a  set of changes..
b700: 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
b710: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
b720: 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68 69 73   instance.  This
b730: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20   will always be 
b740: 66 72 65 65 64 20 77 68 65 6e 20 74 68 69 73 0d  freed when this.
b750: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73  .        /// ins
b760: 74 61 6e 63 65 20 69 73 20 64 69 73 70 6f 73 65  tance is dispose
b770: 64 20 6f 72 20 66 69 6e 61 6c 69 7a 65 64 2e 0d  d or finalized..
b780: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
b790: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
b7a0: 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
b7b0: 70 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  pData;..        
b7c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b7d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b820: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b830: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75   Private Constru
b840: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  ctors..        /
b850: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
b860: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72        /// Constr
b870: 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
b880: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20 75   of this class u
b890: 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  sing the specifi
b8a0: 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  ed native..     
b8b0: 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 62 75     /// memory bu
b8c0: 66 66 65 72 20 61 6e 64 20 6e 61 74 69 76 65 20  ffer and native 
b8d0: 69 74 65 72 61 74 6f 72 20 68 61 6e 64 6c 65 2e  iterator handle.
b8e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
b8f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
b900: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
b910: 65 3d 22 70 44 61 74 61 22 3e 0d 0a 20 20 20 20  e="pData">..    
b920: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
b930: 76 65 20 6d 65 6d 6f 72 79 20 62 75 66 66 65 72  ve memory buffer
b940: 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20   to use...      
b950: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
b960: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
b970: 61 6d 20 6e 61 6d 65 3d 22 69 74 65 72 61 74 6f  am name="iterato
b980: 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
b990: 20 54 68 65 20 6e 61 74 69 76 65 20 69 74 65 72   The native iter
b9a0: 61 74 6f 72 20 68 61 6e 64 6c 65 20 74 6f 20 75  ator handle to u
b9b0: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
b9c0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
b9d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
b9e0: 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d  me="ownHandle">.
b9f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
ba00: 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 69 6e  -zero if this in
ba10: 73 74 61 6e 63 65 20 69 73 20 74 6f 20 74 61 6b  stance is to tak
ba20: 65 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 74  e ownership of t
ba30: 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  he native..     
ba40: 20 20 20 2f 2f 2f 20 69 74 65 72 61 74 6f 72 20     /// iterator 
ba50: 68 61 6e 64 6c 65 20 73 70 65 63 69 66 69 65 64  handle specified
ba60: 20 62 79 20 3c 70 61 72 61 6d 72 65 66 20 6e 61   by <paramref na
ba70: 6d 65 3d 22 69 74 65 72 61 74 6f 72 22 20 2f 3e  me="iterator" />
ba80: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
ba90: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
baa0: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 4d   private SQLiteM
bab0: 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 49 74  emoryChangeSetIt
bac0: 65 72 61 74 6f 72 28 0d 0a 20 20 20 20 20 20 20  erator(..       
bad0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 61 74       IntPtr pDat
bae0: 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
baf0: 49 6e 74 50 74 72 20 69 74 65 72 61 74 6f 72 2c  IntPtr iterator,
bb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
bb10: 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20  ol ownHandle..  
bb20: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
bb30: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
bb40: 69 74 65 72 61 74 6f 72 2c 20 6f 77 6e 48 61 6e  iterator, ownHan
bb50: 64 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  dle)..        {.
bb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
bb70: 73 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61 3b  s.pData = pData;
bb80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
bb90: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
bba0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
bbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
bc00: 65 67 69 6f 6e 20 53 74 61 74 69 63 20 22 46 61  egion Static "Fa
bc10: 63 74 6f 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a  ctory" Methods..
bc20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
bc30: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
bc40: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 63  // Attempts to c
bc50: 72 65 61 74 65 20 61 6e 20 69 6e 73 74 61 6e 63  reate an instanc
bc60: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20  e of this class 
bc70: 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66  using the specif
bc80: 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ied..        ///
bc90: 20 72 61 77 20 62 79 74 65 20 64 61 74 61 2e 0d   raw byte data..
bca0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
bcb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
bcc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
bcd0: 3d 22 72 61 77 44 61 74 61 22 3e 0d 0a 20 20 20  ="rawData">..   
bce0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 61 77       /// The raw
bcf0: 20 62 79 74 65 20 64 61 74 61 20 63 6f 6e 74 61   byte data conta
bd00: 69 6e 69 6e 67 20 74 68 65 20 73 65 74 20 6f 66  ining the set of
bd10: 20 63 68 61 6e 67 65 73 20 66 6f 72 20 74 68 69   changes for thi
bd20: 73 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  s native..      
bd30: 20 20 2f 2f 2f 20 69 74 65 72 61 74 6f 72 2e 0d    /// iterator..
bd40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
bd50: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
bd60: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
bd70: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65        /// The ne
bd80: 77 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  w instance of th
bd90: 69 73 20 63 6c 61 73 73 20 2d 4f 52 2d 20 6e 75  is class -OR- nu
bda0: 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20  ll if it cannot 
bdb0: 62 65 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20  be created...   
bdc0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
bdd0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
bde0: 6c 69 63 20 73 74 61 74 69 63 20 53 51 4c 69 74  lic static SQLit
bdf0: 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74  eMemoryChangeSet
be00: 49 74 65 72 61 74 6f 72 20 43 72 65 61 74 65 28  Iterator Create(
be10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
be20: 74 65 5b 5d 20 72 61 77 44 61 74 61 0d 0a 20 20  te[] rawData..  
be30: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
be40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
be50: 20 20 20 20 53 51 4c 69 74 65 53 65 73 73 69 6f      SQLiteSessio
be60: 6e 48 65 6c 70 65 72 73 2e 43 68 65 63 6b 52 61  nHelpers.CheckRa
be70: 77 44 61 74 61 28 72 61 77 44 61 74 61 29 3b 0d  wData(rawData);.
be80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
be90: 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67  QLiteMemoryChang
bea0: 65 53 65 74 49 74 65 72 61 74 6f 72 20 72 65 73  eSetIterator res
beb0: 75 6c 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ult = null;..   
bec0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
bed0: 70 44 61 74 61 20 3d 20 49 6e 74 50 74 72 2e 5a  pData = IntPtr.Z
bee0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
bef0: 20 20 49 6e 74 50 74 72 20 69 74 65 72 61 74 6f    IntPtr iterato
bf00: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
bf10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bf20: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
bf30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bf40: 20 20 20 20 69 6e 74 20 6e 44 61 74 61 20 3d 20      int nData = 
bf50: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
bf60: 20 20 20 20 20 20 70 44 61 74 61 20 3d 20 53 51        pData = SQ
bf70: 4c 69 74 65 42 79 74 65 73 2e 54 6f 49 6e 74 50  LiteBytes.ToIntP
bf80: 74 72 28 72 61 77 44 61 74 61 2c 20 72 65 66 20  tr(rawData, ref 
bf90: 6e 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20  nData);....     
bfa0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
bfb0: 44 61 74 61 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  Data == IntPtr.Z
bfc0: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
bfd0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
bfe0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
bff0: 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f 72 43  ion(SQLiteErrorC
c000: 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 6e 75 6c 6c 29  ode.NoMem, null)
c010: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c020: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c030: 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
c040: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
c050: 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f 73  lite3changeset_s
c060: 74 61 72 74 28 0d 0a 20 20 20 20 20 20 20 20 20  tart(..         
c070: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 69             ref i
c080: 74 65 72 61 74 6f 72 2c 20 6e 44 61 74 61 2c 20  terator, nData, 
c090: 70 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20  pData);....     
c0a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
c0b0: 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c != SQLiteError
c0c0: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
c0e0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
c0f0: 63 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c  ception(rc, "sql
c100: 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f 73 74  ite3changeset_st
c110: 61 72 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  art");....      
c120: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
c130: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4d 65 6d   = new SQLiteMem
c140: 6f 72 79 43 68 61 6e 67 65 53 65 74 49 74 65 72  oryChangeSetIter
c150: 61 74 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ator(..         
c160: 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
c170: 2c 20 69 74 65 72 61 74 6f 72 2c 20 74 72 75 65  , iterator, true
c180: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c190: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
c1a0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
c1b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c1c0: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
c1d0: 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c200: 20 20 20 69 66 20 28 69 74 65 72 61 74 6f 72 20     if (iterator 
c210: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
c220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c230: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
c260: 6f 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67  ods.sqlite3chang
c270: 65 73 65 74 5f 66 69 6e 61 6c 69 7a 65 28 0d 0a  eset_finalize(..
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65 72              iter
c2a0: 61 74 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ator);....      
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2c0: 20 20 69 74 65 72 61 74 6f 72 20 3d 20 49 6e 74    iterator = Int
c2d0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c2f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c300: 20 20 20 20 20 20 20 20 69 66 20 28 70 44 61 74          if (pDat
c310: 61 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  a != IntPtr.Zero
c320: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c350: 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
c360: 72 65 65 28 70 44 61 74 61 29 3b 0d 0a 20 20 20  ree(pData);..   
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 20 20 20 20 70 44 61 74 61 20 3d 20 49 6e 74       pData = Int
c390: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c3c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c3d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
c3e0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
c3f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
c400: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
c410: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
c420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c460: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
c470: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
c480: 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
c490: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ers..        ///
c4a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
c4b0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
c4c0: 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   if this object 
c4d0: 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65 65  instance has bee
c4e0: 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20  n disposed...   
c4f0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
c500: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
c510: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
c520: 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ed;....        /
c530: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
c540: 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73        /// Throws
c550: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66   an exception if
c560: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
c570: 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64  tance has been d
c580: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
c590: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
c5a0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
c5b0: 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70  e void CheckDisp
c5c0: 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20  osed() /* throw 
c5d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  */..        {..#
c5e0: 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50  if THROW_ON_DISP
c5f0: 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20  OSED..          
c600: 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
c610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c630: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
c640: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
c650: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
c660: 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
c670: 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67  QLiteMemoryChang
c680: 65 53 65 74 49 74 65 72 61 74 6f 72 29 2e 4e 61  eSetIterator).Na
c690: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
c6a0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
c6b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c6c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
c6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
c710: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
c720: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
c730: 44 69 73 70 6f 73 65 73 20 6f 72 20 66 69 6e 61  Disposes or fina
c740: 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65 63  lizes this objec
c750: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
c760: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
c770: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
c780: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69   <param name="di
c790: 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20  sposing">..     
c7a0: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
c7b0: 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  if this object i
c7c0: 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64  s being disposed
c7d0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69  ; otherwise, thi
c7e0: 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  s object..      
c7f0: 20 20 2f 2f 2f 20 69 73 20 62 65 69 6e 67 20 66    /// is being f
c800: 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20  inalized...     
c810: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
c820: 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
c830: 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ed override void
c840: 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69   Dispose(bool di
c850: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
c860: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c870: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c880: 20 2f 2f 20 4e 4f 54 45 3a 20 4d 75 73 74 20 64   // NOTE: Must d
c890: 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 62 61  ispose of the ba
c8a0: 73 65 20 63 6c 61 73 73 20 66 69 72 73 74 20 28  se class first (
c8b0: 6c 65 61 6b 79 20 61 62 73 74 72 61 63 74 69 6f  leaky abstractio
c8c0: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
c8d0: 2f 2f 20 20 20 20 20 20 20 62 65 63 61 75 73 65  //       because
c8e0: 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   it contains the
c8f0: 20 69 74 65 72 61 74 6f 72 20 68 61 6e 64 6c 65   iterator handle
c900: 2c 20 77 68 69 63 68 20 6d 75 73 74 20 62 65 0d  , which must be.
c910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
c920: 20 20 20 20 20 20 63 6c 6f 73 65 64 20 2a 70 72        closed *pr
c930: 69 6f 72 2a 20 74 6f 20 66 72 65 65 69 6e 67 20  ior* to freeing 
c940: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  the underlying m
c950: 65 6d 6f 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  emory...        
c960: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
c970: 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65      base.Dispose
c980: 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a  (disposing);....
c990: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
c9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9c0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c9f0: 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73         //if (dis
ca00: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b               //{
ca20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ca30: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ca70: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64        //    // d
ca80: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
ca90: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
caa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cab0: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
caf0: 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20        //}....   
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
cb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
cb50: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
cb60: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
cb70: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
cb80: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
cb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
cbb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
cbc0: 20 20 20 20 20 20 20 69 66 20 28 70 44 61 74 61         if (pData
cbd0: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
cbe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cbf0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc10: 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72   SQLiteMemory.Fr
cc20: 65 65 28 70 44 61 74 61 29 3b 0d 0a 20 20 20 20  ee(pData);..    
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc40: 20 20 20 20 70 44 61 74 61 20 3d 20 49 6e 74 50      pData = IntP
cc50: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
cc70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cc80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
cc90: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
cca0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
ccb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ccc0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
ccd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
cce0: 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73  TE: Everything s
ccf0: 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64  hould be fully d
cd00: 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20  isposed at this 
cd10: 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  point...        
cd20: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
cd40: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
cd50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
cd60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
cd70: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
cd80: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
cd90: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
cda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
cdf0: 69 6f 6e 20 53 51 4c 69 74 65 53 74 72 65 61 6d  ion SQLiteStream
ce00: 43 68 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f  ChangeSetIterato
ce10: 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f  r Class..    ///
ce20: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ce30: 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 6d  /// This class m
ce40: 61 6e 61 67 65 73 20 74 68 65 20 6e 61 74 69 76  anages the nativ
ce50: 65 20 63 68 61 6e 67 65 20 73 65 74 20 69 74 65  e change set ite
ce60: 72 61 74 6f 72 20 66 6f 72 20 61 20 73 65 74 20  rator for a set 
ce70: 6f 66 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20  of changes..    
ce80: 2f 2f 2f 20 62 61 63 6b 65 64 20 62 79 20 61 20  /// backed by a 
ce90: 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 65 61  <see cref="Strea
cea0: 6d 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 2e 0d  m" /> instance..
ceb0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
cec0: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
ced0: 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  l sealed class S
cee0: 51 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67  QLiteStreamChang
cef0: 65 53 65 74 49 74 65 72 61 74 6f 72 20 3a 0d 0a  eSetIterator :..
cf00: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 68          SQLiteCh
cf10: 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 0d  angeSetIterator.
cf20: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
cf30: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
cf40: 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Data..        //
cf50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
cf60: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
cf70: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 53 74  e cref="SQLiteSt
cf80: 72 65 61 6d 41 64 61 70 74 65 72 22 20 2f 3e 20  reamAdapter" /> 
cf90: 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20 69 73  instance that is
cfa0: 20 6d 61 6e 61 67 69 6e 67 0d 0a 20 20 20 20 20   managing..     
cfb0: 20 20 20 2f 2f 2f 20 74 68 65 20 75 6e 64 65 72     /// the under
cfc0: 6c 79 69 6e 67 20 3c 73 65 65 20 63 72 65 66 3d  lying <see cref=
cfd0: 22 53 74 72 65 61 6d 22 20 2f 3e 20 75 73 65 64  "Stream" /> used
cfe0: 20 61 73 20 74 68 65 20 62 61 63 6b 69 6e 67 20   as the backing 
cff0: 73 74 6f 72 65 20 66 6f 72 0d 0a 20 20 20 20 20  store for..     
d000: 20 20 20 2f 2f 2f 20 74 68 65 20 73 65 74 20 6f     /// the set o
d010: 66 20 63 68 61 6e 67 65 73 20 61 73 73 6f 63 69  f changes associ
d020: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6e  ated with this n
d030: 61 74 69 76 65 20 63 68 61 6e 67 65 20 73 65 74  ative change set
d040: 20 69 74 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20   iterator...    
d050: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d060: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
d070: 61 74 65 20 53 51 4c 69 74 65 53 74 72 65 61 6d  ate SQLiteStream
d080: 41 64 61 70 74 65 72 20 73 74 72 65 61 6d 41 64  Adapter streamAd
d090: 61 70 74 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  apter;..        
d0a0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
d0b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d100: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
d110: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75   Private Constru
d120: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  ctors..        /
d130: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
d140: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72        /// Constr
d150: 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
d160: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20 75   of this class u
d170: 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  sing the specifi
d180: 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  ed native..     
d190: 20 20 20 2f 2f 2f 20 69 74 65 72 61 74 6f 72 20     /// iterator 
d1a0: 68 61 6e 64 6c 65 20 61 6e 64 20 3c 73 65 65 20  handle and <see 
d1b0: 63 72 65 66 3d 22 53 51 4c 69 74 65 53 74 72 65  cref="SQLiteStre
d1c0: 61 6d 41 64 61 70 74 65 72 22 20 2f 3e 2e 0d 0a  amAdapter" />...
d1d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
d1e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
d1f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
d200: 22 73 74 72 65 61 6d 41 64 61 70 74 65 72 22 3e  "streamAdapter">
d210: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
d220: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
d230: 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65 72  iteStreamAdapter
d240: 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20 74 6f  " /> instance to
d250: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
d260: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
d270: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
d280: 6e 61 6d 65 3d 22 69 74 65 72 61 74 6f 72 22 3e  name="iterator">
d290: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
d2a0: 65 20 6e 61 74 69 76 65 20 69 74 65 72 61 74 6f  e native iterato
d2b0: 72 20 68 61 6e 64 6c 65 20 74 6f 20 75 73 65 2e  r handle to use.
d2c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
d2d0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
d2e0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
d2f0: 22 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a 20 20  "ownHandle">..  
d300: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
d310: 72 6f 20 69 66 20 74 68 69 73 20 69 6e 73 74 61  ro if this insta
d320: 6e 63 65 20 69 73 20 74 6f 20 74 61 6b 65 20 6f  nce is to take o
d330: 77 6e 65 72 73 68 69 70 20 6f 66 20 74 68 65 20  wnership of the 
d340: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
d350: 2f 2f 2f 20 69 74 65 72 61 74 6f 72 20 68 61 6e  /// iterator han
d360: 64 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 79  dle specified by
d370: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
d380: 22 69 74 65 72 61 74 6f 72 22 20 2f 3e 2e 0d 0a  "iterator" />...
d390: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
d3a0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ram>..        pr
d3b0: 69 76 61 74 65 20 53 51 4c 69 74 65 53 74 72 65  ivate SQLiteStre
d3c0: 61 6d 43 68 61 6e 67 65 53 65 74 49 74 65 72 61  amChangeSetItera
d3d0: 74 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tor(..          
d3e0: 20 20 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64    SQLiteStreamAd
d3f0: 61 70 74 65 72 20 73 74 72 65 61 6d 41 64 61 70  apter streamAdap
d400: 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
d410: 20 20 49 6e 74 50 74 72 20 69 74 65 72 61 74 6f    IntPtr iterato
d420: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
d430: 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65 0d 0a  bool ownHandle..
d440: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d450: 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73             : bas
d460: 65 28 69 74 65 72 61 74 6f 72 2c 20 6f 77 6e 48  e(iterator, ownH
d470: 61 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  andle)..        
d480: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
d490: 68 69 73 2e 73 74 72 65 61 6d 41 64 61 70 74 65  his.streamAdapte
d4a0: 72 20 3d 20 73 74 72 65 61 6d 41 64 61 70 74 65  r = streamAdapte
d4b0: 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  r;..        }.. 
d4c0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
d4d0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
d4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d520: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
d530: 23 72 65 67 69 6f 6e 20 53 74 61 74 69 63 20 22  #region Static "
d540: 46 61 63 74 6f 72 79 22 20 4d 65 74 68 6f 64 73  Factory" Methods
d550: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
d560: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
d570: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
d580: 20 63 72 65 61 74 65 20 61 6e 20 69 6e 73 74 61   create an insta
d590: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
d5a0: 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63  s using the spec
d5b0: 69 66 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  ified..        /
d5c0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74  // <see cref="St
d5d0: 72 65 61 6d 22 20 2f 3e 2e 0d 0a 20 20 20 20 20  ream" />...     
d5e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
d5f0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
d600: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 65  param name="stre
d610: 61 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  am">..        //
d620: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
d630: 22 53 74 72 65 61 6d 22 20 2f 3e 20 77 68 65 72  "Stream" /> wher
d640: 65 20 74 68 65 20 72 61 77 20 62 79 74 65 20 64  e the raw byte d
d650: 61 74 61 20 66 6f 72 20 74 68 65 20 73 65 74 20  ata for the set 
d660: 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
d670: 63 68 61 6e 67 65 73 20 6d 61 79 20 62 65 20 72  changes may be r
d680: 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ead...        //
d690: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
d6a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
d6b0: 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
d6c0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c        /// The fl
d6d0: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
d6e0: 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63  ith the parent c
d6f0: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
d700: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
d710: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
d720: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
d730: 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 69 6e 73   /// The new ins
d740: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c  tance of this cl
d750: 61 73 73 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66  ass -OR- null if
d760: 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72   it cannot be cr
d770: 65 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  eated...        
d780: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
d790: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
d7a0: 74 61 74 69 63 20 53 51 4c 69 74 65 53 74 72 65  tatic SQLiteStre
d7b0: 61 6d 43 68 61 6e 67 65 53 65 74 49 74 65 72 61  amChangeSetItera
d7c0: 74 6f 72 20 43 72 65 61 74 65 28 0d 0a 20 20 20  tor Create(..   
d7d0: 20 20 20 20 20 20 20 20 20 53 74 72 65 61 6d 20           Stream 
d7e0: 73 74 72 65 61 6d 2c 0d 0a 20 20 20 20 20 20 20  stream,..       
d7f0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
d800: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
d810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
d820: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d830: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 65          if (stre
d840: 61 6d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  am == null)..   
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
d860: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
d870: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 74  ullException("st
d880: 72 65 61 6d 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ream");....     
d890: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 72         SQLiteStr
d8a0: 65 61 6d 41 64 61 70 74 65 72 20 73 74 72 65 61  eamAdapter strea
d8b0: 6d 41 64 61 70 74 65 72 20 3d 20 6e 75 6c 6c 3b  mAdapter = null;
d8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
d8d0: 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67 65  LiteStreamChange
d8e0: 53 65 74 49 74 65 72 61 74 6f 72 20 72 65 73 75  SetIterator resu
d8f0: 6c 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  lt = null;..    
d900: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 69          IntPtr i
d910: 74 65 72 61 74 6f 72 20 3d 20 49 6e 74 50 74 72  terator = IntPtr
d920: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
d930: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
d940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d950: 20 20 20 20 20 20 20 20 20 20 73 74 72 65 61 6d            stream
d960: 41 64 61 70 74 65 72 20 3d 20 6e 65 77 20 53 51  Adapter = new SQ
d970: 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
d980: 72 28 73 74 72 65 61 6d 2c 20 66 6c 61 67 73 29  r(stream, flags)
d990: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d9a0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
d9b0: 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
d9c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d9d0: 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f 73  lite3changeset_s
d9e0: 74 61 72 74 5f 73 74 72 6d 28 0d 0a 20 20 20 20  tart_strm(..    
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da00: 72 65 66 20 69 74 65 72 61 74 6f 72 2c 20 73 74  ref iterator, st
da10: 72 65 61 6d 41 64 61 70 74 65 72 2e 47 65 74 49  reamAdapter.GetI
da20: 6e 70 75 74 44 65 6c 65 67 61 74 65 28 29 2c 20  nputDelegate(), 
da30: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d  IntPtr.Zero);...
da40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da50: 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
da60: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
da90: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
daa0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
dab0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
dac0: 20 20 20 20 20 20 20 20 20 20 20 72 63 2c 20 22             rc, "
dad0: 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74  sqlite3changeset
dae0: 5f 73 74 61 72 74 5f 73 74 72 6d 22 29 3b 0d 0a  _start_strm");..
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
db10: 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 6e 65       result = ne
db20: 77 20 53 51 4c 69 74 65 53 74 72 65 61 6d 43 68  w SQLiteStreamCh
db30: 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 28  angeSetIterator(
db40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
db50: 20 20 20 20 20 20 73 74 72 65 61 6d 41 64 61 70        streamAdap
db60: 74 65 72 2c 20 69 74 65 72 61 74 6f 72 2c 20 74  ter, iterator, t
db70: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
db80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
db90: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
dba0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dbb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
dbc0: 73 75 6c 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sult == null).. 
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
dbe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dbf0: 20 20 20 20 20 20 69 66 20 28 69 74 65 72 61 74        if (iterat
dc00: 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  or != IntPtr.Zer
dc10: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
dc20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc40: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
dc50: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 63 68  ethods.sqlite3ch
dc60: 61 6e 67 65 73 65 74 5f 66 69 6e 61 6c 69 7a 65  angeset_finalize
dc70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
dc90: 74 65 72 61 74 6f 72 29 3b 0d 0a 0d 0a 20 20 20  terator);....   
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 20 20 20 20 69 74 65 72 61 74 6f 72 20 3d 20       iterator = 
dcc0: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
dcf0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
dd00: 74 72 65 61 6d 41 64 61 70 74 65 72 20 21 3d 20  treamAdapter != 
dd10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
dd20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 20 20 20 20 20 20 73 74 72 65 61 6d 41 64 61 70        streamAdap
dd50: 74 65 72 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  ter.Dispose();..
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd70: 20 20 20 20 20 20 20 20 73 74 72 65 61 6d 41 64          streamAd
dd80: 61 70 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  apter = null;.. 
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
ddb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ddc0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ddd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
dde0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
ddf0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
de00: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
de10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
de60: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
de70: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
de80: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
de90: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
dea0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
deb0: 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a  zero if this obj
dec0: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 68 61 73  ect instance has
ded0: 20 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d   been disposed..
dee0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
def0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
df00: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
df10: 73 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 20  sposed;....     
df20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
df30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
df40: 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f  rows an exceptio
df50: 6e 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74  n if this object
df60: 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65   instance has be
df70: 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  en disposed...  
df80: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
df90: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
dfa0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
dfb0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
dfc0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
dfd0: 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
dfe0: 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
dff0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
e000: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
e010: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e020: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
e030: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
e040: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
e050: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
e060: 6f 66 28 53 51 4c 69 74 65 53 74 72 65 61 6d 43  of(SQLiteStreamC
e070: 68 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72  hangeSetIterator
e080: 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
e090: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
e0a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
e0b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e100: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
e110: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
e120: 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 72 20  /// Disposes or 
e130: 66 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f  finalizes this o
e140: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
e150: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
e160: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
e170: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
e180: 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20  ="disposing">.. 
e190: 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
e1a0: 65 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65  ero if this obje
e1b0: 63 74 20 69 73 20 62 65 69 6e 67 20 64 69 73 70  ct is being disp
e1c0: 6f 73 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c  osed; otherwise,
e1d0: 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20   this object..  
e1e0: 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69        /// is bei
e1f0: 6e 67 20 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20  ng finalized... 
e200: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
e210: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  am>..        pro
e220: 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20  tected override 
e230: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f  void Dispose(boo
e240: 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20  l disposing)..  
e250: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e260: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
e270: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e280: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
e290: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
e2a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29  //if (disposing)
e2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e2e0: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e300: 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  /    ///////////
e310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e340: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
e350: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
e360: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e380: 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  /    ///////////
e390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
e3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e3c0: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
e3d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e410: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
e420: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
e430: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e450: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
e460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e470: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
e480: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e490: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
e4a0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
e4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4d0: 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73  base.Dispose(dis
e4e0: 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  posing);....    
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68  // NOTE: Everyth
e520: 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75  ing should be fu
e530: 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74 20  lly disposed at 
e540: 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20  this point...   
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
e560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e570: 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65   disposed = true
e580: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
e590: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e5a0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
e5b0: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
e5c0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
e5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e620: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 53   #region SQLiteS
e630: 74 72 65 61 6d 41 64 61 70 74 65 72 20 43 6c 61  treamAdapter Cla
e640: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
e650: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
e660: 68 69 73 20 63 6c 61 73 73 20 69 73 20 75 73 65  his class is use
e670: 64 20 74 6f 20 61 63 74 20 61 73 20 61 20 62 72  d to act as a br
e680: 69 64 67 65 20 62 65 74 77 65 65 6e 20 61 20 3c  idge between a <
e690: 73 65 65 20 63 72 65 66 3d 22 53 74 72 65 61 6d  see cref="Stream
e6a0: 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  " />..    /// in
e6b0: 73 74 61 6e 63 65 20 61 6e 64 20 74 68 65 20 64  stance and the d
e6c0: 65 6c 65 67 61 74 65 73 20 75 73 65 64 20 77 69  elegates used wi
e6d0: 74 68 20 74 68 65 20 6e 61 74 69 76 65 20 73 74  th the native st
e6e0: 72 65 61 6d 69 6e 67 20 41 50 49 2e 0d 0a 20 20  reaming API...  
e6f0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e700: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
e710: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
e720: 74 65 53 74 72 65 61 6d 41 64 61 70 74 65 72 20  teStreamAdapter 
e730: 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20  : IDisposable.. 
e740: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
e750: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61  egion Private Da
e760: 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ta..        /// 
e770: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
e780: 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67     /// The manag
e790: 65 64 20 73 74 72 65 61 6d 20 69 6e 73 74 61 6e  ed stream instan
e7a0: 63 65 20 75 73 65 64 20 74 6f 20 69 6e 20 6f 72  ce used to in or
e7b0: 64 65 72 20 74 6f 20 73 65 72 76 69 63 65 20 74  der to service t
e7c0: 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  he native..     
e7d0: 20 20 20 2f 2f 2f 20 64 65 6c 65 67 61 74 65 73     /// delegates
e7e0: 20 66 6f 72 20 62 6f 74 68 20 69 6e 70 75 74 20   for both input 
e7f0: 61 6e 64 20 6f 75 74 70 75 74 2e 0d 0a 20 20 20  and output...   
e800: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
e810: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
e820: 76 61 74 65 20 53 74 72 65 61 6d 20 73 74 72 65  vate Stream stre
e830: 61 6d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  am;....        /
e840: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
e850: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c        /// The fl
e860: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
e870: 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ith the connecti
e880: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
e890: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e8a0: 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
e8b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e8c0: 67 73 20 66 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20  gs flags;....   
e8d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e920: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
e930: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
e940: 2f 2f 20 54 68 65 20 64 65 6c 65 67 61 74 65 20  // The delegate 
e950: 75 73 65 64 20 74 6f 20 70 72 6f 76 69 64 65 20  used to provide 
e960: 69 6e 70 75 74 20 74 6f 20 74 68 65 20 6e 61 74  input to the nat
e970: 69 76 65 20 73 74 72 65 61 6d 69 6e 67 20 41 50  ive streaming AP
e980: 49 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  I...        /// 
e990: 49 74 20 77 69 6c 6c 20 62 65 20 6e 75 6c 6c 20  It will be null 
e9a0: 2d 4f 52 2d 20 70 6f 69 6e 74 20 74 6f 20 74 68  -OR- point to th
e9b0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 70  e <see cref="Inp
e9c0: 75 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ut" /> method...
e9d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
e9e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
e9f0: 70 72 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61  private UnsafeNa
ea00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65 73  tiveMethods.xSes
ea10: 73 69 6f 6e 49 6e 70 75 74 20 78 49 6e 70 75 74  sionInput xInput
ea20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
ea30: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ea40: 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 6c 65      /// The dele
ea50: 67 61 74 65 20 75 73 65 64 20 74 6f 20 70 72 6f  gate used to pro
ea60: 76 69 64 65 20 6f 75 74 70 75 74 20 74 6f 20 74  vide output to t
ea70: 68 65 20 6e 61 74 69 76 65 20 73 74 72 65 61 6d  he native stream
ea80: 69 6e 67 20 41 50 49 2e 0d 0a 20 20 20 20 20 20  ing API...      
ea90: 20 20 2f 2f 2f 20 49 74 20 77 69 6c 6c 20 62 65    /// It will be
eaa0: 20 6e 75 6c 6c 20 2d 4f 52 2d 20 70 6f 69 6e 74   null -OR- point
eab0: 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65   to the <see cre
eac0: 66 3d 22 4f 75 74 70 75 74 22 20 2f 3e 20 6d 65  f="Output" /> me
ead0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
eae0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
eaf0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 55         private U
eb00: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
eb10: 64 73 2e 78 53 65 73 73 69 6f 6e 4f 75 74 70 75  ds.xSessionOutpu
eb20: 74 20 78 4f 75 74 70 75 74 3b 0d 0a 20 20 20 20  t xOutput;..    
eb30: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
eb40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb90: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
eba0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
ebb0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
ebc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
ebd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
ebe0: 73 74 72 75 63 74 73 20 61 20 6e 65 77 20 69 6e  structs a new in
ebf0: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
ec00: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
ec10: 70 65 63 69 66 69 65 64 20 6d 61 6e 61 67 65 64  pecified managed
ec20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
ec30: 72 65 61 6d 20 61 6e 64 20 63 6f 6e 6e 65 63 74  ream and connect
ec40: 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20  ion flags...    
ec50: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
ec60: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
ec70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72  <param name="str
ec80: 65 61 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  eam">..        /
ec90: 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65 64 20 73  // The managed s
eca0: 74 72 65 61 6d 20 69 6e 73 74 61 6e 63 65 20 74  tream instance t
ecb0: 6f 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72 64  o be used in ord
ecc0: 65 72 20 74 6f 20 73 65 72 76 69 63 65 20 74 68  er to service th
ecd0: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
ece0: 61 74 69 76 65 20 64 65 6c 65 67 61 74 65 73 20  ative delegates 
ecf0: 66 6f 72 20 62 6f 74 68 20 69 6e 70 75 74 20 61  for both input a
ed00: 6e 64 20 6f 75 74 70 75 74 2e 0d 0a 20 20 20 20  nd output...    
ed10: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
ed20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
ed30: 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
ed40: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
ed50: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
ed60: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
ed70: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  rent connection.
ed80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
ed90: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
eda0: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 53 74 72  public SQLiteStr
edb0: 65 61 6d 41 64 61 70 74 65 72 28 0d 0a 20 20 20  eamAdapter(..   
edc0: 20 20 20 20 20 20 20 20 20 53 74 72 65 61 6d 20           Stream 
edd0: 73 74 72 65 61 6d 2c 0d 0a 20 20 20 20 20 20 20  stream,..       
ede0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
edf0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
ee00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
ee10: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
ee20: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 74 72          this.str
ee30: 65 61 6d 20 3d 20 73 74 72 65 61 6d 3b 0d 0a 20  eam = stream;.. 
ee40: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
ee50: 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 3b 0d 0a  flags = flags;..
ee60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ee70: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
ee80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
eee0: 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
eef0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ods..        ///
ef00: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ef10: 20 20 20 20 2f 2f 2f 20 51 75 65 72 69 65 73 20      /// Queries 
ef20: 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
ef30: 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  flags associated
ef40: 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63   with the connec
ef50: 74 69 6f 6e 20 66 6f 72 0d 0a 20 20 20 20 20 20  tion for..      
ef60: 20 20 2f 2f 2f 20 74 68 69 73 20 69 6e 73 74 61    /// this insta
ef70: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
ef80: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
ef90: 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
efa0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
efb0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
efc0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
efd0: 46 6c 61 67 73 22 20 2f 3e 20 76 61 6c 75 65 2e  Flags" /> value.
efe0: 20 20 54 68 65 72 65 20 69 73 20 6e 6f 20 72 65    There is no re
eff0: 74 75 72 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  turn..        //
f000: 2f 20 76 61 6c 75 65 20 72 65 73 65 72 76 65 64  / value reserved
f010: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 61 6e 20   to indicate an 
f020: 65 72 72 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  error...        
f030: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
f040: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
f050: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f060: 46 6c 61 67 73 20 47 65 74 46 6c 61 67 73 28 29  Flags GetFlags()
f070: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
f080: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f090: 66 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  flags;..        
f0a0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
f0b0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
f0c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f100: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f110: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
f120: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
f130: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
f140: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52  >..        /// R
f150: 65 74 75 72 6e 73 20 61 20 64 65 6c 65 67 61 74  eturns a delegat
f160: 65 20 74 68 61 74 20 77 72 61 70 73 20 74 68 65  e that wraps the
f170: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 70 75   <see cref="Inpu
f180: 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 0d 0a 20  t" /> method,.. 
f190: 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74         /// creat
f1a0: 69 6e 67 20 69 74 20 66 69 72 73 74 20 69 66 20  ing it first if 
f1b0: 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20  necessary...    
f1c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
f1d0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
f1e0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
f1f0: 20 20 20 2f 2f 2f 20 41 20 64 65 6c 65 67 61 74     /// A delegat
f200: 65 20 74 68 61 74 20 72 65 66 65 72 73 20 74 6f  e that refers to
f210: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
f220: 49 6e 70 75 74 22 20 2f 3e 20 6d 65 74 68 6f 64  Input" /> method
f230: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
f240: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
f250: 20 20 20 70 75 62 6c 69 63 20 55 6e 73 61 66 65     public Unsafe
f260: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53  NativeMethods.xS
f270: 65 73 73 69 6f 6e 49 6e 70 75 74 20 47 65 74 49  essionInput GetI
f280: 6e 70 75 74 44 65 6c 65 67 61 74 65 28 29 0d 0a  nputDelegate()..
f290: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f2a0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
f2b0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
f2c0: 20 20 20 20 20 20 20 69 66 20 28 78 49 6e 70 75         if (xInpu
f2d0: 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
f2e0: 20 20 20 20 20 20 20 20 20 20 20 20 78 49 6e 70              xInp
f2f0: 75 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ut = new UnsafeN
f300: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65  ativeMethods.xSe
f310: 73 73 69 6f 6e 49 6e 70 75 74 28 49 6e 70 75 74  ssionInput(Input
f320: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f330: 20 20 72 65 74 75 72 6e 20 78 49 6e 70 75 74 3b    return xInput;
f340: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
f350: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
f3a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
f3b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
f3c0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 64   /// Returns a d
f3d0: 65 6c 65 67 61 74 65 20 74 68 61 74 20 77 72 61  elegate that wra
f3e0: 70 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ps the <see cref
f3f0: 3d 22 4f 75 74 70 75 74 22 20 2f 3e 20 6d 65 74  ="Output" /> met
f400: 68 6f 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod,..        //
f410: 2f 20 63 72 65 61 74 69 6e 67 20 69 74 20 66 69  / creating it fi
f420: 72 73 74 20 69 66 20 6e 65 63 65 73 73 61 72 79  rst if necessary
f430: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
f440: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
f450: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
f460: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
f470: 64 65 6c 65 67 61 74 65 20 74 68 61 74 20 72 65  delegate that re
f480: 66 65 72 73 20 74 6f 20 74 68 65 20 3c 73 65 65  fers to the <see
f490: 20 63 72 65 66 3d 22 4f 75 74 70 75 74 22 20 2f   cref="Output" /
f4a0: 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
f4b0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
f4c0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
f4d0: 63 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  c UnsafeNativeMe
f4e0: 74 68 6f 64 73 2e 78 53 65 73 73 69 6f 6e 4f 75  thods.xSessionOu
f4f0: 74 70 75 74 20 47 65 74 4f 75 74 70 75 74 44 65  tput GetOutputDe
f500: 6c 65 67 61 74 65 28 29 0d 0a 20 20 20 20 20 20  legate()..      
f510: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f520: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
f530: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f540: 20 69 66 20 28 78 4f 75 74 70 75 74 20 3d 3d 20   if (xOutput == 
f550: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f560: 20 20 20 20 20 20 20 78 4f 75 74 70 75 74 20 3d         xOutput =
f570: 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
f580: 65 4d 65 74 68 6f 64 73 2e 78 53 65 73 73 69 6f  eMethods.xSessio
f590: 6e 4f 75 74 70 75 74 28 4f 75 74 70 75 74 29 3b  nOutput(Output);
f5a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f5b0: 72 65 74 75 72 6e 20 78 4f 75 74 70 75 74 3b 0d  return xOutput;.
f5c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
f5d0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
f5e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
f5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f630: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
f640: 67 69 6f 6e 20 4e 61 74 69 76 65 20 43 61 6c 6c  gion Native Call
f650: 62 61 63 6b 20 4d 65 74 68 6f 64 73 0d 0a 20 20  back Methods..  
f660: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
f670: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
f680: 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74   This method att
f690: 65 6d 70 74 73 20 74 6f 20 72 65 61 64 20 3c 70  empts to read <p
f6a0: 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 6e 44  aramref name="nD
f6b0: 61 74 61 22 20 2f 3e 20 62 79 74 65 73 20 66 72  ata" /> bytes fr
f6c0: 6f 6d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  om..        /// 
f6d0: 74 68 65 20 6d 61 6e 61 67 65 64 20 73 74 72 65  the managed stre
f6e0: 61 6d 2c 20 77 72 69 74 69 6e 67 20 74 68 65 6d  am, writing them
f6f0: 20 74 6f 20 74 68 65 20 3c 70 61 72 61 6d 72 65   to the <paramre
f700: 66 20 6e 61 6d 65 3d 22 70 44 61 74 61 22 2f 3e  f name="pData"/>
f710: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 75  ..        /// bu
f720: 66 66 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ffer...        /
f730: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
f740: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
f750: 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22  m name="context"
f760: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4f  >..        /// O
f770: 70 74 69 6f 6e 61 6c 20 65 78 74 72 61 20 63 6f  ptional extra co
f780: 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntext informatio
f790: 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74  n.  Currently, t
f7a0: 68 69 73 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d  his will always.
f7b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 76  .        /// hav
f7c0: 65 20 61 20 76 61 6c 75 65 20 6f 66 20 3c 73 65  e a value of <se
f7d0: 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 2e 5a  e cref="IntPtr.Z
f7e0: 65 72 6f 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  ero" />...      
f7f0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
f800: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
f810: 61 6d 20 6e 61 6d 65 3d 22 70 44 61 74 61 22 3e  am name="pData">
f820: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
f830: 70 72 65 61 6c 6c 6f 63 61 74 65 64 20 6e 61 74  preallocated nat
f840: 69 76 65 20 62 75 66 66 65 72 20 74 6f 20 72 65  ive buffer to re
f850: 63 65 69 76 65 20 74 68 65 20 72 65 71 75 65 73  ceive the reques
f860: 74 65 64 20 69 6e 70 75 74 20 62 79 74 65 73 2e  ted input bytes.
f870: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 74  ..        /// It
f880: 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73   must be at leas
f890: 74 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65  t <paramref name
f8a0: 3d 22 6e 44 61 74 61 22 20 2f 3e 20 62 79 74 65  ="nData" /> byte
f8b0: 73 20 69 6e 20 73 69 7a 65 2e 0d 0a 20 20 20 20  s in size...    
f8c0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
f8d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
f8e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 44 61 74 61  aram name="nData
f8f0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
f900: 55 70 6f 6e 20 65 6e 74 72 79 2c 20 74 68 65 20  Upon entry, the 
f910: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
f920: 74 6f 20 72 65 61 64 2e 20 20 55 70 6f 6e 20 65  to read.  Upon e
f930: 78 69 74 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  xit, the number 
f940: 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
f950: 62 79 74 65 73 20 61 63 74 75 61 6c 6c 79 20 72  bytes actually r
f960: 65 61 64 2e 20 20 54 68 69 73 20 76 61 6c 75 65  ead.  This value
f970: 20 6d 61 79 20 62 65 20 7a 65 72 6f 20 75 70 6f   may be zero upo
f980: 6e 20 65 78 69 74 2e 0d 0a 20 20 20 20 20 20 20  n exit...       
f990: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
f9a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
f9b0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
f9c0: 2f 20 54 68 65 20 76 61 6c 75 65 20 3c 73 65 65  / The value <see
f9d0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 45 72 72   cref="SQLiteErr
f9e0: 6f 72 43 6f 64 65 2e 4f 6b 22 20 2f 3e 20 75 70  orCode.Ok" /> up
f9f0: 6f 6e 20 73 75 63 63 65 73 73 20 2d 4f 52 2d 20  on success -OR- 
fa00: 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  an..        /// 
fa10: 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f  appropriate erro
fa20: 72 20 63 6f 64 65 20 75 70 6f 6e 20 66 61 69 6c  r code upon fail
fa30: 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
fa40: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
fa50: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
fa60: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 49 6e  LiteErrorCode In
fa70: 70 75 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  put(..          
fa80: 20 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74    IntPtr context
fa90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
faa0: 6e 74 50 74 72 20 70 44 61 74 61 2c 0d 0a 20 20  ntPtr pData,..  
fab0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 69 6e            ref in
fac0: 74 20 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20  t nData..       
fad0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
fae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
faf0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
fb00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
fb10: 20 20 20 53 74 72 65 61 6d 20 6c 6f 63 61 6c 53     Stream localS
fb20: 74 72 65 61 6d 20 3d 20 73 74 72 65 61 6d 3b 0d  tream = stream;.
fb30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
fb40: 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 74 72 65     if (localStre
fb50: 61 6d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  am == null)..   
fb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb70: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
fb80: 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 3b 0d  rorCode.Misuse;.
fb90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
fba0: 20 20 20 69 66 20 28 6e 44 61 74 61 20 3e 20 30     if (nData > 0
fbb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
fbc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
fbd0: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
fbe0: 20 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74   bytes = new byt
fbf0: 65 5b 6e 44 61 74 61 5d 3b 0d 0a 20 20 20 20 20  e[nData];..     
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
fc10: 6e 74 20 6e 52 65 61 64 20 3d 20 6c 6f 63 61 6c  nt nRead = local
fc20: 53 74 72 65 61 6d 2e 52 65 61 64 28 62 79 74 65  Stream.Read(byte
fc30: 73 2c 20 30 2c 20 6e 44 61 74 61 29 3b 0d 0a 0d  s, 0, nData);...
fc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc50: 20 20 20 20 20 69 66 20 28 28 6e 52 65 61 64 20       if ((nRead 
fc60: 3e 20 30 29 20 26 26 20 28 70 44 61 74 61 20 21  > 0) && (pData !
fc70: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d  = IntPtr.Zero)).
fc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc90: 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
fca0: 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 30 2c 20  .Copy(bytes, 0, 
fcb0: 70 44 61 74 61 2c 20 6e 52 65 61 64 29 3b 0d 0a  pData, nRead);..
fcc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fcd0: 20 20 20 20 20 20 6e 44 61 74 61 20 3d 20 6e 52        nData = nR
fce0: 65 61 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ead;..          
fcf0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
fd00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
fd10: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
fd20: 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok;..         
fd30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
fd40: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
fd50: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
fd60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
fd70: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
fd80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
fd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fda0: 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
fdb0: 6f 64 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45  ods.LogCallbackE
fdc0: 78 63 65 70 74 69 6f 6e 73 28 47 65 74 46 6c 61  xceptions(GetFla
fdd0: 67 73 28 29 29 29 0d 0a 20 20 20 20 20 20 20 20  gs()))..        
fde0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe00: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
fe10: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 0d 0a 20 20  .LogMessage(..  
fe20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe30: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
fe40: 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50  Base.COR_E_EXCEP
fe50: 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20  TION,..         
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe70: 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73     HelperMethods
fe80: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
feb0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
fec0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fee0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
fef0: 65 4d 65 74 68 6f 64 73 2e 45 78 63 65 70 74 69  eMethods.Excepti
ff00: 6f 6e 4d 65 73 73 61 67 65 46 6f 72 6d 61 74 2c  onMessageFormat,
ff10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 78                "x
ff30: 53 65 73 73 69 6f 6e 49 6e 70 75 74 22 2c 20 65  SessionInput", e
ff40: 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
ff50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ff70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ff80: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
ff90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ffa0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ffb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
ffc0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
ffd0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ffe0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
fff0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10000 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
10010 49 6f 45 72 72 5f 52 65 61 64 3b 0d 0a 20 20 20  IoErr_Read;..   
10020 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10030 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10070 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
10080 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
10090 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
100a0 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74 65  This method atte
100b0 6d 70 74 73 20 74 6f 20 77 72 69 74 65 20 3c 70  mpts to write <p
100c0 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 6e 44  aramref name="nD
100d0 61 74 61 22 20 2f 3e 20 62 79 74 65 73 20 74 6f  ata" /> bytes to
100e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
100f0 65 20 6d 61 6e 61 67 65 64 20 73 74 72 65 61 6d  e managed stream
10100 2c 20 72 65 61 64 69 6e 67 20 74 68 65 6d 20 66  , reading them f
10110 72 6f 6d 20 74 68 65 20 3c 70 61 72 61 6d 72 65  rom the <paramre
10120 66 20 6e 61 6d 65 3d 22 70 44 61 74 61 22 2f 3e  f name="pData"/>
10130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 75  ..        /// bu
10140 66 66 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ffer...        /
10150 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10160 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
10170 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22  m name="context"
10180 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4f  >..        /// O
10190 70 74 69 6f 6e 61 6c 20 65 78 74 72 61 20 63 6f  ptional extra co
101a0 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntext informatio
101b0 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74  n.  Currently, t
101c0 68 69 73 20 77 69 6c 6c 20 61 6c 77 61 79 73 0d  his will always.
101d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 76  .        /// hav
101e0 65 20 61 20 76 61 6c 75 65 20 6f 66 20 3c 73 65  e a value of <se
101f0 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 2e 5a  e cref="IntPtr.Z
10200 65 72 6f 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  ero" />...      
10210 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
10220 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
10230 61 6d 20 6e 61 6d 65 3d 22 70 44 61 74 61 22 3e  am name="pData">
10240 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
10250 70 72 65 61 6c 6c 6f 63 61 74 65 64 20 6e 61 74  preallocated nat
10260 69 76 65 20 62 75 66 66 65 72 20 63 6f 6e 74 61  ive buffer conta
10270 69 6e 69 6e 67 20 74 68 65 20 72 65 71 75 65 73  ining the reques
10280 74 65 64 20 6f 75 74 70 75 74 0d 0a 20 20 20 20  ted output..    
10290 20 20 20 20 2f 2f 2f 20 62 79 74 65 73 2e 20 20      /// bytes.  
102a0 49 74 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65  It must be at le
102b0 61 73 74 20 3c 70 61 72 61 6d 72 65 66 20 6e 61  ast <paramref na
102c0 6d 65 3d 22 6e 44 61 74 61 22 20 2f 3e 20 62 79  me="nData" /> by
102d0 74 65 73 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  tes in..        
102e0 2f 2f 2f 20 73 69 7a 65 2e 0d 0a 20 20 20 20 20  /// size...     
102f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
10300 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
10310 72 61 6d 20 6e 61 6d 65 3d 22 6e 44 61 74 61 22  ram name="nData"
10320 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
10330 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
10340 65 73 20 74 6f 20 77 72 69 74 65 2e 0d 0a 20 20  es to write...  
10350 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
10360 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
10370 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
10380 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
10390 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
103a0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 22 20  teErrorCode.Ok" 
103b0 2f 3e 20 75 70 6f 6e 20 73 75 63 63 65 73 73 20  /> upon success 
103c0 2d 4f 52 2d 20 61 6e 0d 0a 20 20 20 20 20 20 20  -OR- an..       
103d0 20 2f 2f 2f 20 61 70 70 72 6f 70 72 69 61 74 65   /// appropriate
103e0 20 65 72 72 6f 72 20 63 6f 64 65 20 75 70 6f 6e   error code upon
103f0 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
10400 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
10410 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
10420 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
10430 64 65 20 4f 75 74 70 75 74 28 0d 0a 20 20 20 20  de Output(..    
10440 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 63          IntPtr c
10450 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20  ontext,..       
10460 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 61 74       IntPtr pDat
10470 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
10480 69 6e 74 20 6e 44 61 74 61 0d 0a 20 20 20 20 20  int nData..     
10490 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
104a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
104b0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
104c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
104d0 20 20 20 20 20 53 74 72 65 61 6d 20 6c 6f 63 61       Stream loca
104e0 6c 53 74 72 65 61 6d 20 3d 20 73 74 72 65 61 6d  lStream = stream
104f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10500 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 74       if (localSt
10510 72 65 61 6d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ream == null).. 
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
10540 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65  ErrorCode.Misuse
10550 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10560 20 20 20 20 20 69 66 20 28 6e 44 61 74 61 20 3e       if (nData >
10570 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
10580 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10590 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
105a0 5b 5d 20 62 79 74 65 73 20 3d 20 6e 65 77 20 62  [] bytes = new b
105b0 79 74 65 5b 6e 44 61 74 61 5d 3b 0d 0a 0d 0a 20  yte[nData];.... 
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 20 20 20 69 66 20 28 70 44 61 74 61 20 21 3d 20     if (pData != 
105e0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10600 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
10610 70 79 28 70 44 61 74 61 2c 20 62 79 74 65 73 2c  py(pData, bytes,
10620 20 30 2c 20 6e 44 61 74 61 29 3b 0d 0a 0d 0a 20   0, nData);.... 
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10640 20 20 20 6c 6f 63 61 6c 53 74 72 65 61 6d 2e 57     localStream.W
10650 72 69 74 65 28 62 79 74 65 73 2c 20 30 2c 20 6e  rite(bytes, 0, n
10660 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20  Data);..        
10670 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
10690 61 6c 53 74 72 65 61 6d 2e 46 6c 75 73 68 28 29  alStream.Flush()
106a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
106b0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
106c0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
106d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
106e0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
106f0 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
10700 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10720 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
10730 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10740 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10750 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
10760 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69  gCallbackExcepti
10770 6f 6e 73 28 47 65 74 46 6c 61 67 73 28 29 29 29  ons(GetFlags()))
10780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
107c0 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ssage(..        
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107e0 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 2e 43      SQLiteBase.C
107f0 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d  OR_E_EXCEPTION,.
10800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 48 65 6c               Hel
10820 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
10830 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
10860 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
10870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
10890 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
108a0 64 73 2e 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  ds.ExceptionMess
108b0 61 67 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  ageFormat,..    
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108d0 20 20 20 20 20 20 20 20 22 78 53 65 73 73 69 6f          "xSessio
108e0 6e 4f 75 74 70 75 74 22 2c 20 65 29 29 3b 20 2f  nOutput", e)); /
108f0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
10900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10910 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
10920 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10930 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
10940 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10960 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
10970 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
10980 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10990 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
109a0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
109b0 65 45 72 72 6f 72 43 6f 64 65 2e 49 6f 45 72 72  eErrorCode.IoErr
109c0 5f 57 72 69 74 65 3b 0d 0a 20 20 20 20 20 20 20  _Write;..       
109d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
109e0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
109f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
10a40 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
10a50 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
10a60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
10a70 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
10a80 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66   /// Disposes of
10a90 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
10aa0 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
10ab0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10ac0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
10ad0 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20  oid Dispose().. 
10ae0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10af0 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
10b00 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
10b10 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
10b20 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
10b30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10b40 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
10b50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10ba0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
10bb0 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
10bc0 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
10bd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
10be0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
10bf0 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
10c00 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
10c10 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69  ance has been di
10c20 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  sposed...       
10c30 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10c40 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
10c50 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d   bool disposed;.
10c60 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
10c70 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10c80 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20    /// Throws an 
10c90 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 69  exception if thi
10ca0 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
10cb0 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f  e has been dispo
10cc0 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
10cd0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
10ce0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
10cf0 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
10d00 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
10d10 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54          {..#if T
10d20 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44  HROW_ON_DISPOSED
10d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
10d40 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20   (disposed)..   
10d50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10d60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
10d70 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
10d80 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a  osedException(..
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74      typeof(SQLit
10db0 65 53 74 72 65 61 6d 41 64 61 70 74 65 72 29 2e  eStreamAdapter).
10dc0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
10dd0 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
10de0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
10df0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10e40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
10e50 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
10e60 2f 20 44 69 73 70 6f 73 65 73 20 6f 72 20 66 69  / Disposes or fi
10e70 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a  nalizes this obj
10e80 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
10e90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
10ea0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
10eb0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
10ec0 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20  disposing">..   
10ed0 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
10ee0 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74  o if this object
10ef0 20 69 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73   is being dispos
10f00 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  ed; otherwise, t
10f10 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20  his object..    
10f20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69 6e 67      /// is being
10f30 20 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20 20 20   finalized...   
10f40 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
10f50 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
10f60 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
10f70 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
10f80 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
10f90 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
10fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10fb0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
10fc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10fd0 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
10fe0 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
10ff0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11000 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
11010 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11040 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f          // dispo
11090 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
110a0 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
110d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
110e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 20 20 20 20 20 20 69 66 20 28 78 49 6e 70 75 74        if (xInput
11110 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 20 20 20 20 20 20 78 49 6e 70 75 74 20 3d 20         xInput = 
11140 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11160 20 69 66 20 28 78 4f 75 74 70 75 74 20 21 3d 20   if (xOutput != 
11170 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11190 20 20 20 78 4f 75 74 70 75 74 20 3d 20 6e 75 6c     xOutput = nul
111a0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
111c0 20 28 73 74 72 65 61 6d 20 21 3d 20 6e 75 6c 6c   (stream != null
111d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
111f0 74 72 65 61 6d 20 3d 20 6e 75 6c 6c 3b 20 2f 2a  tream = null; /*
11200 20 4e 4f 54 20 4f 57 4e 45 44 20 2a 2f 0d 0a 20   NOT OWNED */.. 
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
11230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11260 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11270 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
11280 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
11290 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
112c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
112e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
112f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11300 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
11310 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
11320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11330 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11340 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45        // NOTE: E
11350 76 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64  verything should
11360 20 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73   be fully dispos
11370 65 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ed at this point
11380 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11390 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
113a0 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
113b0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
113c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
113d0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
113e0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
113f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11430 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
11440 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
11450 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
11460 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
11470 20 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e 61 6c         /// Final
11480 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65 63 74  izes this object
11490 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
114a0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
114b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e 53 51 4c  y>..        ~SQL
114c0 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65 72  iteStreamAdapter
114d0 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
114e0 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
114f0 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  se(false);..    
11500 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
11510 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
11520 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
11530 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
11540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11580 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
11590 6f 6e 20 53 51 4c 69 74 65 53 65 73 73 69 6f 6e  on SQLiteSession
115a0 53 74 72 65 61 6d 4d 61 6e 61 67 65 72 20 43 6c  StreamManager Cl
115b0 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
115c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
115d0 54 68 69 73 20 63 6c 61 73 73 20 6d 61 6e 61 67  This class manag
115e0 65 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 20  es a collection 
115f0 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
11600 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
11610 72 22 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e  r"/>..    /// in
11620 73 74 61 6e 63 65 73 2e 20 57 68 65 6e 20 75 73  stances. When us
11630 65 64 2c 20 69 74 20 74 61 6b 65 73 20 72 65 73  ed, it takes res
11640 70 6f 6e 73 69 62 69 6c 69 74 79 20 66 6f 72 20  ponsibility for 
11650 63 72 65 61 74 69 6e 67 2c 20 72 65 74 75 72 6e  creating, return
11660 69 6e 67 2c 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e  ing,..    /// an
11670 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 20 69  d disposing of i
11680 74 73 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ts <see cref="SQ
11690 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
116a0 72 22 2f 3e 20 69 6e 73 74 61 6e 63 65 73 2e 0d  r"/> instances..
116b0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
116c0 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
116d0 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  l sealed class S
116e0 51 4c 69 74 65 53 65 73 73 69 6f 6e 53 74 72 65  QLiteSessionStre
116f0 61 6d 4d 61 6e 61 67 65 72 20 3a 20 49 44 69 73  amManager : IDis
11700 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a  posable..    {..
11710 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
11720 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20  Private Data..  
11730 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
11740 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
11750 20 54 68 65 20 6d 61 6e 61 67 65 64 20 63 6f 6c   The managed col
11760 6c 65 63 74 69 6f 6e 20 6f 66 20 3c 73 65 65 20  lection of <see 
11770 63 72 65 66 3d 22 53 51 4c 69 74 65 53 74 72 65  cref="SQLiteStre
11780 61 6d 41 64 61 70 74 65 72 22 20 2f 3e 0d 0a 20  amAdapter" />.. 
11790 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
117a0 6e 63 65 73 2c 20 6b 65 79 65 64 20 62 79 20 74  nces, keyed by t
117b0 68 65 69 72 20 61 73 73 6f 63 69 61 74 65 64 20  heir associated 
117c0 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 65 61  <see cref="Strea
117d0 6d 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  m" />..        /
117e0 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  // instance...  
117f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
11800 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
11810 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79  ivate Dictionary
11820 3c 53 74 72 65 61 6d 2c 20 53 51 4c 69 74 65 53  <Stream, SQLiteS
11830 74 72 65 61 6d 41 64 61 70 74 65 72 3e 20 73 74  treamAdapter> st
11840 72 65 61 6d 41 64 61 70 74 65 72 73 3b 0d 0a 0d  reamAdapters;...
11850 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
11860 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
11870 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61 73  /// The flags as
11880 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
11890 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
118a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
118b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
118c0 72 69 76 61 74 65 20 53 51 4c 69 74 65 43 6f 6e  rivate SQLiteCon
118d0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
118e0 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  gs;..        #en
118f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
11900 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
11950 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
11960 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
11970 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
11980 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
11990 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
119a0 20 61 20 6e 65 77 20 69 6e 73 74 61 6e 63 65 20   a new instance 
119b0 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73  of this class us
119c0 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65  ing the specifie
119d0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  d..        /// c
119e0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e  onnection flags.
119f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
11a00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
11a10 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11a20 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20  e="flags">..    
11a30 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
11a40 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
11a50 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
11a60 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  nection...      
11a70 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
11a80 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
11a90 51 4c 69 74 65 53 65 73 73 69 6f 6e 53 74 72 65  QLiteSessionStre
11aa0 61 6d 4d 61 6e 61 67 65 72 28 0d 0a 20 20 20 20  amManager(..    
11ab0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
11ac0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
11ad0 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ags..           
11ae0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
11af0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
11b00 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 3b 0d 0a  flags = flags;..
11b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
11b20 69 74 69 61 6c 69 7a 65 53 74 72 65 61 6d 41 64  itializeStreamAd
11b30 61 70 74 65 72 73 28 29 3b 0d 0a 20 20 20 20 20  apters();..     
11b40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
11b50 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
11b60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
11b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11bb0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
11bc0 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
11bd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
11be0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
11bf0 2f 2f 20 4d 61 6b 65 73 20 73 75 72 65 20 74 68  // Makes sure th
11c00 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 20  e collection of 
11c10 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
11c20 65 53 74 72 65 61 6d 41 64 61 70 74 65 72 22 20  eStreamAdapter" 
11c30 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
11c40 69 73 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20  is created...   
11c50 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
11c60 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
11c70 76 61 74 65 20 76 6f 69 64 20 49 6e 69 74 69 61  vate void Initia
11c80 6c 69 7a 65 53 74 72 65 61 6d 41 64 61 70 74 65  lizeStreamAdapte
11c90 72 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  rs()..        {.
11ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
11cb0 28 73 74 72 65 61 6d 41 64 61 70 74 65 72 73 20  (streamAdapters 
11cc0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
11cd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11ce0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11cf0 20 73 74 72 65 61 6d 41 64 61 70 74 65 72 73 20   streamAdapters 
11d00 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
11d10 3c 53 74 72 65 61 6d 2c 20 53 51 4c 69 74 65 53  <Stream, SQLiteS
11d20 74 72 65 61 6d 41 64 61 70 74 65 72 3e 28 29 3b  treamAdapter>();
11d30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
11d40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
11d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
11d90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
11da0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
11db0 20 2f 2f 2f 20 4d 61 6b 65 73 20 73 75 72 65 20   /// Makes sure 
11dc0 74 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6f  the collection o
11dd0 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
11de0 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65 72  iteStreamAdapter
11df0 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
11e00 2f 20 69 73 20 64 69 73 70 6f 73 65 64 2e 0d 0a  / is disposed...
11e10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
11e20 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
11e30 70 72 69 76 61 74 65 20 76 6f 69 64 20 44 69 73  private void Dis
11e40 70 6f 73 65 53 74 72 65 61 6d 41 64 61 70 74 65  poseStreamAdapte
11e50 72 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  rs()..        {.
11e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
11e70 28 73 74 72 65 61 6d 41 64 61 70 74 65 72 73 20  (streamAdapters 
11e80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
11e90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11ea0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11eb0 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c   foreach (KeyVal
11ec0 75 65 50 61 69 72 3c 53 74 72 65 61 6d 2c 20 53  uePair<Stream, S
11ed0 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74  QLiteStreamAdapt
11ee0 65 72 3e 20 70 61 69 72 0d 0a 20 20 20 20 20 20  er> pair..      
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
11f00 20 73 74 72 65 61 6d 41 64 61 70 74 65 72 73 29   streamAdapters)
11f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11f30 20 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61   SQLiteStreamAda
11f40 70 74 65 72 20 73 74 72 65 61 6d 41 64 61 70 74  pter streamAdapt
11f50 65 72 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b  er = pair.Value;
11f60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11f70 20 20 20 20 69 66 20 28 73 74 72 65 61 6d 41 64      if (streamAd
11f80 61 70 74 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  apter == null)..
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fa0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
11fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11fc0 20 73 74 72 65 61 6d 41 64 61 70 74 65 72 2e 44   streamAdapter.D
11fd0 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
11fe0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11ff0 20 20 20 20 20 20 20 20 73 74 72 65 61 6d 41 64          streamAd
12000 61 70 74 65 72 73 2e 43 6c 65 61 72 28 29 3b 0d  apters.Clear();.
12010 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
12020 65 61 6d 41 64 61 70 74 65 72 73 20 3d 20 6e 75  eamAdapters = nu
12030 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
12040 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
12050 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
12060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
120a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
120b0 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
120c0 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
120d0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
120e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65          /// Atte
120f0 6d 70 74 73 20 74 6f 20 72 65 74 75 72 6e 20 61  mpts to return a
12100 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
12110 74 65 53 74 72 65 61 6d 41 64 61 70 74 65 72 22  teStreamAdapter"
12120 20 2f 3e 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20   /> instance..  
12130 20 20 20 20 20 20 2f 2f 2f 20 73 75 69 74 61 62        /// suitab
12140 6c 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  le for the speci
12150 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  fied <see cref="
12160 53 74 72 65 61 6d 22 20 2f 3e 2e 0d 0a 20 20 20  Stream" />...   
12170 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
12180 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
12190 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
121a0 72 65 61 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20  ream">..        
121b0 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
121c0 66 3d 22 53 74 72 65 61 6d 22 20 2f 3e 20 69 6e  f="Stream" /> in
121d0 73 74 61 6e 63 65 2e 20 20 49 66 20 74 68 69 73  stance.  If this
121e0 20 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 2c 20   value is null, 
121f0 61 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  a null..        
12200 2f 2f 2f 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  /// value will b
12210 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20  e returned...   
12220 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
12230 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
12240 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
12250 20 20 2f 2f 2f 20 41 20 3c 73 65 65 20 63 72 65    /// A <see cre
12260 66 3d 22 53 51 4c 69 74 65 53 74 72 65 61 6d 41  f="SQLiteStreamA
12270 64 61 70 74 65 72 22 20 2f 3e 20 69 6e 73 74 61  dapter" /> insta
12280 6e 63 65 2e 20 20 54 79 70 69 63 61 6c 6c 79 2c  nce.  Typically,
12290 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 20 20   these..        
122a0 2f 2f 2f 20 61 72 65 20 61 6c 77 61 79 73 20 66  /// are always f
122b0 72 65 73 68 6c 79 20 63 72 65 61 74 65 64 3b 20  reshly created; 
122c0 68 6f 77 65 76 65 72 2c 20 74 68 69 73 20 6d 65  however, this me
122d0 74 68 6f 64 20 69 73 20 64 65 73 69 67 6e 65 64  thod is designed
122e0 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
122f0 20 72 65 74 75 72 6e 20 74 68 65 20 65 78 69 73   return the exis
12300 74 69 6e 67 20 3c 73 65 65 20 63 72 65 66 3d 22  ting <see cref="
12310 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70  SQLiteStreamAdap
12320 74 65 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65  ter" /> instance
12330 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73  ..        /// as
12340 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
12350 65 20 73 70 65 63 69 66 69 65 64 20 73 74 72 65  e specified stre
12360 61 6d 2c 20 73 68 6f 75 6c 64 20 6f 6e 65 20 65  am, should one e
12370 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  xist...        /
12380 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
12390 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
123a0 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
123b0 72 20 47 65 74 41 64 61 70 74 65 72 28 0d 0a 20  r GetAdapter(.. 
123c0 20 20 20 20 20 20 20 20 20 20 20 53 74 72 65 61             Strea
123d0 6d 20 73 74 72 65 61 6d 0d 0a 20 20 20 20 20 20  m stream..      
123e0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
123f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12400 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
12410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12420 69 66 20 28 73 74 72 65 61 6d 20 3d 3d 20 6e 75  if (stream == nu
12430 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12440 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
12450 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12460 20 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61   SQLiteStreamAda
12470 70 74 65 72 20 73 74 72 65 61 6d 41 64 61 70 74  pter streamAdapt
12480 65 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  er;....         
12490 20 20 20 69 66 20 28 73 74 72 65 61 6d 41 64 61     if (streamAda
124a0 70 74 65 72 73 2e 54 72 79 47 65 74 56 61 6c 75  pters.TryGetValu
124b0 65 28 73 74 72 65 61 6d 2c 20 6f 75 74 20 73 74  e(stream, out st
124c0 72 65 61 6d 41 64 61 70 74 65 72 29 29 0d 0a 20  reamAdapter)).. 
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
124e0 65 74 75 72 6e 20 73 74 72 65 61 6d 41 64 61 70  eturn streamAdap
124f0 74 65 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ter;....        
12500 20 20 20 20 73 74 72 65 61 6d 41 64 61 70 74 65      streamAdapte
12510 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74  r = new SQLiteSt
12520 72 65 61 6d 41 64 61 70 74 65 72 28 73 74 72 65  reamAdapter(stre
12530 61 6d 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20  am, flags);..   
12540 20 20 20 20 20 20 20 20 20 73 74 72 65 61 6d 41           streamA
12550 64 61 70 74 65 72 73 2e 41 64 64 28 73 74 72 65  dapters.Add(stre
12560 61 6d 2c 20 73 74 72 65 61 6d 41 64 61 70 74 65  am, streamAdapte
12570 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
12580 20 20 20 72 65 74 75 72 6e 20 73 74 72 65 61 6d     return stream
12590 41 64 61 70 74 65 72 3b 0d 0a 20 20 20 20 20 20  Adapter;..      
125a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
125b0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
125c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
125d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
12610 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
12620 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
12630 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
12640 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
12650 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f    /// Disposes o
12660 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
12670 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
12680 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
12690 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
126a0 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
126b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
126c0 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74         Dispose(t
126d0 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
126e0 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
126f0 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
12700 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12710 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
12720 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
12770 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
12780 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
12790 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
127a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
127b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
127c0 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
127d0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
127e0 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64  tance has been d
127f0 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
12800 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
12810 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
12820 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
12830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
12840 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
12850 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e     /// Throws an
12860 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68   exception if th
12870 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
12880 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70  ce has been disp
12890 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  osed...        /
128a0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
128b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
128c0 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
128d0 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
128e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
128f0 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45  THROW_ON_DISPOSE
12900 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  D..            i
12910 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20  f (disposed)..  
12920 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
12940 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
12950 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d  posedException(.
12960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12970 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
12980 74 65 53 65 73 73 69 6f 6e 53 74 72 65 61 6d 4d  teSessionStreamM
12990 61 6e 61 67 65 72 29 2e 4e 61 6d 65 29 3b 0d 0a  anager).Name);..
129a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
129b0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
129c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
129d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
129f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
12a20 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
12a30 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73        /// Dispos
12a40 65 73 20 6f 72 20 66 69 6e 61 6c 69 7a 65 73 20  es or finalizes 
12a50 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
12a60 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
12a70 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
12a80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
12a90 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e  m name="disposin
12aa0 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  g">..        ///
12ab0 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
12ac0 73 20 6f 62 6a 65 63 74 20 69 73 20 62 65 69 6e  s object is bein
12ad0 67 20 64 69 73 70 6f 73 65 64 3b 20 6f 74 68 65  g disposed; othe
12ae0 72 77 69 73 65 2c 20 74 68 69 73 20 6f 62 6a 65  rwise, this obje
12af0 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ct..        /// 
12b00 69 73 20 62 65 69 6e 67 20 66 69 6e 61 6c 69 7a  is being finaliz
12b10 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
12b20 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
12b30 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72     private /* pr
12b40 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
12b50 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  */ void Dispose(
12b60 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d  bool disposing).
12b70 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
12b80 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
12b90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12bb0 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
12bf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12c00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
12c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c40 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
12c70 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
12c80 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12cc0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
12ce0 73 70 6f 73 65 53 74 72 65 61 6d 41 64 61 70 74  sposeStreamAdapt
12cf0 65 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ers();..        
12d00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
12d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d60 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
12d70 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
12d80 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
12da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12dc0 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
12dd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12de0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
12df0 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
12e00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12e10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12e30 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69  / NOTE: Everythi
12e40 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c  ng should be ful
12e50 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74 20 74  ly disposed at t
12e60 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20  his point...    
12e70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
12ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
12eb0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
12ec0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
12ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
12ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f20 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
12f30 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
12f40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
12f50 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
12f60 2f 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68  /// Finalizes th
12f70 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
12f80 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
12f90 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
12fa0 20 20 20 20 20 7e 53 51 4c 69 74 65 53 65 73 73       ~SQLiteSess
12fb0 69 6f 6e 53 74 72 65 61 6d 4d 61 6e 61 67 65 72  ionStreamManager
12fc0 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
12fd0 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
12fe0 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  se(false);..    
12ff0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
13000 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
13010 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
13020 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
13030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13070 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
13080 6f 6e 20 53 51 4c 69 74 65 43 68 61 6e 67 65 47  on SQLiteChangeG
13090 72 6f 75 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  roup Class..    
130a0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
130b0 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
130c0 73 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 67  s represents a g
130d0 72 6f 75 70 20 6f 66 20 63 68 61 6e 67 65 20 73  roup of change s
130e0 65 74 73 20 28 6f 72 20 70 61 74 63 68 20 73 65  ets (or patch se
130f0 74 73 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ts)...    /// </
13100 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
13110 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c  ternal sealed cl
13120 61 73 73 20 53 51 4c 69 74 65 43 68 61 6e 67 65  ass SQLiteChange
13130 47 72 6f 75 70 20 3a 20 49 53 51 4c 69 74 65 43  Group : ISQLiteC
13140 68 61 6e 67 65 47 72 6f 75 70 0d 0a 20 20 20 20  hangeGroup..    
13150 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
13160 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d  on Private Data.
13170 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
13180 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
13190 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
131a0 66 3d 22 53 51 4c 69 74 65 53 65 73 73 69 6f 6e  f="SQLiteSession
131b0 53 74 72 65 61 6d 4d 61 6e 61 67 65 72 22 20 2f  StreamManager" /
131c0 3e 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  > instance assoc
131d0 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
131e0 2f 2f 20 77 69 74 68 20 74 68 69 73 20 63 68 61  // with this cha
131f0 6e 67 65 20 67 72 6f 75 70 2e 0d 0a 20 20 20 20  nge group...    
13200 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
13210 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
13220 61 74 65 20 53 51 4c 69 74 65 53 65 73 73 69 6f  ate SQLiteSessio
13230 6e 53 74 72 65 61 6d 4d 61 6e 61 67 65 72 20 73  nStreamManager s
13240 74 72 65 61 6d 4d 61 6e 61 67 65 72 3b 0d 0a 0d  treamManager;...
13250 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
13260 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
13270 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61 73  /// The flags as
13280 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
13290 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
132a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
132b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
132c0 72 69 76 61 74 65 20 53 51 4c 69 74 65 43 6f 6e  rivate SQLiteCon
132d0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
132e0 67 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  gs;....        /
132f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13330 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
13340 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
13350 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
13360 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 66   native handle f
13370 6f 72 20 74 68 69 73 20 63 68 61 6e 67 65 20 67  or this change g
13380 72 6f 75 70 2e 20 20 54 68 69 73 20 77 69 6c 6c  roup.  This will
13390 20 62 65 20 64 65 6c 65 74 65 64 20 77 68 65 6e   be deleted when
133a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
133b0 69 73 20 69 6e 73 74 61 6e 63 65 20 69 73 20 64  is instance is d
133c0 69 73 70 6f 73 65 64 20 6f 72 20 66 69 6e 61 6c  isposed or final
133d0 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ized...        /
133e0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
133f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
13400 6e 74 50 74 72 20 63 68 61 6e 67 65 47 72 6f 75  ntPtr changeGrou
13410 70 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  p;..        #end
13420 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
13430 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
13440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13470 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
13480 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
13490 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
134a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
134b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
134c0 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
134d0 61 20 6e 65 77 20 69 6e 73 74 61 6e 63 65 20 6f  a new instance o
134e0 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69  f this class usi
134f0 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
13500 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
13510 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d  nnection flags..
13520 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
13530 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
13540 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
13550 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 20  ="flags">..     
13560 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
13570 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13580 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e   the parent conn
13590 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...       
135a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
135b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
135c0 4c 69 74 65 43 68 61 6e 67 65 47 72 6f 75 70 28  LiteChangeGroup(
135d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
135e0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
135f0 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
13600 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
13610 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13620 20 74 68 69 73 2e 66 6c 61 67 73 20 3d 20 66 6c   this.flags = fl
13630 61 67 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ags;....        
13640 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 48 61      InitializeHa
13650 6e 64 6c 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  ndle();..       
13660 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
13670 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
13680 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
13690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
136a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
136b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
136c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
136d0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
136e0 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
136f0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
13700 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
13710 20 54 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70   Throws an excep
13720 74 69 6f 6e 20 69 66 20 74 68 65 20 6e 61 74 69  tion if the nati
13730 76 65 20 63 68 61 6e 67 65 20 67 72 6f 75 70 20  ve change group 
13740 68 61 6e 64 6c 65 20 69 73 20 69 6e 76 61 6c 69  handle is invali
13750 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
13760 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
13770 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
13780 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29 0d 0a   CheckHandle()..
13790 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
137a0 20 20 20 20 20 20 20 69 66 20 28 63 68 61 6e 67         if (chang
137b0 65 47 72 6f 75 70 20 3d 3d 20 49 6e 74 50 74 72  eGroup == IntPtr
137c0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
137d0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
137e0 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
137f0 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 63 68 61  onException("cha
13800 6e 67 65 20 67 72 6f 75 70 20 6e 6f 74 20 6f 70  nge group not op
13810 65 6e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  en");..        }
13820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
13830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13870 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
13880 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
13890 20 20 20 20 20 20 2f 2f 2f 20 4d 61 6b 65 73 20        /// Makes 
138a0 73 75 72 65 20 74 68 65 20 6e 61 74 69 76 65 20  sure the native 
138b0 63 68 61 6e 67 65 20 67 72 6f 75 70 20 68 61 6e  change group han
138c0 64 6c 65 20 69 73 20 76 61 6c 69 64 2c 20 63 72  dle is valid, cr
138d0 65 61 74 69 6e 67 20 69 74 20 69 66 0d 0a 20 20  eating it if..  
138e0 20 20 20 20 20 20 2f 2f 2f 20 6e 65 63 65 73 73        /// necess
138f0 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary...        //
13900 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
13910 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
13920 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 48 61 6e  id InitializeHan
13930 64 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  dle()..        {
13940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
13950 20 28 63 68 61 6e 67 65 47 72 6f 75 70 20 21 3d   (changeGroup !=
13960 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13980 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
13990 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
139a0 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
139b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
139c0 71 6c 69 74 65 33 63 68 61 6e 67 65 67 72 6f 75  qlite3changegrou
139d0 70 5f 6e 65 77 28 0d 0a 20 20 20 20 20 20 20 20  p_new(..        
139e0 20 20 20 20 20 20 20 20 72 65 66 20 63 68 61 6e          ref chan
139f0 67 65 47 72 6f 75 70 29 3b 0d 0a 0d 0a 20 20 20  geGroup);....   
13a00 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20           if (rc 
13a10 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
13a20 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
13a30 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
13a40 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
13a50 6e 28 72 63 2c 20 22 73 71 6c 69 74 65 33 63 68  n(rc, "sqlite3ch
13a60 61 6e 67 65 67 72 6f 75 70 5f 6e 65 77 22 29 3b  angegroup_new");
13a70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
13a80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
13a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
13ad0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
13ae0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
13af0 20 2f 2f 2f 20 4d 61 6b 65 73 20 73 75 72 65 20   /// Makes sure 
13b00 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
13b10 51 4c 69 74 65 53 65 73 73 69 6f 6e 53 74 72 65  QLiteSessionStre
13b20 61 6d 4d 61 6e 61 67 65 72 22 20 2f 3e 20 69 6e  amManager" /> in
13b30 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
13b40 2f 2f 2f 20 69 73 20 61 76 61 69 6c 61 62 6c 65  /// is available
13b50 2c 20 63 72 65 61 74 69 6e 67 20 69 74 20 69 66  , creating it if
13b60 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20   necessary...   
13b70 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
13b80 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
13b90 76 61 74 65 20 76 6f 69 64 20 49 6e 69 74 69 61  vate void Initia
13ba0 6c 69 7a 65 53 74 72 65 61 6d 4d 61 6e 61 67 65  lizeStreamManage
13bb0 72 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r()..        {..
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13bd0 73 74 72 65 61 6d 4d 61 6e 61 67 65 72 20 21 3d  streamManager !=
13be0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13bf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
13c00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
13c10 74 72 65 61 6d 4d 61 6e 61 67 65 72 20 3d 20 6e  treamManager = n
13c20 65 77 20 53 51 4c 69 74 65 53 65 73 73 69 6f 6e  ew SQLiteSession
13c30 53 74 72 65 61 6d 4d 61 6e 61 67 65 72 28 66 6c  StreamManager(fl
13c40 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ags);..        }
13c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
13c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ca0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
13cb0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
13cc0 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70        /// Attemp
13cd0 74 73 20 74 6f 20 72 65 74 75 72 6e 20 61 20 3c  ts to return a <
13ce0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
13cf0 53 74 72 65 61 6d 41 64 61 70 74 65 72 22 20 2f  StreamAdapter" /
13d00 3e 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20  > instance..    
13d10 20 20 20 20 2f 2f 2f 20 73 75 69 74 61 62 6c 65      /// suitable
13d20 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
13d30 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74  ed <see cref="St
13d40 72 65 61 6d 22 20 2f 3e 2e 0d 0a 20 20 20 20 20  ream" />...     
13d50 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
13d60 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13d70 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 65  param name="stre
13d80 61 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  am">..        //
13d90 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
13da0 22 53 74 72 65 61 6d 22 20 2f 3e 20 69 6e 73 74  "Stream" /> inst
13db0 61 6e 63 65 2e 20 20 49 66 20 74 68 69 73 20 76  ance.  If this v
13dc0 61 6c 75 65 20 69 73 20 6e 75 6c 6c 2c 20 61 20  alue is null, a 
13dd0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  null..        //
13de0 2f 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  / value will be 
13df0 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20  returned...     
13e00 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13e10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
13e20 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
13e30 2f 2f 2f 20 41 20 3c 73 65 65 20 63 72 65 66 3d  /// A <see cref=
13e40 22 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61  "SQLiteStreamAda
13e50 70 74 65 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63  pter" /> instanc
13e60 65 2e 20 20 54 79 70 69 63 61 6c 6c 79 2c 20 74  e.  Typically, t
13e70 68 65 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hese..        //
13e80 2f 20 61 72 65 20 61 6c 77 61 79 73 20 66 72 65  / are always fre
13e90 73 68 6c 79 20 63 72 65 61 74 65 64 3b 20 68 6f  shly created; ho
13ea0 77 65 76 65 72 2c 20 74 68 69 73 20 6d 65 74 68  wever, this meth
13eb0 6f 64 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  od is designed t
13ec0 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  o..        /// r
13ed0 65 74 75 72 6e 20 74 68 65 20 65 78 69 73 74 69  eturn the existi
13ee0 6e 67 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ng <see cref="SQ
13ef0 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
13f00 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 0d 0a  r" /> instance..
13f10 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
13f20 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
13f30 73 70 65 63 69 66 69 65 64 20 73 74 72 65 61 6d  specified stream
13f40 2c 20 73 68 6f 75 6c 64 20 6f 6e 65 20 65 78 69  , should one exi
13f50 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  st...        ///
13f60 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
13f70 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
13f80 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65 72  iteStreamAdapter
13f90 20 47 65 74 53 74 72 65 61 6d 41 64 61 70 74 65   GetStreamAdapte
13fa0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
13fb0 53 74 72 65 61 6d 20 73 74 72 65 61 6d 0d 0a 20  Stream stream.. 
13fc0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
13fd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13fe0 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 53       InitializeS
13ff0 74 72 65 61 6d 4d 61 6e 61 67 65 72 28 29 3b 0d  treamManager();.
14000 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
14010 65 74 75 72 6e 20 73 74 72 65 61 6d 4d 61 6e 61  eturn streamMana
14020 67 65 72 2e 47 65 74 41 64 61 70 74 65 72 28 73  ger.GetAdapter(s
14030 74 72 65 61 6d 29 3b 0d 0a 20 20 20 20 20 20 20  tream);..       
14040 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
14050 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
14060 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
140a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
140b0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51       #region ISQ
140c0 4c 69 74 65 43 68 61 6e 67 65 47 72 6f 75 70 20  LiteChangeGroup 
140d0 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
140e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
140f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65          /// Atte
14100 6d 70 74 73 20 74 6f 20 61 64 64 20 61 20 63 68  mpts to add a ch
14110 61 6e 67 65 20 73 65 74 20 28 6f 72 20 70 61 74  ange set (or pat
14120 63 68 20 73 65 74 29 20 74 6f 20 74 68 69 73 20  ch set) to this 
14130 63 68 61 6e 67 65 20 67 72 6f 75 70 0d 0a 20 20  change group..  
14140 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e        /// instan
14150 63 65 2e 20 20 54 68 65 20 75 6e 64 65 72 6c 79  ce.  The underly
14160 69 6e 67 20 64 61 74 61 20 6d 75 73 74 20 62 65  ing data must be
14170 20 63 6f 6e 74 61 69 6e 65 64 20 65 6e 74 69 72   contained entir
14180 65 6c 79 20 77 69 74 68 69 6e 0d 0a 20 20 20 20  ely within..    
14190 20 20 20 20 2f 2f 2f 20 74 68 65 20 3c 70 61 72      /// the <par
141a0 61 6d 72 65 66 20 6e 61 6d 65 3d 22 72 61 77 44  amref name="rawD
141b0 61 74 61 22 20 2f 3e 20 62 79 74 65 20 61 72 72  ata" /> byte arr
141c0 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ay...        ///
141d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
141e0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
141f0 6e 61 6d 65 3d 22 72 61 77 44 61 74 61 22 3e 0d  name="rawData">.
14200 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
14210 20 72 61 77 20 62 79 74 65 20 64 61 74 61 20 66   raw byte data f
14220 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64  or the specified
14230 20 63 68 61 6e 67 65 20 73 65 74 20 28 6f 72 20   change set (or 
14240 70 61 74 63 68 20 73 65 74 29 2e 0d 0a 20 20 20  patch set)...   
14250 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
14260 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
14270 63 20 76 6f 69 64 20 41 64 64 43 68 61 6e 67 65  c void AddChange
14280 53 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Set(..          
14290 20 20 62 79 74 65 5b 5d 20 72 61 77 44 61 74 61    byte[] rawData
142a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
142b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
142c0 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
142d0 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
142e0 20 20 20 20 20 20 43 68 65 63 6b 48 61 6e 64 6c        CheckHandl
142f0 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
14300 20 20 20 20 53 51 4c 69 74 65 53 65 73 73 69 6f      SQLiteSessio
14310 6e 48 65 6c 70 65 72 73 2e 43 68 65 63 6b 52 61  nHelpers.CheckRa
14320 77 44 61 74 61 28 72 61 77 44 61 74 61 29 3b 0d  wData(rawData);.
14330 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
14340 6e 74 50 74 72 20 70 44 61 74 61 20 3d 20 49 6e  ntPtr pData = In
14350 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
14360 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
14370 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
14390 74 20 6e 44 61 74 61 20 3d 20 30 3b 0d 0a 0d 0a  t nData = 0;....
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 70 44 61 74 61 20 3d 20 53 51 4c 69 74 65 42 79  pData = SQLiteBy
143c0 74 65 73 2e 54 6f 49 6e 74 50 74 72 28 72 61 77  tes.ToIntPtr(raw
143d0 44 61 74 61 2c 20 72 65 66 20 6e 44 61 74 61 29  Data, ref nData)
143e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
143f0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
14400 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
14410 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14420 6c 69 74 65 33 63 68 61 6e 67 65 67 72 6f 75 70  lite3changegroup
14430 5f 61 64 64 28 0d 0a 20 20 20 20 20 20 20 20 20  _add(..         
14440 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 67             chang
14450 65 47 72 6f 75 70 2c 20 6e 44 61 74 61 2c 20 70  eGroup, nData, p
14460 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data);....      
14470 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
14480 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
14490 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
144b0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
144c0 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69  eption(rc, "sqli
144d0 74 65 33 63 68 61 6e 67 65 67 72 6f 75 70 5f 61  te3changegroup_a
144e0 64 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dd");..         
144f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14500 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
14510 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14520 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 44            if (pD
14530 61 74 61 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ata != IntPtr.Ze
14540 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
14550 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14560 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
14570 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 44  teMemory.Free(pD
14580 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata);..         
14590 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
145a0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
145b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
145c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
145d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
145e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
145f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
14630 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
14640 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
14650 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74    /// Attempts t
14660 6f 20 61 64 64 20 61 20 63 68 61 6e 67 65 20 73  o add a change s
14670 65 74 20 28 6f 72 20 70 61 74 63 68 20 73 65 74  et (or patch set
14680 29 20 74 6f 20 74 68 69 73 20 63 68 61 6e 67 65  ) to this change
14690 20 67 72 6f 75 70 0d 0a 20 20 20 20 20 20 20 20   group..        
146a0 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54  /// instance.  T
146b0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
146c0 74 61 20 77 69 6c 6c 20 62 65 20 72 65 61 64 20  ta will be read 
146d0 66 72 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69  from the specifi
146e0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
146f0 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 65 61  <see cref="Strea
14700 6d 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  m" />...        
14710 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
14720 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
14730 61 6d 20 6e 61 6d 65 3d 22 73 74 72 65 61 6d 22  am name="stream"
14740 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
14750 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74  he <see cref="St
14760 72 65 61 6d 22 20 2f 3e 20 69 6e 73 74 61 6e 63  ream" /> instanc
14770 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
14780 20 72 61 77 20 63 68 61 6e 67 65 20 73 65 74 0d   raw change set.
14790 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 28 6f 72  .        /// (or
147a0 20 70 61 74 63 68 20 73 65 74 29 20 64 61 74 61   patch set) data
147b0 20 74 6f 20 72 65 61 64 2e 0d 0a 20 20 20 20 20   to read...     
147c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
147d0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
147e0 76 6f 69 64 20 41 64 64 43 68 61 6e 67 65 53 65  void AddChangeSe
147f0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
14800 53 74 72 65 61 6d 20 73 74 72 65 61 6d 0d 0a 20  Stream stream.. 
14810 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
14820 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14830 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
14840 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
14850 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29     CheckHandle()
14860 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14870 20 69 66 20 28 73 74 72 65 61 6d 20 3d 3d 20 6e   if (stream == n
14880 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14890 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
148a0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
148b0 70 74 69 6f 6e 28 22 73 74 72 65 61 6d 22 29 3b  ption("stream");
148c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
148d0 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70  SQLiteStreamAdap
148e0 74 65 72 20 73 74 72 65 61 6d 41 64 61 70 74 65  ter streamAdapte
148f0 72 20 3d 20 47 65 74 53 74 72 65 61 6d 41 64 61  r = GetStreamAda
14900 70 74 65 72 28 73 74 72 65 61 6d 29 3b 0d 0a 0d  pter(stream);...
14910 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
14920 28 73 74 72 65 61 6d 41 64 61 70 74 65 72 20 3d  (streamAdapter =
14930 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14940 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14950 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
14960 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
14970 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
14980 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
14990 6f 74 20 67 65 74 20 6f 72 20 63 72 65 61 74 65  ot get or create
149a0 20 61 64 61 70 74 65 72 20 66 6f 72 20 69 6e 70   adapter for inp
149b0 75 74 20 73 74 72 65 61 6d 22 29 3b 0d 0a 20 20  ut stream");..  
149c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
149d0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
149e0 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
149f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14a00 6f 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67  ods.sqlite3chang
14a10 65 67 72 6f 75 70 5f 61 64 64 5f 73 74 72 6d 28  egroup_add_strm(
14a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a30 20 20 63 68 61 6e 67 65 47 72 6f 75 70 2c 20 73    changeGroup, s
14a40 74 72 65 61 6d 41 64 61 70 74 65 72 2e 47 65 74  treamAdapter.Get
14a50 49 6e 70 75 74 44 65 6c 65 67 61 74 65 28 29 2c  InputDelegate(),
14a60 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
14a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
14a80 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
14a90 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
14ab0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
14ac0 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69  eption(rc, "sqli
14ad0 74 65 33 63 68 61 6e 67 65 67 72 6f 75 70 5f 61  te3changegroup_a
14ae0 64 64 5f 73 74 72 6d 22 29 3b 0d 0a 20 20 20 20  dd_strm");..    
14af0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14b00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14b50 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
14b60 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
14b70 74 74 65 6d 70 74 73 20 74 6f 20 63 72 65 61 74  ttempts to creat
14b80 65 20 61 6e 64 20 72 65 74 75 72 6e 2c 20 76 69  e and return, vi
14b90 61 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65  a <paramref name
14ba0 3d 22 72 61 77 44 61 74 61 22 20 2f 3e 2c 20 74  ="rawData" />, t
14bb0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
14bc0 63 6f 6d 62 69 6e 65 64 20 73 65 74 20 6f 66 20  combined set of 
14bd0 63 68 61 6e 67 65 73 20 72 65 70 72 65 73 65 6e  changes represen
14be0 74 65 64 20 62 79 20 74 68 69 73 20 63 68 61 6e  ted by this chan
14bf0 67 65 20 67 72 6f 75 70 20 69 6e 73 74 61 6e 63  ge group instanc
14c00 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
14c10 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
14c20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
14c30 61 6d 65 3d 22 72 61 77 44 61 74 61 22 3e 0d 0a  ame="rawData">..
14c40 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
14c50 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 77   success, this w
14c60 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
14c70 72 61 77 20 62 79 74 65 20 64 61 74 61 20 66 6f  raw byte data fo
14c80 72 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20  r all the..     
14c90 20 20 20 2f 2f 2f 20 63 68 61 6e 67 65 73 20 69     /// changes i
14ca0 6e 20 74 68 69 73 20 63 68 61 6e 67 65 20 67 72  n this change gr
14cb0 6f 75 70 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  oup instance... 
14cc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
14cd0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
14ce0 6c 69 63 20 76 6f 69 64 20 43 72 65 61 74 65 43  lic void CreateC
14cf0 68 61 6e 67 65 53 65 74 28 0d 0a 20 20 20 20 20  hangeSet(..     
14d00 20 20 20 20 20 20 20 72 65 66 20 62 79 74 65 5b         ref byte[
14d10 5d 20 72 61 77 44 61 74 61 0d 0a 20 20 20 20 20  ] rawData..     
14d20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
14d30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14d40 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
14d50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  ;..            C
14d60 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d  heckHandle();...
14d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
14d80 50 74 72 20 70 44 61 74 61 20 3d 20 49 6e 74 50  Ptr pData = IntP
14d90 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
14da0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
14db0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
14dd0 6e 44 61 74 61 20 3d 20 30 3b 0d 0a 0d 0a 20 20  nData = 0;....  
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
14df0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
14e00 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
14e10 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 63 68  ethods.sqlite3ch
14e20 61 6e 67 65 67 72 6f 75 70 5f 6f 75 74 70 75 74  angegroup_output
14e30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14e40 20 20 20 20 20 20 20 63 68 61 6e 67 65 47 72 6f         changeGro
14e50 75 70 2c 20 72 65 66 20 6e 44 61 74 61 2c 20 72  up, ref nData, r
14e60 65 66 20 70 44 61 74 61 29 3b 0d 0a 0d 0a 20 20  ef pData);....  
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14e80 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
14e90 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
14ec0 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 22  eException(rc, "
14ed0 73 71 6c 69 74 65 33 63 68 61 6e 67 65 67 72 6f  sqlite3changegro
14ee0 75 70 5f 6f 75 74 70 75 74 22 29 3b 0d 0a 0d 0a  up_output");....
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 72 61 77 44 61 74 61 20 3d 20 53 51 4c 69 74 65  rawData = SQLite
14f10 42 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74 72  Bytes.FromIntPtr
14f20 28 70 44 61 74 61 2c 20 6e 44 61 74 61 29 3b 0d  (pData, nData);.
14f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
14f40 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
14f50 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
14f60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14f70 20 20 20 20 69 66 20 28 70 44 61 74 61 20 21 3d      if (pData !=
14f80 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14fb0 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
14fc0 72 79 2e 46 72 65 65 55 6e 74 72 61 63 6b 65 64  ry.FreeUntracked
14fd0 28 70 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20  (pData);..      
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
14ff0 61 74 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ata = IntPtr.Zer
15000 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
15010 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15020 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
15030 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
15040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15080 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
15090 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
150a0 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74       /// Attempt
150b0 73 20 74 6f 20 63 72 65 61 74 65 20 61 6e 64 20  s to create and 
150c0 77 72 69 74 65 2c 20 76 69 61 20 3c 70 61 72 61  write, via <para
150d0 6d 72 65 66 20 6e 61 6d 65 3d 22 73 74 72 65 61  mref name="strea
150e0 6d 22 20 2f 3e 2c 20 74 68 65 0d 0a 20 20 20 20  m" />, the..    
150f0 20 20 20 20 2f 2f 2f 20 63 6f 6d 62 69 6e 65 64      /// combined
15100 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 20   set of changes 
15110 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 74  represented by t
15120 68 69 73 20 63 68 61 6e 67 65 20 67 72 6f 75 70  his change group
15130 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
15140 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15150 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
15160 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72  <param name="str
15170 65 61 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  eam">..        /
15180 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
15190 20 74 68 65 20 72 61 77 20 62 79 74 65 20 64 61   the raw byte da
151a0 74 61 20 66 6f 72 20 61 6c 6c 20 74 68 65 20 63  ta for all the c
151b0 68 61 6e 67 65 73 20 69 6e 20 74 68 69 73 20 63  hanges in this c
151c0 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 20 20 2f  hange..        /
151d0 2f 2f 20 67 72 6f 75 70 20 69 6e 73 74 61 6e 63  // group instanc
151e0 65 20 77 69 6c 6c 20 62 65 20 77 72 69 74 74 65  e will be writte
151f0 6e 20 74 6f 20 74 68 69 73 20 3c 73 65 65 20 63  n to this <see c
15200 72 65 66 3d 22 53 74 72 65 61 6d 22 20 2f 3e 2e  ref="Stream" />.
15210 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15220 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
15230 70 75 62 6c 69 63 20 76 6f 69 64 20 43 72 65 61  public void Crea
15240 74 65 43 68 61 6e 67 65 53 65 74 28 0d 0a 20 20  teChangeSet(..  
15250 20 20 20 20 20 20 20 20 20 20 53 74 72 65 61 6d            Stream
15260 20 73 74 72 65 61 6d 0d 0a 20 20 20 20 20 20 20   stream..       
15270 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
15280 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  {..            C
15290 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
152a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
152b0 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20  ckHandle();.... 
152c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
152d0 74 72 65 61 6d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  tream == null)..
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
15300 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
15310 22 73 74 72 65 61 6d 22 29 3b 0d 0a 0d 0a 20 20  "stream");....  
15320 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
15330 53 74 72 65 61 6d 41 64 61 70 74 65 72 20 73 74  StreamAdapter st
15340 72 65 61 6d 41 64 61 70 74 65 72 20 3d 20 47 65  reamAdapter = Ge
15350 74 53 74 72 65 61 6d 41 64 61 70 74 65 72 28 73  tStreamAdapter(s
15360 74 72 65 61 6d 29 3b 0d 0a 0d 0a 20 20 20 20 20  tream);....     
15370 20 20 20 20 20 20 20 69 66 20 28 73 74 72 65 61         if (strea
15380 6d 41 64 61 70 74 65 72 20 3d 3d 20 6e 75 6c 6c  mAdapter == null
15390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
153a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
153b0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
153c0 74 65 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  teException(..  
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 67 65 74    "could not get
153f0 20 6f 72 20 63 72 65 61 74 65 20 61 64 61 70 74   or create adapt
15400 65 72 20 66 6f 72 20 6f 75 74 70 75 74 20 73 74  er for output st
15410 72 65 61 6d 22 29 3b 0d 0a 20 20 20 20 20 20 20  ream");..       
15420 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15430 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
15440 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
15450 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
15460 71 6c 69 74 65 33 63 68 61 6e 67 65 67 72 6f 75  qlite3changegrou
15470 70 5f 6f 75 74 70 75 74 5f 73 74 72 6d 28 0d 0a  p_output_strm(..
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 63 68 61 6e 67 65 47 72 6f 75 70 2c 20 73 74 72  changeGroup, str
154a0 65 61 6d 41 64 61 70 74 65 72 2e 47 65 74 4f 75  eamAdapter.GetOu
154b0 74 70 75 74 44 65 6c 65 67 61 74 65 28 29 2c 20  tputDelegate(), 
154c0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d  IntPtr.Zero);...
154d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
154e0 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
154f0 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
15500 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
15510 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
15520 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69 74  ption(rc, "sqlit
15530 65 33 63 68 61 6e 67 65 67 72 6f 75 70 5f 6f 75  e3changegroup_ou
15540 74 70 75 74 5f 73 74 72 6d 22 29 3b 0d 0a 20 20  tput_strm");..  
15550 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15560 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
15570 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
155c0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
155d0 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
155e0 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  mbers..        /
155f0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
15600 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73        /// Dispos
15610 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  es of this objec
15620 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
15630 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
15640 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
15650 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65  lic void Dispose
15660 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
15670 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
15680 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  se(true);..     
15690 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65         GC.Suppre
156a0 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29  ssFinalize(this)
156b0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
156c0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
156d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
156e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15720 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
15730 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
15740 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d  le "Pattern" Mem
15750 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  bers..        //
15760 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
15770 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
15780 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74  o if this object
15790 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65   instance has be
157a0 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  en disposed...  
157b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
157c0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
157d0 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
157e0 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  sed;....        
157f0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
15800 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77         /// Throw
15810 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69  s an exception i
15820 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
15830 73 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20  stance has been 
15840 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
15850 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15860 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
15870 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
15880 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
15890 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
158a0 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53  #if THROW_ON_DIS
158b0 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20  POSED..         
158c0 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
158d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
158e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
158f0 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
15900 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
15910 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
15920 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
15930 53 51 4c 69 74 65 43 68 61 6e 67 65 47 72 6f 75  SQLiteChangeGrou
15940 70 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  p).Name);..     
15950 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
15960 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
15970 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
159c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
159d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
159e0 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 72   /// Disposes or
159f0 20 66 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20   finalizes this 
15a00 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
15a10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15a20 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
15a30 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15a40 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a  e="disposing">..
15a50 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
15a60 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a  zero if this obj
15a70 65 63 74 20 69 73 20 62 65 69 6e 67 20 64 69 73  ect is being dis
15a80 70 6f 73 65 64 3b 20 6f 74 68 65 72 77 69 73 65  posed; otherwise
15a90 2c 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20  , this object.. 
15aa0 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65         /// is be
15ab0 69 6e 67 20 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a  ing finalized...
15ac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
15ad0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ram>..        pr
15ae0 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
15af0 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
15b00 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20  id Dispose(bool 
15b10 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
15b20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15b30 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
15b40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15b50 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
15b60 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
15b70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15b90 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
15bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bf0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
15c00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69             // di
15c10 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65  spose managed re
15c20 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
15c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c40 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
15c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
15c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c80 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
15c90 65 61 6d 4d 61 6e 61 67 65 72 20 21 3d 20 6e 75  eamManager != nu
15ca0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 65              stre
15ce0 61 6d 4d 61 6e 61 67 65 72 2e 44 69 73 70 6f 73  amManager.Dispos
15cf0 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d10 20 20 73 74 72 65 61 6d 4d 61 6e 61 67 65 72 20    streamManager 
15d20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15d50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d90 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
15db0 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
15dc0 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
15dd0 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
15de0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
15df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15e10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15e20 20 20 20 20 20 20 20 69 66 20 28 63 68 61 6e 67         if (chang
15e30 65 47 72 6f 75 70 20 21 3d 20 49 6e 74 50 74 72  eGroup != IntPtr
15e40 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
15e50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e70 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
15e80 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
15e90 65 33 63 68 61 6e 67 65 67 72 6f 75 70 5f 64 65  e3changegroup_de
15ea0 6c 65 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lete(..         
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ec0 20 20 20 63 68 61 6e 67 65 47 72 6f 75 70 29 3b     changeGroup);
15ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e              chan
15ef0 67 65 47 72 6f 75 70 20 3d 20 49 6e 74 50 74 72  geGroup = IntPtr
15f00 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
15f10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
15f50 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
15f60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15f70 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
15f80 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
15f90 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f  : Everything sho
15fa0 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73  uld be fully dis
15fb0 70 6f 73 65 64 20 61 74 20 74 68 69 73 20 70 6f  posed at this po
15fc0 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  int...          
15fd0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
15fe0 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
15ff0 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
16000 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16010 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
16020 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
16030 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16080 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
16090 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
160a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
160b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 69  ..        /// Fi
160c0 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a  nalizes this obj
160d0 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
160e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
160f0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e  mary>..        ~
16100 53 51 4c 69 74 65 43 68 61 6e 67 65 47 72 6f 75  SQLiteChangeGrou
16110 70 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  p()..        {..
16120 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
16130 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ose(false);..   
16140 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16150 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
16160 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
16170 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
16180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
161d0 69 6f 6e 20 53 51 4c 69 74 65 53 65 73 73 69 6f  ion SQLiteSessio
161e0 6e 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f  n Class..    ///
161f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
16200 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 72  /// This class r
16210 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 63 68  epresents the ch
16220 61 6e 67 65 20 74 72 61 63 6b 69 6e 67 20 73 65  ange tracking se
16230 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ssion associated
16240 20 77 69 74 68 20 61 0d 0a 20 20 20 20 2f 2f 2f   with a..    ///
16250 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
16260 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
16270 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61      internal sea
16280 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
16290 53 65 73 73 69 6f 6e 20 3a 20 53 51 4c 69 74 65  Session : SQLite
162a0 43 6f 6e 6e 65 63 74 69 6f 6e 4c 6f 63 6b 2c 20  ConnectionLock, 
162b0 49 53 51 4c 69 74 65 53 65 73 73 69 6f 6e 0d 0a  ISQLiteSession..
162c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
162d0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
162e0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ata..        ///
162f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
16300 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
16310 20 63 72 65 66 3d 22 53 51 4c 69 74 65 53 65 73   cref="SQLiteSes
16320 73 69 6f 6e 53 74 72 65 61 6d 4d 61 6e 61 67 65  sionStreamManage
16330 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20 61  r" /> instance a
16340 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
16350 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
16360 20 73 65 73 73 69 6f 6e 2e 0d 0a 20 20 20 20 20   session...     
16370 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
16380 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
16390 74 65 20 53 51 4c 69 74 65 53 65 73 73 69 6f 6e  te SQLiteSession
163a0 53 74 72 65 61 6d 4d 61 6e 61 67 65 72 20 73 74  StreamManager st
163b0 72 65 61 6d 4d 61 6e 61 67 65 72 3b 0d 0a 0d 0a  reamManager;....
163c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
163d0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
163e0 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
163f0 68 65 20 64 61 74 61 62 61 73 65 20 28 65 2e 67  he database (e.g
16400 2e 20 22 6d 61 69 6e 22 29 20 66 6f 72 20 74 68  . "main") for th
16410 69 73 20 73 65 73 73 69 6f 6e 2e 0d 0a 20 20 20  is session...   
16420 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
16430 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
16440 76 61 74 65 20 73 74 72 69 6e 67 20 64 61 74 61  vate string data
16450 62 61 73 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  baseName;....   
16460 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
164a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
164b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
164c0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
164d0 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 68 61  // The native ha
164e0 6e 64 6c 65 20 66 6f 72 20 74 68 69 73 20 73 65  ndle for this se
164f0 73 73 69 6f 6e 2e 20 20 54 68 69 73 20 77 69 6c  ssion.  This wil
16500 6c 20 62 65 20 64 65 6c 65 74 65 64 20 77 68 65  l be deleted whe
16510 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  n..        /// t
16520 68 69 73 20 69 6e 73 74 61 6e 63 65 20 69 73 20  his instance is 
16530 64 69 73 70 6f 73 65 64 20 6f 72 20 66 69 6e 61  disposed or fina
16540 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  lized...        
16550 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
16560 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16570 49 6e 74 50 74 72 20 73 65 73 73 69 6f 6e 3b 0d  IntPtr session;.
16580 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
16590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
165e0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
165f0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 6c       /// The del
16600 65 67 61 74 65 20 75 73 65 64 20 74 6f 20 70 72  egate used to pr
16610 6f 76 69 64 65 20 74 61 62 6c 65 20 66 69 6c 74  ovide table filt
16620 65 72 69 6e 67 20 74 6f 20 74 68 65 20 6e 61 74  ering to the nat
16630 69 76 65 20 41 50 49 2e 0d 0a 20 20 20 20 20 20  ive API...      
16640 20 20 2f 2f 2f 20 49 74 20 77 69 6c 6c 20 62 65    /// It will be
16650 20 6e 75 6c 6c 20 2d 4f 52 2d 20 70 6f 69 6e 74   null -OR- point
16660 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65   to the <see cre
16670 66 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  f="Filter" /> me
16680 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
16690 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
166a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 55         private U
166b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
166c0 64 73 2e 78 53 65 73 73 69 6f 6e 46 69 6c 74 65  ds.xSessionFilte
166d0 72 20 78 46 69 6c 74 65 72 3b 0d 0a 0d 0a 20 20  r xFilter;....  
166e0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
166f0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
16700 20 54 68 65 20 6d 61 6e 61 67 65 64 20 63 61 6c   The managed cal
16710 6c 62 61 63 6b 20 75 73 65 64 20 74 6f 20 66 69  lback used to fi
16720 6c 74 65 72 20 74 61 62 6c 65 73 20 66 6f 72 20  lter tables for 
16730 74 68 69 73 20 73 65 73 73 69 6f 6e 2e 20 20 53  this session.  S
16740 65 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  et..        /// 
16750 76 69 61 20 74 68 65 20 3c 73 65 65 20 63 72 65  via the <see cre
16760 66 3d 22 53 65 74 54 61 62 6c 65 46 69 6c 74 65  f="SetTableFilte
16770 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  r" /> method... 
16780 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
16790 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
167a0 72 69 76 61 74 65 20 53 65 73 73 69 6f 6e 54 61  rivate SessionTa
167b0 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63  bleFilterCallbac
167c0 6b 20 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c  k tableFilterCal
167d0 6c 62 61 63 6b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lback;....      
167e0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
167f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
16800 20 6f 70 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63   optional applic
16810 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 63 6f  ation-defined co
16820 6e 74 65 78 74 20 64 61 74 61 20 74 68 61 74 20  ntext data that 
16830 77 61 73 20 70 61 73 73 65 64 20 74 6f 0d 0a 20  was passed to.. 
16840 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 3c         /// the <
16850 73 65 65 20 63 72 65 66 3d 22 53 65 74 54 61 62  see cref="SetTab
16860 6c 65 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  leFilter" /> met
16870 68 6f 64 2e 20 20 54 68 69 73 20 76 61 6c 75 65  hod.  This value
16880 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20   may be null... 
16890 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
168a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
168b0 72 69 76 61 74 65 20 6f 62 6a 65 63 74 20 74 61  rivate object ta
168c0 62 6c 65 46 69 6c 74 65 72 43 6c 69 65 6e 74 44  bleFilterClientD
168d0 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  ata;..        #e
168e0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
168f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16940 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
16950 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
16960 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
16970 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
16980 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
16990 73 20 61 20 6e 65 77 20 69 6e 73 74 61 6e 63 65  s a new instance
169a0 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20 75   of this class u
169b0 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  sing the specifi
169c0 65 64 20 77 72 61 70 70 65 64 0d 0a 20 20 20 20  ed wrapped..    
169d0 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 63      /// native c
169e0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
169f0 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64 20   and associated 
16a00 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 20  flags...        
16a10 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
16a20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
16a30 61 6d 20 6e 61 6d 65 3d 22 68 61 6e 64 6c 65 22  am name="handle"
16a40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
16a50 68 65 20 77 72 61 70 70 65 64 20 6e 61 74 69 76  he wrapped nativ
16a60 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
16a70 64 6c 65 20 74 6f 20 62 65 20 61 73 73 6f 63 69  dle to be associ
16a80 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a  ated with this..
16a90 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 65 73 73          /// sess
16aa0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
16ab0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16ac0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16ad0 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
16ae0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c        /// The fl
16af0 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
16b00 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ith the connecti
16b10 6f 6e 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  on represented b
16b20 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  y the..        /
16b30 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  // <paramref nam
16b40 65 3d 22 68 61 6e 64 6c 65 22 20 2f 3e 20 76 61  e="handle" /> va
16b50 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
16b60 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16b70 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
16b80 61 6d 65 3d 22 64 61 74 61 62 61 73 65 4e 61 6d  ame="databaseNam
16b90 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
16ba0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
16bb0 20 64 61 74 61 62 61 73 65 20 28 65 2e 67 2e 20   database (e.g. 
16bc0 22 6d 61 69 6e 22 29 20 66 6f 72 20 74 68 69 73  "main") for this
16bd0 20 73 65 73 73 69 6f 6e 2e 0d 0a 20 20 20 20 20   session...     
16be0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
16bf0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
16c00 53 51 4c 69 74 65 53 65 73 73 69 6f 6e 28 0d 0a  SQLiteSession(..
16c10 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
16c20 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
16c30 6c 65 20 68 61 6e 64 6c 65 2c 0d 0a 20 20 20 20  le handle,..    
16c40 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
16c50 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
16c60 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ags,..          
16c70 20 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73    string databas
16c80 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
16c90 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
16ca0 20 20 3a 20 62 61 73 65 28 68 61 6e 64 6c 65 2c    : base(handle,
16cb0 20 66 6c 61 67 73 2c 20 74 72 75 65 29 0d 0a 20   flags, true).. 
16cc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16cd0 20 20 20 20 20 20 74 68 69 73 2e 64 61 74 61 62        this.datab
16ce0 61 73 65 4e 61 6d 65 20 3d 20 64 61 74 61 62 61  aseName = databa
16cf0 73 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  seName;....     
16d00 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a         Initializ
16d10 65 48 61 6e 64 6c 65 28 29 3b 0d 0a 20 20 20 20  eHandle();..    
16d20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
16d30 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
16d40 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
16d90 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
16da0 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d  Private Methods.
16db0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
16dc0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
16dd0 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 65 78  /// Throws an ex
16de0 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 6e  ception if the n
16df0 61 74 69 76 65 20 73 65 73 73 69 6f 6e 20 68 61  ative session ha
16e00 6e 64 6c 65 20 69 73 20 69 6e 76 61 6c 69 64 2e  ndle is invalid.
16e10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
16e20 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
16e30 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
16e40 68 65 63 6b 48 61 6e 64 6c 65 28 29 0d 0a 20 20  heckHandle()..  
16e50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16e60 20 20 20 20 20 69 66 20 28 73 65 73 73 69 6f 6e       if (session
16e70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
16e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e90 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
16ea0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
16eb0 70 74 69 6f 6e 28 22 73 65 73 73 69 6f 6e 20 69  ption("session i
16ec0 73 20 6e 6f 74 20 6f 70 65 6e 22 29 3b 0d 0a 20  s not open");.. 
16ed0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16ee0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16f30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
16f40 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
16f50 2f 20 4d 61 6b 65 73 20 73 75 72 65 20 74 68 65  / Makes sure the
16f60 20 6e 61 74 69 76 65 20 73 65 73 73 69 6f 6e 20   native session 
16f70 68 61 6e 64 6c 65 20 69 73 20 76 61 6c 69 64 2c  handle is valid,
16f80 20 63 72 65 61 74 69 6e 67 20 69 74 20 69 66 0d   creating it if.
16f90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 63  .        /// nec
16fa0 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  essary...       
16fb0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
16fc0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
16fd0 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
16fe0 48 61 6e 64 6c 65 28 29 0d 0a 20 20 20 20 20 20  Handle()..      
16ff0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17000 20 69 66 20 28 73 65 73 73 69 6f 6e 20 21 3d 20   if (session != 
17010 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
17030 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
17040 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
17050 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
17060 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
17070 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 63 72 65  lite3session_cre
17080 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
17090 20 20 20 20 20 20 47 65 74 49 6e 74 50 74 72 28        GetIntPtr(
170a0 29 2c 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e  ), SQLiteString.
170b0 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d  GetUtf8BytesFrom
170c0 53 74 72 69 6e 67 28 64 61 74 61 62 61 73 65 4e  String(databaseN
170d0 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
170e0 20 20 20 20 20 20 20 72 65 66 20 73 65 73 73 69         ref sessi
170f0 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
17100 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51      if (rc != SQ
17110 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
17120 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17130 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
17140 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c  iteException(rc,
17150 20 22 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e   "sqlite3session
17160 5f 63 72 65 61 74 65 22 29 3b 0d 0a 20 20 20 20  _create");..    
17170 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
17180 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
17190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
171d0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
171e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
171f0 68 69 73 20 6d 65 74 68 6f 64 20 73 65 74 73 20  his method sets 
17200 75 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  up the internal 
17210 74 61 62 6c 65 20 66 69 6c 74 65 72 69 6e 67 20  table filtering 
17220 61 73 73 6f 63 69 61 74 65 64 20 73 74 61 74 65  associated state
17230 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66  ..        /// of
17240 20 74 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d   this instance..
17250 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
17260 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
17270 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
17280 3d 22 63 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20  ="callback">..  
17290 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 61        /// The ta
172a0 62 6c 65 20 66 69 6c 74 65 72 20 63 61 6c 6c 62  ble filter callb
172b0 61 63 6b 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f  ack -OR- null to
172c0 20 63 6c 65 61 72 20 61 6e 79 20 65 78 69 73 74   clear any exist
172d0 69 6e 67 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ing table..     
172e0 20 20 20 2f 2f 2f 20 66 69 6c 74 65 72 20 63 61     /// filter ca
172f0 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20  llback...       
17300 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17310 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
17320 6d 20 6e 61 6d 65 3d 22 63 6c 69 65 6e 74 44 61  m name="clientDa
17330 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ta">..        //
17340 2f 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 61  / The optional a
17350 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
17360 65 64 20 63 6f 6e 74 65 78 74 20 64 61 74 61 2e  ed context data.
17370 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d 61 79    This value may
17380 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   be..        ///
17390 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20   null...        
173a0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
173b0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
173c0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
173d0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
173e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
173f0 6f 64 73 2e 78 53 65 73 73 69 6f 6e 46 69 6c 74  ods.xSessionFilt
17400 65 72 22 20 2f 3e 20 6e 61 74 69 76 65 0d 0a 20  er" /> native.. 
17410 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 6c 65 67         /// deleg
17420 61 74 65 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f  ate -OR- null to
17430 20 63 6c 65 61 72 20 61 6e 79 20 65 78 69 73 74   clear any exist
17440 69 6e 67 20 74 61 62 6c 65 20 66 69 6c 74 65 72  ing table filter
17450 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17460 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
17470 20 20 20 70 72 69 76 61 74 65 20 55 6e 73 61 66     private Unsaf
17480 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
17490 53 65 73 73 69 6f 6e 46 69 6c 74 65 72 20 41 70  SessionFilter Ap
174a0 70 6c 79 54 61 62 6c 65 46 69 6c 74 65 72 28 0d  plyTableFilter(.
174b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 73  .            Ses
174c0 73 69 6f 6e 54 61 62 6c 65 46 69 6c 74 65 72 43  sionTableFilterC
174d0 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
174e0 2c 20 2f 2a 20 69 6e 3a 20 4e 55 4c 4c 20 4f 4b  , /* in: NULL OK
174f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
17500 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
17510 74 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ta              
17520 20 20 20 20 20 20 2f 2a 20 69 6e 3a 20 4e 55 4c        /* in: NUL
17530 4c 20 4f 4b 20 2a 2f 0d 0a 20 20 20 20 20 20 20  L OK */..       
17540 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
17550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
17560 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61  ableFilterCallba
17570 63 6b 20 3d 20 63 61 6c 6c 62 61 63 6b 3b 0d 0a  ck = callback;..
17580 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c              tabl
17590 65 46 69 6c 74 65 72 43 6c 69 65 6e 74 44 61 74  eFilterClientDat
175a0 61 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b 0d  a = clientData;.
175b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
175c0 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
175d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
175e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
175f0 20 20 20 20 20 69 66 20 28 78 46 69 6c 74 65 72       if (xFilter
17600 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
17620 46 69 6c 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  Filter = null;..
17630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17640 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
17650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17660 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
17670 28 78 46 69 6c 74 65 72 20 3d 3d 20 6e 75 6c 6c  (xFilter == null
17680 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17690 20 20 20 78 46 69 6c 74 65 72 20 3d 20 6e 65 77     xFilter = new
176a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
176b0 68 6f 64 73 2e 78 53 65 73 73 69 6f 6e 46 69 6c  hods.xSessionFil
176c0 74 65 72 28 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a  ter(Filter);....
176d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
176e0 72 6e 20 78 46 69 6c 74 65 72 3b 0d 0a 20 20 20  rn xFilter;..   
176f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17700 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17740 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17750 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
17760 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
17770 4d 61 6b 65 73 20 73 75 72 65 20 74 68 65 20 3c  Makes sure the <
17780 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
17790 53 65 73 73 69 6f 6e 53 74 72 65 61 6d 4d 61 6e  SessionStreamMan
177a0 61 67 65 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63  ager" /> instanc
177b0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  e..        /// i
177c0 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 63 72 65  s available, cre
177d0 61 74 69 6e 67 20 69 74 20 69 66 20 6e 65 63 65  ating it if nece
177e0 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  ssary...        
177f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
17800 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
17810 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 53  void InitializeS
17820 74 72 65 61 6d 4d 61 6e 61 67 65 72 28 29 0d 0a  treamManager()..
17830 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17840 20 20 20 20 20 20 20 69 66 20 28 73 74 72 65 61         if (strea
17850 6d 4d 61 6e 61 67 65 72 20 21 3d 20 6e 75 6c 6c  mManager != null
17860 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17870 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
17880 20 20 20 20 20 20 20 20 20 20 73 74 72 65 61 6d            stream
17890 4d 61 6e 61 67 65 72 20 3d 20 6e 65 77 20 53 51  Manager = new SQ
178a0 4c 69 74 65 53 65 73 73 69 6f 6e 53 74 72 65 61  LiteSessionStrea
178b0 6d 4d 61 6e 61 67 65 72 28 47 65 74 46 6c 61 67  mManager(GetFlag
178c0 73 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  s());..        }
178d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
178e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17920 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
17930 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
17940 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70        /// Attemp
17950 74 73 20 74 6f 20 72 65 74 75 72 6e 20 61 20 3c  ts to return a <
17960 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
17970 53 74 72 65 61 6d 41 64 61 70 74 65 72 22 20 2f  StreamAdapter" /
17980 3e 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20  > instance..    
17990 20 20 20 20 2f 2f 2f 20 73 75 69 74 61 62 6c 65      /// suitable
179a0 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
179b0 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74  ed <see cref="St
179c0 72 65 61 6d 22 20 2f 3e 2e 0d 0a 20 20 20 20 20  ream" />...     
179d0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
179e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
179f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 65  param name="stre
17a00 61 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  am">..        //
17a10 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
17a20 22 53 74 72 65 61 6d 22 20 2f 3e 20 69 6e 73 74  "Stream" /> inst
17a30 61 6e 63 65 2e 20 20 49 66 20 74 68 69 73 20 76  ance.  If this v
17a40 61 6c 75 65 20 69 73 20 6e 75 6c 6c 2c 20 61 20  alue is null, a 
17a50 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  null..        //
17a60 2f 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  / value will be 
17a70 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20  returned...     
17a80 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
17a90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
17aa0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
17ab0 2f 2f 2f 20 41 20 3c 73 65 65 20 63 72 65 66 3d  /// A <see cref=
17ac0 22 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61  "SQLiteStreamAda
17ad0 70 74 65 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63  pter" /> instanc
17ae0 65 2e 20 20 54 79 70 69 63 61 6c 6c 79 2c 20 74  e.  Typically, t
17af0 68 65 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hese..        //
17b00 2f 20 61 72 65 20 61 6c 77 61 79 73 20 66 72 65  / are always fre
17b10 73 68 6c 79 20 63 72 65 61 74 65 64 3b 20 68 6f  shly created; ho
17b20 77 65 76 65 72 2c 20 74 68 69 73 20 6d 65 74 68  wever, this meth
17b30 6f 64 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  od is designed t
17b40 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  o..        /// r
17b50 65 74 75 72 6e 20 74 68 65 20 65 78 69 73 74 69  eturn the existi
17b60 6e 67 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ng <see cref="SQ
17b70 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
17b80 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 0d 0a  r" /> instance..
17b90 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
17ba0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
17bb0 73 70 65 63 69 66 69 65 64 20 73 74 72 65 61 6d  specified stream
17bc0 2c 20 73 68 6f 75 6c 64 20 6f 6e 65 20 65 78 69  , should one exi
17bd0 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  st...        ///
17be0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
17bf0 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
17c00 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65 72  iteStreamAdapter
17c10 20 47 65 74 53 74 72 65 61 6d 41 64 61 70 74 65   GetStreamAdapte
17c20 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
17c30 53 74 72 65 61 6d 20 73 74 72 65 61 6d 0d 0a 20  Stream stream.. 
17c40 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
17c50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17c60 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 53       InitializeS
17c70 74 72 65 61 6d 4d 61 6e 61 67 65 72 28 29 3b 0d  treamManager();.
17c80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
17c90 65 74 75 72 6e 20 73 74 72 65 61 6d 4d 61 6e 61  eturn streamMana
17ca0 67 65 72 2e 47 65 74 41 64 61 70 74 65 72 28 73  ger.GetAdapter(s
17cb0 74 72 65 61 6d 29 3b 0d 0a 20 20 20 20 20 20 20  tream);..       
17cc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
17cd0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
17ce0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17d30 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74       #region Nat
17d40 69 76 65 20 43 61 6c 6c 62 61 63 6b 20 4d 65 74  ive Callback Met
17d50 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
17d60 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
17d70 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
17d80 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 77  thod is called w
17d90 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  hen determining 
17da0 69 66 20 61 20 74 61 62 6c 65 20 6e 65 65 64 73  if a table needs
17db0 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
17dc0 2f 2f 2f 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  /// included in 
17dd0 74 68 65 20 74 72 61 63 6b 65 64 20 63 68 61 6e  the tracked chan
17de0 67 65 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ges for the asso
17df0 63 69 61 74 65 64 20 64 61 74 61 62 61 73 65 2e  ciated database.
17e00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
17e10 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
17e20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17e30 65 3d 22 63 6f 6e 74 65 78 74 22 3e 0d 0a 20 20  e="context">..  
17e40 20 20 20 20 20 20 2f 2f 2f 20 4f 70 74 69 6f 6e        /// Option
17e50 61 6c 20 65 78 74 72 61 20 63 6f 6e 74 65 78 74  al extra context
17e60 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 43   information.  C
17e70 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 77  urrently, this w
17e80 69 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20  ill always..    
17e90 20 20 20 20 2f 2f 2f 20 68 61 76 65 20 61 20 76      /// have a v
17ea0 61 6c 75 65 20 6f 66 20 3c 73 65 65 20 63 72 65  alue of <see cre
17eb0 66 3d 22 49 6e 74 50 74 72 2e 5a 65 72 6f 22 20  f="IntPtr.Zero" 
17ec0 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  />...        ///
17ed0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
17ee0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17ef0 6d 65 3d 22 70 54 62 6c 4e 61 6d 65 22 3e 0d 0a  me="pTblName">..
17f00 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
17f10 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
17f20 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  o the name of th
17f30 65 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  e table...      
17f40 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
17f50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
17f60 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
17f70 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 63  // Non-zero if c
17f80 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 73 70  hanges to the sp
17f90 65 63 69 66 69 65 64 20 74 61 62 6c 65 20 73 68  ecified table sh
17fa0 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65 72  ould be consider
17fb0 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed;..        ///
17fc0 20 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f   otherwise, zero
17fd0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
17fe0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
17ff0 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20 46     private int F
18000 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20  ilter(..        
18010 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6e 74 65      IntPtr conte
18020 78 74 2c 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20  xt, /* NOT USED 
18030 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
18040 49 6e 74 50 74 72 20 70 54 62 6c 4e 61 6d 65 0d  IntPtr pTblName.
18050 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
18060 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18070 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
18080 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18090 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
180a0 6e 20 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c  n tableFilterCal
180b0 6c 62 61 63 6b 28 74 61 62 6c 65 46 69 6c 74 65  lback(tableFilte
180c0 72 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20  rClientData,..  
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53    SQLiteString.S
180f0 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74  tringFromUtf8Int
18100 50 74 72 28 70 54 62 6c 4e 61 6d 65 29 29 20 3f  Ptr(pTblName)) ?
18110 20 31 20 3a 20 30 3b 0d 0a 20 20 20 20 20 20 20   1 : 0;..       
18120 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18130 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
18140 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
18150 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18160 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65      if (HelperMe
181a0 74 68 6f 64 73 2e 4c 6f 67 43 61 6c 6c 62 61 63  thods.LogCallbac
181b0 6b 45 78 63 65 70 74 69 6f 6e 73 28 47 65 74 46  kExceptions(GetF
181c0 6c 61 67 73 28 29 29 29 0d 0a 20 20 20 20 20 20  lags()))..      
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
181e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181f0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
18200 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 20 2f  og.LogMessage( /
18210 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
18240 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49  se.COR_E_EXCEPTI
18250 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ON,..           
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53   HelperMethods.S
18280 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
182b0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
182c0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182e0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
182f0 65 74 68 6f 64 73 2e 45 78 63 65 70 74 69 6f 6e  ethods.Exception
18300 4d 65 73 73 61 67 65 46 6f 72 6d 61 74 2c 0d 0a  MessageFormat,..
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 20 20 20 20 20 20 20 20 20 22 78 53 65              "xSe
18330 73 73 69 6f 6e 46 69 6c 74 65 72 22 2c 20 65 29  ssionFilter", e)
18340 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
18350 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
18360 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
18380 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
18390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
183a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
183b0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
183c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
183d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
183e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
183f0 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rn 0;..        }
18400 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
18410 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
18420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18460 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
18470 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69     #region ISQLi
18480 74 65 53 65 73 73 69 6f 6e 20 4d 65 6d 62 65 72  teSession Member
18490 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
184a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
184b0 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
184c0 20 69 66 20 74 68 69 73 20 73 65 73 73 69 6f 6e   if this session
184d0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 74 72   is currently tr
184e0 61 63 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 74  acking changes t
184f0 6f 20 69 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  o its..        /
18500 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 64 61  // associated da
18510 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 20  tabase...       
18520 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
18530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
18540 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
18550 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
18560 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 61  changes to the a
18570 73 73 6f 63 69 61 74 65 64 20 64 61 74 61 62 61  ssociated databa
18580 73 65 20 61 72 65 20 62 65 69 6e 67 20 74 72 61  se are being tra
18590 6b 63 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 2f  kced;..        /
185a0 2f 2f 20 6f 74 68 65 72 77 69 73 65 2c 20 7a 65  // otherwise, ze
185b0 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ro...        ///
185c0 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
185d0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
185e0 20 49 73 45 6e 61 62 6c 65 64 28 29 0d 0a 20 20   IsEnabled()..  
185f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18600 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
18610 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
18620 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29     CheckHandle()
18630 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18640 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
18650 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
18660 74 65 33 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c  te3session_enabl
18670 65 28 73 65 73 73 69 6f 6e 2c 20 2d 31 29 20 21  e(session, -1) !
18680 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  = 0;..        }.
18690 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
186a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
186f0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
18700 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73       /// Enables
18710 20 74 72 61 63 6b 69 6e 67 20 6f 66 20 63 68 61   tracking of cha
18720 6e 67 65 73 20 74 6f 20 74 68 65 20 61 73 73 6f  nges to the asso
18730 63 69 61 74 65 64 20 64 61 74 61 62 61 73 65 2e  ciated database.
18740 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
18750 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
18760 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
18770 74 54 6f 45 6e 61 62 6c 65 64 28 29 0d 0a 20 20  tToEnabled()..  
18780 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18790 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
187a0 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
187b0 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29     CheckHandle()
187c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
187d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
187e0 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73  hods.sqlite3sess
187f0 69 6f 6e 5f 65 6e 61 62 6c 65 28 73 65 73 73 69  ion_enable(sessi
18800 6f 6e 2c 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  on, 1);..       
18810 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
18820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18860 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18870 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
18880 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 61          /// Disa
18890 62 6c 65 73 20 74 72 61 63 6b 69 6e 67 20 6f 66  bles tracking of
188a0 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
188b0 61 73 73 6f 63 69 61 74 65 64 20 64 61 74 61 62  associated datab
188c0 61 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ase...        //
188d0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
188e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
188f0 64 20 53 65 74 54 6f 44 69 73 61 62 6c 65 64 28  d SetToDisabled(
18900 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18910 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
18920 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
18930 20 20 20 20 20 20 20 20 43 68 65 63 6b 48 61 6e          CheckHan
18940 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dle();....      
18950 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
18960 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
18970 33 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28  3session_enable(
18980 73 65 73 73 69 6f 6e 2c 20 30 29 3b 0d 0a 20 20  session, 0);..  
18990 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
189a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
189b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
189c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
189d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
189e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
189f0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
18a00 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
18a10 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
18a20 68 69 73 20 73 65 73 73 69 6f 6e 20 69 73 20 63  his session is c
18a30 75 72 72 65 6e 74 6c 79 20 73 65 74 20 74 6f 20  urrently set to 
18a40 6d 61 72 6b 20 63 68 61 6e 67 65 73 20 61 73 0d  mark changes as.
18a50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64  .        /// ind
18a60 69 72 65 63 74 20 28 69 2e 65 2e 20 61 73 20 74  irect (i.e. as t
18a70 68 6f 75 67 68 20 74 68 65 79 20 77 65 72 65 20  hough they were 
18a80 6d 61 64 65 20 76 69 61 20 61 20 74 72 69 67 67  made via a trigg
18a90 65 72 20 6f 72 20 66 6f 72 65 69 67 6e 0d 0a 20  er or foreign.. 
18aa0 20 20 20 20 20 20 20 2f 2f 2f 20 6b 65 79 20 61         /// key a
18ab0 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20  ction)...       
18ac0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
18ad0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
18ae0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
18af0 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
18b00 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 61  changes to the a
18b10 73 73 6f 63 69 61 74 65 64 20 64 61 74 61 62 61  ssociated databa
18b20 73 65 20 61 72 65 20 62 65 69 6e 67 20 6d 61 72  se are being mar
18b30 6b 65 64 20 61 73 0d 0a 20 20 20 20 20 20 20 20  ked as..        
18b40 2f 2f 2f 20 69 6e 64 69 72 65 63 74 3b 20 6f 74  /// indirect; ot
18b50 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a  herwise, zero...
18b60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
18b70 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
18b80 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 49 6e  public bool IsIn
18b90 64 69 72 65 63 74 28 29 0d 0a 20 20 20 20 20 20  direct()..      
18ba0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18bb0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
18bc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  ;..            C
18bd0 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d  heckHandle();...
18be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
18bf0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
18c00 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 73  Methods.sqlite3s
18c10 65 73 73 69 6f 6e 5f 69 6e 64 69 72 65 63 74 28  ession_indirect(
18c20 73 65 73 73 69 6f 6e 2c 20 2d 31 29 20 21 3d 20  session, -1) != 
18c30 30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  0;..        }...
18c40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
18c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
18ca0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
18cb0 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20     /// Sets the 
18cc0 69 6e 64 69 72 65 63 74 20 66 6c 61 67 20 66 6f  indirect flag fo
18cd0 72 20 74 68 69 73 20 73 65 73 73 69 6f 6e 2e 20  r this session. 
18ce0 20 53 75 62 73 65 71 75 65 6e 74 20 63 68 61 6e   Subsequent chan
18cf0 67 65 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20  ges will..      
18d00 20 20 2f 2f 2f 20 62 65 20 6d 61 72 6b 65 64 20    /// be marked 
18d10 61 73 20 69 6e 64 69 72 65 63 74 20 75 6e 74 69  as indirect unti
18d20 6c 20 74 68 69 73 20 66 6c 61 67 20 69 73 20 63  l this flag is c
18d30 68 61 6e 67 65 64 20 61 67 61 69 6e 2e 0d 0a 20  hanged again... 
18d40 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
18d50 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
18d60 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 54 6f  ublic void SetTo
18d70 49 6e 64 69 72 65 63 74 28 29 0d 0a 20 20 20 20  Indirect()..    
18d80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18d90 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
18da0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
18db0 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d   CheckHandle();.
18dc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
18dd0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
18de0 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73 69 6f  ds.sqlite3sessio
18df0 6e 5f 69 6e 64 69 72 65 63 74 28 73 65 73 73 69  n_indirect(sessi
18e00 6f 6e 2c 20 31 29 3b 0d 0a 20 20 20 20 20 20 20  on, 1);..       
18e10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
18e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18e70 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
18e80 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6c 65 61          /// Clea
18e90 72 73 20 74 68 65 20 69 6e 64 69 72 65 63 74 20  rs the indirect 
18ea0 66 6c 61 67 20 66 6f 72 20 74 68 69 73 20 73 65  flag for this se
18eb0 73 73 69 6f 6e 2e 20 20 53 75 62 73 65 71 75 65  ssion.  Subseque
18ec0 6e 74 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 0d  nt changes will.
18ed0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20  .        /// be 
18ee0 6d 61 72 6b 65 64 20 61 73 20 64 69 72 65 63 74  marked as direct
18ef0 20 75 6e 74 69 6c 20 74 68 69 73 20 66 6c 61 67   until this flag
18f00 20 69 73 20 63 68 61 6e 67 65 64 20 61 67 61 69   is changed agai
18f10 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n...        /// 
18f20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
18f30 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
18f40 53 65 74 54 6f 44 69 72 65 63 74 28 29 0d 0a 20  SetToDirect().. 
18f50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18f60 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
18f70 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
18f80 20 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28      CheckHandle(
18f90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18fa0 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
18fb0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73  thods.sqlite3ses
18fc0 73 69 6f 6e 5f 69 6e 64 69 72 65 63 74 28 73 65  sion_indirect(se
18fd0 73 73 69 6f 6e 2c 20 30 29 3b 0d 0a 20 20 20 20  ssion, 0);..    
18fe0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18ff0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19030 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
19040 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
19050 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44  >..        /// D
19060 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65  etermines if the
19070 72 65 20 61 72 65 20 61 6e 79 20 74 72 61 63 6b  re are any track
19080 65 64 20 63 68 61 6e 67 65 73 20 63 75 72 72 65  ed changes curre
19090 6e 74 6c 79 20 77 69 74 68 69 6e 20 74 68 65 0d  ntly within the.
190a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74  .        /// dat
190b0 61 20 66 6f 72 20 74 68 69 73 20 73 65 73 73 69  a for this sessi
190c0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
190d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
190e0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
190f0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
19100 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 72  Non-zero if ther
19110 65 20 61 72 65 20 6e 6f 20 63 68 61 6e 67 65 73  e are no changes
19120 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
19130 20 66 6f 72 20 74 68 69 73 20 73 65 73 73 69 6f   for this sessio
19140 6e 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  n;..        /// 
19150 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e  otherwise, zero.
19160 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
19170 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
19180 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73    public bool Is
19190 45 6d 70 74 79 28 29 0d 0a 20 20 20 20 20 20 20  Empty()..       
191a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
191b0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
191c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
191d0 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a  eckHandle();....
191e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
191f0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
19200 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65  ethods.sqlite3se
19210 73 73 69 6f 6e 5f 69 73 65 6d 70 74 79 28 73 65  ssion_isempty(se
19220 73 73 69 6f 6e 29 20 21 3d 20 30 3b 0d 0a 20 20  ssion) != 0;..  
19230 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19240 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
19250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19290 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
192a0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
192b0 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 63   Upon success, c
192c0 61 75 73 65 73 20 63 68 61 6e 67 65 73 20 74 6f  auses changes to
192d0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
192e0 61 62 6c 65 28 73 29 20 74 6f 20 73 74 61 72 74  able(s) to start
192f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65  ..        /// be
19300 69 6e 67 20 74 72 61 63 6b 65 64 2e 20 20 41 6e  ing tracked.  An
19310 79 20 74 61 62 6c 65 73 20 69 6d 70 61 63 74 65  y tables impacte
19320 64 20 62 79 20 63 61 6c 6c 73 20 74 6f 20 74 68  d by calls to th
19330 69 73 20 6d 65 74 68 6f 64 20 77 69 6c 6c 0d 0a  is method will..
19340 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f 74 20          /// not 
19350 63 61 75 73 65 20 74 68 65 20 3c 73 65 65 20 63  cause the <see c
19360 72 65 66 3d 22 53 65 73 73 69 6f 6e 54 61 62 6c  ref="SessionTabl
19370 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 22  eFilterCallback"
19380 20 2f 3e 20 63 61 6c 6c 62 61 63 6b 0d 0a 20 20   /> callback..  
19390 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 62 65 20        /// to be 
193a0 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20  invoked...      
193b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
193c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
193d0 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
193e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
193f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
19400 61 62 6c 65 20 74 6f 20 62 65 20 74 72 61 63 6b  able to be track
19410 65 64 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 20  ed -OR- null to 
19420 74 72 61 63 6b 20 61 6c 6c 0d 0a 20 20 20 20 20  track all..     
19430 20 20 20 2f 2f 2f 20 61 70 70 6c 69 63 61 62 6c     /// applicabl
19440 65 20 74 61 62 6c 65 73 20 77 69 74 68 69 6e 20  e tables within 
19450 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 0d 0a  this database...
19460 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
19470 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
19480 62 6c 69 63 20 76 6f 69 64 20 41 74 74 61 63 68  blic void Attach
19490 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Table(..        
194a0 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20      string name 
194b0 2f 2a 20 69 6e 3a 20 4e 55 4c 4c 20 4f 4b 20 2a  /* in: NULL OK *
194c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
194d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
194e0 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
194f0 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
19500 20 20 20 20 20 20 20 43 68 65 63 6b 48 61 6e 64         CheckHand
19510 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le();....       
19520 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
19530 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
19540 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
19550 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 61 74 74  lite3session_att
19560 61 63 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ach(..          
19570 20 20 20 20 20 20 73 65 73 73 69 6f 6e 2c 20 53        session, S
19580 51 4c 69 74 65 53 74 72 69 6e 67 2e 47 65 74 55  QLiteString.GetU
19590 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72 69  tf8BytesFromStri
195a0 6e 67 28 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20  ng(name));....  
195b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
195c0 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
195d0 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
195e0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
195f0 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
19600 6f 6e 28 72 63 2c 20 22 73 71 6c 69 74 65 33 73  on(rc, "sqlite3s
19610 65 73 73 69 6f 6e 5f 61 74 74 61 63 68 22 29 3b  ession_attach");
19620 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
19630 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
19690 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
196a0 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
196b0 20 69 73 20 75 73 65 64 20 74 6f 20 73 65 74 20   is used to set 
196c0 74 68 65 20 74 61 62 6c 65 20 66 69 6c 74 65 72  the table filter
196d0 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
196e0 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
196f0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
19700 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
19710 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22 3e  name="callback">
19720 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
19730 65 20 74 61 62 6c 65 20 66 69 6c 74 65 72 20 63  e table filter c
19740 61 6c 6c 62 61 63 6b 20 2d 4f 52 2d 20 6e 75 6c  allback -OR- nul
19750 6c 20 74 6f 20 63 6c 65 61 72 20 61 6e 79 20 65  l to clear any e
19760 78 69 73 74 69 6e 67 20 74 61 62 6c 65 0d 0a 20  xisting table.. 
19770 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c 74 65         /// filte
19780 72 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20  r callback...   
19790 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
197a0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
197b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6c 69 65  param name="clie
197c0 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20  ntData">..      
197d0 20 20 2f 2f 2f 20 54 68 65 20 6f 70 74 69 6f 6e    /// The option
197e0 61 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  al application-d
197f0 65 66 69 6e 65 64 20 63 6f 6e 74 65 78 74 20 64  efined context d
19800 61 74 61 2e 20 20 54 68 69 73 20 76 61 6c 75 65  ata.  This value
19810 20 6d 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20   may be..       
19820 20 2f 2f 2f 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20   /// null...    
19830 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
19840 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
19850 20 76 6f 69 64 20 53 65 74 54 61 62 6c 65 46 69   void SetTableFi
19860 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  lter(..         
19870 20 20 20 53 65 73 73 69 6f 6e 54 61 62 6c 65 46     SessionTableF
19880 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 20 63 61  ilterCallback ca
19890 6c 6c 62 61 63 6b 2c 20 2f 2a 20 69 6e 3a 20 4e  llback, /* in: N
198a0 55 4c 4c 20 4f 4b 20 2a 2f 0d 0a 20 20 20 20 20  ULL OK */..     
198b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
198c0 69 65 6e 74 44 61 74 61 20 20 20 20 20 20 20 20  ientData        
198d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
198e0 6e 3a 20 4e 55 4c 4c 20 4f 4b 20 2a 2f 0d 0a 20  n: NULL OK */.. 
198f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
19900 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19910 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
19920 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
19930 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29     CheckHandle()
19940 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19950 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
19960 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73  hods.sqlite3sess
19970 69 6f 6e 5f 74 61 62 6c 65 5f 66 69 6c 74 65 72  ion_table_filter
19980 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19990 20 20 20 73 65 73 73 69 6f 6e 2c 20 41 70 70 6c     session, Appl
199a0 79 54 61 62 6c 65 46 69 6c 74 65 72 28 63 61 6c  yTableFilter(cal
199b0 6c 62 61 63 6b 2c 20 63 6c 69 65 6e 74 44 61 74  lback, clientDat
199c0 61 29 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  a), IntPtr.Zero)
199d0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
199e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
199f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19a30 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19a40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
19a50 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74    /// Attempts t
19a60 6f 20 63 72 65 61 74 65 20 61 6e 64 20 72 65 74  o create and ret
19a70 75 72 6e 2c 20 76 69 61 20 3c 70 61 72 61 6d 72  urn, via <paramr
19a80 65 66 20 6e 61 6d 65 3d 22 72 61 77 44 61 74 61  ef name="rawData
19a90 22 20 2f 3e 2c 20 74 68 65 0d 0a 20 20 20 20 20  " />, the..     
19aa0 20 20 20 2f 2f 2f 20 73 65 74 20 6f 66 20 63 68     /// set of ch
19ab0 61 6e 67 65 73 20 72 65 70 72 65 73 65 6e 74 65  anges represente
19ac0 64 20 62 79 20 74 68 69 73 20 73 65 73 73 69 6f  d by this sessio
19ad0 6e 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  n instance...   
19ae0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
19af0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
19b00 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 61   <param name="ra
19b10 77 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20  wData">..       
19b20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
19b30 73 2c 20 74 68 69 73 20 77 69 6c 6c 20 63 6f 6e  s, this will con
19b40 74 61 69 6e 20 74 68 65 20 72 61 77 20 62 79 74  tain the raw byt
19b50 65 20 64 61 74 61 20 66 6f 72 20 61 6c 6c 20 74  e data for all t
19b60 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
19b70 63 68 61 6e 67 65 73 20 69 6e 20 74 68 69 73 20  changes in this 
19b80 73 65 73 73 69 6f 6e 20 69 6e 73 74 61 6e 63 65  session instance
19b90 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19ba0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
19bb0 20 70 75 62 6c 69 63 20 76 6f 69 64 20 43 72 65   public void Cre
19bc0 61 74 65 43 68 61 6e 67 65 53 65 74 28 0d 0a 20  ateChangeSet(.. 
19bd0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
19be0 79 74 65 5b 5d 20 72 61 77 44 61 74 61 0d 0a 20  yte[] rawData.. 
19bf0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
19c00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19c10 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
19c20 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
19c30 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29     CheckHandle()
19c40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19c50 20 49 6e 74 50 74 72 20 70 44 61 74 61 20 3d 20   IntPtr pData = 
19c60 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
19c70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
19c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 69 6e 74 20 6e 44 61 74 61 20 3d 20 30 3b 0d 0a  int nData = 0;..
19cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19cc0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
19cd0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
19ce0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
19cf0 65 33 73 65 73 73 69 6f 6e 5f 63 68 61 6e 67 65  e3session_change
19d00 73 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  set(..          
19d10 20 20 20 20 20 20 20 20 20 20 73 65 73 73 69 6f            sessio
19d20 6e 2c 20 72 65 66 20 6e 44 61 74 61 2c 20 72 65  n, ref nData, re
19d30 66 20 70 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20  f pData);....   
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19d50 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
19d60 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
19d90 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 22 73  Exception(rc, "s
19da0 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 63 68  qlite3session_ch
19db0 61 6e 67 65 73 65 74 22 29 3b 0d 0a 0d 0a 20 20  angeset");....  
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 61                ra
19dd0 77 44 61 74 61 20 3d 20 53 51 4c 69 74 65 42 79  wData = SQLiteBy
19de0 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74 72 28 70  tes.FromIntPtr(p
19df0 44 61 74 61 2c 20 6e 44 61 74 61 29 3b 0d 0a 20  Data, nData);.. 
19e00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19e10 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
19e20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
19e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e40 20 20 69 66 20 28 70 44 61 74 61 20 21 3d 20 49    if (pData != I
19e50 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
19e60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e80 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79      SQLiteMemory
19e90 2e 46 72 65 65 55 6e 74 72 61 63 6b 65 64 28 70  .FreeUntracked(p
19ea0 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20  Data);..        
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
19ec0 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  a = IntPtr.Zero;
19ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ee0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19ef0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
19f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
19f60 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
19f70 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
19f80 74 6f 20 63 72 65 61 74 65 20 61 6e 64 20 77 72  to create and wr
19f90 69 74 65 2c 20 76 69 61 20 3c 70 61 72 61 6d 72  ite, via <paramr
19fa0 65 66 20 6e 61 6d 65 3d 22 73 74 72 65 61 6d 22  ef name="stream"
19fb0 20 2f 3e 2c 20 74 68 65 0d 0a 20 20 20 20 20 20   />, the..      
19fc0 20 20 2f 2f 2f 20 73 65 74 20 6f 66 20 63 68 61    /// set of cha
19fd0 6e 67 65 73 20 72 65 70 72 65 73 65 6e 74 65 64  nges represented
19fe0 20 62 79 20 74 68 69 73 20 73 65 73 73 69 6f 6e   by this session
19ff0 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
1a000 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1a010 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1a020 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72  <param name="str
1a030 65 61 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  eam">..        /
1a040 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c  // Upon success,
1a050 20 74 68 65 20 72 61 77 20 62 79 74 65 20 64 61   the raw byte da
1a060 74 61 20 66 6f 72 20 61 6c 6c 20 74 68 65 20 63  ta for all the c
1a070 68 61 6e 67 65 73 20 69 6e 20 74 68 69 73 20 73  hanges in this s
1a080 65 73 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ession..        
1a090 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 77 69 6c  /// instance wil
1a0a0 6c 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20  l be written to 
1a0b0 74 68 69 73 20 3c 73 65 65 20 63 72 65 66 3d 22  this <see cref="
1a0c0 53 74 72 65 61 6d 22 20 2f 3e 2e 0d 0a 20 20 20  Stream" />...   
1a0d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1a0e0 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
1a0f0 63 20 76 6f 69 64 20 43 72 65 61 74 65 43 68 61  c void CreateCha
1a100 6e 67 65 53 65 74 28 0d 0a 20 20 20 20 20 20 20  ngeSet(..       
1a110 20 20 20 20 20 53 74 72 65 61 6d 20 73 74 72 65       Stream stre
1a120 61 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  am..            
1a130 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1a140 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
1a150 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
1a160 20 20 20 20 20 20 20 20 43 68 65 63 6b 48 61 6e          CheckHan
1a170 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dle();....      
1a180 20 20 20 20 20 20 69 66 20 28 73 74 72 65 61 6d        if (stream
1a190 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1a1a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1a1b0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
1a1c0 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 74 72 65  lException("stre
1a1d0 61 6d 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  am");....       
1a1e0 20 20 20 20 20 53 51 4c 69 74 65 53 74 72 65 61       SQLiteStrea
1a1f0 6d 41 64 61 70 74 65 72 20 73 74 72 65 61 6d 41  mAdapter streamA
1a200 64 61 70 74 65 72 20 3d 20 47 65 74 53 74 72 65  dapter = GetStre
1a210 61 6d 41 64 61 70 74 65 72 28 73 74 72 65 61 6d  amAdapter(stream
1a220 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a230 20 20 69 66 20 28 73 74 72 65 61 6d 41 64 61 70    if (streamAdap
1a240 74 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ter == null)..  
1a250 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
1a270 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
1a280 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
1a2a0 75 6c 64 20 6e 6f 74 20 67 65 74 20 6f 72 20 63  uld not get or c
1a2b0 72 65 61 74 65 20 61 64 61 70 74 65 72 20 66 6f  reate adapter fo
1a2c0 72 20 6f 75 74 70 75 74 20 73 74 72 65 61 6d 22  r output stream"
1a2d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1a2e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a2f0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1a300 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
1a310 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1a320 33 73 65 73 73 69 6f 6e 5f 63 68 61 6e 67 65 73  3session_changes
1a330 65 74 5f 73 74 72 6d 28 0d 0a 20 20 20 20 20 20  et_strm(..      
1a340 20 20 20 20 20 20 20 20 20 20 73 65 73 73 69 6f            sessio
1a350 6e 2c 20 73 74 72 65 61 6d 41 64 61 70 74 65 72  n, streamAdapter
1a360 2e 47 65 74 4f 75 74 70 75 74 44 65 6c 65 67 61  .GetOutputDelega
1a370 74 65 28 29 2c 20 49 6e 74 50 74 72 2e 5a 65 72  te(), IntPtr.Zer
1a380 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  o);....         
1a390 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
1a3a0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
1a3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a3c0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
1a3d0 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
1a3e0 22 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f  "sqlite3session_
1a3f0 63 68 61 6e 67 65 73 65 74 5f 73 74 72 6d 22 29  changeset_strm")
1a400 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1a410 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1a460 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1a470 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1a480 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74    /// Attempts t
1a490 6f 20 63 72 65 61 74 65 20 61 6e 64 20 72 65 74  o create and ret
1a4a0 75 72 6e 2c 20 76 69 61 20 3c 70 61 72 61 6d 72  urn, via <paramr
1a4b0 65 66 20 6e 61 6d 65 3d 22 72 61 77 44 61 74 61  ef name="rawData
1a4c0 22 20 2f 3e 2c 20 74 68 65 0d 0a 20 20 20 20 20  " />, the..     
1a4d0 20 20 20 2f 2f 2f 20 73 65 74 20 6f 66 20 63 68     /// set of ch
1a4e0 61 6e 67 65 73 20 72 65 70 72 65 73 65 6e 74 65  anges represente
1a4f0 64 20 62 79 20 74 68 69 73 20 73 65 73 73 69 6f  d by this sessio
1a500 6e 20 69 6e 73 74 61 6e 63 65 20 61 73 20 61 20  n instance as a 
1a510 70 61 74 63 68 20 73 65 74 2e 0d 0a 20 20 20 20  patch set...    
1a520 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1a530 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1a540 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 61 77  <param name="raw
1a550 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20  Data">..        
1a560 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
1a570 2c 20 74 68 69 73 20 77 69 6c 6c 20 63 6f 6e 74  , this will cont
1a580 61 69 6e 20 74 68 65 20 72 61 77 20 62 79 74 65  ain the raw byte
1a590 20 64 61 74 61 20 66 6f 72 20 61 6c 6c 20 74 68   data for all th
1a5a0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
1a5b0 68 61 6e 67 65 73 20 69 6e 20 74 68 69 73 20 73  hanges in this s
1a5c0 65 73 73 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e  ession instance.
1a5d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1a5e0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1a5f0 70 75 62 6c 69 63 20 76 6f 69 64 20 43 72 65 61  public void Crea
1a600 74 65 50 61 74 63 68 53 65 74 28 0d 0a 20 20 20  tePatchSet(..   
1a610 20 20 20 20 20 20 20 20 20 72 65 66 20 62 79 74           ref byt
1a620 65 5b 5d 20 72 61 77 44 61 74 61 0d 0a 20 20 20  e[] rawData..   
1a630 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1a640 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a650 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
1a660 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
1a670 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d   CheckHandle();.
1a680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
1a690 6e 74 50 74 72 20 70 44 61 74 61 20 3d 20 49 6e  ntPtr pData = In
1a6a0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
1a6b0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1a6c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1a6e0 74 20 6e 44 61 74 61 20 3d 20 30 3b 0d 0a 0d 0a  t nData = 0;....
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1a710 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
1a720 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1a730 73 65 73 73 69 6f 6e 5f 70 61 74 63 68 73 65 74  session_patchset
1a740 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a750 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 2c 20         session, 
1a760 72 65 66 20 6e 44 61 74 61 2c 20 72 65 66 20 70  ref nData, ref p
1a770 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data);....      
1a780 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
1a790 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
1a7a0 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
1a7c0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
1a7d0 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69  eption(rc, "sqli
1a7e0 74 65 33 73 65 73 73 69 6f 6e 5f 70 61 74 63 68  te3session_patch
1a7f0 73 65 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  set");....      
1a800 20 20 20 20 20 20 20 20 20 20 72 61 77 44 61 74            rawDat
1a810 61 20 3d 20 53 51 4c 69 74 65 42 79 74 65 73 2e  a = SQLiteBytes.
1a820 46 72 6f 6d 49 6e 74 50 74 72 28 70 44 61 74 61  FromIntPtr(pData
1a830 2c 20 6e 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  , nData);..     
1a840 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1a850 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
1a860 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a880 20 28 70 44 61 74 61 20 21 3d 20 49 6e 74 50 74   (pData != IntPt
1a890 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1a8a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
1a8d0 65 55 6e 74 72 61 63 6b 65 64 28 70 44 61 74 61  eUntracked(pData
1a8e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1a8f0 20 20 20 20 20 20 20 20 70 44 61 74 61 20 3d 20          pData = 
1a900 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a920 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1a930 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a940 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a990 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1a9a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1a9b0 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 63  // Attempts to c
1a9c0 72 65 61 74 65 20 61 6e 64 20 77 72 69 74 65 2c  reate and write,
1a9d0 20 76 69 61 20 3c 70 61 72 61 6d 72 65 66 20 6e   via <paramref n
1a9e0 61 6d 65 3d 22 73 74 72 65 61 6d 22 20 2f 3e 2c  ame="stream" />,
1a9f0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1aa00 2f 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73  / set of changes
1aa10 20 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20   represented by 
1aa20 74 68 69 73 20 73 65 73 73 69 6f 6e 20 69 6e 73  this session ins
1aa30 74 61 6e 63 65 20 61 73 20 61 20 70 61 74 63 68  tance as a patch
1aa40 20 73 65 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f   set...        /
1aa50 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1aa60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1aa70 6d 20 6e 61 6d 65 3d 22 73 74 72 65 61 6d 22 3e  m name="stream">
1aa80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
1aa90 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20  on success, the 
1aaa0 72 61 77 20 62 79 74 65 20 64 61 74 61 20 66 6f  raw byte data fo
1aab0 72 20 61 6c 6c 20 74 68 65 20 63 68 61 6e 67 65  r all the change
1aac0 73 20 69 6e 20 74 68 69 73 20 73 65 73 73 69 6f  s in this sessio
1aad0 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  n..        /// i
1aae0 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20 62 65 20  nstance will be 
1aaf0 77 72 69 74 74 65 6e 20 74 6f 20 74 68 69 73 20  written to this 
1ab00 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 65 61  <see cref="Strea
1ab10 6d 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20  m" />...        
1ab20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1ab30 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
1ab40 64 20 43 72 65 61 74 65 50 61 74 63 68 53 65 74  d CreatePatchSet
1ab50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1ab60 74 72 65 61 6d 20 73 74 72 65 61 6d 0d 0a 20 20  tream stream..  
1ab70 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1ab80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ab90 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
1aba0 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
1abb0 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b    CheckHandle();
1abc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1abd0 69 66 20 28 73 74 72 65 61 6d 20 3d 3d 20 6e 75  if (stream == nu
1abe0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1abf0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
1ac00 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
1ac10 74 69 6f 6e 28 22 73 74 72 65 61 6d 22 29 3b 0d  tion("stream");.
1ac20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
1ac30 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74  QLiteStreamAdapt
1ac40 65 72 20 73 74 72 65 61 6d 41 64 61 70 74 65 72  er streamAdapter
1ac50 20 3d 20 47 65 74 53 74 72 65 61 6d 41 64 61 70   = GetStreamAdap
1ac60 74 65 72 28 73 74 72 65 61 6d 29 3b 0d 0a 0d 0a  ter(stream);....
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ac80 73 74 72 65 61 6d 41 64 61 70 74 65 72 20 3d 3d  streamAdapter ==
1ac90 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1aca0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1acb0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
1acc0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
1acd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ace0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
1acf0 74 20 67 65 74 20 6f 72 20 63 72 65 61 74 65 20  t get or create 
1ad00 61 64 61 70 74 65 72 20 66 6f 72 20 6f 75 74 70  adapter for outp
1ad10 75 74 20 73 74 72 65 61 6d 22 29 3b 0d 0a 20 20  ut stream");..  
1ad20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ad30 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1ad40 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
1ad50 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1ad60 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73 69  ods.sqlite3sessi
1ad70 6f 6e 5f 70 61 74 63 68 73 65 74 5f 73 74 72 6d  on_patchset_strm
1ad80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ad90 20 20 20 73 65 73 73 69 6f 6e 2c 20 73 74 72 65     session, stre
1ada0 61 6d 41 64 61 70 74 65 72 2e 47 65 74 4f 75 74  amAdapter.GetOut
1adb0 70 75 74 44 65 6c 65 67 61 74 65 28 29 2c 20 49  putDelegate(), I
1adc0 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
1add0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ade0 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
1adf0 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
1ae00 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1ae10 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
1ae20 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69 74 65  tion(rc, "sqlite
1ae30 33 73 65 73 73 69 6f 6e 5f 70 61 74 63 68 73 65  3session_patchse
1ae40 74 5f 73 74 72 6d 22 29 3b 0d 0a 20 20 20 20 20  t_strm");..     
1ae50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ae60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aea0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1aeb0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1aec0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1aed0 69 73 20 6d 65 74 68 6f 64 20 6c 6f 61 64 73 20  is method loads 
1aee0 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 73 20  the differences 
1aef0 62 65 74 77 65 65 6e 20 74 77 6f 20 74 61 62 6c  between two tabl
1af00 65 73 20 5b 77 69 74 68 20 74 68 65 20 73 61 6d  es [with the sam
1af10 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e  e..        /// n
1af20 61 6d 65 2c 20 73 65 74 20 6f 66 20 63 6f 6c 75  ame, set of colu
1af30 6d 6e 73 2c 20 61 6e 64 20 70 72 69 6d 61 72 79  mns, and primary
1af40 20 6b 65 79 20 64 65 66 69 6e 69 74 69 6f 6e 5d   key definition]
1af50 20 69 6e 74 6f 20 74 68 69 73 20 73 65 73 73 69   into this sessi
1af60 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  on..        /// 
1af70 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
1af80 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1af90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1afa0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 72 6f 6d  param name="from
1afb0 44 61 74 61 62 61 73 65 4e 61 6d 65 22 3e 0d 0a  DatabaseName">..
1afc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1afd0 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  name of the data
1afe0 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  base containing 
1aff0 74 68 65 20 74 61 62 6c 65 20 77 69 74 68 20 74  the table with t
1b000 68 65 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20  he original..   
1b010 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 20 28 69       /// data (i
1b020 2e 65 2e 20 69 74 20 77 69 6c 6c 20 6e 65 65 64  .e. it will need
1b030 20 75 70 64 61 74 69 6e 67 20 69 6e 20 6f 72 64   updating in ord
1b040 65 72 20 74 6f 20 62 65 20 69 64 65 6e 74 69 63  er to be identic
1b050 61 6c 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  al to the..     
1b060 20 20 20 2f 2f 2f 20 6f 6e 65 20 77 69 74 68 69     /// one withi
1b070 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
1b080 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
1b090 68 69 73 20 73 65 73 73 69 6f 6e 20 69 6e 73 74  his session inst
1b0a0 61 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20 20 20  ance)...        
1b0b0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b0c0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1b0d0 20 6e 61 6d 65 3d 22 74 61 62 6c 65 4e 61 6d 65   name="tableName
1b0e0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1b0f0 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
1b100 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1b110 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b120 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
1b130 64 20 4c 6f 61 64 44 69 66 66 65 72 65 6e 63 65  d LoadDifference
1b140 73 46 72 6f 6d 54 61 62 6c 65 28 0d 0a 20 20 20  sFromTable(..   
1b150 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b160 66 72 6f 6d 44 61 74 61 62 61 73 65 4e 61 6d 65  fromDatabaseName
1b170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1b180 74 72 69 6e 67 20 74 61 62 6c 65 4e 61 6d 65 0d  tring tableName.
1b190 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1b1a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b1b0 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
1b1c0 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
1b1d0 20 20 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65       CheckHandle
1b1e0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1b1f0 20 20 20 69 66 20 28 66 72 6f 6d 44 61 74 61 62     if (fromDatab
1b200 61 73 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  aseName == null)
1b210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b220 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
1b230 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
1b240 6e 28 22 66 72 6f 6d 44 61 74 61 62 61 73 65 4e  n("fromDatabaseN
1b250 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
1b260 20 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 4e        if (tableN
1b270 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame == null)..  
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b290 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1b2a0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 74  NullException("t
1b2b0 61 62 6c 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  ableName");.... 
1b2c0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1b2d0 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74  r pError = IntPt
1b2e0 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
1b2f0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
1b300 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b310 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1b320 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
1b330 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1b340 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73 69  ods.sqlite3sessi
1b350 6f 6e 5f 64 69 66 66 28 0d 0a 20 20 20 20 20 20  on_diff(..      
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1b370 73 73 69 6f 6e 2c 20 53 51 4c 69 74 65 53 74 72  ssion, SQLiteStr
1b380 69 6e 67 2e 47 65 74 55 74 66 38 42 79 74 65 73  ing.GetUtf8Bytes
1b390 46 72 6f 6d 53 74 72 69 6e 67 28 66 72 6f 6d 44  FromString(fromD
1b3a0 61 74 61 62 61 73 65 4e 61 6d 65 29 2c 0d 0a 20  atabaseName),.. 
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e     SQLiteString.
1b3d0 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d  GetUtf8BytesFrom
1b3e0 53 74 72 69 6e 67 28 74 61 62 6c 65 4e 61 6d 65  String(tableName
1b3f0 29 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d  ), ref pError);.
1b400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b410 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
1b420 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
1b430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b440 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b450 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b460 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  error = null;...
1b470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b480 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72 20       if (pError 
1b490 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
1b4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b4b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 65 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74  error = SQLiteSt
1b4e0 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55  ring.StringFromU
1b4f0 74 66 38 49 6e 74 50 74 72 28 70 45 72 72 6f 72  tf8IntPtr(pError
1b500 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1b520 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
1b530 4f 72 45 6d 70 74 79 28 65 72 72 6f 72 29 29 0d  OrEmpty(error)).
1b540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b550 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b570 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1b580 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
1b590 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
1b5c0 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
1b5d0 43 75 6c 74 75 72 65 2c 20 22 3a 20 7b 30 7d 22  Culture, ": {0}"
1b5e0 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  , error);..     
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b600 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1b610 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
1b640 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c  iteException(rc,
1b650 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53   HelperMethods.S
1b660 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
1b690 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
1b6a0 2c 20 22 7b 30 7d 7b 31 7d 22 2c 0d 0a 20 20 20  , "{0}{1}",..   
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6c0 20 20 20 20 20 22 73 71 6c 69 74 65 33 73 65 73       "sqlite3ses
1b6d0 73 69 6f 6e 5f 64 69 66 66 22 2c 20 65 72 72 6f  sion_diff", erro
1b6e0 72 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r));..          
1b6f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1b700 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b710 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
1b720 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b730 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b740 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72  pError != IntPtr
1b750 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1b760 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1b780 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
1b790 55 6e 74 72 61 63 6b 65 64 28 70 45 72 72 6f 72  Untracked(pError
1b7a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1b7b0 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d          pError =
1b7c0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b7f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1b800 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1b810 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1b820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b860 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1b870 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
1b880 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65   "Pattern" Membe
1b890 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
1b8a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1b8b0 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
1b8c0 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  if this object i
1b8d0 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e  nstance has been
1b8e0 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
1b8f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1b900 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
1b910 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
1b920 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d;....        //
1b930 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1b940 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20       /// Throws 
1b950 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20  an exception if 
1b960 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
1b970 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69  ance has been di
1b980 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  sposed...       
1b990 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1b9a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1b9b0 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
1b9c0 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
1b9d0 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  /..        {..#i
1b9e0 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
1b9f0 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  SED..           
1ba00 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a   if (disposed)..
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
1ba30 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
1ba40 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 53  n(typeof(SQLiteS
1ba50 65 73 73 69 6f 6e 29 2e 4e 61 6d 65 29 3b 0d 0a  ession).Name);..
1ba60 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
1ba70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1ba80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1baa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bac0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1bad0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1bae0 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f         /// Dispo
1baf0 73 65 73 20 6f 72 20 66 69 6e 61 6c 69 7a 65 73  ses or finalizes
1bb00 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
1bb10 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
1bb20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1bb30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1bb40 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69  am name="disposi
1bb50 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ng">..        //
1bb60 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
1bb70 69 73 20 6f 62 6a 65 63 74 20 69 73 20 62 65 69  is object is bei
1bb80 6e 67 20 64 69 73 70 6f 73 65 64 3b 20 6f 74 68  ng disposed; oth
1bb90 65 72 77 69 73 65 2c 20 74 68 69 73 20 6f 62 6a  erwise, this obj
1bba0 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ect..        ///
1bbb0 20 69 73 20 62 65 69 6e 67 20 66 69 6e 61 6c 69   is being finali
1bbc0 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  zed...        //
1bbd0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1bbe0 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
1bbf0 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
1bc00 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
1bc10 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng)..        {..
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1bc30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc50 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1bc80 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
1bc90 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
1bca0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcc0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1bcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd00 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
1bd10 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
1bd20 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1bd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd80 20 20 69 66 20 28 78 46 69 6c 74 65 72 20 21 3d    if (xFilter !=
1bd90 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdb0 20 20 20 20 78 46 69 6c 74 65 72 20 3d 20 6e 75      xFilter = nu
1bdc0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1bde0 66 20 28 73 74 72 65 61 6d 4d 61 6e 61 67 65 72  f (streamManager
1bdf0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be30 20 20 73 74 72 65 61 6d 4d 61 6e 61 67 65 72 2e    streamManager.
1be40 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 20 20 20 20 73 74 72 65 61 6d 4d 61          streamMa
1be70 6e 61 67 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  nager = null;.. 
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1beb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bec0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
1bf10 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1bf20 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1bf80 28 73 65 73 73 69 6f 6e 20 21 3d 20 49 6e 74 50  (session != IntP
1bf90 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1bfb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bfc0 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
1bfd0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1bfe0 69 74 65 33 73 65 73 73 69 6f 6e 5f 64 65 6c 65  ite3session_dele
1bff0 74 65 28 73 65 73 73 69 6f 6e 29 3b 0d 0a 20 20  te(session);..  
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c010 20 20 20 20 20 20 73 65 73 73 69 6f 6e 20 3d 20        session = 
1c020 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1c050 20 20 20 20 20 20 20 20 20 20 20 55 6e 6c 6f 63             Unloc
1c060 6b 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k();..          
1c070 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c080 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c090 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
1c0a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65              base
1c0c0 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f 73 69  .Dispose(disposi
1c0d0 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
1c0e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1c100 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20  OTE: Everything 
1c110 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20  should be fully 
1c120 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73  disposed at this
1c130 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20   point...       
1c140 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
1c160 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
1c170 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1c180 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c190 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
1c1a0 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
1c1b0 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
1c1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c200 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
1c210 67 69 6f 6e 20 53 51 4c 69 74 65 43 68 61 6e 67  gion SQLiteChang
1c220 65 53 65 74 42 61 73 65 20 43 6c 61 73 73 0d 0a  eSetBase Class..
1c230 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1c240 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
1c250 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
1c260 20 74 68 65 20 61 62 73 74 72 61 63 74 20 63 6f   the abstract co
1c270 6e 63 65 70 74 20 6f 66 20 61 20 73 65 74 20 6f  ncept of a set o
1c280 66 20 63 68 61 6e 67 65 73 2e 20 20 49 74 0d 0a  f changes.  It..
1c290 20 20 20 20 2f 2f 2f 20 61 63 74 73 20 61 73 20      /// acts as 
1c2a0 74 68 65 20 62 61 73 65 20 63 6c 61 73 73 20 66  the base class f
1c2b0 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  or the <see cref
1c2c0 3d 22 53 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68  ="SQLiteMemoryCh
1c2d0 61 6e 67 65 53 65 74 22 20 2f 3e 0d 0a 20 20 20  angeSet" />..   
1c2e0 20 2f 2f 2f 20 61 6e 64 20 3c 73 65 65 20 63 72   /// and <see cr
1c2f0 65 66 3d 22 53 51 4c 69 74 65 53 74 72 65 61 6d  ef="SQLiteStream
1c300 43 68 61 6e 67 65 53 65 74 22 20 2f 3e 20 63 6c  ChangeSet" /> cl
1c310 61 73 73 65 73 2e 20 20 49 74 20 64 65 72 69 76  asses.  It deriv
1c320 65 73 20 66 72 6f 6d 0d 0a 20 20 20 20 2f 2f 2f  es from..    ///
1c330 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
1c340 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1c350 4c 6f 63 6b 22 20 2f 3e 20 63 6c 61 73 73 2c 20  Lock" /> class, 
1c360 77 68 69 63 68 20 69 73 20 75 73 65 64 20 74 6f  which is used to
1c370 20 68 6f 6c 64 0d 0a 20 20 20 20 2f 2f 2f 20 74   hold..    /// t
1c380 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61  he underlying na
1c390 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tive connection 
1c3a0 68 61 6e 64 6c 65 20 6f 70 65 6e 20 75 6e 74 69  handle open unti
1c3b0 6c 20 74 68 65 20 69 6e 73 74 61 6e 63 65 73 20  l the instances 
1c3c0 6f 66 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73  of..    /// this
1c3d0 20 63 6c 61 73 73 20 61 72 65 20 64 69 73 70 6f   class are dispo
1c3e0 73 65 64 20 6f 72 20 66 69 6e 61 6c 69 7a 65 64  sed or finalized
1c3f0 2e 20 20 49 74 20 61 6c 73 6f 20 70 72 6f 76 69  .  It also provi
1c400 64 65 73 20 74 68 65 20 61 62 69 6c 69 74 79 0d  des the ability.
1c410 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 63 6f 6e 73  .    /// to cons
1c420 74 72 75 63 74 20 77 72 61 70 70 65 64 20 6e 61  truct wrapped na
1c430 74 69 76 65 20 64 65 6c 65 67 61 74 65 73 20 6f  tive delegates o
1c440 66 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  f the..    /// <
1c450 73 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65  see cref="Unsafe
1c460 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53  NativeMethods.xS
1c470 65 73 73 69 6f 6e 46 69 6c 74 65 72 22 20 2f 3e  essionFilter" />
1c480 20 61 6e 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   and..    /// <s
1c490 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e  ee cref="UnsafeN
1c4a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65  ativeMethods.xSe
1c4b0 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 22 20 2f  ssionConflict" /
1c4c0 3e 20 74 79 70 65 73 2e 0d 0a 20 20 20 20 2f 2f  > types...    //
1c4d0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1c4e0 20 20 69 6e 74 65 72 6e 61 6c 20 63 6c 61 73 73    internal class
1c4f0 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74   SQLiteChangeSet
1c500 42 61 73 65 20 3a 20 53 51 4c 69 74 65 43 6f 6e  Base : SQLiteCon
1c510 6e 65 63 74 69 6f 6e 4c 6f 63 6b 0d 0a 20 20 20  nectionLock..   
1c520 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
1c530 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
1c540 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
1c550 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1c560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
1c570 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
1c580 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
1c590 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63  s using the spec
1c5a0 69 66 69 65 64 20 77 72 61 70 70 65 64 0d 0a 20  ified wrapped.. 
1c5b0 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76         /// nativ
1c5c0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
1c5d0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dle...        //
1c5e0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1c5f0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1c600 20 6e 61 6d 65 3d 22 68 61 6e 64 6c 65 22 3e 0d   name="handle">.
1c610 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1c620 20 77 72 61 70 70 65 64 20 6e 61 74 69 76 65 20   wrapped native 
1c630 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
1c640 65 20 74 6f 20 62 65 20 61 73 73 6f 63 69 61 74  e to be associat
1c650 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20 20  ed with this..  
1c660 20 20 20 20 20 20 2f 2f 2f 20 63 68 61 6e 67 65        /// change
1c670 20 73 65 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f   set...        /
1c680 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1c690 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1c6a0 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
1c6b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 66         /// The f
1c6c0 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
1c6d0 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74  with the connect
1c6e0 69 6f 6e 20 72 65 70 72 65 73 65 6e 74 65 64 20  ion represented 
1c6f0 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
1c700 2f 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61  /// <paramref na
1c710 6d 65 3d 22 68 61 6e 64 6c 65 22 20 2f 3e 20 76  me="handle" /> v
1c720 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
1c730 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1c740 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51       internal SQ
1c750 4c 69 74 65 43 68 61 6e 67 65 53 65 74 42 61 73  LiteChangeSetBas
1c760 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1c770 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1c780 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 0d 0a  Handle handle,..
1c790 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1c7a0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1c7b0 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  s flags..       
1c7c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1c7d0 20 20 20 20 3a 20 62 61 73 65 28 68 61 6e 64 6c      : base(handl
1c7e0 65 2c 20 66 6c 61 67 73 2c 20 74 72 75 65 29 0d  e, flags, true).
1c7f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1c800 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
1c810 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
1c820 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1c830 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1c840 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c880 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c890 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
1c8a0 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
1c8b0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1c8c0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1c8d0 43 72 65 61 74 65 73 20 61 6e 64 20 72 65 74 75  Creates and retu
1c8e0 72 6e 73 20 61 20 63 6f 6e 63 72 65 74 65 20 69  rns a concrete i
1c8f0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
1c900 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1c910 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1c920 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65 74  LiteChangeSetMet
1c930 61 64 61 74 61 49 74 65 6d 22 20 2f 3e 20 69 6e  adataItem" /> in
1c940 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 20 20  terface...      
1c950 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1c960 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1c970 61 72 61 6d 20 6e 61 6d 65 3d 22 69 74 65 72 61  aram name="itera
1c980 74 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tor">..        /
1c990 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 69 74  // The native it
1c9a0 65 72 61 74 6f 72 20 68 61 6e 64 6c 65 20 74 6f  erator handle to
1c9b0 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
1c9c0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1c9d0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1c9e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1c9f0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1ca00 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
1ca10 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65  QLiteChangeSetMe
1ca20 74 61 64 61 74 61 49 74 65 6d 22 2f 3e 0d 0a 20  tadataItem"/>.. 
1ca30 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72         /// inter
1ca40 66 61 63 65 2c 20 77 68 69 63 68 20 63 61 6e 20  face, which can 
1ca50 62 65 20 75 73 65 64 20 74 6f 20 66 65 74 63 68  be used to fetch
1ca60 20 6d 65 74 61 64 61 74 61 20 61 73 73 6f 63 69   metadata associ
1ca70 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20  ated with..     
1ca80 20 20 20 2f 2f 2f 20 74 68 65 20 63 75 72 72 65     /// the curre
1ca90 6e 74 20 69 74 65 6d 20 69 6e 20 74 68 69 73 20  nt item in this 
1caa0 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 2e 0d  set of changes..
1cab0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1cac0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1cad0 20 70 72 69 76 61 74 65 20 49 53 51 4c 69 74 65   private ISQLite
1cae0 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74  ChangeSetMetadat
1caf0 61 49 74 65 6d 20 43 72 65 61 74 65 4d 65 74 61  aItem CreateMeta
1cb00 64 61 74 61 49 74 65 6d 28 0d 0a 20 20 20 20 20  dataItem(..     
1cb10 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 74         IntPtr it
1cb20 65 72 61 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  erator..        
1cb30 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1cb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1cb50 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 43  turn new SQLiteC
1cb60 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61  hangeSetMetadata
1cb70 49 74 65 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Item(..         
1cb80 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 68 61         SQLiteCha
1cb90 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 2e 41  ngeSetIterator.A
1cba0 74 74 61 63 68 28 69 74 65 72 61 74 6f 72 29 29  ttach(iterator))
1cbb0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1cbc0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1cbd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1cbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1cc30 72 65 67 69 6f 6e 20 50 72 6f 74 65 63 74 65 64  region Protected
1cc40 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
1cc50 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1cc60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74  .        /// Att
1cc70 65 6d 70 74 73 20 74 6f 20 63 72 65 61 74 65 20  empts to create 
1cc80 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
1cc90 73 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65  see cref="Unsafe
1cca0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53  NativeMethods.xS
1ccb0 65 73 73 69 6f 6e 46 69 6c 74 65 72 22 20 2f 3e  essionFilter" />
1ccc0 20 6e 61 74 69 76 65 20 64 65 6c 65 67 61 74 65   native delegate
1ccd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1cce0 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 73  at invokes the s
1ccf0 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20  pecified..      
1cd00 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1cd10 22 53 65 73 73 69 6f 6e 54 61 62 6c 65 46 69 6c  "SessionTableFil
1cd20 74 65 72 43 61 6c 6c 62 61 63 6b 22 20 2f 3e 20  terCallback" /> 
1cd30 64 65 6c 65 67 61 74 65 2e 0d 0a 20 20 20 20 20  delegate...     
1cd40 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1cd50 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1cd60 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
1cd70 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 22  eFilterCallback"
1cd80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1cd90 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 65  he <see cref="Se
1cda0 73 73 69 6f 6e 54 61 62 6c 65 46 69 6c 74 65 72  ssionTableFilter
1cdb0 43 61 6c 6c 62 61 63 6b 22 20 2f 3e 20 74 6f 20  Callback" /> to 
1cdc0 69 6e 76 6f 6b 65 20 77 68 65 6e 20 74 68 65 0d  invoke when the.
1cdd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
1cde0 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61  e cref="UnsafeNa
1cdf0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65 73  tiveMethods.xSes
1ce00 73 69 6f 6e 46 69 6c 74 65 72 22 20 2f 3e 20 6e  sionFilter" /> n
1ce10 61 74 69 76 65 20 64 65 6c 65 67 61 74 65 0d 0a  ative delegate..
1ce20 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 63          /// is c
1ce30 61 6c 6c 65 64 2e 20 20 49 66 20 74 68 69 73 20  alled.  If this 
1ce40 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 20 74 68  value is null th
1ce50 65 6e 20 6e 75 6c 6c 20 69 73 20 72 65 74 75 72  en null is retur
1ce60 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ned...        //
1ce70 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1ce80 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1ce90 61 6d 65 3d 22 63 6c 69 65 6e 74 44 61 74 61 22  ame="clientData"
1cea0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1ceb0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 61 70 70 6c  he optional appl
1cec0 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
1ced0 63 6f 6e 74 65 78 74 20 64 61 74 61 2e 20 20 54  context data.  T
1cee0 68 69 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65  his value may be
1cef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
1cf00 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ll...        ///
1cf10 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1cf20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1cf30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1cf40 65 20 63 72 65 61 74 65 64 20 3c 73 65 65 20 63  e created <see c
1cf50 72 65 66 3d 22 55 6e 73 61 66 65 4e 61 74 69 76  ref="UnsafeNativ
1cf60 65 4d 65 74 68 6f 64 73 2e 78 53 65 73 73 69 6f  eMethods.xSessio
1cf70 6e 46 69 6c 74 65 72 22 20 2f 3e 0d 0a 20 20 20  nFilter" />..   
1cf80 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20       /// native 
1cf90 64 65 6c 65 67 61 74 65 20 2d 4f 52 2d 20 6e 75  delegate -OR- nu
1cfa0 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20  ll if it cannot 
1cfb0 62 65 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20  be created...   
1cfc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1cfd0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  ns>..        pro
1cfe0 74 65 63 74 65 64 20 55 6e 73 61 66 65 4e 61 74  tected UnsafeNat
1cff0 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65 73 73  iveMethods.xSess
1d000 69 6f 6e 46 69 6c 74 65 72 20 47 65 74 44 65 6c  ionFilter GetDel
1d010 65 67 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  egate(..        
1d020 20 20 20 20 53 65 73 73 69 6f 6e 54 61 62 6c 65      SessionTable
1d030 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 20 74  FilterCallback t
1d040 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61  ableFilterCallba
1d050 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1d060 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
1d070 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
1d080 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1d090 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61            if (ta
1d0a0 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63  bleFilterCallbac
1d0b0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d0d0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
1d0e0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
1d0f0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65 73  tiveMethods.xSes
1d100 73 69 6f 6e 46 69 6c 74 65 72 20 78 46 69 6c 74  sionFilter xFilt
1d110 65 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  er;....         
1d120 20 20 20 78 46 69 6c 74 65 72 20 3d 20 6e 65 77     xFilter = new
1d130 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1d140 68 6f 64 73 2e 78 53 65 73 73 69 6f 6e 46 69 6c  hods.xSessionFil
1d150 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
1d160 20 20 20 20 20 20 64 65 6c 65 67 61 74 65 28 49        delegate(I
1d170 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 49  ntPtr context, I
1d180 6e 74 50 74 72 20 70 54 62 6c 4e 61 6d 65 29 0d  ntPtr pTblName).
1d190 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1d1c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1d1e0 6e 67 20 6e 61 6d 65 20 3d 20 53 51 4c 69 74 65  ng name = SQLite
1d1f0 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f  String.StringFro
1d200 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
1d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d220 20 20 20 20 20 20 70 54 62 6c 4e 61 6d 65 29 3b        pTblName);
1d230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d240 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1d250 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61  ableFilterCallba
1d260 63 6b 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 6e  ck(clientData, n
1d270 61 6d 65 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 20  ame) ? 1 : 0;.. 
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1d290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d2a0 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1d2b0 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
1d2c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d2e0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1d2f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d310 20 20 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68    if (HelperMeth
1d320 6f 64 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45  ods.LogCallbackE
1d330 78 63 65 70 74 69 6f 6e 73 28 47 65 74 46 6c 61  xceptions(GetFla
1d340 67 73 28 29 29 29 0d 0a 20 20 20 20 20 20 20 20  gs()))..        
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d360 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1d380 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
1d390 61 67 65 28 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  age( /* throw */
1d3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3c0 20 20 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52    SQLiteBase.COR
1d3d0 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20  _E_EXCEPTION,.. 
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
1d400 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
1d410 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d430 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
1d440 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
1d450 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d470 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
1d480 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 45 78 63  ativeMethods.Exc
1d490 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 46 6f 72  eptionMessageFor
1d4a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 20 20 20 20 20 20 22 78 53 65 73 73 69 6f 6e 46        "xSessionF
1d4d0 69 6c 74 65 72 22 2c 20 65 29 29 3b 0d 0a 20 20  ilter", e));..  
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d520 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d550 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
1d560 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d590 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d5a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
1d5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b  .            });
1d5c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d5d0 72 65 74 75 72 6e 20 78 46 69 6c 74 65 72 3b 0d  return xFilter;.
1d5e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1d5f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1d600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d640 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
1d650 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1d660 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
1d670 63 72 65 61 74 65 20 61 0d 0a 20 20 20 20 20 20  create a..      
1d680 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1d690 22 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  "UnsafeNativeMet
1d6a0 68 6f 64 73 2e 78 53 65 73 73 69 6f 6e 43 6f 6e  hods.xSessionCon
1d6b0 66 6c 69 63 74 22 20 2f 3e 20 6e 61 74 69 76 65  flict" /> native
1d6c0 20 64 65 6c 65 67 61 74 65 0d 0a 20 20 20 20 20   delegate..     
1d6d0 20 20 20 2f 2f 2f 20 74 68 61 74 20 69 6e 76 6f     /// that invo
1d6e0 6b 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65  kes the specifie
1d6f0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  d..        /// <
1d700 73 65 65 20 63 72 65 66 3d 22 53 65 73 73 69 6f  see cref="Sessio
1d710 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63  nConflictCallbac
1d720 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74 65 2e 0d  k" /> delegate..
1d730 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
1d740 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1d750 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1d760 3d 22 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61  ="conflictCallba
1d770 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ck">..        //
1d780 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
1d790 22 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74  "SessionConflict
1d7a0 43 61 6c 6c 62 61 63 6b 22 20 2f 3e 20 74 6f 20  Callback" /> to 
1d7b0 69 6e 76 6f 6b 65 20 77 68 65 6e 20 74 68 65 0d  invoke when the.
1d7c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
1d7d0 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61  e cref="UnsafeNa
1d7e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65 73  tiveMethods.xSes
1d7f0 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 22 20 2f 3e  sionConflict" />
1d800 20 6e 61 74 69 76 65 20 64 65 6c 65 67 61 74 65   native delegate
1d810 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 73  ..        /// is
1d820 20 63 61 6c 6c 65 64 2e 20 20 49 66 20 74 68 69   called.  If thi
1d830 73 20 76 61 6c 75 65 20 69 73 20 6e 75 6c 6c 20  s value is null 
1d840 74 68 65 6e 20 6e 75 6c 6c 20 69 73 20 72 65 74  then null is ret
1d850 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  urned...        
1d860 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1d870 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1d880 20 6e 61 6d 65 3d 22 63 6c 69 65 6e 74 44 61 74   name="clientDat
1d890 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  a">..        ///
1d8a0 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 61 70   The optional ap
1d8b0 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
1d8c0 64 20 63 6f 6e 74 65 78 74 20 64 61 74 61 2e 20  d context data. 
1d8d0 20 54 68 69 73 20 76 61 6c 75 65 20 6d 61 79 20   This value may 
1d8e0 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1d8f0 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  null...        /
1d900 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1d910 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1d920 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1d930 54 68 65 20 63 72 65 61 74 65 64 20 3c 73 65 65  The created <see
1d940 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61 74   cref="UnsafeNat
1d950 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65 73 73  iveMethods.xSess
1d960 69 6f 6e 43 6f 6e 66 6c 69 63 74 22 20 2f 3e 0d  ionConflict" />.
1d970 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74  .        /// nat
1d980 69 76 65 20 64 65 6c 65 67 61 74 65 20 2d 4f 52  ive delegate -OR
1d990 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e  - null if it can
1d9a0 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 2e 0d  not be created..
1d9b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1d9c0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1d9d0 20 70 72 6f 74 65 63 74 65 64 20 55 6e 73 61 66   protected Unsaf
1d9e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
1d9f0 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 20  SessionConflict 
1da00 47 65 74 44 65 6c 65 67 61 74 65 28 0d 0a 20 20  GetDelegate(..  
1da10 20 20 20 20 20 20 20 20 20 20 53 65 73 73 69 6f            Sessio
1da20 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63  nConflictCallbac
1da30 6b 20 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61  k conflictCallba
1da40 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1da50 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
1da60 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
1da70 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1da80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1da90 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 20 3d  nflictCallback =
1daa0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1dab0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1dac0 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
1dad0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1dae0 65 4d 65 74 68 6f 64 73 2e 78 53 65 73 73 69 6f  eMethods.xSessio
1daf0 6e 43 6f 6e 66 6c 69 63 74 20 78 43 6f 6e 66 6c  nConflict xConfl
1db00 69 63 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ict;....        
1db10 20 20 20 20 78 43 6f 6e 66 6c 69 63 74 20 3d 20      xConflict = 
1db20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
1db30 4d 65 74 68 6f 64 73 2e 78 53 65 73 73 69 6f 6e  Methods.xSession
1db40 43 6f 6e 66 6c 69 63 74 28 0d 0a 20 20 20 20 20  Conflict(..     
1db50 20 20 20 20 20 20 20 20 20 20 20 64 65 6c 65 67             deleg
1db60 61 74 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ate(IntPtr conte
1db70 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt,..           
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1db90 4c 69 74 65 43 68 61 6e 67 65 53 65 74 43 6f 6e  LiteChangeSetCon
1dba0 66 6c 69 63 74 54 79 70 65 20 74 79 70 65 2c 0d  flictType type,.
1dbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dbc0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1dbd0 20 69 74 65 72 61 74 6f 72 29 0d 0a 20 20 20 20   iterator)..    
1dbe0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1dbf0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1dc20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 43 68         ISQLiteCh
1dc30 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61 49  angeSetMetadataI
1dc40 74 65 6d 20 69 74 65 6d 20 3d 20 43 72 65 61 74  tem item = Creat
1dc50 65 4d 65 74 61 64 61 74 61 49 74 65 6d 28 0d 0a  eMetadataItem(..
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc70 20 20 20 20 20 20 20 20 69 74 65 72 61 74 6f 72          iterator
1dc80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1dc90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 74            if (it
1dca0 65 6d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  em == null)..   
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1dce0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1dcf0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
1dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd10 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
1dd20 72 65 61 74 65 20 6d 65 74 61 64 61 74 61 20 69  reate metadata i
1dd30 74 65 6d 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  tem");..        
1dd40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1dd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd60 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66       return conf
1dd70 6c 69 63 74 43 61 6c 6c 62 61 63 6b 28 63 6c 69  lictCallback(cli
1dd80 65 6e 74 44 61 74 61 2c 20 74 79 70 65 2c 20 69  entData, type, i
1dd90 74 65 6d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tem);..         
1dda0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1ddb0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
1ddc0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1dde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ddf0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1de10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1de20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 48 65            if (He
1de30 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f 67 43  lperMethods.LogC
1de40 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e  allbackException
1de50 73 28 47 65 74 46 6c 61 67 73 28 29 29 29 0d 0a  s(GetFlags()))..
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de90 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
1dea0 2e 4c 6f 67 4d 65 73 73 61 67 65 28 20 2f 2a 20  .LogMessage( /* 
1deb0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ded0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1dee0 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50  Base.COR_E_EXCEP
1def0 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20  TION,..         
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df10 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74         HelperMet
1df20 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
1df30 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df50 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
1df60 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
1df70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df90 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1dfa0 68 6f 64 73 2e 45 78 63 65 70 74 69 6f 6e 4d 65  hods.ExceptionMe
1dfb0 73 73 61 67 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ssageFormat,..  
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 78                "x
1dfe0 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 22  SessionConflict"
1dff0 2c 20 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  , e));..        
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1e020 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
1e040 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
1e050 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
1e080 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
1e090 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1e0a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0c0 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 68 61  return SQLiteCha
1e0d0 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63 74 52 65  ngeSetConflictRe
1e0e0 73 75 6c 74 2e 41 62 6f 72 74 3b 0d 0a 20 20 20  sult.Abort;..   
1e0f0 20 20 20 20 20 20 20 20 20 7d 29 3b 0d 0a 0d 0a           });....
1e100 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1e110 72 6e 20 78 43 6f 6e 66 6c 69 63 74 3b 0d 0a 20  rn xConflict;.. 
1e120 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1e130 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1e140 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1e190 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1e1a0 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
1e1b0 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
1e1c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1e1d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1e1e0 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
1e1f0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
1e200 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64  tance has been d
1e210 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
1e220 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1e230 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1e240 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
1e250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1e260 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1e270 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e     /// Throws an
1e280 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68   exception if th
1e290 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
1e2a0 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 70  ce has been disp
1e2b0 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  osed...        /
1e2c0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1e2d0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
1e2e0 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
1e2f0 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
1e300 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
1e310 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45  THROW_ON_DISPOSE
1e320 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  D..            i
1e330 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20  f (disposed)..  
1e340 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
1e360 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
1e370 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d  posedException(.
1e380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e390 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
1e3a0 74 65 43 68 61 6e 67 65 53 65 74 42 61 73 65 29  teChangeSetBase)
1e3b0 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  .Name);..       
1e3c0 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
1e3d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e3e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e430 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1e440 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1e450 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 72 20 66  // Disposes or f
1e460 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62  inalizes this ob
1e470 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
1e480 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1e490 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1e4a0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e4b0 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20  "disposing">..  
1e4c0 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
1e4d0 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63  ro if this objec
1e4e0 74 20 69 73 20 62 65 69 6e 67 20 64 69 73 70 6f  t is being dispo
1e4f0 73 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  sed; otherwise, 
1e500 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20  this object..   
1e510 20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69 6e       /// is bein
1e520 67 20 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20 20  g finalized...  
1e530 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1e540 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  m>..        prot
1e550 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 76  ected override v
1e560 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
1e570 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20   disposing)..   
1e580 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e590 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
1e5a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e5b0 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
1e5c0 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
1e5d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e5f0 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e650 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
1e670 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
1e680 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
1e690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e6a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1e6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
1e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e720 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
1e730 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
1e740 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
1e750 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
1e760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e770 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7b0 20 20 20 55 6e 6c 6f 63 6b 28 29 3b 0d 0a 20 20     Unlock();..  
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1e7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
1e7f0 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
1e800 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e810 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65      base.Dispose
1e820 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a  (disposing);....
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e850 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65      // NOTE: Eve
1e860 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64 20 62  rything should b
1e870 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73 65 64  e fully disposed
1e880 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d   at this point..
1e890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e8a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1e8b0 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20       disposed = 
1e8c0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1e8d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1e8e0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1e8f0 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
1e900 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1e910 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e960 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
1e970 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53  iteMemoryChangeS
1e980 65 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  et Class..    //
1e990 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1e9a0 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
1e9b0 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74  represents a set
1e9c0 20 6f 66 20 63 68 61 6e 67 65 73 20 63 6f 6e 74   of changes cont
1e9d0 61 69 6e 65 64 20 65 6e 74 69 72 65 6c 79 20 69  ained entirely i
1e9e0 6e 20 6d 65 6d 6f 72 79 2e 0d 0a 20 20 20 20 2f  n memory...    /
1e9f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1ea00 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c     internal seal
1ea10 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ed class SQLiteM
1ea20 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 20 3a  emoryChangeSet :
1ea30 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1ea40 43 68 61 6e 67 65 53 65 74 42 61 73 65 2c 20 49  ChangeSetBase, I
1ea50 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 0d  SQLiteChangeSet.
1ea60 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1ea70 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
1ea80 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Data..        //
1ea90 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1eaa0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 61 77       /// The raw
1eab0 20 62 79 74 65 20 64 61 74 61 20 66 6f 72 20 74   byte data for t
1eac0 68 69 73 20 73 65 74 20 6f 66 20 63 68 61 6e 67  his set of chang
1ead0 65 73 2e 20 20 53 69 6e 63 65 20 74 68 69 73 20  es.  Since this 
1eae0 64 61 74 61 20 6d 75 73 74 0d 0a 20 20 20 20 20  data must..     
1eaf0 20 20 20 2f 2f 2f 20 62 65 20 6d 61 72 73 68 61     /// be marsha
1eb00 6c 6c 65 64 20 74 6f 20 61 20 6e 61 74 69 76 65  lled to a native
1eb10 20 6d 65 6d 6f 72 79 20 62 75 66 66 65 72 20 62   memory buffer b
1eb20 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64  efore being used
1eb30 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20  , there..       
1eb40 20 2f 2f 2f 20 6d 75 73 74 20 62 65 20 65 6e 6f   /// must be eno
1eb50 75 67 68 20 6d 65 6d 6f 72 79 20 61 76 61 69 6c  ugh memory avail
1eb60 61 62 6c 65 20 74 6f 20 73 74 6f 72 65 20 61 74  able to store at
1eb70 20 6c 65 61 73 74 20 74 77 6f 20 74 69 6d 65 73   least two times
1eb80 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1eb90 2f 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61  / amount of data
1eba0 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
1ebb0 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  n it...        /
1ebc0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1ebd0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
1ebe0 79 74 65 5b 5d 20 72 61 77 44 61 74 61 3b 0d 0a  yte[] rawData;..
1ebf0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1ec00 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1ec10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ec60 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
1ec70 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
1ec80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1ec90 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1eca0 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
1ecb0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1ecc0 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65   class using the
1ecd0 20 73 70 65 63 69 66 69 65 64 20 72 61 77 20 62   specified raw b
1ece0 79 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  yte..        ///
1ecf0 20 64 61 74 61 20 61 6e 64 20 77 72 61 70 70 65   data and wrappe
1ed00 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74  d native connect
1ed10 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20  ion handle...   
1ed20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
1ed30 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1ed40 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 61   <param name="ra
1ed50 77 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20  wData">..       
1ed60 20 2f 2f 2f 20 54 68 65 20 72 61 77 20 62 79 74   /// The raw byt
1ed70 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 73  e data for the s
1ed80 70 65 63 69 66 69 65 64 20 63 68 61 6e 67 65 20  pecified change 
1ed90 73 65 74 20 28 6f 72 20 70 61 74 63 68 20 73 65  set (or patch se
1eda0 74 29 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t)...        ///
1edb0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1edc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1edd0 6d 65 3d 22 68 61 6e 64 6c 65 22 3e 0d 0a 20 20  me="handle">..  
1ede0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 77 72        /// The wr
1edf0 61 70 70 65 64 20 6e 61 74 69 76 65 20 63 6f 6e  apped native con
1ee00 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74  nection handle t
1ee10 6f 20 62 65 20 61 73 73 6f 63 69 61 74 65 64 20  o be associated 
1ee20 77 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20  with this..     
1ee30 20 20 20 2f 2f 2f 20 73 65 74 20 6f 66 20 63 68     /// set of ch
1ee40 61 6e 67 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  anges...        
1ee50 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1ee60 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1ee70 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
1ee80 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1ee90 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  flags associated
1eea0 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65 63   with the connec
1eeb0 74 69 6f 6e 20 72 65 70 72 65 73 65 6e 74 65 64  tion represented
1eec0 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
1eed0 20 2f 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e   /// <paramref n
1eee0 61 6d 65 3d 22 68 61 6e 64 6c 65 22 20 2f 3e 20  ame="handle" /> 
1eef0 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
1ef00 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1ef10 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53        internal S
1ef20 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67  QLiteMemoryChang
1ef30 65 53 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20  eSet(..         
1ef40 20 20 20 62 79 74 65 5b 5d 20 72 61 77 44 61 74     byte[] rawDat
1ef50 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
1ef60 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1ef70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 0d 0a  Handle handle,..
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1ef90 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1efa0 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  s flags..       
1efb0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1efc0 20 20 20 20 3a 20 62 61 73 65 28 68 61 6e 64 6c      : base(handl
1efd0 65 2c 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 20  e, flags)..     
1efe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1eff0 20 20 74 68 69 73 2e 72 61 77 44 61 74 61 20 3d    this.rawData =
1f000 20 72 61 77 44 61 74 61 3b 0d 0a 20 20 20 20 20   rawData;..     
1f010 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1f020 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1f030 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f080 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
1f090 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 20  SQLiteChangeSet 
1f0a0 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
1f0b0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1f0c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1f0d0 20 6d 65 74 68 6f 64 20 22 69 6e 76 65 72 74 73   method "inverts
1f0e0 22 20 74 68 65 20 73 65 74 20 6f 66 20 63 68 61  " the set of cha
1f0f0 6e 67 65 73 20 77 69 74 68 69 6e 20 74 68 69 73  nges within this
1f100 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
1f110 20 20 20 20 2f 2f 2f 20 41 70 70 6c 79 69 6e 67      /// Applying
1f120 20 61 6e 20 69 6e 76 65 72 74 65 64 20 73 65 74   an inverted set
1f130 20 6f 66 20 63 68 61 6e 67 65 73 20 74 6f 20 61   of changes to a
1f140 20 64 61 74 61 62 61 73 65 20 72 65 76 65 72 73   database revers
1f150 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  es the..        
1f160 2f 2f 2f 20 65 66 66 65 63 74 73 20 6f 66 20 61  /// effects of a
1f170 70 70 6c 79 69 6e 67 20 74 68 65 20 75 6e 69 6e  pplying the unin
1f180 76 65 72 74 65 64 20 63 68 61 6e 67 65 73 2e 20  verted changes. 
1f190 20 53 70 65 63 69 66 69 63 61 6c 6c 79 3a 0d 0a   Specifically:..
1f1a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 21 5b 43          /// <![C
1f1b0 44 41 54 41 5b 3c 75 6c 3e 5d 5d 3e 3c 21 5b 43  DATA[<ul>]]><![C
1f1c0 44 41 54 41 5b 3c 6c 69 3e 5d 5d 3e 0d 0a 20 20  DATA[<li>]]>..  
1f1d0 20 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 44        /// Each D
1f1e0 45 4c 45 54 45 20 63 68 61 6e 67 65 20 69 73 20  ELETE change is 
1f1f0 63 68 61 6e 67 65 64 20 74 6f 20 61 6e 20 49 4e  changed to an IN
1f200 53 45 52 54 2c 20 61 6e 64 0d 0a 20 20 20 20 20  SERT, and..     
1f210 20 20 20 2f 2f 2f 20 3c 21 5b 43 44 41 54 41 5b     /// <![CDATA[
1f220 3c 2f 6c 69 3e 5d 5d 3e 3c 21 5b 43 44 41 54 41  </li>]]><![CDATA
1f230 5b 3c 6c 69 3e 5d 5d 3e 0d 0a 20 20 20 20 20 20  [<li>]]>..      
1f240 20 20 2f 2f 2f 20 45 61 63 68 20 49 4e 53 45 52    /// Each INSER
1f250 54 20 63 68 61 6e 67 65 20 69 73 20 63 68 61 6e  T change is chan
1f260 67 65 64 20 74 6f 20 61 20 44 45 4c 45 54 45 2c  ged to a DELETE,
1f270 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f   and..        //
1f280 2f 20 3c 21 5b 43 44 41 54 41 5b 3c 2f 6c 69 3e  / <![CDATA[</li>
1f290 5d 5d 3e 3c 21 5b 43 44 41 54 41 5b 3c 6c 69 3e  ]]><![CDATA[<li>
1f2a0 5d 5d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ]]>..        ///
1f2b0 20 46 6f 72 20 65 61 63 68 20 55 50 44 41 54 45   For each UPDATE
1f2c0 20 63 68 61 6e 67 65 2c 20 74 68 65 20 6f 6c 64   change, the old
1f2d0 2e 2a 20 61 6e 64 20 6e 65 77 2e 2a 20 76 61 6c  .* and new.* val
1f2e0 75 65 73 20 61 72 65 20 65 78 63 68 61 6e 67 65  ues are exchange
1f2f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1f300 3c 21 5b 43 44 41 54 41 5b 3c 2f 6c 69 3e 5d 5d  <![CDATA[</li>]]
1f310 3e 3c 21 5b 43 44 41 54 41 5b 3c 2f 75 6c 3e 5d  ><![CDATA[</ul>]
1f320 5d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ]>..        /// 
1f330 54 68 69 73 20 6d 65 74 68 6f 64 20 64 6f 65 73  This method does
1f340 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
1f350 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 63  order in which c
1f360 68 61 6e 67 65 73 20 61 70 70 65 61 72 0d 0a 20  hanges appear.. 
1f370 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 69         /// withi
1f380 6e 20 74 68 65 20 73 65 74 20 6f 66 20 63 68 61  n the set of cha
1f390 6e 67 65 73 2e 20 49 74 20 6d 65 72 65 6c 79 20  nges. It merely 
1f3a0 72 65 76 65 72 73 65 73 20 74 68 65 20 73 65 6e  reverses the sen
1f3b0 73 65 20 6f 66 20 65 61 63 68 0d 0a 20 20 20 20  se of each..    
1f3c0 20 20 20 20 2f 2f 2f 20 69 6e 64 69 76 69 64 75      /// individu
1f3d0 61 6c 20 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20  al change...    
1f3e0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1f3f0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1f400 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1f410 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c     /// The new <
1f420 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1f430 65 43 68 61 6e 67 65 53 65 74 22 20 2f 3e 20 69  eChangeSet" /> i
1f440 6e 73 74 61 6e 63 65 20 74 68 61 74 20 72 65 70  nstance that rep
1f450 72 65 73 65 6e 74 73 0d 0a 20 20 20 20 20 20 20  resents..       
1f460 20 2f 2f 2f 20 74 68 65 20 72 65 73 75 6c 74 69   /// the resulti
1f470 6e 67 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65  ng set of change
1f480 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
1f490 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1f4a0 20 20 20 20 70 75 62 6c 69 63 20 49 53 51 4c 69      public ISQLi
1f4b0 74 65 43 68 61 6e 67 65 53 65 74 20 49 6e 76 65  teChangeSet Inve
1f4c0 72 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  rt()..        {.
1f4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
1f4e0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
1f4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1f500 69 74 65 53 65 73 73 69 6f 6e 48 65 6c 70 65 72  iteSessionHelper
1f510 73 2e 43 68 65 63 6b 52 61 77 44 61 74 61 28 72  s.CheckRawData(r
1f520 61 77 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20  awData);....    
1f530 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1f540 49 6e 44 61 74 61 20 3d 20 49 6e 74 50 74 72 2e  InData = IntPtr.
1f550 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
1f560 20 20 20 49 6e 74 50 74 72 20 70 4f 75 74 44 61     IntPtr pOutDa
1f570 74 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ta = IntPtr.Zero
1f580 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f590 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1f5a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f5b0 20 20 20 20 20 69 6e 74 20 6e 49 6e 44 61 74 61       int nInData
1f5c0 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
1f5d0 20 20 20 20 20 20 20 20 20 70 49 6e 44 61 74 61           pInData
1f5e0 20 3d 20 53 51 4c 69 74 65 42 79 74 65 73 2e 54   = SQLiteBytes.T
1f5f0 6f 49 6e 74 50 74 72 28 72 61 77 44 61 74 61 2c  oIntPtr(rawData,
1f600 20 72 65 66 20 6e 49 6e 44 61 74 61 29 3b 0d 0a   ref nInData);..
1f610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f620 20 20 69 6e 74 20 6e 4f 75 74 44 61 74 61 20 3d    int nOutData =
1f630 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
1f640 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1f650 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
1f660 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1f670 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74  sqlite3changeset
1f680 5f 69 6e 76 65 72 74 28 0d 0a 20 20 20 20 20 20  _invert(..      
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 49                nI
1f6a0 6e 44 61 74 61 2c 20 70 49 6e 44 61 74 61 2c 20  nData, pInData, 
1f6b0 72 65 66 20 6e 4f 75 74 44 61 74 61 2c 20 72 65  ref nOutData, re
1f6c0 66 20 70 4f 75 74 44 61 74 61 29 3b 0d 0a 0d 0a  f pOutData);....
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6e0 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
1f6f0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f710 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
1f720 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c  iteException(rc,
1f730 20 22 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73   "sqlite3changes
1f740 65 74 5f 69 6e 76 65 72 74 22 29 3b 0d 0a 0d 0a  et_invert");....
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f760 62 79 74 65 5b 5d 20 6e 65 77 44 61 74 61 20 3d  byte[] newData =
1f770 20 53 51 4c 69 74 65 42 79 74 65 73 2e 46 72 6f   SQLiteBytes.Fro
1f780 6d 49 6e 74 50 74 72 28 70 4f 75 74 44 61 74 61  mIntPtr(pOutData
1f790 2c 20 6e 4f 75 74 44 61 74 61 29 3b 0d 0a 0d 0a  , nOutData);....
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7b0 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
1f7c0 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74  eMemoryChangeSet
1f7d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f7e0 20 20 20 20 20 20 20 6e 65 77 44 61 74 61 2c 20         newData, 
1f7f0 47 65 74 48 61 6e 64 6c 65 28 29 2c 20 47 65 74  GetHandle(), Get
1f800 46 6c 61 67 73 28 29 29 3b 0d 0a 20 20 20 20 20  Flags());..     
1f810 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f820 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
1f830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1f850 20 28 70 4f 75 74 44 61 74 61 20 21 3d 20 49 6e   (pOutData != In
1f860 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
1f870 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f890 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
1f8a0 46 72 65 65 55 6e 74 72 61 63 6b 65 64 28 70 4f  FreeUntracked(pO
1f8b0 75 74 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20  utData);..      
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
1f8d0 75 74 44 61 74 61 20 3d 20 49 6e 74 50 74 72 2e  utData = IntPtr.
1f8e0 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
1f8f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f900 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f910 70 49 6e 44 61 74 61 20 21 3d 20 49 6e 74 50 74  pInData != IntPt
1f920 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1f930 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f950 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
1f960 65 28 70 49 6e 44 61 74 61 29 3b 0d 0a 20 20 20  e(pInData);..   
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 70 49 6e 44 61 74 61 20 3d 20 49 6e 74 50 74   pInData = IntPt
1f990 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
1f9a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f9b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f9c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1fa20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1fa30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1fa40 69 73 20 6d 65 74 68 6f 64 20 63 6f 6d 62 69 6e  is method combin
1fa50 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  es the specified
1fa60 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 20   set of changes 
1fa70 77 69 74 68 20 74 68 65 20 6f 6e 65 73 0d 0a 20  with the ones.. 
1fa80 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61         /// conta
1fa90 69 6e 65 64 20 69 6e 20 74 68 69 73 20 69 6e 73  ined in this ins
1faa0 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
1fab0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1fac0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1fad0 61 6d 20 6e 61 6d 65 3d 22 63 68 61 6e 67 65 53  am name="changeS
1fae0 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  et">..        //
1faf0 2f 20 54 68 65 20 63 68 61 6e 67 65 73 20 74 6f  / The changes to
1fb00 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 77 69 74   be combined wit
1fb10 68 20 74 68 6f 73 65 20 69 6e 20 74 68 69 73 20  h those in this 
1fb20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20  instance...     
1fb30 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1fb40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1fb50 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1fb60 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65 65  /// The new <see
1fb70 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 43 68   cref="ISQLiteCh
1fb80 61 6e 67 65 53 65 74 22 20 2f 3e 20 69 6e 73 74  angeSet" /> inst
1fb90 61 6e 63 65 20 74 68 61 74 20 72 65 70 72 65 73  ance that repres
1fba0 65 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ents..        //
1fbb0 2f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  / the resulting 
1fbc0 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 2e 0d  set of changes..
1fbd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1fbe0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1fbf0 20 70 75 62 6c 69 63 20 49 53 51 4c 69 74 65 43   public ISQLiteC
1fc00 68 61 6e 67 65 53 65 74 20 43 6f 6d 62 69 6e 65  hangeSet Combine
1fc10 57 69 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20  With(..         
1fc20 20 20 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65     ISQLiteChange
1fc30 53 65 74 20 63 68 61 6e 67 65 53 65 74 0d 0a 20  Set changeSet.. 
1fc40 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1fc50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fc60 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1fc70 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
1fc80 20 20 20 20 20 53 51 4c 69 74 65 53 65 73 73 69       SQLiteSessi
1fc90 6f 6e 48 65 6c 70 65 72 73 2e 43 68 65 63 6b 52  onHelpers.CheckR
1fca0 61 77 44 61 74 61 28 72 61 77 44 61 74 61 29 3b  awData(rawData);
1fcb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fcc0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e  SQLiteMemoryChan
1fcd0 67 65 53 65 74 20 6d 65 6d 6f 72 79 43 68 61 6e  geSet memoryChan
1fce0 67 65 53 65 74 20 3d 0d 0a 20 20 20 20 20 20 20  geSet =..       
1fcf0 20 20 20 20 20 20 20 20 20 63 68 61 6e 67 65 53           changeS
1fd00 65 74 20 61 73 20 53 51 4c 69 74 65 4d 65 6d 6f  et as SQLiteMemo
1fd10 72 79 43 68 61 6e 67 65 53 65 74 3b 0d 0a 0d 0a  ryChangeSet;....
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1fd30 6d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 20  memoryChangeSet 
1fd40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1fd50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fd60 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1fd70 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
1fd80 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1fd90 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20             "not 
1fda0 61 20 6d 65 6d 6f 72 79 20 62 61 73 65 64 20 63  a memory based c
1fdb0 68 61 6e 67 65 20 73 65 74 22 2c 20 22 63 68 61  hange set", "cha
1fdc0 6e 67 65 53 65 74 22 29 3b 0d 0a 20 20 20 20 20  ngeSet");..     
1fdd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fde0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 65          SQLiteSe
1fdf0 73 73 69 6f 6e 48 65 6c 70 65 72 73 2e 43 68 65  ssionHelpers.Che
1fe00 63 6b 52 61 77 44 61 74 61 28 6d 65 6d 6f 72 79  ckRawData(memory
1fe10 43 68 61 6e 67 65 53 65 74 2e 72 61 77 44 61 74  ChangeSet.rawDat
1fe20 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  a);....         
1fe30 20 20 20 49 6e 74 50 74 72 20 70 49 6e 44 61 74     IntPtr pInDat
1fe40 61 31 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  a1 = IntPtr.Zero
1fe50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
1fe60 6e 74 50 74 72 20 70 49 6e 44 61 74 61 32 20 3d  ntPtr pInData2 =
1fe70 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
1fe80 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1fe90 72 20 70 4f 75 74 44 61 74 61 20 3d 20 49 6e 74  r pOutData = Int
1fea0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
1feb0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1fec0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
1fee0 20 6e 49 6e 44 61 74 61 31 20 3d 20 30 3b 0d 0a   nInData1 = 0;..
1fef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff00 20 20 70 49 6e 44 61 74 61 31 20 3d 20 53 51 4c    pInData1 = SQL
1ff10 69 74 65 42 79 74 65 73 2e 54 6f 49 6e 74 50 74  iteBytes.ToIntPt
1ff20 72 28 72 61 77 44 61 74 61 2c 20 72 65 66 20 6e  r(rawData, ref n
1ff30 49 6e 44 61 74 61 31 29 3b 0d 0a 0d 0a 20 20 20  InData1);....   
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
1ff50 20 6e 49 6e 44 61 74 61 32 20 3d 20 30 3b 0d 0a   nInData2 = 0;..
1ff60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff70 20 20 70 49 6e 44 61 74 61 32 20 3d 20 53 51 4c    pInData2 = SQL
1ff80 69 74 65 42 79 74 65 73 2e 54 6f 49 6e 74 50 74  iteBytes.ToIntPt
1ff90 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
1ffa0 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 43 68          memoryCh
1ffb0 61 6e 67 65 53 65 74 2e 72 61 77 44 61 74 61 2c  angeSet.rawData,
1ffc0 20 72 65 66 20 6e 49 6e 44 61 74 61 32 29 3b 0d   ref nInData2);.
1ffd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ffe0 20 20 20 69 6e 74 20 6e 4f 75 74 44 61 74 61 20     int nOutData 
1fff0 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
20000 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
20010 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
20020 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
20030 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65  .sqlite3changese
20040 74 5f 63 6f 6e 63 61 74 28 0d 0a 20 20 20 20 20  t_concat(..     
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
20060 49 6e 44 61 74 61 31 2c 20 70 49 6e 44 61 74 61  InData1, pInData
20070 31 2c 20 6e 49 6e 44 61 74 61 32 2c 20 70 49 6e  1, nInData2, pIn
20080 44 61 74 61 32 2c 20 72 65 66 20 6e 4f 75 74 44  Data2, ref nOutD
20090 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
200a0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 70 4f            ref pO
200b0 75 74 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20  utData);....    
200c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
200d0 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
200e0 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
200f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20100 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
20110 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71  xception(rc, "sq
20120 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f 63  lite3changeset_c
20130 6f 6e 63 61 74 22 29 3b 0d 0a 0d 0a 20 20 20 20  oncat");....    
20140 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
20150 5b 5d 20 6e 65 77 44 61 74 61 20 3d 20 53 51 4c  [] newData = SQL
20160 69 74 65 42 79 74 65 73 2e 46 72 6f 6d 49 6e 74  iteBytes.FromInt
20170 50 74 72 28 70 4f 75 74 44 61 74 61 2c 20 6e 4f  Ptr(pOutData, nO
20180 75 74 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20  utData);....    
20190 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
201a0 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 4d 65 6d  rn new SQLiteMem
201b0 6f 72 79 43 68 61 6e 67 65 53 65 74 28 0d 0a 20  oryChangeSet(.. 
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201d0 20 20 20 6e 65 77 44 61 74 61 2c 20 47 65 74 48     newData, GetH
201e0 61 6e 64 6c 65 28 29 2c 20 47 65 74 46 6c 61 67  andle(), GetFlag
201f0 73 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  s());..         
20200 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20210 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
20220 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20230 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 4f            if (pO
20240 75 74 44 61 74 61 20 21 3d 20 49 6e 74 50 74 72  utData != IntPtr
20250 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
20260 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
20280 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65  QLiteMemory.Free
20290 55 6e 74 72 61 63 6b 65 64 28 70 4f 75 74 44 61  Untracked(pOutDa
202a0 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta);..          
202b0 20 20 20 20 20 20 20 20 20 20 70 4f 75 74 44 61            pOutDa
202c0 74 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ta = IntPtr.Zero
202d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
202e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
202f0 20 20 20 20 20 20 20 20 69 66 20 28 70 49 6e 44          if (pInD
20300 61 74 61 32 20 21 3d 20 49 6e 74 50 74 72 2e 5a  ata2 != IntPtr.Z
20310 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
20320 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
20340 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
20350 49 6e 44 61 74 61 32 29 3b 0d 0a 20 20 20 20 20  InData2);..     
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
20370 49 6e 44 61 74 61 32 20 3d 20 49 6e 74 50 74 72  InData2 = IntPtr
20380 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
20390 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
203b0 28 70 49 6e 44 61 74 61 31 20 21 3d 20 49 6e 74  (pInData1 != Int
203c0 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
203d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203f0 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
20400 72 65 65 28 70 49 6e 44 61 74 61 31 29 3b 0d 0a  ree(pInData1);..
20410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20420 20 20 20 20 70 49 6e 44 61 74 61 31 20 3d 20 49      pInData1 = I
20430 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20450 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20460 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20470 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
204b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
204c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
204d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
204e0 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 61 70  / Attempts to ap
204f0 70 6c 79 20 74 68 65 20 73 65 74 20 6f 66 20 63  ply the set of c
20500 68 61 6e 67 65 73 20 69 6e 20 74 68 69 73 20 69  hanges in this i
20510 6e 73 74 61 6e 63 65 20 74 6f 20 74 68 65 0d 0a  nstance to the..
20520 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
20530 63 69 61 74 65 64 20 64 61 74 61 62 61 73 65 2e  ciated database.
20540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20550 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
20560 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
20570 65 3d 22 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  e="conflictCallb
20580 61 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ack">..        /
20590 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
205a0 3d 22 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63  ="SessionConflic
205b0 74 43 61 6c 6c 62 61 63 6b 22 20 2f 3e 20 64 65  tCallback" /> de
205c0 6c 65 67 61 74 65 20 74 68 61 74 20 77 69 6c 6c  legate that will
205d0 20 6e 65 65 64 0d 0a 20 20 20 20 20 20 20 20 2f   need..        /
205e0 2f 2f 20 74 6f 20 68 61 6e 64 6c 65 20 61 6e 79  // to handle any
205f0 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 63 68 61   conflicting cha
20600 6e 67 65 73 20 74 68 61 74 20 6d 61 79 20 61 72  nges that may ar
20610 69 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ise...        //
20620 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
20630 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
20640 61 6d 65 3d 22 63 6c 69 65 6e 74 44 61 74 61 22  ame="clientData"
20650 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
20660 68 65 20 6f 70 74 69 6f 6e 61 6c 20 61 70 70 6c  he optional appl
20670 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
20680 63 6f 6e 74 65 78 74 20 64 61 74 61 2e 20 20 54  context data.  T
20690 68 69 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65  his value may be
206a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
206b0 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ll...        ///
206c0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
206d0 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 41     public void A
206e0 70 70 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20  pply(..         
206f0 20 20 20 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69     SessionConfli
20700 63 74 43 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 6c  ctCallback confl
20710 69 63 74 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ictCallback,..  
20720 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
20730 20 63 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20   clientData..   
20740 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
20750 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20760 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
20770 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
20780 20 20 20 41 70 70 6c 79 28 63 6f 6e 66 6c 69 63     Apply(conflic
20790 74 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c  tCallback, null,
207a0 20 63 6c 69 65 6e 74 44 61 74 61 29 3b 0d 0a 20   clientData);.. 
207b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
207c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
207d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20810 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
20820 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
20830 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 61 70  / Attempts to ap
20840 70 6c 79 20 74 68 65 20 73 65 74 20 6f 66 20 63  ply the set of c
20850 68 61 6e 67 65 73 20 69 6e 20 74 68 69 73 20 69  hanges in this i
20860 6e 73 74 61 6e 63 65 20 74 6f 20 74 68 65 0d 0a  nstance to the..
20870 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
20880 63 69 61 74 65 64 20 64 61 74 61 62 61 73 65 2e  ciated database.
20890 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
208a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
208b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
208c0 65 3d 22 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  e="conflictCallb
208d0 61 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ack">..        /
208e0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
208f0 3d 22 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63  ="SessionConflic
20900 74 43 61 6c 6c 62 61 63 6b 22 20 2f 3e 20 64 65  tCallback" /> de
20910 6c 65 67 61 74 65 20 74 68 61 74 20 77 69 6c 6c  legate that will
20920 20 6e 65 65 64 0d 0a 20 20 20 20 20 20 20 20 2f   need..        /
20930 2f 2f 20 74 6f 20 68 61 6e 64 6c 65 20 61 6e 79  // to handle any
20940 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20 63 68 61   conflicting cha
20950 6e 67 65 73 20 74 68 61 74 20 6d 61 79 20 61 72  nges that may ar
20960 69 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ise...        //
20970 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
20980 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
20990 61 6d 65 3d 22 74 61 62 6c 65 46 69 6c 74 65 72  ame="tableFilter
209a0 43 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20  Callback">..    
209b0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 74 69      /// The opti
209c0 6f 6e 61 6c 20 3c 73 65 65 20 63 72 65 66 3d 22  onal <see cref="
209d0 53 65 73 73 69 6f 6e 54 61 62 6c 65 46 69 6c 74  SessionTableFilt
209e0 65 72 43 61 6c 6c 62 61 63 6b 22 20 2f 3e 20 64  erCallback" /> d
209f0 65 6c 65 67 61 74 65 0d 0a 20 20 20 20 20 20 20  elegate..       
20a00 20 2f 2f 2f 20 74 68 61 74 20 63 61 6e 20 62 65   /// that can be
20a10 20 75 73 65 64 20 74 6f 20 66 69 6c 74 65 72 20   used to filter 
20a20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  the list of tabl
20a30 65 73 20 69 6d 70 61 63 74 65 64 20 62 79 20 74  es impacted by t
20a40 68 65 20 73 65 74 0d 0a 20 20 20 20 20 20 20 20  he set..        
20a50 2f 2f 2f 20 6f 66 20 63 68 61 6e 67 65 73 2e 0d  /// of changes..
20a60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
20a70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
20a80 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
20a90 63 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20  clientData">..  
20aa0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70        /// The op
20ab0 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74 69  tional applicati
20ac0 6f 6e 2d 64 65 66 69 6e 65 64 20 63 6f 6e 74 65  on-defined conte
20ad0 78 74 20 64 61 74 61 2e 20 20 54 68 69 73 20 76  xt data.  This v
20ae0 61 6c 75 65 20 6d 61 79 20 62 65 0d 0a 20 20 20  alue may be..   
20af0 20 20 20 20 20 2f 2f 2f 20 6e 75 6c 6c 2e 0d 0a       /// null...
20b00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
20b10 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
20b20 62 6c 69 63 20 76 6f 69 64 20 41 70 70 6c 79 28  blic void Apply(
20b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65  ..            Se
20b40 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c  ssionConflictCal
20b50 6c 62 61 63 6b 20 63 6f 6e 66 6c 69 63 74 43 61  lback conflictCa
20b60 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
20b70 20 20 20 20 20 53 65 73 73 69 6f 6e 54 61 62 6c       SessionTabl
20b80 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 20  eFilterCallback 
20b90 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62  tableFilterCallb
20ba0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
20bb0 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
20bc0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
20bd0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
20be0 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
20bf0 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
20c00 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
20c10 65 53 65 73 73 69 6f 6e 48 65 6c 70 65 72 73 2e  eSessionHelpers.
20c20 43 68 65 63 6b 52 61 77 44 61 74 61 28 72 61 77  CheckRawData(raw
20c30 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data);....      
20c40 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 6c 69        if (confli
20c50 63 74 43 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75  ctCallback == nu
20c60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
20c70 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
20c80 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
20c90 74 69 6f 6e 28 22 63 6f 6e 66 6c 69 63 74 43 61  tion("conflictCa
20ca0 6c 6c 62 61 63 6b 22 29 3b 0d 0a 0d 0a 20 20 20  llback");....   
20cb0 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
20cc0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65  ativeMethods.xSe
20cd0 73 73 69 6f 6e 46 69 6c 74 65 72 20 78 46 69 6c  ssionFilter xFil
20ce0 74 65 72 20 3d 20 47 65 74 44 65 6c 65 67 61 74  ter = GetDelegat
20cf0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
20d00 20 20 20 20 74 61 62 6c 65 46 69 6c 74 65 72 43      tableFilterC
20d10 61 6c 6c 62 61 63 6b 2c 20 63 6c 69 65 6e 74 44  allback, clientD
20d20 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ata);....       
20d30 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
20d40 65 4d 65 74 68 6f 64 73 2e 78 53 65 73 73 69 6f  eMethods.xSessio
20d50 6e 43 6f 6e 66 6c 69 63 74 20 78 43 6f 6e 66 6c  nConflict xConfl
20d60 69 63 74 20 3d 20 47 65 74 44 65 6c 65 67 61 74  ict = GetDelegat
20d70 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
20d80 20 20 20 20 63 6f 6e 66 6c 69 63 74 43 61 6c 6c      conflictCall
20d90 62 61 63 6b 2c 20 63 6c 69 65 6e 74 44 61 74 61  back, clientData
20da0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20db0 20 20 49 6e 74 50 74 72 20 70 44 61 74 61 20 3d    IntPtr pData =
20dc0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
20dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
20de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e00 20 69 6e 74 20 6e 44 61 74 61 20 3d 20 30 3b 0d   int nData = 0;.
20e10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20e20 20 20 20 70 44 61 74 61 20 3d 20 53 51 4c 69 74     pData = SQLit
20e30 65 42 79 74 65 73 2e 54 6f 49 6e 74 50 74 72 28  eBytes.ToIntPtr(
20e40 72 61 77 44 61 74 61 2c 20 72 65 66 20 6e 44 61  rawData, ref nDa
20e50 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ta);....        
20e60 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
20e70 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
20e80 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
20e90 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65  .sqlite3changese
20ea0 74 5f 61 70 70 6c 79 28 0d 0a 20 20 20 20 20 20  t_apply(..      
20eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
20ec0 74 49 6e 74 50 74 72 28 29 2c 20 6e 44 61 74 61  tIntPtr(), nData
20ed0 2c 20 70 44 61 74 61 2c 20 78 46 69 6c 74 65 72  , pData, xFilter
20ee0 2c 20 78 43 6f 6e 66 6c 69 63 74 2c 20 49 6e 74  , xConflict, Int
20ef0 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20  Ptr.Zero);....  
20f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20f10 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
20f20 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
20f50 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 22  eException(rc, "
20f60 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74  sqlite3changeset
20f70 5f 61 70 70 6c 79 22 29 3b 0d 0a 20 20 20 20 20  _apply");..     
20f80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20f90 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
20fa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20fc0 20 28 70 44 61 74 61 20 21 3d 20 49 6e 74 50 74   (pData != IntPt
20fd0 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
20fe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21000 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
21010 65 28 70 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  e(pData);..     
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
21030 44 61 74 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Data = IntPtr.Ze
21040 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
21050 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21060 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
21070 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
21080 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
21090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
210e0 20 20 20 23 72 65 67 69 6f 6e 20 49 45 6e 75 6d     #region IEnum
210f0 65 72 61 62 6c 65 3c 49 53 51 4c 69 74 65 43 68  erable<ISQLiteCh
21100 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61 49  angeSetMetadataI
21110 74 65 6d 3e 20 4d 65 6d 62 65 72 73 0d 0a 20 20  tem> Members..  
21120 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
21130 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
21140 20 43 72 65 61 74 65 73 20 61 6e 20 3c 73 65 65   Creates an <see
21150 20 63 72 65 66 3d 22 49 45 6e 75 6d 65 72 61 74   cref="IEnumerat
21160 6f 72 22 20 2f 3e 20 63 61 70 61 62 6c 65 20 6f  or" /> capable o
21170 66 20 69 74 65 72 61 74 69 6e 67 20 6f 76 65 72  f iterating over
21180 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
21190 2f 20 69 74 65 6d 73 20 77 69 74 68 69 6e 20 74  / items within t
211a0 68 69 73 20 73 65 74 20 6f 66 20 63 68 61 6e 67  his set of chang
211b0 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es...        ///
211c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
211d0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
211e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
211f0 54 68 65 20 6e 65 77 20 3c 73 65 65 20 63 72 65  The new <see cre
21200 66 3d 22 49 45 6e 75 6d 65 72 61 74 6f 72 7b 49  f="IEnumerator{I
21210 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d  SQLiteChangeSetM
21220 65 74 61 64 61 74 61 49 74 65 6d 7d 22 20 2f 3e  etadataItem}" />
21230 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
21240 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
21250 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
21260 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
21270 49 45 6e 75 6d 65 72 61 74 6f 72 3c 49 53 51 4c  IEnumerator<ISQL
21280 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61  iteChangeSetMeta
21290 64 61 74 61 49 74 65 6d 3e 20 47 65 74 45 6e 75  dataItem> GetEnu
212a0 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20 20 20 20  merator()..     
212b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
212c0 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
212d0 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53  iteMemoryChangeS
212e0 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 72 61 77  etEnumerator(raw
212f0 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20  Data);..        
21300 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
21310 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
21320 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21360 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21370 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45 6e 75      #region IEnu
21380 6d 65 72 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  merable Members.
21390 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
213a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
213b0 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 20 3c  /// Creates an <
213c0 73 65 65 20 63 72 65 66 3d 22 49 45 6e 75 6d 65  see cref="IEnume
213d0 72 61 74 6f 72 22 20 2f 3e 20 63 61 70 61 62 6c  rator" /> capabl
213e0 65 20 6f 66 20 69 74 65 72 61 74 69 6e 67 20 6f  e of iterating o
213f0 76 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ver the..       
21400 20 2f 2f 2f 20 69 74 65 6d 73 20 77 69 74 68 69   /// items withi
21410 6e 20 74 68 69 73 20 73 65 74 20 6f 66 20 63 68  n this set of ch
21420 61 6e 67 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  anges...        
21430 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
21440 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
21450 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
21460 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65 65 20  // The new <see 
21470 63 72 65 66 3d 22 49 45 6e 75 6d 65 72 61 74 6f  cref="IEnumerato
21480 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 2e 0d  r" /> instance..
21490 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
214a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
214b0 20 49 45 6e 75 6d 65 72 61 74 6f 72 20 53 79 73   IEnumerator Sys
214c0 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e  tem.Collections.
214d0 49 45 6e 75 6d 65 72 61 62 6c 65 2e 47 65 74 45  IEnumerable.GetE
214e0 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20 20  numerator()..   
214f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21500 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 45 6e      return GetEn
21510 75 6d 65 72 61 74 6f 72 28 29 3b 0d 0a 20 20 20  umerator();..   
21520 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21530 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
21540 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21590 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
215a0 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
215b0 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
215c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
215d0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
215e0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
215f0 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
21600 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  nce has been dis
21610 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
21620 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
21630 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21640 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a  bool disposed;..
21650 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
21660 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
21670 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 65   /// Throws an e
21680 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 69 73  xception if this
21690 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
216a0 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73   has been dispos
216b0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
216c0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
216d0 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
216e0 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
216f0 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
21700 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
21710 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
21720 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
21730 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
21740 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21750 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
21760 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
21770 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21790 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
217a0 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 29  MemoryChangeSet)
217b0 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  .Name);..       
217c0 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
217d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
217e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
217f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21830 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
21840 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
21850 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 72 20 66  // Disposes or f
21860 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62  inalizes this ob
21870 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a  ject instance...
21880 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
21890 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
218a0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
218b0 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20  "disposing">..  
218c0 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
218d0 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63  ro if this objec
218e0 74 20 69 73 20 62 65 69 6e 67 20 64 69 73 70 6f  t is being dispo
218f0 73 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  sed; otherwise, 
21900 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20  this object..   
21910 20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69 6e       /// is bein
21920 67 20 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20 20  g finalized...  
21930 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
21940 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  m>..        prot
21950 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20 76  ected override v
21960 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
21970 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20   disposing)..   
21980 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21990 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
219a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
219b0 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
219c0 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
219d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
219f0 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
21a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a50 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
21a60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
21a70 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
21a80 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
21a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21aa0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21ae0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 61            if (ra
21af0 77 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a  wData != null)..
21b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b10 20 20 20 20 20 20 20 20 20 20 20 20 72 61 77 44              rawD
21b20 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ata = null;..   
21b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21b50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21b90 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
21ba0 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
21bb0 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bf0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
21c00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
21c10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
21c20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
21c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c50 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73  base.Dispose(dis
21c60 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  posing);....    
21c70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
21c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c90 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68  // NOTE: Everyth
21ca0 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75  ing should be fu
21cb0 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74 20  lly disposed at 
21cc0 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20  this point...   
21cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
21ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21cf0 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65   disposed = true
21d00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21d10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
21d20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
21d30 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
21d40 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
21d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21da0 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 53   #region SQLiteS
21db0 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74 20 43  treamChangeSet C
21dc0 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
21dd0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
21de0 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
21df0 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20  esents a set of 
21e00 63 68 61 6e 67 65 73 20 74 68 61 74 20 61 72 65  changes that are
21e10 20 62 61 63 6b 65 64 20 62 79 20 61 0d 0a 20 20   backed by a..  
21e20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
21e30 22 53 74 72 65 61 6d 22 20 2f 3e 20 69 6e 73 74  "Stream" /> inst
21e40 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ance...    /// <
21e50 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
21e60 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
21e70 6c 61 73 73 20 53 51 4c 69 74 65 53 74 72 65 61  lass SQLiteStrea
21e80 6d 43 68 61 6e 67 65 53 65 74 20 3a 0d 0a 20 20  mChangeSet :..  
21e90 20 20 20 20 20 20 53 51 4c 69 74 65 43 68 61 6e        SQLiteChan
21ea0 67 65 53 65 74 42 61 73 65 2c 20 49 53 51 4c 69  geSetBase, ISQLi
21eb0 74 65 43 68 61 6e 67 65 53 65 74 0d 0a 20 20 20  teChangeSet..   
21ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
21ed0 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61  ion Private Data
21ee0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
21ef0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
21f00 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
21f10 65 66 3d 22 53 51 4c 69 74 65 53 74 72 65 61 6d  ef="SQLiteStream
21f20 41 64 61 70 74 65 72 22 20 2f 3e 20 69 6e 73 74  Adapter" /> inst
21f30 61 6e 63 65 20 74 68 61 74 20 69 73 20 6d 61 6e  ance that is man
21f40 61 67 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f  aging..        /
21f50 2f 2f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  // the underlyin
21f60 67 20 69 6e 70 75 74 20 3c 73 65 65 20 63 72 65  g input <see cre
21f70 66 3d 22 53 74 72 65 61 6d 22 20 2f 3e 20 75 73  f="Stream" /> us
21f80 65 64 20 61 73 20 74 68 65 20 62 61 63 6b 69 6e  ed as the backin
21f90 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  g..        /// s
21fa0 74 6f 72 65 20 66 6f 72 20 74 68 65 20 73 65 74  tore for the set
21fb0 20 6f 66 20 63 68 61 6e 67 65 73 20 61 73 73 6f   of changes asso
21fc0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
21fd0 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
21fe0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
21ff0 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
22000 61 74 65 20 53 51 4c 69 74 65 53 74 72 65 61 6d  ate SQLiteStream
22010 41 64 61 70 74 65 72 20 69 6e 70 75 74 53 74 72  Adapter inputStr
22020 65 61 6d 41 64 61 70 74 65 72 3b 0d 0a 0d 0a 20  eamAdapter;.... 
22030 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
22040 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
22050 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
22060 22 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61  "SQLiteStreamAda
22070 70 74 65 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63  pter" /> instanc
22080 65 20 74 68 61 74 20 69 73 20 6d 61 6e 61 67 69  e that is managi
22090 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
220a0 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f  the underlying o
220b0 75 74 70 75 74 20 3c 73 65 65 20 63 72 65 66 3d  utput <see cref=
220c0 22 53 74 72 65 61 6d 22 20 2f 3e 20 75 73 65 64  "Stream" /> used
220d0 20 61 73 20 74 68 65 20 62 61 63 6b 69 6e 67 0d   as the backing.
220e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 6f  .        /// sto
220f0 72 65 20 66 6f 72 20 74 68 65 20 73 65 74 20 6f  re for the set o
22100 66 20 63 68 61 6e 67 65 73 20 67 65 6e 65 72 61  f changes genera
22110 74 65 64 20 62 79 20 74 68 65 20 3c 73 65 65 20  ted by the <see 
22120 63 72 65 66 3d 22 49 6e 76 65 72 74 22 20 2f 3e  cref="Invert" />
22130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 72  ..        /// or
22140 20 3c 73 65 65 20 63 72 65 66 3d 22 43 6f 6d 62   <see cref="Comb
22150 69 6e 65 57 69 74 68 22 20 2f 3e 20 6d 65 74 68  ineWith" /> meth
22160 6f 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ods...        //
22170 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
22180 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
22190 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
221a0 72 20 6f 75 74 70 75 74 53 74 72 65 61 6d 41 64  r outputStreamAd
221b0 61 70 74 65 72 3b 0d 0a 0d 0a 20 20 20 20 20 20  apter;....      
221c0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
221d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
221e0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 65   <see cref="Stre
221f0 61 6d 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20  am" /> instance 
22200 75 73 65 64 20 61 73 20 74 68 65 20 62 61 63 6b  used as the back
22210 69 6e 67 20 73 74 6f 72 65 20 66 6f 72 0d 0a 20  ing store for.. 
22220 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 73         /// the s
22230 65 74 20 6f 66 20 63 68 61 6e 67 65 73 20 61 73  et of changes as
22240 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
22250 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  is instance...  
22260 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
22270 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
22280 69 76 61 74 65 20 53 74 72 65 61 6d 20 69 6e 70  ivate Stream inp
22290 75 74 53 74 72 65 61 6d 3b 0d 0a 0d 0a 20 20 20  utStream;....   
222a0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
222b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
222c0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
222d0 74 72 65 61 6d 22 20 2f 3e 20 69 6e 73 74 61 6e  tream" /> instan
222e0 63 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62  ce used as the b
222f0 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 66 6f 72  acking store for
22300 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
22310 65 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73  e set of changes
22320 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
22330 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 76  e <see cref="Inv
22340 65 72 74 22 20 2f 3e 20 6f 72 0d 0a 20 20 20 20  ert" /> or..    
22350 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
22360 66 3d 22 43 6f 6d 62 69 6e 65 57 69 74 68 22 20  f="CombineWith" 
22370 2f 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  /> methods...   
22380 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
22390 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
223a0 76 61 74 65 20 53 74 72 65 61 6d 20 6f 75 74 70  vate Stream outp
223b0 75 74 53 74 72 65 61 6d 3b 0d 0a 20 20 20 20 20  utStream;..     
223c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
223d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
223e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
22430 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
22440 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
22450 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
22460 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
22470 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
22480 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
22490 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63  s using the spec
224a0 69 66 69 65 64 20 73 74 72 65 61 6d 73 0d 0a 20  ified streams.. 
224b0 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20 77         /// and w
224c0 72 61 70 70 65 64 20 6e 61 74 69 76 65 20 63 6f  rapped native co
224d0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e  nnection handle.
224e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
224f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
22500 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
22510 65 3d 22 69 6e 70 75 74 53 74 72 65 61 6d 22 3e  e="inputStream">
22520 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
22530 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72  e <see cref="Str
22540 65 61 6d 22 20 2f 3e 20 77 68 65 72 65 20 74 68  eam" /> where th
22550 65 20 72 61 77 20 62 79 74 65 20 64 61 74 61 20  e raw byte data 
22560 66 6f 72 20 74 68 65 20 73 65 74 20 6f 66 0d 0a  for the set of..
22570 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 68 61 6e          /// chan
22580 67 65 73 20 6d 61 79 20 62 65 20 72 65 61 64 2e  ges may be read.
22590 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
225a0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
225b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
225c0 22 6f 75 74 70 75 74 53 74 72 65 61 6d 22 3e 0d  "outputStream">.
225d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
225e0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 72 65   <see cref="Stre
225f0 61 6d 22 20 2f 3e 20 77 68 65 72 65 20 74 68 65  am" /> where the
22600 20 72 61 77 20 62 79 74 65 20 64 61 74 61 20 66   raw byte data f
22610 6f 72 20 72 65 73 75 6c 74 69 6e 67 0d 0a 20 20  or resulting..  
22620 20 20 20 20 20 20 2f 2f 2f 20 73 65 74 73 20 6f        /// sets o
22630 66 20 63 68 61 6e 67 65 73 20 6d 61 79 20 62 65  f changes may be
22640 20 77 72 69 74 74 65 6e 2e 0d 0a 20 20 20 20 20   written...     
22650 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
22660 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
22670 72 61 6d 20 6e 61 6d 65 3d 22 68 61 6e 64 6c 65  ram name="handle
22680 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
22690 54 68 65 20 77 72 61 70 70 65 64 20 6e 61 74 69  The wrapped nati
226a0 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ve connection ha
226b0 6e 64 6c 65 20 74 6f 20 62 65 20 61 73 73 6f 63  ndle to be assoc
226c0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d  iated with this.
226d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 65 74  .        /// set
226e0 20 6f 66 20 63 68 61 6e 67 65 73 2e 0d 0a 20 20   of changes...  
226f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
22700 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
22710 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
22720 67 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gs">..        //
22730 2f 20 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f  / The flags asso
22740 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
22750 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 70 72 65  connection repre
22760 73 65 6e 74 65 64 20 62 79 20 74 68 65 0d 0a 20  sented by the.. 
22770 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
22780 6d 72 65 66 20 6e 61 6d 65 3d 22 68 61 6e 64 6c  mref name="handl
22790 65 22 20 2f 3e 20 76 61 6c 75 65 2e 0d 0a 20 20  e" /> value...  
227a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
227b0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  m>..        inte
227c0 72 6e 61 6c 20 53 51 4c 69 74 65 53 74 72 65 61  rnal SQLiteStrea
227d0 6d 43 68 61 6e 67 65 53 65 74 28 0d 0a 20 20 20  mChangeSet(..   
227e0 20 20 20 20 20 20 20 20 20 53 74 72 65 61 6d 20           Stream 
227f0 69 6e 70 75 74 53 74 72 65 61 6d 2c 0d 0a 20 20  inputStream,..  
22800 20 20 20 20 20 20 20 20 20 20 53 74 72 65 61 6d            Stream
22810 20 6f 75 74 70 75 74 53 74 72 65 61 6d 2c 0d 0a   outputStream,..
22820 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
22830 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
22840 6c 65 20 68 61 6e 64 6c 65 2c 0d 0a 20 20 20 20  le handle,..    
22850 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
22860 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
22870 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ags..           
22880 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
22890 3a 20 62 61 73 65 28 68 61 6e 64 6c 65 2c 20 66  : base(handle, f
228a0 6c 61 67 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  lags)..        {
228b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
228c0 69 73 2e 69 6e 70 75 74 53 74 72 65 61 6d 20 3d  is.inputStream =
228d0 20 69 6e 70 75 74 53 74 72 65 61 6d 3b 0d 0a 20   inputStream;.. 
228e0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
228f0 6f 75 74 70 75 74 53 74 72 65 61 6d 20 3d 20 6f  outputStream = o
22900 75 74 70 75 74 53 74 72 65 61 6d 3b 0d 0a 20 20  utputStream;..  
22910 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
22920 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
22930 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22980 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
22990 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64  n Private Method
229a0 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
229b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
229c0 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20    /// Throws an 
229d0 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65  exception if the
229e0 20 69 6e 70 75 74 20 73 74 72 65 61 6d 20 6f 72   input stream or
229f0 20 69 74 73 20 61 73 73 6f 63 69 61 74 65 64 20   its associated 
22a00 73 74 72 65 61 6d 0d 0a 20 20 20 20 20 20 20 20  stream..        
22a10 2f 2f 2f 20 61 64 61 70 74 65 72 20 61 72 65 20  /// adapter are 
22a20 69 6e 76 61 6c 69 64 2e 0d 0a 20 20 20 20 20 20  invalid...      
22a30 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
22a40 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22a50 65 20 76 6f 69 64 20 43 68 65 63 6b 49 6e 70 75  e void CheckInpu
22a60 74 53 74 72 65 61 6d 28 29 0d 0a 20 20 20 20 20  tStream()..     
22a70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22a80 20 20 69 66 20 28 69 6e 70 75 74 53 74 72 65 61    if (inputStrea
22a90 6d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  m == null)..    
22aa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22ab0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
22ac0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
22ad0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
22ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22af0 20 20 20 20 20 22 69 6e 70 75 74 20 73 74 72 65       "input stre
22b00 61 6d 20 75 6e 61 76 61 69 6c 61 62 6c 65 22 29  am unavailable")
22b10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
22b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22b30 69 66 20 28 69 6e 70 75 74 53 74 72 65 61 6d 41  if (inputStreamA
22b40 64 61 70 74 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d  dapter == null).
22b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 69 6e 70 75 74 53 74 72 65 61 6d 41 64 61 70 74  inputStreamAdapt
22b80 65 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  er = new SQLiteS
22b90 74 72 65 61 6d 41 64 61 70 74 65 72 28 0d 0a 20  treamAdapter(.. 
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 20 69 6e 70 75 74 53 74 72 65 61 6d 2c 20     inputStream, 
22bc0 47 65 74 46 6c 61 67 73 28 29 29 3b 0d 0a 20 20  GetFlags());..  
22bd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
22be0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22bf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
22c40 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
22c50 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
22c60 54 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74  Throws an except
22c70 69 6f 6e 20 69 66 20 74 68 65 20 6f 75 74 70 75  ion if the outpu
22c80 74 20 73 74 72 65 61 6d 20 6f 72 20 69 74 73 20  t stream or its 
22c90 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 65 61  associated strea
22ca0 6d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  m..        /// a
22cb0 64 61 70 74 65 72 20 61 72 65 20 69 6e 76 61 6c  dapter are inval
22cc0 69 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  id...        ///
22cd0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
22ce0 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
22cf0 64 20 43 68 65 63 6b 4f 75 74 70 75 74 53 74 72  d CheckOutputStr
22d00 65 61 6d 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  eam()..        {
22d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
22d20 20 28 6f 75 74 70 75 74 53 74 72 65 61 6d 20 3d   (outputStream =
22d30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
22d40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22d50 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
22d60 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
22d70 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
22d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d90 20 20 22 6f 75 74 70 75 74 20 73 74 72 65 61 6d    "output stream
22da0 20 75 6e 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d   unavailable");.
22db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
22dd0 20 28 6f 75 74 70 75 74 53 74 72 65 61 6d 41 64   (outputStreamAd
22de0 61 70 74 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  apter == null)..
22df0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
22e10 75 74 70 75 74 53 74 72 65 61 6d 41 64 61 70 74  utputStreamAdapt
22e20 65 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53  er = new SQLiteS
22e30 74 72 65 61 6d 41 64 61 70 74 65 72 28 0d 0a 20  treamAdapter(.. 
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 6f 75 74 70 75 74 53 74 72 65 61 6d 2c     outputStream,
22e60 20 47 65 74 46 6c 61 67 73 28 29 29 3b 0d 0a 20   GetFlags());.. 
22e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22e80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
22e90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
22ea0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22ef0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
22f00 6e 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53  n ISQLiteChangeS
22f10 65 74 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  et Members..    
22f20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
22f30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
22f40 68 69 73 20 6d 65 74 68 6f 64 20 22 69 6e 76 65  his method "inve
22f50 72 74 73 22 20 74 68 65 20 73 65 74 20 6f 66 20  rts" the set of 
22f60 63 68 61 6e 67 65 73 20 77 69 74 68 69 6e 20 74  changes within t
22f70 68 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  his instance... 
22f80 20 20 20 20 20 20 20 2f 2f 2f 20 41 70 70 6c 79         /// Apply
22f90 69 6e 67 20 61 6e 20 69 6e 76 65 72 74 65 64 20  ing an inverted 
22fa0 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 20 74  set of changes t
22fb0 6f 20 61 20 64 61 74 61 62 61 73 65 20 72 65 76  o a database rev
22fc0 65 72 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20  erses the..     
22fd0 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 73 20 6f     /// effects o
22fe0 66 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 75  f applying the u
22ff0 6e 69 6e 76 65 72 74 65 64 20 63 68 61 6e 67 65  ninverted change
23000 73 2e 20 20 53 70 65 63 69 66 69 63 61 6c 6c 79  s.  Specifically
23010 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  :..        /// <
23020 21 5b 43 44 41 54 41 5b 3c 75 6c 3e 5d 5d 3e 3c  ![CDATA[<ul>]]><
23030 21 5b 43 44 41 54 41 5b 3c 6c 69 3e 5d 5d 3e 0d  ![CDATA[<li>]]>.
23040 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 61 63  .        /// Eac
23050 68 20 44 45 4c 45 54 45 20 63 68 61 6e 67 65 20  h DELETE change 
23060 69 73 20 63 68 61 6e 67 65 64 20 74 6f 20 61 6e  is changed to an
23070 20 49 4e 53 45 52 54 2c 20 61 6e 64 0d 0a 20 20   INSERT, and..  
23080 20 20 20 20 20 20 2f 2f 2f 20 3c 21 5b 43 44 41        /// <![CDA
23090 54 41 5b 3c 2f 6c 69 3e 5d 5d 3e 3c 21 5b 43 44  TA[</li>]]><![CD
230a0 41 54 41 5b 3c 6c 69 3e 5d 5d 3e 0d 0a 20 20 20  ATA[<li>]]>..   
230b0 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 49 4e       /// Each IN
230c0 53 45 52 54 20 63 68 61 6e 67 65 20 69 73 20 63  SERT change is c
230d0 68 61 6e 67 65 64 20 74 6f 20 61 20 44 45 4c 45  hanged to a DELE
230e0 54 45 2c 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  TE, and..       
230f0 20 2f 2f 2f 20 3c 21 5b 43 44 41 54 41 5b 3c 2f   /// <![CDATA[</
23100 6c 69 3e 5d 5d 3e 3c 21 5b 43 44 41 54 41 5b 3c  li>]]><![CDATA[<
23110 6c 69 3e 5d 5d 3e 0d 0a 20 20 20 20 20 20 20 20  li>]]>..        
23120 2f 2f 2f 20 46 6f 72 20 65 61 63 68 20 55 50 44  /// For each UPD
23130 41 54 45 20 63 68 61 6e 67 65 2c 20 74 68 65 20  ATE change, the 
23140 6f 6c 64 2e 2a 20 61 6e 64 20 6e 65 77 2e 2a 20  old.* and new.* 
23150 76 61 6c 75 65 73 20 61 72 65 20 65 78 63 68 61  values are excha
23160 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  nged...        /
23170 2f 2f 20 3c 21 5b 43 44 41 54 41 5b 3c 2f 6c 69  // <![CDATA[</li
23180 3e 5d 5d 3e 3c 21 5b 43 44 41 54 41 5b 3c 2f 75  >]]><![CDATA[</u
23190 6c 3e 5d 5d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  l>]]>..        /
231a0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 64  // This method d
231b0 6f 65 73 20 6e 6f 74 20 63 68 61 6e 67 65 20 74  oes not change t
231c0 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
231d0 68 20 63 68 61 6e 67 65 73 20 61 70 70 65 61 72  h changes appear
231e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
231f0 74 68 69 6e 20 74 68 65 20 73 65 74 20 6f 66 20  thin the set of 
23200 63 68 61 6e 67 65 73 2e 20 49 74 20 6d 65 72 65  changes. It mere
23210 6c 79 20 72 65 76 65 72 73 65 73 20 74 68 65 20  ly reverses the 
23220 73 65 6e 73 65 20 6f 66 20 65 61 63 68 0d 0a 20  sense of each.. 
23230 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 69 76         /// indiv
23240 69 64 75 61 6c 20 63 68 61 6e 67 65 2e 0d 0a 20  idual change... 
23250 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
23260 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
23270 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
23280 20 20 20 20 20 20 2f 2f 2f 20 53 69 6e 63 65 20        /// Since 
23290 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 73 65  the resulting se
232a0 74 20 6f 66 20 63 68 61 6e 67 65 73 20 69 73 20  t of changes is 
232b0 77 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6f  written to the o
232c0 75 74 70 75 74 20 73 74 72 65 61 6d 2c 0d 0a 20  utput stream,.. 
232d0 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20         /// this 
232e0 6d 65 74 68 6f 64 20 61 6c 77 61 79 73 20 72 65  method always re
232f0 74 75 72 6e 73 20 6e 75 6c 6c 2e 0d 0a 20 20 20  turns null...   
23300 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
23310 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
23320 6c 69 63 20 49 53 51 4c 69 74 65 43 68 61 6e 67  lic ISQLiteChang
23330 65 53 65 74 20 49 6e 76 65 72 74 28 29 0d 0a 20  eSet Invert().. 
23340 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23350 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
23360 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
23370 20 20 20 20 43 68 65 63 6b 49 6e 70 75 74 53 74      CheckInputSt
23380 72 65 61 6d 28 29 3b 0d 0a 20 20 20 20 20 20 20  ream();..       
23390 20 20 20 20 20 43 68 65 63 6b 4f 75 74 70 75 74       CheckOutput
233a0 53 74 72 65 61 6d 28 29 3b 0d 0a 0d 0a 20 20 20  Stream();....   
233b0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
233c0 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
233d0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
233e0 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73  s.sqlite3changes
233f0 65 74 5f 69 6e 76 65 72 74 5f 73 74 72 6d 28 0d  et_invert_strm(.
23400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23410 20 69 6e 70 75 74 53 74 72 65 61 6d 41 64 61 70   inputStreamAdap
23420 74 65 72 2e 47 65 74 49 6e 70 75 74 44 65 6c 65  ter.GetInputDele
23430 67 61 74 65 28 29 2c 20 49 6e 74 50 74 72 2e 5a  gate(), IntPtr.Z
23440 65 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ero,..          
23450 20 20 20 20 20 20 6f 75 74 70 75 74 53 74 72 65        outputStre
23460 61 6d 41 64 61 70 74 65 72 2e 47 65 74 4f 75 74  amAdapter.GetOut
23470 70 75 74 44 65 6c 65 67 61 74 65 28 29 2c 20 49  putDelegate(), I
23480 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
23490 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
234a0 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
234b0 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
234c0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
234d0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
234e0 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69 74 65  tion(rc, "sqlite
234f0 33 63 68 61 6e 67 65 73 65 74 5f 69 6e 76 65 72  3changeset_inver
23500 74 5f 73 74 72 6d 22 29 3b 0d 0a 0d 0a 20 20 20  t_strm");....   
23510 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23520 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
23530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23580 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
23590 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
235a0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
235b0 65 74 68 6f 64 20 63 6f 6d 62 69 6e 65 73 20 74  ethod combines t
235c0 68 65 20 73 70 65 63 69 66 69 65 64 20 73 65 74  he specified set
235d0 20 6f 66 20 63 68 61 6e 67 65 73 20 77 69 74 68   of changes with
235e0 20 74 68 65 20 6f 6e 65 73 0d 0a 20 20 20 20 20   the ones..     
235f0 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 65 64     /// contained
23600 20 69 6e 20 74 68 69 73 20 69 6e 73 74 61 6e 63   in this instanc
23610 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
23620 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
23630 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
23640 61 6d 65 3d 22 63 68 61 6e 67 65 53 65 74 22 3e  ame="changeSet">
23650 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
23660 65 20 63 68 61 6e 67 65 73 20 74 6f 20 62 65 20  e changes to be 
23670 63 6f 6d 62 69 6e 65 64 20 77 69 74 68 20 74 68  combined with th
23680 6f 73 65 20 69 6e 20 74 68 69 73 20 69 6e 73 74  ose in this inst
23690 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
236a0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
236b0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
236c0 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
236d0 53 69 6e 63 65 20 74 68 65 20 72 65 73 75 6c 74  Since the result
236e0 69 6e 67 20 73 65 74 20 6f 66 20 63 68 61 6e 67  ing set of chang
236f0 65 73 20 69 73 20 77 72 69 74 74 65 6e 20 74 6f  es is written to
23700 20 74 68 65 20 6f 75 74 70 75 74 20 73 74 72 65   the output stre
23710 61 6d 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am,..        ///
23720 20 74 68 69 73 20 6d 65 74 68 6f 64 20 61 6c 77   this method alw
23730 61 79 73 20 72 65 74 75 72 6e 73 20 6e 75 6c 6c  ays returns null
23740 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
23750 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
23760 20 20 20 70 75 62 6c 69 63 20 49 53 51 4c 69 74     public ISQLit
23770 65 43 68 61 6e 67 65 53 65 74 20 43 6f 6d 62 69  eChangeSet Combi
23780 6e 65 57 69 74 68 28 0d 0a 20 20 20 20 20 20 20  neWith(..       
23790 20 20 20 20 20 49 53 51 4c 69 74 65 43 68 61 6e       ISQLiteChan
237a0 67 65 53 65 74 20 63 68 61 6e 67 65 53 65 74 0d  geSet changeSet.
237b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
237c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
237d0 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
237e0 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
237f0 20 20 20 20 20 43 68 65 63 6b 49 6e 70 75 74 53       CheckInputS
23800 74 72 65 61 6d 28 29 3b 0d 0a 20 20 20 20 20 20  tream();..      
23810 20 20 20 20 20 20 43 68 65 63 6b 4f 75 74 70 75        CheckOutpu
23820 74 53 74 72 65 61 6d 28 29 3b 0d 0a 0d 0a 20 20  tStream();....  
23830 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
23840 53 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74 20  StreamChangeSet 
23850 73 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74 20  streamChangeSet 
23860 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
23870 20 20 20 63 68 61 6e 67 65 53 65 74 20 61 73 20     changeSet as 
23880 53 51 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e  SQLiteStreamChan
23890 67 65 53 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  geSet;....      
238a0 20 20 20 20 20 20 69 66 20 28 73 74 72 65 61 6d        if (stream
238b0 43 68 61 6e 67 65 53 65 74 20 3d 3d 20 6e 75 6c  ChangeSet == nul
238c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
238d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
238e0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
238f0 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
23900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23910 20 20 20 20 20 22 6e 6f 74 20 61 20 73 74 72 65       "not a stre
23920 61 6d 20 62 61 73 65 64 20 63 68 61 6e 67 65 20  am based change 
23930 73 65 74 22 2c 20 22 63 68 61 6e 67 65 53 65 74  set", "changeSet
23940 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
23950 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23960 20 20 73 74 72 65 61 6d 43 68 61 6e 67 65 53 65    streamChangeSe
23970 74 2e 43 68 65 63 6b 49 6e 70 75 74 53 74 72 65  t.CheckInputStre
23980 61 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  am();....       
23990 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
239a0 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65  Code rc = Unsafe
239b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
239c0 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f 63  lite3changeset_c
239d0 6f 6e 63 61 74 5f 73 74 72 6d 28 0d 0a 20 20 20  oncat_strm(..   
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 70               inp
239f0 75 74 53 74 72 65 61 6d 41 64 61 70 74 65 72 2e  utStreamAdapter.
23a00 47 65 74 49 6e 70 75 74 44 65 6c 65 67 61 74 65  GetInputDelegate
23a10 28 29 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c  (), IntPtr.Zero,
23a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a30 20 20 73 74 72 65 61 6d 43 68 61 6e 67 65 53 65    streamChangeSe
23a40 74 2e 69 6e 70 75 74 53 74 72 65 61 6d 41 64 61  t.inputStreamAda
23a50 70 74 65 72 2e 47 65 74 49 6e 70 75 74 44 65 6c  pter.GetInputDel
23a60 65 67 61 74 65 28 29 2c 0d 0a 20 20 20 20 20 20  egate(),..      
23a70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
23a80 2e 5a 65 72 6f 2c 20 6f 75 74 70 75 74 53 74 72  .Zero, outputStr
23a90 65 61 6d 41 64 61 70 74 65 72 2e 47 65 74 4f 75  eamAdapter.GetOu
23aa0 74 70 75 74 44 65 6c 65 67 61 74 65 28 29 2c 0d  tputDelegate(),.
23ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ac0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
23ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
23ae0 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
23af0 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
23b10 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
23b20 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69  eption(rc, "sqli
23b30 74 65 33 63 68 61 6e 67 65 73 65 74 5f 63 6f 6e  te3changeset_con
23b40 63 61 74 5f 73 74 72 6d 22 29 3b 0d 0a 0d 0a 20  cat_strm");.... 
23b50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23b60 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
23b70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
23b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23bd0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23be0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65          /// Atte
23bf0 6d 70 74 73 20 74 6f 20 61 70 70 6c 79 20 74 68  mpts to apply th
23c00 65 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73  e set of changes
23c10 20 69 6e 20 74 68 69 73 20 69 6e 73 74 61 6e 63   in this instanc
23c20 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
23c30 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
23c40 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
23c50 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
23c60 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
23c70 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
23c80 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 22 3e 0d  flictCallback">.
23c90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
23ca0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 65 73 73   <see cref="Sess
23cb0 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  ionConflictCallb
23cc0 61 63 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74 65  ack" /> delegate
23cd0 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 0d   that will need.
23ce0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
23cf0 68 61 6e 64 6c 65 20 61 6e 79 20 63 6f 6e 66 6c  handle any confl
23d00 69 63 74 69 6e 67 20 63 68 61 6e 67 65 73 20 74  icting changes t
23d10 68 61 74 20 6d 61 79 20 61 72 69 73 65 2e 0d 0a  hat may arise...
23d20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
23d30 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
23d40 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
23d50 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20  lientData">..   
23d60 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 74       /// The opt
23d70 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74 69 6f  ional applicatio
23d80 6e 2d 64 65 66 69 6e 65 64 20 63 6f 6e 74 65 78  n-defined contex
23d90 74 20 64 61 74 61 2e 20 20 54 68 69 73 20 76 61  t data.  This va
23da0 6c 75 65 20 6d 61 79 20 62 65 0d 0a 20 20 20 20  lue may be..    
23db0 20 20 20 20 2f 2f 2f 20 6e 75 6c 6c 2e 0d 0a 20      /// null... 
23dc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
23dd0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
23de0 6c 69 63 20 76 6f 69 64 20 41 70 70 6c 79 28 0d  lic void Apply(.
23df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 73  .            Ses
23e00 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c  sionConflictCall
23e10 62 61 63 6b 20 63 6f 6e 66 6c 69 63 74 43 61 6c  back conflictCal
23e20 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
23e30 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
23e40 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
23e50 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
23e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
23e70 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
23e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70  .            App
23e90 6c 79 28 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  ly(conflictCallb
23ea0 61 63 6b 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e  ack, null, clien
23eb0 74 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20  tData);..       
23ec0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
23ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23f20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23f30 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 74 74 65          /// Atte
23f40 6d 70 74 73 20 74 6f 20 61 70 70 6c 79 20 74 68  mpts to apply th
23f50 65 20 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73  e set of changes
23f60 20 69 6e 20 74 68 69 73 20 69 6e 73 74 61 6e 63   in this instanc
23f70 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
23f80 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
23f90 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
23fa0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
23fb0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
23fc0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
23fd0 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 22 3e 0d  flictCallback">.
23fe0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
23ff0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 65 73 73   <see cref="Sess
24000 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  ionConflictCallb
24010 61 63 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74 65  ack" /> delegate
24020 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 0d   that will need.
24030 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
24040 68 61 6e 64 6c 65 20 61 6e 79 20 63 6f 6e 66 6c  handle any confl
24050 69 63 74 69 6e 67 20 63 68 61 6e 67 65 73 20 74  icting changes t
24060 68 61 74 20 6d 61 79 20 61 72 69 73 65 2e 0d 0a  hat may arise...
24070 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
24080 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
24090 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
240a0 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61  ableFilterCallba
240b0 63 6b 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ck">..        //
240c0 2f 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 3c  / The optional <
240d0 73 65 65 20 63 72 65 66 3d 22 53 65 73 73 69 6f  see cref="Sessio
240e0 6e 54 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c  nTableFilterCall
240f0 62 61 63 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74  back" /> delegat
24100 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
24110 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 20  hat can be used 
24120 74 6f 20 66 69 6c 74 65 72 20 74 68 65 20 6c 69  to filter the li
24130 73 74 20 6f 66 20 74 61 62 6c 65 73 20 69 6d 70  st of tables imp
24140 61 63 74 65 64 20 62 79 20 74 68 65 20 73 65 74  acted by the set
24150 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 66  ..        /// of
24160 20 63 68 61 6e 67 65 73 2e 0d 0a 20 20 20 20 20   changes...     
24170 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
24180 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
24190 72 61 6d 20 6e 61 6d 65 3d 22 63 6c 69 65 6e 74  ram name="client
241a0 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20  Data">..        
241b0 2f 2f 2f 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c  /// The optional
241c0 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66   application-def
241d0 69 6e 65 64 20 63 6f 6e 74 65 78 74 20 64 61 74  ined context dat
241e0 61 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 6d  a.  This value m
241f0 61 79 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f  ay be..        /
24200 2f 2f 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  // null...      
24210 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
24220 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
24230 6f 69 64 20 41 70 70 6c 79 28 0d 0a 20 20 20 20  oid Apply(..    
24240 20 20 20 20 20 20 20 20 53 65 73 73 69 6f 6e 43          SessionC
24250 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 20  onflictCallback 
24260 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b  conflictCallback
24270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ,..            S
24280 65 73 73 69 6f 6e 54 61 62 6c 65 46 69 6c 74 65  essionTableFilte
24290 72 43 61 6c 6c 62 61 63 6b 20 74 61 62 6c 65 46  rCallback tableF
242a0 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 2c 0d 0a  ilterCallback,..
242b0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
242c0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 0d 0a 20  ct clientData.. 
242d0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
242e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
242f0 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
24300 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
24310 20 20 20 43 68 65 63 6b 49 6e 70 75 74 53 74 72     CheckInputStr
24320 65 61 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  eam();....      
24330 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 6c 69        if (confli
24340 63 74 43 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75  ctCallback == nu
24350 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
24360 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
24370 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
24380 74 69 6f 6e 28 22 63 6f 6e 66 6c 69 63 74 43 61  tion("conflictCa
24390 6c 6c 62 61 63 6b 22 29 3b 0d 0a 0d 0a 20 20 20  llback");....   
243a0 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
243b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65  ativeMethods.xSe
243c0 73 73 69 6f 6e 46 69 6c 74 65 72 20 78 46 69 6c  ssionFilter xFil
243d0 74 65 72 20 3d 20 47 65 74 44 65 6c 65 67 61 74  ter = GetDelegat
243e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
243f0 20 20 20 20 74 61 62 6c 65 46 69 6c 74 65 72 43      tableFilterC
24400 61 6c 6c 62 61 63 6b 2c 20 63 6c 69 65 6e 74 44  allback, clientD
24410 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ata);....       
24420 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
24430 65 4d 65 74 68 6f 64 73 2e 78 53 65 73 73 69 6f  eMethods.xSessio
24440 6e 43 6f 6e 66 6c 69 63 74 20 78 43 6f 6e 66 6c  nConflict xConfl
24450 69 63 74 20 3d 20 47 65 74 44 65 6c 65 67 61 74  ict = GetDelegat
24460 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
24470 20 20 20 20 63 6f 6e 66 6c 69 63 74 43 61 6c 6c      conflictCall
24480 62 61 63 6b 2c 20 63 6c 69 65 6e 74 44 61 74 61  back, clientData
24490 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
244a0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
244b0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
244c0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
244d0 65 33 63 68 61 6e 67 65 73 65 74 5f 61 70 70 6c  e3changeset_appl
244e0 79 5f 73 74 72 6d 28 0d 0a 20 20 20 20 20 20 20  y_strm(..       
244f0 20 20 20 20 20 20 20 20 20 47 65 74 49 6e 74 50           GetIntP
24500 74 72 28 29 2c 20 69 6e 70 75 74 53 74 72 65 61  tr(), inputStrea
24510 6d 41 64 61 70 74 65 72 2e 47 65 74 49 6e 70 75  mAdapter.GetInpu
24520 74 44 65 6c 65 67 61 74 65 28 29 2c 20 49 6e 74  tDelegate(), Int
24530 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20  Ptr.Zero,..     
24540 20 20 20 20 20 20 20 20 20 20 20 78 46 69 6c 74             xFilt
24550 65 72 2c 20 78 43 6f 6e 66 6c 69 63 74 2c 20 49  er, xConflict, I
24560 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a  ntPtr.Zero);....
24570 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24580 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
24590 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
245a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
245b0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
245c0 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69 74 65  tion(rc, "sqlite
245d0 33 63 68 61 6e 67 65 73 65 74 5f 61 70 70 6c 79  3changeset_apply
245e0 5f 73 74 72 6d 22 29 3b 0d 0a 20 20 20 20 20 20  _strm");..      
245f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
24600 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
24610 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24660 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45        #region IE
24670 6e 75 6d 65 72 61 62 6c 65 3c 49 53 51 4c 69 74  numerable<ISQLit
24680 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61  eChangeSetMetada
24690 74 61 49 74 65 6d 3e 20 4d 65 6d 62 65 72 73 0d  taItem> Members.
246a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
246b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
246c0 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 20 3c  /// Creates an <
246d0 73 65 65 20 63 72 65 66 3d 22 49 45 6e 75 6d 65  see cref="IEnume
246e0 72 61 74 6f 72 22 20 2f 3e 20 63 61 70 61 62 6c  rator" /> capabl
246f0 65 20 6f 66 20 69 74 65 72 61 74 69 6e 67 20 6f  e of iterating o
24700 76 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ver the..       
24710 20 2f 2f 2f 20 69 74 65 6d 73 20 77 69 74 68 69   /// items withi
24720 6e 20 74 68 69 73 20 73 65 74 20 6f 66 20 63 68  n this set of ch
24730 61 6e 67 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  anges...        
24740 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
24750 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
24760 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
24770 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73 65 65 20  // The new <see 
24780 63 72 65 66 3d 22 49 45 6e 75 6d 65 72 61 74 6f  cref="IEnumerato
24790 72 7b 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53  r{ISQLiteChangeS
247a0 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d 7d 22  etMetadataItem}"
247b0 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   />..        ///
247c0 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
247d0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
247e0 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
247f0 69 63 20 49 45 6e 75 6d 65 72 61 74 6f 72 3c 49  ic IEnumerator<I
24800 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d  SQLiteChangeSetM
24810 65 74 61 64 61 74 61 49 74 65 6d 3e 20 47 65 74  etadataItem> Get
24820 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d 0a 20 20  Enumerator()..  
24830 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24840 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
24850 53 51 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e  SQLiteStreamChan
24860 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 28  geSetEnumerator(
24870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24880 20 20 69 6e 70 75 74 53 74 72 65 61 6d 2c 20 47    inputStream, G
24890 65 74 46 6c 61 67 73 28 29 29 3b 0d 0a 20 20 20  etFlags());..   
248a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
248b0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
248c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
248d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24910 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
24920 20 49 45 6e 75 6d 65 72 61 62 6c 65 20 4d 65 6d   IEnumerable Mem
24930 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  bers..        //
24940 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
24950 20 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73       /// Creates
24960 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 49   an <see cref="I
24970 45 6e 75 6d 65 72 61 74 6f 72 22 20 2f 3e 20 63  Enumerator" /> c
24980 61 70 61 62 6c 65 20 6f 66 20 69 74 65 72 61 74  apable of iterat
24990 69 6e 67 20 6f 76 65 72 20 74 68 65 0d 0a 20 20  ing over the..  
249a0 20 20 20 20 20 20 2f 2f 2f 20 69 74 65 6d 73 20        /// items 
249b0 77 69 74 68 69 6e 20 74 68 69 73 20 73 65 74 20  within this set 
249c0 6f 66 20 63 68 61 6e 67 65 73 2e 0d 0a 20 20 20  of changes...   
249d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
249e0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
249f0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
24a00 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20      /// The new 
24a10 3c 73 65 65 20 63 72 65 66 3d 22 49 45 6e 75 6d  <see cref="IEnum
24a20 65 72 61 74 6f 72 22 20 2f 3e 20 69 6e 73 74 61  erator" /> insta
24a30 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
24a40 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
24a50 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61 74 6f        IEnumerato
24a60 72 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74  r System.Collect
24a70 69 6f 6e 73 2e 49 45 6e 75 6d 65 72 61 62 6c 65  ions.IEnumerable
24a80 2e 47 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 29  .GetEnumerator()
24a90 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
24aa0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24ab0 47 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 29 3b  GetEnumerator();
24ac0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
24ad0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
24ae0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b30 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
24b40 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
24b50 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
24b60 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ers..        ///
24b70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
24b80 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
24b90 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   if this object 
24ba0 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65 65  instance has bee
24bb0 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20  n disposed...   
24bc0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
24bd0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
24be0 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
24bf0 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ed;....        /
24c00 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
24c10 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73        /// Throws
24c20 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66   an exception if
24c30 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73   this object ins
24c40 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64  tance has been d
24c50 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
24c60 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
24c70 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24c80 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70  e void CheckDisp
24c90 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20  osed() /* throw 
24ca0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  */..        {..#
24cb0 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50  if THROW_ON_DISP
24cc0 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20  OSED..          
24cd0 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
24ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
24cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d00 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
24d10 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
24d20 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
24d30 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
24d40 51 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67  QLiteStreamChang
24d50 65 53 65 74 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  eSet).Name);..  
24d60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
24d70 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
24d80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
24d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24dd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
24de0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
24df0 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73      /// Disposes
24e00 20 6f 72 20 66 69 6e 61 6c 69 7a 65 73 20 74 68   or finalizes th
24e10 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
24e20 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
24e30 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
24e40 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
24e50 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
24e60 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
24e70 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
24e80 6f 62 6a 65 63 74 20 69 73 20 62 65 69 6e 67 20  object is being 
24e90 64 69 73 70 6f 73 65 64 3b 20 6f 74 68 65 72 77  disposed; otherw
24ea0 69 73 65 2c 20 74 68 69 73 20 6f 62 6a 65 63 74  ise, this object
24eb0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 73  ..        /// is
24ec0 20 62 65 69 6e 67 20 66 69 6e 61 6c 69 7a 65 64   being finalized
24ed0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
24ee0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
24ef0 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72 72   protected overr
24f00 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ide void Dispose
24f10 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
24f20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
24f30 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
24f40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24f60 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e      if (disposin
24fa0 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
24fb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ff0 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61   // dispose mana
25020 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
25030 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25070 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25090 66 20 28 6f 75 74 70 75 74 53 74 72 65 61 6d 41  f (outputStreamA
250a0 64 61 70 74 65 72 20 21 3d 20 6e 75 6c 6c 29 0d  dapter != null).
250b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250e0 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 53 74          outputSt
250f0 72 65 61 6d 41 64 61 70 74 65 72 2e 44 69 73 70  reamAdapter.Disp
25100 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
25110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25120 20 20 20 20 6f 75 74 70 75 74 53 74 72 65 61 6d      outputStream
25130 41 64 61 70 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  Adapter = null;.
25140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25150 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 20 20 20 20 20 20 69 66 20 28 69 6e 70 75 74 53        if (inputS
25180 74 72 65 61 6d 41 64 61 70 74 65 72 20 21 3d 20  treamAdapter != 
25190 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
251b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
251d0 70 75 74 53 74 72 65 61 6d 41 64 61 70 74 65 72  putStreamAdapter
251e0 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25200 20 20 20 20 20 20 20 20 20 69 6e 70 75 74 53 74           inputSt
25210 72 65 61 6d 41 64 61 70 74 65 72 20 3d 20 6e 75  reamAdapter = nu
25220 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25250 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 75            if (ou
25260 74 70 75 74 53 74 72 65 61 6d 20 21 3d 20 6e 75  tputStream != nu
25270 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25290 20 6f 75 74 70 75 74 53 74 72 65 61 6d 20 3d 20   outputStream = 
252a0 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54 20 4f 57 4e  null; /* NOT OWN
252b0 45 44 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ED */....       
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252d0 20 69 66 20 28 69 6e 70 75 74 53 74 72 65 61 6d   if (inputStream
252e0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25300 20 20 20 20 20 20 20 69 6e 70 75 74 53 74 72 65         inputStre
25310 61 6d 20 3d 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f  am = null; /* NO
25320 54 20 4f 57 4e 45 44 20 2a 2f 0d 0a 20 20 20 20  T OWNED */..    
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25340 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25350 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
25360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25390 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
253a0 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
253b0 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
253e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
25400 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25410 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25420 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
25430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
25450 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70  ase.Dispose(disp
25460 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  osing);....     
25470 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25490 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69  / NOTE: Everythi
254a0 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c  ng should be ful
254b0 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74 20 74  ly disposed at t
254c0 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20  his point...    
254d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254f0 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
25500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25510 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
25520 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
25530 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
25540 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
25550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25590 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
255a0 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 43 68  #region SQLiteCh
255b0 61 6e 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f  angeSetEnumerato
255c0 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f  r Class..    ///
255d0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
255e0 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 72  /// This class r
255f0 65 70 72 65 73 65 6e 74 73 20 61 6e 20 3c 73 65  epresents an <se
25600 65 20 63 72 65 66 3d 22 49 45 6e 75 6d 65 72 61  e cref="IEnumera
25610 74 6f 72 22 20 2f 3e 20 74 68 61 74 20 69 73 20  tor" /> that is 
25620 63 61 70 61 62 6c 65 20 6f 66 0d 0a 20 20 20 20  capable of..    
25630 2f 2f 2f 20 65 6e 75 6d 65 72 61 74 69 6e 67 20  /// enumerating 
25640 6f 76 65 72 20 61 20 73 65 74 20 6f 66 20 63 68  over a set of ch
25650 61 6e 67 65 73 2e 20 20 49 74 20 73 65 72 76 65  anges.  It serve
25660 73 20 61 73 20 74 68 65 20 62 61 73 65 20 63 6c  s as the base cl
25670 61 73 73 20 66 6f 72 20 74 68 65 0d 0a 20 20 20  ass for the..   
25680 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
25690 53 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e  SQLiteMemoryChan
256a0 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 22  geSetEnumerator"
256b0 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 2f 2f 2f   /> and..    ///
256c0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
256d0 74 65 53 74 72 65 61 6d 43 68 61 6e 67 65 53 65  teStreamChangeSe
256e0 74 45 6e 75 6d 65 72 61 74 6f 72 22 20 2f 3e 20  tEnumerator" /> 
256f0 63 6c 61 73 73 65 73 2e 20 20 49 74 20 6d 61 6e  classes.  It man
25700 61 67 65 73 20 61 6e 64 0d 0a 20 20 20 20 2f 2f  ages and..    //
25710 2f 20 6f 77 6e 73 20 61 6e 20 69 6e 73 74 61 6e  / owns an instan
25720 63 65 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63  ce of the <see c
25730 72 65 66 3d 22 53 51 4c 69 74 65 43 68 61 6e 67  ref="SQLiteChang
25740 65 53 65 74 49 74 65 72 61 74 6f 72 22 20 2f 3e  eSetIterator" />
25750 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f   class...    ///
25760 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
25770 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
25780 63 74 20 63 6c 61 73 73 20 53 51 4c 69 74 65 43  ct class SQLiteC
25790 68 61 6e 67 65 53 65 74 45 6e 75 6d 65 72 61 74  hangeSetEnumerat
257a0 6f 72 20 3a 0d 0a 20 20 20 20 20 20 20 20 49 45  or :..        IE
257b0 6e 75 6d 65 72 61 74 6f 72 3c 49 53 51 4c 69 74  numerator<ISQLit
257c0 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61  eChangeSetMetada
257d0 74 61 49 74 65 6d 3e 0d 0a 20 20 20 20 7b 0d 0a  taItem>..    {..
257e0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
257f0 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20  Private Data..  
25800 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
25810 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
25820 20 54 68 69 73 20 6d 61 6e 61 67 65 64 20 63 68   This managed ch
25830 61 6e 67 65 20 73 65 74 20 69 74 65 72 61 74 6f  ange set iterato
25840 72 20 69 73 20 6d 61 6e 61 67 65 64 20 61 6e 64  r is managed and
25850 20 6f 77 6e 65 64 20 62 79 20 74 68 69 73 0d 0a   owned by this..
25860 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61 73          /// clas
25870 73 2e 20 20 49 74 20 77 69 6c 6c 20 62 65 20 64  s.  It will be d
25880 69 73 70 6f 73 65 64 20 77 68 65 6e 20 74 68 69  isposed when thi
25890 73 20 63 6c 61 73 73 20 69 73 20 64 69 73 70 6f  s class is dispo
258a0 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
258b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
258c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
258d0 4c 69 74 65 43 68 61 6e 67 65 53 65 74 49 74 65  LiteChangeSetIte
258e0 72 61 74 6f 72 20 69 74 65 72 61 74 6f 72 3b 0d  rator iterator;.
258f0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
25900 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
25910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25950 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25960 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
25970 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
25980 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
25990 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
259a0 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
259b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
259c0 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65   class using the
259d0 20 73 70 65 63 69 66 69 65 64 20 6d 61 6e 61 67   specified manag
259e0 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
259f0 63 68 61 6e 67 65 20 73 65 74 20 69 74 65 72 61  change set itera
25a00 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tor...        //
25a10 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
25a20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
25a30 20 6e 61 6d 65 3d 22 69 74 65 72 61 74 6f 72 22   name="iterator"
25a40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
25a50 68 65 20 6d 61 6e 61 67 65 64 20 69 74 65 72 61  he managed itera
25a60 74 6f 72 20 69 6e 73 74 61 6e 63 65 20 74 6f 20  tor instance to 
25a70 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  use...        //
25a80 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
25a90 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
25aa0 65 43 68 61 6e 67 65 53 65 74 45 6e 75 6d 65 72  eChangeSetEnumer
25ab0 61 74 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ator(..         
25ac0 20 20 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53     SQLiteChangeS
25ad0 65 74 49 74 65 72 61 74 6f 72 20 69 74 65 72 61  etIterator itera
25ae0 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tor..           
25af0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
25b00 20 20 20 20 20 20 20 20 20 20 20 53 65 74 49 74             SetIt
25b10 65 72 61 74 6f 72 28 69 74 65 72 61 74 6f 72 29  erator(iterator)
25b20 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
25b30 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
25b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
25b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
25ba0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d  region Private M
25bb0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
25bc0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
25bd0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77         /// Throw
25be0 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69  s an exception i
25bf0 66 20 74 68 65 20 6d 61 6e 61 67 65 64 20 69 74  f the managed it
25c00 65 72 61 74 6f 72 20 69 6e 73 74 61 6e 63 65 20  erator instance 
25c10 69 73 20 69 6e 76 61 6c 69 64 2e 0d 0a 20 20 20  is invalid...   
25c20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
25c30 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
25c40 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 49  vate void CheckI
25c50 74 65 72 61 74 6f 72 28 29 0d 0a 20 20 20 20 20  terator()..     
25c60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25c70 20 20 69 66 20 28 69 74 65 72 61 74 6f 72 20 3d    if (iterator =
25c80 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25c90 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
25ca0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
25cb0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 69 74  ionException("it
25cc0 65 72 61 74 6f 72 20 75 6e 61 76 61 69 6c 61 62  erator unavailab
25cd0 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  le");....       
25ce0 20 20 20 20 20 69 74 65 72 61 74 6f 72 2e 43 68       iterator.Ch
25cf0 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 20 20  eckHandle();..  
25d00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25d10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25d60 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
25d70 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
25d80 20 53 65 74 73 20 74 68 65 20 6d 61 6e 61 67 65   Sets the manage
25d90 64 20 69 74 65 72 61 74 6f 72 20 69 6e 73 74 61  d iterator insta
25da0 6e 63 65 20 74 6f 20 61 20 6e 65 77 20 76 61 6c  nce to a new val
25db0 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
25dc0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
25dd0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
25de0 6e 61 6d 65 3d 22 69 74 65 72 61 74 6f 72 22 3e  name="iterator">
25df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
25e00 65 20 6e 65 77 20 6d 61 6e 61 67 65 64 20 69 74  e new managed it
25e10 65 72 61 74 6f 72 20 69 6e 73 74 61 6e 63 65 20  erator instance 
25e20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  to use...       
25e30 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
25e40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
25e50 6f 69 64 20 53 65 74 49 74 65 72 61 74 6f 72 28  oid SetIterator(
25e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
25e70 4c 69 74 65 43 68 61 6e 67 65 53 65 74 49 74 65  LiteChangeSetIte
25e80 72 61 74 6f 72 20 69 74 65 72 61 74 6f 72 0d 0a  rator iterator..
25e90 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
25ea0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25eb0 20 20 20 20 20 20 74 68 69 73 2e 69 74 65 72 61        this.itera
25ec0 74 6f 72 20 3d 20 69 74 65 72 61 74 6f 72 3b 0d  tor = iterator;.
25ed0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
25ee0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25f30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
25f40 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
25f50 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20  /// Disposes of 
25f60 74 68 65 20 6d 61 6e 61 67 65 64 20 69 74 65 72  the managed iter
25f70 61 74 6f 72 20 69 6e 73 74 61 6e 63 65 20 61 6e  ator instance an
25f80 64 20 73 65 74 73 20 69 74 73 20 76 61 6c 75 65  d sets its value
25f90 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   to..        ///
25fa0 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20   null...        
25fb0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
25fc0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25fd0 76 6f 69 64 20 43 6c 6f 73 65 49 74 65 72 61 74  void CloseIterat
25fe0 6f 72 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  or()..        {.
25ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
26000 28 69 74 65 72 61 74 6f 72 20 21 3d 20 6e 75 6c  (iterator != nul
26010 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
26020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26030 20 20 20 69 74 65 72 61 74 6f 72 2e 44 69 73 70     iterator.Disp
26040 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
26050 20 20 20 20 20 20 20 20 69 74 65 72 61 74 6f 72          iterator
26060 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
26070 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26080 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
26090 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
260a0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
260b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
260f0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f       #region Pro
26100 74 65 63 74 65 64 20 4d 65 74 68 6f 64 73 0d 0a  tected Methods..
26110 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
26120 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
26130 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20 74  // Disposes of t
26140 68 65 20 65 78 69 73 74 69 6e 67 20 6d 61 6e 61  he existing mana
26150 67 65 64 20 69 74 65 72 61 74 6f 72 20 69 6e 73  ged iterator ins
26160 74 61 6e 63 65 20 61 6e 64 20 74 68 65 6e 20 73  tance and then s
26170 65 74 73 20 69 74 0d 0a 20 20 20 20 20 20 20 20  ets it..        
26180 2f 2f 2f 20 74 6f 20 61 20 6e 65 77 20 76 61 6c  /// to a new val
26190 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
261a0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
261b0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
261c0 6e 61 6d 65 3d 22 69 74 65 72 61 74 6f 72 22 3e  name="iterator">
261d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
261e0 65 20 6e 65 77 20 6d 61 6e 61 67 65 64 20 69 74  e new managed it
261f0 65 72 61 74 6f 72 20 69 6e 73 74 61 6e 63 65 20  erator instance 
26200 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  to use...       
26210 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
26220 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
26230 20 76 6f 69 64 20 52 65 73 65 74 49 74 65 72 61   void ResetItera
26240 74 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tor(..          
26250 20 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65    SQLiteChangeSe
26260 74 49 74 65 72 61 74 6f 72 20 69 74 65 72 61 74  tIterator iterat
26270 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
26280 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26290 20 20 20 20 20 20 20 20 20 20 43 6c 6f 73 65 49            CloseI
262a0 74 65 72 61 74 6f 72 28 29 3b 0d 0a 20 20 20 20  terator();..    
262b0 20 20 20 20 20 20 20 20 53 65 74 49 74 65 72 61          SetItera
262c0 74 6f 72 28 69 74 65 72 61 74 6f 72 29 3b 0d 0a  tor(iterator);..
262d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
262e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
262f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
26300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
26350 69 6f 6e 20 49 45 6e 75 6d 65 72 61 74 6f 72 3c  ion IEnumerator<
26360 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  ISQLiteChangeSet
26370 4d 65 74 61 64 61 74 61 49 74 65 6d 3e 20 4d 65  MetadataItem> Me
26380 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  mbers..        /
26390 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
263a0 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e        /// Return
263b0 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 68  s the current ch
263c0 61 6e 67 65 20 77 69 74 68 69 6e 20 74 68 65 20  ange within the 
263d0 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 2c 20  set of changes, 
263e0 72 65 70 72 65 73 65 6e 74 65 64 0d 0a 20 20 20  represented..   
263f0 20 20 20 20 20 2f 2f 2f 20 62 79 20 61 20 3c 73       /// by a <s
26400 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
26410 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74  ChangeSetMetadat
26420 61 49 74 65 6d 22 20 2f 3e 20 69 6e 73 74 61 6e  aItem" /> instan
26430 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
26440 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
26450 20 20 20 20 20 70 75 62 6c 69 63 20 49 53 51 4c       public ISQL
26460 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61  iteChangeSetMeta
26470 64 61 74 61 49 74 65 6d 20 43 75 72 72 65 6e 74  dataItem Current
26480 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
26490 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
264a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
264c0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
264d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
264e0 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
264f0 74 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64  teChangeSetMetad
26500 61 74 61 49 74 65 6d 28 69 74 65 72 61 74 6f 72  ataItem(iterator
26510 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26520 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
26530 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
26540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
26550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26590 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
265a0 72 65 67 69 6f 6e 20 49 45 6e 75 6d 65 72 61 74  region IEnumerat
265b0 6f 72 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  or Members..    
265c0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
265d0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52  >..        /// R
265e0 65 74 75 72 6e 73 20 74 68 65 20 63 75 72 72 65  eturns the curre
265f0 6e 74 20 63 68 61 6e 67 65 20 77 69 74 68 69 6e  nt change within
26600 20 74 68 65 20 73 65 74 20 6f 66 20 63 68 61 6e   the set of chan
26610 67 65 73 2c 20 72 65 70 72 65 73 65 6e 74 65 64  ges, represented
26620 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 79  ..        /// by
26630 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53   a <see cref="IS
26640 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65  QLiteChangeSetMe
26650 74 61 64 61 74 61 49 74 65 6d 22 20 2f 3e 20 69  tadataItem" /> i
26660 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
26670 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
26680 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
26690 20 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45 6e   Collections.IEn
266a0 75 6d 65 72 61 74 6f 72 2e 43 75 72 72 65 6e 74  umerator.Current
266b0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
266c0 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
266d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
266f0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
26700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26710 20 72 65 74 75 72 6e 20 43 75 72 72 65 6e 74 3b   return Current;
26720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26730 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
26740 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
26750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
26790 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
267a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
267b0 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20  /// Attempts to 
267c0 61 64 76 61 6e 63 65 20 74 6f 20 74 68 65 20 6e  advance to the n
267d0 65 78 74 20 69 74 65 6d 20 69 6e 20 74 68 65 20  ext item in the 
267e0 73 65 74 20 6f 66 20 63 68 61 6e 67 65 73 2e 0d  set of changes..
267f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
26800 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
26810 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
26820 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d          /// Non-
26830 7a 65 72 6f 20 69 66 20 6d 6f 72 65 20 69 74 65  zero if more ite
26840 6d 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ms are available
26850 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72  ; otherwise, zer
26860 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  o...        /// 
26870 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
26880 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
26890 4d 6f 76 65 4e 65 78 74 28 29 0d 0a 20 20 20 20  MoveNext()..    
268a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
268b0 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
268c0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
268d0 20 43 68 65 63 6b 49 74 65 72 61 74 6f 72 28 29   CheckIterator()
268e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
268f0 20 72 65 74 75 72 6e 20 69 74 65 72 61 74 6f 72   return iterator
26900 2e 4e 65 78 74 28 29 3b 0d 0a 20 20 20 20 20 20  .Next();..      
26910 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
26920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26960 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26970 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
26980 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72  .        /// Thr
26990 6f 77 73 20 3c 73 65 65 20 63 72 65 66 3d 22 4e  ows <see cref="N
269a0 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
269b0 65 70 74 69 6f 6e 22 20 2f 3e 20 62 65 63 61 75  eption" /> becau
269c0 73 65 20 6e 6f 74 20 61 6c 6c 20 74 68 65 0d 0a  se not all the..
269d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65 72 69          /// deri
269e0 76 65 64 20 63 6c 61 73 73 65 73 20 61 72 65 20  ved classes are 
269f0 61 62 6c 65 20 74 6f 20 73 75 70 70 6f 72 74 20  able to support 
26a00 72 65 73 65 74 20 66 75 6e 63 74 69 6f 6e 61 6c  reset functional
26a10 69 74 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ity...        //
26a20 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
26a30 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
26a40 74 75 61 6c 20 76 6f 69 64 20 52 65 73 65 74 28  tual void Reset(
26a50 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26a60 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
26a70 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
26a80 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
26a90 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
26aa0 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
26ab0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26ac0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
26ad0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
26ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
26b30 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
26b40 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
26b50 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
26b60 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70          /// Disp
26b70 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a  oses of this obj
26b80 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
26b90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
26ba0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
26bb0 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
26bc0 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  se()..        {.
26bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
26be0 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20  pose(true);..   
26bf0 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
26c00 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
26c10 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  s);..        }..
26c20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
26c30 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
26c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26c90 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
26ca0 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
26cb0 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
26cc0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
26cd0 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
26ce0 65 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65  ero if this obje
26cf0 63 74 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20  ct instance has 
26d00 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a  been disposed...
26d10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
26d20 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
26d30 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
26d40 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20  posed;....      
26d50 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
26d60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72  .        /// Thr
26d70 6f 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  ows an exception
26d80 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   if this object 
26d90 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65 65  instance has bee
26da0 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20  n disposed...   
26db0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
26dc0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
26dd0 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44  vate void CheckD
26de0 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72  isposed() /* thr
26df0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  ow */..        {
26e00 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44  ..#if THROW_ON_D
26e10 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20  ISPOSED..       
26e20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
26e30 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
26e40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26e50 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
26e60 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
26e70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
26e80 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
26e90 66 28 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65  f(SQLiteChangeSe
26ea0 74 45 6e 75 6d 65 72 61 74 6f 72 29 2e 4e 61 6d  tEnumerator).Nam
26eb0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
26ec0 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
26ed0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26ee0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26f30 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
26f40 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44  >..        /// D
26f50 69 73 70 6f 73 65 73 20 6f 72 20 66 69 6e 61 6c  isposes or final
26f60 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65 63 74  izes this object
26f70 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
26f80 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
26f90 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
26fa0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73  <param name="dis
26fb0 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20  posing">..      
26fc0 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
26fd0 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  f this object is
26fe0 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 3b   being disposed;
26ff0 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73   otherwise, this
27000 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20   object..       
27010 20 2f 2f 2f 20 69 73 20 62 65 69 6e 67 20 66 69   /// is being fi
27020 6e 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20  nalized...      
27030 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
27040 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
27050 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44  d virtual void D
27060 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70  ispose(bool disp
27070 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
27080 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
27090 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
270a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
270b0 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
270c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
270d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
270e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
270f0 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
27100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27120 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
27130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
27150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27160 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73         // dispos
27170 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
27180 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
271b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
271d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271e0 20 20 20 20 20 43 6c 6f 73 65 49 74 65 72 61 74       CloseIterat
271f0 6f 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  or();..         
27200 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27220 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
27270 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
27280 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
27290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
272a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
272d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
272e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
272f0 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
27300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27310 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27330 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e   NOTE: Everythin
27340 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c  g should be full
27350 79 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68  y disposed at th
27360 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20  is point...     
27370 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
27380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
27390 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
273a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
273b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
273c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
273d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
273e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
27430 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
27440 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
27450 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
27460 2f 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69  // Finalizes thi
27470 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
27480 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
27490 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
274a0 20 20 20 20 7e 53 51 4c 69 74 65 43 68 61 6e 67      ~SQLiteChang
274b0 65 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 29  eSetEnumerator()
274c0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
274d0 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
274e0 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20  (false);..      
274f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
27500 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
27510 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
27520 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
27530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27570 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
27580 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61   SQLiteMemoryCha
27590 6e 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f 72  ngeSetEnumerator
275a0 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20   Class..    /// 
275b0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
275c0 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 72 65  // This class re
275d0 70 72 65 73 65 6e 74 73 20 61 6e 20 3c 73 65 65  presents an <see
275e0 20 63 72 65 66 3d 22 49 45 6e 75 6d 65 72 61 74   cref="IEnumerat
275f0 6f 72 22 20 2f 3e 20 74 68 61 74 20 69 73 20 63  or" /> that is c
27600 61 70 61 62 6c 65 20 6f 66 0d 0a 20 20 20 20 2f  apable of..    /
27610 2f 2f 20 65 6e 75 6d 65 72 61 74 69 6e 67 20 6f  // enumerating o
27620 76 65 72 20 61 20 73 65 74 20 6f 66 20 63 68 61  ver a set of cha
27630 6e 67 65 73 20 63 6f 6e 74 61 69 6e 65 64 20 65  nges contained e
27640 6e 74 69 72 65 6c 79 20 69 6e 20 6d 65 6d 6f 72  ntirely in memor
27650 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  y...    /// </su
27660 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
27670 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
27680 73 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68  s SQLiteMemoryCh
27690 61 6e 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f  angeSetEnumerato
276a0 72 20 3a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  r :..        SQL
276b0 69 74 65 43 68 61 6e 67 65 53 65 74 45 6e 75 6d  iteChangeSetEnum
276c0 65 72 61 74 6f 72 0d 0a 20 20 20 20 7b 0d 0a 20  erator..    {.. 
276d0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
276e0 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20  rivate Data..   
276f0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
27700 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
27710 54 68 65 20 72 61 77 20 62 79 74 65 20 64 61 74  The raw byte dat
27720 61 20 66 6f 72 20 74 68 69 73 20 73 65 74 20 6f  a for this set o
27730 66 20 63 68 61 6e 67 65 73 2e 20 20 53 69 6e 63  f changes.  Sinc
27740 65 20 74 68 69 73 20 64 61 74 61 20 6d 75 73 74  e this data must
27750 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65  ..        /// be
27760 20 6d 61 72 73 68 61 6c 6c 65 64 20 74 6f 20 61   marshalled to a
27770 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 62   native memory b
27780 75 66 66 65 72 20 62 65 66 6f 72 65 20 62 65 69  uffer before bei
27790 6e 67 20 75 73 65 64 2c 20 74 68 65 72 65 0d 0a  ng used, there..
277a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 75 73 74          /// must
277b0 20 62 65 20 65 6e 6f 75 67 68 20 6d 65 6d 6f 72   be enough memor
277c0 79 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 73  y available to s
277d0 74 6f 72 65 20 61 74 20 6c 65 61 73 74 20 74 77  tore at least tw
277e0 6f 20 74 69 6d 65 73 20 74 68 65 0d 0a 20 20 20  o times the..   
277f0 20 20 20 20 20 2f 2f 2f 20 61 6d 6f 75 6e 74 20       /// amount 
27800 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65  of data containe
27810 64 20 77 69 74 68 69 6e 20 69 74 2e 0d 0a 20 20  d within it...  
27820 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
27830 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
27840 69 76 61 74 65 20 62 79 74 65 5b 5d 20 72 61 77  ivate byte[] raw
27850 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 23  Data;..        #
27860 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
27870 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
27880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
278c0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
278d0 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
278e0 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ors..        ///
278f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27900 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
27910 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
27920 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69  f this class usi
27930 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
27940 20 72 61 77 20 62 79 74 65 0d 0a 20 20 20 20 20   raw byte..     
27950 20 20 20 2f 2f 2f 20 64 61 74 61 2e 0d 0a 20 20     /// data...  
27960 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
27970 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
27980 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
27990 61 77 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20  awData">..      
279a0 20 20 2f 2f 2f 20 54 68 65 20 72 61 77 20 62 79    /// The raw by
279b0 74 65 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 69  te data containi
279c0 6e 67 20 74 68 65 20 73 65 74 20 6f 66 20 63 68  ng the set of ch
279d0 61 6e 67 65 73 20 66 6f 72 20 74 68 69 73 0d 0a  anges for this..
279e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 6e 75 6d          /// enum
279f0 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20  erator...       
27a00 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
27a10 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
27a20 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65  LiteMemoryChange
27a30 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 0d 0a  SetEnumerator(..
27a40 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
27a50 5b 5d 20 72 61 77 44 61 74 61 0d 0a 20 20 20 20  [] rawData..    
27a60 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
27a70 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 53 51         : base(SQ
27a80 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65  LiteMemoryChange
27a90 53 65 74 49 74 65 72 61 74 6f 72 2e 43 72 65 61  SetIterator.Crea
27aa0 74 65 28 72 61 77 44 61 74 61 29 29 0d 0a 20 20  te(rawData))..  
27ab0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27ac0 20 20 20 20 20 74 68 69 73 2e 72 61 77 44 61 74       this.rawDat
27ad0 61 20 3d 20 72 61 77 44 61 74 61 3b 0d 0a 20 20  a = rawData;..  
27ae0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27af0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
27b00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27b50 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
27b60 6e 20 49 45 6e 75 6d 65 72 61 74 6f 72 20 4f 76  n IEnumerator Ov
27b70 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
27b80 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
27b90 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 73 65          /// Rese
27ba0 74 73 20 74 68 65 20 65 6e 75 6d 65 72 61 74 6f  ts the enumerato
27bb0 72 20 74 6f 20 69 74 73 20 69 6e 69 74 69 61 6c  r to its initial
27bc0 20 70 6f 73 69 74 69 6f 6e 2e 0d 0a 20 20 20 20   position...    
27bd0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
27be0 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
27bf0 69 63 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ic override void
27c00 20 52 65 73 65 74 28 29 0d 0a 20 20 20 20 20 20   Reset()..      
27c10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27c20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
27c30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27c40 20 52 65 73 65 74 49 74 65 72 61 74 6f 72 28 53   ResetIterator(S
27c50 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67  QLiteMemoryChang
27c60 65 53 65 74 49 74 65 72 61 74 6f 72 2e 43 72 65  eSetIterator.Cre
27c70 61 74 65 28 72 61 77 44 61 74 61 29 29 3b 0d 0a  ate(rawData));..
27c80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27c90 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
27ca0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
27d00 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
27d10 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
27d20 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
27d30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
27d40 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
27d50 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
27d60 73 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e 20  stance has been 
27d70 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
27d80 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
27d90 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
27da0 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
27db0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
27dc0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
27dd0 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61      /// Throws a
27de0 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 74  n exception if t
27df0 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  his object insta
27e00 6e 63 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  nce has been dis
27e10 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
27e20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
27e30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27e40 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
27e50 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
27e60 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
27e70 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53   THROW_ON_DISPOS
27e80 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ED..            
27e90 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
27ea0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
27ec0 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
27ed0 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
27ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ef0 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
27f00 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53  iteMemoryChangeS
27f10 65 74 45 6e 75 6d 65 72 61 74 6f 72 29 2e 4e 61  etEnumerator).Na
27f20 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
27f30 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
27f40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27f50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
27f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
27fa0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
27fb0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
27fc0 44 69 73 70 6f 73 65 73 20 6f 72 20 66 69 6e 61  Disposes or fina
27fd0 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65 63  lizes this objec
27fe0 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
27ff0 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
28000 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
28010 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69   <param name="di
28020 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 20  sposing">..     
28030 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
28040 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  if this object i
28050 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64  s being disposed
28060 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69  ; otherwise, thi
28070 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20  s object..      
28080 20 20 2f 2f 2f 20 69 73 20 62 65 69 6e 67 20 66    /// is being f
28090 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20  inalized...     
280a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
280b0 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74  .        protect
280c0 65 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ed override void
280d0 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69   Dispose(bool di
280e0 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
280f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28100 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
28110 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28120 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
28130 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
28140 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28150 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28160 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28190 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
281a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
281c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
281d0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70           // disp
281e0 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
281f0 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
28200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28210 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
28240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28250 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28260 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
28270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
282a0 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
282b0 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
282c0 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
282d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
282f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28300 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
28310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
28320 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
28330 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
28340 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28360 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73  base.Dispose(dis
28370 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  posing);....    
28380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
28390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283a0 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68  // NOTE: Everyth
283b0 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75  ing should be fu
283c0 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74 20  lly disposed at 
283d0 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20  this point...   
283e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
283f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28400 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65   disposed = true
28410 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28420 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
28430 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
28440 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
28450 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
28460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
284b0 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 53   #region SQLiteS
284c0 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74 45 6e  treamChangeSetEn
284d0 75 6d 65 72 61 74 6f 72 20 43 6c 61 73 73 0d 0a  umerator Class..
284e0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
284f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
28500 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
28510 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 49   an <see cref="I
28520 45 6e 75 6d 65 72 61 74 6f 72 22 20 2f 3e 20 74  Enumerator" /> t
28530 68 61 74 20 69 73 20 63 61 70 61 62 6c 65 20 6f  hat is capable o
28540 66 0d 0a 20 20 20 20 2f 2f 2f 20 65 6e 75 6d 65  f..    /// enume
28550 72 61 74 69 6e 67 20 6f 76 65 72 20 61 20 73 65  rating over a se
28560 74 20 6f 66 20 63 68 61 6e 67 65 73 20 62 61 63  t of changes bac
28570 6b 65 64 20 62 79 20 61 20 3c 73 65 65 20 63 72  ked by a <see cr
28580 65 66 3d 22 53 74 72 65 61 6d 22 20 2f 3e 0d 0a  ef="Stream" />..
28590 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
285a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
285b0 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
285c0 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73  nal sealed class
285d0 20 53 51 4c 69 74 65 53 74 72 65 61 6d 43 68 61   SQLiteStreamCha
285e0 6e 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f 72  ngeSetEnumerator
285f0 20 3a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   :..        SQLi
28600 74 65 43 68 61 6e 67 65 53 65 74 45 6e 75 6d 65  teChangeSetEnume
28610 72 61 74 6f 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  rator..    {..  
28620 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
28630 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
28640 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
28650 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28660 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
28670 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
28680 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67  this class using
28690 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
286a0 74 72 65 61 6d 2e 0d 0a 20 20 20 20 20 20 20 20  tream...        
286b0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
286c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
286d0 61 6d 20 6e 61 6d 65 3d 22 73 74 72 65 61 6d 22  am name="stream"
286e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
286f0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74  he <see cref="St
28700 72 65 61 6d 22 20 2f 3e 20 77 68 65 72 65 20 74  ream" /> where t
28710 68 65 20 72 61 77 20 62 79 74 65 20 64 61 74 61  he raw byte data
28720 20 66 6f 72 20 74 68 65 20 73 65 74 20 6f 66 0d   for the set of.
28730 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 68 61  .        /// cha
28740 6e 67 65 73 20 6d 61 79 20 62 65 20 72 65 61 64  nges may be read
28750 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
28760 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
28770 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
28780 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 20  ="flags">..     
28790 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73     /// The flags
287a0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
287b0 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e   the parent conn
287c0 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...       
287d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
287e0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
287f0 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67 65  LiteStreamChange
28800 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 0d 0a  SetEnumerator(..
28810 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 65              Stre
28820 61 6d 20 73 74 72 65 61 6d 2c 0d 0a 20 20 20 20  am stream,..    
28830 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
28840 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
28850 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ags..           
28860 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
28870 3a 20 62 61 73 65 28 53 51 4c 69 74 65 53 74 72  : base(SQLiteStr
28880 65 61 6d 43 68 61 6e 67 65 53 65 74 49 74 65 72  eamChangeSetIter
28890 61 74 6f 72 2e 43 72 65 61 74 65 28 73 74 72 65  ator.Create(stre
288a0 61 6d 2c 20 66 6c 61 67 73 29 29 0d 0a 20 20 20  am, flags))..   
288b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
288c0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
288d0 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
288e0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
288f0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
28900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28940 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28950 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
28960 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
28970 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 2f  mbers..        /
28980 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
28990 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
289a0 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65 63  ro if this objec
289b0 74 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20 62  t instance has b
289c0 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  een disposed... 
289d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
289e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
289f0 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
28a00 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  osed;....       
28a10 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
28a20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f          /// Thro
28a30 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ws an exception 
28a40 69 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  if this object i
28a50 6e 73 74 61 6e 63 65 20 68 61 73 20 62 65 65 6e  nstance has been
28a60 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
28a70 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
28a80 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
28a90 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69  ate void CheckDi
28aa0 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f  sposed() /* thro
28ab0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  w */..        {.
28ac0 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
28ad0 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20  SPOSED..        
28ae0 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64      if (disposed
28af0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28b10 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
28b20 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
28b30 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
28b40 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
28b50 28 53 51 4c 69 74 65 53 74 72 65 61 6d 43 68 61  (SQLiteStreamCha
28b60 6e 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f 72  ngeSetEnumerator
28b70 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
28b80 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
28b90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
28ba0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28bf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
28c00 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
28c10 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 72 20  /// Disposes or 
28c20 66 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f  finalizes this o
28c30 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
28c40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
28c50 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
28c60 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
28c70 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20  ="disposing">.. 
28c80 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
28c90 65 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65  ero if this obje
28ca0 63 74 20 69 73 20 62 65 69 6e 67 20 64 69 73 70  ct is being disp
28cb0 6f 73 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c  osed; otherwise,
28cc0 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20   this object..  
28cd0 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69        /// is bei
28ce0 6e 67 20 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20  ng finalized... 
28cf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
28d00 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  am>..        pro
28d10 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65 20  tected override 
28d20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f  void Dispose(boo
28d30 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20  l disposing)..  
28d40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28d50 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
28d60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28d70 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 21           //if (!
28d80 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
28d90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a             //{..
28da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28db0 2f 2f 20 20 20 20 69 66 20 28 64 69 73 70 6f 73  //    if (dispos
28dc0 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
28dd0 20 20 20 20 20 20 2f 2f 20 20 20 20 7b 0d 0a 20        //    {.. 
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28df0 2f 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  /        ///////
28e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
28e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28e30 2f 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70  /        // disp
28e40 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
28e50 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
28e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28e70 2f 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  /        ///////
28e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
28ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28eb0 2f 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20  /    }....      
28ec0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
28ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ef0 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
28f00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
28f10 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
28f20 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
28f30 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
28f40 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f        //    ////
28f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28f80 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20 20      //}..       
28f90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28fa0 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
28fb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65              base
28fd0 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f 73 69  .Dispose(disposi
28fe0 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
28ff0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
29000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
29010 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20  OTE: Everything 
29020 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20  should be fully 
29030 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69 73  disposed at this
29040 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20   point...       
29050 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
29070 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
29080 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29090 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
290a0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
290b0 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
290c0 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
290d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29110 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
29120 67 69 6f 6e 20 53 51 4c 69 74 65 43 68 61 6e 67  gion SQLiteChang
29130 65 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d  eSetMetadataItem
29140 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20   Class..    /// 
29150 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
29160 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61 63  // This interfac
29170 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 70 72 6f  e implements pro
29180 70 65 72 74 69 65 73 20 61 6e 64 20 6d 65 74 68  perties and meth
29190 6f 64 73 20 75 73 65 64 20 74 6f 20 66 65 74 63  ods used to fetc
291a0 68 20 6d 65 74 61 64 61 74 61 0d 0a 20 20 20 20  h metadata..    
291b0 2f 2f 2f 20 61 62 6f 75 74 20 6f 6e 65 20 63 68  /// about one ch
291c0 61 6e 67 65 20 77 69 74 68 69 6e 20 61 20 73 65  ange within a se
291d0 74 20 6f 66 20 63 68 61 6e 67 65 73 20 66 6f 72  t of changes for
291e0 20 61 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20   a database...  
291f0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
29200 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
29210 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
29220 74 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64  teChangeSetMetad
29230 61 74 61 49 74 65 6d 20 3a 0d 0a 20 20 20 20 20  ataItem :..     
29240 20 20 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65     ISQLiteChange
29250 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d 0d  SetMetadataItem.
29260 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
29270 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
29280 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f  Data..        //
29290 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
292a0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
292b0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 68  e cref="SQLiteCh
292c0 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 22  angeSetIterator"
292d0 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20 74 6f 20   /> instance to 
292e0 75 73 65 2e 20 20 54 68 69 73 0d 0a 20 20 20 20  use.  This..    
292f0 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 4e 4f 54      /// will NOT
29300 20 62 65 20 6f 77 6e 65 64 20 62 79 20 74 68 69   be owned by thi
29310 73 20 63 6c 61 73 73 20 61 6e 64 20 77 69 6c 6c  s class and will
29320 20 6e 6f 74 20 62 65 20 64 69 73 70 6f 73 65 64   not be disposed
29330 20 75 70 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20   upon this..    
29340 20 20 20 20 2f 2f 2f 20 63 6c 61 73 73 20 62 65      /// class be
29350 69 6e 67 20 64 69 73 70 6f 73 65 64 20 6f 72 20  ing disposed or 
29360 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20  finalized...    
29370 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
29380 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
29390 61 74 65 20 53 51 4c 69 74 65 43 68 61 6e 67 65  ate SQLiteChange
293a0 53 65 74 49 74 65 72 61 74 6f 72 20 69 74 65 72  SetIterator iter
293b0 61 74 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 23  ator;..        #
293c0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
293d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
293e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29420 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29430 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
29440 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ors..        ///
29450 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
29460 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
29470 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
29480 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69  f this class usi
29490 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
294a0 20 69 74 65 72 61 74 6f 72 0d 0a 20 20 20 20 20   iterator..     
294b0 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 2e     /// instance.
294c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
294d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
294e0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
294f0 65 3d 22 69 74 65 72 61 74 6f 72 22 3e 0d 0a 20  e="iterator">.. 
29500 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
29510 61 6e 61 67 65 64 20 69 74 65 72 61 74 6f 72 20  anaged iterator 
29520 69 6e 73 74 61 6e 63 65 20 74 6f 20 75 73 65 2e  instance to use.
29530 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
29540 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
29550 70 75 62 6c 69 63 20 53 51 4c 69 74 65 43 68 61  public SQLiteCha
29560 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61 49 74  ngeSetMetadataIt
29570 65 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  em(..           
29580 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74   SQLiteChangeSet
29590 49 74 65 72 61 74 6f 72 20 69 74 65 72 61 74 6f  Iterator iterato
295a0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
295b0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
295c0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 74           this.it
295d0 65 72 61 74 6f 72 20 3d 20 69 74 65 72 61 74 6f  erator = iterato
295e0 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  r;..        }.. 
295f0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
29600 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
29610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29650 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29660 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
29670 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
29680 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
29690 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f          /// Thro
296a0 77 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ws an exception 
296b0 69 66 20 74 68 65 20 6d 61 6e 61 67 65 64 20 69  if the managed i
296c0 74 65 72 61 74 6f 72 20 69 6e 73 74 61 6e 63 65  terator instance
296d0 20 69 73 20 69 6e 76 61 6c 69 64 2e 0d 0a 20 20   is invalid...  
296e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
296f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
29700 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
29710 49 74 65 72 61 74 6f 72 28 29 0d 0a 20 20 20 20  Iterator()..    
29720 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29730 20 20 20 69 66 20 28 69 74 65 72 61 74 6f 72 20     if (iterator 
29740 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
29750 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
29760 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
29770 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 69  tionException("i
29780 74 65 72 61 74 6f 72 20 75 6e 61 76 61 69 6c 61  terator unavaila
29790 62 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ble");....      
297a0 20 20 20 20 20 20 69 74 65 72 61 74 6f 72 2e 43        iterator.C
297b0 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 20  heckHandle();.. 
297c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
297d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
297e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
297f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29820 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
29830 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
29840 2f 20 50 6f 70 75 6c 61 74 65 73 20 74 68 65 20  / Populates the 
29850 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 20  underlying data 
29860 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72 65  for the <see cre
29870 66 3d 22 54 61 62 6c 65 4e 61 6d 65 22 20 2f 3e  f="TableName" />
29880 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ,..        /// <
29890 73 65 65 20 63 72 65 66 3d 22 4e 75 6d 62 65 72  see cref="Number
298a0 4f 66 43 6f 6c 75 6d 6e 73 22 20 2f 3e 2c 20 3c  OfColumns" />, <
298b0 73 65 65 20 63 72 65 66 3d 22 4f 70 65 72 61 74  see cref="Operat
298c0 69 6f 6e 43 6f 64 65 22 20 2f 3e 2c 20 61 6e 64  ionCode" />, and
298d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
298e0 65 65 20 63 72 65 66 3d 22 49 6e 64 69 72 65 63  ee cref="Indirec
298f0 74 22 20 2f 3e 20 70 72 6f 70 65 72 74 69 65 73  t" /> properties
29900 2c 20 75 73 69 6e 67 20 74 68 65 20 61 70 70 72  , using the appr
29910 6f 70 72 69 61 74 65 20 6e 61 74 69 76 65 0d 0a  opriate native..
29920 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 50 49 2e          /// API.
29930 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
29940 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
29950 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 50    private void P
29960 6f 70 75 6c 61 74 65 4f 70 65 72 61 74 69 6f 6e  opulateOperation
29970 4d 65 74 61 64 61 74 61 28 29 0d 0a 20 20 20 20  Metadata()..    
29980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29990 20 20 20 69 66 20 28 28 74 61 62 6c 65 4e 61 6d     if ((tableNam
299a0 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6e  e == null) || (n
299b0 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 3d  umberOfColumns =
299c0 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20  = null) ||..    
299d0 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 70 65              (ope
299e0 72 61 74 69 6f 6e 43 6f 64 65 20 3d 3d 20 6e 75  rationCode == nu
299f0 6c 6c 29 20 7c 7c 20 28 69 6e 64 69 72 65 63 74  ll) || (indirect
29a00 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
29a10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29a20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
29a30 49 74 65 72 61 74 6f 72 28 29 3b 0d 0a 0d 0a 20  Iterator();.... 
29a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
29a50 6e 74 50 74 72 20 70 54 62 6c 4e 61 6d 65 20 3d  ntPtr pTblName =
29a60 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
29a80 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 41  QLiteAuthorizerA
29a90 63 74 69 6f 6e 43 6f 64 65 20 6f 70 20 3d 20 53  ctionCode op = S
29aa0 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 41  QLiteAuthorizerA
29ab0 63 74 69 6f 6e 43 6f 64 65 2e 4e 6f 6e 65 3b 0d  ctionCode.None;.
29ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29ad0 20 69 6e 74 20 62 49 6e 64 69 72 65 63 74 20 3d   int bIndirect =
29ae0 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
29af0 20 20 20 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e       int nColumn
29b00 73 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  s = 0;....      
29b10 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
29b20 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
29b30 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
29b40 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65  ds.sqlite3change
29b50 73 65 74 5f 6f 70 28 0d 0a 20 20 20 20 20 20 20  set_op(..       
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65               ite
29b70 72 61 74 6f 72 2e 47 65 74 49 6e 74 50 74 72 28  rator.GetIntPtr(
29b80 29 2c 20 72 65 66 20 70 54 62 6c 4e 61 6d 65 2c  ), ref pTblName,
29b90 20 72 65 66 20 6e 43 6f 6c 75 6d 6e 73 2c 20 72   ref nColumns, r
29ba0 65 66 20 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20  ef op,..        
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
29bc0 62 49 6e 64 69 72 65 63 74 29 3b 0d 0a 0d 0a 20  bIndirect);.... 
29bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29be0 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45  f (rc != SQLiteE
29bf0 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
29c20 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
29c30 22 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65  "sqlite3changese
29c40 74 5f 6f 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  t_op");....     
29c50 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65             table
29c60 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74 72  Name = SQLiteStr
29c70 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55 74  ing.StringFromUt
29c80 66 38 49 6e 74 50 74 72 28 70 54 62 6c 4e 61 6d  f8IntPtr(pTblNam
29c90 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
29ca0 20 20 20 20 20 6e 75 6d 62 65 72 4f 66 43 6f 6c       numberOfCol
29cb0 75 6d 6e 73 20 3d 20 6e 43 6f 6c 75 6d 6e 73 3b  umns = nColumns;
29cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29cd0 20 20 6f 70 65 72 61 74 69 6f 6e 43 6f 64 65 20    operationCode 
29ce0 3d 20 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20  = op;..         
29cf0 20 20 20 20 20 20 20 69 6e 64 69 72 65 63 74 20         indirect 
29d00 3d 20 28 62 49 6e 64 69 72 65 63 74 20 21 3d 20  = (bIndirect != 
29d10 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0);..           
29d20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
29d30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
29d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
29d90 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
29da0 20 20 20 2f 2f 2f 20 50 6f 70 75 6c 61 74 65 73     /// Populates
29db0 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
29dc0 64 61 74 61 20 66 6f 72 20 74 68 65 0d 0a 20 20  data for the..  
29dd0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
29de0 72 65 66 3d 22 50 72 69 6d 61 72 79 4b 65 79 43  ref="PrimaryKeyC
29df0 6f 6c 75 6d 6e 73 22 20 2f 3e 20 70 72 6f 70 65  olumns" /> prope
29e00 72 74 79 20 75 73 69 6e 67 20 74 68 65 20 61 70  rty using the ap
29e10 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 20 20  propriate..     
29e20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 41 50     /// native AP
29e30 49 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  I...        /// 
29e40 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
29e50 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
29e60 20 50 6f 70 75 6c 61 74 65 50 72 69 6d 61 72 79   PopulatePrimary
29e70 4b 65 79 43 6f 6c 75 6d 6e 73 28 29 0d 0a 20 20  KeyColumns()..  
29e80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29e90 20 20 20 20 20 69 66 20 28 70 72 69 6d 61 72 79       if (primary
29ea0 4b 65 79 43 6f 6c 75 6d 6e 73 20 3d 3d 20 6e 75  KeyColumns == nu
29eb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29ed0 20 20 20 20 43 68 65 63 6b 49 74 65 72 61 74 6f      CheckIterato
29ee0 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
29ef0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
29f00 50 72 69 6d 61 72 79 4b 65 79 73 20 3d 20 49 6e  PrimaryKeys = In
29f10 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
29f20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
29f30 6e 43 6f 6c 75 6d 6e 73 20 3d 20 30 3b 0d 0a 0d  nColumns = 0;...
29f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f50 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
29f60 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
29f70 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
29f80 33 63 68 61 6e 67 65 73 65 74 5f 70 6b 28 0d 0a  3changeset_pk(..
29f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fa0 20 20 20 20 69 74 65 72 61 74 6f 72 2e 47 65 74      iterator.Get
29fb0 49 6e 74 50 74 72 28 29 2c 20 72 65 66 20 70 50  IntPtr(), ref pP
29fc0 72 69 6d 61 72 79 4b 65 79 73 2c 20 72 65 66 20  rimaryKeys, ref 
29fd0 6e 43 6f 6c 75 6d 6e 73 29 3b 0d 0a 0d 0a 20 20  nColumns);....  
29fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29ff0 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
2a000 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
2a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a020 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
2a030 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 22  eException(rc, "
2a040 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74  sqlite3changeset
2a050 5f 70 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  _pk");....      
2a060 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
2a070 20 62 79 74 65 73 20 3d 20 53 51 4c 69 74 65 42   bytes = SQLiteB
2a080 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74 72 28  ytes.FromIntPtr(
2a090 70 50 72 69 6d 61 72 79 4b 65 79 73 2c 20 6e 43  pPrimaryKeys, nC
2a0a0 6f 6c 75 6d 6e 73 29 3b 0d 0a 0d 0a 20 20 20 20  olumns);....    
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a0c0 62 79 74 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  bytes != null)..
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a0f0 20 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65         primaryKe
2a100 79 43 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 62  yColumns = new b
2a110 6f 6f 6c 5b 6e 43 6f 6c 75 6d 6e 73 5d 3b 0d 0a  ool[nColumns];..
2a120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a130 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
2a140 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
2a150 3c 20 62 79 74 65 73 2e 4c 65 6e 67 74 68 3b 20  < bytes.Length; 
2a160 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
2a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a180 20 20 70 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75    primaryKeyColu
2a190 6d 6e 73 5b 69 6e 64 65 78 5d 20 3d 20 28 62 79  mns[index] = (by
2a1a0 74 65 73 5b 69 6e 64 65 78 5d 20 21 3d 20 30 29  tes[index] != 0)
2a1b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a1c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a1d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2a1e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a230 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
2a240 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2a250 20 20 20 20 2f 2f 2f 20 50 6f 70 75 6c 61 74 65      /// Populate
2a260 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  s the underlying
2a270 20 64 61 74 61 20 66 6f 72 20 74 68 65 0d 0a 20   data for the.. 
2a280 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
2a290 63 72 65 66 3d 22 4e 75 6d 62 65 72 4f 66 46 6f  cref="NumberOfFo
2a2a0 72 65 69 67 6e 4b 65 79 43 6f 6e 66 6c 69 63 74  reignKeyConflict
2a2b0 73 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20 75  s" /> property u
2a2c0 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  sing the..      
2a2d0 20 20 2f 2f 2f 20 61 70 70 72 6f 70 72 69 61 74    /// appropriat
2a2e0 65 20 6e 61 74 69 76 65 20 41 50 49 2e 0d 0a 20  e native API... 
2a2f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2a300 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
2a310 72 69 76 61 74 65 20 76 6f 69 64 20 50 6f 70 75  rivate void Popu
2a320 6c 61 74 65 4e 75 6d 62 65 72 4f 66 46 6f 72 65  lateNumberOfFore
2a330 69 67 6e 4b 65 79 43 6f 6e 66 6c 69 63 74 73 28  ignKeyConflicts(
2a340 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2a350 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 75            if (nu
2a360 6d 62 65 72 4f 66 46 6f 72 65 69 67 6e 4b 65 79  mberOfForeignKey
2a370 43 6f 6e 66 6c 69 63 74 73 20 3d 3d 20 6e 75 6c  Conflicts == nul
2a380 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2a390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a3a0 20 20 20 43 68 65 63 6b 49 74 65 72 61 74 6f 72     CheckIterator
2a3b0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2a3c0 20 20 20 20 20 20 20 69 6e 74 20 63 6f 6e 66 6c         int confl
2a3d0 69 63 74 73 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  icts = 0;....   
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
2a3f0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
2a400 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2a410 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
2a420 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2a430 65 33 63 68 61 6e 67 65 73 65 74 5f 66 6b 5f 63  e3changeset_fk_c
2a440 6f 6e 66 6c 69 63 74 73 28 0d 0a 20 20 20 20 20  onflicts(..     
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a460 20 20 20 69 74 65 72 61 74 6f 72 2e 47 65 74 49     iterator.GetI
2a470 6e 74 50 74 72 28 29 2c 20 72 65 66 20 63 6f 6e  ntPtr(), ref con
2a480 66 6c 69 63 74 73 29 3b 0d 0a 0d 0a 20 20 20 20  flicts);....    
2a490 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a4a0 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
2a4b0 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
2a4c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4e0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
2a4f0 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 0d  teException(rc,.
2a500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a510 20 20 20 20 20 20 20 20 20 22 73 71 6c 69 74 65           "sqlite
2a520 33 63 68 61 6e 67 65 73 65 74 5f 66 6b 5f 63 6f  3changeset_fk_co
2a530 6e 66 6c 69 63 74 73 22 29 3b 0d 0a 20 20 20 20  nflicts");..    
2a540 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a560 20 6e 75 6d 62 65 72 4f 66 46 6f 72 65 69 67 6e   numberOfForeign
2a570 4b 65 79 43 6f 6e 66 6c 69 63 74 73 20 3d 20 63  KeyConflicts = c
2a580 6f 6e 66 6c 69 63 74 73 3b 0d 0a 20 20 20 20 20  onflicts;..     
2a590 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a5a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2a5b0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2a5c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a610 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53        #region IS
2a620 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65  QLiteChangeSetMe
2a630 74 61 64 61 74 61 49 74 65 6d 20 4d 65 6d 62 65  tadataItem Membe
2a640 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
2a650 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2a660 20 20 20 2f 2f 2f 20 42 61 63 6b 69 6e 67 20 66     /// Backing f
2a670 69 65 6c 64 20 66 6f 72 20 74 68 65 20 3c 73 65  ield for the <se
2a680 65 20 63 72 65 66 3d 22 54 61 62 6c 65 4e 61 6d  e cref="TableNam
2a690 65 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e 20  e" /> property. 
2a6a0 54 68 69 73 20 76 61 6c 75 65 0d 0a 20 20 20 20  This value..    
2a6b0 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20      /// will be 
2a6c0 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 66 69 65  null if this fie
2a6d0 6c 64 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62  ld has not yet b
2a6e0 65 65 6e 20 70 6f 70 75 6c 61 74 65 64 20 76 69  een populated vi
2a6f0 61 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  a the..        /
2a700 2f 2f 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61  // underlying na
2a710 74 69 76 65 20 41 50 49 2e 0d 0a 20 20 20 20 20  tive API...     
2a720 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2a730 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
2a740 74 65 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e  te string tableN
2a750 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
2a760 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2a770 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
2a780 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
2a790 20 74 68 65 20 63 68 61 6e 67 65 20 77 61 73 20   the change was 
2a7a0 6d 61 64 65 20 74 6f 2e 0d 0a 20 20 20 20 20 20  made to...      
2a7b0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2a7c0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
2a7d0 20 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d   string TableNam
2a7e0 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
2a7f0 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
2a800 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
2a820 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a840 50 6f 70 75 6c 61 74 65 4f 70 65 72 61 74 69 6f  PopulateOperatio
2a850 6e 4d 65 74 61 64 61 74 61 28 29 3b 0d 0a 0d 0a  nMetadata();....
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a870 72 65 74 75 72 6e 20 74 61 62 6c 65 4e 61 6d 65  return tableName
2a880 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2a890 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2a8a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2a8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a8f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2a900 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2a910 20 2f 2f 2f 20 42 61 63 6b 69 6e 67 20 66 69 65   /// Backing fie
2a920 6c 64 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20  ld for the <see 
2a930 63 72 65 66 3d 22 4e 75 6d 62 65 72 4f 66 43 6f  cref="NumberOfCo
2a940 6c 75 6d 6e 73 22 20 2f 3e 20 70 72 6f 70 65 72  lumns" /> proper
2a950 74 79 2e 20 54 68 69 73 0d 0a 20 20 20 20 20 20  ty. This..      
2a960 20 20 2f 2f 2f 20 76 61 6c 75 65 20 77 69 6c 6c    /// value will
2a970 20 62 65 20 6e 75 6c 6c 20 69 66 20 74 68 69 73   be null if this
2a980 20 66 69 65 6c 64 20 68 61 73 20 6e 6f 74 20 79   field has not y
2a990 65 74 20 62 65 65 6e 20 70 6f 70 75 6c 61 74 65  et been populate
2a9a0 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20  d via the..     
2a9b0 20 20 20 2f 2f 2f 20 75 6e 64 65 72 6c 79 69 6e     /// underlyin
2a9c0 67 20 6e 61 74 69 76 65 20 41 50 49 2e 0d 0a 20  g native API... 
2a9d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2a9e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
2a9f0 72 69 76 61 74 65 20 69 6e 74 3f 20 6e 75 6d 62  rivate int? numb
2aa00 65 72 4f 66 43 6f 6c 75 6d 6e 73 3b 0d 0a 0d 0a  erOfColumns;....
2aa10 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2aa20 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2aa30 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
2aa40 20 63 6f 6c 75 6d 6e 73 20 69 6d 70 61 63 74 65   columns impacte
2aa50 64 20 62 79 20 74 68 69 73 20 63 68 61 6e 67 65  d by this change
2aa60 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 63 61  .  This value ca
2aa70 6e 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n be..        //
2aa80 2f 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  / used to determ
2aa90 69 6e 65 20 74 68 65 20 68 69 67 68 65 73 74 20  ine the highest 
2aaa0 76 61 6c 69 64 20 63 6f 6c 75 6d 6e 20 69 6e 64  valid column ind
2aab0 65 78 20 74 68 61 74 20 6d 61 79 20 62 65 20 75  ex that may be u
2aac0 73 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  sed..        ///
2aad0 20 77 69 74 68 20 74 68 65 20 3c 73 65 65 20 63   with the <see c
2aae0 72 65 66 3d 22 47 65 74 4f 6c 64 56 61 6c 75 65  ref="GetOldValue
2aaf0 22 20 2f 3e 2c 20 3c 73 65 65 20 63 72 65 66 3d  " />, <see cref=
2ab00 22 47 65 74 4e 65 77 56 61 6c 75 65 22 20 2f 3e  "GetNewValue" />
2ab10 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  ,..        /// a
2ab20 6e 64 20 3c 73 65 65 20 63 72 65 66 3d 22 47 65  nd <see cref="Ge
2ab30 74 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 22 20  tConflictValue" 
2ab40 2f 3e 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 68  /> methods of th
2ab50 69 73 20 69 6e 74 65 72 66 61 63 65 2e 20 20 49  is interface.  I
2ab60 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  t..        /// w
2ab70 69 6c 6c 20 62 65 20 74 68 69 73 20 76 61 6c 75  ill be this valu
2ab80 65 20 6d 69 6e 75 73 20 6f 6e 65 2e 0d 0a 20 20  e minus one...  
2ab90 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2aba0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
2abb0 62 6c 69 63 20 69 6e 74 20 4e 75 6d 62 65 72 4f  blic int NumberO
2abc0 66 43 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20 20 20  fColumns..      
2abd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2abe0 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
2abf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2ac00 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2ac10 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
2ac20 20 20 20 20 20 20 20 50 6f 70 75 6c 61 74 65 4f         PopulateO
2ac30 70 65 72 61 74 69 6f 6e 4d 65 74 61 64 61 74 61  perationMetadata
2ac40 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2ac50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 69         return (i
2ac60 6e 74 29 6e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d  nt)numberOfColum
2ac70 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
2ac80 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
2ac90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2aca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ace0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
2acf0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2ad00 20 20 20 2f 2f 2f 20 42 61 63 6b 69 6e 67 20 66     /// Backing f
2ad10 69 65 6c 64 20 66 6f 72 20 74 68 65 20 3c 73 65  ield for the <se
2ad20 65 20 63 72 65 66 3d 22 4f 70 65 72 61 74 69 6f  e cref="Operatio
2ad30 6e 43 6f 64 65 22 20 2f 3e 20 70 72 6f 70 65 72  nCode" /> proper
2ad40 74 79 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20  ty.  This..     
2ad50 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 77 69 6c     /// value wil
2ad60 6c 20 62 65 20 6e 75 6c 6c 20 69 66 20 74 68 69  l be null if thi
2ad70 73 20 66 69 65 6c 64 20 68 61 73 20 6e 6f 74 20  s field has not 
2ad80 79 65 74 20 62 65 65 6e 20 70 6f 70 75 6c 61 74  yet been populat
2ad90 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20  ed via the..    
2ada0 20 20 20 20 2f 2f 2f 20 75 6e 64 65 72 6c 79 69      /// underlyi
2adb0 6e 67 20 6e 61 74 69 76 65 20 41 50 49 2e 0d 0a  ng native API...
2adc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2add0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2ade0 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 41 75  private SQLiteAu
2adf0 74 68 6f 72 69 7a 65 72 41 63 74 69 6f 6e 43 6f  thorizerActionCo
2ae00 64 65 3f 20 6f 70 65 72 61 74 69 6f 6e 43 6f 64  de? operationCod
2ae10 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
2ae20 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2ae30 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 77 69       /// This wi
2ae40 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 76  ll contain the v
2ae50 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  alue..        //
2ae60 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
2ae70 69 74 65 41 75 74 68 6f 72 69 7a 65 72 41 63 74  iteAuthorizerAct
2ae80 69 6f 6e 43 6f 64 65 2e 49 6e 73 65 72 74 22 20  ionCode.Insert" 
2ae90 2f 3e 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  />,..        ///
2aea0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
2aeb0 74 65 41 75 74 68 6f 72 69 7a 65 72 41 63 74 69  teAuthorizerActi
2aec0 6f 6e 43 6f 64 65 2e 55 70 64 61 74 65 22 20 2f  onCode.Update" /
2aed0 3e 2c 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  >, or..        /
2aee0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
2aef0 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 41 63  LiteAuthorizerAc
2af00 74 69 6f 6e 43 6f 64 65 2e 44 65 6c 65 74 65 22  tionCode.Delete"
2af10 20 2f 3e 2c 20 63 6f 72 72 65 73 70 6f 6e 64 69   />, correspondi
2af20 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  ng to..        /
2af30 2f 2f 20 74 68 65 20 6f 76 65 72 61 6c 6c 20 74  // the overall t
2af40 79 70 65 20 6f 66 20 63 68 61 6e 67 65 20 74 68  ype of change th
2af50 69 73 20 69 74 65 6d 20 72 65 70 72 65 73 65 6e  is item represen
2af60 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ts...        ///
2af70 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2af80 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2af90 74 65 41 75 74 68 6f 72 69 7a 65 72 41 63 74 69  teAuthorizerActi
2afa0 6f 6e 43 6f 64 65 20 4f 70 65 72 61 74 69 6f 6e  onCode Operation
2afb0 43 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  Code..        {.
2afc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
2afd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2afe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aff0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2b000 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b010 20 20 20 50 6f 70 75 6c 61 74 65 4f 70 65 72 61     PopulateOpera
2b020 74 69 6f 6e 4d 65 74 61 64 61 74 61 28 29 3b 0d  tionMetadata();.
2b030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b040 20 20 20 72 65 74 75 72 6e 20 28 53 51 4c 69 74     return (SQLit
2b050 65 41 75 74 68 6f 72 69 7a 65 72 41 63 74 69 6f  eAuthorizerActio
2b060 6e 43 6f 64 65 29 6f 70 65 72 61 74 69 6f 6e 43  nCode)operationC
2b070 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
2b080 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2b090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
2b0f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2b100 20 20 20 20 2f 2f 2f 20 42 61 63 6b 69 6e 67 20      /// Backing 
2b110 66 69 65 6c 64 20 66 6f 72 20 74 68 65 20 3c 73  field for the <s
2b120 65 65 20 63 72 65 66 3d 22 49 6e 64 69 72 65 63  ee cref="Indirec
2b130 74 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e 20  t" /> property. 
2b140 20 54 68 69 73 20 76 61 6c 75 65 0d 0a 20 20 20   This value..   
2b150 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65       /// will be
2b160 20 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 66 69   null if this fi
2b170 65 6c 64 20 68 61 73 20 6e 6f 74 20 79 65 74 20  eld has not yet 
2b180 62 65 65 6e 20 70 6f 70 75 6c 61 74 65 64 20 76  been populated v
2b190 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ia the..        
2b1a0 2f 2f 2f 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e  /// underlying n
2b1b0 61 74 69 76 65 20 41 50 49 2e 0d 0a 20 20 20 20  ative API...    
2b1c0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2b1d0 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
2b1e0 61 74 65 20 62 6f 6f 6c 3f 20 69 6e 64 69 72 65  ate bool? indire
2b1f0 63 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ct;....        /
2b200 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2b210 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
2b220 72 6f 20 69 66 20 74 68 69 73 20 63 68 61 6e 67  ro if this chang
2b230 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  e is considered 
2b240 74 6f 20 62 65 20 69 6e 64 69 72 65 63 74 20 28  to be indirect (
2b250 69 2e 65 2e 20 61 73 0d 0a 20 20 20 20 20 20 20  i.e. as..       
2b260 20 2f 2f 2f 20 74 68 6f 75 67 68 20 74 68 65 79   /// though they
2b270 20 77 65 72 65 20 6d 61 64 65 20 76 69 61 20 61   were made via a
2b280 20 74 72 69 67 67 65 72 20 6f 72 20 66 6f 72 65   trigger or fore
2b290 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 29 2e  ign key action).
2b2a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2b2b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2b2c0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e    public bool In
2b2d0 64 69 72 65 63 74 0d 0a 20 20 20 20 20 20 20 20  direct..        
2b2e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
2b2f0 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
2b300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b310 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
2b320 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
2b330 20 20 20 20 20 50 6f 70 75 6c 61 74 65 4f 70 65       PopulateOpe
2b340 72 61 74 69 6f 6e 4d 65 74 61 64 61 74 61 28 29  rationMetadata()
2b350 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b360 20 20 20 20 20 72 65 74 75 72 6e 20 28 62 6f 6f       return (boo
2b370 6c 29 69 6e 64 69 72 65 63 74 3b 0d 0a 20 20 20  l)indirect;..   
2b380 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2b390 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b3a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2b3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2b3f0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2b400 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 42  >..        /// B
2b410 61 63 6b 69 6e 67 20 66 69 65 6c 64 20 66 6f 72  acking field for
2b420 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2b430 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e  PrimaryKeyColumn
2b440 73 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e 0d  s" /> property..
2b450 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
2b460 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  s value will be 
2b470 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 66 69 65  null if this fie
2b480 6c 64 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62  ld has not yet b
2b490 65 65 6e 20 70 6f 70 75 6c 61 74 65 64 0d 0a 20  een populated.. 
2b4a0 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 61 20 74         /// via t
2b4b0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61  he underlying na
2b4c0 74 69 76 65 20 41 50 49 2e 0d 0a 20 20 20 20 20  tive API...     
2b4d0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2b4e0 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
2b4f0 74 65 20 62 6f 6f 6c 5b 5d 20 70 72 69 6d 61 72  te bool[] primar
2b500 79 4b 65 79 43 6f 6c 75 6d 6e 73 3b 0d 0a 0d 0a  yKeyColumns;....
2b510 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2b520 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2b530 2f 2f 20 54 68 69 73 20 61 72 72 61 79 20 63 6f  // This array co
2b540 6e 74 61 69 6e 73 20 61 20 3c 73 65 65 20 63 72  ntains a <see cr
2b550 65 66 3d 22 42 6f 6f 6c 65 61 6e 22 20 2f 3e 20  ef="Boolean" /> 
2b560 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
2b570 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  in..        /// 
2b580 74 68 65 20 74 61 62 6c 65 20 61 73 73 6f 63 69  the table associ
2b590 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 63  ated with this c
2b5a0 68 61 6e 67 65 2e 20 20 54 68 65 20 65 6c 65 6d  hange.  The elem
2b5b0 65 6e 74 20 77 69 6c 6c 20 62 65 20 7a 65 72 6f  ent will be zero
2b5c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 66  ..        /// if
2b5d0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 6e   the column is n
2b5e0 6f 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  ot part of the p
2b5f0 72 69 6d 61 72 79 20 6b 65 79 3b 20 6f 74 68 65  rimary key; othe
2b600 72 77 69 73 65 2c 20 69 74 20 77 69 6c 6c 0d 0a  rwise, it will..
2b610 20 20 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 6e          /// be n
2b620 6f 6e 2d 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  on-zero...      
2b630 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2b640 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
2b650 20 62 6f 6f 6c 5b 5d 20 50 72 69 6d 61 72 79 4b   bool[] PrimaryK
2b660 65 79 43 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20 20  eyColumns..     
2b670 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b680 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
2b690 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b6a0 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
2b6b0 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
2b6c0 20 20 20 20 20 20 20 20 50 6f 70 75 6c 61 74 65          Populate
2b6d0 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e  PrimaryKeyColumn
2b6e0 73 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s();....        
2b6f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70          return p
2b700 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73  rimaryKeyColumns
2b710 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b720 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2b730 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2b780 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2b790 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2b7a0 20 2f 2f 2f 20 42 61 63 6b 69 6e 67 20 66 69 65   /// Backing fie
2b7b0 6c 64 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20  ld for the <see 
2b7c0 63 72 65 66 3d 22 4e 75 6d 62 65 72 4f 66 46 6f  cref="NumberOfFo
2b7d0 72 65 69 67 6e 4b 65 79 43 6f 6e 66 6c 69 63 74  reignKeyConflict
2b7e0 73 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  s" />..        /
2b7f0 2f 2f 20 70 72 6f 70 65 72 74 79 2e 20 20 54 68  // property.  Th
2b800 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  is value will be
2b810 20 6e 75 6c 6c 20 69 66 20 74 68 69 73 20 66 69   null if this fi
2b820 65 6c 64 20 68 61 73 20 6e 6f 74 20 79 65 74 20  eld has not yet 
2b830 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  been..        //
2b840 2f 20 70 6f 70 75 6c 61 74 65 64 20 76 69 61 20  / populated via 
2b850 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e  the underlying n
2b860 61 74 69 76 65 20 41 50 49 2e 0d 0a 20 20 20 20  ative API...    
2b870 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2b880 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
2b890 61 74 65 20 69 6e 74 3f 20 6e 75 6d 62 65 72 4f  ate int? numberO
2b8a0 66 46 6f 72 65 69 67 6e 4b 65 79 43 6f 6e 66 6c  fForeignKeyConfl
2b8b0 69 63 74 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  icts;....       
2b8c0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2b8d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
2b8e0 20 6d 65 74 68 6f 64 20 6d 61 79 20 6f 6e 6c 79   method may only
2b8f0 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   be called from 
2b900 77 69 74 68 69 6e 20 61 0d 0a 20 20 20 20 20 20  within a..      
2b910 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
2b920 22 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74  "SessionConflict
2b930 43 61 6c 6c 62 61 63 6b 22 20 2f 3e 20 64 65 6c  Callback" /> del
2b940 65 67 61 74 65 20 77 68 65 6e 20 74 68 65 20 63  egate when the c
2b950 6f 6e 66 6c 69 63 74 0d 0a 20 20 20 20 20 20 20  onflict..       
2b960 20 2f 2f 2f 20 74 79 70 65 20 69 73 20 3c 73 65   /// type is <se
2b970 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 68  e cref="SQLiteCh
2b980 61 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63 74 54  angeSetConflictT
2b990 79 70 65 2e 46 6f 72 65 69 67 6e 4b 65 79 22 20  ype.ForeignKey" 
2b9a0 2f 3e 2e 20 20 49 74 0d 0a 20 20 20 20 20 20 20  />.  It..       
2b9b0 20 2f 2f 2f 20 72 65 74 75 72 6e 73 20 74 68 65   /// returns the
2b9c0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
2b9d0 20 6b 6e 6f 77 6e 20 66 6f 72 65 69 67 6e 20 6b   known foreign k
2b9e0 65 79 20 76 69 6f 6c 61 74 69 6f 6e 73 20 69 6e  ey violations in
2b9f0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
2ba00 2f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  / destination da
2ba10 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 20  tabase...       
2ba20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2ba30 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2ba40 69 6e 74 20 4e 75 6d 62 65 72 4f 66 46 6f 72 65  int NumberOfFore
2ba50 69 67 6e 4b 65 79 43 6f 6e 66 6c 69 63 74 73 0d  ignKeyConflicts.
2ba60 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2ba70 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
2ba80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ba90 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
2baa0 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 6f                Po
2bac0 70 75 6c 61 74 65 4e 75 6d 62 65 72 4f 66 46 6f  pulateNumberOfFo
2bad0 72 65 69 67 6e 4b 65 79 43 6f 6e 66 6c 69 63 74  reignKeyConflict
2bae0 73 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s();....        
2baf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
2bb00 69 6e 74 29 6e 75 6d 62 65 72 4f 66 46 6f 72 65  int)numberOfFore
2bb10 69 67 6e 4b 65 79 43 6f 6e 66 6c 69 63 74 73 3b  ignKeyConflicts;
2bb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2bb30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2bb40 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2bb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2bb90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
2bba0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2bbb0 2f 2f 2f 20 51 75 65 72 69 65 73 20 61 6e 64 20  /// Queries and 
2bbc0 72 65 74 75 72 6e 73 20 74 68 65 20 6f 72 69 67  returns the orig
2bbd0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 61 20  inal value of a 
2bbe0 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 20 66 6f 72  given column for
2bbf0 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
2bc00 2f 2f 20 63 68 61 6e 67 65 2e 20 20 54 68 69 73  // change.  This
2bc10 20 6d 65 74 68 6f 64 20 6d 61 79 20 6f 6e 6c 79   method may only
2bc20 20 62 65 20 63 61 6c 6c 65 64 20 77 68 65 6e 20   be called when 
2bc30 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
2bc40 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 70 65 72   <see cref="Oper
2bc50 61 74 69 6f 6e 43 6f 64 65 22 20 2f 3e 20 68 61  ationCode" /> ha
2bc60 73 20 61 20 76 61 6c 75 65 20 6f 66 0d 0a 20 20  s a value of..  
2bc70 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
2bc80 72 65 66 3d 22 53 51 4c 69 74 65 41 75 74 68 6f  ref="SQLiteAutho
2bc90 72 69 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 2e  rizerActionCode.
2bca0 55 70 64 61 74 65 22 20 2f 3e 20 6f 72 0d 0a 20  Update" /> or.. 
2bcb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
2bcc0 63 72 65 66 3d 22 53 51 4c 69 74 65 41 75 74 68  cref="SQLiteAuth
2bcd0 6f 72 69 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65  orizerActionCode
2bce0 2e 44 65 6c 65 74 65 22 20 2f 3e 2e 0d 0a 20 20  .Delete" />...  
2bcf0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2bd00 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2bd10 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
2bd20 6f 6c 75 6d 6e 49 6e 64 65 78 22 3e 0d 0a 20 20  olumnIndex">..  
2bd30 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
2bd40 64 65 78 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  dex for the colu
2bd50 6d 6e 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  mn.  This value 
2bd60 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20  must be between 
2bd70 7a 65 72 6f 20 61 6e 64 20 6f 6e 65 0d 0a 20 20  zero and one..  
2bd80 20 20 20 20 20 20 2f 2f 2f 20 6c 65 73 73 20 74        /// less t
2bd90 68 61 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  han the total nu
2bda0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
2bdb0 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 2e 0d  for this table..
2bdc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
2bdd0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
2bde0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2bdf0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72        /// The or
2be00 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20  iginal value of 
2be10 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 20 66  a given column f
2be20 6f 72 20 74 68 69 73 20 63 68 61 6e 67 65 2e 0d  or this change..
2be30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
2be40 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2be50 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 56 61   public SQLiteVa
2be60 6c 75 65 20 47 65 74 4f 6c 64 56 61 6c 75 65 28  lue GetOldValue(
2be70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
2be80 74 20 63 6f 6c 75 6d 6e 49 6e 64 65 78 0d 0a 20  t columnIndex.. 
2be90 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2bea0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2beb0 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2bec0 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
2bed0 20 20 20 43 68 65 63 6b 49 74 65 72 61 74 6f 72     CheckIterator
2bee0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2bef0 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65     IntPtr pValue
2bf00 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
2bf10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
2bf20 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
2bf30 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  c = UnsafeNative
2bf40 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 63  Methods.sqlite3c
2bf50 68 61 6e 67 65 73 65 74 5f 6f 6c 64 28 0d 0a 20  hangeset_old(.. 
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2bf70 74 65 72 61 74 6f 72 2e 47 65 74 49 6e 74 50 74  terator.GetIntPt
2bf80 72 28 29 2c 20 63 6f 6c 75 6d 6e 49 6e 64 65 78  r(), columnIndex
2bf90 2c 20 72 65 66 20 70 56 61 6c 75 65 29 3b 0d 0a  , ref pValue);..
2bfa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2bfb0 74 75 72 6e 20 53 51 4c 69 74 65 56 61 6c 75 65  turn SQLiteValue
2bfc0 2e 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 61 6c  .FromIntPtr(pVal
2bfd0 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
2bfe0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2bff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c030 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
2c040 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2c050 20 20 20 20 20 2f 2f 2f 20 51 75 65 72 69 65 73       /// Queries
2c060 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
2c070 20 75 70 64 61 74 65 64 20 76 61 6c 75 65 20 6f   updated value o
2c080 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e  f a given column
2c090 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20   for this..     
2c0a0 20 20 20 2f 2f 2f 20 63 68 61 6e 67 65 2e 20 20     /// change.  
2c0b0 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 61 79 20  This method may 
2c0c0 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 77  only be called w
2c0d0 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hen the..       
2c0e0 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
2c0f0 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65 22 20 2f  OperationCode" /
2c100 3e 20 68 61 73 20 61 20 76 61 6c 75 65 20 6f 66  > has a value of
2c110 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2c120 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 41  ee cref="SQLiteA
2c130 75 74 68 6f 72 69 7a 65 72 41 63 74 69 6f 6e 43  uthorizerActionC
2c140 6f 64 65 2e 49 6e 73 65 72 74 22 20 2f 3e 20 6f  ode.Insert" /> o
2c150 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  r..        /// <
2c160 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
2c170 41 75 74 68 6f 72 69 7a 65 72 41 63 74 69 6f 6e  AuthorizerAction
2c180 43 6f 64 65 2e 55 70 64 61 74 65 22 20 2f 3e 2e  Code.Update" />.
2c190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2c1a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2c1b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2c1c0 65 3d 22 63 6f 6c 75 6d 6e 49 6e 64 65 78 22 3e  e="columnIndex">
2c1d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
2c1e0 65 20 69 6e 64 65 78 20 66 6f 72 20 74 68 65 20  e index for the 
2c1f0 63 6f 6c 75 6d 6e 2e 20 20 54 68 69 73 20 76 61  column.  This va
2c200 6c 75 65 20 6d 75 73 74 20 62 65 20 62 65 74 77  lue must be betw
2c210 65 65 6e 20 7a 65 72 6f 20 61 6e 64 20 6f 6e 65  een zero and one
2c220 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 65  ..        /// le
2c230 73 73 20 74 68 61 6e 20 74 68 65 20 74 6f 74 61  ss than the tota
2c240 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  l number of colu
2c250 6d 6e 73 20 66 6f 72 20 74 68 69 73 20 74 61 62  mns for this tab
2c260 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
2c270 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2c280 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2c290 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
2c2a0 65 20 75 70 64 61 74 65 64 20 76 61 6c 75 65 20  e updated value 
2c2b0 6f 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  of a given colum
2c2c0 6e 20 66 6f 72 20 74 68 69 73 20 63 68 61 6e 67  n for this chang
2c2d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
2c2e0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2c2f0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2c300 65 56 61 6c 75 65 20 47 65 74 4e 65 77 56 61 6c  eValue GetNewVal
2c310 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2c320 20 69 6e 74 20 63 6f 6c 75 6d 6e 49 6e 64 65 78   int columnIndex
2c330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2c340 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2c350 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
2c360 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
2c370 20 20 20 20 20 20 43 68 65 63 6b 49 74 65 72 61        CheckItera
2c380 74 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tor();....      
2c390 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 61        IntPtr pVa
2c3a0 6c 75 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  lue = IntPtr.Zer
2c3b0 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
2c3c0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
2c3d0 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  e rc = UnsafeNat
2c3e0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
2c3f0 65 33 63 68 61 6e 67 65 73 65 74 5f 6e 65 77 28  e3changeset_new(
2c400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c410 20 20 69 74 65 72 61 74 6f 72 2e 47 65 74 49 6e    iterator.GetIn
2c420 74 50 74 72 28 29 2c 20 63 6f 6c 75 6d 6e 49 6e  tPtr(), columnIn
2c430 64 65 78 2c 20 72 65 66 20 70 56 61 6c 75 65 29  dex, ref pValue)
2c440 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c450 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 61   return SQLiteVa
2c460 6c 75 65 2e 46 72 6f 6d 49 6e 74 50 74 72 28 70  lue.FromIntPtr(p
2c470 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
2c480 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2c490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2c4e0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2c4f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 51 75 65 72          /// Quer
2c500 69 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ies and returns 
2c510 74 68 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 20  the conflicting 
2c520 76 61 6c 75 65 20 6f 66 20 61 20 67 69 76 65 6e  value of a given
2c530 20 63 6f 6c 75 6d 6e 20 66 6f 72 0d 0a 20 20 20   column for..   
2c540 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 63 68       /// this ch
2c550 61 6e 67 65 2e 20 20 54 68 69 73 20 6d 65 74 68  ange.  This meth
2c560 6f 64 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 63  od may only be c
2c570 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
2c580 6e 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n a..        ///
2c590 20 3c 73 65 65 20 63 72 65 66 3d 22 53 65 73 73   <see cref="Sess
2c5a0 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  ionConflictCallb
2c5b0 61 63 6b 22 20 2f 3e 20 64 65 6c 65 67 61 74 65  ack" /> delegate
2c5c0 20 77 68 65 6e 20 74 68 65 20 63 6f 6e 66 6c 69   when the confli
2c5d0 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ct..        /// 
2c5e0 74 79 70 65 20 69 73 20 3c 73 65 65 20 63 72 65  type is <see cre
2c5f0 66 3d 22 53 51 4c 69 74 65 43 68 61 6e 67 65 53  f="SQLiteChangeS
2c600 65 74 43 6f 6e 66 6c 69 63 74 54 79 70 65 2e 44  etConflictType.D
2c610 61 74 61 22 20 2f 3e 20 6f 72 0d 0a 20 20 20 20  ata" /> or..    
2c620 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
2c630 66 3d 22 53 51 4c 69 74 65 43 68 61 6e 67 65 53  f="SQLiteChangeS
2c640 65 74 43 6f 6e 66 6c 69 63 74 54 79 70 65 2e 43  etConflictType.C
2c650 6f 6e 66 6c 69 63 74 22 20 2f 3e 2e 0d 0a 20 20  onflict" />...  
2c660 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2c670 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2c680 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
2c690 6f 6c 75 6d 6e 49 6e 64 65 78 22 3e 0d 0a 20 20  olumnIndex">..  
2c6a0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
2c6b0 64 65 78 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  dex for the colu
2c6c0 6d 6e 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  mn.  This value 
2c6d0 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e 20  must be between 
2c6e0 7a 65 72 6f 20 61 6e 64 20 6f 6e 65 0d 0a 20 20  zero and one..  
2c6f0 20 20 20 20 20 20 2f 2f 2f 20 6c 65 73 73 20 74        /// less t
2c700 68 61 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  han the total nu
2c710 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
2c720 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 2e 0d  for this table..
2c730 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
2c740 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
2c750 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
2c760 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f        /// The co
2c770 6e 66 6c 69 63 74 69 6e 67 20 76 61 6c 75 65 20  nflicting value 
2c780 6f 66 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d  of a given colum
2c790 6e 20 66 6f 72 20 74 68 69 73 20 63 68 61 6e 67  n for this chang
2c7a0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
2c7b0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2c7c0 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2c7d0 65 56 61 6c 75 65 20 47 65 74 43 6f 6e 66 6c 69  eValue GetConfli
2c7e0 63 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  ctValue(..      
2c7f0 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 75 6d 6e        int column
2c800 49 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  Index..         
2c810 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2c820 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
2c830 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
2c840 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
2c850 49 74 65 72 61 74 6f 72 28 29 3b 0d 0a 0d 0a 20  Iterator();.... 
2c860 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2c870 72 20 70 56 61 6c 75 65 20 3d 20 49 6e 74 50 74  r pValue = IntPt
2c880 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
2c890 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
2c8a0 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
2c8b0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
2c8c0 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74  sqlite3changeset
2c8d0 5f 63 6f 6e 66 6c 69 63 74 28 0d 0a 20 20 20 20  _conflict(..    
2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65 72              iter
2c8f0 61 74 6f 72 2e 47 65 74 49 6e 74 50 74 72 28 29  ator.GetIntPtr()
2c900 2c 20 63 6f 6c 75 6d 6e 49 6e 64 65 78 2c 20 72  , columnIndex, r
2c910 65 66 20 70 56 61 6c 75 65 29 3b 0d 0a 0d 0a 20  ef pValue);.... 
2c920 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c930 6e 20 53 51 4c 69 74 65 56 61 6c 75 65 2e 46 72  n SQLiteValue.Fr
2c940 6f 6d 49 6e 74 50 74 72 28 70 56 61 6c 75 65 29  omIntPtr(pValue)
2c950 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2c960 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2c970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2c980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2c9d0 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
2c9e0 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
2c9f0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2ca00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44  >..        /// D
2ca10 69 73 70 6f 73 65 73 20 6f 66 20 74 68 69 73 20  isposes of this 
2ca20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
2ca30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2ca40 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2ca50 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69    public void Di
2ca60 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  spose()..       
2ca70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ca80 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 47 43 2e 53              GC.S
2caa0 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28  uppressFinalize(
2cab0 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  this);..        
2cac0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2cad0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2cae0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2caf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2cb30 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
2cb40 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e  posable "Pattern
2cb50 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  " Members..     
2cb60 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2cb70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ..        /// No
2cb80 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 6f  n-zero if this o
2cb90 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 68  bject instance h
2cba0 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73 65 64  as been disposed
2cbb0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2cbc0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2cbd0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
2cbe0 64 69 73 70 6f 73 65 64 3b 0d 0a 0d 0a 20 20 20  disposed;....   
2cbf0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2cc00 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2cc10 54 68 72 6f 77 73 20 61 6e 20 65 78 63 65 70 74  Throws an except
2cc20 69 6f 6e 20 69 66 20 74 68 69 73 20 6f 62 6a 65  ion if this obje
2cc30 63 74 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20  ct instance has 
2cc40 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a  been disposed...
2cc50 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2cc60 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2cc70 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
2cc80 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
2cc90 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
2cca0 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f    {..#if THROW_O
2ccb0 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20  N_DISPOSED..    
2ccc0 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
2ccd0 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
2cce0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ccf0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2cd00 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
2cd10 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
2cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
2cd30 70 65 6f 66 28 53 51 4c 69 74 65 43 68 61 6e 67  peof(SQLiteChang
2cd40 65 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d  eSetMetadataItem
2cd50 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
2cd60 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
2cd70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2cd80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2cd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2cdd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
2cde0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2cdf0 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 72 20  /// Disposes or 
2ce00 66 69 6e 61 6c 69 7a 65 73 20 74 68 69 73 20 6f  finalizes this o
2ce10 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
2ce20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2ce30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ce40 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2ce50 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20  ="disposing">.. 
2ce60 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a         /// Non-z
2ce70 65 72 6f 20 69 66 20 74 68 69 73 20 6f 62 6a 65  ero if this obje
2ce80 63 74 20 69 73 20 62 65 69 6e 67 20 64 69 73 70  ct is being disp
2ce90 6f 73 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c  osed; otherwise,
2cea0 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20   this object..  
2ceb0 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 62 65 69        /// is bei
2cec0 6e 67 20 66 69 6e 61 6c 69 7a 65 64 2e 0d 0a 20  ng finalized... 
2ced0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2cee0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  am>..        pri
2cef0 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65  vate /* protecte
2cf00 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69  d virtual */ voi
2cf10 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64  d Dispose(bool d
2cf20 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
2cf30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cf40 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
2cf50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cf60 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f        if (!dispo
2cf70 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
2cf80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2cfa0 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20  (disposing)..   
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2cfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d010 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73            // dis
2d020 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
2d030 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
2d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d050 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2d060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d090 20 20 20 20 20 20 20 20 69 66 20 28 69 74 65 72          if (iter
2d0a0 61 74 6f 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ator != null).. 
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0c0 20 20 20 20 20 20 20 20 20 20 20 69 74 65 72 61             itera
2d0d0 74 6f 72 20 3d 20 6e 75 6c 6c 3b 20 2f 2a 20 4e  tor = null; /* N
2d0e0 4f 54 20 4f 57 4e 45 44 20 2a 2f 0d 0a 20 20 20  OT OWNED */..   
2d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d100 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d110 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d150 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
2d160 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
2d170 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d190 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2d1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d1b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
2d1c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2d1d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d1e0 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
2d1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d210 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2d220 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65      // NOTE: Eve
2d230 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64 20 62  rything should b
2d240 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73 65 64  e fully disposed
2d250 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d   at this point..
2d260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d270 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2d280 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20       disposed = 
2d290 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2d2a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2d2b0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2d2c0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d310 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d320 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75    #region Destru
2d330 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ctor..        //
2d340 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2d350 20 20 20 20 20 2f 2f 2f 20 46 69 6e 61 6c 69 7a       /// Finaliz
2d360 65 73 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  es this object i
2d370 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
2d380 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2d390 0d 0a 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74  ..        ~SQLit
2d3a0 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61  eChangeSetMetada
2d3b0 74 61 49 74 65 6d 28 29 0d 0a 20 20 20 20 20 20  taItem()..      
2d3c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d3d0 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
2d3e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2d3f0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2d400 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
2d410 72 65 67 69 6f 6e 0d 0a 7d 0d 0a                 region..}..