System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6636e083dcce1bf20f24e09f9266a51695a3b3d3:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 20 20 75 73 69 6e 67  te..{..    using
0150: 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73   System;..    us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
0170: 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 20 20 75 73 69  Common;..    usi
0180: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
0190: 73 74 69 63 73 3b 0d 0a 20 20 20 20 75 73 69 6e  stics;..    usin
01a0: 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69  g System.Globali
01b0: 7a 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 2f  zation;....    /
01c0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
01d0: 20 20 2f 2f 2f 20 45 76 65 6e 74 20 64 61 74 61    /// Event data
01e0: 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 65 76 65   for logging eve
01f0: 6e 74 20 68 61 6e 64 6c 65 72 73 2e 0d 0a 20 20  nt handlers...  
0200: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0210: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61  ..    public cla
0220: 73 73 20 4c 6f 67 45 76 65 6e 74 41 72 67 73 20  ss LogEventArgs 
0230: 3a 20 45 76 65 6e 74 41 72 67 73 0d 0a 20 20 20  : EventArgs..   
0240: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   {..        /// 
0250: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
0260: 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72     /// The error
0270: 20 63 6f 64 65 2e 20 20 54 68 65 20 74 79 70 65   code.  The type
0280: 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
0290: 76 61 6c 75 65 20 73 68 6f 75 6c 64 20 62 65 0d  value should be.
02a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
02b0: 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f  e cref="Int32" /
02c0: 3e 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22  > or <see cref="
02d0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 22  SQLiteErrorCode"
02e0: 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   />...        //
02f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0300: 20 20 20 20 20 20 70 75 62 6c 69 63 20 72 65 61        public rea
0310: 64 6f 6e 6c 79 20 6f 62 6a 65 63 74 20 45 72 72  donly object Err
0320: 6f 72 43 6f 64 65 3b 0d 0a 0d 0a 20 20 20 20 20  orCode;....     
0330: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0340: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 51  ..        /// SQ
0350: 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74  L statement text
0360: 20 61 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e   as the statemen
0370: 74 20 66 69 72 73 74 20 62 65 67 69 6e 73 20 65  t first begins e
0380: 78 65 63 75 74 69 6e 67 0d 0a 20 20 20 20 20 20  xecuting..      
0390: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
03a0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
03b0: 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
03c0: 20 4d 65 73 73 61 67 65 3b 0d 0a 0d 0a 20 20 20   Message;....   
03d0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
03e0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
03f0: 45 78 74 72 61 20 64 61 74 61 20 61 73 73 6f 63  Extra data assoc
0400: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
0410: 65 76 65 6e 74 2c 20 69 66 20 61 6e 79 2e 0d 0a  event, if any...
0420: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
0430: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
0440: 70 75 62 6c 69 63 20 72 65 61 64 6f 6e 6c 79 20  public readonly 
0450: 6f 62 6a 65 63 74 20 44 61 74 61 3b 0d 0a 0d 0a  object Data;....
0460: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
0470: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
0480: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 74 68  // Constructs th
0490: 65 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20  e object...     
04a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
04b0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
04c0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 55 73 65  param name="pUse
04d0: 72 44 61 74 61 22 3e 53 68 6f 75 6c 64 20 62 65  rData">Should be
04e0: 20 6e 75 6c 6c 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   null.</param>..
04f0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
0500: 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 43 6f  am name="errorCo
0510: 64 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  de">..        //
0520: 2f 20 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65  / The error code
0530: 2e 20 20 54 68 65 20 74 79 70 65 20 6f 66 20 74  .  The type of t
0540: 68 69 73 20 6f 62 6a 65 63 74 20 76 61 6c 75 65  his object value
0550: 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20   should be..    
0560: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
0570: 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 6f 72 20  f="Int32" /> or 
0580: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
0590: 65 45 72 72 6f 72 43 6f 64 65 22 20 2f 3e 2e 0d  eErrorCode" />..
05a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
05b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
05c0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
05d0: 6d 65 73 73 61 67 65 22 3e 54 68 65 20 65 72 72  message">The err
05e0: 6f 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61  or message, if a
05f0: 6e 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ny.</param>..   
0600: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
0610: 6e 61 6d 65 3d 22 64 61 74 61 22 3e 54 68 65 20  name="data">The 
0620: 65 78 74 72 61 20 64 61 74 61 2c 20 69 66 20 61  extra data, if a
0630: 6e 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ny.</param>..   
0640: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 4c 6f       internal Lo
0650: 67 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  gEventArgs(..   
0660: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
0670: 70 55 73 65 72 44 61 74 61 2c 0d 0a 20 20 20 20  pUserData,..    
0680: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 65          object e
0690: 72 72 6f 72 43 6f 64 65 2c 0d 0a 20 20 20 20 20  rrorCode,..     
06a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
06b0: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
06c0: 20 20 20 20 6f 62 6a 65 63 74 20 64 61 74 61 0d      object data.
06d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
06e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
06f0: 20 20 20 20 20 20 20 45 72 72 6f 72 43 6f 64 65         ErrorCode
0700: 20 3d 20 65 72 72 6f 72 43 6f 64 65 3b 0d 0a 20   = errorCode;.. 
0710: 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
0720: 67 65 20 3d 20 6d 65 73 73 61 67 65 3b 0d 0a 20  ge = message;.. 
0730: 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61 20             Data 
0740: 3d 20 64 61 74 61 3b 0d 0a 20 20 20 20 20 20 20  = data;..       
0750: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
0760: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
07b0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
07c0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 61 69 73 65  >..    /// Raise
07d0: 64 20 77 68 65 6e 20 61 20 6c 6f 67 20 65 76 65  d when a log eve
07e0: 6e 74 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20  nt occurs...    
07f0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0800: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0810: 61 6d 65 3d 22 73 65 6e 64 65 72 22 3e 54 68 65  ame="sender">The
0820: 20 63 75 72 72 65 6e 74 20 63 6f 6e 6e 65 63 74   current connect
0830: 69 6f 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ion</param>..   
0840: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0850: 3d 22 65 22 3e 45 76 65 6e 74 20 61 72 67 75 6d  ="e">Event argum
0860: 65 6e 74 73 20 6f 66 20 74 68 65 20 74 72 61 63  ents of the trac
0870: 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70  e</param>..    p
0880: 75 62 6c 69 63 20 64 65 6c 65 67 61 74 65 20 76  ublic delegate v
0890: 6f 69 64 20 53 51 4c 69 74 65 4c 6f 67 45 76 65  oid SQLiteLogEve
08a0: 6e 74 48 61 6e 64 6c 65 72 28 6f 62 6a 65 63 74  ntHandler(object
08b0: 20 73 65 6e 64 65 72 2c 20 4c 6f 67 45 76 65 6e   sender, LogEven
08c0: 74 41 72 67 73 20 65 29 3b 0d 0a 0d 0a 20 20 20  tArgs e);....   
08d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
08e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0920: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0930: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d 61 6e 61 67  >..    /// Manag
0940: 65 73 20 74 68 65 20 53 51 4c 69 74 65 20 63 75  es the SQLite cu
0950: 73 74 6f 6d 20 6c 6f 67 67 69 6e 67 20 66 75 6e  stom logging fun
0960: 63 74 69 6f 6e 61 6c 69 74 79 20 61 6e 64 20 74  ctionality and t
0970: 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  he associated.. 
0980: 20 20 20 2f 2f 2f 20 63 61 6c 6c 62 61 63 6b 20     /// callback 
0990: 66 6f 72 20 74 68 65 20 77 68 6f 6c 65 20 70 72  for the whole pr
09a0: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
09b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
09c0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c  public static cl
09d0: 61 73 73 20 53 51 4c 69 74 65 4c 6f 67 0d 0a 20  ass SQLiteLog.. 
09e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
09f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0a00: 20 20 20 20 20 2f 2f 2f 20 4f 62 6a 65 63 74 20       /// Object 
0a10: 75 73 65 64 20 74 6f 20 73 79 6e 63 68 72 6f 6e  used to synchron
0a20: 69 7a 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ize access to th
0a30: 65 20 73 74 61 74 69 63 20 69 6e 73 74 61 6e 63  e static instanc
0a40: 65 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20 20  e data..        
0a50: 2f 2f 2f 20 66 6f 72 20 74 68 69 73 20 63 6c 61  /// for this cla
0a60: 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
0a70: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0a80: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
0a90: 74 69 63 20 6f 62 6a 65 63 74 20 73 79 6e 63 52  tic object syncR
0aa0: 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  oot = new object
0ab0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ();....        /
0ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b00: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 21 50  //////....#if !P
0b10: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
0b20: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
0b30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0b40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4d 65 6d  .        /// Mem
0b50: 62 65 72 20 76 61 72 69 61 62 6c 65 20 74 6f 20  ber variable to 
0b60: 73 74 6f 72 65 20 74 68 65 20 41 70 70 44 6f 6d  store the AppDom
0b70: 61 69 6e 2e 44 6f 6d 61 69 6e 55 6e 6c 6f 61 64  ain.DomainUnload
0b80: 20 65 76 65 6e 74 20 68 61 6e 64 6c 65 72 2e 0d   event handler..
0b90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
0ba0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
0bb0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
0bc0: 45 76 65 6e 74 48 61 6e 64 6c 65 72 20 5f 64 6f  EventHandler _do
0bd0: 6d 61 69 6e 55 6e 6c 6f 61 64 3b 0d 0a 23 65 6e  mainUnload;..#en
0be0: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  dif....        /
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0c40: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0c50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4d 65 6d  .        /// Mem
0c60: 62 65 72 20 76 61 72 69 61 62 6c 65 20 74 6f 20  ber variable to 
0c70: 73 74 6f 72 65 20 74 68 65 20 61 70 70 6c 69 63  store the applic
0c80: 61 74 69 6f 6e 20 6c 6f 67 20 68 61 6e 64 6c 65  ation log handle
0c90: 72 20 74 6f 20 63 61 6c 6c 2e 0d 0a 20 20 20 20  r to call...    
0ca0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0cb0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
0cc0: 61 74 65 20 73 74 61 74 69 63 20 65 76 65 6e 74  ate static event
0cd0: 20 53 51 4c 69 74 65 4c 6f 67 45 76 65 6e 74 48   SQLiteLogEventH
0ce0: 61 6e 64 6c 65 72 20 5f 68 61 6e 64 6c 65 72 73  andler _handlers
0cf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
0d50: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0d60: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64         /// The d
0d70: 65 66 61 75 6c 74 20 6c 6f 67 20 65 76 65 6e 74  efault log event
0d80: 20 68 61 6e 64 6c 65 72 2e 0d 0a 20 20 20 20 20   handler...     
0d90: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0da0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
0db0: 74 65 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  te static SQLite
0dc0: 4c 6f 67 45 76 65 6e 74 48 61 6e 64 6c 65 72 20  LogEventHandler 
0dd0: 5f 64 65 66 61 75 6c 74 48 61 6e 64 6c 65 72 3b  _defaultHandler;
0de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 21 49 4e 54 45  ///....#if !INTE
0e40: 52 4f 50 5f 4c 4f 47 0d 0a 20 20 20 20 20 20 20  ROP_LOG..       
0e50: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0e60: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
0e70: 6c 6f 67 20 63 61 6c 6c 62 61 63 6b 20 70 61 73  log callback pas
0e80: 73 65 64 20 74 6f 20 6e 61 74 69 76 65 20 53 51  sed to native SQ
0e90: 4c 69 74 65 20 65 6e 67 69 6e 65 2e 20 20 54 68  Lite engine.  Th
0ea0: 69 73 20 6d 75 73 74 20 6c 69 76 65 0d 0a 20 20  is must live..  
0eb0: 20 20 20 20 20 20 2f 2f 2f 20 61 73 20 6c 6f 6e        /// as lon
0ec0: 67 20 61 73 20 74 68 65 20 53 51 4c 69 74 65 20  g as the SQLite 
0ed0: 6c 69 62 72 61 72 79 20 68 61 73 20 61 20 70 6f  library has a po
0ee0: 69 6e 74 65 72 20 74 6f 20 69 74 2e 0d 0a 20 20  inter to it...  
0ef0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
0f00: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
0f10: 69 76 61 74 65 20 73 74 61 74 69 63 20 53 51 4c  ivate static SQL
0f20: 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 5f  iteLogCallback _
0f30: 63 61 6c 6c 62 61 63 6b 3b 0d 0a 0d 0a 20 20 20  callback;....   
0f40: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0f90: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
0fa0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
0fb0: 2f 2f 20 54 68 65 20 62 61 73 65 20 53 51 4c 69  // The base SQLi
0fc0: 74 65 20 6f 62 6a 65 63 74 20 74 6f 20 69 6e 74  te object to int
0fd0: 65 72 6f 70 20 77 69 74 68 2e 0d 0a 20 20 20 20  erop with...    
0fe0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ff0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
1000: 61 74 65 20 73 74 61 74 69 63 20 53 51 4c 69 74  ate static SQLit
1010: 65 42 61 73 65 20 5f 73 71 6c 3b 0d 0a 23 65 6e  eBase _sql;..#en
1020: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  dif....        /
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1070: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1080: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1090: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
10a0: 73 20 77 69 6c 6c 20 62 65 20 6e 6f 6e 2d 7a 65  s will be non-ze
10b0: 72 6f 20 69 66 20 6c 6f 67 67 69 6e 67 20 69 73  ro if logging is
10c0: 20 63 75 72 72 65 6e 74 6c 79 20 65 6e 61 62 6c   currently enabl
10d0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
10e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10f0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1100: 74 69 63 20 62 6f 6f 6c 20 5f 65 6e 61 62 6c 65  tic bool _enable
1110: 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d;....        //
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1170: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1180: 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e 69 74          /// Init
1190: 69 61 6c 69 7a 65 73 20 74 68 65 20 53 51 4c 69  ializes the SQLi
11a0: 74 65 20 6c 6f 67 67 69 6e 67 20 66 61 63 69 6c  te logging facil
11b0: 69 74 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  ities...        
11c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
11d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
11e0: 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
11f0: 61 6c 69 7a 65 28 29 0d 0a 20 20 20 20 20 20 20  alize()..       
1200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1210: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1220: 2f 2f 20 42 55 46 58 49 58 3a 20 57 65 20 63 61  // BUFXIX: We ca
1230: 6e 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 20  nnot initialize 
1240: 74 68 65 20 6c 6f 67 67 69 6e 67 20 69 6e 74 65  the logging inte
1250: 72 66 61 63 65 20 69 66 20 74 68 65 20 53 51 4c  rface if the SQL
1260: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ite..           
1270: 20 2f 2f 20 20 20 20 20 20 20 20 20 63 6f 72 65   //         core
1280: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72   library has alr
1290: 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61  eady been initia
12a0: 6c 69 7a 65 64 20 61 6e 79 77 68 65 72 65 20 69  lized anywhere i
12b0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  n..            /
12c0: 2f 20 20 20 20 20 20 20 20 20 74 68 65 20 70 72  /         the pr
12d0: 6f 63 65 73 73 20 28 73 65 65 20 74 69 63 6b 65  ocess (see ticke
12e0: 74 20 5b 32 63 65 30 38 37 30 66 61 64 5d 29 2e  t [2ce0870fad]).
12f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1310: 20 28 53 51 4c 69 74 65 33 2e 53 74 61 74 69 63   (SQLite3.Static
1320: 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 29  IsInitialized())
1330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1340: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 23 69 66    return;....#if
1350: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
1360: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
1370: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1380: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46           // BUGF
1390: 49 58 3a 20 54 6f 20 61 76 6f 69 64 20 6e 61 73  IX: To avoid nas
13a0: 74 79 20 73 69 74 75 61 74 69 6f 6e 73 20 77 68  ty situations wh
13b0: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 41 70 70  ere multiple App
13c0: 44 6f 6d 61 69 6e 73 20 61 72 65 0d 0a 20 20 20  Domains are..   
13d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13e0: 20 20 20 20 61 74 74 65 6d 70 74 69 6e 67 20 74      attempting t
13f0: 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 61 6e 64  o initialize and
1400: 2f 6f 72 20 73 68 75 74 64 6f 77 6e 20 77 68 61  /or shutdown wha
1410: 74 20 69 73 20 72 65 61 6c 6c 79 0d 0a 20 20 20  t is really..   
1420: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1430: 20 20 20 20 61 20 73 68 61 72 65 64 20 6e 61 74      a shared nat
1440: 69 76 65 20 72 65 73 6f 75 72 63 65 20 28 69 2e  ive resource (i.
1450: 65 2e 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  e. the SQLite co
1460: 72 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20  re library..    
1470: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1480: 20 20 20 69 73 20 6c 6f 61 64 65 64 20 70 65 72     is loaded per
1490: 2d 70 72 6f 63 65 73 73 20 61 6e 64 20 68 61 73  -process and has
14a0: 20 6f 6e 6c 79 20 6f 6e 65 20 6c 6f 67 67 69 6e   only one loggin
14b0: 67 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  g callback,..   
14c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
14d0: 20 20 20 20 6e 6f 74 20 6f 6e 65 20 70 65 72 2d      not one per-
14e0: 41 70 70 44 6f 6d 61 69 6e 2c 20 77 68 69 63 68  AppDomain, which
14f0: 20 69 74 20 6b 6e 6f 77 73 20 6e 6f 74 68 69 6e   it knows nothin
1500: 67 20 61 62 6f 75 74 29 2c 0d 0a 20 20 20 20 20  g about),..     
1510: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1520: 20 20 70 72 65 76 65 6e 74 20 61 6c 6c 20 6e 6f    prevent all no
1530: 6e 2d 64 65 66 61 75 6c 74 20 41 70 70 44 6f 6d  n-default AppDom
1540: 61 69 6e 73 20 66 72 6f 6d 20 72 65 67 69 73 74  ains from regist
1550: 65 72 69 6e 67 20 61 0d 0a 20 20 20 20 20 20 20  ering a..       
1560: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
1570: 6c 6f 67 20 68 61 6e 64 6c 65 72 20 75 6e 6c 65  log handler unle
1580: 73 73 20 74 68 65 20 22 46 6f 72 63 65 5f 53 51  ss the "Force_SQ
1590: 4c 69 74 65 4c 6f 67 22 20 65 6e 76 69 72 6f 6e  LiteLog" environ
15a0: 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  ment..          
15b0: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 76 61 72    //         var
15c0: 69 61 62 6c 65 20 69 73 20 75 73 65 64 20 74 6f  iable is used to
15d0: 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69   manually overri
15e0: 64 65 20 74 68 69 73 20 73 61 66 65 74 79 20 63  de this safety c
15f0: 68 65 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  heck...         
1600: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1610: 20 20 20 69 66 20 28 21 41 70 70 44 6f 6d 61 69     if (!AppDomai
1620: 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 2e  n.CurrentDomain.
1630: 49 73 44 65 66 61 75 6c 74 41 70 70 44 6f 6d 61  IsDefaultAppDoma
1640: 69 6e 28 29 20 26 26 0d 0a 20 20 20 20 20 20 20  in() &&..       
1650: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
1660: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74  ativeMethods.Get
1670: 53 65 74 74 69 6e 67 56 61 6c 75 65 28 22 46 6f  SettingValue("Fo
1680: 72 63 65 5f 53 51 4c 69 74 65 4c 6f 67 22 2c 20  rce_SQLiteLog", 
1690: 6e 75 6c 6c 29 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  null) == null)..
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16c0: 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20  eturn;..        
16d0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
16e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63  .            loc
16f0: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
1700: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
1710: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
1720: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
1730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1750: 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 61 6e   // NOTE: Add an
1760: 20 65 76 65 6e 74 20 68 61 6e 64 6c 65 72 20 66   event handler f
1770: 6f 72 20 74 68 65 20 44 6f 6d 61 69 6e 55 6e 6c  or the DomainUnl
1780: 6f 61 64 20 65 76 65 6e 74 20 73 6f 0d 0a 20 20  oad event so..  
1790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
17a0: 20 20 20 20 20 20 20 74 68 61 74 20 77 65 20 63         that we c
17b0: 61 6e 20 75 6e 68 6f 6f 6b 20 6f 75 72 20 6c 6f  an unhook our lo
17c0: 67 67 69 6e 67 20 6d 61 6e 61 67 65 64 20 66 75  gging managed fu
17d0: 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  nction..        
17e0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
17f0: 20 70 6f 69 6e 74 65 72 20 66 72 6f 6d 20 74 68   pointer from th
1800: 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
1810: 63 6f 64 65 20 70 72 69 6f 72 20 74 6f 20 69 74  code prior to it
1820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1830: 20 20 2f 2f 20 20 20 20 20 20 20 62 65 69 6e 67    //       being
1840: 20 69 6e 76 61 6c 69 64 61 74 65 64 2e 0d 0a 20   invalidated... 
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1860: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1870: 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 4d 61     // BUGFIX: Ma
1880: 6b 65 20 73 75 72 65 20 74 68 69 73 20 65 76 65  ke sure this eve
1890: 6e 74 20 68 61 6e 64 6c 65 72 20 69 73 20 6f 6e  nt handler is on
18a0: 6c 79 20 61 64 64 65 64 20 6f 6e 65 0d 0a 20 20  ly added one..  
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18c0: 20 20 20 20 20 20 20 20 20 74 69 6d 65 20 28 70           time (p
18d0: 65 72 2d 41 70 70 44 6f 6d 61 69 6e 29 2e 0d 0a  er-AppDomain)...
18e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1900: 20 20 20 20 69 66 20 28 5f 64 6f 6d 61 69 6e 55      if (_domainU
1910: 6e 6c 6f 61 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  nload == null)..
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1940: 20 20 20 20 20 20 20 5f 64 6f 6d 61 69 6e 55 6e         _domainUn
1950: 6c 6f 61 64 20 3d 20 6e 65 77 20 45 76 65 6e 74  load = new Event
1960: 48 61 6e 64 6c 65 72 28 44 6f 6d 61 69 6e 55 6e  Handler(DomainUn
1970: 6c 6f 61 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  load);..        
1980: 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 44              AppD
1990: 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d  omain.CurrentDom
19a0: 61 69 6e 2e 44 6f 6d 61 69 6e 55 6e 6c 6f 61 64  ain.DomainUnload
19b0: 20 2b 3d 20 5f 64 6f 6d 61 69 6e 55 6e 6c 6f 61   += _domainUnloa
19c0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
19d0: 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
19e0: 0a 23 69 66 20 21 49 4e 54 45 52 4f 50 5f 4c 4f  .#if !INTEROP_LO
19f0: 47 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  G..             
1a00: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1a10: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1a20: 43 72 65 61 74 65 20 61 6e 20 69 6e 73 74 61 6e  Create an instan
1a30: 63 65 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65  ce of the SQLite
1a40: 20 77 72 61 70 70 65 72 20 63 6c 61 73 73 2e 0d   wrapper class..
1a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1a70: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
1a80: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1a90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
1ab0: 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sql = new SQLite
1ac0: 33 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3(..            
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1ae0: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 44 65  teDateFormats.De
1af0: 66 61 75 6c 74 2c 20 44 61 74 65 54 69 6d 65 4b  fault, DateTimeK
1b00: 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64 2c  ind.Unspecified,
1b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b20: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
1b30: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c  IntPtr.Zero, nul
1b40: 6c 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  l, false);..    
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b70: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b80: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 72       // NOTE: Cr
1b90: 65 61 74 65 20 61 20 73 69 6e 67 6c 65 20 22 67  eate a single "g
1ba0: 6c 6f 62 61 6c 22 20 28 69 2e 65 2e 20 70 65 72  lobal" (i.e. per
1bb0: 2d 70 72 6f 63 65 73 73 29 20 63 61 6c 6c 62 61  -process) callba
1bc0: 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
1bd0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
1be0: 72 65 67 69 73 74 65 72 20 77 69 74 68 20 53 51  register with SQ
1bf0: 4c 69 74 65 2e 20 20 54 68 69 73 20 63 61 6c 6c  Lite.  This call
1c00: 62 61 63 6b 20 77 69 6c 6c 20 70 61 73 73 20 74  back will pass t
1c10: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
1c20: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 76 65      //       eve
1c30: 6e 74 20 6f 6e 20 74 6f 20 61 6e 79 20 72 65 67  nt on to any reg
1c40: 69 73 74 65 72 65 64 20 68 61 6e 64 6c 65 72 2e  istered handler.
1c50: 20 20 57 65 20 6f 6e 6c 79 20 77 61 6e 74 20 74    We only want t
1c60: 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
1c70: 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20 74     //       do t
1c80: 68 69 73 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20  his once...     
1c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1cb0: 66 20 28 5f 63 61 6c 6c 62 61 63 6b 20 3d 3d 20  f (_callback == 
1cc0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1cd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63                _c
1cf0: 61 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20 53 51  allback = new SQ
1d00: 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28  LiteLogCallback(
1d10: 4c 6f 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d  LogCallback);...
1d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d30: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1d40: 43 6f 64 65 20 72 63 20 3d 20 5f 73 71 6c 2e 53  Code rc = _sql.S
1d50: 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 5f 63  etLogCallback(_c
1d60: 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20  allback);....   
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d80: 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
1d90: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1dc0: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
1dd0: 6e 28 72 63 2c 0d 0a 20 20 20 20 20 20 20 20 20  n(rc,..         
1de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df0: 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 69 6e     "Failed to in
1e00: 69 74 69 61 6c 69 7a 65 20 6c 6f 67 67 69 6e 67  itialize logging
1e10: 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  .");..          
1e20: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
1e30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1e50: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1e60: 4c 6f 67 67 69 6e 67 20 69 73 20 65 6e 61 62 6c  Logging is enabl
1e70: 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0d 0a  ed by default...
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1ea0: 20 20 20 20 5f 65 6e 61 62 6c 65 64 20 3d 20 74      _enabled = t
1eb0: 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1ec0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1ee0: 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c  OTE: For now, al
1ef0: 77 61 79 73 20 73 65 74 75 70 20 74 68 65 20 64  ways setup the d
1f00: 65 66 61 75 6c 74 20 6c 6f 67 20 65 76 65 6e 74  efault log event
1f10: 20 68 61 6e 64 6c 65 72 2e 0d 0a 20 20 20 20 20   handler...     
1f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1f40: 64 64 44 65 66 61 75 6c 74 48 61 6e 64 6c 65 72  ddDefaultHandler
1f50: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
1f60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1f70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc0: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
1fd0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
1fe0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  RK..        /// 
1ff0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2000: 20 20 20 2f 2f 2f 20 48 61 6e 64 6c 65 73 20 74     /// Handles t
2010: 68 65 20 41 70 70 44 6f 6d 61 69 6e 20 62 65 69  he AppDomain bei
2020: 6e 67 20 75 6e 6c 6f 61 64 65 64 2e 0d 0a 20 20  ng unloaded...  
2030: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2040: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2050: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
2060: 65 6e 64 65 72 22 3e 53 68 6f 75 6c 64 20 62 65  ender">Should be
2070: 20 6e 75 6c 6c 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   null.</param>..
2080: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2090: 61 6d 20 6e 61 6d 65 3d 22 65 22 3e 54 68 65 20  am name="e">The 
20a0: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
20b0: 77 69 74 68 20 74 68 69 73 20 65 76 65 6e 74 2e  with this event.
20c0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
20d0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
20e0: 20 76 6f 69 64 20 44 6f 6d 61 69 6e 55 6e 6c 6f   void DomainUnlo
20f0: 61 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ad(..           
2100: 20 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 0d   object sender,.
2110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 45 76 65  .            Eve
2120: 6e 74 41 72 67 73 20 65 0d 0a 20 20 20 20 20 20  ntArgs e..      
2130: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2150: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
2160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2180: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2190: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d      // NOTE: Rem
21a0: 6f 76 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  ove the default 
21b0: 6c 6f 67 20 65 76 65 6e 74 20 68 61 6e 64 6c 65  log event handle
21c0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
21d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
21e0: 20 20 20 20 20 20 20 20 52 65 6d 6f 76 65 44 65          RemoveDe
21f0: 66 61 75 6c 74 48 61 6e 64 6c 65 72 28 29 3b 0d  faultHandler();.
2200: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2210: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2220: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2230: 44 69 73 61 62 6c 65 20 6c 6f 67 67 69 6e 67 2e  Disable logging.
2240: 20 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20    If necessary, 
2250: 69 74 20 63 61 6e 20 62 65 20 72 65 2d 65 6e 61  it can be re-ena
2260: 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  bled..          
2270: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
2280: 61 74 65 72 20 62 79 20 74 68 65 20 49 6e 69 74  ater by the Init
2290: 69 61 6c 69 7a 65 20 6d 65 74 68 6f 64 2e 0d 0a  ialize method...
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
22c0: 20 20 20 20 5f 65 6e 61 62 6c 65 64 20 3d 20 66      _enabled = f
22d0: 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 49 4e  alse;....#if !IN
22e0: 54 45 52 4f 50 5f 4c 4f 47 0d 0a 20 20 20 20 20  TEROP_LOG..     
22f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2310: 2f 20 42 55 47 42 55 47 3a 20 54 68 69 73 20 77  / BUGBUG: This w
2320: 69 6c 6c 20 63 61 75 73 65 20 73 65 72 69 6f 75  ill cause seriou
2330: 73 20 70 72 6f 62 6c 65 6d 73 20 69 66 20 6f 74  s problems if ot
2340: 68 65 72 20 41 70 70 44 6f 6d 61 69 6e 73 0d 0a  her AppDomains..
2350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2360: 2f 2f 20 20 20 20 20 20 20 20 20 68 61 76 65 20  //         have 
2370: 61 6e 79 20 6f 70 65 6e 20 53 51 4c 69 74 65 20  any open SQLite 
2380: 63 6f 6e 6e 65 63 74 69 6f 6e 73 3b 20 68 6f 77  connections; how
2390: 65 76 65 72 2c 20 74 68 65 72 65 20 69 73 0d 0a  ever, there is..
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 2f 2f 20 20 20 20 20 20 20 20 20 63 75 72 72 65  //         curre
23c0: 6e 74 6c 79 20 6e 6f 20 77 61 79 20 61 72 6f 75  ntly no way arou
23d0: 6e 64 20 74 68 69 73 20 6c 69 6d 69 74 61 74 69  nd this limitati
23e0: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...           
23f0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2400: 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71           if (_sq
2410: 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l != null)..    
2420: 20 20 20 20 20 20 20 20 20 20 20 20 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 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
2450: 64 65 20 72 63 20 3d 20 5f 73 71 6c 2e 53 68 75  de rc = _sql.Shu
2460: 74 64 6f 77 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  tdown();....    
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
2490: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
24c0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
24d0: 28 72 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  (rc,..          
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f0: 20 20 22 46 61 69 6c 65 64 20 74 6f 20 73 68 75    "Failed to shu
2500: 74 64 6f 77 6e 20 69 6e 74 65 72 66 61 63 65 2e  tdown interface.
2510: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
2520: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
2530: 5f 73 71 6c 2e 53 65 74 4c 6f 67 43 61 6c 6c 62  _sql.SetLogCallb
2540: 61 63 6b 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20  ack(null);....  
2550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2560: 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69    if (rc != SQLi
2570: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
2580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2590: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
25a0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
25b0: 6f 6e 28 72 63 2c 0d 0a 20 20 20 20 20 20 20 20  on(rc,..        
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d0: 20 20 20 20 22 46 61 69 6c 65 64 20 74 6f 20 73      "Failed to s
25e0: 68 75 74 64 6f 77 6e 20 6c 6f 67 67 69 6e 67 2e  hutdown logging.
25f0: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
2600: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2610: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2630: 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75   BUGFIX: Make su
2640: 72 65 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  re to reset the 
2650: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 6e 65 78  callback for nex
2660: 74 20 74 69 6d 65 2e 20 20 54 68 69 73 0d 0a 20  t time.  This.. 
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2680: 2f 20 20 20 20 20 20 20 20 20 6d 75 73 74 20 62  /         must b
2690: 65 20 64 6f 6e 65 20 61 66 74 65 72 20 69 74 20  e done after it 
26a0: 68 61 73 20 62 65 65 6e 20 73 75 63 63 65 73 66  has been succesf
26b0: 75 6c 6c 79 20 72 65 6d 6f 76 65 64 0d 0a 20 20  ully removed..  
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26d0: 20 20 20 20 20 20 20 20 20 61 73 20 6c 6f 67 67           as logg
26e0: 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 62 79 20  ing callback by 
26f0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
2700: 6c 69 62 72 61 72 79 20 61 73 20 77 65 0d 0a 20  library as we.. 
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2720: 2f 20 20 20 20 20 20 20 20 20 63 61 6e 6e 6f 74  /         cannot
2730: 20 61 6c 6c 6f 77 20 6e 61 74 69 76 65 20 63 6f   allow native co
2740: 64 65 20 74 6f 20 72 65 66 65 72 20 74 6f 20 61  de to refer to a
2750: 20 64 65 6c 65 67 61 74 65 20 74 68 61 74 0d 0a   delegate that..
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2770: 2f 2f 20 20 20 20 20 20 20 20 20 68 61 73 20 62  //         has b
2780: 65 65 6e 20 67 61 72 62 61 67 65 20 63 6f 6c 6c  een garbage coll
2790: 65 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ected...        
27a0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27c0: 5f 63 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c  _callback != nul
27d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
27e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27f0: 20 20 20 20 20 20 20 20 20 20 20 5f 63 61 6c 6c             _call
2800: 62 61 63 6b 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  back = null;..  
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2820: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
2830: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2850: 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 74  / NOTE: Remove t
2860: 68 65 20 65 76 65 6e 74 20 68 61 6e 64 6c 65 72  he event handler
2870: 20 66 6f 72 20 74 68 65 20 44 6f 6d 61 69 6e 55   for the DomainU
2880: 6e 6c 6f 61 64 20 65 76 65 6e 74 0d 0a 20 20 20  nload event..   
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
28a0: 20 20 20 20 20 20 74 68 61 74 20 77 65 20 61 64        that we ad
28b0: 64 65 64 20 65 61 72 6c 69 65 72 2e 0d 0a 20 20  ded earlier...  
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
28d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28e0: 20 20 69 66 20 28 5f 64 6f 6d 61 69 6e 55 6e 6c    if (_domainUnl
28f0: 6f 61 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  oad != null)..  
2900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2920: 20 20 20 20 20 41 70 70 44 6f 6d 61 69 6e 2e 43       AppDomain.C
2930: 75 72 72 65 6e 74 44 6f 6d 61 69 6e 2e 44 6f 6d  urrentDomain.Dom
2940: 61 69 6e 55 6e 6c 6f 61 64 20 2d 3d 20 5f 64 6f  ainUnload -= _do
2950: 6d 61 69 6e 55 6e 6c 6f 61 64 3b 0d 0a 20 20 20  mainUnload;..   
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 20 5f 64 6f 6d 61 69 6e 55 6e 6c 6f 61 64 20 3d   _domainUnload =
2980: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2990: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29b0: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
29c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a10: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
2a20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2a30: 20 2f 2f 2f 20 54 68 69 73 20 65 76 65 6e 74 20   /// This event 
2a40: 69 73 20 72 61 69 73 65 64 20 77 68 65 6e 65 76  is raised whenev
2a50: 65 72 20 53 51 4c 69 74 65 20 72 61 69 73 65 73  er SQLite raises
2a60: 20 61 20 6c 6f 67 67 69 6e 67 20 65 76 65 6e 74   a logging event
2a70: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  ...        /// N
2a80: 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 73 68  ote that this sh
2a90: 6f 75 6c 64 20 62 65 20 73 65 74 20 61 73 20 6f  ould be set as o
2aa0: 6e 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ne of the first 
2ab0: 74 68 69 6e 67 73 20 69 6e 20 74 68 65 0d 0a 20  things in the.. 
2ac0: 20 20 20 20 20 20 20 2f 2f 2f 20 61 70 70 6c 69         /// appli
2ad0: 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
2ae0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2af0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2b00: 73 74 61 74 69 63 20 65 76 65 6e 74 20 53 51 4c  static event SQL
2b10: 69 74 65 4c 6f 67 45 76 65 6e 74 48 61 6e 64 6c  iteLogEventHandl
2b20: 65 72 20 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20  er Log..        
2b30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  {..            a
2b40: 64 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  dd..            
2b50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b60: 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
2b70: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2b80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65             // Re
2ba0: 6d 6f 76 65 20 61 6e 79 20 63 6f 70 69 65 73 20  move any copies 
2bb0: 6f 66 20 74 68 69 73 20 65 76 65 6e 74 20 68 61  of this event ha
2bc0: 6e 64 6c 65 72 20 66 72 6f 6d 20 72 65 67 69 73  ndler from regis
2bd0: 74 65 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20  tered..         
2be0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 6c 69             // li
2bf0: 73 74 2e 20 20 54 68 69 73 20 65 73 73 65 6e 74  st.  This essent
2c00: 69 61 6c 6c 79 20 6d 65 61 6e 73 20 74 68 61 74  ially means that
2c10: 20 61 20 68 61 6e 64 6c 65 72 20 77 69 6c 6c 20   a handler will 
2c20: 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
2c30: 20 20 20 20 20 20 20 20 2f 2f 20 63 61 6c 6c 65          // calle
2c40: 64 20 6f 6e 6c 79 20 6f 6e 63 65 20 6e 6f 20 6d  d only once no m
2c50: 61 74 74 65 72 20 68 6f 77 20 6d 61 6e 79 20 74  atter how many t
2c60: 69 6d 65 73 20 69 74 20 69 73 20 61 64 64 65 64  imes it is added
2c70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c80: 20 20 20 20 20 20 20 5f 68 61 6e 64 6c 65 72 73         _handlers
2c90: 20 2d 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20   -= value;....  
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb0: 20 20 2f 2f 20 41 64 64 20 74 68 69 73 20 74 6f    // Add this to
2cc0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 76 65   the list of eve
2cd0: 6e 74 20 68 61 6e 64 6c 65 72 73 2e 0d 0a 20 20  nt handlers...  
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf0: 20 20 5f 68 61 6e 64 6c 65 72 73 20 2b 3d 20 76    _handlers += v
2d00: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
2d10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2d20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2d30: 20 20 20 20 20 72 65 6d 6f 76 65 0d 0a 20 20 20       remove..   
2d40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
2d60: 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d90: 20 20 20 20 5f 68 61 6e 64 6c 65 72 73 20 2d 3d      _handlers -=
2da0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20   value;..       
2db0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2dc0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2dd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e20: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e30: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2e40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66  ..        /// If
2e50: 20 74 68 69 73 20 70 72 6f 70 65 72 74 79 20 69   this property i
2e60: 73 20 74 72 75 65 2c 20 6c 6f 67 67 69 6e 67 20  s true, logging 
2e70: 69 73 20 65 6e 61 62 6c 65 64 3b 20 6f 74 68 65  is enabled; othe
2e80: 72 77 69 73 65 2c 20 6c 6f 67 67 69 6e 67 20 69  rwise, logging i
2e90: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64  s..        /// d
2ea0: 69 73 61 62 6c 65 64 2e 20 20 57 68 65 6e 20 6c  isabled.  When l
2eb0: 6f 67 67 69 6e 67 20 69 73 20 64 69 73 61 62 6c  ogging is disabl
2ec0: 65 64 2c 20 6e 6f 20 6c 6f 67 67 69 6e 67 20 65  ed, no logging e
2ed0: 76 65 6e 74 73 20 77 69 6c 6c 20 66 69 72 65 2e  vents will fire.
2ee0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2ef0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2f00: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2f10: 62 6f 6f 6c 20 45 6e 61 62 6c 65 64 0d 0a 20 20  bool Enabled..  
2f20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f30: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
2f40: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
2f50: 75 72 6e 20 5f 65 6e 61 62 6c 65 64 3b 20 7d 20  urn _enabled; } 
2f60: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  }..            s
2f70: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2f80: 6f 6f 74 29 20 7b 20 5f 65 6e 61 62 6c 65 64 20  oot) { _enabled 
2f90: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
2fa0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fb0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3000: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
3010: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3020: 20 4c 6f 67 20 61 20 6d 65 73 73 61 67 65 20 74   Log a message t
3030: 6f 20 61 6c 6c 20 74 68 65 20 72 65 67 69 73 74  o all the regist
3040: 65 72 65 64 20 6c 6f 67 20 65 76 65 6e 74 20 68  ered log event h
3050: 61 6e 64 6c 65 72 73 20 77 69 74 68 6f 75 74 20  andlers without 
3060: 67 6f 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f  going..        /
3070: 2f 2f 20 74 68 72 6f 75 67 68 20 74 68 65 20 53  // through the S
3080: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0d 0a  QLite library...
3090: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
30a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
30b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
30c0: 22 6d 65 73 73 61 67 65 22 3e 54 68 65 20 6d 65  "message">The me
30d0: 73 73 61 67 65 20 74 6f 20 62 65 20 6c 6f 67 67  ssage to be logg
30e0: 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ed.</param>..   
30f0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3100: 69 63 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61  ic void LogMessa
3110: 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
3120: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 0d   string message.
3130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
3140: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3150: 20 20 20 20 20 20 20 4c 6f 67 4d 65 73 73 61 67         LogMessag
3160: 65 28 6e 75 6c 6c 2c 20 6d 65 73 73 61 67 65 29  e(null, message)
3170: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
3180: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
31d0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
31e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
31f0: 20 20 2f 2f 2f 20 4c 6f 67 20 61 20 6d 65 73 73    /// Log a mess
3200: 61 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 72  age to all the r
3210: 65 67 69 73 74 65 72 65 64 20 6c 6f 67 20 65 76  egistered log ev
3220: 65 6e 74 20 68 61 6e 64 6c 65 72 73 20 77 69 74  ent handlers wit
3230: 68 6f 75 74 20 67 6f 69 6e 67 0d 0a 20 20 20 20  hout going..    
3240: 20 20 20 20 2f 2f 2f 20 74 68 72 6f 75 67 68 20      /// through 
3250: 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
3260: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry...        ///
3270: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3280: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
3290: 6e 61 6d 65 3d 22 65 72 72 6f 72 43 6f 64 65 22  name="errorCode"
32a0: 3e 54 68 65 20 53 51 4c 69 74 65 20 65 72 72 6f  >The SQLite erro
32b0: 72 20 63 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d  r code.</param>.
32c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
32d0: 72 61 6d 20 6e 61 6d 65 3d 22 6d 65 73 73 61 67  ram name="messag
32e0: 65 22 3e 54 68 65 20 6d 65 73 73 61 67 65 20 74  e">The message t
32f0: 6f 20 62 65 20 6c 6f 67 67 65 64 2e 3c 2f 70 61  o be logged.</pa
3300: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
3310: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
3320: 20 4c 6f 67 4d 65 73 73 61 67 65 28 0d 0a 20 20   LogMessage(..  
3330: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
3340: 45 72 72 6f 72 43 6f 64 65 20 65 72 72 6f 72 43  ErrorCode errorC
3350: 6f 64 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ode,..          
3360: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
3370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
3380: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3390: 20 20 20 20 20 20 20 20 4c 6f 67 4d 65 73 73 61          LogMessa
33a0: 67 65 28 28 6f 62 6a 65 63 74 29 65 72 72 6f 72  ge((object)error
33b0: 43 6f 64 65 2c 20 6d 65 73 73 61 67 65 29 3b 0d  Code, message);.
33c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
33d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
33e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3420: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
3430: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3440: 2f 2f 2f 20 4c 6f 67 20 61 20 6d 65 73 73 61 67  /// Log a messag
3450: 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 72 65 67  e to all the reg
3460: 69 73 74 65 72 65 64 20 6c 6f 67 20 65 76 65 6e  istered log even
3470: 74 20 68 61 6e 64 6c 65 72 73 20 77 69 74 68 6f  t handlers witho
3480: 75 74 20 67 6f 69 6e 67 0d 0a 20 20 20 20 20 20  ut going..      
3490: 20 20 2f 2f 2f 20 74 68 72 6f 75 67 68 20 74 68    /// through th
34a0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
34b0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
34c0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
34d0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
34e0: 6d 65 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 54  me="errorCode">T
34f0: 68 65 20 69 6e 74 65 67 65 72 20 65 72 72 6f 72  he integer error
3500: 20 63 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   code.</param>..
3510: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
3520: 61 6d 20 6e 61 6d 65 3d 22 6d 65 73 73 61 67 65  am name="message
3530: 22 3e 54 68 65 20 6d 65 73 73 61 67 65 20 74 6f  ">The message to
3540: 20 62 65 20 6c 6f 67 67 65 64 2e 3c 2f 70 61 72   be logged.</par
3550: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
3560: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
3570: 4c 6f 67 4d 65 73 73 61 67 65 28 0d 0a 20 20 20  LogMessage(..   
3580: 20 20 20 20 20 20 20 20 20 69 6e 74 20 65 72 72           int err
3590: 6f 72 43 6f 64 65 2c 0d 0a 20 20 20 20 20 20 20  orCode,..       
35a0: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
35b0: 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  age..           
35c0: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
35d0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 4d 65             LogMe
35e0: 73 73 61 67 65 28 28 6f 62 6a 65 63 74 29 65 72  ssage((object)er
35f0: 72 6f 72 43 6f 64 65 2c 20 6d 65 73 73 61 67 65  rorCode, message
3600: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
3610: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
3670: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
3680: 20 20 20 2f 2f 2f 20 4c 6f 67 20 61 20 6d 65 73     /// Log a mes
3690: 73 61 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20  sage to all the 
36a0: 72 65 67 69 73 74 65 72 65 64 20 6c 6f 67 20 65  registered log e
36b0: 76 65 6e 74 20 68 61 6e 64 6c 65 72 73 20 77 69  vent handlers wi
36c0: 74 68 6f 75 74 20 67 6f 69 6e 67 0d 0a 20 20 20  thout going..   
36d0: 20 20 20 20 20 2f 2f 2f 20 74 68 72 6f 75 67 68       /// through
36e0: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
36f0: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary...        //
3700: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3710: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
3720: 20 6e 61 6d 65 3d 22 65 72 72 6f 72 43 6f 64 65   name="errorCode
3730: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
3740: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20  The error code. 
3750: 20 54 68 65 20 74 79 70 65 20 6f 66 20 74 68 69   The type of thi
3760: 73 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 73  s object value s
3770: 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20  hould be..      
3780: 20 20 2f 2f 2f 20 53 79 73 74 65 6d 2e 49 6e 74    /// System.Int
3790: 33 32 20 6f 72 20 53 51 4c 69 74 65 45 72 72 6f  32 or SQLiteErro
37a0: 72 43 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20  rCode...        
37b0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
37c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
37d0: 20 6e 61 6d 65 3d 22 6d 65 73 73 61 67 65 22 3e   name="message">
37e0: 54 68 65 20 6d 65 73 73 61 67 65 20 74 6f 20 62  The message to b
37f0: 65 20 6c 6f 67 67 65 64 2e 3c 2f 70 61 72 61 6d  e logged.</param
3800: 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  >..        priva
3810: 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  te static void L
3820: 6f 67 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  ogMessage(..    
3830: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 65          object e
3840: 72 72 6f 72 43 6f 64 65 2c 0d 0a 20 20 20 20 20  rrorCode,..     
3850: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
3860: 73 73 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  ssage..         
3870: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
3880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
3890: 6c 20 65 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20  l enabled;..    
38a0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
38b0: 67 45 76 65 6e 74 48 61 6e 64 6c 65 72 20 68 61  gEventHandler ha
38c0: 6e 64 6c 65 72 73 3b 0d 0a 0d 0a 20 20 20 20 20  ndlers;....     
38d0: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e         lock (syn
38e0: 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20  cRoot)..        
38f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3900: 20 20 20 20 20 20 20 65 6e 61 62 6c 65 64 20 3d         enabled =
3910: 20 5f 65 6e 61 62 6c 65 64 3b 0d 0a 0d 0a 20 20   _enabled;....  
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3930: 20 28 5f 68 61 6e 64 6c 65 72 73 20 21 3d 20 6e   (_handlers != n
3940: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3950: 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65            handle
3960: 72 73 20 3d 20 5f 68 61 6e 64 6c 65 72 73 2e 43  rs = _handlers.C
3970: 6c 6f 6e 65 28 29 20 61 73 20 53 51 4c 69 74 65  lone() as SQLite
3980: 4c 6f 67 45 76 65 6e 74 48 61 6e 64 6c 65 72 3b  LogEventHandler;
3990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
39a0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64              hand
39c0: 6c 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  lers = null;..  
39d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
39e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
39f0: 6e 61 62 6c 65 64 20 26 26 20 28 68 61 6e 64 6c  nabled && (handl
3a00: 65 72 73 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ers != null)).. 
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
3a20: 61 6e 64 6c 65 72 73 28 6e 75 6c 6c 2c 20 6e 65  andlers(null, ne
3a30: 77 20 4c 6f 67 45 76 65 6e 74 41 72 67 73 28 0d  w LogEventArgs(.
3a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a50: 20 20 20 20 20 49 6e 74 50 74 72 2e 5a 65 72 6f       IntPtr.Zero
3a60: 2c 20 65 72 72 6f 72 43 6f 64 65 2c 20 6d 65 73  , errorCode, mes
3a70: 73 61 67 65 2c 20 6e 75 6c 6c 29 29 3b 0d 0a 20  sage, null));.. 
3a80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3a90: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3ae0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
3af0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3b00: 2f 20 43 72 65 61 74 65 73 20 61 6e 64 20 69 6e  / Creates and in
3b10: 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 64 65  itializes the de
3b20: 66 61 75 6c 74 20 6c 6f 67 20 65 76 65 6e 74 20  fault log event 
3b30: 68 61 6e 64 6c 65 72 2e 0d 0a 20 20 20 20 20 20  handler...      
3b40: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3b50: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
3b60: 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
3b70: 69 74 69 61 6c 69 7a 65 44 65 66 61 75 6c 74 48  itializeDefaultH
3b80: 61 6e 64 6c 65 72 28 29 0d 0a 20 20 20 20 20 20  andler()..      
3b90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3ba0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
3bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3bd0: 20 69 66 20 28 5f 64 65 66 61 75 6c 74 48 61 6e   if (_defaultHan
3be0: 64 6c 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dler == null).. 
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 5f 64 65 66 61 75 6c 74 48 61 6e 64 6c     _defaultHandl
3c10: 65 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4c  er = new SQLiteL
3c20: 6f 67 45 76 65 6e 74 48 61 6e 64 6c 65 72 28 4c  ogEventHandler(L
3c30: 6f 67 45 76 65 6e 74 48 61 6e 64 6c 65 72 29 3b  ogEventHandler);
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3c50: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
3c60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3cb0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
3cc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
3cd0: 2f 2f 2f 20 41 64 64 73 20 74 68 65 20 64 65 66  /// Adds the def
3ce0: 61 75 6c 74 20 6c 6f 67 20 65 76 65 6e 74 20 68  ault log event h
3cf0: 61 6e 64 6c 65 72 20 74 6f 20 74 68 65 20 6c 69  andler to the li
3d00: 73 74 20 6f 66 20 68 61 6e 64 6c 65 72 73 2e 0d  st of handlers..
3d10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3d20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3d30: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
3d40: 6f 69 64 20 41 64 64 44 65 66 61 75 6c 74 48 61  oid AddDefaultHa
3d50: 6e 64 6c 65 72 28 29 0d 0a 20 20 20 20 20 20 20  ndler()..       
3d60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d70: 49 6e 69 74 69 61 6c 69 7a 65 44 65 66 61 75 6c  InitializeDefaul
3d80: 74 48 61 6e 64 6c 65 72 28 29 3b 0d 0a 20 20 20  tHandler();..   
3d90: 20 20 20 20 20 20 20 20 20 4c 6f 67 20 2b 3d 20           Log += 
3da0: 5f 64 65 66 61 75 6c 74 48 61 6e 64 6c 65 72 3b  _defaultHandler;
3db0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
3dc0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3e10: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
3e20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3e30: 20 2f 2f 2f 20 52 65 6d 6f 76 65 73 20 74 68 65   /// Removes the
3e40: 20 64 65 66 61 75 6c 74 20 6c 6f 67 20 65 76 65   default log eve
3e50: 6e 74 20 68 61 6e 64 6c 65 72 20 66 72 6f 6d 20  nt handler from 
3e60: 74 68 65 20 6c 69 73 74 20 6f 66 20 68 61 6e 64  the list of hand
3e70: 6c 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  lers...        /
3e80: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3e90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3ea0: 61 74 69 63 20 76 6f 69 64 20 52 65 6d 6f 76 65  atic void Remove
3eb0: 44 65 66 61 75 6c 74 48 61 6e 64 6c 65 72 28 29  DefaultHandler()
3ec0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3ed0: 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c           Initial
3ee0: 69 7a 65 44 65 66 61 75 6c 74 48 61 6e 64 6c 65  izeDefaultHandle
3ef0: 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r();..          
3f00: 20 20 4c 6f 67 20 2d 3d 20 5f 64 65 66 61 75 6c    Log -= _defaul
3f10: 74 48 61 6e 64 6c 65 72 3b 0d 0a 20 20 20 20 20  tHandler;..     
3f20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3f80: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3f90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 6e  ..        /// In
3fa0: 74 65 72 6e 61 6c 20 70 72 6f 78 79 20 66 75 6e  ternal proxy fun
3fb0: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 6c 6c 73  ction that calls
3fc0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 65 64 20   any registered 
3fd0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 6c 6f 67 0d  application log.
3fe0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65  .        /// eve
3ff0: 6e 74 20 68 61 6e 64 6c 65 72 73 2e 0d 0a 20 20  nt handlers...  
4000: 20 20 20 20 20 20 2f 2f 2f 0d 0a 20 20 20 20 20        ///..     
4010: 20 20 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20     /// WARNING: 
4020: 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 75  This method is u
4030: 73 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73  sed more-or-less
4040: 20 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74   directly by nat
4050: 69 76 65 20 63 6f 64 65 2c 0d 0a 20 20 20 20 20  ive code,..     
4060: 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
4070: 64 6f 20 6e 6f 74 20 6d 6f 64 69 66 79 20 69 74  do not modify it
4080: 73 20 74 79 70 65 20 73 69 67 6e 61 74 75 72 65  s type signature
4090: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
40a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
40b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
40c0: 6d 65 3d 22 70 55 73 65 72 44 61 74 61 22 3e 0d  me="pUserData">.
40d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
40e0: 20 65 78 74 72 61 20 64 61 74 61 20 61 73 73 6f   extra data asso
40f0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
4100: 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e 79   message, if any
4110: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
4120: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
4130: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4140: 3d 22 65 72 72 6f 72 43 6f 64 65 22 3e 0d 0a 20  ="errorCode">.. 
4150: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65         /// The e
4160: 72 72 6f 72 20 63 6f 64 65 20 61 73 73 6f 63 69  rror code associ
4170: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6d  ated with this m
4180: 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20  essage...       
4190: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
41a0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
41b0: 6d 20 6e 61 6d 65 3d 22 70 4d 65 73 73 61 67 65  m name="pMessage
41c0: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
41d0: 54 68 65 20 6d 65 73 73 61 67 65 20 73 74 72 69  The message stri
41e0: 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67 65 64 2e  ng to be logged.
41f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
4200: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
4210: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
4220: 6f 69 64 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 28  oid LogCallback(
4230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
4240: 74 50 74 72 20 70 55 73 65 72 44 61 74 61 2c 0d  tPtr pUserData,.
4250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
4260: 20 65 72 72 6f 72 43 6f 64 65 2c 0d 0a 20 20 20   errorCode,..   
4270: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
4280: 70 4d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20  pMessage..      
4290: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
42a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
42b0: 62 6f 6f 6c 20 65 6e 61 62 6c 65 64 3b 0d 0a 20  bool enabled;.. 
42c0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
42d0: 65 4c 6f 67 45 76 65 6e 74 48 61 6e 64 6c 65 72  eLogEventHandler
42e0: 20 68 61 6e 64 6c 65 72 73 3b 0d 0a 0d 0a 20 20   handlers;....  
42f0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
4300: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
4310: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4320: 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65            enable
4330: 64 20 3d 20 5f 65 6e 61 62 6c 65 64 3b 0d 0a 0d  d = _enabled;...
4340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4350: 20 69 66 20 28 5f 68 61 6e 64 6c 65 72 73 20 21   if (_handlers !
4360: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
4380: 64 6c 65 72 73 20 3d 20 5f 68 61 6e 64 6c 65 72  dlers = _handler
4390: 73 2e 43 6c 6f 6e 65 28 29 20 61 73 20 53 51 4c  s.Clone() as SQL
43a0: 69 74 65 4c 6f 67 45 76 65 6e 74 48 61 6e 64 6c  iteLogEventHandl
43b0: 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
43c0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
43e0: 61 6e 64 6c 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d  andlers = null;.
43f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
4410: 20 28 65 6e 61 62 6c 65 64 20 26 26 20 28 68 61   (enabled && (ha
4420: 6e 64 6c 65 72 73 20 21 3d 20 6e 75 6c 6c 29 29  ndlers != null))
4430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4440: 20 20 68 61 6e 64 6c 65 72 73 28 6e 75 6c 6c 2c    handlers(null,
4450: 20 6e 65 77 20 4c 6f 67 45 76 65 6e 74 41 72 67   new LogEventArg
4460: 73 28 70 55 73 65 72 44 61 74 61 2c 20 65 72 72  s(pUserData, err
4470: 6f 72 43 6f 64 65 2c 0d 0a 20 20 20 20 20 20 20  orCode,..       
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
4490: 69 74 65 42 61 73 65 2e 55 54 46 38 54 6f 53 74  iteBase.UTF8ToSt
44a0: 72 69 6e 67 28 70 4d 65 73 73 61 67 65 2c 20 2d  ring(pMessage, -
44b0: 31 29 2c 20 6e 75 6c 6c 29 29 3b 0d 0a 20 20 20  1), null));..   
44c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
44d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
44e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4520: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
4530: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
4540: 44 65 66 61 75 6c 74 20 6c 6f 67 67 65 72 2e 20  Default logger. 
4550: 20 43 75 72 72 65 6e 74 6c 79 2c 20 75 73 65 73   Currently, uses
4560: 20 74 68 65 20 54 72 61 63 65 20 63 6c 61 73 73   the Trace class
4570: 20 28 69 2e 65 2e 20 73 65 6e 64 73 20 65 76 65   (i.e. sends eve
4580: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nts..        ///
4590: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
45a0: 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 2c  trace listeners,
45b0: 20 69 66 20 61 6e 79 29 2e 0d 0a 20 20 20 20 20   if any)...     
45c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
45d0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
45e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 65 6e 64  param name="send
45f0: 65 72 22 3e 53 68 6f 75 6c 64 20 62 65 20 6e 75  er">Should be nu
4600: 6c 6c 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ll.</param>..   
4610: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
4620: 6e 61 6d 65 3d 22 65 22 3e 54 68 65 20 64 61 74  name="e">The dat
4630: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
4640: 68 20 74 68 69 73 20 65 76 65 6e 74 2e 3c 2f 70  h this event.</p
4650: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
4660: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
4670: 69 64 20 4c 6f 67 45 76 65 6e 74 48 61 6e 64 6c  id LogEventHandl
4680: 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
4690: 20 6f 62 6a 65 63 74 20 73 65 6e 64 65 72 2c 0d   object sender,.
46a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
46b0: 45 76 65 6e 74 41 72 67 73 20 65 0d 0a 20 20 20  EventArgs e..   
46c0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
46d0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f      {..#if !NET_
46e0: 43 4f 4d 50 41 43 54 5f 32 30 0d 0a 20 20 20 20  COMPACT_20..    
46f0: 20 20 20 20 20 20 20 20 69 66 20 28 65 20 3d 3d          if (e ==
4700: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4710: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
4720: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
4730: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 20 3d 20  tring message = 
4740: 65 2e 4d 65 73 73 61 67 65 3b 0d 0a 0d 0a 20 20  e.Message;....  
4750: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 65            if (me
4760: 73 73 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ssage == null)..
4770: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
4790: 65 73 73 61 67 65 20 3d 20 22 3c 6e 75 6c 6c 3e  essage = "<null>
47a0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
47b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
47c0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
47d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
47e0: 20 20 20 20 6d 65 73 73 61 67 65 20 3d 20 6d 65      message = me
47f0: 73 73 61 67 65 2e 54 72 69 6d 28 29 3b 0d 0a 0d  ssage.Trim();...
4800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4810: 20 69 66 20 28 6d 65 73 73 61 67 65 2e 4c 65 6e   if (message.Len
4820: 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  gth == 0)..     
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
4840: 65 73 73 61 67 65 20 3d 20 22 3c 65 6d 70 74 79  essage = "<empty
4850: 3e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  >";..           
4860: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4870: 20 20 6f 62 6a 65 63 74 20 65 72 72 6f 72 43 6f    object errorCo
4880: 64 65 20 3d 20 65 2e 45 72 72 6f 72 43 6f 64 65  de = e.ErrorCode
4890: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
48a0: 74 72 69 6e 67 20 74 79 70 65 20 3d 20 22 65 72  tring type = "er
48b0: 72 6f 72 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror";....       
48c0: 20 20 20 20 20 69 66 20 28 28 65 72 72 6f 72 43       if ((errorC
48d0: 6f 64 65 20 69 73 20 53 51 4c 69 74 65 45 72 72  ode is SQLiteErr
48e0: 6f 72 43 6f 64 65 29 20 7c 7c 20 28 65 72 72 6f  orCode) || (erro
48f0: 72 43 6f 64 65 20 69 73 20 69 6e 74 29 29 0d 0a  rCode is int))..
4900: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4920: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
4930: 63 20 3d 20 28 53 51 4c 69 74 65 45 72 72 6f 72  c = (SQLiteError
4940: 43 6f 64 65 29 28 69 6e 74 29 65 72 72 6f 72 43  Code)(int)errorC
4950: 6f 64 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ode;....        
4960: 20 20 20 20 20 20 20 20 72 63 20 26 3d 20 53 51          rc &= SQ
4970: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f  LiteErrorCode.No
4980: 6e 45 78 74 65 6e 64 65 64 4d 61 73 6b 3b 0d 0a  nExtendedMask;..
4990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
49a0: 20 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69    if (rc == SQLi
49b0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
49c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
49d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
49e0: 20 20 20 20 20 20 20 20 74 79 70 65 20 3d 20 22          type = "
49f0: 6d 65 73 73 61 67 65 22 3b 0d 0a 20 20 20 20 20  message";..     
4a00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
4a20: 73 65 20 69 66 20 28 72 63 20 3d 3d 20 53 51 4c  se if (rc == SQL
4a30: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 74  iteErrorCode.Not
4a40: 69 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ice)..          
4a50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
4a70: 65 20 3d 20 22 6e 6f 74 69 63 65 22 3b 0d 0a 20  e = "notice";.. 
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4aa0: 20 20 65 6c 73 65 20 69 66 20 28 72 63 20 3d 3d    else if (rc ==
4ab0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4ac0: 2e 57 61 72 6e 69 6e 67 29 0d 0a 20 20 20 20 20  .Warning)..     
4ad0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 20 74 79 70 65 20 3d 20 22 77 61 72 6e 69 6e    type = "warnin
4b00: 67 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g";..           
4b10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4b20: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
4b30: 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72  ((rc == SQLiteEr
4b40: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d  rorCode.Row) ||.
4b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b60: 20 20 20 20 20 28 72 63 20 3d 3d 20 53 51 4c 69       (rc == SQLi
4b70: 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65  teErrorCode.Done
4b80: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
4b90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4ba0: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 20             type 
4bb0: 3d 20 22 64 61 74 61 22 3b 0d 0a 20 20 20 20 20  = "data";..     
4bc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4bd0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4be0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
4bf0: 20 28 65 72 72 6f 72 43 6f 64 65 20 3d 3d 20 6e   (errorCode == n
4c00: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
4c10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4c20: 20 20 20 20 20 74 79 70 65 20 3d 20 22 74 72 61       type = "tra
4c30: 63 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ce";..          
4c40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4c50: 20 20 20 69 66 20 28 28 65 72 72 6f 72 43 6f 64     if ((errorCod
4c60: 65 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20  e != null) &&.. 
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
4c80: 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
4c90: 45 71 75 61 6c 73 28 65 72 72 6f 72 43 6f 64 65  Equals(errorCode
4ca0: 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 29  , String.Empty))
4cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4cd0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
4ce0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
4cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d00: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
4d10: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
4d20: 20 22 53 51 4c 69 74 65 20 7b 30 7d 20 28 7b 31   "SQLite {0} ({1
4d30: 7d 29 3a 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20  }): {2}",..     
4d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
4d50: 79 70 65 2c 20 65 72 72 6f 72 43 6f 64 65 2c 20  ype, errorCode, 
4d60: 6d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20 20 20  message));..    
4d70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4d80: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
4d90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4db0: 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69  e.WriteLine(Stri
4dc0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4de0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
4df0: 65 6e 74 43 75 6c 74 75 72 65 2c 20 22 53 51 4c  entCulture, "SQL
4e00: 69 74 65 20 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a  ite {0}: {1}",..
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e20: 20 20 20 20 74 79 70 65 2c 20 6d 65 73 73 61 67      type, messag
4e30: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e));..          
4e40: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
4e50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 7d       }..    }..}
4e60: 0d 0a                                            ..