System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ff80a8f8e1fce64f8fce2a13ec03bb56f75da2a9:


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 75 73 69 6e  s.Generic;..usin
0160: 67 20 53 79 73 74 65 6d 2e 49 4f 3b 0d 0a 75 73  g System.IO;..us
0170: 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61  ing System.Globa
0180: 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 75 73 69 6e 67  lization;..using
0190: 20 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 2e   System.Runtime.
01a0: 49 6e 74 65 72 6f 70 53 65 72 76 69 63 65 73 3b  InteropServices;
01b0: 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20 53 79  ....namespace Sy
01c0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
01d0: 0d 0a 7b 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  ..{..    #region
01e0: 20 53 65 73 73 69 6f 6e 20 45 78 74 65 6e 73 69   Session Extensi
01f0: 6f 6e 20 45 6e 75 6d 65 72 61 74 69 6f 6e 73 0d  on Enumerations.
0200: 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  .    public enum
0210: 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74   SQLiteChangeSet
0220: 43 6f 6e 66 6c 69 63 74 54 79 70 65 0d 0a 20 20  ConflictType..  
0230: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 61 74    {..        Dat
0240: 61 20 3d 20 31 2c 0d 0a 20 20 20 20 20 20 20 20  a = 1,..        
0250: 4e 6f 74 46 6f 75 6e 64 20 3d 20 32 2c 0d 0a 20  NotFound = 2,.. 
0260: 20 20 20 20 20 20 20 43 6f 6e 66 6c 69 63 74 20         Conflict 
0270: 3d 20 33 2c 0d 0a 20 20 20 20 20 20 20 20 43 6f  = 3,..        Co
0280: 6e 73 74 72 61 69 6e 74 20 3d 20 34 2c 0d 0a 20  nstraint = 4,.. 
0290: 20 20 20 20 20 20 20 46 6f 72 65 69 67 6e 4b 65         ForeignKe
02a0: 79 20 3d 20 35 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  y = 5..    }....
02b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
02c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0300: 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e  ...    public en
0310: 75 6d 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53  um SQLiteChangeS
0320: 65 74 43 6f 6e 66 6c 69 63 74 52 65 73 75 6c 74  etConflictResult
0330: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
0340: 20 4f 6d 69 74 20 3d 20 30 2c 0d 0a 20 20 20 20   Omit = 0,..    
0350: 20 20 20 20 52 65 70 6c 61 63 65 20 3d 20 31 2c      Replace = 1,
0360: 0d 0a 20 20 20 20 20 20 20 20 41 62 6f 72 74 20  ..        Abort 
0370: 3d 20 32 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  = 2..    }..    
0380: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0390: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
03a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
03e0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 65 73  .    #region Ses
03f0: 73 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 44  sion Extension D
0400: 65 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 70 75  elegates..    pu
0410: 62 6c 69 63 20 64 65 6c 65 67 61 74 65 20 62 6f  blic delegate bo
0420: 6f 6c 20 53 65 73 73 69 6f 6e 54 61 62 6c 65 46  ol SessionTableF
0430: 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 28 0d 0a  ilterCallback(..
0440: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
0450: 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
0460: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d      string name.
0470: 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f  .    );....    /
0480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
04c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
04d0: 20 20 70 75 62 6c 69 63 20 64 65 6c 65 67 61 74    public delegat
04e0: 65 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65  e SQLiteChangeSe
04f0: 74 43 6f 6e 66 6c 69 63 74 52 65 73 75 6c 74 20  tConflictResult 
0500: 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 43  SessionConflictC
0510: 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
0520: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
0530: 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ata,..        SQ
0540: 4c 69 74 65 43 68 61 6e 67 65 53 65 74 43 6f 6e  LiteChangeSetCon
0550: 66 6c 69 63 74 54 79 70 65 20 74 79 70 65 2c 0d  flictType type,.
0560: 0a 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65  .        ISQLite
0570: 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74  ChangeSetMetadat
0580: 61 49 74 65 6d 20 69 74 65 6d 0d 0a 20 20 20 20  aItem item..    
0590: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
05a0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
05b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0600: 67 69 6f 6e 20 53 65 73 73 69 6f 6e 20 45 78 74  gion Session Ext
0610: 65 6e 73 69 6f 6e 20 49 6e 74 65 72 66 61 63 65  ension Interface
0620: 73 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  s..    public in
0630: 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 43  terface ISQLiteC
0640: 68 61 6e 67 65 53 65 74 0d 0a 20 20 20 20 7b 0d  hangeSet..    {.
0650: 0a 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65  .        ISQLite
0660: 43 68 61 6e 67 65 53 65 74 20 49 6e 76 65 72 74  ChangeSet Invert
0670: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 49 53 51  ();..        ISQ
0680: 4c 69 74 65 43 68 61 6e 67 65 53 65 74 20 43 6f  LiteChangeSet Co
0690: 6d 62 69 6e 65 57 69 74 68 28 49 53 51 4c 69 74  mbineWith(ISQLit
06a0: 65 43 68 61 6e 67 65 53 65 74 20 63 68 61 6e 67  eChangeSet chang
06b0: 65 53 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  eSet);....      
06c0: 20 20 76 6f 69 64 20 41 70 70 6c 79 28 0d 0a 20    void Apply(.. 
06d0: 20 20 20 20 20 20 20 20 20 20 20 53 65 73 73 69             Sessi
06e0: 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61  onConflictCallba
06f0: 63 6b 20 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  ck conflictCallb
0700: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
0710: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
0720: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 29 3b 0d  ata..        );.
0730: 0a 0d 0a 20 20 20 20 20 20 20 20 76 6f 69 64 20  ...        void 
0740: 41 70 70 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  Apply(..        
0750: 20 20 20 20 53 65 73 73 69 6f 6e 43 6f 6e 66 6c      SessionConfl
0760: 69 63 74 43 61 6c 6c 62 61 63 6b 20 63 6f 6e 66  ictCallback conf
0770: 6c 69 63 74 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  lictCallback,.. 
0780: 20 20 20 20 20 20 20 20 20 20 20 53 65 73 73 69             Sessi
0790: 6f 6e 54 61 62 6c 65 46 69 6c 74 65 72 43 61 6c  onTableFilterCal
07a0: 6c 62 61 63 6b 20 74 61 62 6c 65 46 69 6c 74 65  lback tableFilte
07b0: 72 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  rCallback,..    
07c0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
07d0: 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20  lientData..     
07e0: 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a     );..    }....
07f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0840: 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  ...    public in
0850: 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 43  terface ISQLiteC
0860: 68 61 6e 67 65 47 72 6f 75 70 0d 0a 20 20 20 20  hangeGroup..    
0870: 7b 0d 0a 20 20 20 20 20 20 20 20 76 6f 69 64 20  {..        void 
0880: 41 64 64 43 68 61 6e 67 65 53 65 74 28 62 79 74  AddChangeSet(byt
0890: 65 5b 5d 20 72 61 77 44 61 74 61 29 3b 0d 0a 20  e[] rawData);.. 
08a0: 20 20 20 20 20 20 20 76 6f 69 64 20 41 64 64 43         void AddC
08b0: 68 61 6e 67 65 53 65 74 28 53 74 72 65 61 6d 20  hangeSet(Stream 
08c0: 73 74 72 65 61 6d 29 3b 0d 0a 0d 0a 20 20 20 20  stream);....    
08d0: 20 20 20 20 76 6f 69 64 20 43 72 65 61 74 65 43      void CreateC
08e0: 68 61 6e 67 65 53 65 74 28 72 65 66 20 62 79 74  hangeSet(ref byt
08f0: 65 5b 5d 20 72 61 77 44 61 74 61 29 3b 0d 0a 20  e[] rawData);.. 
0900: 20 20 20 20 20 20 20 76 6f 69 64 20 43 72 65 61         void Crea
0910: 74 65 43 68 61 6e 67 65 53 65 74 28 53 74 72 65  teChangeSet(Stre
0920: 61 6d 20 73 74 72 65 61 6d 29 3b 0d 0a 20 20 20  am stream);..   
0930: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
0940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 75 62  /////....    pub
0990: 6c 69 63 20 69 6e 74 65 72 66 61 63 65 20 49 53  lic interface IS
09a0: 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65  QLiteChangeSetMe
09b0: 74 61 64 61 74 61 49 74 65 6d 0d 0a 20 20 20 20  tadataItem..    
09c0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  {..        strin
09d0: 67 20 54 61 62 6c 65 4e 61 6d 65 20 7b 20 67 65  g TableName { ge
09e0: 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 6e  t; }..        in
09f0: 74 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e  t NumberOfColumn
0a00: 73 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20  s { get; }..    
0a10: 20 20 20 20 53 51 4c 69 74 65 41 75 74 68 6f 72      SQLiteAuthor
0a20: 69 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 20 4f  izerActionCode O
0a30: 70 65 72 61 74 69 6f 6e 43 6f 64 65 20 7b 20 67  perationCode { g
0a40: 65 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 62  et; }..        b
0a50: 6f 6f 6c 20 49 6e 64 69 72 65 63 74 20 7b 20 67  ool Indirect { g
0a60: 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20  et; }....       
0a70: 20 62 6f 6f 6c 5b 5d 20 50 72 69 6d 61 72 79 4b   bool[] PrimaryK
0a80: 65 79 43 6f 6c 75 6d 6e 73 20 7b 20 67 65 74 3b  eyColumns { get;
0a90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e   }....        in
0aa0: 74 20 4e 75 6d 62 65 72 4f 66 46 6f 72 65 69 67  t NumberOfForeig
0ab0: 6e 4b 65 79 43 6f 6e 66 6c 69 63 74 73 20 7b 20  nKeyConflicts { 
0ac0: 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20  get; }....      
0ad0: 20 20 53 51 4c 69 74 65 56 61 6c 75 65 20 47 65    SQLiteValue Ge
0ae0: 74 4f 6c 64 56 61 6c 75 65 28 69 6e 74 20 63 6f  tOldValue(int co
0af0: 6c 75 6d 6e 49 6e 64 65 78 29 3b 0d 0a 20 20 20  lumnIndex);..   
0b00: 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65       SQLiteValue
0b10: 20 47 65 74 4e 65 77 56 61 6c 75 65 28 69 6e 74   GetNewValue(int
0b20: 20 63 6f 6c 75 6d 6e 49 6e 64 65 78 29 3b 0d 0a   columnIndex);..
0b30: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61          SQLiteVa
0b40: 6c 75 65 20 47 65 74 43 6f 6e 66 6c 69 63 74 56  lue GetConflictV
0b50: 61 6c 75 65 28 69 6e 74 20 63 6f 6c 75 6d 6e 49  alue(int columnI
0b60: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
0b70: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 0d 0a 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69  ....    public i
0bd0: 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65  nterface ISQLite
0be0: 53 65 73 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a  Session..    {..
0bf0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 49 73 45          bool IsE
0c00: 6e 61 62 6c 65 64 28 29 3b 0d 0a 20 20 20 20 20  nabled();..     
0c10: 20 20 20 76 6f 69 64 20 53 65 74 54 6f 45 6e 61     void SetToEna
0c20: 62 6c 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  bled();..       
0c30: 20 76 6f 69 64 20 53 65 74 54 6f 44 69 73 61 62   void SetToDisab
0c40: 6c 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  led();....      
0c50: 20 20 62 6f 6f 6c 20 49 73 49 6e 64 69 72 65 63    bool IsIndirec
0c60: 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 76 6f  t();..        vo
0c70: 69 64 20 53 65 74 54 6f 49 6e 64 69 72 65 63 74  id SetToIndirect
0c80: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 76 6f 69  ();..        voi
0c90: 64 20 53 65 74 54 6f 44 69 72 65 63 74 28 29 3b  d SetToDirect();
0ca0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  ....        bool
0cb0: 20 49 73 45 6d 70 74 79 28 29 3b 0d 0a 0d 0a 20   IsEmpty();.... 
0cc0: 20 20 20 20 20 20 20 76 6f 69 64 20 41 74 74 61         void Atta
0cd0: 63 68 54 61 62 6c 65 28 73 74 72 69 6e 67 20 6e  chTable(string n
0ce0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
0cf0: 20 76 6f 69 64 20 53 65 74 54 61 62 6c 65 46 69   void SetTableFi
0d00: 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  lter(..         
0d10: 20 20 20 53 65 73 73 69 6f 6e 54 61 62 6c 65 46     SessionTableF
0d20: 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 20 63 61  ilterCallback ca
0d30: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
0d40: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
0d50: 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ntData..        
0d60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 76 6f  );....        vo
0d70: 69 64 20 43 72 65 61 74 65 43 68 61 6e 67 65 53  id CreateChangeS
0d80: 65 74 28 72 65 66 20 62 79 74 65 5b 5d 20 72 61  et(ref byte[] ra
0d90: 77 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20  wData);..       
0da0: 20 76 6f 69 64 20 43 72 65 61 74 65 43 68 61 6e   void CreateChan
0db0: 67 65 53 65 74 28 53 74 72 65 61 6d 20 73 74 72  geSet(Stream str
0dc0: 65 61 6d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  eam);....       
0dd0: 20 76 6f 69 64 20 43 72 65 61 74 65 50 61 74 63   void CreatePatc
0de0: 68 53 65 74 28 72 65 66 20 62 79 74 65 5b 5d 20  hSet(ref byte[] 
0df0: 72 61 77 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  rawData);..     
0e00: 20 20 20 76 6f 69 64 20 43 72 65 61 74 65 50 61     void CreatePa
0e10: 74 63 68 53 65 74 28 53 74 72 65 61 6d 20 73 74  tchSet(Stream st
0e20: 72 65 61 6d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ream);....      
0e30: 20 20 76 6f 69 64 20 4c 6f 61 64 44 69 66 66 65    void LoadDiffe
0e40: 72 65 6e 63 65 73 46 72 6f 6d 54 61 62 6c 65 28  rencesFromTable(
0e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
0e60: 72 69 6e 67 20 66 72 6f 6d 44 61 74 61 62 61 73  ring fromDatabas
0e70: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
0e80: 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c 65      string table
0e90: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29 3b  Name..        );
0ea0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
0eb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0f10: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
0f20: 43 68 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f  ChangeSetIterato
0f30: 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 69 6e 74  r Class..    int
0f40: 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61  ernal sealed cla
0f50: 73 73 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53  ss SQLiteChangeS
0f60: 65 74 49 74 65 72 61 74 6f 72 20 3a 20 49 44 69  etIterator : IDi
0f70: 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 7b 0d  sposable..    {.
0f80: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
0f90: 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20   Private Data.. 
0fa0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
0fb0: 6e 74 50 74 72 20 70 44 61 74 61 3b 0d 0a 20 20  ntPtr pData;..  
0fc0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e        private In
0fd0: 74 50 74 72 20 69 74 65 72 61 74 6f 72 3b 0d 0a  tPtr iterator;..
0fe0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
0ff0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1050: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
1060: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
1070: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
1080: 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 49 74  QLiteChangeSetIt
1090: 65 72 61 74 6f 72 28 0d 0a 20 20 20 20 20 20 20  erator(..       
10a0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 61 74       IntPtr pDat
10b0: 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
10c0: 49 6e 74 50 74 72 20 69 74 65 72 61 74 6f 72 0d  IntPtr iterator.
10d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
10e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10f0: 20 20 20 20 20 20 20 74 68 69 73 2e 70 44 61 74         this.pDat
1100: 61 20 3d 20 70 44 61 74 61 3b 0d 0a 20 20 20 20  a = pData;..    
1110: 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 74 65          this.ite
1120: 72 61 74 6f 72 20 3d 20 69 74 65 72 61 74 6f 72  rator = iterator
1130: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1140: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
11b0: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d  region Private M
11c0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
11d0: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
11e0: 63 6b 48 61 6e 64 6c 65 28 29 0d 0a 20 20 20 20  ckHandle()..    
11f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1200: 20 20 20 69 66 20 28 69 74 65 72 61 74 6f 72 20     if (iterator 
1210: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
1220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1230: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1240: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1250: 74 69 6f 6e 28 22 69 74 65 72 61 74 6f 72 20 69  tion("iterator i
1260: 73 20 6e 6f 74 20 6f 70 65 6e 22 29 3b 0d 0a 20  s not open");.. 
1270: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1280: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1290: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
12e0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
12f0: 6f 6e 20 53 74 61 74 69 63 20 22 46 61 63 74 6f  on Static "Facto
1300: 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ry" Methods..   
1310: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1320: 69 63 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53  ic SQLiteChangeS
1330: 65 74 49 74 65 72 61 74 6f 72 20 43 72 65 61 74  etIterator Creat
1340: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1350: 62 79 74 65 5b 5d 20 72 61 77 44 61 74 61 0d 0a  byte[] rawData..
1360: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1370: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1380: 20 20 20 20 20 20 69 66 20 28 72 61 77 44 61 74        if (rawDat
1390: 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  a == null)..    
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
13b0: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
13c0: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 72 61 77  llException("raw
13d0: 44 61 74 61 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Data");....     
13e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 68 61         SQLiteCha
13f0: 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 20 72  ngeSetIterator r
1400: 65 73 75 6c 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  esult = null;.. 
1410: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1420: 72 20 70 44 61 74 61 20 3d 20 49 6e 74 50 74 72  r pData = IntPtr
1430: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
1440: 20 20 20 20 49 6e 74 50 74 72 20 69 74 65 72 61      IntPtr itera
1450: 74 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tor = IntPtr.Zer
1460: 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
1470: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
1480: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1490: 20 20 20 20 20 20 69 6e 74 20 6e 44 61 74 61 20        int nData 
14a0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
14b0: 20 20 20 20 20 20 20 20 70 44 61 74 61 20 3d 20          pData = 
14c0: 53 51 4c 69 74 65 42 79 74 65 73 2e 54 6f 49 6e  SQLiteBytes.ToIn
14d0: 74 50 74 72 28 72 61 77 44 61 74 61 2c 20 72 65  tPtr(rawData, re
14e0: 66 20 6e 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20  f nData);....   
14f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1500: 28 70 44 61 74 61 20 3d 3d 20 49 6e 74 50 74 72  (pData == IntPtr
1510: 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
1520: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1530: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
1540: 70 74 69 6f 6e 28 53 51 4c 69 74 65 45 72 72 6f  ption(SQLiteErro
1550: 72 43 6f 64 65 2e 4e 6f 4d 65 6d 2c 20 6e 75 6c  rCode.NoMem, nul
1560: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
1570: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1580: 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61  orCode rc = Unsa
1590: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
15a0: 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74  sqlite3changeset
15b0: 5f 73 74 61 72 74 28 0d 0a 20 20 20 20 20 20 20  _start(..       
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
15d0: 20 69 74 65 72 61 74 6f 72 2c 20 6e 44 61 74 61   iterator, nData
15e0: 2c 20 70 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20  , pData);....   
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1600: 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
1610: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
1640: 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 22 73  Exception(rc, "s
1650: 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f  qlite3changeset_
1660: 73 74 61 72 74 22 29 3b 0d 0a 0d 0a 20 20 20 20  start");....    
1670: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1680: 6c 74 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  lt = new SQLiteC
1690: 68 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72  hangeSetIterator
16a0: 28 70 44 61 74 61 2c 20 69 74 65 72 61 74 6f 72  (pData, iterator
16b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
16c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
16d0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
16e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16f0: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
1700: 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
1710: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1730: 20 20 20 69 66 20 28 69 74 65 72 61 74 6f 72 20     if (iterator 
1740: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
1750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1760: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1780: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1790: 6f 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67  ods.sqlite3chang
17a0: 65 73 65 74 5f 66 69 6e 61 6c 69 7a 65 28 0d 0a  eset_finalize(..
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65 72              iter
17d0: 61 74 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ator);....      
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 69 74 65 72 61 74 6f 72 20 3d 20 49 6e 74    iterator = Int
1800: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1830: 20 20 20 20 20 20 20 20 69 66 20 28 70 44 61 74          if (pDat
1840: 61 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  a != IntPtr.Zero
1850: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1860: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
1890: 72 65 65 28 70 44 61 74 61 29 3b 0d 0a 20 20 20  ree(pData);..   
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 20 20 20 20 70 44 61 74 61 20 3d 20 49 6e 74       pData = Int
18c0: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1900: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1910: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
1920: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
1930: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1980: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
1990: 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 43 68   static SQLiteCh
19a0: 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 20  angeSetIterator 
19b0: 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20  Create(..       
19c0: 20 20 20 20 20 53 74 72 65 61 6d 20 73 74 72 65       Stream stre
19d0: 61 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am,..           
19e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
19f0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
1a00: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1a10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a20: 20 20 20 20 69 66 20 28 73 74 72 65 61 6d 20 3d      if (stream =
1a30: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1a40: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1a50: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
1a60: 78 63 65 70 74 69 6f 6e 28 22 73 74 72 65 61 6d  xception("stream
1a70: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
1a80: 20 20 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53     SQLiteChangeS
1a90: 65 74 49 74 65 72 61 74 6f 72 20 72 65 73 75 6c  etIterator resul
1aa0: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  t = null;..     
1ab0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 74         IntPtr it
1ac0: 65 72 61 74 6f 72 20 3d 20 49 6e 74 50 74 72 2e  erator = IntPtr.
1ad0: 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
1ae0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1af0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b00: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
1b10: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
1b20: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1b30: 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73  s.sqlite3changes
1b40: 65 74 5f 73 74 61 72 74 5f 73 74 72 6d 28 0d 0a  et_start_strm(..
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b60: 20 20 20 20 72 65 66 20 69 74 65 72 61 74 6f 72      ref iterator
1b70: 2c 20 6e 65 77 20 53 51 4c 69 74 65 53 74 72 65  , new SQLiteStre
1b80: 61 6d 41 64 61 70 74 65 72 28 73 74 72 65 61 6d  amAdapter(stream
1b90: 2c 20 66 6c 61 67 73 29 2e 78 49 6e 70 75 74 2c  , flags).xInput,
1ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb0: 20 20 20 20 20 20 49 6e 74 50 74 72 2e 5a 65 72        IntPtr.Zer
1bc0: 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  o);....         
1bd0: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d         if (rc !=
1be0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1bf0: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
1c00: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
1c10: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
1c20: 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69 74 65 33  ion(rc, "sqlite3
1c30: 63 68 61 6e 67 65 73 65 74 5f 73 74 61 72 74 5f  changeset_start_
1c40: 73 74 72 6d 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  strm");....     
1c50: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1c60: 74 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 68  t = new SQLiteCh
1c70: 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 28  angeSetIterator(
1c80: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 69 74 65  IntPtr.Zero, ite
1c90: 72 61 74 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  rator);..       
1ca0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1cb0: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
1cc0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1cd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ce0: 72 65 73 75 6c 74 20 3d 3d 20 6e 75 6c 6c 29 0d  result == null).
1cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d10: 20 20 20 20 20 20 20 20 69 66 20 28 69 74 65 72          if (iter
1d20: 61 74 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  ator != IntPtr.Z
1d30: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
1d40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1d70: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1d80: 63 68 61 6e 67 65 73 65 74 5f 66 69 6e 61 6c 69  changeset_finali
1d90: 7a 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ze(..           
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db0: 20 69 74 65 72 61 74 6f 72 29 3b 0d 0a 0d 0a 20   iterator);.... 
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd0: 20 20 20 20 20 20 20 69 74 65 72 61 74 6f 72 20         iterator 
1de0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1e20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
1e40: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
1e50: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1e60: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ec0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
1ed0: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
1ee0: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 4e     public void N
1ef0: 65 78 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ext()..        {
1f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
1f10: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
1f30: 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20  kHandle();....  
1f40: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1f50: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
1f60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1f70: 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65  ds.sqlite3change
1f80: 73 65 74 5f 6e 65 78 74 28 0d 0a 20 20 20 20 20  set_next(..     
1f90: 20 20 20 20 20 20 20 20 20 20 20 69 74 65 72 61             itera
1fa0: 74 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tor);....       
1fb0: 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53       if (rc != S
1fc0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
1fd0: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
1fe0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
1ff0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63  LiteException(rc
2000: 2c 20 22 73 71 6c 69 74 65 33 63 68 61 6e 67 65  , "sqlite3change
2010: 73 65 74 5f 6e 65 78 74 22 29 3b 0d 0a 20 20 20  set_next");..   
2020: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2030: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2040: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2090: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
20a0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d   IDisposable Mem
20b0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75  bers..        pu
20c0: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
20d0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
20f0: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
2100: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
2110: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
2120: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
2130: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2140: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
2150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2190: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21a0: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
21b0: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
21c0: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70  mbers..        p
21d0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
21e0: 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 70  osed;..        p
21f0: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
2200: 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
2210: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
2220: 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e   {..#if THROW_ON
2230: 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20  _DISPOSED..     
2240: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
2250: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
2260: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2270: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f       throw new O
2280: 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63  bjectDisposedExc
2290: 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
22b0: 65 6f 66 28 53 51 4c 69 74 65 43 68 61 6e 67 65  eof(SQLiteChange
22c0: 53 65 74 49 74 65 72 61 74 6f 72 29 2e 4e 61 6d  SetIterator).Nam
22d0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
22e0: 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20   }..#endif..    
22f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2300: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2350: 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70      private /* p
2360: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
2370: 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65   */ void Dispose
2380: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
2390: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23a0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
23b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23d0: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2400: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
2410: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
2420: 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20            //{.. 
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2440: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70     //    // disp
2490: 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
24a0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2500: 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20     //}....      
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2540: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
2550: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c            // rel
2560: 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72  ease unmanaged r
2570: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
2580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2590: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d0: 20 20 20 20 69 66 20 28 69 74 65 72 61 74 6f 72      if (iterator
25e0: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
25f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2600: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2620: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
2630: 68 6f 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e  hods.sqlite3chan
2640: 67 65 73 65 74 5f 66 69 6e 61 6c 69 7a 65 28 0d  geset_finalize(.
2650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2660: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65               ite
2670: 72 61 74 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  rator);....     
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2690: 20 20 20 69 74 65 72 61 74 6f 72 20 3d 20 49 6e     iterator = In
26a0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 44 61           if (pDa
26e0: 74 61 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ta != IntPtr.Zer
26f0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
2700: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2720: 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e     SQLiteMemory.
2730: 46 72 65 65 28 70 44 61 74 61 29 3b 0d 0a 20 20  Free(pData);..  
2740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2750: 20 20 20 20 20 20 70 44 61 74 61 20 3d 20 49 6e        pData = In
2760: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
2770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2780: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2790: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
27b0: 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20   finally..      
27c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27d0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
27f0: 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67  NOTE: Everything
2800: 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79   should be fully
2810: 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69   disposed at thi
2820: 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20  s point...      
2830: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2850: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
2860: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2870: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2880: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2890: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28e0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
28f0: 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20  on Destructor.. 
2900: 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65 43 68         ~SQLiteCh
2910: 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 28  angeSetIterator(
2920: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2930: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
2940: 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  e(false);..     
2950: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2960: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d  ndregion..    }.
2970: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
2980: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
2990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d0: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
29e0: 6e 20 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64  n SQLiteStreamAd
29f0: 61 70 74 65 72 20 43 6c 61 73 73 0d 0a 20 20 20  apter Class..   
2a00: 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64   internal sealed
2a10: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 53 74 72   class SQLiteStr
2a20: 65 61 6d 41 64 61 70 74 65 72 20 3a 20 49 44 69  eamAdapter : IDi
2a30: 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 7b 0d  sposable..    {.
2a40: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2a50: 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20   Private Data.. 
2a60: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
2a70: 74 72 65 61 6d 20 73 74 72 65 61 6d 3b 0d 0a 20  tream stream;.. 
2a80: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
2a90: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
2aa0: 6c 61 67 73 20 66 6c 61 67 73 3b 0d 0a 20 20 20  lags flags;..   
2ab0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b10: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2b20: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
2b30: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
2b40: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2b50: 53 74 72 65 61 6d 41 64 61 70 74 65 72 28 0d 0a  StreamAdapter(..
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 65              Stre
2b70: 61 6d 20 73 74 72 65 61 6d 2c 0d 0a 20 20 20 20  am stream,..    
2b80: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
2b90: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
2ba0: 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ags..           
2bb0: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2bc0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
2bd0: 73 74 72 65 61 6d 20 3d 20 73 74 72 65 61 6d 3b  stream = stream;
2be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
2bf0: 69 73 2e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  is.flags = flags
2c00: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2c10: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2c20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c70: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2c80: 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 43 61  region Native Ca
2c90: 6c 6c 62 61 63 6b 20 4d 65 74 68 6f 64 73 0d 0a  llback Methods..
2ca0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2cb0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2cc0: 49 6e 70 75 74 28 0d 0a 20 20 20 20 20 20 20 20  Input(..        
2cd0: 20 20 20 20 49 6e 74 50 74 72 20 63 6f 6e 74 65      IntPtr conte
2ce0: 78 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt,..           
2cf0: 20 49 6e 74 50 74 72 20 70 44 61 74 61 2c 0d 0a   IntPtr pData,..
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2d10: 69 6e 74 20 6e 44 61 74 61 0d 0a 20 20 20 20 20  int nData..     
2d20: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2d30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d40: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
2d50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d60: 20 20 20 20 20 69 66 20 28 73 74 72 65 61 6d 20       if (stream 
2d70: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d90: 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
2da0: 43 6f 64 65 2e 4d 69 73 75 73 65 3b 0d 0a 0d 0a  Code.Misuse;....
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc0: 69 66 20 28 6e 44 61 74 61 20 3e 20 30 29 0d 0a  if (nData > 0)..
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2df0: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79         byte[] by
2e00: 74 65 73 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e  tes = new byte[n
2e10: 44 61 74 61 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data];....      
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 44                nD
2e30: 61 74 61 20 3d 20 73 74 72 65 61 6d 2e 52 65 61  ata = stream.Rea
2e40: 64 28 62 79 74 65 73 2c 20 30 2c 20 6e 44 61 74  d(bytes, 0, nDat
2e50: 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a);..           
2e60: 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
2e70: 2e 43 6f 70 79 28 62 79 74 65 73 2c 20 30 2c 20  .Copy(bytes, 0, 
2e80: 70 44 61 74 61 2c 20 6e 44 61 74 61 29 3b 0d 0a  pData, nData);..
2e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2eb0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
2ec0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
2ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2ef0: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
2f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f20: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
2f30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f50: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
2f60: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
2f70: 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74  ogCallbackExcept
2f80: 69 6f 6e 29 20 3d 3d 0d 0a 20 20 20 20 20 20 20  ion) ==..       
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
2fb0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61  ctionFlags.LogCa
2fc0: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29  llbackException)
2fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fe0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3000: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
3010: 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65  ssage(SQLiteBase
3020: 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e  .COR_E_EXCEPTION
3030: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
3050: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
3060: 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ingFormat(Cultur
3070: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
3080: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a0: 20 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70     "Caught excep
30b0: 74 69 6f 6e 20 69 6e 20 5c 22 78 49 6e 70 75 74  tion in \"xInput
30c0: 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c  \" method: {0}",
30d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29                e)
30f0: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
3100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3110: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3120: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3130: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
3140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3160: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
3170: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
3180: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3190: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
31b0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49  QLiteErrorCode.I
31c0: 6f 45 72 72 5f 52 65 61 64 3b 0d 0a 20 20 20 20  oErr_Read;..    
31d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
3230: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
3240: 65 45 72 72 6f 72 43 6f 64 65 20 78 4f 75 74 70  eErrorCode xOutp
3250: 75 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ut(..           
3260: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c   IntPtr context,
3270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
3280: 74 50 74 72 20 70 44 61 74 61 2c 0d 0a 20 20 20  tPtr pData,..   
3290: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 44 61           int nDa
32a0: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
32b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
32c0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
32d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32f0: 20 28 73 74 72 65 61 6d 20 3d 3d 20 6e 75 6c 6c   (stream == null
3300: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3310: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
3320: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4d 69  LiteErrorCode.Mi
3330: 73 75 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  suse;....       
3340: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 44 61           if (nDa
3350: 74 61 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  ta > 0)..       
3360: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3380: 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e  byte[] bytes = n
3390: 65 77 20 62 79 74 65 5b 6e 44 61 74 61 5d 3b 0d  ew byte[nData];.
33a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33b0: 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
33c0: 6f 70 79 28 70 44 61 74 61 2c 20 62 79 74 65 73  opy(pData, bytes
33d0: 2c 20 30 2c 20 6e 44 61 74 61 29 3b 0d 0a 20 20  , 0, nData);..  
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f0: 20 20 73 74 72 65 61 6d 2e 57 72 69 74 65 28 62    stream.Write(b
3400: 79 74 65 73 2c 20 30 2c 20 6e 44 61 74 61 29 3b  ytes, 0, nData);
3410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3420: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3430: 20 20 20 20 20 20 20 73 74 72 65 61 6d 2e 46 6c         stream.Fl
3440: 75 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ush();....      
3450: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3460: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3470: 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok;..          
3480: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3490: 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
34a0: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
34b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34c0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
34d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
3500: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3510: 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45  ags.LogCallbackE
3520: 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20 20  xception) ==..  
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
3550: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
3560: 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70  LogCallbackExcep
3570: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
3580: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
35b0: 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74  LogMessage(SQLit
35c0: 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45  eBase.COR_E_EXCE
35d0: 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20  PTION,..        
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f0: 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64      HelperMethod
3600: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43  s.StringFormat(C
3610: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
3620: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
3630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3640: 20 20 20 20 20 20 20 20 22 43 61 75 67 68 74 20          "Caught 
3650: 65 78 63 65 70 74 69 6f 6e 20 69 6e 20 5c 22 78  exception in \"x
3660: 4f 75 74 70 75 74 5c 22 20 6d 65 74 68 6f 64 3a  Output\" method:
3670: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
3680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3690: 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f      e)); /* thro
36a0: 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
36b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e0: 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
36f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3710: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3750: 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
3760: 43 6f 64 65 2e 49 6f 45 72 72 5f 57 72 69 74 65  Code.IoErr_Write
3770: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
3780: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
3790: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
37a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
37f0: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
3800: 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
3810: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
3820: 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
3830: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3840: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
3850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 43  ..            GC
3860: 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a  .SuppressFinaliz
3870: 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20  e(this);..      
3880: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
3890: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
38a0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
38f0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
3900: 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
3910: 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
3920: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
3930: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
3940: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
3950: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
3960: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
3970: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
3980: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
39a0: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
39b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
39c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
39d0: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
39e0: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a00: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
3a10: 53 74 72 65 61 6d 41 64 61 70 74 65 72 29 2e 4e  StreamAdapter).N
3a20: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
3a30: 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20     }..#endif..  
3a40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3a50: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3aa0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a        private /*
3ab0: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
3ac0: 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f  al */ void Dispo
3ad0: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
3ae0: 67 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  g)..        {.. 
3af0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3b20: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
3b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3b50: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
3b60: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
3b70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b90: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
3ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bd0: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
3be0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
3bf0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c50: 20 69 66 20 28 73 74 72 65 61 6d 20 21 3d 20 6e   if (stream != n
3c60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c80: 20 20 73 74 72 65 61 6d 20 3d 20 6e 75 6c 6c 3b    stream = null;
3c90: 20 2f 2a 20 4e 4f 54 20 4f 57 4e 45 44 20 2a 2f   /* NOT OWNED */
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3cb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cf0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
3d00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
3d10: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
3d20: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
3d30: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3d40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
3da0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
3db0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3dc0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3dd0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
3de0: 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f  : Everything sho
3df0: 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73  uld be fully dis
3e00: 70 6f 73 65 64 20 61 74 20 74 68 69 73 20 70 6f  posed at this po
3e10: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  int...          
3e20: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3e30: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
3e40: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
3e50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3e60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
3e70: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
3e80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3ed0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
3ee0: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
3ef0: 20 20 20 7e 53 51 4c 69 74 65 53 74 72 65 61 6d     ~SQLiteStream
3f00: 41 64 61 70 74 65 72 28 29 0d 0a 20 20 20 20 20  Adapter()..     
3f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3f20: 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
3f30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
3f40: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
3f50: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
3f60: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
3f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3fc0: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
3fd0: 53 65 73 73 69 6f 6e 20 43 6c 61 73 73 0d 0a 20  Session Class.. 
3fe0: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
3ff0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 53 65 73   class SQLiteSes
4000: 73 69 6f 6e 20 3a 20 49 53 51 4c 69 74 65 53 65  sion : ISQLiteSe
4010: 73 73 69 6f 6e 2c 20 49 44 69 73 70 6f 73 61 62  ssion, IDisposab
4020: 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  le..    {..     
4030: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
4040: 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  te Data..       
4050: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 43   private SQLiteC
4060: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
4070: 68 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20  handle;..       
4080: 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 43   private SQLiteC
4090: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
40a0: 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 70  lags;..        p
40b0: 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 61  rivate string da
40c0: 74 61 62 61 73 65 4e 61 6d 65 3b 0d 0a 20 20 20  tabaseName;..   
40d0: 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74       private Int
40e0: 50 74 72 20 73 65 73 73 69 6f 6e 3b 0d 0a 0d 0a  Ptr session;....
40f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4140: 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
4150: 74 65 20 53 65 73 73 69 6f 6e 54 61 62 6c 65 46  te SessionTableF
4160: 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 20 74 61  ilterCallback ta
4170: 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63  bleFilterCallbac
4180: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  k;..        priv
4190: 61 74 65 20 6f 62 6a 65 63 74 20 74 61 62 6c 65  ate object table
41a0: 46 69 6c 74 65 72 43 6c 69 65 6e 74 44 61 74 61  FilterClientData
41b0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
41c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
41d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
41e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4210: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4220: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
4230: 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
4240: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
4250: 61 6c 20 53 51 4c 69 74 65 53 65 73 73 69 6f 6e  al SQLiteSession
4260: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
4270: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
4280: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 0d 0a 20  andle handle,.. 
4290: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
42a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
42b0: 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20   flags,..       
42c0: 20 20 20 20 20 73 74 72 69 6e 67 20 64 61 74 61       string data
42d0: 62 61 73 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  baseName..      
42e0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
42f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4300: 74 68 69 73 2e 68 61 6e 64 6c 65 20 3d 20 68 61  this.handle = ha
4310: 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  ndle;..         
4320: 20 20 20 74 68 69 73 2e 66 6c 61 67 73 20 3d 20     this.flags = 
4330: 66 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  flags;..        
4340: 20 20 20 20 74 68 69 73 2e 64 61 74 61 62 61 73      this.databas
4350: 65 4e 61 6d 65 20 3d 20 64 61 74 61 62 61 73 65  eName = database
4360: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
4370: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
4380: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4390: 73 65 73 73 69 6f 6e 5f 63 72 65 61 74 65 28 0d  session_create(.
43a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
43b0: 20 68 61 6e 64 6c 65 2c 20 53 51 4c 69 74 65 53   handle, SQLiteS
43c0: 74 72 69 6e 67 2e 47 65 74 55 74 66 38 42 79 74  tring.GetUtf8Byt
43d0: 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 64 61 74  esFromString(dat
43e0: 61 62 61 73 65 4e 61 6d 65 29 2c 0d 0a 20 20 20  abaseName),..   
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
4400: 20 73 65 73 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   session);..    
4410: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
4420: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
4430: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4480: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
4490: 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d  Private Methods.
44a0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
44b0: 20 76 6f 69 64 20 43 68 65 63 6b 48 61 6e 64 6c   void CheckHandl
44c0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e()..        {..
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
44e0: 73 65 73 73 69 6f 6e 20 3d 3d 20 49 6e 74 50 74  session == IntPt
44f0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
4500: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
4510: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
4520: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 73 65  ionException("se
4530: 73 73 69 6f 6e 20 69 73 20 6e 6f 74 20 6f 70 65  ssion is not ope
4540: 6e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n");..        }.
4550: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
4560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
45b0: 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 43 61 6c  egion Native Cal
45c0: 6c 62 61 63 6b 20 4d 65 74 68 6f 64 73 0d 0a 20  lback Methods.. 
45d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 69         private i
45e0: 6e 74 20 78 46 69 6c 74 65 72 28 0d 0a 20 20 20  nt xFilter(..   
45f0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
4600: 63 6f 6e 74 65 78 74 2c 20 2f 2a 20 4e 4f 54 20  context, /* NOT 
4610: 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20  USED */..       
4620: 20 20 20 20 20 62 79 74 65 5b 5d 20 74 62 6c 4e       byte[] tblN
4630: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
4640: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
4650: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4660: 6e 20 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c  n tableFilterCal
4670: 6c 62 61 63 6b 28 74 61 62 6c 65 46 69 6c 74 65  lback(tableFilte
4680: 72 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20  rClientData,..  
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
46a0: 4c 69 74 65 53 74 72 69 6e 67 2e 47 65 74 53 74  LiteString.GetSt
46b0: 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65  ringFromUtf8Byte
46c0: 73 28 74 62 6c 4e 61 6d 65 29 29 20 3f 20 31 20  s(tblName)) ? 1 
46d0: 3a 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  : 0;..        }.
46e0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
46f0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
4700: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
4710: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4760: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53        #region IS
4770: 51 4c 69 74 65 53 65 73 73 69 6f 6e 20 4d 65 6d  QLiteSession Mem
4780: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75  bers..        pu
4790: 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45 6e 61 62  blic bool IsEnab
47a0: 6c 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  led()..        {
47b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
47c0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
47d0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
47e0: 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20  kHandle();....  
47f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4800: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4810: 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73  hods.sqlite3sess
4820: 69 6f 6e 5f 65 6e 61 62 6c 65 28 73 65 73 73 69  ion_enable(sessi
4830: 6f 6e 2c 20 2d 31 29 20 21 3d 20 30 3b 0d 0a 20  on, -1) != 0;.. 
4840: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4850: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
48a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
48b0: 69 64 20 53 65 74 54 6f 45 6e 61 62 6c 65 64 28  id SetToEnabled(
48c0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
48d0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
48e0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
48f0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 48 61 6e          CheckHan
4900: 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dle();....      
4910: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
4920: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4930: 33 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28  3session_enable(
4940: 73 65 73 73 69 6f 6e 2c 20 31 29 3b 0d 0a 20 20  session, 1);..  
4950: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4960: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
49b0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
49c0: 64 20 53 65 74 54 6f 44 69 73 61 62 6c 65 64 28  d SetToDisabled(
49d0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
49e0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
49f0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
4a00: 20 20 20 20 20 20 20 20 43 68 65 63 6b 48 61 6e          CheckHan
4a10: 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dle();....      
4a20: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
4a30: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4a40: 33 73 65 73 73 69 6f 6e 5f 65 6e 61 62 6c 65 28  3session_enable(
4a50: 73 65 73 73 69 6f 6e 2c 20 30 29 3b 0d 0a 20 20  session, 0);..  
4a60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4a70: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4ac0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
4ad0: 6c 20 49 73 49 6e 64 69 72 65 63 74 28 29 0d 0a  l IsIndirect()..
4ae0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4af0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
4b00: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
4b10: 20 20 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65       CheckHandle
4b20: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
4b30: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
4b40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4b50: 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f 69 6e 64  lite3session_ind
4b60: 69 72 65 63 74 28 73 65 73 73 69 6f 6e 2c 20 2d  irect(session, -
4b70: 31 29 20 21 3d 20 30 3b 0d 0a 20 20 20 20 20 20  1) != 0;..      
4b80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4be0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
4bf0: 74 54 6f 49 6e 64 69 72 65 63 74 28 29 0d 0a 20  tToIndirect().. 
4c00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4c10: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
4c20: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
4c30: 20 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28      CheckHandle(
4c40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4c50: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
4c60: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73  thods.sqlite3ses
4c70: 73 69 6f 6e 5f 69 6e 64 69 72 65 63 74 28 73 65  sion_indirect(se
4c80: 73 73 69 6f 6e 2c 20 31 29 3b 0d 0a 20 20 20 20  ssion, 1);..    
4c90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4ca0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ce0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4cf0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
4d00: 53 65 74 54 6f 44 69 72 65 63 74 28 29 0d 0a 20  SetToDirect().. 
4d10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4d20: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
4d30: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
4d40: 20 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28      CheckHandle(
4d50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4d60: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
4d70: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73  thods.sqlite3ses
4d80: 73 69 6f 6e 5f 69 6e 64 69 72 65 63 74 28 73 65  sion_indirect(se
4d90: 73 73 69 6f 6e 2c 20 30 29 3b 0d 0a 20 20 20 20  ssion, 0);..    
4da0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4db0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4df0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4e00: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
4e10: 49 73 45 6d 70 74 79 28 29 0d 0a 20 20 20 20 20  IsEmpty()..     
4e20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4e30: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
4e40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4e50: 43 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a  CheckHandle();..
4e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4e70: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
4e80: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
4e90: 73 65 73 73 69 6f 6e 5f 69 73 65 6d 70 74 79 28  session_isempty(
4ea0: 73 65 73 73 69 6f 6e 29 20 21 3d 20 30 3b 0d 0a  session) != 0;..
4eb0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4ec0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4f10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
4f20: 6f 69 64 20 41 74 74 61 63 68 54 61 62 6c 65 28  oid AttachTable(
4f30: 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20  string name)..  
4f40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4f50: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
4f60: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
4f70: 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29     CheckHandle()
4f80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4f90: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4fa0: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
4fb0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4fc0: 33 73 65 73 73 69 6f 6e 5f 61 74 74 61 63 68 28  3session_attach(
4fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4fe0: 20 20 73 65 73 73 69 6f 6e 2c 20 53 51 4c 69 74    session, SQLit
4ff0: 65 53 74 72 69 6e 67 2e 47 65 74 55 74 66 38 42  eString.GetUtf8B
5000: 79 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 6e  ytesFromString(n
5010: 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame));....      
5020: 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20        if (rc != 
5030: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
5040: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
5050: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
5060: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72  QLiteException(r
5070: 63 2c 20 22 73 71 6c 69 74 65 33 73 65 73 73 69  c, "sqlite3sessi
5080: 6f 6e 5f 61 74 74 61 63 68 22 29 3b 0d 0a 20 20  on_attach");..  
5090: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
50a0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
50f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
5100: 64 20 53 65 74 54 61 62 6c 65 46 69 6c 74 65 72  d SetTableFilter
5110: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
5120: 65 73 73 69 6f 6e 54 61 62 6c 65 46 69 6c 74 65  essionTableFilte
5130: 72 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  rCallback callba
5140: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
5150: 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
5160: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
5170: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5180: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
5190: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
51a0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 48 61 6e          CheckHan
51b0: 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dle();....      
51c0: 20 20 20 20 20 20 74 68 69 73 2e 74 61 62 6c 65        this.table
51d0: 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 20 3d  FilterCallback =
51e0: 20 63 61 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20 20   callback;..    
51f0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 61 62          this.tab
5200: 6c 65 46 69 6c 74 65 72 43 6c 69 65 6e 74 44 61  leFilterClientDa
5210: 74 61 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b  ta = clientData;
5220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5230: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
5240: 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73 69  ods.sqlite3sessi
5250: 6f 6e 5f 74 61 62 6c 65 5f 66 69 6c 74 65 72 28  on_table_filter(
5260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5270: 20 20 73 65 73 73 69 6f 6e 2c 20 78 46 69 6c 74    session, xFilt
5280: 65 72 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  er, IntPtr.Zero)
5290: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
52a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
52b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
52f0: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
5300: 63 20 76 6f 69 64 20 43 72 65 61 74 65 43 68 61  c void CreateCha
5310: 6e 67 65 53 65 74 28 0d 0a 20 20 20 20 20 20 20  ngeSet(..       
5320: 20 20 20 20 20 72 65 66 20 62 79 74 65 5b 5d 20       ref byte[] 
5330: 72 61 77 44 61 74 61 0d 0a 20 20 20 20 20 20 20  rawData..       
5340: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
5350: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  {..            C
5360: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
5370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
5380: 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20  ckHandle();.... 
5390: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
53a0: 72 20 70 44 61 74 61 20 3d 20 49 6e 74 50 74 72  r pData = IntPtr
53b0: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
53c0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
53d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
53e0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 44            int nD
53f0: 61 74 61 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ata = 0;....    
5400: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
5410: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
5420: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5430: 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73  hods.sqlite3sess
5440: 69 6f 6e 5f 63 68 61 6e 67 65 73 65 74 28 0d 0a  ion_changeset(..
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 20 20 20 20 73 65 73 73 69 6f 6e 2c 20 72 65 66      session, ref
5470: 20 6e 44 61 74 61 2c 20 72 65 66 20 70 44 61 74   nData, ref pDat
5480: 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  a);....         
5490: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d         if (rc !=
54a0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
54b0: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
54c0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
54d0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
54e0: 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69 74 65 33  ion(rc, "sqlite3
54f0: 73 65 73 73 69 6f 6e 5f 63 68 61 6e 67 65 73 65  session_changese
5500: 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t");....        
5510: 20 20 20 20 20 20 20 20 72 61 77 44 61 74 61 20          rawData 
5520: 3d 20 53 51 4c 69 74 65 42 79 74 65 73 2e 46 72  = SQLiteBytes.Fr
5530: 6f 6d 49 6e 74 50 74 72 28 70 44 61 74 61 2c 20  omIntPtr(pData, 
5540: 6e 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20  nData);..       
5550: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5560: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
5570: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5580: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5590: 70 44 61 74 61 20 21 3d 20 49 6e 74 50 74 72 2e  pData != IntPtr.
55a0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
55b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
55d0: 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28  LiteMemory.Free(
55e0: 70 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20  pData);..       
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
5600: 74 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ta = IntPtr.Zero
5610: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5630: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
5640: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
5650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5690: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
56a0: 6c 69 63 20 76 6f 69 64 20 43 72 65 61 74 65 43  lic void CreateC
56b0: 68 61 6e 67 65 53 65 74 28 0d 0a 20 20 20 20 20  hangeSet(..     
56c0: 20 20 20 20 20 20 20 53 74 72 65 61 6d 20 73 74         Stream st
56d0: 72 65 61 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  ream..          
56e0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
5700: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
5710: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 48            CheckH
5720: 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  andle();....    
5730: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
5740: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
5750: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5760: 2e 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e 5f  .sqlite3session_
5770: 63 68 61 6e 67 65 73 65 74 5f 73 74 72 6d 28 0d  changeset_strm(.
5780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5790: 20 73 65 73 73 69 6f 6e 2c 20 6e 65 77 20 53 51   session, new SQ
57a0: 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
57b0: 72 28 73 74 72 65 61 6d 2c 20 66 6c 61 67 73 29  r(stream, flags)
57c0: 2e 78 4f 75 74 70 75 74 2c 0d 0a 20 20 20 20 20  .xOutput,..     
57d0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
57e0: 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20  r.Zero);....    
57f0: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21          if (rc !
5800: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5810: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
5820: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
5830: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5840: 28 72 63 2c 20 22 73 71 6c 69 74 65 33 73 65 73  (rc, "sqlite3ses
5850: 73 69 6f 6e 5f 63 68 61 6e 67 65 73 65 74 5f 73  sion_changeset_s
5860: 74 72 6d 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  trm");..        
5870: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
5880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
58d0: 70 75 62 6c 69 63 20 76 6f 69 64 20 43 72 65 61  public void Crea
58e0: 74 65 50 61 74 63 68 53 65 74 28 0d 0a 20 20 20  tePatchSet(..   
58f0: 20 20 20 20 20 20 20 20 20 72 65 66 20 62 79 74           ref byt
5900: 65 5b 5d 20 72 61 77 44 61 74 61 0d 0a 20 20 20  e[] rawData..   
5910: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5930: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
5940: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
5950: 20 43 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d   CheckHandle();.
5960: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
5970: 6e 74 50 74 72 20 70 44 61 74 61 20 3d 20 49 6e  ntPtr pData = In
5980: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
5990: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
59a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
59b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
59c0: 74 20 6e 44 61 74 61 20 3d 20 30 3b 0d 0a 0d 0a  t nData = 0;....
59d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
59f0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
5a00: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
5a10: 73 65 73 73 69 6f 6e 5f 70 61 74 63 68 73 65 74  session_patchset
5a20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5a30: 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 2c 20         session, 
5a40: 72 65 66 20 6e 44 61 74 61 2c 20 72 65 66 20 70  ref nData, ref p
5a50: 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data);....      
5a60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
5a70: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
5a80: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
5aa0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
5ab0: 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69  eption(rc, "sqli
5ac0: 74 65 33 73 65 73 73 69 6f 6e 5f 70 61 74 63 68  te3session_patch
5ad0: 73 65 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  set");....      
5ae0: 20 20 20 20 20 20 20 20 20 20 72 61 77 44 61 74            rawDat
5af0: 61 20 3d 20 53 51 4c 69 74 65 42 79 74 65 73 2e  a = SQLiteBytes.
5b00: 46 72 6f 6d 49 6e 74 50 74 72 28 70 44 61 74 61  FromIntPtr(pData
5b10: 2c 20 6e 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  , nData);..     
5b20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5b30: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
5b40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5b60: 20 28 70 44 61 74 61 20 21 3d 20 49 6e 74 50 74   (pData != IntPt
5b70: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
5b80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ba0: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
5bb0: 65 28 70 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  e(pData);..     
5bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
5bd0: 44 61 74 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65  Data = IntPtr.Ze
5be0: 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
5bf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5c00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
5c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
5c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
5c70: 75 62 6c 69 63 20 76 6f 69 64 20 43 72 65 61 74  ublic void Creat
5c80: 65 50 61 74 63 68 53 65 74 28 0d 0a 20 20 20 20  ePatchSet(..    
5c90: 20 20 20 20 20 20 20 20 53 74 72 65 61 6d 20 73          Stream s
5ca0: 74 72 65 61 6d 0d 0a 20 20 20 20 20 20 20 20 20  tream..         
5cb0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
5cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
5cd0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
5ce0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5cf0: 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20  Handle();....   
5d00: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
5d10: 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e  rrorCode rc = Un
5d20: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5d30: 73 2e 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  s.sqlite3session
5d40: 5f 70 61 74 63 68 73 65 74 5f 73 74 72 6d 28 0d  _patchset_strm(.
5d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5d60: 20 73 65 73 73 69 6f 6e 2c 20 6e 65 77 20 53 51   session, new SQ
5d70: 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65  LiteStreamAdapte
5d80: 72 28 73 74 72 65 61 6d 2c 20 66 6c 61 67 73 29  r(stream, flags)
5d90: 2e 78 4f 75 74 70 75 74 2c 0d 0a 20 20 20 20 20  .xOutput,..     
5da0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
5db0: 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20  r.Zero);....    
5dc0: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21          if (rc !
5dd0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
5de0: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
5df0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
5e00: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
5e10: 28 72 63 2c 20 22 73 71 6c 69 74 65 33 73 65 73  (rc, "sqlite3ses
5e20: 73 69 6f 6e 5f 70 61 74 63 68 73 65 74 5f 73 74  sion_patchset_st
5e30: 72 6d 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rm");..        }
5e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
5ea0: 75 62 6c 69 63 20 76 6f 69 64 20 4c 6f 61 64 44  ublic void LoadD
5eb0: 69 66 66 65 72 65 6e 63 65 73 46 72 6f 6d 54 61  ifferencesFromTa
5ec0: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
5ed0: 20 20 73 74 72 69 6e 67 20 66 72 6f 6d 44 61 74    string fromDat
5ee0: 61 62 61 73 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  abaseName,..    
5ef0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
5f00: 61 62 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  ableName..      
5f10: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
5f20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5f30: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
5f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
5f50: 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a  eckHandle();....
5f60: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
5f70: 74 72 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50  tr pError = IntP
5f80: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
5f90: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
5fa0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
5fc0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
5fd0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5fe0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 73 65 73 73  hods.sqlite3sess
5ff0: 69 6f 6e 5f 64 69 66 66 28 0d 0a 20 20 20 20 20  ion_diff(..     
6000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
6010: 65 73 73 69 6f 6e 2c 20 53 51 4c 69 74 65 53 74  ession, SQLiteSt
6020: 72 69 6e 67 2e 47 65 74 55 74 66 38 42 79 74 65  ring.GetUtf8Byte
6030: 73 46 72 6f 6d 53 74 72 69 6e 67 28 66 72 6f 6d  sFromString(from
6040: 44 61 74 61 62 61 73 65 4e 61 6d 65 29 2c 0d 0a  DatabaseName),..
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6060: 20 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e 67      SQLiteString
6070: 2e 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f  .GetUtf8BytesFro
6080: 6d 53 74 72 69 6e 67 28 74 61 62 6c 65 4e 61 6d  mString(tableNam
6090: 65 29 2c 20 72 65 66 20 70 45 72 72 6f 72 29 3b  e), ref pError);
60a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
60b0: 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51      if (rc != SQ
60c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
60d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
60e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
60f0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
6100: 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a   error = null;..
6110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6120: 20 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72        if (pError
6130: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
6140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6150: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6170: 20 65 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53   error = SQLiteS
6180: 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d  tring.StringFrom
6190: 55 74 66 38 49 6e 74 50 74 72 28 70 45 72 72 6f  Utf8IntPtr(pErro
61a0: 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
61b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
61c0: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
61d0: 6c 4f 72 45 6d 70 74 79 28 65 72 72 6f 72 29 29  lOrEmpty(error))
61e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
61f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6210: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
6220: 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53   HelperMethods.S
6230: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
6260: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
6270: 74 43 75 6c 74 75 72 65 2c 20 22 3a 20 7b 30 7d  tCulture, ": {0}
6280: 22 2c 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ", error);..    
6290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
62b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62d0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
62e0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63  LiteException(rc
62f0: 2c 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  , HelperMethods.
6300: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6320: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
6330: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
6340: 65 2c 20 22 7b 30 7d 7b 31 7d 22 2c 0d 0a 20 20  e, "{0}{1}",..  
6350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6360: 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 73 65        "sqlite3se
6370: 73 73 69 6f 6e 5f 64 69 66 66 22 2c 20 65 72 72  ssion_diff", err
6380: 6f 72 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  or));..         
6390: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
63a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
63b0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
63c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
63e0: 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74  (pError != IntPt
63f0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
6400: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6420: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
6430: 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  e(pError);..    
6440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6450: 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e  pError = IntPtr.
6460: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
6470: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6480: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6490: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
64a0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
64b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
64c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6500: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
6510: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
6520: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6530: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
6540: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6550: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
6560: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
6570: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
6580: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
6590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
65a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
65b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
65c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
6610: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
6620: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
6630: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
6640: 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
6650: 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
6660: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
6670: 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
6680: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
6690: 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53  #if THROW_ON_DIS
66a0: 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20  POSED..         
66b0: 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
66c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66d0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
66e0: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
66f0: 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74  ion(typeof(SQLit
6700: 65 53 65 73 73 69 6f 6e 29 2e 4e 61 6d 65 29 3b  eSession).Name);
6710: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
6720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
6730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6780: 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f    private /* pro
6790: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a  tected virtual *
67a0: 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62  / void Dispose(b
67b0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a  ool disposing)..
67c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
67d0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
67e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
67f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
6800: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
6810: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e    //if (disposin
6840: 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
6850: 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20          //{..   
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
6880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68b0: 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73   //    // dispos
68c0: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
68d0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68f0: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
6900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
6920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6930: 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   //}....        
6940: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
6980: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
6990: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
69a0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
69d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a00: 20 20 69 66 20 28 73 65 73 73 69 6f 6e 20 21 3d    if (session !=
6a10: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
6a50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6a60: 73 2e 73 71 6c 69 74 65 33 73 65 73 73 69 6f 6e  s.sqlite3session
6a70: 5f 64 65 6c 65 74 65 28 73 65 73 73 69 6f 6e 29  _delete(session)
6a80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6a90: 20 20 20 20 20 20 20 20 20 20 20 73 65 73 73 69             sessi
6aa0: 6f 6e 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  on = IntPtr.Zero
6ab0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6ac0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6ad0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6ae0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6af0: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
6b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b20: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
6b30: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65      // NOTE: Eve
6b40: 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64 20 62  rything should b
6b50: 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73 65 64  e fully disposed
6b60: 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d   at this point..
6b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b80: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
6b90: 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20       disposed = 
6ba0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
6bb0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
6bc0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
6bd0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c20: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6c30: 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75    #region Destru
6c40: 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 7e 53  ctor..        ~S
6c50: 51 4c 69 74 65 53 65 73 73 69 6f 6e 28 29 0d 0a  QLiteSession()..
6c60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6c70: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
6c80: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
6c90: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
6ca0: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
6cb0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6cc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6d10: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
6d20: 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67  QLiteMemoryChang
6d30: 65 53 65 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  eSet Class..    
6d40: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
6d50: 61 73 73 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79  ass SQLiteMemory
6d60: 43 68 61 6e 67 65 53 65 74 20 3a 0d 0a 20 20 20  ChangeSet :..   
6d70: 20 20 20 20 20 49 53 51 4c 69 74 65 43 68 61 6e       ISQLiteChan
6d80: 67 65 53 65 74 2c 20 49 45 6e 75 6d 65 72 61 62  geSet, IEnumerab
6d90: 6c 65 3c 49 53 51 4c 69 74 65 43 68 61 6e 67 65  le<ISQLiteChange
6da0: 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d 3e  SetMetadataItem>
6db0: 2c 0d 0a 20 20 20 20 20 20 20 20 49 44 69 73 70  ,..        IDisp
6dc0: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  osable..    {.. 
6dd0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
6de0: 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20  rivate Data..   
6df0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 79 74       private byt
6e00: 65 5b 5d 20 72 61 77 44 61 74 61 3b 0d 0a 20 20  e[] rawData;..  
6e10: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
6e20: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
6e30: 6e 64 6c 65 20 68 61 6e 64 6c 65 3b 0d 0a 20 20  ndle handle;..  
6e40: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
6e50: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
6e60: 61 67 73 20 66 6c 61 67 73 3b 0d 0a 20 20 20 20  ags flags;..    
6e70: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6e80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ed0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
6ee0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
6ef0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
6f00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69     internal SQLi
6f10: 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65  teMemoryChangeSe
6f20: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
6f30: 62 79 74 65 5b 5d 20 72 61 77 44 61 74 61 2c 0d  byte[] rawData,.
6f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
6f50: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
6f60: 64 6c 65 20 68 61 6e 64 6c 65 2c 0d 0a 20 20 20  dle handle,..   
6f70: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
6f80: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
6f90: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lags..          
6fa0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
6fc0: 2e 72 61 77 44 61 74 61 20 3d 20 72 61 77 44 61  .rawData = rawDa
6fd0: 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
6fe0: 20 74 68 69 73 2e 68 61 6e 64 6c 65 3d 20 68 61   this.handle= ha
6ff0: 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  ndle;..         
7000: 20 20 20 74 68 69 73 2e 66 6c 61 67 73 20 3d 20     this.flags = 
7010: 66 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  flags;..        
7020: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
7030: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
7040: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7080: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7090: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
70a0: 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
70b0: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
70c0: 64 20 43 68 65 63 6b 52 61 77 44 61 74 61 28 29  d CheckRawData()
70d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
70e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 61 77           if (raw
70f0: 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Data == null).. 
7100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7110: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
7120: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
7130: 6f 6e 28 22 6e 6f 20 63 68 61 6e 67 65 20 73 65  on("no change se
7140: 74 20 64 61 74 61 22 29 3b 0d 0a 20 20 20 20 20  t data");..     
7150: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
7160: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7170: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
71c0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
71d0: 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 20  SQLiteChangeSet 
71e0: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
71f0: 20 70 75 62 6c 69 63 20 49 53 51 4c 69 74 65 43   public ISQLiteC
7200: 68 61 6e 67 65 53 65 74 20 49 6e 76 65 72 74 28  hangeSet Invert(
7210: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7220: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
7230: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
7240: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 61 77          CheckRaw
7250: 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Data();....     
7260: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49         IntPtr pI
7270: 6e 44 61 74 61 20 3d 20 49 6e 74 50 74 72 2e 5a  nData = IntPtr.Z
7280: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
7290: 20 20 49 6e 74 50 74 72 20 70 4f 75 74 44 61 74    IntPtr pOutDat
72a0: 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  a = IntPtr.Zero;
72b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
72c0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
72d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
72e0: 20 20 20 20 69 6e 74 20 6e 49 6e 44 61 74 61 20      int nInData 
72f0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
7300: 20 20 20 20 20 20 20 20 70 49 6e 44 61 74 61 20          pInData 
7310: 3d 20 53 51 4c 69 74 65 42 79 74 65 73 2e 54 6f  = SQLiteBytes.To
7320: 49 6e 74 50 74 72 28 72 61 77 44 61 74 61 2c 20  IntPtr(rawData, 
7330: 72 65 66 20 6e 49 6e 44 61 74 61 29 3b 0d 0a 0d  ref nInData);...
7340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7350: 20 69 6e 74 20 6e 4f 75 74 44 61 74 61 20 3d 20   int nOutData = 
7360: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
7370: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7380: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
7390: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
73a0: 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f  qlite3changeset_
73b0: 69 6e 76 65 72 74 28 0d 0a 20 20 20 20 20 20 20  invert(..       
73c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 49 6e               nIn
73d0: 44 61 74 61 2c 20 70 49 6e 44 61 74 61 2c 20 72  Data, pInData, r
73e0: 65 66 20 6e 4f 75 74 44 61 74 61 2c 20 72 65 66  ef nOutData, ref
73f0: 20 70 4f 75 74 44 61 74 61 29 3b 0d 0a 0d 0a 20   pOutData);.... 
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7410: 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45  f (rc != SQLiteE
7420: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
7430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7440: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
7450: 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
7460: 22 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65  "sqlite3changese
7470: 74 5f 69 6e 76 65 72 74 22 29 3b 0d 0a 0d 0a 20  t_invert");.... 
7480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
7490: 79 74 65 5b 5d 20 6e 65 77 44 61 74 61 20 3d 20  yte[] newData = 
74a0: 53 51 4c 69 74 65 42 79 74 65 73 2e 46 72 6f 6d  SQLiteBytes.From
74b0: 49 6e 74 50 74 72 28 70 4f 75 74 44 61 74 61 2c  IntPtr(pOutData,
74c0: 20 6e 4f 75 74 44 61 74 61 29 3b 0d 0a 0d 0a 20   nOutData);.... 
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
74e0: 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
74f0: 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 28  MemoryChangeSet(
7500: 6e 65 77 44 61 74 61 2c 20 68 61 6e 64 6c 65 2c  newData, handle,
7510: 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20   flags);..      
7520: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7530: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
7540: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7560: 28 70 4f 75 74 44 61 74 61 20 21 3d 20 49 6e 74  (pOutData != Int
7570: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
7580: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75a0: 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
75b0: 72 65 65 28 70 4f 75 74 44 61 74 61 29 3b 0d 0a  ree(pOutData);..
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75d0: 20 20 20 20 70 4f 75 74 44 61 74 61 20 3d 20 49      pOutData = I
75e0: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7610: 20 20 69 66 20 28 70 49 6e 44 61 74 61 20 21 3d    if (pInData !=
7620: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7650: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
7660: 72 79 2e 46 72 65 65 28 70 49 6e 44 61 74 61 29  ry.Free(pInData)
7670: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7680: 20 20 20 20 20 20 20 70 49 6e 44 61 74 61 20 3d         pInData =
7690: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
76b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
76c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
76d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
76e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7720: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
7730: 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  ISQLiteChangeSet
7740: 20 43 6f 6d 62 69 6e 65 57 69 74 68 28 0d 0a 20   CombineWith(.. 
7750: 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69             ISQLi
7760: 74 65 43 68 61 6e 67 65 53 65 74 20 63 68 61 6e  teChangeSet chan
7770: 67 65 53 65 74 0d 0a 20 20 20 20 20 20 20 20 20  geSet..         
7780: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
7790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
77a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
77b0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
77c0: 52 61 77 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20  RawData();....  
77d0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
77e0: 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 20  MemoryChangeSet 
77f0: 6d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 20  memoryChangeSet 
7800: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
7810: 20 20 20 63 68 61 6e 67 65 53 65 74 20 61 73 20     changeSet as 
7820: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e  SQLiteMemoryChan
7830: 67 65 53 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  geSet;....      
7840: 20 20 20 20 20 20 69 66 20 28 6d 65 6d 6f 72 79        if (memory
7850: 43 68 61 6e 67 65 53 65 74 20 3d 3d 20 6e 75 6c  ChangeSet == nul
7860: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7870: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7880: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
7890: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d  umentException(.
78a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
78b0: 20 20 20 20 20 22 6e 6f 74 20 61 20 6d 65 6d 6f       "not a memo
78c0: 72 79 20 62 61 73 65 64 20 63 68 61 6e 67 65 20  ry based change 
78d0: 73 65 74 22 2c 20 22 63 68 61 6e 67 65 53 65 74  set", "changeSet
78e0: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
78f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7900: 20 20 6d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65    memoryChangeSe
7910: 74 2e 43 68 65 63 6b 52 61 77 44 61 74 61 28 29  t.CheckRawData()
7920: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7930: 20 49 6e 74 50 74 72 20 70 49 6e 44 61 74 61 31   IntPtr pInData1
7940: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
7950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
7960: 50 74 72 20 70 49 6e 44 61 74 61 32 20 3d 20 49  Ptr pInData2 = I
7970: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
7980: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
7990: 70 4f 75 74 44 61 74 61 20 3d 20 49 6e 74 50 74  pOutData = IntPt
79a0: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
79b0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
79c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
79d0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
79e0: 49 6e 44 61 74 61 31 20 3d 20 30 3b 0d 0a 0d 0a  InData1 = 0;....
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a00: 70 49 6e 44 61 74 61 31 20 3d 20 53 51 4c 69 74  pInData1 = SQLit
7a10: 65 42 79 74 65 73 2e 54 6f 49 6e 74 50 74 72 28  eBytes.ToIntPtr(
7a20: 72 61 77 44 61 74 61 2c 20 72 65 66 20 6e 49 6e  rawData, ref nIn
7a30: 44 61 74 61 31 29 3b 0d 0a 0d 0a 20 20 20 20 20  Data1);....     
7a40: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
7a50: 49 6e 44 61 74 61 32 20 3d 20 30 3b 0d 0a 0d 0a  InData2 = 0;....
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 70 49 6e 44 61 74 61 32 20 3d 20 53 51 4c 69 74  pInData2 = SQLit
7a80: 65 42 79 74 65 73 2e 54 6f 49 6e 74 50 74 72 28  eBytes.ToIntPtr(
7a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7aa0: 20 20 20 20 20 20 6d 65 6d 6f 72 79 43 68 61 6e        memoryChan
7ab0: 67 65 53 65 74 2e 72 61 77 44 61 74 61 2c 20 72  geSet.rawData, r
7ac0: 65 66 20 6e 49 6e 44 61 74 61 32 29 3b 0d 0a 0d  ef nInData2);...
7ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7ae0: 20 69 6e 74 20 6e 4f 75 74 44 61 74 61 20 3d 20   int nOutData = 
7af0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
7b00: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7b10: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
7b20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7b30: 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f  qlite3changeset_
7b40: 63 6f 6e 63 61 74 28 0d 0a 20 20 20 20 20 20 20  concat(..       
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 49 6e               nIn
7b60: 44 61 74 61 31 2c 20 70 49 6e 44 61 74 61 31 2c  Data1, pInData1,
7b70: 20 6e 49 6e 44 61 74 61 32 2c 20 70 49 6e 44 61   nInData2, pInDa
7b80: 74 61 32 2c 20 72 65 66 20 6e 4f 75 74 44 61 74  ta2, ref nOutDat
7b90: 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
7ba0: 20 20 20 20 20 20 20 20 72 65 66 20 70 4f 75 74          ref pOut
7bb0: 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data);....      
7bc0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
7bd0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7be0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
7c00: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7c10: 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69  eption(rc, "sqli
7c20: 74 65 33 63 68 61 6e 67 65 73 65 74 5f 63 6f 6e  te3changeset_con
7c30: 63 61 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  cat");....      
7c40: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
7c50: 20 6e 65 77 44 61 74 61 20 3d 20 53 51 4c 69 74   newData = SQLit
7c60: 65 42 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74  eBytes.FromIntPt
7c70: 72 28 70 4f 75 74 44 61 74 61 2c 20 6e 4f 75 74  r(pOutData, nOut
7c80: 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data);....      
7c90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7ca0: 20 6e 65 77 20 53 51 4c 69 74 65 4d 65 6d 6f 72   new SQLiteMemor
7cb0: 79 43 68 61 6e 67 65 53 65 74 28 6e 65 77 44 61  yChangeSet(newDa
7cc0: 74 61 2c 20 68 61 6e 64 6c 65 2c 20 66 6c 61 67  ta, handle, flag
7cd0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
7ce0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7cf0: 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  finally..       
7d00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7d10: 20 20 20 20 20 20 20 20 69 66 20 28 70 4f 75 74          if (pOut
7d20: 44 61 74 61 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Data != IntPtr.Z
7d30: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
7d40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
7d60: 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
7d70: 4f 75 74 44 61 74 61 29 3b 0d 0a 20 20 20 20 20  OutData);..     
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
7d90: 4f 75 74 44 61 74 61 20 3d 20 49 6e 74 50 74 72  OutData = IntPtr
7da0: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
7db0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7dd0: 28 70 49 6e 44 61 74 61 32 20 21 3d 20 49 6e 74  (pInData2 != Int
7de0: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
7df0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
7e20: 72 65 65 28 70 49 6e 44 61 74 61 32 29 3b 0d 0a  ree(pInData2);..
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 70 49 6e 44 61 74 61 32 20 3d 20 49      pInData2 = I
7e50: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e80: 20 20 69 66 20 28 70 49 6e 44 61 74 61 31 20 21    if (pInData1 !
7e90: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7eb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7ec0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
7ed0: 6f 72 79 2e 46 72 65 65 28 70 49 6e 44 61 74 61  ory.Free(pInData
7ee0: 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1);..           
7ef0: 20 20 20 20 20 20 20 20 20 70 49 6e 44 61 74 61           pInData
7f00: 31 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  1 = IntPtr.Zero;
7f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7f30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
7f40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
7f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
7fa0: 69 63 20 76 6f 69 64 20 41 70 70 6c 79 28 0d 0a  ic void Apply(..
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 53 65 73 73              Sess
7fc0: 69 6f 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  ionConflictCallb
7fd0: 61 63 6b 20 63 6f 6e 66 6c 69 63 74 43 61 6c 6c  ack conflictCall
7fe0: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
7ff0: 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
8000: 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
8010: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
8020: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8030: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
8040: 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
8050: 79 28 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61  y(conflictCallba
8060: 63 6b 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74  ck, null, client
8070: 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20  Data);..        
8080: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
8090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
80e0: 70 75 62 6c 69 63 20 76 6f 69 64 20 41 70 70 6c  public void Appl
80f0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8100: 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74 43  SessionConflictC
8110: 61 6c 6c 62 61 63 6b 20 63 6f 6e 66 6c 69 63 74  allback conflict
8120: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
8130: 20 20 20 20 20 20 20 53 65 73 73 69 6f 6e 54 61         SessionTa
8140: 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63  bleFilterCallbac
8150: 6b 20 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c  k tableFilterCal
8160: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
8170: 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
8180: 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
8190: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
81a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
81b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
81c0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
81d0: 52 61 77 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20  RawData();....  
81e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
81f0: 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 20 3d  nflictCallback =
8200: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8210: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
8220: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
8230: 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 66 6c 69  xception("confli
8240: 63 74 43 61 6c 6c 62 61 63 6b 22 29 3b 0d 0a 0d  ctCallback");...
8250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
8260: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8270: 2e 78 53 65 73 73 69 6f 6e 46 69 6c 74 65 72 20  .xSessionFilter 
8280: 78 46 69 6c 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d  xFilter = null;.
8290: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
82a0: 66 20 28 74 61 62 6c 65 46 69 6c 74 65 72 43 61  f (tableFilterCa
82b0: 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d  llback != null).
82c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82e0: 78 46 69 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e  xFilter = new Un
82f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8300: 73 2e 78 53 65 73 73 69 6f 6e 46 69 6c 74 65 72  s.xSessionFilter
8310: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8320: 20 20 20 20 20 20 20 64 65 6c 65 67 61 74 65 28         delegate(
8330: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
8340: 62 79 74 65 5b 5d 20 74 62 6c 4e 61 6d 65 29 0d  byte[] tblName).
8350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8360: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8370: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
83b0: 6e 67 20 6e 61 6d 65 20 3d 20 53 51 4c 69 74 65  ng name = SQLite
83c0: 53 74 72 69 6e 67 2e 47 65 74 53 74 72 69 6e 67  String.GetString
83d0: 46 72 6f 6d 55 74 66 38 42 79 74 65 73 28 0d 0a  FromUtf8Bytes(..
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 4e              tblN
8400: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
8410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8420: 20 72 65 74 75 72 6e 20 74 61 62 6c 65 46 69 6c   return tableFil
8430: 74 65 72 43 61 6c 6c 62 61 63 6b 28 63 6c 69 65  terCallback(clie
8440: 6e 74 44 61 74 61 2c 20 6e 61 6d 65 29 20 3f 20  ntData, name) ? 
8450: 31 20 3a 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  1 : 0;..        
8460: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8480: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
8490: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
84a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84c0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8500: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
8510: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8520: 46 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63  Flags.LogCallbac
8530: 6b 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a  kException) ==..
8540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8560: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
8570: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61 6c  tionFlags.LogCal
8580: 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29 0d  lbackException).
8590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85d0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
85e0: 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65 2e  sage(SQLiteBase.
85f0: 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c  COR_E_EXCEPTION,
8600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68        HelperMeth
8630: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
8640: 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72  (CultureInfo.Cur
8650: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8680: 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74    "Caught except
8690: 69 6f 6e 20 69 6e 20 5c 22 78 46 69 6c 74 65 72  ion in \"xFilter
86a0: 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c  \" method: {0}",
86b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86d0: 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68        e)); /* th
86e0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8700: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8730: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
8740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8750: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8770: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8780: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
87b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87d0: 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20  return 0;..     
87e0: 20 20 20 20 20 20 20 20 20 20 20 7d 29 3b 0d 0a             });..
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
8810: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8820: 2e 78 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63  .xSessionConflic
8830: 74 20 78 43 6f 6e 66 6c 69 63 74 3b 0d 0a 0d 0a  t xConflict;....
8840: 20 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6e              xCon
8850: 66 6c 69 63 74 20 3d 20 6e 65 77 20 55 6e 73 61  flict = new Unsa
8860: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8870: 78 53 65 73 73 69 6f 6e 43 6f 6e 66 6c 69 63 74  xSessionConflict
8880: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8890: 20 20 20 64 65 6c 65 67 61 74 65 28 49 6e 74 50     delegate(IntP
88a0: 74 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  tr context,..   
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88c0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 68 61 6e        SQLiteChan
88d0: 67 65 53 65 74 43 6f 6e 66 6c 69 63 74 54 79 70  geSetConflictTyp
88e0: 65 20 74 79 70 65 2c 0d 0a 20 20 20 20 20 20 20  e type,..       
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8900: 20 20 49 6e 74 50 74 72 20 69 74 65 72 61 74 6f    IntPtr iterato
8910: 72 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r)..            
8920: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8930: 20 20 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65     ISQLiteChange
8940: 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d 20  SetMetadataItem 
8950: 69 74 65 6d 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  item = null;....
8960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8970: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
8980: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8990: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
89a0: 72 6e 20 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62  rn conflictCallb
89b0: 61 63 6b 28 63 6c 69 65 6e 74 44 61 74 61 2c 20  ack(clientData, 
89c0: 74 79 70 65 2c 20 69 74 65 6d 29 3b 0d 0a 20 20  type, item);..  
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
89e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89f0: 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
8a00: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
8a10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
8a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8a40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a60: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
8a70: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8a80: 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45  ags.LogCallbackE
8a90: 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20 20  xception) ==..  
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
8ac0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
8ad0: 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45  ags.LogCallbackE
8ae0: 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20  xception)..     
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b20: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
8b30: 65 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73  essage(SQLiteBas
8b40: 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f  e.COR_E_EXCEPTIO
8b50: 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  N,..            
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b70: 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64      HelperMethod
8b80: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43  s.StringFormat(C
8b90: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
8ba0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 22 43 61 75              "Cau
8bd0: 67 68 74 20 65 78 63 65 70 74 69 6f 6e 20 69 6e  ght exception in
8be0: 20 5c 22 78 43 6f 6e 66 6c 69 63 74 5c 22 20 6d   \"xConflict\" m
8bf0: 65 74 68 6f 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ethod: {0}",..  
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29                e)
8c20: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c70: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
8cb0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cd0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
8ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8cf0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
8d00: 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 43 6f  QLiteChangeSetCo
8d10: 6e 66 6c 69 63 74 52 65 73 75 6c 74 2e 41 62 6f  nflictResult.Abo
8d20: 72 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rt;..           
8d30: 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   });....        
8d40: 20 20 20 20 49 6e 74 50 74 72 20 70 44 61 74 61      IntPtr pData
8d50: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
8d60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
8d70: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
8d80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8d90: 20 20 20 69 6e 74 20 6e 44 61 74 61 20 3d 20 30     int nData = 0
8da0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8db0: 20 20 20 20 20 70 44 61 74 61 20 3d 20 53 51 4c       pData = SQL
8dc0: 69 74 65 42 79 74 65 73 2e 54 6f 49 6e 74 50 74  iteBytes.ToIntPt
8dd0: 72 28 72 61 77 44 61 74 61 2c 20 72 65 66 20 6e  r(rawData, ref n
8de0: 44 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Data);....      
8df0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8e00: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
8e10: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
8e20: 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65  ds.sqlite3change
8e30: 73 65 74 5f 61 70 70 6c 79 28 0d 0a 20 20 20 20  set_apply(..    
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 68 61 6e 64 6c 65 2c 20 6e 44 61 74 61 2c 20 70  handle, nData, p
8e60: 44 61 74 61 2c 20 78 46 69 6c 74 65 72 2c 20 78  Data, xFilter, x
8e70: 43 6f 6e 66 6c 69 63 74 2c 20 49 6e 74 50 74 72  Conflict, IntPtr
8e80: 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Zero);....     
8e90: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
8ea0: 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c != SQLiteError
8eb0: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8ed0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8ee0: 63 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c  ception(rc, "sql
8ef0: 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f 61 70  ite3changeset_ap
8f00: 70 6c 79 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ply");..        
8f10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8f20: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
8f30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8f40: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
8f50: 44 61 74 61 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Data != IntPtr.Z
8f60: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
8f70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
8f90: 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70  iteMemory.Free(p
8fa0: 44 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20  Data);..        
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
8fc0: 61 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  a = IntPtr.Zero;
8fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8fe0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8ff0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
9000: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
9010: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
9020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9060: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9070: 23 72 65 67 69 6f 6e 20 49 45 6e 75 6d 65 72 61  #region IEnumera
9080: 62 6c 65 3c 49 53 51 4c 69 74 65 43 68 61 6e 67  ble<ISQLiteChang
9090: 65 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d  eSetMetadataItem
90a0: 3e 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  > Members..     
90b0: 20 20 20 70 75 62 6c 69 63 20 49 45 6e 75 6d 65     public IEnume
90c0: 72 61 74 6f 72 3c 49 53 51 4c 69 74 65 43 68 61  rator<ISQLiteCha
90d0: 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61 49 74  ngeSetMetadataIt
90e0: 65 6d 3e 20 47 65 74 45 6e 75 6d 65 72 61 74 6f  em> GetEnumerato
90f0: 72 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  r()..        {..
9100: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9110: 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 43 68 61  rn new SQLiteCha
9120: 6e 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f 72  ngeSetEnumerator
9130: 28 72 61 77 44 61 74 61 29 3b 0d 0a 20 20 20 20  (rawData);..    
9140: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
9150: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
9160: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
91b0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
91c0: 49 45 6e 75 6d 65 72 61 62 6c 65 20 4d 65 6d 62  IEnumerable Memb
91d0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 49 45 6e  ers..        IEn
91e0: 75 6d 65 72 61 74 6f 72 20 53 79 73 74 65 6d 2e  umerator System.
91f0: 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45 6e 75  Collections.IEnu
9200: 6d 65 72 61 62 6c 65 2e 47 65 74 45 6e 75 6d 65  merable.GetEnume
9210: 72 61 74 6f 72 28 29 0d 0a 20 20 20 20 20 20 20  rator()..       
9220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9230: 72 65 74 75 72 6e 20 47 65 74 45 6e 75 6d 65 72  return GetEnumer
9240: 61 74 6f 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  ator();..       
9250: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
9260: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
9270: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
92c0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
92d0: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
92e0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
92f0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
9300: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9310: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
9320: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
9330: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
9340: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
9350: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9360: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
9370: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
9380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
93d0: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
93e0: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
93f0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
9400: 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
9410: 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
9420: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
9430: 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
9440: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
9450: 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53  #if THROW_ON_DIS
9460: 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20  POSED..         
9470: 20 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29     if (disposed)
9480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
94a0: 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
94b0: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
94c0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
94d0: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
94e0: 53 51 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e  SQLiteMemoryChan
94f0: 67 65 53 65 74 29 2e 4e 61 6d 65 29 3b 0d 0a 20  geSet).Name);.. 
9500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
9510: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
9520: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9570: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
9580: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
9590: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
95a0: 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20  id Dispose(bool 
95b0: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
95c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
95d0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
95e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
95f0: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
9600: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
9610: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9630: 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20   (disposing)..  
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9650: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9690: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
96a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69             // di
96b0: 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65  spose managed re
96c0: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
96d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
96e0: 20 20 20 20 20 20 20 20 20 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 0d 0a 0d  /////////////...
9710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9720: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 61 77           if (raw
9730: 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Data != null).. 
9740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9750: 20 20 20 20 20 20 20 20 20 20 20 72 61 77 44 61             rawDa
9760: 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ta = null;..    
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9790: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
97c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
97d0: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
97e0: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
97f0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9810: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9830: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
9840: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9850: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9860: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
9870: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9890: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
98a0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72     // NOTE: Ever
98b0: 79 74 68 69 6e 67 20 73 68 6f 75 6c 64 20 62 65  ything should be
98c0: 20 66 75 6c 6c 79 20 64 69 73 70 6f 73 65 64 20   fully disposed 
98d0: 61 74 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a  at this point...
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
9900: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
9910: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
9920: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
9930: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
9940: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9990: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
99a0: 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63   #region Destruc
99b0: 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 7e 53 51  tor..        ~SQ
99c0: 4c 69 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65  LiteMemoryChange
99d0: 53 65 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  Set()..        {
99e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69  ..            Di
99f0: 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20  spose(false);.. 
9a00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9a10: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
9a20: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
9a30: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
9a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
9a90: 65 67 69 6f 6e 20 53 51 4c 69 74 65 53 74 72 65  egion SQLiteStre
9aa0: 61 6d 43 68 61 6e 67 65 53 65 74 20 43 6c 61 73  amChangeSet Clas
9ab0: 73 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65  s..    public se
9ac0: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
9ad0: 65 53 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74  eStreamChangeSet
9ae0: 20 3a 0d 0a 20 20 20 20 20 20 20 20 49 53 51 4c   :..        ISQL
9af0: 69 74 65 43 68 61 6e 67 65 53 65 74 2c 20 49 45  iteChangeSet, IE
9b00: 6e 75 6d 65 72 61 62 6c 65 3c 49 53 51 4c 69 74  numerable<ISQLit
9b10: 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61  eChangeSetMetada
9b20: 74 61 49 74 65 6d 3e 2c 0d 0a 20 20 20 20 20 20  taItem>,..      
9b30: 20 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20    IDisposable.. 
9b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
9b50: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61  egion Private Da
9b60: 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ta..        priv
9b70: 61 74 65 20 53 74 72 65 61 6d 20 69 6e 70 75 74  ate Stream input
9b80: 53 74 72 65 61 6d 3b 0d 0a 20 20 20 20 20 20 20  Stream;..       
9b90: 20 70 72 69 76 61 74 65 20 53 74 72 65 61 6d 20   private Stream 
9ba0: 6f 75 74 70 75 74 53 74 72 65 61 6d 3b 0d 0a 20  outputStream;.. 
9bb0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
9bc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
9bd0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 3b 0d 0a 20  andle handle;.. 
9be0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
9bf0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
9c00: 6c 61 67 73 20 66 6c 61 67 73 3b 0d 0a 20 20 20  lags flags;..   
9c10: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
9c20: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
9c80: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
9c90: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
9ca0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
9cb0: 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67 65 53  iteStreamChangeS
9cc0: 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et(..           
9cd0: 20 53 74 72 65 61 6d 20 69 6e 70 75 74 53 74 72   Stream inputStr
9ce0: 65 61 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  eam,..          
9cf0: 20 20 53 74 72 65 61 6d 20 6f 75 74 70 75 74 53    Stream outputS
9d00: 74 72 65 61 6d 2c 0d 0a 20 20 20 20 20 20 20 20  tream,..        
9d10: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
9d20: 74 69 6f 6e 48 61 6e 64 6c 65 20 68 61 6e 64 6c  tionHandle handl
9d30: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9d40: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9d50: 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20  Flags flags..   
9d60: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9d70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9d80: 20 20 20 74 68 69 73 2e 69 6e 70 75 74 53 74 72     this.inputStr
9d90: 65 61 6d 20 3d 20 69 6e 70 75 74 53 74 72 65 61  eam = inputStrea
9da0: 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
9db0: 74 68 69 73 2e 6f 75 74 70 75 74 53 74 72 65 61  this.outputStrea
9dc0: 6d 20 3d 20 6f 75 74 70 75 74 53 74 72 65 61 6d  m = outputStream
9dd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
9de0: 68 69 73 2e 68 61 6e 64 6c 65 20 3d 20 68 61 6e  his.handle = han
9df0: 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  dle;..          
9e00: 20 20 74 68 69 73 2e 66 6c 61 67 73 20 3d 20 66    this.flags = f
9e10: 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d  lags;..        }
9e20: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
9e30: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
9e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e80: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9e90: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
9ea0: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  te Methods..    
9eb0: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
9ec0: 20 43 68 65 63 6b 49 6e 70 75 74 53 74 72 65 61   CheckInputStrea
9ed0: 6d 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  m()..        {..
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9ef0: 69 6e 70 75 74 53 74 72 65 61 6d 20 3d 3d 20 6e  inputStream == n
9f00: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9f10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9f20: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
9f30: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
9f40: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
9f60: 69 6e 70 75 74 20 73 74 72 65 61 6d 20 75 6e 61  input stream una
9f70: 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20  vailable");..   
9f80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9f90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9fa0: 20 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 2f 2f 2f  ////////////////
9fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fe0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9ff0: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
a000: 20 43 68 65 63 6b 4f 75 74 70 75 74 53 74 72 65   CheckOutputStre
a010: 61 6d 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  am()..        {.
a020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
a030: 28 6f 75 74 70 75 74 53 74 72 65 61 6d 20 3d 3d  (outputStream ==
a040: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a060: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
a070: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
a080: 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0a0: 20 22 6f 75 74 70 75 74 20 73 74 72 65 61 6d 20   "output stream 
a0b0: 75 6e 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a  unavailable");..
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a0d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a0e0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a0f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a140: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
a150: 6f 6e 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65  on ISQLiteChange
a160: 53 65 74 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  Set Members..   
a170: 20 20 20 20 20 70 75 62 6c 69 63 20 49 53 51 4c       public ISQL
a180: 69 74 65 43 68 61 6e 67 65 53 65 74 20 49 6e 76  iteChangeSet Inv
a190: 65 72 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ert()..        {
a1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
a1b0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
a1d0: 6b 49 6e 70 75 74 53 74 72 65 61 6d 28 29 3b 0d  kInputStream();.
a1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
a1f0: 63 6b 4f 75 74 70 75 74 53 74 72 65 61 6d 28 29  ckOutputStream()
a200: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a210: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a220: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
a230: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
a240: 33 63 68 61 6e 67 65 73 65 74 5f 69 6e 76 65 72  3changeset_inver
a250: 74 5f 73 74 72 6d 28 0d 0a 20 20 20 20 20 20 20  t_strm(..       
a260: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
a270: 69 74 65 53 74 72 65 61 6d 41 64 61 70 74 65 72  iteStreamAdapter
a280: 28 69 6e 70 75 74 53 74 72 65 61 6d 2c 20 66 6c  (inputStream, fl
a290: 61 67 73 29 2e 78 49 6e 70 75 74 2c 20 49 6e 74  ags).xInput, Int
a2a0: 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20  Ptr.Zero,..     
a2b0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
a2c0: 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74  QLiteStreamAdapt
a2d0: 65 72 28 6f 75 74 70 75 74 53 74 72 65 61 6d 2c  er(outputStream,
a2e0: 20 66 6c 61 67 73 29 2e 78 4f 75 74 70 75 74 2c   flags).xOutput,
a2f0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
a300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
a310: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
a320: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
a340: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
a350: 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71 6c 69  eption(rc, "sqli
a360: 74 65 33 63 68 61 6e 67 65 73 65 74 5f 69 6e 76  te3changeset_inv
a370: 65 72 74 5f 73 74 72 6d 22 29 3b 0d 0a 0d 0a 20  ert_strm");.... 
a380: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a390: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
a3a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a400: 20 70 75 62 6c 69 63 20 49 53 51 4c 69 74 65 43   public ISQLiteC
a410: 68 61 6e 67 65 53 65 74 20 43 6f 6d 62 69 6e 65  hangeSet Combine
a420: 57 69 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20  With(..         
a430: 20 20 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65     ISQLiteChange
a440: 53 65 74 20 63 68 61 6e 67 65 53 65 74 0d 0a 20  Set changeSet.. 
a450: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
a460: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a470: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
a480: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
a490: 20 20 20 43 68 65 63 6b 49 6e 70 75 74 53 74 72     CheckInputStr
a4a0: 65 61 6d 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  eam();..        
a4b0: 20 20 20 20 43 68 65 63 6b 4f 75 74 70 75 74 53      CheckOutputS
a4c0: 74 72 65 61 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  tream();....    
a4d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
a4e0: 72 65 61 6d 43 68 61 6e 67 65 53 65 74 20 73 74  reamChangeSet st
a4f0: 72 65 61 6d 43 68 61 6e 67 65 53 65 74 20 3d 0d  reamChangeSet =.
a500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a510: 20 63 68 61 6e 67 65 53 65 74 20 61 73 20 53 51   changeSet as SQ
a520: 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67 65  LiteStreamChange
a530: 53 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Set;....        
a540: 20 20 20 20 69 66 20 28 73 74 72 65 61 6d 43 68      if (streamCh
a550: 61 6e 67 65 53 65 74 20 3d 3d 20 6e 75 6c 6c 29  angeSet == null)
a560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a580: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
a590: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  entException(.. 
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5b0: 20 20 20 22 6e 6f 74 20 61 20 73 74 72 65 61 6d     "not a stream
a5c0: 20 62 61 73 65 64 20 63 68 61 6e 67 65 20 73 65   based change se
a5d0: 74 22 2c 20 22 63 68 61 6e 67 65 53 65 74 22 29  t", "changeSet")
a5e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a5f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a600: 73 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74 2e  streamChangeSet.
a610: 43 68 65 63 6b 49 6e 70 75 74 53 74 72 65 61 6d  CheckInputStream
a620: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a630: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
a640: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
a650: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a660: 74 65 33 63 68 61 6e 67 65 73 65 74 5f 63 6f 6e  te3changeset_con
a670: 63 61 74 5f 73 74 72 6d 28 0d 0a 20 20 20 20 20  cat_strm(..     
a680: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
a690: 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61 70 74  QLiteStreamAdapt
a6a0: 65 72 28 69 6e 70 75 74 53 74 72 65 61 6d 2c 20  er(inputStream, 
a6b0: 66 6c 61 67 73 29 2e 78 49 6e 70 75 74 2c 20 49  flags).xInput, I
a6c0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20  ntPtr.Zero,..   
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
a6e0: 20 53 51 4c 69 74 65 53 74 72 65 61 6d 41 64 61   SQLiteStreamAda
a6f0: 70 74 65 72 28 73 74 72 65 61 6d 43 68 61 6e 67  pter(streamChang
a700: 65 53 65 74 2e 69 6e 70 75 74 53 74 72 65 61 6d  eSet.inputStream
a710: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a720: 20 20 20 73 74 72 65 61 6d 43 68 61 6e 67 65 53     streamChangeS
a730: 65 74 2e 66 6c 61 67 73 29 2e 78 49 6e 70 75 74  et.flags).xInput
a740: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a  , IntPtr.Zero,..
a750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a760: 6e 65 77 20 53 51 4c 69 74 65 53 74 72 65 61 6d  new SQLiteStream
a770: 41 64 61 70 74 65 72 28 6f 75 74 70 75 74 53 74  Adapter(outputSt
a780: 72 65 61 6d 2c 20 66 6c 61 67 73 29 2e 78 4f 75  ream, flags).xOu
a790: 74 70 75 74 2c 20 49 6e 74 50 74 72 2e 5a 65 72  tput, IntPtr.Zer
a7a0: 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  o);....         
a7b0: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
a7c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
a7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a7e0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
a7f0: 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 20  teException(rc, 
a800: 22 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65  "sqlite3changese
a810: 74 5f 63 6f 6e 63 61 74 5f 73 74 72 6d 22 29 3b  t_concat_strm");
a820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a830: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
a840: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a850: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a8a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
a8b0: 64 20 41 70 70 6c 79 28 0d 0a 20 20 20 20 20 20  d Apply(..      
a8c0: 20 20 20 20 20 20 53 65 73 73 69 6f 6e 43 6f 6e        SessionCon
a8d0: 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 20 63 6f  flictCallback co
a8e0: 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 2c 0d  nflictCallback,.
a8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
a900: 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 0d 0a  ect clientData..
a910: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a920: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a930: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
a940: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
a950: 20 20 20 20 20 20 41 70 70 6c 79 28 63 6f 6e 66        Apply(conf
a960: 6c 69 63 74 43 61 6c 6c 62 61 63 6b 2c 20 6e 75  lictCallback, nu
a970: 6c 6c 2c 20 63 6c 69 65 6e 74 44 61 74 61 29 3b  ll, clientData);
a980: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
a990: 20 20 20 20 20 20 20 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 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a9e0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a9f0: 20 76 6f 69 64 20 41 70 70 6c 79 28 0d 0a 20 20   void Apply(..  
aa00: 20 20 20 20 20 20 20 20 20 20 53 65 73 73 69 6f            Sessio
aa10: 6e 43 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63  nConflictCallbac
aa20: 6b 20 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61  k conflictCallba
aa30: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
aa40: 20 53 65 73 73 69 6f 6e 54 61 62 6c 65 46 69 6c   SessionTableFil
aa50: 74 65 72 43 61 6c 6c 62 61 63 6b 20 74 61 62 6c  terCallback tabl
aa60: 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 2c  eFilterCallback,
aa70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
aa80: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 0d  ject clientData.
aa90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
aaa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aab0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
aac0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
aad0: 20 20 20 20 20 43 68 65 63 6b 49 6e 70 75 74 53       CheckInputS
aae0: 74 72 65 61 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  tream();....    
aaf0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
ab00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 65 73  tiveMethods.xSes
ab10: 73 69 6f 6e 46 69 6c 74 65 72 20 78 46 69 6c 74  sionFilter xFilt
ab20: 65 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  er;....         
ab30: 20 20 20 78 46 69 6c 74 65 72 20 3d 20 6e 65 77     xFilter = new
ab40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ab50: 68 6f 64 73 2e 78 53 65 73 73 69 6f 6e 46 69 6c  hods.xSessionFil
ab60: 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
ab70: 20 20 20 20 20 20 64 65 6c 65 67 61 74 65 28 49        delegate(I
ab80: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62  ntPtr context, b
ab90: 79 74 65 5b 5d 20 74 62 6c 4e 61 6d 65 29 0d 0a  yte[] tblName)..
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
abc0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
abd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
abe0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
abf0: 67 20 6e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53  g name = SQLiteS
ac00: 74 72 69 6e 67 2e 47 65 74 53 74 72 69 6e 67 46  tring.GetStringF
ac10: 72 6f 6d 55 74 66 38 42 79 74 65 73 28 0d 0a 20  romUtf8Bytes(.. 
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac30: 20 20 20 20 20 20 20 74 62 6c 4e 61 6d 65 29 3b         tblName);
ac40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ac50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
ac60: 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61  ableFilterCallba
ac70: 63 6b 28 63 6c 69 65 6e 74 44 61 74 61 2c 20 6e  ck(clientData, n
ac80: 61 6d 65 29 20 3f 20 31 20 3a 20 30 3b 0d 0a 20  ame) ? 1 : 0;.. 
ac90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
aca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
acb0: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
acc0: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
acd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
acf0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
ad00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad20: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
ad30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ad40: 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b  lags.LogCallback
ad50: 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20  Exception) ==.. 
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
ad80: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ad90: 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b  lags.LogCallback
ada0: 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20  Exception)..    
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
add0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ade0: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
adf0: 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 42 61  Message(SQLiteBa
ae00: 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49  se.COR_E_EXCEPTI
ae10: 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ON,..           
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae30: 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f       HelperMetho
ae40: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
ae50: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
ae60: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 61               "Ca
ae90: 75 67 68 74 20 65 78 63 65 70 74 69 6f 6e 20 69  ught exception i
aea0: 6e 20 5c 22 78 46 69 6c 74 65 72 5c 22 20 6d 65  n \"xFilter\" me
aeb0: 74 68 6f 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  thod: {0}",..   
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 29 29               e))
aee0: 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
af20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
af30: 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
af60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
af70: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
af90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afa0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
afb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
afc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 29  ..            })
afd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
afe0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
aff0: 68 6f 64 73 2e 78 53 65 73 73 69 6f 6e 43 6f 6e  hods.xSessionCon
b000: 66 6c 69 63 74 20 78 43 6f 6e 66 6c 69 63 74 3b  flict xConflict;
b010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b020: 78 43 6f 6e 66 6c 69 63 74 20 3d 20 6e 65 77 20  xConflict = new 
b030: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
b040: 6f 64 73 2e 78 53 65 73 73 69 6f 6e 43 6f 6e 66  ods.xSessionConf
b050: 6c 69 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20  lict(..         
b060: 20 20 20 20 20 20 20 64 65 6c 65 67 61 74 65 28         delegate(
b070: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 0d  IntPtr context,.
b080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b090: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
b0a0: 43 68 61 6e 67 65 53 65 74 43 6f 6e 66 6c 69 63  ChangeSetConflic
b0b0: 74 54 79 70 65 20 74 79 70 65 2c 0d 0a 20 20 20  tType type,..   
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 74 65        IntPtr ite
b0e0: 72 61 74 6f 72 29 0d 0a 20 20 20 20 20 20 20 20  rator)..        
b0f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b100: 20 20 20 20 20 20 20 49 53 51 4c 69 74 65 43 68         ISQLiteCh
b110: 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61 49  angeSetMetadataI
b120: 74 65 6d 20 69 74 65 6d 20 3d 20 6e 75 6c 6c 3b  tem item = null;
b130: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b140: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
b150: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 72 65 74 75 72 6e 20 63 6f 6e 66 6c 69 63 74 43  return conflictC
b180: 61 6c 6c 62 61 63 6b 28 63 6c 69 65 6e 74 44 61  allback(clientDa
b190: 74 61 2c 20 74 79 70 65 2c 20 69 74 65 6d 29 3b  ta, type, item);
b1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b1b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b1c0: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
b1d0: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
b1e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b200: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
b210: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b230: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
b240: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
b250: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62  onFlags.LogCallb
b260: 61 63 6b 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d  ackException) ==
b270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
b2a0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62  onFlags.LogCallb
b2b0: 61 63 6b 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20  ackException).. 
b2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2f0: 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
b300: 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74  LogMessage(SQLit
b310: 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45  eBase.COR_E_EXCE
b320: 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20  PTION,..        
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b340: 20 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65          HelperMe
b350: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
b360: 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43  at(CultureInfo.C
b370: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 22 43 61 75 67 68 74 20 65 78 63 65 70 74 69 6f  "Caught exceptio
b3b0: 6e 20 69 6e 20 5c 22 78 43 6f 6e 66 6c 69 63 74  n in \"xConflict
b3c0: 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c  \" method: {0}",
b3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3f0: 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20    e)); /* throw 
b400: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
b410: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b430: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b440: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
b450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b460: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b480: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b4b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b4d0: 72 6e 20 53 51 4c 69 74 65 43 68 61 6e 67 65 53  rn SQLiteChangeS
b4e0: 65 74 43 6f 6e 66 6c 69 63 74 52 65 73 75 6c 74  etConflictResult
b4f0: 2e 41 62 6f 72 74 3b 0d 0a 20 20 20 20 20 20 20  .Abort;..       
b500: 20 20 20 20 20 7d 29 3b 0d 0a 0d 0a 20 20 20 20       });....    
b510: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
b520: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
b530: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
b540: 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65  .sqlite3changese
b550: 74 5f 61 70 70 6c 79 5f 73 74 72 6d 28 0d 0a 20  t_apply_strm(.. 
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
b570: 61 6e 64 6c 65 2c 20 6e 65 77 20 53 51 4c 69 74  andle, new SQLit
b580: 65 53 74 72 65 61 6d 41 64 61 70 74 65 72 28 69  eStreamAdapter(i
b590: 6e 70 75 74 53 74 72 65 61 6d 2c 20 66 6c 61 67  nputStream, flag
b5a0: 73 29 2e 78 49 6e 70 75 74 2c 0d 0a 20 20 20 20  s).xInput,..    
b5b0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
b5c0: 74 72 2e 5a 65 72 6f 2c 20 78 46 69 6c 74 65 72  tr.Zero, xFilter
b5d0: 2c 20 78 43 6f 6e 66 6c 69 63 74 2c 20 49 6e 74  , xConflict, Int
b5e0: 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20  Ptr.Zero);....  
b5f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
b600: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
b610: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
b620: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
b630: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
b640: 6f 6e 28 72 63 2c 20 22 73 71 6c 69 74 65 33 63  on(rc, "sqlite3c
b650: 68 61 6e 67 65 73 65 74 5f 61 70 70 6c 79 5f 73  hangeset_apply_s
b660: 74 72 6d 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  trm");..        
b670: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
b680: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
b690: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b6e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45 6e 75      #region IEnu
b6f0: 6d 65 72 61 62 6c 65 3c 49 53 51 4c 69 74 65 43  merable<ISQLiteC
b700: 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61  hangeSetMetadata
b710: 49 74 65 6d 3e 20 4d 65 6d 62 65 72 73 0d 0a 20  Item> Members.. 
b720: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 45         public IE
b730: 6e 75 6d 65 72 61 74 6f 72 3c 49 53 51 4c 69 74  numerator<ISQLit
b740: 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61  eChangeSetMetada
b750: 74 61 49 74 65 6d 3e 20 47 65 74 45 6e 75 6d 65  taItem> GetEnume
b760: 72 61 74 6f 72 28 29 0d 0a 20 20 20 20 20 20 20  rator()..       
b770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b780: 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74  return new SQLit
b790: 65 43 68 61 6e 67 65 53 65 74 45 6e 75 6d 65 72  eChangeSetEnumer
b7a0: 61 74 6f 72 28 69 6e 70 75 74 53 74 72 65 61 6d  ator(inputStream
b7b0: 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20  , flags);..     
b7c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
b7d0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
b7e0: 20 20 20 20 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 2f 2f 2f  ////////////////
b820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b830: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b840: 45 6e 75 6d 65 72 61 62 6c 65 20 4d 65 6d 62 65  Enumerable Membe
b850: 72 73 0d 0a 20 20 20 20 20 20 20 20 49 45 6e 75  rs..        IEnu
b860: 6d 65 72 61 74 6f 72 20 53 79 73 74 65 6d 2e 43  merator System.C
b870: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45 6e 75 6d  ollections.IEnum
b880: 65 72 61 62 6c 65 2e 47 65 74 45 6e 75 6d 65 72  erable.GetEnumer
b890: 61 74 6f 72 28 29 0d 0a 20 20 20 20 20 20 20 20  ator()..        
b8a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
b8b0: 65 74 75 72 6e 20 47 65 74 45 6e 75 6d 65 72 61  eturn GetEnumera
b8c0: 74 6f 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  tor();..        
b8d0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
b8e0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
b8f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b930: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b940: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
b950: 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  posable Members.
b960: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
b970: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
b980: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b990: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74         Dispose(t
b9a0: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
b9b0: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
b9c0: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
b9d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b9e0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b9f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ba00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ba40: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
ba50: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
ba60: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
ba70: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
ba80: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
ba90: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
baa0: 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70  e void CheckDisp
bab0: 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20  osed() /* throw 
bac0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  */..        {..#
bad0: 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50  if THROW_ON_DISP
bae0: 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20  OSED..          
baf0: 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
bb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb20: 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
bb30: 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
bb40: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
bb50: 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
bb60: 51 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67  QLiteStreamChang
bb70: 65 53 65 74 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  eSet).Name);..  
bb80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e            }..#en
bb90: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
bba0: 0d 0a 20 20 20 20 20 20 20 20 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
bc00: 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65  vate /* protecte
bc10: 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69  d virtual */ voi
bc20: 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64  d Dispose(bool d
bc30: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
bc40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bc50: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
bc60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bc70: 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f        if (!dispo
bc80: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
bc90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
bcb0: 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20  (disposing)..   
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bce0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73            // dis
bd30: 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73  pose managed res
bd40: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd60: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
bd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bda0: 20 20 20 20 20 20 20 20 69 66 20 28 6f 75 74 70          if (outp
bdb0: 75 74 53 74 72 65 61 6d 20 21 3d 20 6e 75 6c 6c  utStream != null
bdc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
bde0: 75 74 70 75 74 53 74 72 65 61 6d 20 3d 20 6e 75  utputStream = nu
bdf0: 6c 6c 3b 20 2f 2a 20 4e 4f 54 20 4f 57 4e 45 44  ll; /* NOT OWNED
be00: 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
be20: 66 20 28 69 6e 70 75 74 53 74 72 65 61 6d 20 21  f (inputStream !
be30: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be50: 20 20 20 20 20 69 6e 70 75 74 53 74 72 65 61 6d       inputStream
be60: 20 3d 20 6e 75 6c 6c 3b 20 2f 2a 20 4e 4f 54 20   = null; /* NOT 
be70: 4f 57 4e 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20  OWNED */..      
be80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
be90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bea0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
beb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bee0: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
bef0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
bf00: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf40: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
bf50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
bf60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
bf70: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
bf80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
bfa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bfb0: 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74   // NOTE: Everyt
bfc0: 68 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66  hing should be f
bfd0: 75 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74  ully disposed at
bfe0: 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20   this point...  
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c010: 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75    disposed = tru
c020: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
c030: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
c040: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
c050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
c060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
c0b0: 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f  region Destructo
c0c0: 72 0d 0a 20 20 20 20 20 20 20 20 7e 53 51 4c 69  r..        ~SQLi
c0d0: 74 65 53 74 72 65 61 6d 43 68 61 6e 67 65 53 65  teStreamChangeSe
c0e0: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t()..        {..
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
c100: 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ose(false);..   
c110: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c120: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
c130: 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
c140: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
c150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c190: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
c1a0: 69 6f 6e 20 53 51 4c 69 74 65 43 68 61 6e 67 65  ion SQLiteChange
c1b0: 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 20 43 6c  SetEnumerator Cl
c1c0: 61 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ass..    interna
c1d0: 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  l sealed class S
c1e0: 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 45 6e  QLiteChangeSetEn
c1f0: 75 6d 65 72 61 74 6f 72 20 3a 0d 0a 20 20 20 20  umerator :..    
c200: 20 20 20 20 49 45 6e 75 6d 65 72 61 74 6f 72 3c      IEnumerator<
c210: 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  ISQLiteChangeSet
c220: 4d 65 74 61 64 61 74 61 49 74 65 6d 3e 0d 0a 20  MetadataItem>.. 
c230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
c240: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61  egion Private Da
c250: 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ta..        priv
c260: 61 74 65 20 53 51 4c 69 74 65 43 68 61 6e 67 65  ate SQLiteChange
c270: 53 65 74 49 74 65 72 61 74 6f 72 20 69 74 65 72  SetIterator iter
c280: 61 74 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 23  ator;..        #
c290: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
c2a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c2f0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
c300: 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
c310: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ors..        pub
c320: 6c 69 63 20 53 51 4c 69 74 65 43 68 61 6e 67 65  lic SQLiteChange
c330: 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 0d 0a  SetEnumerator(..
c340: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
c350: 5b 5d 20 72 61 77 44 61 74 61 0d 0a 20 20 20 20  [] rawData..    
c360: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
c370: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c380: 20 20 69 74 65 72 61 74 6f 72 20 3d 20 53 51 4c    iterator = SQL
c390: 69 74 65 43 68 61 6e 67 65 53 65 74 49 74 65 72  iteChangeSetIter
c3a0: 61 74 6f 72 2e 43 72 65 61 74 65 28 72 61 77 44  ator.Create(rawD
c3b0: 61 74 61 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ata);..        }
c3c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c410: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
c420: 75 62 6c 69 63 20 53 51 4c 69 74 65 43 68 61 6e  ublic SQLiteChan
c430: 67 65 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 28  geSetEnumerator(
c440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
c450: 72 65 61 6d 20 73 74 72 65 61 6d 2c 0d 0a 20 20  ream stream,..  
c460: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
c470: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
c480: 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20  flags..         
c490: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
c4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65  .            ite
c4b0: 72 61 74 6f 72 20 3d 20 53 51 4c 69 74 65 43 68  rator = SQLiteCh
c4c0: 61 6e 67 65 53 65 74 49 74 65 72 61 74 6f 72 2e  angeSetIterator.
c4d0: 43 72 65 61 74 65 28 73 74 72 65 61 6d 2c 20 66  Create(stream, f
c4e0: 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  lags);..        
c4f0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
c500: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
c510: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c550: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c560: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45 6e 75      #region IEnu
c570: 6d 65 72 61 74 6f 72 3c 49 53 51 4c 69 74 65 43  merator<ISQLiteC
c580: 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61  hangeSetMetadata
c590: 49 74 65 6d 3e 20 4d 65 6d 62 65 72 73 0d 0a 20  Item> Members.. 
c5a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 53         public IS
c5b0: 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65  QLiteChangeSetMe
c5c0: 74 61 64 61 74 61 49 74 65 6d 20 43 75 72 72 65  tadataItem Curre
c5d0: 6e 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  nt..        {.. 
c5e0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
c5f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
c600: 3b 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49  ; throw new NotI
c610: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
c620: 69 6f 6e 28 29 3b 20 7d 0d 0a 20 20 20 20 20 20  ion(); }..      
c630: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
c640: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
c650: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c6a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45        #region IE
c6b0: 6e 75 6d 65 72 61 74 6f 72 20 4d 65 6d 62 65 72  numerator Member
c6c0: 73 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  s..        objec
c6d0: 74 20 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45  t Collections.IE
c6e0: 6e 75 6d 65 72 61 74 6f 72 2e 43 75 72 72 65 6e  numerator.Curren
c6f0: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
c700: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
c710: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
c720: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
c730: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
c740: 6f 6e 28 29 3b 20 7d 0d 0a 20 20 20 20 20 20 20  on(); }..       
c750: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
c760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c7b0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4d 6f 76   public bool Mov
c7c0: 65 4e 65 78 74 28 29 0d 0a 20 20 20 20 20 20 20  eNext()..       
c7d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c7e0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
c7f0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
c800: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
c810: 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  on();..        }
c820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
c830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c870: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
c880: 75 62 6c 69 63 20 76 6f 69 64 20 52 65 73 65 74  ublic void Reset
c890: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
c8a0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
c8b0: 44 69 73 70 6f 73 65 64 28 29 3b 20 74 68 72 6f  Disposed(); thro
c8c0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
c8d0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
c8e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
c8f0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
c900: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
c910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c950: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
c960: 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
c970: 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
c980: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
c990: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20  ispose()..      
c9a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c9b0: 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d   Dispose(true);.
c9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 43 2e  .            GC.
c9d0: 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65  SuppressFinalize
c9e0: 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20  (this);..       
c9f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
ca00: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
ca10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
ca60: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
ca70: 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72  sposable "Patter
ca80: 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  n" Members..    
ca90: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
caa0: 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20   disposed;..    
cab0: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
cac0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
cad0: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
cae0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52        {..#if THR
caf0: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
cb10: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
cb20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cb30: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
cb40: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
cb50: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb70: 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 43    typeof(SQLiteC
cb80: 68 61 6e 67 65 53 65 74 45 6e 75 6d 65 72 61 74  hangeSetEnumerat
cb90: 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  or).Name);..    
cba0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
cbb0: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
cbc0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
cc10: 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
cc20: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
cc30: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
cc40: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
cc50: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
cc60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cc70: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
cc80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cc90: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
cca0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
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 20 20 20 20 69 66 20 28 64             if (d
ccd0: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ccf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd00: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
cd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd40: 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f          // dispo
cd50: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
cd60: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
cd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdc0: 20 20 20 20 20 20 69 66 20 28 69 74 65 72 61 74        if (iterat
cdd0: 6f 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  or != null)..   
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 20 20 69 74 65 72 61 74 6f 72 2e 44 69 73      iterator.Dis
ce20: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce40: 20 20 20 20 20 69 74 65 72 61 74 6f 72 20 3d 20       iterator = 
ce50: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ce70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ce80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ceb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cec0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
ced0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
cee0: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
cef0: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
cf00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
cf10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
cf50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
cf60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
cf70: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
cf80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cf90: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
cfa0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
cfb0: 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73 68 6f  : Everything sho
cfc0: 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64 69 73  uld be fully dis
cfd0: 70 6f 73 65 64 20 61 74 20 74 68 69 73 20 70 6f  posed at this po
cfe0: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  int...          
cff0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
d000: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
d010: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
d020: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d030: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
d040: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
d050: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d0a0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
d0b0: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
d0c0: 20 20 20 7e 53 51 4c 69 74 65 43 68 61 6e 67 65     ~SQLiteChange
d0d0: 53 65 74 45 6e 75 6d 65 72 61 74 6f 72 28 29 0d  SetEnumerator().
d0e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d0f0: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
d100: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
d110: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
d120: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
d130: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
d140: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
d150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d190: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
d1a0: 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74 4d  SQLiteChangeSetM
d1b0: 65 74 61 64 61 74 61 49 74 65 6d 20 43 6c 61 73  etadataItem Clas
d1c0: 73 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65  s..    public se
d1d0: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
d1e0: 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61  eChangeSetMetada
d1f0: 74 61 49 74 65 6d 20 3a 0d 0a 20 20 20 20 20 20  taItem :..      
d200: 20 20 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53    ISQLiteChangeS
d210: 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d 2c 20  etMetadataItem, 
d220: 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20  IDisposable..   
d230: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
d240: 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61  ion Private Data
d250: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
d260: 65 20 49 6e 74 50 74 72 20 69 74 65 72 61 74 6f  e IntPtr iterato
d270: 72 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  r;..        #end
d280: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
d290: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
d2e0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
d2f0: 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
d300: 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  s..        inter
d310: 6e 61 6c 20 53 51 4c 69 74 65 43 68 61 6e 67 65  nal SQLiteChange
d320: 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d 28  SetMetadataItem(
d330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
d340: 74 50 74 72 20 69 74 65 72 61 74 6f 72 0d 0a 20  tPtr iterator.. 
d350: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
d360: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d370: 20 20 20 20 20 74 68 69 73 2e 69 74 65 72 61 74       this.iterat
d380: 6f 72 20 3d 20 69 74 65 72 61 74 6f 72 3b 0d 0a  or = iterator;..
d390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d3a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
d3b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
d3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d400: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
d410: 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
d420: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ods..        pri
d430: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 48  vate void CheckH
d440: 61 6e 64 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  andle()..       
d450: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d460: 69 66 20 28 69 74 65 72 61 74 6f 72 20 3d 3d 20  if (iterator == 
d470: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
d490: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
d4a0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
d4b0: 6e 28 22 69 74 65 72 61 74 6f 72 20 69 73 20 6e  n("iterator is n
d4c0: 6f 74 20 6f 70 65 6e 22 29 3b 0d 0a 20 20 20 20  ot open");..    
d4d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d4e0: 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d530: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
d540: 20 50 6f 70 75 6c 61 74 65 4f 70 65 72 61 74 69   PopulateOperati
d550: 6f 6e 4d 65 74 61 64 61 74 61 28 29 0d 0a 20 20  onMetadata()..  
d560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d570: 20 20 20 20 20 69 66 20 28 28 74 61 62 6c 65 4e       if ((tableN
d580: 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ame == null) || 
d590: 28 6e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73  (numberOfColumns
d5a0: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20   == null) ||..  
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f                (o
d5c0: 70 65 72 61 74 69 6f 6e 43 6f 64 65 20 3d 3d 20  perationCode == 
d5d0: 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e 64 69 72 65  null) || (indire
d5e0: 63 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  ct == null))..  
d5f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d600: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
d610: 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20  ckHandle();.... 
d620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
d630: 6e 74 50 74 72 20 70 54 62 6c 4e 61 6d 65 20 3d  ntPtr pTblName =
d640: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
d660: 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 41  QLiteAuthorizerA
d670: 63 74 69 6f 6e 43 6f 64 65 20 6f 70 20 3d 20 53  ctionCode op = S
d680: 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 41  QLiteAuthorizerA
d690: 63 74 69 6f 6e 43 6f 64 65 2e 4e 6f 6e 65 3b 0d  ctionCode.None;.
d6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d6b0: 20 69 6e 74 20 62 49 6e 64 69 72 65 63 74 20 3d   int bIndirect =
d6c0: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
d6d0: 20 20 20 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e       int nColumn
d6e0: 73 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  s = 0;....      
d6f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
d700: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
d710: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d720: 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67 65  ds.sqlite3change
d730: 73 65 74 5f 6f 70 28 0d 0a 20 20 20 20 20 20 20  set_op(..       
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65               ite
d750: 72 61 74 6f 72 2c 20 72 65 66 20 70 54 62 6c 4e  rator, ref pTblN
d760: 61 6d 65 2c 20 72 65 66 20 6e 43 6f 6c 75 6d 6e  ame, ref nColumn
d770: 73 2c 20 72 65 66 20 6f 70 2c 0d 0a 20 20 20 20  s, ref op,..    
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 72 65 66 20 62 49 6e 64 69 72 65 63 74 29 3b 0d  ref bIndirect);.
d7a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d7b0: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
d7c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
d7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d7e0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
d7f0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
d800: 72 63 2c 20 22 73 71 6c 69 74 65 33 63 68 61 6e  rc, "sqlite3chan
d810: 67 65 73 65 74 5f 6f 70 22 29 3b 0d 0a 0d 0a 20  geset_op");.... 
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
d830: 61 62 6c 65 4e 61 6d 65 20 3d 20 53 51 4c 69 74  ableName = SQLit
d840: 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72  eString.StringFr
d850: 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 70 54 62  omUtf8IntPtr(pTb
d860: 6c 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  lName);..       
d870: 20 20 20 20 20 20 20 20 20 6e 75 6d 62 65 72 4f           numberO
d880: 66 43 6f 6c 75 6d 6e 73 20 3d 20 6e 43 6f 6c 75  fColumns = nColu
d890: 6d 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mns;..          
d8a0: 20 20 20 20 20 20 6f 70 65 72 61 74 69 6f 6e 43        operationC
d8b0: 6f 64 65 20 3d 20 6f 70 3b 0d 0a 20 20 20 20 20  ode = op;..     
d8c0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 69 72             indir
d8d0: 65 63 74 20 3d 20 28 62 49 6e 64 69 72 65 63 74  ect = (bIndirect
d8e0: 20 21 3d 20 30 29 3b 0d 0a 20 20 20 20 20 20 20   != 0);..       
d8f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d900: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d950: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
d960: 70 72 69 76 61 74 65 20 76 6f 69 64 20 50 6f 70  private void Pop
d970: 75 6c 61 74 65 50 72 69 6d 61 72 79 4b 65 79 43  ulatePrimaryKeyC
d980: 6f 6c 75 6d 6e 73 28 29 0d 0a 20 20 20 20 20 20  olumns()..      
d990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d9a0: 20 69 66 20 28 70 72 69 6d 61 72 79 4b 65 79 43   if (primaryKeyC
d9b0: 6f 6c 75 6d 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  olumns == null).
d9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9e0: 43 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a  CheckHandle();..
d9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da00: 20 20 49 6e 74 50 74 72 20 70 50 72 69 6d 61 72    IntPtr pPrimar
da10: 79 4b 65 79 73 20 3d 20 49 6e 74 50 74 72 2e 5a  yKeys = IntPtr.Z
da20: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
da30: 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6c 75 6d        int nColum
da40: 6e 73 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  ns = 0;....     
da50: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
da60: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
da70: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
da80: 6f 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e 67  ods.sqlite3chang
da90: 65 73 65 74 5f 70 6b 28 0d 0a 20 20 20 20 20 20  eset_pk(..      
daa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74                it
dab0: 65 72 61 74 6f 72 2c 20 72 65 66 20 70 50 72 69  erator, ref pPri
dac0: 6d 61 72 79 4b 65 79 73 2c 20 72 65 66 20 6e 43  maryKeys, ref nC
dad0: 6f 6c 75 6d 6e 73 29 3b 0d 0a 0d 0a 20 20 20 20  olumns);....    
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
daf0: 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
db00: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
db20: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
db30: 78 63 65 70 74 69 6f 6e 28 72 63 2c 20 22 73 71  xception(rc, "sq
db40: 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f 70  lite3changeset_p
db50: 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  k");....        
db60: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
db70: 79 74 65 73 20 3d 20 53 51 4c 69 74 65 42 79 74  ytes = SQLiteByt
db80: 65 73 2e 46 72 6f 6d 49 6e 74 50 74 72 28 70 50  es.FromIntPtr(pP
db90: 72 69 6d 61 72 79 4b 65 79 73 2c 20 6e 43 6f 6c  rimaryKeys, nCol
dba0: 75 6d 6e 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  umns);....      
dbb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 79            if (by
dbc0: 74 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tes != null)..  
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
dbe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dbf0: 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65 79 43       primaryKeyC
dc00: 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 62 6f 6f  olumns = new boo
dc10: 6c 5b 6e 43 6f 6c 75 6d 6e 73 5d 3b 0d 0a 0d 0a  l[nColumns];....
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc30: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
dc40: 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
dc50: 62 79 74 65 73 2e 4c 65 6e 67 74 68 3b 20 69 6e  bytes.Length; in
dc60: 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc80: 70 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e  primaryKeyColumn
dc90: 73 5b 69 6e 64 65 78 5d 20 3d 20 28 62 79 74 65  s[index] = (byte
dca0: 73 5b 69 6e 64 65 78 5d 20 21 3d 20 30 29 3b 0d  s[index] != 0);.
dcb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dcc0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
dcd0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
dce0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
dcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
dd30: 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
dd40: 74 65 20 76 6f 69 64 20 50 6f 70 75 6c 61 74 65  te void Populate
dd50: 4e 75 6d 62 65 72 4f 66 46 6f 72 65 69 67 6e 4b  NumberOfForeignK
dd60: 65 79 43 6f 6e 66 6c 69 63 74 73 28 29 0d 0a 20  eyConflicts().. 
dd70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dd80: 20 20 20 20 20 20 69 66 20 28 6e 75 6d 62 65 72        if (number
dd90: 4f 66 46 6f 72 65 69 67 6e 4b 65 79 43 6f 6e 66  OfForeignKeyConf
dda0: 6c 69 63 74 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  licts == null)..
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
ddd0: 68 65 63 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d  heckHandle();...
dde0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ddf0: 20 69 6e 74 20 63 6f 6e 66 6c 69 63 74 73 20 3d   int conflicts =
de00: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
de10: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
de20: 6f 72 43 6f 64 65 20 72 63 20 3d 0d 0a 20 20 20  orCode rc =..   
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de40: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
de50: 68 6f 64 73 2e 73 71 6c 69 74 65 33 63 68 61 6e  hods.sqlite3chan
de60: 67 65 73 65 74 5f 66 6b 5f 63 6f 6e 66 6c 69 63  geset_fk_conflic
de70: 74 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ts(..           
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74 65               ite
de90: 72 61 74 6f 72 2c 20 72 65 66 20 63 6f 6e 66 6c  rator, ref confl
dea0: 69 63 74 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  icts);....      
deb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
dec0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
ded0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
dee0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
df10: 45 78 63 65 70 74 69 6f 6e 28 72 63 2c 0d 0a 20  Exception(rc,.. 
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 63         "sqlite3c
df40: 68 61 6e 67 65 73 65 74 5f 66 6b 5f 63 6f 6e 66  hangeset_fk_conf
df50: 6c 69 63 74 73 22 29 3b 0d 0a 20 20 20 20 20 20  licts");..      
df60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
df70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
df80: 75 6d 62 65 72 4f 66 46 6f 72 65 69 67 6e 4b 65  umberOfForeignKe
df90: 79 43 6f 6e 66 6c 69 63 74 73 20 3d 20 63 6f 6e  yConflicts = con
dfa0: 66 6c 69 63 74 73 3b 0d 0a 20 20 20 20 20 20 20  flicts;..       
dfb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
dfc0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
dfd0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
dfe0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
dff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e030: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
e040: 69 74 65 43 68 61 6e 67 65 53 65 74 4d 65 74 61  iteChangeSetMeta
e050: 64 61 74 61 49 74 65 6d 20 4d 65 6d 62 65 72 73  dataItem Members
e060: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
e070: 65 20 73 74 72 69 6e 67 20 74 61 62 6c 65 4e 61  e string tableNa
e080: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  me;..        pub
e090: 6c 69 63 20 73 74 72 69 6e 67 20 54 61 62 6c 65  lic string Table
e0a0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  Name..        {.
e0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
e0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e0e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
e0f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e100: 20 20 20 50 6f 70 75 6c 61 74 65 4f 70 65 72 61     PopulateOpera
e110: 74 69 6f 6e 4d 65 74 61 64 61 74 61 28 29 3b 0d  tionMetadata();.
e120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e130: 20 20 20 72 65 74 75 72 6e 20 74 61 62 6c 65 4e     return tableN
e140: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
e150: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
e160: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
e170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
e1c0: 76 61 74 65 20 69 6e 74 3f 20 6e 75 6d 62 65 72  vate int? number
e1d0: 4f 66 43 6f 6c 75 6d 6e 73 3b 0d 0a 20 20 20 20  OfColumns;..    
e1e0: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4e      public int N
e1f0: 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 0d 0a  umberOfColumns..
e200: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e210: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
e220: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e230: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
e240: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 6f 70               Pop
e260: 75 6c 61 74 65 4f 70 65 72 61 74 69 6f 6e 4d 65  ulateOperationMe
e270: 74 61 64 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20  tadata();....   
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
e290: 75 72 6e 20 28 69 6e 74 29 6e 75 6d 62 65 72 4f  urn (int)numberO
e2a0: 66 43 6f 6c 75 6d 6e 73 3b 0d 0a 20 20 20 20 20  fColumns;..     
e2b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e2c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
e2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e310: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e320: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
e330: 41 75 74 68 6f 72 69 7a 65 72 41 63 74 69 6f 6e  AuthorizerAction
e340: 43 6f 64 65 3f 20 6f 70 65 72 61 74 69 6f 6e 43  Code? operationC
e350: 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 75  ode;..        pu
e360: 62 6c 69 63 20 53 51 4c 69 74 65 41 75 74 68 6f  blic SQLiteAutho
e370: 72 69 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 20  rizerActionCode 
e380: 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65 0d 0a 20  OperationCode.. 
e390: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e3a0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
e3b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e3c0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
e3d0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 50 6f 70 75              Popu
e3f0: 6c 61 74 65 4f 70 65 72 61 74 69 6f 6e 4d 65 74  lateOperationMet
e400: 61 64 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20  adata();....    
e410: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
e420: 72 6e 20 28 53 51 4c 69 74 65 41 75 74 68 6f 72  rn (SQLiteAuthor
e430: 69 7a 65 72 41 63 74 69 6f 6e 43 6f 64 65 29 6f  izerActionCode)o
e440: 70 65 72 61 74 69 6f 6e 43 6f 64 65 3b 0d 0a 20  perationCode;.. 
e450: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e460: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e470: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e4c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
e4d0: 6f 6c 3f 20 69 6e 64 69 72 65 63 74 3b 0d 0a 20  ol? indirect;.. 
e4e0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
e4f0: 6f 6c 20 49 6e 64 69 72 65 63 74 0d 0a 20 20 20  ol Indirect..   
e500: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e510: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
e520: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e530: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
e540: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
e550: 20 20 20 20 20 20 20 20 20 20 50 6f 70 75 6c 61            Popula
e560: 74 65 4f 70 65 72 61 74 69 6f 6e 4d 65 74 61 64  teOperationMetad
e570: 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ata();....      
e580: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
e590: 20 28 62 6f 6f 6c 29 69 6e 64 69 72 65 63 74 3b   (bool)indirect;
e5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e5b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
e5c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
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 0d 0a 0d  /////////////...
e610: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
e620: 20 62 6f 6f 6c 5b 5d 20 70 72 69 6d 61 72 79 4b   bool[] primaryK
e630: 65 79 43 6f 6c 75 6d 6e 73 3b 0d 0a 20 20 20 20  eyColumns;..    
e640: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 5b      public bool[
e650: 5d 20 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75  ] PrimaryKeyColu
e660: 6d 6e 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  mns..        {..
e670: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
e680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6a0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
e6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6c0: 20 20 50 6f 70 75 6c 61 74 65 50 72 69 6d 61 72    PopulatePrimar
e6d0: 79 4b 65 79 43 6f 6c 75 6d 6e 73 28 29 3b 0d 0a  yKeyColumns();..
e6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6f0: 20 20 72 65 74 75 72 6e 20 70 72 69 6d 61 72 79    return primary
e700: 4b 65 79 43 6f 6c 75 6d 6e 73 3b 0d 0a 20 20 20  KeyColumns;..   
e710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
e720: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e730: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e780: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 3f      private int?
e790: 20 6e 75 6d 62 65 72 4f 66 46 6f 72 65 69 67 6e   numberOfForeign
e7a0: 4b 65 79 43 6f 6e 66 6c 69 63 74 73 3b 0d 0a 20  KeyConflicts;.. 
e7b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e         public in
e7c0: 74 20 4e 75 6d 62 65 72 4f 66 46 6f 72 65 69 67  t NumberOfForeig
e7d0: 6e 4b 65 79 43 6f 6e 66 6c 69 63 74 73 0d 0a 20  nKeyConflicts.. 
e7e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e7f0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
e800: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e810: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
e820: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
e830: 20 20 20 20 20 20 20 20 20 20 20 20 50 6f 70 75              Popu
e840: 6c 61 74 65 4e 75 6d 62 65 72 4f 66 46 6f 72 65  lateNumberOfFore
e850: 69 67 6e 4b 65 79 43 6f 6e 66 6c 69 63 74 73 28  ignKeyConflicts(
e860: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
e870: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 69 6e        return (in
e880: 74 29 6e 75 6d 62 65 72 4f 66 46 6f 72 65 69 67  t)numberOfForeig
e890: 6e 4b 65 79 43 6f 6e 66 6c 69 63 74 73 3b 0d 0a  nKeyConflicts;..
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e8b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e8c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e8d0: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
e910: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
e920: 4c 69 74 65 56 61 6c 75 65 20 47 65 74 4f 6c 64  LiteValue GetOld
e930: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
e940: 20 20 20 20 69 6e 74 20 63 6f 6c 75 6d 6e 49 6e      int columnIn
e950: 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dex..           
e960: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
e970: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
e980: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
e990: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 48 61           CheckHa
e9a0: 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndle();....     
e9b0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
e9c0: 61 6c 75 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65  alue = IntPtr.Ze
e9d0: 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ro;....         
e9e0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
e9f0: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
ea00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
ea10: 74 65 33 63 68 61 6e 67 65 73 65 74 5f 6f 6c 64  te3changeset_old
ea20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ea30: 20 20 20 69 74 65 72 61 74 6f 72 2c 20 63 6f 6c     iterator, col
ea40: 75 6d 6e 49 6e 64 65 78 2c 20 72 65 66 20 70 56  umnIndex, ref pV
ea50: 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
ea60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
ea70: 69 74 65 56 61 6c 75 65 2e 46 72 6f 6d 49 6e 74  iteValue.FromInt
ea80: 50 74 72 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20  Ptr(pValue);..  
ea90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
eaa0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
eab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ead0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
eaf0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
eb00: 69 74 65 56 61 6c 75 65 20 47 65 74 4e 65 77 56  iteValue GetNewV
eb10: 61 6c 75 65 28 69 6e 74 20 63 6f 6c 75 6d 6e 49  alue(int columnI
eb20: 6e 64 65 78 29 0d 0a 20 20 20 20 20 20 20 20 7b  ndex)..        {
eb30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
eb40: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
eb60: 6b 48 61 6e 64 6c 65 28 29 3b 0d 0a 0d 0a 20 20  kHandle();....  
eb70: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
eb80: 20 70 56 61 6c 75 65 20 3d 20 49 6e 74 50 74 72   pValue = IntPtr
eb90: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
eba0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
ebb0: 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66  rCode rc = Unsaf
ebc0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
ebd0: 71 6c 69 74 65 33 63 68 61 6e 67 65 73 65 74 5f  qlite3changeset_
ebe0: 6e 65 77 28 0d 0a 20 20 20 20 20 20 20 20 20 20  new(..          
ebf0: 20 20 20 20 20 20 69 74 65 72 61 74 6f 72 2c 20        iterator, 
ec00: 63 6f 6c 75 6d 6e 49 6e 64 65 78 2c 20 72 65 66  columnIndex, ref
ec10: 20 70 56 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20   pValue);....   
ec20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ec30: 53 51 4c 69 74 65 56 61 6c 75 65 2e 46 72 6f 6d  SQLiteValue.From
ec40: 49 6e 74 50 74 72 28 70 56 61 6c 75 65 29 3b 0d  IntPtr(pValue);.
ec50: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
ec60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ec70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ecb0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
ecc0: 53 51 4c 69 74 65 56 61 6c 75 65 20 47 65 74 43  SQLiteValue GetC
ecd0: 6f 6e 66 6c 69 63 74 56 61 6c 75 65 28 69 6e 74  onflictValue(int
ece0: 20 63 6f 6c 75 6d 6e 49 6e 64 65 78 29 0d 0a 20   columnIndex).. 
ecf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ed00: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
ed10: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
ed20: 20 20 20 20 43 68 65 63 6b 48 61 6e 64 6c 65 28      CheckHandle(
ed30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ed40: 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65 20    IntPtr pValue 
ed50: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
ed60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
ed70: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
ed80: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
ed90: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 63 68  ethods.sqlite3ch
eda0: 61 6e 67 65 73 65 74 5f 63 6f 6e 66 6c 69 63 74  angeset_conflict
edb0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
edc0: 20 20 20 69 74 65 72 61 74 6f 72 2c 20 63 6f 6c     iterator, col
edd0: 75 6d 6e 49 6e 64 65 78 2c 20 72 65 66 20 70 56  umnIndex, ref pV
ede0: 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
edf0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
ee00: 69 74 65 56 61 6c 75 65 2e 46 72 6f 6d 49 6e 74  iteValue.FromInt
ee10: 50 74 72 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20  Ptr(pValue);..  
ee20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ee30: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
ee40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ee50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ee90: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
eea0: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
eeb0: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70  mbers..        p
eec0: 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
eed0: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  se()..        {.
eee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
eef0: 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20  pose(true);..   
ef00: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
ef10: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
ef20: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  s);..        }..
ef30: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
ef40: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
ef50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
efa0: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
efb0: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
efc0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
efd0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
efe0: 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  posed;..        
eff0: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
f000: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
f010: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
f020: 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f    {..#if THROW_O
f030: 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20  N_DISPOSED..    
f040: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
f050: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
f060: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f070: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f080: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
f090: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
f0b0: 70 65 6f 66 28 53 51 4c 69 74 65 43 68 61 6e 67  peof(SQLiteChang
f0c0: 65 53 65 74 4d 65 74 61 64 61 74 61 49 74 65 6d  eSetMetadataItem
f0d0: 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
f0e0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
f0f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
f100: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f150: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
f160: 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69   /* protected vi
f170: 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69  rtual */ void Di
f180: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
f190: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b  sing)..        {
f1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
f1b0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
f1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f1d0: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
f1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f1f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f200: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
f210: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
f220: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f240: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f280: 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65        // dispose
f290: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
f2a0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f300: 20 20 20 20 69 66 20 28 69 74 65 72 61 74 6f 72      if (iterator
f310: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
f320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 74                it
f340: 65 72 61 74 6f 72 20 3d 20 49 6e 74 50 74 72 2e  erator = IntPtr.
f350: 5a 65 72 6f 3b 20 2f 2a 20 4e 4f 54 20 4f 57 4e  Zero; /* NOT OWN
f360: 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ED */..         
f370: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f390: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
f3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3d0: 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
f3e0: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
f3f0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
f400: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f430: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
f440: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
f450: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
f460: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
f470: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f480: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
f4a0: 20 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e   NOTE: Everythin
f4b0: 67 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c  g should be full
f4c0: 79 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68  y disposed at th
f4d0: 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20  is point...     
f4e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
f500: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
f510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
f520: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f530: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
f540: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
f550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
f5a0: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
f5b0: 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65 43          ~SQLiteC
f5c0: 68 61 6e 67 65 53 65 74 4d 65 74 61 64 61 74 61  hangeSetMetadata
f5d0: 49 74 65 6d 28 29 0d 0a 20 20 20 20 20 20 20 20  Item()..        
f5e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44  {..            D
f5f0: 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
f600: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f610: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
f620: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
f630: 67 69 6f 6e 0d 0a 7d 0d 0a                       gion..}..