System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 2cfc1b23c69bff0d2eca553acfa2e07b8f547bb9:


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 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0190: 69 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69  ime.InteropServi
01a0: 63 65 73 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  ces;..  using Sy
01b0: 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69  stem.Globalizati
01c0: 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75  on;....  /// <su
01d0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
01e0: 69 73 20 61 62 73 74 72 61 63 74 20 63 6c 61 73  is abstract clas
01f0: 73 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  s is designed to
0200: 20 68 61 6e 64 6c 65 20 75 73 65 72 2d 64 65 66   handle user-def
0210: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 65  ined functions e
0220: 61 73 69 6c 79 2e 20 20 41 6e 20 69 6e 73 74 61  asily.  An insta
0230: 6e 63 65 20 6f 66 20 74 68 65 20 64 65 72 69 76  nce of the deriv
0240: 65 64 20 63 6c 61 73 73 20 69 73 20 6d 61 64 65  ed class is made
0250: 20 66 6f 72 20 65 61 63 68 0d 0a 20 20 2f 2f 2f   for each..  ///
0260: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
0270: 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20  he database...  
0280: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0290: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
02a0: 0a 20 20 2f 2f 2f 20 41 6c 74 68 6f 75 67 68 20  .  /// Although 
02b0: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
02c0: 74 61 6e 63 65 20 6f 66 20 61 20 63 6c 61 73 73  tance of a class
02d0: 20 64 65 72 69 76 65 64 20 66 72 6f 6d 20 53 51   derived from SQ
02e0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 70 65 72  LiteFunction per
02f0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
0300: 74 69 6f 6e 2c 20 74 68 65 20 64 65 72 69 76 65  tion, the derive
0310: 64 20 63 6c 61 73 73 20 68 61 73 20 6e 6f 20 61  d class has no a
0320: 63 63 65 73 73 0d 0a 20 20 2f 2f 2f 20 74 6f 20  ccess..  /// to 
0330: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
0340: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 69 73  onnection.  This
0350: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
0360: 20 64 65 74 65 72 20 69 6d 70 6c 65 6d 65 6e 74   deter implement
0370: 65 72 73 20 66 72 6f 6d 20 74 68 69 6e 6b 69 6e  ers from thinkin
0380: 67 20 69 74 20 77 6f 75 6c 64 20 62 65 20 61 20  g it would be a 
0390: 67 6f 6f 64 20 69 64 65 61 20 74 6f 20 6d 61 6b  good idea to mak
03a0: 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 2f 2f  e database..  //
03b0: 2f 20 63 61 6c 6c 73 20 64 75 72 69 6e 67 20 70  / calls during p
03c0: 72 6f 63 65 73 73 69 6e 67 2e 0d 0a 20 20 2f 2f  rocessing...  //
03d0: 2f 0d 0a 20 20 2f 2f 2f 20 49 74 20 69 73 20 69  /..  /// It is i
03e0: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 64 69 73 74  mportant to dist
03f0: 69 6e 67 75 69 73 68 20 62 65 74 77 65 65 6e 20  inguish between 
0400: 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  a per-connection
0410: 20 69 6e 73 74 61 6e 63 65 2c 20 61 6e 64 20 61   instance, and a
0420: 20 70 65 72 2d 53 51 4c 20 73 74 61 74 65 6d 65   per-SQL stateme
0430: 6e 74 20 63 6f 6e 74 65 78 74 2e 20 20 4f 6e 65  nt context.  One
0440: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
0450: 73 20 63 6c 61 73 73 0d 0a 20 20 2f 2f 2f 20 73  s class..  /// s
0460: 65 72 76 69 63 65 73 20 61 6c 6c 20 53 51 4c 20  ervices all SQL 
0470: 73 74 61 74 65 6d 65 6e 74 73 20 62 65 69 6e 67  statements being
0480: 20 73 74 65 70 70 65 64 20 74 68 72 6f 75 67 68   stepped through
0490: 20 6f 6e 20 74 68 61 74 20 63 6f 6e 6e 65 63 74   on that connect
04a0: 69 6f 6e 2c 20 61 6e 64 20 74 68 65 72 65 20 63  ion, and there c
04b0: 61 6e 20 62 65 20 6d 61 6e 79 2e 20 20 4f 6e 65  an be many.  One
04c0: 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 73 74   should never st
04d0: 6f 72 65 20 70 65 72 2d 73 74 61 74 65 6d 65 6e  ore per-statemen
04e0: 74 0d 0a 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61  t..  /// informa
04f0: 74 69 6f 6e 20 69 6e 20 6d 65 6d 62 65 72 20 76  tion in member v
0500: 61 72 69 61 62 6c 65 73 20 6f 66 20 75 73 65 72  ariables of user
0510: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
0520: 6e 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 2f 2f  n classes...  //
0530: 2f 0d 0a 20 20 2f 2f 2f 20 46 6f 72 20 61 67 67  /..  /// For agg
0540: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
0550: 2c 20 61 6c 77 61 79 73 20 63 72 65 61 74 65 20  , always create 
0560: 61 6e 64 20 73 74 6f 72 65 20 79 6f 75 72 20 70  and store your p
0570: 65 72 2d 73 74 61 74 65 6d 65 6e 74 20 64 61 74  er-statement dat
0580: 61 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  a in the context
0590: 44 61 74 61 20 6f 62 6a 65 63 74 20 6f 6e 20 74  Data object on t
05a0: 68 65 20 31 73 74 20 73 74 65 70 2e 20 20 54 68  he 1st step.  Th
05b0: 69 73 20 64 61 74 61 20 77 69 6c 6c 0d 0a 20 20  is data will..  
05c0: 2f 2f 2f 20 62 65 20 61 75 74 6f 6d 61 74 69 63  /// be automatic
05d0: 61 6c 6c 79 20 66 72 65 65 64 20 66 6f 72 20 79  ally freed for y
05e0: 6f 75 20 28 61 6e 64 20 44 69 73 70 6f 73 65 28  ou (and Dispose(
05f0: 29 20 63 61 6c 6c 65 64 20 69 66 20 74 68 65 20  ) called if the 
0600: 69 74 65 6d 20 73 75 70 70 6f 72 74 73 20 49 44  item supports ID
0610: 69 73 70 6f 73 61 62 6c 65 29 20 77 68 65 6e 20  isposable) when 
0620: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
0630: 6d 70 6c 65 74 65 73 2e 0d 0a 20 20 2f 2f 2f 20  mpletes...  /// 
0640: 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 70 75  </remarks>..  pu
0650: 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 63 6c  blic abstract cl
0660: 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ass SQLiteFuncti
0670: 6f 6e 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  on : IDisposable
0680: 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72 69 76 61  ..  {..    priva
0690: 74 65 20 63 6c 61 73 73 20 41 67 67 72 65 67 61  te class Aggrega
06a0: 74 65 44 61 74 61 0d 0a 20 20 20 20 7b 0d 0a 20  teData..    {.. 
06b0: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e       internal in
06c0: 74 20 5f 63 6f 75 6e 74 20 3d 20 31 3b 0d 0a 20  t _count = 1;.. 
06d0: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 62       internal ob
06e0: 6a 65 63 74 20 5f 64 61 74 61 3b 0d 0a 20 20 20  ject _data;..   
06f0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
0700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0740: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0750: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0760: 2f 20 54 68 65 20 62 61 73 65 20 63 6f 6e 6e 65  / The base conne
0770: 63 74 69 6f 6e 20 74 68 69 73 20 66 75 6e 63 74  ction this funct
0780: 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
0790: 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  to..    /// </su
07a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
07b0: 72 6e 61 6c 20 53 51 4c 69 74 65 42 61 73 65 20  rnal SQLiteBase 
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 61               _ba
07d0: 73 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  se;....    /// <
07e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
07f0: 2f 20 49 6e 74 65 72 6e 61 6c 20 61 72 72 61 79  / Internal array
0800: 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72   used to keep tr
0810: 61 63 6b 20 6f 66 20 61 67 67 72 65 67 61 74 65  ack of aggregate
0820: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74 65 78   function contex
0830: 74 20 64 61 74 61 0d 0a 20 20 20 20 2f 2f 2f 20  t data..    /// 
0840: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0850: 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61  private Dictiona
0860: 72 79 3c 49 6e 74 50 74 72 2c 20 41 67 67 72 65  ry<IntPtr, Aggre
0870: 67 61 74 65 44 61 74 61 3e 20 5f 63 6f 6e 74 65  gateData> _conte
0880: 78 74 44 61 74 61 4c 69 73 74 3b 0d 0a 0d 0a 20  xtDataList;.... 
0890: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
08a0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f  ..    /// The co
08b0: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61  nnection flags a
08c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
08d0: 68 69 73 20 6f 62 6a 65 63 74 20 28 74 68 69 73  his object (this
08e0: 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65 0d 0a   should be the..
08f0: 20 20 20 20 2f 2f 2f 20 73 61 6d 65 20 76 61 6c      /// same val
0900: 75 65 20 61 73 20 74 68 65 20 66 6c 61 67 73 20  ue as the flags 
0910: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
0920: 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65  the parent conne
0930: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 29 2e 0d 0a  ction object)...
0940: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0950: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
0960: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
0970: 46 6c 61 67 73 20 5f 66 6c 61 67 73 3b 0d 0a 0d  Flags _flags;...
0980: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0990: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c 64  y>..    /// Hold
09a0: 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f  s a reference to
09b0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75   the callback fu
09c0: 6e 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 72 20  nction for user 
09d0: 66 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 2f  functions..    /
09e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
09f0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0a00: 65 43 61 6c 6c 62 61 63 6b 20 20 5f 49 6e 76 6f  eCallback  _Invo
0a10: 6b 65 46 75 6e 63 3b 0d 0a 20 20 20 20 2f 2f 2f  keFunc;..    ///
0a20: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0a30: 2f 2f 2f 20 48 6f 6c 64 73 20 61 20 72 65 66 65  /// Holds a refe
0a40: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 63 61 6c  rence to the cal
0a50: 6c 62 61 6b 63 20 66 75 6e 63 74 69 6f 6e 20 66  lbakc function f
0a60: 6f 72 20 73 74 65 70 70 69 6e 67 20 69 6e 20 61  or stepping in a
0a70: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
0a80: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
0a90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0aa0: 69 76 61 74 65 20 53 51 4c 69 74 65 43 61 6c 6c  ivate SQLiteCall
0ab0: 62 61 63 6b 20 20 5f 53 74 65 70 46 75 6e 63 3b  back  _StepFunc;
0ac0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0ad0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c  ry>..    /// Hol
0ae0: 64 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74  ds a reference t
0af0: 6f 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66  o the callback f
0b00: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 66 69 6e 61  unction for fina
0b10: 6c 69 7a 69 6e 67 20 61 6e 20 61 67 67 72 65 67  lizing an aggreg
0b20: 61 74 65 20 66 75 6e 63 74 69 6f 6e 0d 0a 20 20  ate function..  
0b30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0b40: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51  ..    private SQ
0b50: 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
0b60: 6b 20 20 5f 46 69 6e 61 6c 46 75 6e 63 3b 0d 0a  k  _FinalFunc;..
0b70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0b80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c 64 73  >..    /// Holds
0b90: 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20   a reference to 
0ba0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  the callback fun
0bb0: 63 74 69 6f 6e 20 66 6f 72 20 63 6f 6c 6c 61 74  ction for collat
0bc0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0d 0a 20  ing sequences.. 
0bd0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0be0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53  >..    private S
0bf0: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 5f  QLiteCollation _
0c00: 43 6f 6d 70 61 72 65 46 75 6e 63 3b 0d 0a 0d 0a  CompareFunc;....
0c10: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
0c20: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 5f 43 6f 6d  teCollation _Com
0c30: 70 61 72 65 46 75 6e 63 31 36 3b 0d 0a 0d 0a 20  pareFunc16;.... 
0c40: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0c50: 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65 6e  ..    /// Curren
0c60: 74 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  t context of the
0c70: 20 63 75 72 72 65 6e 74 20 63 61 6c 6c 62 61 63   current callbac
0c80: 6b 2e 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 64  k.  Only valid d
0c90: 75 72 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  uring a callback
0ca0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0cb0: 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
0cc0: 61 6c 20 49 6e 74 50 74 72 20 5f 63 6f 6e 74 65  al IntPtr _conte
0cd0: 78 74 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  xt;....    /// <
0ce0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0cf0: 2f 20 54 68 69 73 20 73 74 61 74 69 63 20 64 69  / This static di
0d00: 63 74 69 6f 6e 61 72 79 20 63 6f 6e 74 61 69 6e  ctionary contain
0d10: 73 20 61 6c 6c 20 74 68 65 20 72 65 67 69 73 74  s all the regist
0d20: 65 72 65 64 20 28 6b 6e 6f 77 6e 29 20 75 73 65  ered (known) use
0d30: 72 2d 64 65 66 69 6e 65 64 0d 0a 20 20 20 20 2f  r-defined..    /
0d40: 2f 2f 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 63  // functions dec
0d50: 6c 61 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  lared using the 
0d60: 70 72 6f 70 65 72 20 61 74 74 72 69 62 75 74 65  proper attribute
0d70: 73 2e 20 20 54 68 65 20 63 6f 6e 74 61 69 6e 65  s.  The containe
0d80: 64 20 64 69 63 74 69 6f 6e 61 72 79 0d 0a 20 20  d dictionary..  
0d90: 20 20 2f 2f 2f 20 76 61 6c 75 65 73 20 61 72 65    /// values are
0da0: 20 61 6c 77 61 79 73 20 6e 75 6c 6c 20 61 6e 64   always null and
0db0: 20 61 72 65 20 6e 6f 74 20 63 75 72 72 65 6e 74   are not current
0dc0: 6c 79 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ly used...    //
0dd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0de0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
0df0: 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c   IDictionary<SQL
0e00: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
0e10: 62 75 74 65 2c 20 6f 62 6a 65 63 74 3e 20 5f 72  bute, object> _r
0e20: 65 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f  egisteredFunctio
0e30: 6e 73 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ns;....    /// <
0e40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0e50: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0e60: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0e70: 7a 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  zes the function
0e80: 27 73 20 69 6e 74 65 72 6e 61 6c 20 76 61 72 69  's internal vari
0e90: 61 62 6c 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ables...    /// 
0ea0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0eb0: 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65  protected SQLite
0ec0: 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20 20 20 20  Function()..    
0ed0: 7b 0d 0a 20 20 20 20 20 20 5f 63 6f 6e 74 65 78  {..      _contex
0ee0: 74 44 61 74 61 4c 69 73 74 20 3d 20 6e 65 77 20  tDataList = new 
0ef0: 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74  Dictionary<IntPt
0f00: 72 2c 20 41 67 67 72 65 67 61 74 65 44 61 74 61  r, AggregateData
0f10: 3e 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  >();..    }.... 
0f20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0f30: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72  ..    /// Constr
0f40: 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
0f50: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20 75   of this class u
0f60: 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  sing the specifi
0f70: 65 64 20 64 61 74 61 2d 74 79 70 65 0d 0a 20 20  ed data-type..  
0f80: 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 73 69 6f 6e    /// conversion
0f90: 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
0fa0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0fb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0fc0: 20 6e 61 6d 65 3d 22 66 6f 72 6d 61 74 22 3e 0d   name="format">.
0fd0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74  .    /// The Dat
0fe0: 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20  eTime format to 
0ff0: 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e  be used when con
1000: 76 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76  verting string v
1010: 61 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20  alues to a..    
1020: 2f 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64  /// DateTime and
1030: 20 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d   binding DateTim
1040: 65 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20  e parameters... 
1050: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1060: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1070: 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20  name="kind">..  
1080: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1090: 72 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e  ref="DateTimeKin
10a0: 64 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64  d" /> to be used
10b0: 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44   when creating D
10c0: 61 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f  ateTime..    ///
10d0: 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f   values...    //
10e0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
10f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1100: 22 66 6f 72 6d 61 74 53 74 72 69 6e 67 22 3e 0d  "formatString">.
1110: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6f 72  .    /// The for
1120: 6d 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65  mat string to be
1130: 20 75 73 65 64 20 77 68 65 6e 20 70 61 72 73 69   used when parsi
1140: 6e 67 20 61 6e 64 20 66 6f 72 6d 61 74 74 69 6e  ng and formattin
1150: 67 20 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20  g DateTime..    
1160: 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  /// values...   
1170: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1180: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1190: 6d 65 3d 22 75 74 66 31 36 22 3e 0d 0a 20 20 20  me="utf16">..   
11a0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
11b0: 20 63 72 65 61 74 65 20 61 20 55 54 46 2d 31 36   create a UTF-16
11c0: 20 64 61 74 61 2d 74 79 70 65 20 63 6f 6e 76 65   data-type conve
11d0: 72 73 69 6f 6e 20 63 6f 6e 74 65 78 74 3b 20 6f  rsion context; o
11e0: 74 68 65 72 77 69 73 65 2c 0d 0a 20 20 20 20 2f  therwise,..    /
11f0: 2f 2f 20 61 20 55 54 46 2d 38 20 64 61 74 61 2d  // a UTF-8 data-
1200: 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20  type conversion 
1210: 63 6f 6e 74 65 78 74 20 77 69 6c 6c 20 62 65 20  context will be 
1220: 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20 2f 2f  created...    //
1230: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1240: 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65  protected SQLite
1250: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
1260: 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72     SQLiteDateFor
1270: 6d 61 74 73 20 66 6f 72 6d 61 74 2c 0d 0a 20 20  mats format,..  
1280: 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b 69        DateTimeKi
1290: 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20  nd kind,..      
12a0: 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 53    string formatS
12b0: 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  tring,..        
12c0: 62 6f 6f 6c 20 75 74 66 31 36 0d 0a 20 20 20 20  bool utf16..    
12d0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 3a      )..        :
12e0: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 7b 0d 0a   this()..    {..
12f0: 20 20 20 20 20 20 20 20 69 66 20 28 75 74 66 31          if (utf1
1300: 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  6)..            
1310: 5f 62 61 73 65 20 3d 20 6e 65 77 20 53 51 4c 69  _base = new SQLi
1320: 74 65 33 5f 55 54 46 31 36 28 66 6f 72 6d 61 74  te3_UTF16(format
1330: 2c 20 6b 69 6e 64 2c 20 66 6f 72 6d 61 74 53 74  , kind, formatSt
1340: 72 69 6e 67 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ring, IntPtr.Zer
1350: 6f 2c 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 3b  o, null, false);
1360: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
1370: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 61 73              _bas
1380: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 33 28  e = new SQLite3(
1390: 66 6f 72 6d 61 74 2c 20 6b 69 6e 64 2c 20 66 6f  format, kind, fo
13a0: 72 6d 61 74 53 74 72 69 6e 67 2c 20 49 6e 74 50  rmatString, IntP
13b0: 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c 2c 20 66  tr.Zero, null, f
13c0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alse);..    }...
13d0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1430: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
1440: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
1450: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 2f 2f 2f  Members..    ///
1460: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1470: 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20  /// Disposes of 
1480: 61 6e 79 20 61 63 74 69 76 65 20 63 6f 6e 74 65  any active conte
1490: 78 74 44 61 74 61 20 76 61 72 69 61 62 6c 65 73  xtData variables
14a0: 20 74 68 61 74 20 77 65 72 65 20 6e 6f 74 20 61   that were not a
14b0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6c 65  utomatically cle
14c0: 61 6e 65 64 20 75 70 2e 20 20 53 6f 6d 65 74 69  aned up.  Someti
14d0: 6d 65 73 20 74 68 69 73 20 63 61 6e 20 68 61 70  mes this can hap
14e0: 70 65 6e 20 69 66 0d 0a 20 20 20 20 2f 2f 2f 20  pen if..    /// 
14f0: 73 6f 6d 65 6f 6e 65 20 63 6c 6f 73 65 73 20 74  someone closes t
1500: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  he connection wh
1510: 69 6c 65 20 61 20 44 61 74 61 52 65 61 64 65 72  ile a DataReader
1520: 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f   is open...    /
1530: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1540: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
1550: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d  ispose()..    {.
1560: 0a 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65  .        Dispose
1570: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
1580: 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61   GC.SuppressFina
1590: 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20  lize(this);..   
15a0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
15b0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1620: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
1630: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
1640: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
1650: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
1660: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
1670: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
1680: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
1690: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
16a0: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
16b0: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
16c0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
16d0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
16e0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
16f0: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
1700: 74 65 46 75 6e 63 74 69 6f 6e 29 2e 4e 61 6d 65  teFunction).Name
1710: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
1720: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1790: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
17a0: 20 20 20 2f 2f 2f 20 50 6c 61 63 65 68 6f 6c 64     /// Placehold
17b0: 65 72 20 66 6f 72 20 61 20 75 73 65 72 2d 64 65  er for a user-de
17c0: 66 69 6e 65 64 20 64 69 73 70 6f 73 61 6c 20 72  fined disposal r
17d0: 6f 75 74 69 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  outine..    /// 
17e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
17f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1800: 22 64 69 73 70 6f 73 69 6e 67 22 3e 54 72 75 65  "disposing">True
1810: 20 69 66 20 74 68 65 20 6f 62 6a 65 63 74 20 69   if the object i
1820: 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64  s being disposed
1830: 20 65 78 70 6c 69 63 69 74 6c 79 3c 2f 70 61 72   explicitly</par
1840: 61 6d 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  am>..    protect
1850: 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
1860: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
1870: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a  posing)..    {..
1880: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
1890: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
18a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
18b0: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
18c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1900: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1910: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
1920: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
1930: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
1940: 20 20 20 20 20 20 20 20 20 20 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 0d 0a  //////////////..
1970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1980: 20 20 49 44 69 73 70 6f 73 61 62 6c 65 20 64 69    IDisposable di
1990: 73 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  sp;....         
19a0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
19b0: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 49 6e 74  KeyValuePair<Int
19c0: 50 74 72 2c 20 41 67 67 72 65 67 61 74 65 44 61  Ptr, AggregateDa
19d0: 74 61 3e 20 6b 76 20 69 6e 20 5f 63 6f 6e 74 65  ta> kv in _conte
19e0: 78 74 44 61 74 61 4c 69 73 74 29 0d 0a 20 20 20  xtDataList)..   
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a10: 20 20 20 20 64 69 73 70 20 3d 20 6b 76 2e 56 61      disp = kv.Va
1a20: 6c 75 65 2e 5f 64 61 74 61 20 61 73 20 49 44 69  lue._data as IDi
1a30: 73 70 6f 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20  sposable;..     
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a50: 66 20 28 64 69 73 70 20 21 3d 20 6e 75 6c 6c 29  f (disp != null)
1a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a70: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 2e 44            disp.D
1a80: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
1a90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63                _c
1ab0: 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 74 2e 43  ontextDataList.C
1ac0: 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lear();..       
1ad0: 20 20 20 20 20 20 20 20 20 5f 63 6f 6e 74 65 78           _contex
1ae0: 74 44 61 74 61 4c 69 73 74 20 3d 20 6e 75 6c 6c  tDataList = null
1af0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b00: 20 20 20 20 20 5f 66 6c 61 67 73 20 3d 20 53 51       _flags = SQ
1b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
1b20: 61 67 73 2e 4e 6f 6e 65 3b 0d 0a 0d 0a 20 20 20  ags.None;....   
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 49 6e               _In
1b40: 76 6f 6b 65 46 75 6e 63 20 3d 20 6e 75 6c 6c 3b  vokeFunc = null;
1b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b60: 20 20 5f 53 74 65 70 46 75 6e 63 20 3d 20 6e 75    _StepFunc = nu
1b70: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
1b80: 20 20 20 20 20 5f 46 69 6e 61 6c 46 75 6e 63 20       _FinalFunc 
1b90: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
1ba0: 20 20 20 20 20 20 20 20 20 5f 43 6f 6d 70 61 72           _Compar
1bb0: 65 46 75 6e 63 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eFunc = null;.. 
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
1bd0: 62 61 73 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  base = null;..  
1be0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c20: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
1c30: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
1c40: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
1c50: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
1c60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c90: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
1ca0: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
1cb0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20     }..    }..   
1cc0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1cd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d30: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1d40: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
1d50: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1d60: 0a 20 20 20 20 2f 2f 2f 20 43 6c 65 61 6e 73 20  .    /// Cleans 
1d70: 75 70 20 72 65 73 6f 75 72 63 65 73 20 61 73 73  up resources ass
1d80: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1d90: 20 63 75 72 72 65 6e 74 20 69 6e 73 74 61 6e 63   current instanc
1da0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
1db0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 7e 53 51 4c  mmary>..    ~SQL
1dc0: 69 74 65 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20  iteFunction().. 
1dd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
1de0: 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20  spose(false);.. 
1df0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
1e00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
1e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1e80: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
1e90: 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f  s a reference to
1ea0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
1eb0: 63 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 53 51 4c  connection's SQL
1ec0: 69 74 65 43 6f 6e 76 65 72 74 20 63 6c 61 73 73  iteConvert class
1ed0: 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 75  , which can be u
1ee0: 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 0d 0a  sed to convert..
1ef0: 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20      /// strings 
1f00: 61 6e 64 20 44 61 74 65 54 69 6d 65 27 73 20 69  and DateTime's i
1f10: 6e 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20  nto the current 
1f20: 63 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 65 6e 63  connection's enc
1f30: 6f 64 69 6e 67 20 73 63 68 65 6d 61 2e 0d 0a 20  oding schema... 
1f40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1f50: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 53 51  >..    public SQ
1f60: 4c 69 74 65 43 6f 6e 76 65 72 74 20 53 51 4c 69  LiteConvert SQLi
1f70: 74 65 43 6f 6e 76 65 72 74 0d 0a 20 20 20 20 7b  teConvert..    {
1f80: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
1f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
1fa0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
1fb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
1fc0: 62 61 73 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  base;..      }..
1fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1ff0: 2f 2f 2f 20 53 63 61 6c 61 72 20 66 75 6e 63 74  /// Scalar funct
2000: 69 6f 6e 73 20 6f 76 65 72 72 69 64 65 20 74 68  ions override th
2010: 69 73 20 6d 65 74 68 6f 64 20 74 6f 20 64 6f 20  is method to do 
2020: 74 68 65 69 72 20 6d 61 67 69 63 2e 0d 0a 20 20  their magic...  
2030: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  ..    /// <remar
2050: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 50 61 72  ks>..    /// Par
2060: 61 6d 65 74 65 72 73 20 70 61 73 73 65 64 20 74  ameters passed t
2070: 6f 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  o functions have
2080: 20 6f 6e 6c 79 20 61 6e 20 61 66 66 69 6e 69 74   only an affinit
2090: 79 20 66 6f 72 20 61 20 63 65 72 74 61 69 6e 20  y for a certain 
20a0: 64 61 74 61 20 74 79 70 65 2c 20 74 68 65 72 65  data type, there
20b0: 20 69 73 20 6e 6f 20 75 6e 64 65 72 6c 79 69 6e   is no underlyin
20c0: 67 20 73 63 68 65 6d 61 20 61 76 61 69 6c 61 62  g schema availab
20d0: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 66  le..    /// to f
20e0: 6f 72 63 65 20 74 68 65 6d 20 69 6e 74 6f 20 61  orce them into a
20f0: 20 63 65 72 74 61 69 6e 20 74 79 70 65 2e 20 20   certain type.  
2100: 54 68 65 72 65 66 6f 72 65 20 74 68 65 20 6f 6e  Therefore the on
2110: 6c 79 20 74 79 70 65 73 20 79 6f 75 20 77 69 6c  ly types you wil
2120: 6c 20 65 76 65 72 20 73 65 65 20 61 73 20 70 61  l ever see as pa
2130: 72 61 6d 65 74 65 72 73 20 61 72 65 0d 0a 20 20  rameters are..  
2140: 20 20 2f 2f 2f 20 44 42 4e 75 6c 6c 2e 56 61 6c    /// DBNull.Val
2150: 75 65 2c 20 49 6e 74 36 34 2c 20 44 6f 75 62 6c  ue, Int64, Doubl
2160: 65 2c 20 53 74 72 69 6e 67 20 6f 72 20 62 79 74  e, String or byt
2170: 65 5b 5d 20 61 72 72 61 79 2e 0d 0a 20 20 20 20  e[] array...    
2180: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
2190: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21a0: 61 6d 65 3d 22 61 72 67 73 22 3e 54 68 65 20 61  ame="args">The a
21b0: 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  rguments for the
21c0: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 70 72 6f 63   command to proc
21d0: 65 73 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ess</param>..   
21e0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 59 6f   /// <returns>Yo
21f0: 75 20 6d 61 79 20 72 65 74 75 72 6e 20 6d 6f 73  u may return mos
2200: 74 20 73 69 6d 70 6c 65 20 74 79 70 65 73 20 61  t simple types a
2210: 73 20 61 20 72 65 74 75 72 6e 20 76 61 6c 75 65  s a return value
2220: 2c 20 6e 75 6c 6c 20 6f 72 20 44 42 4e 75 6c 6c  , null or DBNull
2230: 2e 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e  .Value to return
2240: 20 6e 75 6c 6c 2c 20 44 61 74 65 54 69 6d 65 2c   null, DateTime,
2250: 20 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 79 6f 75   or..    /// you
2260: 20 6d 61 79 20 72 65 74 75 72 6e 20 61 6e 20 45   may return an E
2270: 78 63 65 70 74 69 6f 6e 2d 64 65 72 69 76 65 64  xception-derived
2280: 20 63 6c 61 73 73 20 69 66 20 79 6f 75 20 77 69   class if you wi
2290: 73 68 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  sh to return an 
22a0: 65 72 72 6f 72 20 74 6f 20 53 51 4c 69 74 65 2e  error to SQLite.
22b0: 20 20 44 6f 20 6e 6f 74 20 61 63 74 75 61 6c 6c    Do not actuall
22c0: 79 20 74 68 72 6f 77 20 74 68 65 20 65 72 72 6f  y throw the erro
22d0: 72 2c 0d 0a 20 20 20 20 2f 2f 2f 20 6a 75 73 74  r,..    /// just
22e0: 20 72 65 74 75 72 6e 20 69 74 21 3c 2f 72 65 74   return it!</ret
22f0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
2300: 63 20 76 69 72 74 75 61 6c 20 6f 62 6a 65 63 74  c virtual object
2310: 20 49 6e 76 6f 6b 65 28 6f 62 6a 65 63 74 5b 5d   Invoke(object[]
2320: 20 61 72 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20   args)..    {.. 
2330: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2340: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  ed();..      ret
2350: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d  urn null;..    }
2360: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2370: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
2380: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
2390: 6e 73 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ns override this
23a0: 20 6d 65 74 68 6f 64 20 74 6f 20 64 6f 20 74 68   method to do th
23b0: 65 69 72 20 6d 61 67 69 63 2e 0d 0a 20 20 20 20  eir magic...    
23c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
23d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
23e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 79 70 69 63  >..    /// Typic
23f0: 61 6c 6c 79 20 79 6f 75 27 6c 6c 20 62 65 20 75  ally you'll be u
2400: 70 64 61 74 69 6e 67 20 77 68 61 74 65 76 65 72  pdating whatever
2410: 20 79 6f 75 27 76 65 20 70 6c 61 63 65 64 20 69   you've placed i
2420: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 44 61 74  n the contextDat
2430: 61 20 66 69 65 6c 64 20 61 6e 64 20 72 65 74 75  a field and retu
2440: 72 6e 69 6e 67 20 61 73 20 71 75 69 63 6b 6c 79  rning as quickly
2450: 20 61 73 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20   as possible... 
2460: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
2470: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2480: 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 54 68  m name="args">Th
2490: 65 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  e arguments for 
24a0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 70  the command to p
24b0: 72 6f 63 65 73 73 3c 2f 70 61 72 61 6d 3e 0d 0a  rocess</param>..
24c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
24d0: 61 6d 65 3d 22 73 74 65 70 4e 75 6d 62 65 72 22  ame="stepNumber"
24e0: 3e 54 68 65 20 31 2d 62 61 73 65 64 20 73 74 65  >The 1-based ste
24f0: 70 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  p number.  This 
2500: 69 73 20 69 6e 63 72 65 6d 65 6d 74 65 64 20 65  is incrememted e
2510: 61 63 68 20 74 69 6d 65 20 74 68 65 20 73 74 65  ach time the ste
2520: 70 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  p method is call
2530: 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ed.</param>..   
2540: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2550: 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 41  ="contextData">A
2560: 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72   placeholder for
2570: 20 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f   implementers to
2580: 20 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61   store contextua
2590: 6c 20 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e  l data pertainin
25a0: 67 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  g to the current
25b0: 20 63 6f 6e 74 65 78 74 2e 3c 2f 70 61 72 61 6d   context.</param
25c0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69  >..    public vi
25d0: 72 74 75 61 6c 20 76 6f 69 64 20 53 74 65 70 28  rtual void Step(
25e0: 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 2c 20 69  object[] args, i
25f0: 6e 74 20 73 74 65 70 4e 75 6d 62 65 72 2c 20 72  nt stepNumber, r
2600: 65 66 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78  ef object contex
2610: 74 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20  tData)..    {.. 
2620: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2630: 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ed();..    }....
2640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 67 67 72 65  >..    /// Aggre
2660: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  gate functions o
2670: 76 65 72 72 69 64 65 20 74 68 69 73 20 6d 65 74  verride this met
2680: 68 6f 64 20 74 6f 20 66 69 6e 69 73 68 20 74 68  hod to finish th
2690: 65 69 72 20 61 67 67 72 65 67 61 74 65 20 70 72  eir aggregate pr
26a0: 6f 63 65 73 73 69 6e 67 2e 0d 0a 20 20 20 20 2f  ocessing...    /
26b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
26c0: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
26d0: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 79 6f 75  ..    /// If you
26e0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 79 6f 75   implemented you
26f0: 72 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  r aggregate func
2700: 74 69 6f 6e 20 70 72 6f 70 65 72 6c 79 2c 0d 0a  tion properly,..
2710: 20 20 20 20 2f 2f 2f 20 79 6f 75 27 76 65 20 62      /// you've b
2720: 65 65 6e 20 72 65 63 6f 72 64 69 6e 67 20 61 6e  een recording an
2730: 64 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  d keeping track 
2740: 6f 66 20 79 6f 75 72 20 64 61 74 61 20 69 6e 20  of your data in 
2750: 74 68 65 20 63 6f 6e 74 65 78 74 44 61 74 61 20  the contextData 
2760: 6f 62 6a 65 63 74 20 70 72 6f 76 69 64 65 64 2c  object provided,
2770: 20 61 6e 64 20 6e 6f 77 20 61 74 20 74 68 69 73   and now at this
2780: 20 73 74 61 67 65 20 79 6f 75 20 73 68 6f 75 6c   stage you shoul
2790: 64 20 68 61 76 65 0d 0a 20 20 20 20 2f 2f 2f 20  d have..    /// 
27a0: 61 6c 6c 20 74 68 65 20 69 6e 66 6f 72 6d 61 74  all the informat
27b0: 69 6f 6e 20 79 6f 75 20 6e 65 65 64 20 69 6e 20  ion you need in 
27c0: 74 68 65 72 65 20 74 6f 20 66 69 67 75 72 65 20  there to figure 
27d0: 6f 75 74 20 77 68 61 74 20 74 6f 20 72 65 74 75  out what to retu
27e0: 72 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 4f 54  rn...    /// NOT
27f0: 45 3a 20 20 49 74 20 69 73 20 70 6f 73 73 69 62  E:  It is possib
2800: 6c 65 20 74 6f 20 61 72 72 69 76 65 20 68 65 72  le to arrive her
2810: 65 20 77 69 74 68 6f 75 74 20 72 65 63 65 69 76  e without receiv
2820: 69 6e 67 20 61 20 70 72 65 76 69 6f 75 73 20 63  ing a previous c
2830: 61 6c 6c 20 74 6f 20 53 74 65 70 28 29 2c 20 69  all to Step(), i
2840: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
2850: 20 63 6f 6e 74 65 78 74 44 61 74 61 20 77 69 6c   contextData wil
2860: 6c 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 6e 75  l..    /// be nu
2870: 6c 6c 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61  ll.  This can ha
2880: 70 70 65 6e 20 77 68 65 6e 20 6e 6f 20 72 6f 77  ppen when no row
2890: 73 20 77 65 72 65 20 72 65 74 75 72 6e 65 64 2e  s were returned.
28a0: 20 20 59 6f 75 20 63 61 6e 20 65 69 74 68 65 72    You can either
28b0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 2c 20 6f 72   return null, or
28c0: 20 30 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72   0 or some other
28d0: 20 63 75 73 74 6f 6d 20 72 65 74 75 72 6e 20 76   custom return v
28e0: 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 66  alue..    /// if
28f0: 20 74 68 61 74 20 69 73 20 74 68 65 20 63 61 73   that is the cas
2900: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
2910: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
2920: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
2930: 74 65 78 74 44 61 74 61 22 3e 59 6f 75 72 20 6f  textData">Your o
2940: 77 6e 20 61 73 73 69 67 6e 65 64 20 63 6f 6e 74  wn assigned cont
2950: 65 78 74 44 61 74 61 2c 20 70 72 6f 76 69 64 65  extData, provide
2960: 64 20 66 6f 72 20 79 6f 75 20 73 6f 20 79 6f 75  d for you so you
2970: 20 63 61 6e 20 72 65 74 75 72 6e 20 79 6f 75 72   can return your
2980: 20 66 69 6e 61 6c 20 72 65 73 75 6c 74 73 2e 3c   final results.<
2990: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
29a0: 20 3c 72 65 74 75 72 6e 73 3e 59 6f 75 20 6d 61   <returns>You ma
29b0: 79 20 72 65 74 75 72 6e 20 6d 6f 73 74 20 73 69  y return most si
29c0: 6d 70 6c 65 20 74 79 70 65 73 20 61 73 20 61 20  mple types as a 
29d0: 72 65 74 75 72 6e 20 76 61 6c 75 65 2c 20 6e 75  return value, nu
29e0: 6c 6c 20 6f 72 20 44 42 4e 75 6c 6c 2e 56 61 6c  ll or DBNull.Val
29f0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 6e 75 6c  ue to return nul
2a00: 6c 2c 20 44 61 74 65 54 69 6d 65 2c 20 6f 72 0d  l, DateTime, or.
2a10: 0a 20 20 20 20 2f 2f 2f 20 79 6f 75 20 6d 61 79  .    /// you may
2a20: 20 72 65 74 75 72 6e 20 61 6e 20 45 78 63 65 70   return an Excep
2a30: 74 69 6f 6e 2d 64 65 72 69 76 65 64 20 63 6c 61  tion-derived cla
2a40: 73 73 20 69 66 20 79 6f 75 20 77 69 73 68 20 74  ss if you wish t
2a50: 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
2a60: 72 20 74 6f 20 53 51 4c 69 74 65 2e 20 20 44 6f  r to SQLite.  Do
2a70: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 74 68   not actually th
2a80: 72 6f 77 20 74 68 65 20 65 72 72 6f 72 2c 0d 0a  row the error,..
2a90: 20 20 20 20 2f 2f 2f 20 6a 75 73 74 20 72 65 74      /// just ret
2aa0: 75 72 6e 20 69 74 21 0d 0a 20 20 20 20 2f 2f 2f  urn it!..    ///
2ab0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2ac0: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
2ad0: 6f 62 6a 65 63 74 20 46 69 6e 61 6c 28 6f 62 6a  object Final(obj
2ae0: 65 63 74 20 63 6f 6e 74 65 78 74 44 61 74 61 29  ect contextData)
2af0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
2b00: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2b10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75  .      return nu
2b20: 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ll;..    }....  
2b30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2b40: 0a 20 20 20 20 2f 2f 2f 20 55 73 65 72 2d 64 65  .    /// User-de
2b50: 66 69 6e 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20  fined collating 
2b60: 73 65 71 75 65 6e 63 65 73 20 6f 76 65 72 72 69  sequences overri
2b70: 64 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 74  de this method t
2b80: 6f 20 70 72 6f 76 69 64 65 20 61 20 63 75 73 74  o provide a cust
2b90: 6f 6d 20 73 74 72 69 6e 67 20 73 6f 72 74 69 6e  om string sortin
2ba0: 67 20 61 6c 67 6f 72 69 74 68 6d 2e 0d 0a 20 20  g algorithm...  
2bb0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2bc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2bd0: 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22 3e 54   name="param1">T
2be0: 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20  he first string 
2bf0: 74 6f 20 63 6f 6d 70 61 72 65 2e 3c 2f 70 61 72  to compare.</par
2c00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
2c10: 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32  ram name="param2
2c20: 22 3e 54 68 65 20 73 65 63 6f 6e 64 20 73 74 72  ">The second str
2c30: 6e 69 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 3c  nig to compare.<
2c40: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
2c50: 20 3c 72 65 74 75 72 6e 73 3e 31 20 69 66 20 70   <returns>1 if p
2c60: 61 72 61 6d 31 20 69 73 20 67 72 65 61 74 65 72  aram1 is greater
2c70: 20 74 68 61 6e 20 70 61 72 61 6d 32 2c 20 30 20   than param2, 0 
2c80: 69 66 20 74 68 65 79 20 61 72 65 20 65 71 75 61  if they are equa
2c90: 6c 2c 20 6f 72 20 2d 31 20 69 66 20 70 61 72 61  l, or -1 if para
2ca0: 6d 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  m1 is less than 
2cb0: 70 61 72 61 6d 32 2e 3c 2f 72 65 74 75 72 6e 73  param2.</returns
2cc0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69  >..    public vi
2cd0: 72 74 75 61 6c 20 69 6e 74 20 43 6f 6d 70 61 72  rtual int Compar
2ce0: 65 28 73 74 72 69 6e 67 20 70 61 72 61 6d 31 2c  e(string param1,
2cf0: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 32 29 0d   string param2).
2d00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
2d10: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2d20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
2d30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2d40: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2d50: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 6e   /// Converts an
2d60: 20 49 6e 74 50 74 72 20 61 72 72 61 79 20 6f 66   IntPtr array of
2d70: 20 63 6f 6e 74 65 78 74 20 61 72 67 75 6d 65 6e   context argumen
2d80: 74 73 20 74 6f 20 61 6e 20 6f 62 6a 65 63 74 20  ts to an object 
2d90: 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67  array containing
2da0: 20 74 68 65 20 72 65 73 6f 6c 76 65 64 20 70 61   the resolved pa
2db0: 72 61 6d 65 74 65 72 73 20 74 68 65 20 70 6f 69  rameters the poi
2dc0: 6e 74 65 72 73 20 70 6f 69 6e 74 20 74 6f 2e 0d  nters point to..
2dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2de0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
2df0: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
2e00: 50 61 72 61 6d 65 74 65 72 73 20 70 61 73 73 65  Parameters passe
2e10: 64 20 74 6f 20 66 75 6e 63 74 69 6f 6e 73 20 68  d to functions h
2e20: 61 76 65 20 6f 6e 6c 79 20 61 6e 20 61 66 66 69  ave only an affi
2e30: 6e 69 74 79 20 66 6f 72 20 61 20 63 65 72 74 61  nity for a certa
2e40: 69 6e 20 64 61 74 61 20 74 79 70 65 2c 20 74 68  in data type, th
2e50: 65 72 65 20 69 73 20 6e 6f 20 75 6e 64 65 72 6c  ere is no underl
2e60: 79 69 6e 67 20 73 63 68 65 6d 61 20 61 76 61 69  ying schema avai
2e70: 6c 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 74  lable..    /// t
2e80: 6f 20 66 6f 72 63 65 20 74 68 65 6d 20 69 6e 74  o force them int
2e90: 6f 20 61 20 63 65 72 74 61 69 6e 20 74 79 70 65  o a certain type
2ea0: 2e 20 20 54 68 65 72 65 66 6f 72 65 20 74 68 65  .  Therefore the
2eb0: 20 6f 6e 6c 79 20 74 79 70 65 73 20 79 6f 75 20   only types you 
2ec0: 77 69 6c 6c 20 65 76 65 72 20 73 65 65 20 61 73  will ever see as
2ed0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 0d   parameters are.
2ee0: 0a 20 20 20 20 2f 2f 2f 20 44 42 4e 75 6c 6c 2e  .    /// DBNull.
2ef0: 56 61 6c 75 65 2c 20 49 6e 74 36 34 2c 20 44 6f  Value, Int64, Do
2f00: 75 62 6c 65 2c 20 53 74 72 69 6e 67 20 6f 72 20  uble, String or 
2f10: 62 79 74 65 5b 5d 20 61 72 72 61 79 2e 0d 0a 20  byte[] array... 
2f20: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
2f30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2f40: 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 73 22 3e 54  m name="nArgs">T
2f50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
2f60: 75 6d 65 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a  uments</param>..
2f70: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2f80: 61 6d 65 3d 22 61 72 67 73 70 74 72 22 3e 41 20  ame="argsptr">A 
2f90: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61  pointer to the a
2fa0: 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74  rray of argument
2fb0: 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  s</param>..    /
2fc0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 6e 20 6f  // <returns>An o
2fd0: 62 6a 65 63 74 20 61 72 72 61 79 20 6f 66 20 74  bject array of t
2fe0: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 63  he arguments onc
2ff0: 65 20 74 68 65 79 27 76 65 20 62 65 65 6e 20 63  e they've been c
3000: 6f 6e 76 65 72 74 65 64 20 74 6f 20 2e 4e 45 54  onverted to .NET
3010: 20 76 61 6c 75 65 73 3c 2f 72 65 74 75 72 6e 73   values</returns
3020: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3030: 6f 62 6a 65 63 74 5b 5d 20 43 6f 6e 76 65 72 74  object[] Convert
3040: 50 61 72 61 6d 73 28 69 6e 74 20 6e 41 72 67 73  Params(int nArgs
3050: 2c 20 49 6e 74 50 74 72 20 61 72 67 73 70 74 72  , IntPtr argsptr
3060: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3070: 6f 62 6a 65 63 74 5b 5d 20 70 61 72 6d 73 20 3d  object[] parms =
3080: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 6e 41 72 67   new object[nArg
3090: 73 5d 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  s];..#if !PLATFO
30a0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
30b0: 4f 52 4b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ORK..      IntPt
30c0: 72 5b 5d 20 61 72 67 69 6e 74 20 3d 20 6e 65 77  r[] argint = new
30d0: 20 49 6e 74 50 74 72 5b 6e 41 72 67 73 5d 3b 0d   IntPtr[nArgs];.
30e0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 69 6e  .#else..      in
30f0: 74 5b 5d 20 61 72 67 69 6e 74 20 3d 20 6e 65 77  t[] argint = new
3100: 20 69 6e 74 5b 6e 41 72 67 73 5d 3b 0d 0a 23 65   int[nArgs];..#e
3110: 6e 64 69 66 0d 0a 20 20 20 20 20 20 4d 61 72 73  ndif..      Mars
3120: 68 61 6c 2e 43 6f 70 79 28 61 72 67 73 70 74 72  hal.Copy(argsptr
3130: 2c 20 61 72 67 69 6e 74 2c 20 30 2c 20 6e 41 72  , argint, 0, nAr
3140: 67 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  gs);....      fo
3150: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
3160: 3c 20 6e 41 72 67 73 3b 20 6e 2b 2b 29 0d 0a 20  < nArgs; n++).. 
3170: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3180: 73 77 69 74 63 68 20 28 5f 62 61 73 65 2e 47 65  switch (_base.Ge
3190: 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
31a0: 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b 6e  (IntPtr)argint[n
31b0: 5d 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ]))..        {..
31c0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
31d0: 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c  ypeAffinity.Null
31e0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  :..            p
31f0: 61 72 6d 73 5b 6e 5d 20 3d 20 44 42 4e 75 6c 6c  arms[n] = DBNull
3200: 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  .Value;..       
3210: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
3220: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3230: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d  Affinity.Int64:.
3240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72  .            par
3250: 6d 73 5b 6e 5d 20 3d 20 5f 62 61 73 65 2e 47 65  ms[n] = _base.Ge
3260: 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34  tParamValueInt64
3270: 28 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b  ((IntPtr)argint[
3280: 6e 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n]);..          
3290: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
32a0: 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
32b0: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
32c0: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 6d 73             parms
32d0: 5b 6e 5d 20 3d 20 5f 62 61 73 65 2e 47 65 74 50  [n] = _base.GetP
32e0: 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28  aramValueDouble(
32f0: 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b 6e  (IntPtr)argint[n
3300: 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]);..           
3310: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
3320: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
3330: 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20  nity.Text:..    
3340: 20 20 20 20 20 20 20 20 70 61 72 6d 73 5b 6e 5d          parms[n]
3350: 20 3d 20 5f 62 61 73 65 2e 47 65 74 50 61 72 61   = _base.GetPara
3360: 6d 56 61 6c 75 65 54 65 78 74 28 28 49 6e 74 50  mValueText((IntP
3370: 74 72 29 61 72 67 69 6e 74 5b 6e 5d 29 3b 0d 0a  tr)argint[n]);..
3380: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3390: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  k;..          ca
33a0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
33b0: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20  Blob:..         
33c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33d0: 20 20 20 20 69 6e 74 20 78 3b 0d 0a 20 20 20 20      int x;..    
33e0: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
33f0: 20 62 6c 6f 62 3b 0d 0a 0d 0a 20 20 20 20 20 20   blob;....      
3400: 20 20 20 20 20 20 20 20 78 20 3d 20 28 69 6e 74          x = (int
3410: 29 5f 62 61 73 65 2e 47 65 74 50 61 72 61 6d 56  )_base.GetParamV
3420: 61 6c 75 65 42 79 74 65 73 28 28 49 6e 74 50 74  alueBytes((IntPt
3430: 72 29 61 72 67 69 6e 74 5b 6e 5d 2c 20 30 2c 20  r)argint[n], 0, 
3440: 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20  null, 0, 0);..  
3450: 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62              blob
3460: 20 3d 20 6e 65 77 20 62 79 74 65 5b 78 5d 3b 0d   = new byte[x];.
3470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
3480: 62 61 73 65 2e 47 65 74 50 61 72 61 6d 56 61 6c  base.GetParamVal
3490: 75 65 42 79 74 65 73 28 28 49 6e 74 50 74 72 29  ueBytes((IntPtr)
34a0: 61 72 67 69 6e 74 5b 6e 5d 2c 20 30 2c 20 62 6c  argint[n], 0, bl
34b0: 6f 62 2c 20 30 2c 20 78 29 3b 0d 0a 20 20 20 20  ob, 0, x);..    
34c0: 20 20 20 20 20 20 20 20 20 20 70 61 72 6d 73 5b            parms[
34d0: 6e 5d 20 3d 20 62 6c 6f 62 3b 0d 0a 20 20 20 20  n] = blob;..    
34e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
34f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
3500: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
3510: 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
3520: 69 6d 65 3a 20 2f 2f 20 4e 65 76 65 72 20 68 61  ime: // Never ha
3530: 70 70 65 6e 73 20 68 65 72 65 20 62 75 74 20 77  ppens here but w
3540: 68 61 74 20 74 68 65 20 68 65 63 6b 2c 20 6d 61  hat the heck, ma
3550: 79 62 65 20 69 74 20 77 69 6c 6c 20 6f 6e 65 20  ybe it will one 
3560: 64 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  day...          
3570: 20 20 70 61 72 6d 73 5b 6e 5d 20 3d 20 5f 62 61    parms[n] = _ba
3580: 73 65 2e 54 6f 44 61 74 65 54 69 6d 65 28 5f 62  se.ToDateTime(_b
3590: 61 73 65 2e 47 65 74 50 61 72 61 6d 56 61 6c 75  ase.GetParamValu
35a0: 65 54 65 78 74 28 28 49 6e 74 50 74 72 29 61 72  eText((IntPtr)ar
35b0: 67 69 6e 74 5b 6e 5d 29 29 3b 0d 0a 20 20 20 20  gint[n]));..    
35c0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
35d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35e0: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
35f0: 20 70 61 72 6d 73 3b 0d 0a 20 20 20 20 7d 0d 0a   parms;..    }..
3600: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3610: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 61 6b  ry>..    /// Tak
3620: 65 73 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  es the return va
3630: 6c 75 65 20 66 72 6f 6d 20 49 6e 76 6f 6b 65 28  lue from Invoke(
3640: 29 20 61 6e 64 20 46 69 6e 61 6c 28 29 20 61 6e  ) and Final() an
3650: 64 20 66 69 67 75 72 65 73 20 6f 75 74 20 68 6f  d figures out ho
3660: 77 20 74 6f 20 72 65 74 75 72 6e 20 69 74 20 74  w to return it t
3670: 6f 20 53 51 4c 69 74 65 27 73 20 63 6f 6e 74 65  o SQLite's conte
3680: 78 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  xt...    /// </s
3690: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
36a0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
36b0: 6e 74 65 78 74 22 3e 54 68 65 20 63 6f 6e 74 65  ntext">The conte
36c0: 78 74 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  xt the return va
36d0: 6c 75 65 20 61 70 70 6c 69 65 73 20 74 6f 3c 2f  lue applies to</
36e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
36f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74  <param name="ret
3700: 75 72 6e 56 61 6c 75 65 22 3e 54 68 65 20 70 61  urnValue">The pa
3710: 72 61 6d 65 74 65 72 20 74 6f 20 72 65 74 75 72  rameter to retur
3720: 6e 20 74 6f 20 53 51 4c 69 74 65 3c 2f 70 61 72  n to SQLite</par
3730: 61 6d 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  am>..    private
3740: 20 76 6f 69 64 20 53 65 74 52 65 74 75 72 6e 56   void SetReturnV
3750: 61 6c 75 65 28 49 6e 74 50 74 72 20 63 6f 6e 74  alue(IntPtr cont
3760: 65 78 74 2c 20 6f 62 6a 65 63 74 20 72 65 74 75  ext, object retu
3770: 72 6e 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  rnValue)..    {.
3780: 0a 20 20 20 20 20 20 69 66 20 28 72 65 74 75 72  .      if (retur
3790: 6e 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 20 7c  nValue == null |
37a0: 7c 20 72 65 74 75 72 6e 56 61 6c 75 65 20 3d 3d  | returnValue ==
37b0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29 0d 0a   DBNull.Value)..
37c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37d0: 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 4e 75 6c   _base.ReturnNul
37e0: 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  l(context);..   
37f0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20       return;..  
3800: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 54      }....      T
3810: 79 70 65 20 74 20 3d 20 72 65 74 75 72 6e 56 61  ype t = returnVa
3820: 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  lue.GetType();..
3830: 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
3840: 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 29  ypeof(DateTime))
3850: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3860: 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 54     _base.ReturnT
3870: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 5f 62 61  ext(context, _ba
3880: 73 65 2e 54 6f 53 74 72 69 6e 67 28 28 44 61 74  se.ToString((Dat
3890: 65 54 69 6d 65 29 72 65 74 75 72 6e 56 61 6c 75  eTime)returnValu
38a0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  e));..        re
38b0: 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  turn;..      }..
38c0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
38d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 45 78 63    {..        Exc
38e0: 65 70 74 69 6f 6e 20 72 20 3d 20 72 65 74 75 72  eption r = retur
38f0: 6e 56 61 6c 75 65 20 61 73 20 45 78 63 65 70 74  nValue as Except
3900: 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
3910: 69 66 20 28 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  if (r != null)..
3920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3930: 20 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72       _base.Retur
3940: 6e 45 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  nError(context, 
3950: 72 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  r.Message);..   
3960: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3980: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74   }....      swit
3990: 63 68 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  ch (SQLiteConver
39a0: 74 2e 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79  t.TypeToAffinity
39b0: 28 74 2c 20 5f 66 6c 61 67 73 29 29 0d 0a 20 20  (t, _flags))..  
39c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
39d0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
39e0: 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20  .Null:..        
39f0: 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 4e 75    _base.ReturnNu
3a00: 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  ll(context);..  
3a10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
3a20: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
3a30: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
3a40: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 62 61  :..          _ba
3a50: 73 65 2e 52 65 74 75 72 6e 49 6e 74 36 34 28 63  se.ReturnInt64(c
3a60: 6f 6e 74 65 78 74 2c 20 43 6f 6e 76 65 72 74 2e  ontext, Convert.
3a70: 54 6f 49 6e 74 36 34 28 72 65 74 75 72 6e 56 61  ToInt64(returnVa
3a80: 6c 75 65 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  lue, CultureInfo
3a90: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29  .CurrentCulture)
3aa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
3ab0: 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 63  turn;..        c
3ac0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
3ad0: 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
3ae0: 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e      _base.Return
3af0: 44 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  Double(context, 
3b00: 43 6f 6e 76 65 72 74 2e 54 6f 44 6f 75 62 6c 65  Convert.ToDouble
3b10: 28 72 65 74 75 72 6e 56 61 6c 75 65 2c 20 43 75  (returnValue, Cu
3b20: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
3b30: 74 43 75 6c 74 75 72 65 29 29 3b 0d 0a 20 20 20  tCulture));..   
3b40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3b50: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
3b60: 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d  eAffinity.Text:.
3b70: 0a 20 20 20 20 20 20 20 20 20 20 5f 62 61 73 65  .          _base
3b80: 2e 52 65 74 75 72 6e 54 65 78 74 28 63 6f 6e 74  .ReturnText(cont
3b90: 65 78 74 2c 20 72 65 74 75 72 6e 56 61 6c 75 65  ext, returnValue
3ba0: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
3bb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
3bc0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
3bd0: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
3be0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 62 61  :..          _ba
3bf0: 73 65 2e 52 65 74 75 72 6e 42 6c 6f 62 28 63 6f  se.ReturnBlob(co
3c00: 6e 74 65 78 74 2c 20 28 62 79 74 65 5b 5d 29 72  ntext, (byte[])r
3c10: 65 74 75 72 6e 56 61 6c 75 65 29 3b 0d 0a 20 20  eturnValue);..  
3c20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
3c30: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3c40: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3c50: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e  ary>..    /// In
3c60: 74 65 72 6e 61 6c 20 73 63 61 6c 61 72 20 63 61  ternal scalar ca
3c70: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2c  llback function,
3c80: 20 77 68 69 63 68 20 77 72 61 70 73 20 74 68 65   which wraps the
3c90: 20 72 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69   raw context poi
3ca0: 6e 74 65 72 20 61 6e 64 20 63 61 6c 6c 73 20 74  nter and calls t
3cb0: 68 65 20 76 69 72 74 75 61 6c 20 49 6e 76 6f 6b  he virtual Invok
3cc0: 65 28 29 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  e() method...   
3cd0: 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 4d 75   /// WARNING: Mu
3ce0: 73 74 20 6e 6f 74 20 74 68 72 6f 77 20 65 78 63  st not throw exc
3cf0: 65 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f  eptions...    //
3d00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3d10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3d20: 65 3d 22 63 6f 6e 74 65 78 74 22 3e 41 20 72 61  e="context">A ra
3d30: 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  w context pointe
3d40: 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  r</param>..    /
3d50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3d60: 6e 41 72 67 73 22 3e 4e 75 6d 62 65 72 20 6f 66  nArgs">Number of
3d70: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
3d80: 64 20 69 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  d in</param>..  
3d90: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3da0: 65 3d 22 61 72 67 73 70 74 72 22 3e 41 20 70 6f  e="argsptr">A po
3db0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61 72 72  inter to the arr
3dc0: 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 3c  ay of arguments<
3dd0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
3de0: 65 72 6e 61 6c 20 76 6f 69 64 20 53 63 61 6c 61  ernal void Scala
3df0: 72 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50 74 72  rCallback(IntPtr
3e00: 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 6e 41   context, int nA
3e10: 72 67 73 2c 20 49 6e 74 50 74 72 20 61 72 67 73  rgs, IntPtr args
3e20: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
3e30: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
3e40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3e50: 20 5f 63 6f 6e 74 65 78 74 20 3d 20 63 6f 6e 74   _context = cont
3e60: 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
3e70: 20 20 53 65 74 52 65 74 75 72 6e 56 61 6c 75 65    SetReturnValue
3e80: 28 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  (context,..     
3e90: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
3ea0: 65 28 43 6f 6e 76 65 72 74 50 61 72 61 6d 73 28  e(ConvertParams(
3eb0: 6e 41 72 67 73 2c 20 61 72 67 73 70 74 72 29 29  nArgs, argsptr))
3ec0: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
3ed0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3ee0: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
3ef0: 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20  ion e) /* NOTE: 
3f00: 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20  Must catch ALL. 
3f10: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
3f20: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3f50: 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
3f60: 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65  .LogCallbackExce
3f70: 70 74 69 6f 6e 73 28 5f 66 6c 61 67 73 29 29 0d  ptions(_flags)).
3f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3f90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3fa0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
3fb0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  g.LogMessage(SQL
3fc0: 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58  iteBase.COR_E_EX
3fd0: 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20  CEPTION,..      
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ff0: 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e    HelperMethods.
4000: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c  StringFormat(Cul
4010: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
4020: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4040: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
4050: 74 68 6f 64 73 2e 45 78 63 65 70 74 69 6f 6e 4d  thods.ExceptionM
4060: 65 73 73 61 67 65 46 6f 72 6d 61 74 2c 0d 0a 20  essageFormat,.. 
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4080: 20 20 20 20 20 20 20 22 49 6e 76 6f 6b 65 22 2c         "Invoke",
4090: 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a   e)); /* throw *
40a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
40b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
40c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
40d0: 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
40e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
40f0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
4100: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
4110: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
4120: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4130: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4140: 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f   /// Internal co
4150: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
4160: 20 66 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68   function, which
4170: 20 77 72 61 70 73 20 75 70 20 74 68 65 20 72 61   wraps up the ra
4180: 77 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  w string pointer
4190: 73 20 61 6e 64 20 65 78 65 63 75 74 65 73 20 74  s and executes t
41a0: 68 65 20 43 6f 6d 70 61 72 65 28 29 20 76 69 72  he Compare() vir
41b0: 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a  tual function...
41c0: 20 20 20 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a      /// WARNING:
41d0: 20 4d 75 73 74 20 6e 6f 74 20 74 68 72 6f 77 20   Must not throw 
41e0: 65 78 63 65 70 74 69 6f 6e 73 2e 0d 0a 20 20 20  exceptions...   
41f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4200: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4210: 6e 61 6d 65 3d 22 70 74 72 22 3e 4e 6f 74 20 75  name="ptr">Not u
4220: 73 65 64 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  sed</param>..   
4230: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4240: 3d 22 6c 65 6e 31 22 3e 4c 65 6e 67 74 68 20 6f  ="len1">Length o
4250: 66 20 74 68 65 20 73 74 72 69 6e 67 20 70 76 31  f the string pv1
4260: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4270: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
4280: 74 72 31 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20  tr1">Pointer to 
4290: 74 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67  the first string
42a0: 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72   to compare</par
42b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
42c0: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 32 22 3e  ram name="len2">
42d0: 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
42e0: 72 69 6e 67 20 70 76 32 3c 2f 70 61 72 61 6d 3e  ring pv2</param>
42f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4300: 20 6e 61 6d 65 3d 22 70 74 72 32 22 3e 50 6f 69   name="ptr2">Poi
4310: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 65 63 6f  nter to the seco
4320: 6e 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d  nd string to com
4330: 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  pare</param>..  
4340: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
4350: 65 74 75 72 6e 73 20 2d 31 20 69 66 20 74 68 65  eturns -1 if the
4360: 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 69 73   first string is
4370: 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 73   less than the s
4380: 65 63 6f 6e 64 2e 20 20 30 20 69 66 20 74 68 65  econd.  0 if the
4390: 79 20 61 72 65 20 65 71 75 61 6c 2c 20 6f 72 20  y are equal, or 
43a0: 31 20 69 66 20 74 68 65 20 66 69 72 73 74 20 73  1 if the first s
43b0: 74 72 69 6e 67 20 69 73 20 67 72 65 61 74 65 72  tring is greater
43c0: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 61 6e 20 74  ..    /// than t
43d0: 68 65 20 73 65 63 6f 6e 64 2e 20 20 52 65 74 75  he second.  Retu
43e0: 72 6e 73 20 30 20 69 66 20 61 6e 20 65 78 63 65  rns 0 if an exce
43f0: 70 74 69 6f 6e 20 69 73 20 63 61 75 67 68 74 2e  ption is caught.
4400: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4410: 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20 43 6f 6d  internal int Com
4420: 70 61 72 65 43 61 6c 6c 62 61 63 6b 28 49 6e 74  pareCallback(Int
4430: 50 74 72 20 70 74 72 2c 20 69 6e 74 20 6c 65 6e  Ptr ptr, int len
4440: 31 2c 20 49 6e 74 50 74 72 20 70 74 72 31 2c 20  1, IntPtr ptr1, 
4450: 69 6e 74 20 6c 65 6e 32 2c 20 49 6e 74 50 74 72  int len2, IntPtr
4460: 20 70 74 72 32 29 0d 0a 20 20 20 20 7b 0d 0a 20   ptr2)..    {.. 
4470: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
4480: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4490: 20 20 20 72 65 74 75 72 6e 20 43 6f 6d 70 61 72     return Compar
44a0: 65 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  e(SQLiteConvert.
44b0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
44c0: 31 2c 20 6c 65 6e 31 29 2c 0d 0a 20 20 20 20 20  1, len1),..     
44d0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
44e0: 65 43 6f 6e 76 65 72 74 2e 55 54 46 38 54 6f 53  eConvert.UTF8ToS
44f0: 74 72 69 6e 67 28 70 74 72 32 2c 20 6c 65 6e 32  tring(ptr2, len2
4500: 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
4510: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4520: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
4530: 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
4540: 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
4550: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
4560: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
4570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4590: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
45a0: 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63  s.LogCallbackExc
45b0: 65 70 74 69 6f 6e 73 28 5f 66 6c 61 67 73 29 29  eptions(_flags))
45c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
45e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
45f0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  og.LogMessage(SQ
4600: 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45  LiteBase.COR_E_E
4610: 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20  XCEPTION,..     
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4630: 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73     HelperMethods
4640: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75  .StringFormat(Cu
4650: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
4660: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
4690: 65 74 68 6f 64 73 2e 45 78 63 65 70 74 69 6f 6e  ethods.Exception
46a0: 4d 65 73 73 61 67 65 46 6f 72 6d 61 74 2c 0d 0a  MessageFormat,..
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 20 20 20 20 20 20 20 20 22 43 6f 6d 70 61 72 65          "Compare
46d0: 22 2c 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77  ", e)); /* throw
46e0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
46f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4700: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4710: 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
4720: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4730: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
4740: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
4750: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4760: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  }....        //.
4770: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
4780: 3a 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64  : This must be d
4790: 6f 6e 65 20 74 6f 20 70 72 65 76 65 6e 74 20 74  one to prevent t
47a0: 68 65 20 63 6f 72 65 20 53 51 4c 69 74 65 20 6c  he core SQLite l
47b0: 69 62 72 61 72 79 20 66 72 6f 6d 0d 0a 20 20 20  ibrary from..   
47c0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
47d0: 69 6e 67 20 6f 75 72 20 28 69 6e 76 61 6c 69 64  ing our (invalid
47e0: 29 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20  ) result...     
47f0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69     //..        i
4800: 66 20 28 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c  f ((_base != nul
4810: 6c 29 20 26 26 20 5f 62 61 73 65 2e 49 73 4f 70  l) && _base.IsOp
4820: 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  en())..         
4830: 20 20 20 5f 62 61 73 65 2e 43 61 6e 63 65 6c 28     _base.Cancel(
4840: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
4850: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  turn 0;..    }..
4860: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4870: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 74  ry>..    /// Int
4880: 65 72 6e 61 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  ernal collating 
4890: 73 65 71 75 65 6e 63 65 20 66 75 6e 63 74 69 6f  sequence functio
48a0: 6e 2c 20 77 68 69 63 68 20 77 72 61 70 73 20 75  n, which wraps u
48b0: 70 20 74 68 65 20 72 61 77 20 73 74 72 69 6e 67  p the raw string
48c0: 20 70 6f 69 6e 74 65 72 73 20 61 6e 64 20 65 78   pointers and ex
48d0: 65 63 75 74 65 73 20 74 68 65 20 43 6f 6d 70 61  ecutes the Compa
48e0: 72 65 28 29 20 76 69 72 74 75 61 6c 20 66 75 6e  re() virtual fun
48f0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
4900: 57 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f  WARNING: Must no
4910: 74 20 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f  t throw exceptio
4920: 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ns...    /// </s
4930: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4940: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74   <param name="pt
4950: 72 22 3e 4e 6f 74 20 75 73 65 64 3c 2f 70 61 72  r">Not used</par
4960: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
4970: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e  ram name="len1">
4980: 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
4990: 72 69 6e 67 20 70 76 31 3c 2f 70 61 72 61 6d 3e  ring pv1</param>
49a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
49b0: 20 6e 61 6d 65 3d 22 70 74 72 31 22 3e 50 6f 69   name="ptr1">Poi
49c0: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
49d0: 74 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70  t string to comp
49e0: 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  are</param>..   
49f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4a00: 3d 22 6c 65 6e 32 22 3e 4c 65 6e 67 74 68 20 6f  ="len2">Length o
4a10: 66 20 74 68 65 20 73 74 72 69 6e 67 20 70 76 32  f the string pv2
4a20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4a30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
4a40: 74 72 32 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20  tr2">Pointer to 
4a50: 74 68 65 20 73 65 63 6f 6e 64 20 73 74 72 69 6e  the second strin
4a60: 67 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61  g to compare</pa
4a70: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
4a80: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 2d  eturns>Returns -
4a90: 31 20 69 66 20 74 68 65 20 66 69 72 73 74 20 73  1 if the first s
4aa0: 74 72 69 6e 67 20 69 73 20 6c 65 73 73 20 74 68  tring is less th
4ab0: 61 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e 20 20  an the second.  
4ac0: 30 20 69 66 20 74 68 65 79 20 61 72 65 20 65 71  0 if they are eq
4ad0: 75 61 6c 2c 20 6f 72 20 31 20 69 66 20 74 68 65  ual, or 1 if the
4ae0: 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 69 73   first string is
4af0: 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 2f 2f   greater..    //
4b00: 2f 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f 6e  / than the secon
4b10: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 20 69 66  d.  Returns 0 if
4b20: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 73   an exception is
4b30: 20 63 61 75 67 68 74 2e 3c 2f 72 65 74 75 72 6e   caught.</return
4b40: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
4b50: 20 69 6e 74 20 43 6f 6d 70 61 72 65 43 61 6c 6c   int CompareCall
4b60: 62 61 63 6b 31 36 28 49 6e 74 50 74 72 20 70 74  back16(IntPtr pt
4b70: 72 2c 20 69 6e 74 20 6c 65 6e 31 2c 20 49 6e 74  r, int len1, Int
4b80: 50 74 72 20 70 74 72 31 2c 20 69 6e 74 20 6c 65  Ptr ptr1, int le
4b90: 6e 32 2c 20 49 6e 74 50 74 72 20 70 74 72 32 29  n2, IntPtr ptr2)
4ba0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4bb0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
4bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4bd0: 75 72 6e 20 43 6f 6d 70 61 72 65 28 53 51 4c 69  urn Compare(SQLi
4be0: 74 65 33 5f 55 54 46 31 36 2e 55 54 46 31 36 54  te3_UTF16.UTF16T
4bf0: 6f 53 74 72 69 6e 67 28 70 74 72 31 2c 20 6c 65  oString(ptr1, le
4c00: 6e 31 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n1),..          
4c10: 20 20 20 20 20 20 53 51 4c 69 74 65 33 5f 55 54        SQLite3_UT
4c20: 46 31 36 2e 55 54 46 31 36 54 6f 53 74 72 69 6e  F16.UTF16ToStrin
4c30: 67 28 70 74 72 32 2c 20 6c 65 6e 32 29 29 3b 20  g(ptr2, len2)); 
4c40: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
4c50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4c60: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
4c70: 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73   e) /* NOTE: Mus
4c80: 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d  t catch ALL. */.
4c90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4ca0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
4cb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4cd0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
4ce0: 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69  gCallbackExcepti
4cf0: 6f 6e 73 28 5f 66 6c 61 67 73 29 29 0d 0a 20 20  ons(_flags))..  
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d20: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
4d30: 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
4d40: 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50  Base.COR_E_EXCEP
4d50: 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20  TION,..         
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
4d70: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
4d80: 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ingFormat(Cultur
4d90: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
4da0: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
4dc0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4dd0: 64 73 2e 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  ds.ExceptionMess
4de0: 61 67 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  ageFormat,..    
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e00: 20 20 20 20 22 43 6f 6d 70 61 72 65 20 28 55 54      "Compare (UT
4e10: 46 31 36 29 22 2c 20 65 29 29 3b 20 2f 2a 20 74  F16)", e)); /* t
4e20: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
4e30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4e40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4e50: 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
4e60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4e80: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
4e90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4ea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4eb0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
4ec0: 4e 4f 54 45 3a 20 54 68 69 73 20 6d 75 73 74 20  NOTE: This must 
4ed0: 62 65 20 64 6f 6e 65 20 74 6f 20 70 72 65 76 65  be done to preve
4ee0: 6e 74 20 74 68 65 20 63 6f 72 65 20 53 51 4c 69  nt the core SQLi
4ef0: 74 65 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 0d  te library from.
4f00: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
4f10: 20 20 75 73 69 6e 67 20 6f 75 72 20 28 69 6e 76    using our (inv
4f20: 61 6c 69 64 29 20 72 65 73 75 6c 74 2e 0d 0a 20  alid) result... 
4f30: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f40: 20 20 20 69 66 20 28 28 5f 62 61 73 65 20 21 3d     if ((_base !=
4f50: 20 6e 75 6c 6c 29 20 26 26 20 5f 62 61 73 65 2e   null) && _base.
4f60: 49 73 4f 70 65 6e 28 29 29 0d 0a 20 20 20 20 20  IsOpen())..     
4f70: 20 20 20 20 20 20 20 5f 62 61 73 65 2e 43 61 6e         _base.Can
4f80: 63 65 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  cel();....      
4f90: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20    return 0;..   
4fa0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
4fb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4fc0: 20 54 68 65 20 69 6e 74 65 72 6e 61 6c 20 61 67   The internal ag
4fd0: 67 72 65 67 61 74 65 20 53 74 65 70 20 66 75 6e  gregate Step fun
4fe0: 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 2c 20  ction callback, 
4ff0: 77 68 69 63 68 20 77 72 61 70 73 20 74 68 65 20  which wraps the 
5000: 72 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e  raw context poin
5010: 74 65 72 20 61 6e 64 20 63 61 6c 6c 73 20 74 68  ter and calls th
5020: 65 20 76 69 72 74 75 61 6c 20 53 74 65 70 28 29  e virtual Step()
5030: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f   method...    //
5040: 2f 20 57 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20  / WARNING: Must 
5050: 6e 6f 74 20 74 68 72 6f 77 20 65 78 63 65 70 74  not throw except
5060: 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ions...    /// <
5070: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5080: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  // <remarks>..  
5090: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
50a0: 69 6f 6e 20 74 61 6b 65 73 20 63 61 72 65 20 6f  ion takes care o
50b0: 66 20 64 6f 69 6e 67 20 74 68 65 20 6c 6f 6f 6b  f doing the look
50c0: 75 70 73 20 61 6e 64 20 67 65 74 74 69 6e 67 20  ups and getting 
50d0: 74 68 65 20 69 6d 70 6f 72 74 61 6e 74 20 69 6e  the important in
50e0: 66 6f 72 6d 61 74 69 6f 6e 20 70 75 74 20 74 6f  formation put to
50f0: 67 65 74 68 65 72 20 74 6f 20 63 61 6c 6c 20 74  gether to call t
5100: 68 65 20 53 74 65 70 28 29 20 66 75 6e 63 74 69  he Step() functi
5110: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 61  on...    /// Tha
5120: 74 20 69 6e 63 6c 75 64 65 73 20 70 75 6c 6c 69  t includes pulli
5130: 6e 67 20 6f 75 74 20 74 68 65 20 75 73 65 72 27  ng out the user'
5140: 73 20 63 6f 6e 74 65 78 74 44 61 74 61 20 61 6e  s contextData an
5150: 64 20 75 70 64 61 74 69 6e 67 20 69 74 20 61 66  d updating it af
5160: 74 65 72 20 74 68 65 20 63 61 6c 6c 20 69 73 20  ter the call is 
5170: 6d 61 64 65 2e 20 20 57 65 20 75 73 65 20 61 20  made.  We use a 
5180: 73 6f 72 74 65 64 20 6c 69 73 74 20 66 6f 72 20  sorted list for 
5190: 74 68 69 73 20 73 6f 0d 0a 20 20 20 20 2f 2f 2f  this so..    ///
51a0: 20 62 69 6e 61 72 79 20 73 65 61 72 63 68 65 73   binary searches
51b0: 20 63 61 6e 20 62 65 20 64 6f 6e 65 20 74 6f 20   can be done to 
51c0: 66 69 6e 64 20 74 68 65 20 64 61 74 61 2e 0d 0a  find the data...
51d0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
51e0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  s>..    /// <par
51f0: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74  am name="context
5200: 22 3e 41 20 72 61 77 20 63 6f 6e 74 65 78 74 20  ">A raw context 
5210: 70 6f 69 6e 74 65 72 3c 2f 70 61 72 61 6d 3e 0d  pointer</param>.
5220: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5230: 6e 61 6d 65 3d 22 6e 41 72 67 73 22 3e 4e 75 6d  name="nArgs">Num
5240: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
5250: 20 70 61 73 73 65 64 20 69 6e 3c 2f 70 61 72 61   passed in</para
5260: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
5270: 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 70 74 72  am name="argsptr
5280: 22 3e 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ">A pointer to t
5290: 68 65 20 61 72 72 61 79 20 6f 66 20 61 72 67 75  he array of argu
52a0: 6d 65 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ments</param>.. 
52b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64     internal void
52c0: 20 53 74 65 70 43 61 6c 6c 62 61 63 6b 28 49 6e   StepCallback(In
52d0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
52e0: 74 20 6e 41 72 67 73 2c 20 49 6e 74 50 74 72 20  t nArgs, IntPtr 
52f0: 61 72 67 73 70 74 72 29 0d 0a 20 20 20 20 7b 0d  argsptr)..    {.
5300: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
5310: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5320: 20 20 20 20 20 41 67 67 72 65 67 61 74 65 44 61       AggregateDa
5330: 74 61 20 64 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d  ta data = null;.
5340: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
5350: 66 20 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c 6c  f (_base != null
5360: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5380: 20 20 49 6e 74 50 74 72 20 6e 41 75 78 20 3d 20    IntPtr nAux = 
5390: 5f 62 61 73 65 2e 41 67 67 72 65 67 61 74 65 43  _base.AggregateC
53a0: 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 29 3b  ontext(context);
53b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
53c0: 20 20 20 20 69 66 20 28 28 5f 63 6f 6e 74 65 78      if ((_contex
53d0: 74 44 61 74 61 4c 69 73 74 20 21 3d 20 6e 75 6c  tDataList != nul
53e0: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
53f0: 20 20 20 20 20 20 20 20 20 20 20 21 5f 63 6f 6e             !_con
5400: 74 65 78 74 44 61 74 61 4c 69 73 74 2e 54 72 79  textDataList.Try
5410: 47 65 74 56 61 6c 75 65 28 6e 41 75 78 2c 20 6f  GetValue(nAux, o
5420: 75 74 20 64 61 74 61 29 29 0d 0a 20 20 20 20 20  ut data))..     
5430: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5450: 20 20 64 61 74 61 20 3d 20 6e 65 77 20 41 67 67    data = new Agg
5460: 72 65 67 61 74 65 44 61 74 61 28 29 3b 0d 0a 20  regateData();.. 
5470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5480: 20 20 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c     _contextDataL
5490: 69 73 74 5b 6e 41 75 78 5d 20 3d 20 64 61 74 61  ist[nAux] = data
54a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
54b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
54c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
54d0: 20 20 20 69 66 20 28 64 61 74 61 20 3d 3d 20 6e     if (data == n
54e0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
54f0: 20 20 20 20 20 20 64 61 74 61 20 3d 20 6e 65 77        data = new
5500: 20 41 67 67 72 65 67 61 74 65 44 61 74 61 28 29   AggregateData()
5510: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5520: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
5530: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5540: 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 20 3d 20       _context = 
5550: 63 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20 20 20  context;..      
5560: 20 20 20 20 20 20 20 20 20 20 53 74 65 70 28 43            Step(C
5570: 6f 6e 76 65 72 74 50 61 72 61 6d 73 28 6e 41 72  onvertParams(nAr
5580: 67 73 2c 20 61 72 67 73 70 74 72 29 2c 0d 0a 20  gs, argsptr),.. 
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55a0: 20 20 20 64 61 74 61 2e 5f 63 6f 75 6e 74 2c 20     data._count, 
55b0: 72 65 66 20 64 61 74 61 2e 5f 64 61 74 61 29 3b  ref data._data);
55c0: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
55d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
55e0: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
55f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5610: 20 64 61 74 61 2e 5f 63 6f 75 6e 74 2b 2b 3b 0d   data._count++;.
5620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5630: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5640: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
5650: 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20  ion e) /* NOTE: 
5660: 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20  Must catch ALL. 
5670: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
5680: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
5690: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
56b0: 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
56c0: 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65  .LogCallbackExce
56d0: 70 74 69 6f 6e 73 28 5f 66 6c 61 67 73 29 29 0d  ptions(_flags)).
56e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
56f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5700: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
5710: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  g.LogMessage(SQL
5720: 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58  iteBase.COR_E_EX
5730: 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20  CEPTION,..      
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5750: 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e    HelperMethods.
5760: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c  StringFormat(Cul
5770: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
5780: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
5790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57a0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
57b0: 74 68 6f 64 73 2e 45 78 63 65 70 74 69 6f 6e 4d  thods.ExceptionM
57c0: 65 73 73 61 67 65 46 6f 72 6d 61 74 2c 0d 0a 20  essageFormat,.. 
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 20 20 20 20 20 20 20 22 53 74 65 70 22 2c 20 65         "Step", e
57f0: 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
5800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5810: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5820: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
5830: 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
5840: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5850: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
5860: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
5870: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
5880: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
5890: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
58a0: 2f 2f 20 41 6e 20 69 6e 74 65 72 6e 61 6c 20 61  // An internal a
58b0: 67 67 72 65 67 61 74 65 20 46 69 6e 61 6c 20 66  ggregate Final f
58c0: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b  unction callback
58d0: 2c 20 77 68 69 63 68 20 77 72 61 70 73 20 74 68  , which wraps th
58e0: 65 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  e context pointe
58f0: 72 20 61 6e 64 20 63 61 6c 6c 73 20 74 68 65 20  r and calls the 
5900: 76 69 72 74 75 61 6c 20 46 69 6e 61 6c 28 29 20  virtual Final() 
5910: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
5920: 20 57 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e   WARNING: Must n
5930: 6f 74 20 74 68 72 6f 77 20 65 78 63 65 70 74 69  ot throw excepti
5940: 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ons...    /// </
5950: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5960: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
5970: 6f 6e 74 65 78 74 22 3e 41 20 72 61 77 20 63 6f  ontext">A raw co
5980: 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 3c 2f 70  ntext pointer</p
5990: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
59a0: 6e 61 6c 20 76 6f 69 64 20 46 69 6e 61 6c 43 61  nal void FinalCa
59b0: 6c 6c 62 61 63 6b 28 49 6e 74 50 74 72 20 63 6f  llback(IntPtr co
59c0: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
59d0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
59e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
59f0: 20 20 20 6f 62 6a 65 63 74 20 6f 62 6a 20 3d 20     object obj = 
5a00: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
5a10: 20 20 20 20 20 69 66 20 28 5f 62 61 73 65 20 21       if (_base !
5a20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5a30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5a40: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 6e          IntPtr n
5a50: 20 3d 20 5f 62 61 73 65 2e 41 67 67 72 65 67 61   = _base.Aggrega
5a60: 74 65 43 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78  teContext(contex
5a70: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
5a80: 20 20 20 20 20 41 67 67 72 65 67 61 74 65 44 61       AggregateDa
5a90: 74 61 20 61 67 67 44 61 74 61 3b 0d 0a 0d 0a 20  ta aggData;.... 
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5ab0: 66 20 28 28 5f 63 6f 6e 74 65 78 74 44 61 74 61  f ((_contextData
5ac0: 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 20 26 26  List != null) &&
5ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ae0: 20 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 44 61        _contextDa
5af0: 74 61 4c 69 73 74 2e 54 72 79 47 65 74 56 61 6c  taList.TryGetVal
5b00: 75 65 28 6e 2c 20 6f 75 74 20 61 67 67 44 61 74  ue(n, out aggDat
5b10: 61 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a))..           
5b20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 20              obj 
5b40: 3d 20 61 67 67 44 61 74 61 2e 5f 64 61 74 61 3b  = aggData._data;
5b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b60: 20 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 44 61        _contextDa
5b70: 74 61 4c 69 73 74 2e 52 65 6d 6f 76 65 28 6e 29  taList.Remove(n)
5b80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5b90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5ba0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5bb0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
5bc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5bd0: 20 20 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 20         _context 
5be0: 3d 20 63 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20  = context;..    
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 52              SetR
5c00: 65 74 75 72 6e 56 61 6c 75 65 28 63 6f 6e 74 65  eturnValue(conte
5c10: 78 74 2c 20 46 69 6e 61 6c 28 6f 62 6a 29 29 3b  xt, Final(obj));
5c20: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
5c30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5c40: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
5c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c70: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 64 69 73   IDisposable dis
5c80: 70 20 3d 20 6f 62 6a 20 61 73 20 49 44 69 73 70  p = obj as IDisp
5c90: 6f 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20  osable;..       
5ca0: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
5cb0: 70 20 21 3d 20 6e 75 6c 6c 29 20 64 69 73 70 2e  p != null) disp.
5cc0: 44 69 73 70 6f 73 65 28 29 3b 20 2f 2a 20 74 68  Dispose(); /* th
5cd0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
5ce0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
5cf0: 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
5d00: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
5d10: 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
5d20: 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
5d30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5d40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
5d50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5d60: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
5d70: 4d 65 74 68 6f 64 73 2e 4c 6f 67 43 61 6c 6c 62  Methods.LogCallb
5d80: 61 63 6b 45 78 63 65 70 74 69 6f 6e 73 28 5f 66  ackExceptions(_f
5d90: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
5da0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
5dc0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
5dd0: 61 67 65 28 53 51 4c 69 74 65 42 61 73 65 2e 43  age(SQLiteBase.C
5de0: 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d  OR_E_EXCEPTION,.
5df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e00: 20 20 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d           HelperM
5e10: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
5e20: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
5e30: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
5e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e50: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
5e60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 45 78 63  ativeMethods.Exc
5e70: 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 46 6f 72  eptionMessageFor
5e80: 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
5ea0: 69 6e 61 6c 22 2c 20 65 29 29 3b 20 2f 2a 20 74  inal", e)); /* t
5eb0: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
5ec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5ed0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5ee0: 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
5ef0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5f10: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
5f20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5f30: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
5f40: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5f50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 73 69 6e 67  >..    /// Using
5f60: 20 72 65 66 6c 65 63 74 69 6f 6e 2c 20 65 6e 75   reflection, enu
5f70: 6d 65 72 61 74 65 20 61 6c 6c 20 61 73 73 65 6d  merate all assem
5f80: 62 6c 69 65 73 20 69 6e 20 74 68 65 20 63 75 72  blies in the cur
5f90: 72 65 6e 74 20 61 70 70 64 6f 6d 61 69 6e 20 6c  rent appdomain l
5fa0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 63 6c 61 73 73  ooking for class
5fb0: 65 73 20 74 68 61 74 0d 0a 20 20 20 20 2f 2f 2f  es that..    ///
5fc0: 20 68 61 76 65 20 61 20 53 51 4c 69 74 65 46 75   have a SQLiteFu
5fd0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
5fe0: 61 74 74 72 69 62 75 74 65 2c 20 61 6e 64 20 72  attribute, and r
5ff0: 65 67 69 73 74 65 72 69 6e 67 20 74 68 65 6d 20  egistering them 
6000: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0d 0a 20 20  accordingly...  
6010: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6020: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
6030: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
6040: 0d 0a 20 20 20 20 5b 53 65 63 75 72 69 74 79 2e  ..    [Security.
6050: 50 65 72 6d 69 73 73 69 6f 6e 73 2e 46 69 6c 65  Permissions.File
6060: 49 4f 50 65 72 6d 69 73 73 69 6f 6e 28 53 65 63  IOPermission(Sec
6070: 75 72 69 74 79 2e 50 65 72 6d 69 73 73 69 6f 6e  urity.Permission
6080: 73 2e 53 65 63 75 72 69 74 79 41 63 74 69 6f 6e  s.SecurityAction
6090: 2e 41 73 73 65 72 74 2c 20 41 6c 6c 46 69 6c 65  .Assert, AllFile
60a0: 73 20 3d 20 53 65 63 75 72 69 74 79 2e 50 65 72  s = Security.Per
60b0: 6d 69 73 73 69 6f 6e 73 2e 46 69 6c 65 49 4f 50  missions.FileIOP
60c0: 65 72 6d 69 73 73 69 6f 6e 41 63 63 65 73 73 2e  ermissionAccess.
60d0: 50 61 74 68 44 69 73 63 6f 76 65 72 79 29 5d 0d  PathDiscovery)].
60e0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 73 74 61  .#endif..    sta
60f0: 74 69 63 20 53 51 4c 69 74 65 46 75 6e 63 74 69  tic SQLiteFuncti
6100: 6f 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  on()..    {..   
6110: 20 20 20 5f 72 65 67 69 73 74 65 72 65 64 46 75     _registeredFu
6120: 6e 63 74 69 6f 6e 73 20 3d 20 6e 65 77 20 44 69  nctions = new Di
6130: 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46  ctionary<SQLiteF
6140: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
6150: 2c 20 6f 62 6a 65 63 74 3e 28 29 3b 0d 0a 20 20  , object>();..  
6160: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b      try..      {
6170: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
6180: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
6190: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
61a0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
61b0: 66 20 74 68 65 20 22 4e 6f 5f 53 51 4c 69 74 65  f the "No_SQLite
61c0: 46 75 6e 63 74 69 6f 6e 73 22 20 65 6e 76 69 72  Functions" envir
61d0: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable 
61e0: 69 73 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20  is set,..       
61f0: 20 2f 2f 20 20 20 20 20 20 20 73 6b 69 70 20 61   //       skip a
6200: 6c 6c 20 6f 75 72 20 73 70 65 63 69 61 6c 20 63  ll our special c
6210: 6f 64 65 20 61 6e 64 20 73 69 6d 70 6c 79 20 72  ode and simply r
6220: 65 74 75 72 6e 2e 0d 0a 20 20 20 20 20 20 20 20  eturn...        
6230: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  //..        if (
6240: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6250: 6f 64 73 2e 47 65 74 53 65 74 74 69 6e 67 56 61  ods.GetSettingVa
6260: 6c 75 65 28 22 4e 6f 5f 53 51 4c 69 74 65 46 75  lue("No_SQLiteFu
6270: 6e 63 74 69 6f 6e 73 22 2c 20 6e 75 6c 6c 29 20  nctions", null) 
6280: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
6290: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
62a0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
62b0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 61  ctionAttribute a
62c0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74  t;..        Syst
62d0: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 2e 41 73  em.Reflection.As
62e0: 73 65 6d 62 6c 79 5b 5d 20 61 72 41 73 73 65 6d  sembly[] arAssem
62f0: 62 6c 69 65 73 20 3d 20 53 79 73 74 65 6d 2e 41  blies = System.A
6300: 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74  ppDomain.Current
6310: 44 6f 6d 61 69 6e 2e 47 65 74 41 73 73 65 6d 62  Domain.GetAssemb
6320: 6c 69 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  lies();..       
6330: 20 69 6e 74 20 77 20 3d 20 61 72 41 73 73 65 6d   int w = arAssem
6340: 62 6c 69 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 20  blies.Length;.. 
6350: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 52 65         System.Re
6360: 66 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c  flection.Assembl
6370: 79 4e 61 6d 65 20 73 71 6c 69 74 65 20 3d 20 53  yName sqlite = S
6380: 79 73 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e  ystem.Reflection
6390: 2e 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78 65  .Assembly.GetExe
63a0: 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28 29  cutingAssembly()
63b0: 2e 47 65 74 4e 61 6d 65 28 29 3b 0d 0a 0d 0a 20  .GetName();.... 
63c0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
63d0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 77 3b 20 6e 2b  n = 0; n < w; n+
63e0: 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  +)..        {.. 
63f0: 20 20 20 20 20 20 20 20 20 54 79 70 65 5b 5d 20           Type[] 
6400: 61 72 54 79 70 65 73 3b 0d 0a 20 20 20 20 20 20  arTypes;..      
6410: 20 20 20 20 62 6f 6f 6c 20 66 6f 75 6e 64 20 3d      bool found =
6420: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
6430: 20 20 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63     System.Reflec
6440: 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79 4e 61 6d  tion.AssemblyNam
6450: 65 5b 5d 20 72 65 66 65 72 65 6e 63 65 73 3b 0d  e[] references;.
6460: 0a 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a  .          try..
6470: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6480: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 6e 73 70           // Insp
6490: 65 63 74 20 6f 6e 6c 79 20 61 73 73 65 6d 62 6c  ect only assembl
64a0: 69 65 73 20 74 68 61 74 20 72 65 66 65 72 65 6e  ies that referen
64b0: 63 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20  ce SQLite..     
64c0: 20 20 20 20 20 20 20 72 65 66 65 72 65 6e 63 65         reference
64d0: 73 20 3d 20 61 72 41 73 73 65 6d 62 6c 69 65 73  s = arAssemblies
64e0: 5b 6e 5d 2e 47 65 74 52 65 66 65 72 65 6e 63 65  [n].GetReference
64f0: 64 41 73 73 65 6d 62 6c 69 65 73 28 29 3b 0d 0a  dAssemblies();..
6500: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
6510: 74 20 3d 20 72 65 66 65 72 65 6e 63 65 73 2e 4c  t = references.L
6520: 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20  ength;..        
6530: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 7a 20 3d      for (int z =
6540: 20 30 3b 20 7a 20 3c 20 74 3b 20 7a 2b 2b 29 0d   0; z < t; z++).
6550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6570: 20 28 72 65 66 65 72 65 6e 63 65 73 5b 7a 5d 2e   (references[z].
6580: 4e 61 6d 65 20 3d 3d 20 73 71 6c 69 74 65 2e 4e  Name == sqlite.N
6590: 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ame)..          
65a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
65b0: 20 20 20 20 20 20 20 66 6f 75 6e 64 20 3d 20 74         found = t
65c0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
65d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
65f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6600: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6610: 66 6f 75 6e 64 20 3d 3d 20 66 61 6c 73 65 29 0d  found == false).
6620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
6630: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
6640: 20 20 20 20 20 20 20 20 61 72 54 79 70 65 73 20          arTypes 
6650: 3d 20 61 72 41 73 73 65 6d 62 6c 69 65 73 5b 6e  = arAssemblies[n
6660: 5d 2e 47 65 74 54 79 70 65 73 28 29 3b 0d 0a 20  ].GetTypes();.. 
6670: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6680: 20 20 20 20 20 20 63 61 74 63 68 20 28 52 65 66        catch (Ref
6690: 6c 65 63 74 69 6f 6e 2e 52 65 66 6c 65 63 74 69  lection.Reflecti
66a0: 6f 6e 54 79 70 65 4c 6f 61 64 45 78 63 65 70 74  onTypeLoadExcept
66b0: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
66c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
66d0: 20 61 72 54 79 70 65 73 20 3d 20 65 2e 54 79 70   arTypes = e.Typ
66e0: 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  es;..          }
66f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  ....          in
6700: 74 20 76 20 3d 20 61 72 54 79 70 65 73 2e 4c 65  t v = arTypes.Le
6710: 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20  ngth;..         
6720: 20 66 6f 72 20 28 69 6e 74 20 78 20 3d 20 30 3b   for (int x = 0;
6730: 20 78 20 3c 20 76 3b 20 78 2b 2b 29 0d 0a 20 20   x < v; x++)..  
6740: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6750: 20 20 20 20 20 20 20 69 66 20 28 61 72 54 79 70         if (arTyp
6760: 65 73 5b 78 5d 20 3d 3d 20 6e 75 6c 6c 29 20 63  es[x] == null) c
6770: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
6780: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d          object[]
6790: 20 61 72 41 74 74 20 3d 20 61 72 54 79 70 65 73   arAtt = arTypes
67a0: 5b 78 5d 2e 47 65 74 43 75 73 74 6f 6d 41 74 74  [x].GetCustomAtt
67b0: 72 69 62 75 74 65 73 28 74 79 70 65 6f 66 28 53  ributes(typeof(S
67c0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
67d0: 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 3b  ribute), false);
67e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
67f0: 74 20 75 20 3d 20 61 72 41 74 74 2e 4c 65 6e 67  t u = arAtt.Leng
6800: 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th;..           
6810: 20 66 6f 72 20 28 69 6e 74 20 79 20 3d 20 30 3b   for (int y = 0;
6820: 20 79 20 3c 20 75 3b 20 79 2b 2b 29 0d 0a 20 20   y < u; y++)..  
6830: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6840: 20 20 20 20 20 20 20 20 20 20 20 61 74 20 3d 20             at = 
6850: 61 72 41 74 74 5b 79 5d 20 61 73 20 53 51 4c 69  arAtt[y] as SQLi
6860: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
6870: 75 74 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ute;..          
6880: 20 20 20 20 69 66 20 28 61 74 20 21 3d 20 6e 75      if (at != nu
6890: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
68a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
68b0: 20 20 20 20 20 20 61 74 2e 49 6e 73 74 61 6e 63        at.Instanc
68c0: 65 54 79 70 65 20 3d 20 61 72 54 79 70 65 73 5b  eType = arTypes[
68d0: 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
68e0: 20 20 20 20 20 52 65 70 6c 61 63 65 46 75 6e 63       ReplaceFunc
68f0: 74 69 6f 6e 28 61 74 2c 20 6e 75 6c 6c 29 3b 0d  tion(at, null);.
6900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
6910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6920: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
6930: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
6940: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
6950: 63 61 74 63 68 20 2f 2f 20 53 51 4c 69 74 65 20  catch // SQLite 
6960: 70 72 6f 76 69 64 65 72 20 63 61 6e 20 63 6f 6e  provider can con
6970: 74 69 6e 75 65 20 77 69 74 68 6f 75 74 20 62 65  tinue without be
6980: 69 6e 67 20 61 62 6c 65 20 74 6f 20 66 69 6e 64  ing able to find
6990: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
69a0: 6f 6e 73 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ons..      {..  
69b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
69c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
69d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d 61 6e 75 61  >..    /// Manua
69e0: 6c 20 6d 65 74 68 6f 64 20 6f 66 20 72 65 67 69  l method of regi
69f0: 73 74 65 72 69 6e 67 20 61 20 66 75 6e 63 74 69  stering a functi
6a00: 6f 6e 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75  on.  The type mu
6a10: 73 74 20 73 74 69 6c 6c 20 68 61 76 65 20 74 68  st still have th
6a20: 65 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  e SQLiteFunction
6a30: 41 74 74 72 69 62 75 74 65 73 20 69 6e 20 6f 72  Attributes in or
6a40: 64 65 72 20 74 6f 20 77 6f 72 6b 0d 0a 20 20 20  der to work..   
6a50: 20 2f 2f 2f 20 70 72 6f 70 65 72 6c 79 2c 20 62   /// properly, b
6a60: 75 74 20 74 68 69 73 20 69 73 20 61 20 77 6f 72  ut this is a wor
6a70: 6b 61 72 6f 75 6e 64 20 66 6f 72 20 74 68 65 20  karound for the 
6a80: 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72  Compact Framewor
6a90: 6b 20 77 68 65 72 65 20 65 6e 75 6d 65 72 61 74  k where enumerat
6aa0: 69 6e 67 20 61 73 73 65 6d 62 6c 69 65 73 20 69  ing assemblies i
6ab0: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
6ac0: 73 75 70 70 6f 72 74 65 64 2e 0d 0a 20 20 20 20  supported...    
6ad0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6ae0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6af0: 61 6d 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79  ame="typ">The ty
6b00: 70 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  pe of the functi
6b10: 6f 6e 20 74 6f 20 72 65 67 69 73 74 65 72 3c 2f  on to register</
6b20: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75 62 6c  param>..    publ
6b30: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 52  ic static void R
6b40: 65 67 69 73 74 65 72 46 75 6e 63 74 69 6f 6e 28  egisterFunction(
6b50: 54 79 70 65 20 74 79 70 29 0d 0a 20 20 20 20 7b  Type typ)..    {
6b60: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
6b70: 5b 5d 20 61 72 41 74 74 20 3d 20 74 79 70 2e 47  [] arAtt = typ.G
6b80: 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74  etCustomAttribut
6b90: 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
6ba0: 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 46 75   typeof(SQLiteFu
6bb0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  nctionAttribute)
6bc0: 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20  , false);....   
6bd0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 79 20       for (int y 
6be0: 3d 20 30 3b 20 79 20 3c 20 61 72 41 74 74 2e 4c  = 0; y < arAtt.L
6bf0: 65 6e 67 74 68 3b 20 79 2b 2b 29 0d 0a 20 20 20  ength; y++)..   
6c00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6c10: 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69      SQLiteFuncti
6c20: 6f 6e 41 74 74 72 69 62 75 74 65 20 61 74 20 3d  onAttribute at =
6c30: 20 61 72 41 74 74 5b 79 5d 20 61 73 20 53 51 4c   arAtt[y] as SQL
6c40: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
6c50: 62 75 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  bute;....       
6c60: 20 20 20 20 20 69 66 20 28 61 74 20 3d 3d 20 6e       if (at == n
6c70: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6c80: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
6c90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  ...            R
6ca0: 65 67 69 73 74 65 72 46 75 6e 63 74 69 6f 6e 28  egisterFunction(
6cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6cc0: 20 20 61 74 2e 4e 61 6d 65 2c 20 61 74 2e 41 72    at.Name, at.Ar
6cd0: 67 75 6d 65 6e 74 73 2c 20 61 74 2e 46 75 6e 63  guments, at.Func
6ce0: 54 79 70 65 2c 20 74 79 70 2c 0d 0a 20 20 20 20  Type, typ,..    
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 61 74 2e 43              at.C
6d00: 61 6c 6c 62 61 63 6b 31 2c 20 61 74 2e 43 61 6c  allback1, at.Cal
6d10: 6c 62 61 63 6b 32 29 3b 0d 0a 20 20 20 20 20 20  lback2);..      
6d20: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
6d30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6d40: 0a 20 20 20 20 2f 2f 2f 20 41 6c 74 65 72 6e 61  .    /// Alterna
6d50: 74 69 76 65 20 6d 65 74 68 6f 64 20 6f 66 20 72  tive method of r
6d60: 65 67 69 73 74 65 72 69 6e 67 20 61 20 66 75 6e  egistering a fun
6d70: 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 6d 65 74  ction.  This met
6d80: 68 6f 64 0d 0a 20 20 20 20 2f 2f 2f 20 64 6f 65  hod..    /// doe
6d90: 73 20 6e 6f 74 20 72 65 71 75 69 72 65 20 74 68  s not require th
6da0: 65 20 73 70 65 63 69 66 69 65 64 20 74 79 70 65  e specified type
6db0: 20 74 6f 20 62 65 20 61 6e 6e 6f 74 61 74 65 64   to be annotated
6dc0: 20 77 69 74 68 0d 0a 20 20 20 20 2f 2f 2f 20 3c   with..    /// <
6dd0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
6de0: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
6df0: 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  e" />...    /// 
6e00: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6e10: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6e20: 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  "name">..    ///
6e30: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
6e40: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 67   function to reg
6e50: 69 73 74 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ister...    /// 
6e60: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
6e70: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
6e80: 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a  rgumentCount">..
6e90: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
6ea0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
6eb0: 61 63 63 65 70 74 65 64 20 62 79 20 74 68 65 20  accepted by the 
6ec0: 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  function...    /
6ed0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
6ee0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6ef0: 3d 22 66 75 6e 63 74 69 6f 6e 54 79 70 65 22 3e  ="functionType">
6f00: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 79  ..    /// The ty
6f10: 70 65 20 6f 66 20 53 51 4c 69 74 65 20 66 75 6e  pe of SQLite fun
6f20: 63 74 69 6f 6e 20 62 65 69 6e 67 20 72 65 73 69  ction being resi
6f30: 74 65 72 65 64 20 28 65 2e 67 2e 20 73 63 61 6c  tered (e.g. scal
6f40: 61 72 2c 0d 0a 20 20 20 20 2f 2f 2f 20 61 67 67  ar,..    /// agg
6f50: 72 65 67 61 74 65 2c 20 6f 72 20 63 6f 6c 6c 61  regate, or colla
6f60: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 29 2e 0d  ting sequence)..
6f70: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
6f80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6f90: 6d 20 6e 61 6d 65 3d 22 69 6e 73 74 61 6e 63 65  m name="instance
6fa0: 54 79 70 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Type">..    /// 
6fb0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 54  The <see cref="T
6fc0: 79 70 65 22 20 2f 3e 20 74 68 61 74 20 61 63 74  ype" /> that act
6fd0: 75 61 6c 6c 79 20 69 6d 70 6c 65 6d 65 6e 74 73  ually implements
6fe0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a   the function...
6ff0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 77 69 6c      /// This wil
7000: 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69  l only be used i
7010: 66 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20  f the <paramref 
7020: 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 31 22  name="callback1"
7030: 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e 64   />..    /// and
7040: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
7050: 22 63 61 6c 6c 62 61 63 6b 32 22 20 2f 3e 20 70  "callback2" /> p
7060: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 75  arameters are nu
7070: 6c 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ll...    /// </p
7080: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7090: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c  param name="call
70a0: 62 61 63 6b 31 22 3e 0d 0a 20 20 20 20 2f 2f 2f  back1">..    ///
70b0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
70c0: 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 6f 20  Delegate" /> to 
70d0: 62 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  be used for all 
70e0: 63 61 6c 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a  calls into the..
70f0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
7100: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
7110: 6e 2e 49 6e 76 6f 6b 65 22 20 2f 3e 2c 0d 0a 20  n.Invoke" />,.. 
7120: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
7130: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
7140: 2e 53 74 65 70 22 20 2f 3e 2c 0d 0a 20 20 20 20  .Step" />,..    
7150: 2f 2f 2f 20 61 6e 64 20 3c 73 65 65 20 63 72 65  /// and <see cre
7160: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
7170: 6e 2e 43 6f 6d 70 61 72 65 22 20 2f 3e 20 76 69  n.Compare" /> vi
7180: 72 74 75 61 6c 20 6d 65 74 68 6f 64 73 2e 0d 0a  rtual methods...
7190: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
71a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
71b0: 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 32   name="callback2
71c0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
71d0: 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67  <see cref="Deleg
71e0: 61 74 65 22 20 2f 3e 20 74 6f 20 62 65 20 75 73  ate" /> to be us
71f0: 65 64 20 66 6f 72 20 61 6c 6c 20 63 61 6c 6c 73  ed for all calls
7200: 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 2f   into the..    /
7210: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
7220: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 46 69 6e  LiteFunction.Fin
7230: 61 6c 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 6d  al" /> virtual m
7240: 65 74 68 6f 64 2e 20 20 54 68 69 73 0d 0a 20 20  ethod.  This..  
7250: 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 20    /// parameter 
7260: 69 73 20 6f 6e 6c 79 20 6e 65 63 65 73 73 61 72  is only necessar
7270: 79 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 20  y for aggregate 
7280: 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  functions...    
7290: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
72a0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
72b0: 76 6f 69 64 20 52 65 67 69 73 74 65 72 46 75 6e  void RegisterFun
72c0: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
72d0: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
72e0: 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65        int argume
72f0: 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  ntCount,..      
7300: 20 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 20 66    FunctionType f
7310: 75 6e 63 74 69 6f 6e 54 79 70 65 2c 0d 0a 20 20  unctionType,..  
7320: 20 20 20 20 20 20 54 79 70 65 20 69 6e 73 74 61        Type insta
7330: 6e 63 65 54 79 70 65 2c 0d 0a 20 20 20 20 20 20  nceType,..      
7340: 20 20 44 65 6c 65 67 61 74 65 20 63 61 6c 6c 62    Delegate callb
7350: 61 63 6b 31 2c 0d 0a 20 20 20 20 20 20 20 20 44  ack1,..        D
7360: 65 6c 65 67 61 74 65 20 63 61 6c 6c 62 61 63 6b  elegate callback
7370: 32 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  2..        )..  
7380: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c    {..        SQL
7390: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
73a0: 62 75 74 65 20 61 74 20 3d 20 6e 65 77 20 53 51  bute at = new SQ
73b0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
73c0: 69 62 75 74 65 28 0d 0a 20 20 20 20 20 20 20 20  ibute(..        
73d0: 20 20 20 20 6e 61 6d 65 2c 20 61 72 67 75 6d 65      name, argume
73e0: 6e 74 43 6f 75 6e 74 2c 20 66 75 6e 63 74 69 6f  ntCount, functio
73f0: 6e 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  nType);....     
7400: 20 20 20 61 74 2e 49 6e 73 74 61 6e 63 65 54 79     at.InstanceTy
7410: 70 65 20 3d 20 69 6e 73 74 61 6e 63 65 54 79 70  pe = instanceTyp
7420: 65 3b 0d 0a 20 20 20 20 20 20 20 20 61 74 2e 43  e;..        at.C
7430: 61 6c 6c 62 61 63 6b 31 20 3d 20 63 61 6c 6c 62  allback1 = callb
7440: 61 63 6b 31 3b 0d 0a 20 20 20 20 20 20 20 20 61  ack1;..        a
7450: 74 2e 43 61 6c 6c 62 61 63 6b 32 20 3d 20 63 61  t.Callback2 = ca
7460: 6c 6c 62 61 63 6b 32 3b 0d 0a 0d 0a 20 20 20 20  llback2;....    
7470: 20 20 20 20 52 65 70 6c 61 63 65 46 75 6e 63 74      ReplaceFunct
7480: 69 6f 6e 28 61 74 2c 20 6e 75 6c 6c 29 3b 0d 0a  ion(at, null);..
7490: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
74a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
74b0: 2f 2f 2f 20 52 65 70 6c 61 63 65 73 20 61 20 72  /// Replaces a r
74c0: 65 67 69 73 74 65 72 65 64 20 66 75 6e 63 74 69  egistered functi
74d0: 6f 6e 2c 20 64 69 73 70 6f 73 69 6e 67 20 6f 66  on, disposing of
74e0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
74f0: 28 6f 6c 64 29 0d 0a 20 20 20 20 2f 2f 2f 20 76  (old)..    /// v
7500: 61 6c 75 65 20 69 66 20 6e 65 63 65 73 73 61 72  alue if necessar
7510: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  y...    /// </su
7520: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7530: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 74 22  <param name="at"
7540: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 61  >..    /// The a
7550: 74 74 72 69 62 75 74 65 20 74 68 61 74 20 64 65  ttribute that de
7560: 73 63 72 69 62 65 73 20 74 68 65 20 66 75 6e 63  scribes the func
7570: 74 69 6f 6e 20 74 6f 20 72 65 70 6c 61 63 65 2e  tion to replace.
7580: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
7590: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
75a0: 61 6d 20 6e 61 6d 65 3d 22 6e 65 77 56 61 6c 75  am name="newValu
75b0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
75c0: 20 6e 65 77 20 76 61 6c 75 65 20 74 6f 20 75 73   new value to us
75d0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
75e0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
75f0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
7600: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 6e 20   Non-zero if an 
7610: 65 78 69 73 74 69 6e 67 20 72 65 67 69 73 74 65  existing registe
7620: 72 65 64 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  red function was
7630: 20 72 65 70 6c 61 63 65 64 3b 20 6f 74 68 65 72   replaced; other
7640: 77 69 73 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 7a  wise,..    /// z
7650: 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ero...    /// </
7660: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
7670: 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
7680: 6c 20 52 65 70 6c 61 63 65 46 75 6e 63 74 69 6f  l ReplaceFunctio
7690: 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n(..        SQLi
76a0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
76b0: 75 74 65 20 61 74 2c 0d 0a 20 20 20 20 20 20 20  ute at,..       
76c0: 20 6f 62 6a 65 63 74 20 6e 65 77 56 61 6c 75 65   object newValue
76d0: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
76e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
76f0: 63 74 20 6f 6c 64 56 61 6c 75 65 3b 0d 0a 0d 0a  ct oldValue;....
7700: 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 65 67          if (_reg
7710: 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f 6e 73  isteredFunctions
7720: 2e 54 72 79 47 65 74 56 61 6c 75 65 28 61 74 2c  .TryGetValue(at,
7730: 20 6f 75 74 20 6f 6c 64 56 61 6c 75 65 29 29 0d   out oldValue)).
7740: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7750: 20 20 20 20 20 20 20 20 49 44 69 73 70 6f 73 61          IDisposa
7760: 62 6c 65 20 64 69 73 70 6f 73 61 62 6c 65 20 3d  ble disposable =
7770: 20 6f 6c 64 56 61 6c 75 65 20 61 73 20 49 44 69   oldValue as IDi
7780: 73 70 6f 73 61 62 6c 65 3b 0d 0a 0d 0a 20 20 20  sposable;....   
7790: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
77a0: 70 6f 73 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29  posable != null)
77b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
77c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
77d0: 20 64 69 73 70 6f 73 61 62 6c 65 2e 44 69 73 70   disposable.Disp
77e0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
77f0: 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 61 62          disposab
7800: 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  le = null;..    
7810: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7820: 20 20 20 20 20 20 20 20 20 5f 72 65 67 69 73 74           _regist
7830: 65 72 65 64 46 75 6e 63 74 69 6f 6e 73 5b 61 74  eredFunctions[at
7840: 5d 20 3d 20 6e 65 77 56 61 6c 75 65 3b 0d 0a 20  ] = newValue;.. 
7850: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7860: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
7870: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
7880: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7890: 20 20 20 20 20 20 20 20 20 5f 72 65 67 69 73 74           _regist
78a0: 65 72 65 64 46 75 6e 63 74 69 6f 6e 73 2e 41 64  eredFunctions.Ad
78b0: 64 28 61 74 2c 20 6e 65 77 56 61 6c 75 65 29 3b  d(at, newValue);
78c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
78d0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
78e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
78f0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
7900: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61  y>..    /// Crea
7910: 74 65 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d  tes a <see cref=
7920: 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22  "SQLiteFunction"
7930: 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20 62 61 73   /> instance bas
7940: 65 64 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66  ed on the specif
7950: 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65  ied..    /// <se
7960: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
7970: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
7980: 20 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f   />...    /// </
7990: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
79a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
79b0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
79c0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
79d0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
79e0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
79f0: 74 65 22 20 2f 3e 20 63 6f 6e 74 61 69 6e 69 6e  te" /> containin
7a00: 67 20 74 68 65 20 6d 65 74 61 64 61 74 61 20 61  g the metadata a
7a10: 62 6f 75 74 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  bout..    /// th
7a20: 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 63 72  e function to cr
7a30: 65 61 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  eate...    /// <
7a40: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
7a50: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
7a60: 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f  nction">..    //
7a70: 2f 20 54 68 65 20 63 72 65 61 74 65 64 20 66 75  / The created fu
7a80: 6e 63 74 69 6f 6e 20 2d 4f 52 2d 20 6e 75 6c 6c  nction -OR- null
7a90: 20 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   if the function
7aa0: 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 72   could not be cr
7ab0: 65 61 74 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  eated...    /// 
7ac0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
7ad0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
7ae0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
7af0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 61   the function wa
7b00: 73 20 63 72 65 61 74 65 64 3b 20 6f 74 68 65 72  s created; other
7b10: 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20  wise, zero...   
7b20: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
7b30: 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
7b40: 74 69 63 20 62 6f 6f 6c 20 43 72 65 61 74 65 46  tic bool CreateF
7b50: 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
7b60: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
7b70: 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74 69  Attribute functi
7b80: 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20  onAttribute,..  
7b90: 20 20 20 20 20 20 6f 75 74 20 53 51 4c 69 74 65        out SQLite
7ba0: 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  Function functio
7bb0: 6e 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  n..        )..  
7bc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
7bd0: 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
7be0: 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  te == null)..   
7bf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7c00: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e      function = n
7c10: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7c20: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
7c30: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7c40: 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 66 75      else if ((fu
7c50: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e  nctionAttribute.
7c60: 43 61 6c 6c 62 61 63 6b 31 20 21 3d 20 6e 75 6c  Callback1 != nul
7c70: 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  l) ||..         
7c80: 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e         (function
7c90: 41 74 74 72 69 62 75 74 65 2e 43 61 6c 6c 62 61  Attribute.Callba
7ca0: 63 6b 32 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ck2 != null)).. 
7cb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7cc0: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d        function =
7cd0: 20 6e 65 77 20 53 51 4c 69 74 65 44 65 6c 65 67   new SQLiteDeleg
7ce0: 61 74 65 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ateFunction(..  
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75                fu
7d00: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e  nctionAttribute.
7d10: 43 61 6c 6c 62 61 63 6b 31 2c 0d 0a 20 20 20 20  Callback1,..    
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6e 63              func
7d30: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e 43 61  tionAttribute.Ca
7d40: 6c 6c 62 61 63 6b 32 29 3b 0d 0a 0d 0a 20 20 20  llback2);....   
7d50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7d60: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
7d70: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
7d80: 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  f (functionAttri
7d90: 62 75 74 65 2e 49 6e 73 74 61 6e 63 65 54 79 70  bute.InstanceTyp
7da0: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
7db0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7dc0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20 28 53     function = (S
7dd0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 29 41 63  QLiteFunction)Ac
7de0: 74 69 76 61 74 6f 72 2e 43 72 65 61 74 65 49 6e  tivator.CreateIn
7df0: 73 74 61 6e 63 65 28 0d 0a 20 20 20 20 20 20 20  stance(..       
7e00: 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f           functio
7e10: 6e 41 74 74 72 69 62 75 74 65 2e 49 6e 73 74 61  nAttribute.Insta
7e20: 6e 63 65 54 79 70 65 29 3b 0d 0a 0d 0a 20 20 20  nceType);....   
7e30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7e40: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
7e50: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
7e60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7e70: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20         function 
7e80: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7e90: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
7ea0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
7eb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
7ec0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
7ed0: 2f 2f 20 43 61 6c 6c 65 64 20 62 79 20 74 68 65  // Called by the
7ee0: 20 53 51 4c 69 74 65 42 61 73 65 20 64 65 72 69   SQLiteBase deri
7ef0: 76 65 64 20 63 6c 61 73 73 65 73 2c 20 74 68 69  ved classes, thi
7f00: 73 20 6d 65 74 68 6f 64 20 62 69 6e 64 73 20 61  s method binds a
7f10: 6c 6c 20 72 65 67 69 73 74 65 72 65 64 20 28 6b  ll registered (k
7f20: 6e 6f 77 6e 29 20 75 73 65 72 2d 64 65 66 69 6e  nown) user-defin
7f30: 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 20  ed functions to 
7f40: 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  a connection... 
7f50: 20 20 20 2f 2f 2f 20 49 74 20 69 73 20 64 6f 6e     /// It is don
7f60: 65 20 74 68 69 73 20 77 61 79 20 73 6f 20 74 68  e this way so th
7f70: 61 74 20 61 6c 6c 20 75 73 65 72 2d 64 65 66 69  at all user-defi
7f80: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 77 69  ned functions wi
7f90: 6c 6c 20 61 63 63 65 73 73 20 74 68 65 20 64 61  ll access the da
7fa0: 74 61 62 61 73 65 20 75 73 69 6e 67 20 74 68 65  tabase using the
7fb0: 20 73 61 6d 65 20 65 6e 63 6f 64 69 6e 67 20 73   same encoding s
7fc0: 63 68 65 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 61  cheme..    /// a
7fd0: 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  s the connection
7fe0: 20 28 55 54 46 2d 38 20 6f 72 20 55 54 46 2d 31   (UTF-8 or UTF-1
7ff0: 36 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  6)...    /// </s
8000: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
8010: 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20   <remarks>..    
8020: 2f 2f 2f 20 54 68 65 20 77 72 61 70 70 65 72 20  /// The wrapper 
8030: 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 69  functions that i
8040: 6e 74 65 72 6f 70 20 77 69 74 68 20 53 51 4c 69  nterop with SQLi
8050: 74 65 20 77 69 6c 6c 20 63 72 65 61 74 65 20 61  te will create a
8060: 20 75 6e 69 71 75 65 20 63 6f 6f 6b 69 65 20 76   unique cookie v
8070: 61 6c 75 65 2c 20 77 68 69 63 68 20 69 6e 74 65  alue, which inte
8080: 72 6e 61 6c 6c 79 20 69 73 20 61 20 70 6f 69 6e  rnally is a poin
8090: 74 65 72 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20  ter to..    /// 
80a0: 61 6c 6c 20 74 68 65 20 77 72 61 70 70 65 64 20  all the wrapped 
80b0: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
80c0: 6e 73 2e 20 20 54 68 65 20 69 6e 74 65 72 6f 70  ns.  The interop
80d0: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 69   function uses i
80e0: 74 20 74 6f 20 6d 61 70 20 43 44 65 63 6c 20 63  t to map CDecl c
80f0: 61 6c 6c 62 61 63 6b 73 20 74 6f 20 53 74 64 43  allbacks to StdC
8100: 61 6c 6c 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a  all callbacks...
8110: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
8120: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  s>..    /// <par
8130: 61 6d 20 6e 61 6d 65 3d 22 73 71 6c 62 61 73 65  am name="sqlbase
8140: 22 3e 54 68 65 20 62 61 73 65 20 6f 62 6a 65 63  ">The base objec
8150: 74 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 66  t on which the f
8160: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 74 6f 20  unctions are to 
8170: 62 69 6e 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  bind.</param>.. 
8180: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
8190: 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66  me="flags">The f
81a0: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
81b0: 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
81c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
81d0: 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  t.</param>..    
81e0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
81f0: 75 72 6e 73 20 61 20 6c 6f 67 69 63 61 6c 20 6c  urns a logical l
8200: 69 73 74 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73  ist of functions
8210: 20 77 68 69 63 68 20 74 68 65 20 63 6f 6e 6e 65   which the conne
8220: 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 72 65 74  ction should ret
8230: 61 69 6e 20 75 6e 74 69 6c 20 69 74 20 69 73 20  ain until it is 
8240: 63 6c 6f 73 65 64 2e 3c 2f 72 65 74 75 72 6e 73  closed.</returns
8250: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
8260: 73 74 61 74 69 63 20 49 44 69 63 74 69 6f 6e 61  static IDictiona
8270: 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ry<SQLiteFunctio
8280: 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69  nAttribute, SQLi
8290: 74 65 46 75 6e 63 74 69 6f 6e 3e 20 42 69 6e 64  teFunction> Bind
82a0: 46 75 6e 63 74 69 6f 6e 73 28 0d 0a 20 20 20 20  Functions(..    
82b0: 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73      SQLiteBase s
82c0: 71 6c 62 61 73 65 2c 0d 0a 20 20 20 20 20 20 20  qlbase,..       
82d0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
82e0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
82f0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
8300: 20 20 20 20 20 20 20 20 49 44 69 63 74 69 6f 6e          IDiction
8310: 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ary<SQLiteFuncti
8320: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c  onAttribute, SQL
8330: 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 6c 46 75  iteFunction> lFu
8340: 6e 63 74 69 6f 6e 73 20 3d 0d 0a 20 20 20 20 20  nctions =..     
8350: 20 20 20 20 20 20 20 6e 65 77 20 44 69 63 74 69         new Dicti
8360: 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63  onary<SQLiteFunc
8370: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53  tionAttribute, S
8380: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29  QLiteFunction>()
8390: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ;....        for
83a0: 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65 50 61  each (KeyValuePa
83b0: 69 72 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ir<SQLiteFunctio
83c0: 6e 41 74 74 72 69 62 75 74 65 2c 20 6f 62 6a 65  nAttribute, obje
83d0: 63 74 3e 20 70 61 69 72 0d 0a 20 20 20 20 20 20  ct> pair..      
83e0: 20 20 20 20 20 20 20 20 20 20 69 6e 20 5f 72 65            in _re
83f0: 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f 6e  gisteredFunction
8400: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
8410: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
8420: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
8430: 74 65 20 70 72 20 3d 20 70 61 69 72 2e 4b 65 79  te pr = pair.Key
8440: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8450: 20 69 66 20 28 70 72 20 3d 3d 20 6e 75 6c 6c 29   if (pr == null)
8460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8470: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
8480: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
8490: 65 46 75 6e 63 74 69 6f 6e 20 66 3b 0d 0a 0d 0a  eFunction f;....
84a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
84b0: 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 70  CreateFunction(p
84c0: 72 2c 20 6f 75 74 20 66 29 29 0d 0a 20 20 20 20  r, out f))..    
84d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
84e0: 20 20 20 20 20 20 20 20 20 20 20 42 69 6e 64 46             BindF
84f0: 75 6e 63 74 69 6f 6e 28 73 71 6c 62 61 73 65 2c  unction(sqlbase,
8500: 20 70 72 2c 20 66 2c 20 66 6c 61 67 73 29 3b 0d   pr, f, flags);.
8510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8520: 20 6c 46 75 6e 63 74 69 6f 6e 73 5b 70 72 5d 20   lFunctions[pr] 
8530: 3d 20 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = f;..          
8540: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8550: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
8560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8570: 20 20 20 20 20 20 6c 46 75 6e 63 74 69 6f 6e 73        lFunctions
8580: 5b 70 72 5d 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  [pr] = null;..  
8590: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
85a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
85b0: 20 20 72 65 74 75 72 6e 20 6c 46 75 6e 63 74 69    return lFuncti
85c0: 6f 6e 73 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ons;..    }.... 
85d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
85e0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 65 64  ..    /// Called
85f0: 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 42 61   by the SQLiteBa
8600: 73 65 20 64 65 72 69 76 65 64 20 63 6c 61 73 73  se derived class
8610: 65 73 2c 20 74 68 69 73 20 6d 65 74 68 6f 64 20  es, this method 
8620: 75 6e 62 69 6e 64 73 20 61 6c 6c 20 72 65 67 69  unbinds all regi
8630: 73 74 65 72 65 64 20 28 6b 6e 6f 77 6e 29 0d 0a  stered (known)..
8640: 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
8650: 73 20 2d 4f 52 2d 20 61 6c 6c 20 70 72 65 76 69  s -OR- all previ
8660: 6f 75 73 6c 79 20 62 6f 75 6e 64 20 75 73 65 72  ously bound user
8670: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
8680: 6e 73 20 66 72 6f 6d 20 61 20 63 6f 6e 6e 65 63  ns from a connec
8690: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
86a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
86b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
86c0: 73 71 6c 62 61 73 65 22 3e 54 68 65 20 62 61 73  sqlbase">The bas
86d0: 65 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 77 68  e object from wh
86e0: 69 63 68 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ich the function
86f0: 73 20 61 72 65 20 74 6f 20 62 65 20 75 6e 62 6f  s are to be unbo
8700: 75 6e 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  und.</param>..  
8710: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
8720: 65 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c  e="flags">The fl
8730: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
8740: 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63  ith the parent c
8750: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
8760: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
8770: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
8780: 72 65 67 69 73 74 65 72 65 64 22 3e 0d 0a 20 20  registered">..  
8790: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74    /// Non-zero t
87a0: 6f 20 75 6e 62 69 6e 64 20 61 6c 6c 20 72 65 67  o unbind all reg
87b0: 69 73 74 65 72 65 64 20 28 6b 6e 6f 77 6e 29 20  istered (known) 
87c0: 66 75 6e 63 74 69 6f 6e 73 20 2d 4f 52 2d 20 7a  functions -OR- z
87d0: 65 72 6f 20 74 6f 20 75 6e 62 69 6e 64 20 61 6c  ero to unbind al
87e0: 6c 20 66 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20  l functions..   
87f0: 20 2f 2f 2f 20 63 75 72 72 65 6e 74 6c 79 20 62   /// currently b
8800: 6f 75 6e 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e  ound to the conn
8810: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
8820: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
8830: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d  // <returns>Non-
8840: 7a 65 72 6f 20 69 66 20 61 6c 6c 20 74 68 65 20  zero if all the 
8850: 73 70 65 63 69 66 69 65 64 20 75 73 65 72 2d 64  specified user-d
8860: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
8870: 20 77 65 72 65 20 75 6e 62 6f 75 6e 64 2e 3c 2f   were unbound.</
8880: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
8890: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
88a0: 6f 6c 20 55 6e 62 69 6e 64 41 6c 6c 46 75 6e 63  ol UnbindAllFunc
88b0: 74 69 6f 6e 73 28 0d 0a 20 20 20 20 20 20 20 20  tions(..        
88c0: 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 62 61  SQLiteBase sqlba
88d0: 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  se,..        SQL
88e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
88f0: 67 73 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20  gs flags,..     
8900: 20 20 20 62 6f 6f 6c 20 72 65 67 69 73 74 65 72     bool register
8910: 65 64 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ed..        ).. 
8920: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
8930: 20 28 73 71 6c 62 61 73 65 20 3d 3d 20 6e 75 6c   (sqlbase == nul
8940: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8950: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
8960: 0a 20 20 20 20 20 20 20 20 49 44 69 63 74 69 6f  .        IDictio
8970: 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74  nary<SQLiteFunct
8980: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51  ionAttribute, SQ
8990: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 6c 46  LiteFunction> lF
89a0: 75 6e 63 74 69 6f 6e 73 20 3d 0d 0a 20 20 20 20  unctions =..    
89b0: 20 20 20 20 20 20 20 20 73 71 6c 62 61 73 65 2e          sqlbase.
89c0: 46 75 6e 63 74 69 6f 6e 73 3b 0d 0a 0d 0a 20 20  Functions;....  
89d0: 20 20 20 20 20 20 69 66 20 28 6c 46 75 6e 63 74        if (lFunct
89e0: 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
89f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8a00: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
8a10: 20 20 20 20 62 6f 6f 6c 20 72 65 73 75 6c 74 20      bool result 
8a20: 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
8a30: 20 20 20 69 66 20 28 72 65 67 69 73 74 65 72 65     if (registere
8a40: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
8a50: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
8a60: 63 68 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72  ch (KeyValuePair
8a70: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  <SQLiteFunctionA
8a80: 74 74 72 69 62 75 74 65 2c 20 6f 62 6a 65 63 74  ttribute, object
8a90: 3e 20 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20  > pair..        
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 5f              in _
8ab0: 72 65 67 69 73 74 65 72 65 64 46 75 6e 63 74 69  registeredFuncti
8ac0: 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ons)..          
8ad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8ae0: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
8af0: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 70 72 20  ionAttribute pr 
8b00: 3d 20 70 61 69 72 2e 4b 65 79 3b 0d 0a 0d 0a 20  = pair.Key;.... 
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8b20: 66 20 28 70 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  f (pr == null)..
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
8b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8b60: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20   SQLiteFunction 
8b70: 66 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  f;....          
8b80: 20 20 20 20 20 20 69 66 20 28 21 6c 46 75 6e 63        if (!lFunc
8b90: 74 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  tions.TryGetValu
8ba0: 65 28 70 72 2c 20 6f 75 74 20 66 29 20 7c 7c 0d  e(pr, out f) ||.
8bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8bc0: 20 20 20 20 20 28 66 20 3d 3d 20 6e 75 6c 6c 29       (f == null)
8bd0: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
8be0: 20 20 20 20 20 20 20 20 20 21 55 6e 62 69 6e 64           !Unbind
8bf0: 46 75 6e 63 74 69 6f 6e 28 73 71 6c 62 61 73 65  Function(sqlbase
8c00: 2c 20 70 72 2c 20 66 2c 20 66 6c 61 67 73 29 29  , pr, f, flags))
8c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8c30: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
8c40: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
8c50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8c60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8c70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
8c80: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
8cb0: 4f 54 45 3a 20 4e 65 65 64 20 74 6f 20 75 73 65  OTE: Need to use
8cc0: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66   a copy of the f
8cd0: 75 6e 63 74 69 6f 6e 20 64 69 63 74 69 6f 6e 61  unction dictiona
8ce0: 72 79 20 69 6e 20 74 68 69 73 20 6d 65 74 68 6f  ry in this metho
8cf0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  d..            /
8d00: 2f 20 20 20 20 20 20 20 62 65 63 61 75 73 65 20  /       because 
8d10: 74 68 65 20 64 69 63 74 69 6f 6e 61 72 79 20 69  the dictionary i
8d20: 73 20 6d 6f 64 69 66 69 65 64 20 77 69 74 68 69  s modified withi
8d30: 6e 20 74 68 65 20 55 6e 62 69 6e 64 46 75 6e 63  n the UnbindFunc
8d40: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
8d50: 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 74 68 6f    //       metho
8d60: 64 2c 20 77 68 69 63 68 20 69 73 20 63 61 6c 6c  d, which is call
8d70: 65 64 20 69 6e 73 69 64 65 20 74 68 65 20 6c 6f  ed inside the lo
8d80: 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op...           
8d90: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
8da0: 20 6c 46 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65   lFunctions = ne
8db0: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c  w Dictionary<SQL
8dc0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
8dd0: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
8de0: 74 69 6f 6e 3e 28 0d 0a 20 20 20 20 20 20 20 20  tion>(..        
8df0: 20 20 20 20 20 20 20 20 6c 46 75 6e 63 74 69 6f          lFunctio
8e00: 6e 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ns);....        
8e10: 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b 65 79      foreach (Key
8e20: 56 61 6c 75 65 50 61 69 72 3c 53 51 4c 69 74 65  ValuePair<SQLite
8e30: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
8e40: 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  e, SQLiteFunctio
8e50: 6e 3e 20 70 61 69 72 0d 0a 20 20 20 20 20 20 20  n> pair..       
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
8e70: 6c 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20  lFunctions)..   
8e80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8ea0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
8eb0: 75 74 65 20 70 72 20 3d 20 70 61 69 72 2e 4b 65  ute pr = pair.Ke
8ec0: 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
8ed0: 20 20 20 20 20 20 69 66 20 28 70 72 20 3d 3d 20        if (pr == 
8ee0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8ef0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
8f00: 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
8f10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
8f20: 6e 63 74 69 6f 6e 20 66 20 3d 20 70 61 69 72 2e  nction f = pair.
8f30: 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Value;....      
8f40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
8f50: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 20 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e    UnbindFunction
8f80: 28 73 71 6c 62 61 73 65 2c 20 70 72 2c 20 66 2c  (sqlbase, pr, f,
8f90: 20 66 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20   flags))..      
8fa0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 20 2f 2a 20 49 47 4e 4f 52 45 44 20 2a 2f 0d 0a   /* IGNORED */..
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 20 20 20 20 73 71 6c 62 61 73 65 2e 46 75 6e 63      sqlbase.Func
8ff0: 74 69 6f 6e 73 2e 52 65 6d 6f 76 65 28 70 72 29  tions.Remove(pr)
9000: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9010: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
9020: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
9030: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73     result = fals
9060: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
9070: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9080: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
9090: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
90a0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d  n result;..    }
90b0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
90c0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
90d0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62 69 6e  his function bin
90e0: 64 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  ds a user-define
90f0: 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 61 20  d function to a 
9100: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
9110: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
9120: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
9130: 6e 61 6d 65 3d 22 73 71 6c 69 74 65 42 61 73 65  name="sqliteBase
9140: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
9150: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
9160: 65 42 61 73 65 22 20 2f 3e 20 6f 62 6a 65 63 74  eBase" /> object
9170: 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
9180: 61 74 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20  ated with the.. 
9190: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
91a0: 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
91b0: 6f 6e 22 20 2f 3e 20 74 68 61 74 20 74 68 65 20  on" /> that the 
91c0: 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20  function should 
91d0: 62 65 20 62 6f 75 6e 64 20 74 6f 2e 0d 0a 20 20  be bound to...  
91e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
91f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9200: 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74  ame="functionAtt
9210: 72 69 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f  ribute">..    //
9220: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
9230: 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  "SQLiteFunctionA
9240: 74 74 72 69 62 75 74 65 22 2f 3e 20 6f 62 6a 65  ttribute"/> obje
9250: 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74  ct instance cont
9260: 61 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  aining..    /// 
9270: 74 68 65 20 6d 65 74 61 64 61 74 61 20 66 6f 72  the metadata for
9280: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
9290: 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20 20 20   be bound...    
92a0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
92b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
92c0: 65 3d 22 66 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20  e="function">.. 
92d0: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
92e0: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
92f0: 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65 63 74 20 69  tion"/> object i
9300: 6e 73 74 61 6e 63 65 20 74 68 61 74 20 69 6d 70  nstance that imp
9310: 6c 65 6d 65 6e 74 73 20 74 68 65 0d 0a 20 20 20  lements the..   
9320: 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 74 6f   /// function to
9330: 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20 20 20   be bound...    
9340: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
9350: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
9360: 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20  e="flags">..    
9370: 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61 73  /// The flags as
9380: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
9390: 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74  e parent connect
93a0: 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  ion object...   
93b0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
93c0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
93d0: 69 63 20 76 6f 69 64 20 42 69 6e 64 46 75 6e 63  ic void BindFunc
93e0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53  tion(..        S
93f0: 51 4c 69 74 65 42 61 73 65 20 73 71 6c 69 74 65  QLiteBase sqlite
9400: 42 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  Base,..        S
9410: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
9420: 72 69 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41  ribute functionA
9430: 74 74 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20  ttribute,..     
9440: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
9450: 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20  n function,..   
9460: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
9470: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
9480: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
9490: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
94a0: 73 71 6c 69 74 65 42 61 73 65 20 3d 3d 20 6e 75  sqliteBase == nu
94b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
94c0: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
94d0: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
94e0: 28 22 73 71 6c 69 74 65 42 61 73 65 22 29 3b 0d  ("sqliteBase");.
94f0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66  ...        if (f
9500: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
9510: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9520: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9530: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
9540: 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e  eption("function
9550: 41 74 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a  Attribute");....
9560: 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63          if (func
9570: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
9580: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
9590: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
95a0: 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63  lException("func
95b0: 74 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tion");....     
95c0: 20 20 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 20     FunctionType 
95d0: 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 20 66  functionType = f
95e0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
95f0: 2e 46 75 6e 63 54 79 70 65 3b 0d 0a 0d 0a 20 20  .FuncType;....  
9600: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f        function._
9610: 62 61 73 65 20 3d 20 73 71 6c 69 74 65 42 61 73  base = sqliteBas
9620: 65 3b 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63  e;..        func
9630: 74 69 6f 6e 2e 5f 66 6c 61 67 73 20 3d 20 66 6c  tion._flags = fl
9640: 61 67 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ags;....        
9650: 66 75 6e 63 74 69 6f 6e 2e 5f 49 6e 76 6f 6b 65  function._Invoke
9660: 46 75 6e 63 20 3d 20 28 66 75 6e 63 74 69 6f 6e  Func = (function
9670: 54 79 70 65 20 3d 3d 20 46 75 6e 63 74 69 6f 6e  Type == Function
9680: 54 79 70 65 2e 53 63 61 6c 61 72 29 20 3f 0d 0a  Type.Scalar) ?..
9690: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
96a0: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 28 66  SQLiteCallback(f
96b0: 75 6e 63 74 69 6f 6e 2e 53 63 61 6c 61 72 43 61  unction.ScalarCa
96c0: 6c 6c 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d  llback) : null;.
96d0: 0a 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74  ...        funct
96e0: 69 6f 6e 2e 5f 53 74 65 70 46 75 6e 63 20 3d 20  ion._StepFunc = 
96f0: 28 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 3d  (functionType ==
9700: 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 41 67   FunctionType.Ag
9710: 67 72 65 67 61 74 65 29 20 3f 0d 0a 20 20 20 20  gregate) ?..    
9720: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
9730: 74 65 43 61 6c 6c 62 61 63 6b 28 66 75 6e 63 74  teCallback(funct
9740: 69 6f 6e 2e 53 74 65 70 43 61 6c 6c 62 61 63 6b  ion.StepCallback
9750: 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  ) : null;....   
9760: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 46       function._F
9770: 69 6e 61 6c 46 75 6e 63 20 3d 20 28 66 75 6e 63  inalFunc = (func
9780: 74 69 6f 6e 54 79 70 65 20 3d 3d 20 46 75 6e 63  tionType == Func
9790: 74 69 6f 6e 54 79 70 65 2e 41 67 67 72 65 67 61  tionType.Aggrega
97a0: 74 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  te) ?..         
97b0: 20 20 20 6e 65 77 20 53 51 4c 69 74 65 46 69 6e     new SQLiteFin
97c0: 61 6c 43 61 6c 6c 62 61 63 6b 28 66 75 6e 63 74  alCallback(funct
97d0: 69 6f 6e 2e 46 69 6e 61 6c 43 61 6c 6c 62 61 63  ion.FinalCallbac
97e0: 6b 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  k) : null;....  
97f0: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f        function._
9800: 43 6f 6d 70 61 72 65 46 75 6e 63 20 3d 20 28 66  CompareFunc = (f
9810: 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 3d 20 46  unctionType == F
9820: 75 6e 63 74 69 6f 6e 54 79 70 65 2e 43 6f 6c 6c  unctionType.Coll
9830: 61 74 69 6f 6e 29 20 3f 0d 0a 20 20 20 20 20 20  ation) ?..      
9840: 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
9850: 43 6f 6c 6c 61 74 69 6f 6e 28 66 75 6e 63 74 69  Collation(functi
9860: 6f 6e 2e 43 6f 6d 70 61 72 65 43 61 6c 6c 62 61  on.CompareCallba
9870: 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ck) : null;.... 
9880: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e         function.
9890: 5f 43 6f 6d 70 61 72 65 46 75 6e 63 31 36 20 3d  _CompareFunc16 =
98a0: 20 28 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d   (functionType =
98b0: 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 43  = FunctionType.C
98c0: 6f 6c 6c 61 74 69 6f 6e 29 20 3f 0d 0a 20 20 20  ollation) ?..   
98d0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c           new SQL
98e0: 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 66 75 6e  iteCollation(fun
98f0: 63 74 69 6f 6e 2e 43 6f 6d 70 61 72 65 43 61 6c  ction.CompareCal
9900: 6c 62 61 63 6b 31 36 29 20 3a 20 6e 75 6c 6c 3b  lback16) : null;
9910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  ....        stri
9920: 6e 67 20 6e 61 6d 65 20 3d 20 66 75 6e 63 74 69  ng name = functi
9930: 6f 6e 41 74 74 72 69 62 75 74 65 2e 4e 61 6d 65  onAttribute.Name
9940: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
9950: 28 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 21 3d  (functionType !=
9960: 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 43 6f   FunctionType.Co
9970: 6c 6c 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  llation)..      
9980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9990: 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65   bool needCollSe
99a0: 71 20 3d 20 28 66 75 6e 63 74 69 6f 6e 20 69 73  q = (function is
99b0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 45   SQLiteFunctionE
99c0: 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x);....         
99d0: 20 20 20 73 71 6c 69 74 65 42 61 73 65 2e 43 72     sqliteBase.Cr
99e0: 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  eateFunction(.. 
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
9a00: 61 6d 65 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74  ame, functionAtt
9a10: 72 69 62 75 74 65 2e 41 72 67 75 6d 65 6e 74 73  ribute.Arguments
9a20: 2c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 0d 0a  , needCollSeq,..
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a40: 66 75 6e 63 74 69 6f 6e 2e 5f 49 6e 76 6f 6b 65  function._Invoke
9a50: 46 75 6e 63 2c 20 66 75 6e 63 74 69 6f 6e 2e 5f  Func, function._
9a60: 53 74 65 70 46 75 6e 63 2c 0d 0a 20 20 20 20 20  StepFunc,..     
9a70: 20 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74             funct
9a80: 69 6f 6e 2e 5f 46 69 6e 61 6c 46 75 6e 63 2c 20  ion._FinalFunc, 
9a90: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
9aa0: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
9ab0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9ac0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 42 61          sqliteBa
9ad0: 73 65 2e 43 72 65 61 74 65 43 6f 6c 6c 61 74 69  se.CreateCollati
9ae0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
9af0: 20 20 20 20 20 6e 61 6d 65 2c 20 66 75 6e 63 74       name, funct
9b00: 69 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e 63  ion._CompareFunc
9b10: 2c 20 66 75 6e 63 74 69 6f 6e 2e 5f 43 6f 6d 70  , function._Comp
9b20: 61 72 65 46 75 6e 63 31 36 2c 0d 0a 20 20 20 20  areFunc16,..    
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65              true
9b40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
9b50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
9b60: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
9b70: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
9b80: 20 75 6e 62 69 6e 64 73 20 61 20 75 73 65 72 2d   unbinds a user-
9b90: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
9ba0: 73 20 66 72 6f 6d 20 61 20 63 6f 6e 6e 65 63 74  s from a connect
9bb0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
9bc0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9bd0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
9be0: 71 6c 69 74 65 42 61 73 65 22 3e 0d 0a 20 20 20  qliteBase">..   
9bf0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
9c00: 65 66 3d 22 53 51 4c 69 74 65 42 61 73 65 22 20  ef="SQLiteBase" 
9c10: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
9c20: 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ce associated wi
9c30: 74 68 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  th the..    /// 
9c40: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
9c50: 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
9c60: 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f  that the functio
9c70: 6e 20 73 68 6f 75 6c 64 20 62 65 20 62 6f 75 6e  n should be boun
9c80: 64 20 74 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  d to...    /// <
9c90: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
9ca0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
9cb0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
9cc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
9cd0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
9ce0: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
9cf0: 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  e"/> object inst
9d00: 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d  ance containing.
9d10: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74  .    /// the met
9d20: 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66 75  adata for the fu
9d30: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75  nction to be bou
9d40: 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  nd...    /// </p
9d50: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
9d60: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
9d70: 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  tion">..    /// 
9d80: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
9d90: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e  QLiteFunction"/>
9da0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
9db0: 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
9dc0: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75   the..    /// fu
9dd0: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75  nction to be bou
9de0: 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  nd...    /// </p
9df0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
9e00: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
9e10: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
9e20: 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
9e30: 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e  d with the paren
9e40: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  t connection obj
9e50: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
9e60: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
9e70: 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72  <returns>Non-zer
9e80: 6f 20 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f  o if the functio
9e90: 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64 2e 3c 2f  n was unbound.</
9ea0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
9eb0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f  ternal static bo
9ec0: 6f 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f  ol UnbindFunctio
9ed0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n(..        SQLi
9ee0: 74 65 42 61 73 65 20 73 71 6c 69 74 65 42 61 73  teBase sqliteBas
9ef0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
9f00: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
9f10: 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  ute functionAttr
9f20: 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20  ibute,..        
9f30: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
9f40: 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  unction,..      
9f50: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
9f60: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 20 2f 2a  onFlags flags /*
9f70: 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20   NOT USED */..  
9f80: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
9f90: 20 20 20 20 20 20 20 20 69 66 20 28 73 71 6c 69          if (sqli
9fa0: 74 65 42 61 73 65 20 3d 3d 20 6e 75 6c 6c 29 0d  teBase == null).
9fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
9fc0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
9fd0: 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 71  ullException("sq
9fe0: 6c 69 74 65 42 61 73 65 22 29 3b 0d 0a 0d 0a 20  liteBase");.... 
9ff0: 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74         if (funct
a000: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20  ionAttribute == 
a010: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a020: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
a030: 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
a040: 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72  on("functionAttr
a050: 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  ibute");....    
a060: 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e      if (function
a070: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
a080: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
a090: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
a0a0: 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e  eption("function
a0b0: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 46  ");....        F
a0c0: 75 6e 63 74 69 6f 6e 54 79 70 65 20 66 75 6e 63  unctionType func
a0d0: 74 69 6f 6e 54 79 70 65 20 3d 20 66 75 6e 63 74  tionType = funct
a0e0: 69 6f 6e 41 74 74 72 69 62 75 74 65 2e 46 75 6e  ionAttribute.Fun
a0f0: 63 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20  cType;..        
a100: 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 66 75  string name = fu
a110: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e  nctionAttribute.
a120: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
a130: 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 54 79 70   if (functionTyp
a140: 65 20 21 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70  e != FunctionTyp
a150: 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29 0d 0a 20 20  e.Collation)..  
a160: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a170: 20 20 20 20 20 62 6f 6f 6c 20 6e 65 65 64 43 6f       bool needCo
a180: 6c 6c 53 65 71 20 3d 20 28 66 75 6e 63 74 69 6f  llSeq = (functio
a190: 6e 20 69 73 20 53 51 4c 69 74 65 46 75 6e 63 74  n is SQLiteFunct
a1a0: 69 6f 6e 45 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  ionEx);....     
a1b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 71         return sq
a1c0: 6c 69 74 65 42 61 73 65 2e 43 72 65 61 74 65 46  liteBase.CreateF
a1d0: 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
a1e0: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
a1f0: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
a200: 65 2e 41 72 67 75 6d 65 6e 74 73 2c 20 6e 65 65  e.Arguments, nee
a210: 64 43 6f 6c 6c 53 65 71 2c 0d 0a 20 20 20 20 20  dCollSeq,..     
a220: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
a230: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 66 61 6c   null, null, fal
a240: 73 65 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  se) == SQLiteErr
a250: 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20  orCode.Ok;..    
a260: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
a270: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
a280: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
a290: 72 6e 20 73 71 6c 69 74 65 42 61 73 65 2e 43 72  rn sqliteBase.Cr
a2a0: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 0d 0a  eateCollation(..
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2c0: 6e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  name, null, null
a2d0: 2c 20 66 61 6c 73 65 29 20 3d 3d 20 53 51 4c 69  , false) == SQLi
a2e0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
a2f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
a300: 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 2f  }..  }....  ////
a310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 2f  /////////....  /
a360: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
a370: 2f 2f 2f 20 54 68 69 73 20 3c 73 65 65 20 63 72  /// This <see cr
a380: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
a390: 20 74 79 70 65 20 69 73 20 75 73 65 64 20 77 69   type is used wi
a3a0: 74 68 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73  th the..  /// <s
a3b0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44  ee cref="SQLiteD
a3c0: 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e 2e  elegateFunction.
a3d0: 49 6e 76 6f 6b 65 22 20 2f 3e 20 6d 65 74 68 6f  Invoke" /> metho
a3e0: 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d...  /// </summ
a3f0: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ary>..  /// <par
a400: 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 30 22  am name="param0"
a410: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 69 73  >..  /// This is
a420: 20 61 6c 77 61 79 73 20 74 68 65 20 73 74 72 69   always the stri
a430: 6e 67 20 6c 69 74 65 72 61 6c 20 22 49 6e 76 6f  ng literal "Invo
a440: 6b 65 22 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61  ke"...  /// </pa
a450: 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ram>..  /// <par
a460: 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 0d  am name="args">.
a470: 0a 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d  .  /// The argum
a480: 65 6e 74 73 20 66 6f 72 20 74 68 65 20 73 63 61  ents for the sca
a490: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  lar function... 
a4a0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
a4b0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
a4c0: 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75 6c 74    /// The result
a4d0: 20 6f 66 20 74 68 65 20 73 63 61 6c 61 72 20 66   of the scalar f
a4e0: 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20  unction...  /// 
a4f0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 70 75  </returns>..  pu
a500: 62 6c 69 63 20 64 65 6c 65 67 61 74 65 20 6f 62  blic delegate ob
a510: 6a 65 63 74 20 53 51 4c 69 74 65 49 6e 76 6f 6b  ject SQLiteInvok
a520: 65 44 65 6c 65 67 61 74 65 28 0d 0a 20 20 20 20  eDelegate(..    
a530: 73 74 72 69 6e 67 20 70 61 72 61 6d 30 2c 0d 0a  string param0,..
a540: 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 67      object[] arg
a550: 73 0d 0a 20 20 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  s..  );....  ///
a560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a5b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
a5c0: 20 2f 2f 2f 20 54 68 69 73 20 3c 73 65 65 20 63   /// This <see c
a5d0: 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f  ref="Delegate" /
a5e0: 3e 20 74 79 70 65 20 69 73 20 75 73 65 64 20 77  > type is used w
a5f0: 69 74 68 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c  ith the..  /// <
a600: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
a610: 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e  DelegateFunction
a620: 2e 53 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64  .Step" /> method
a630: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  ...  /// </summa
a640: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61  ry>..  /// <para
a650: 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 30 22 3e  m name="param0">
a660: 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20  ..  /// This is 
a670: 61 6c 77 61 79 73 20 74 68 65 20 73 74 72 69 6e  always the strin
a680: 67 20 6c 69 74 65 72 61 6c 20 22 53 74 65 70 22  g literal "Step"
a690: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  ...  /// </param
a6a0: 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
a6b0: 6e 61 6d 65 3d 22 61 72 67 73 22 3e 0d 0a 20 20  name="args">..  
a6c0: 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e 74  /// The argument
a6d0: 73 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67  s for the aggreg
a6e0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  ate function... 
a6f0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
a700: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
a710: 3d 22 73 74 65 70 4e 75 6d 62 65 72 22 3e 0d 0a  ="stepNumber">..
a720: 20 20 2f 2f 2f 20 54 68 65 20 73 74 65 70 20 6e    /// The step n
a730: 75 6d 62 65 72 20 28 6f 6e 65 20 62 61 73 65 64  umber (one based
a740: 29 2e 20 20 54 68 69 73 20 69 73 20 69 6e 63 72  ).  This is incr
a750: 65 6d 65 6d 74 65 64 20 65 61 63 68 20 74 69 6d  ememted each tim
a760: 65 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65  e the..  /// <se
a770: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 65  e cref="SQLiteDe
a780: 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e 2e 53  legateFunction.S
a790: 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64 20 69  tep" /> method i
a7a0: 73 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 2f 2f 2f  s called...  ///
a7b0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f   </param>..  ///
a7c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
a7d0: 6e 74 65 78 74 44 61 74 61 22 3e 0d 0a 20 20 2f  ntextData">..  /
a7e0: 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c 64 65 72  // A placeholder
a7f0: 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 65 72   for implementer
a800: 73 20 74 6f 20 73 74 6f 72 65 20 63 6f 6e 74 65  s to store conte
a810: 78 74 75 61 6c 20 64 61 74 61 20 70 65 72 74 61  xtual data perta
a820: 69 6e 69 6e 67 0d 0a 20 20 2f 2f 2f 20 74 6f 20  ining..  /// to 
a830: 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74  the current cont
a840: 65 78 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61  ext...  /// </pa
a850: 72 61 6d 3e 0d 0a 20 20 70 75 62 6c 69 63 20 64  ram>..  public d
a860: 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
a870: 69 74 65 53 74 65 70 44 65 6c 65 67 61 74 65 28  iteStepDelegate(
a880: 0d 0a 20 20 20 20 73 74 72 69 6e 67 20 70 61 72  ..    string par
a890: 61 6d 30 2c 0d 0a 20 20 20 20 6f 62 6a 65 63 74  am0,..    object
a8a0: 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 69 6e  [] args,..    in
a8b0: 74 20 73 74 65 70 4e 75 6d 62 65 72 2c 0d 0a 20  t stepNumber,.. 
a8c0: 20 20 20 72 65 66 20 6f 62 6a 65 63 74 20 63 6f     ref object co
a8d0: 6e 74 65 78 74 44 61 74 61 0d 0a 20 20 29 3b 0d  ntextData..  );.
a8e0: 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...  ///////////
a8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d  //....  /// <sum
a940: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69  mary>..  /// Thi
a950: 73 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c  s <see cref="Del
a960: 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 20 69  egate" /> type i
a970: 73 20 75 73 65 64 20 77 69 74 68 20 74 68 65 0d  s used with the.
a980: 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66  .  /// <see cref
a990: 3d 22 53 51 4c 69 74 65 44 65 6c 65 67 61 74 65  ="SQLiteDelegate
a9a0: 46 75 6e 63 74 69 6f 6e 2e 46 69 6e 61 6c 22 20  Function.Final" 
a9b0: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 2f 2f  /> method...  //
a9c0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a9d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a9e0: 22 70 61 72 61 6d 30 22 3e 0d 0a 20 20 2f 2f 2f  "param0">..  ///
a9f0: 20 54 68 69 73 20 69 73 20 61 6c 77 61 79 73 20   This is always 
aa00: 74 68 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72  the string liter
aa10: 61 6c 20 22 46 69 6e 61 6c 22 2e 0d 0a 20 20 2f  al "Final"...  /
aa20: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f  // </param>..  /
aa30: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
aa40: 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 0d 0a 20  contextData">.. 
aa50: 20 2f 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c 64   /// A placehold
aa60: 65 72 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  er for implement
aa70: 65 72 73 20 74 6f 20 73 74 6f 72 65 20 63 6f 6e  ers to store con
aa80: 74 65 78 74 75 61 6c 20 64 61 74 61 20 70 65 72  textual data per
aa90: 74 61 69 6e 69 6e 67 0d 0a 20 20 2f 2f 2f 20 74  taining..  /// t
aaa0: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f  o the current co
aab0: 6e 74 65 78 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ntext...  /// </
aac0: 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 72  param>..  /// <r
aad0: 65 74 75 72 6e 73 3e 0d 0a 20 20 2f 2f 2f 20 54  eturns>..  /// T
aae0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
aaf0: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
ab00: 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 72 65  ion...  /// </re
ab10: 74 75 72 6e 73 3e 0d 0a 20 20 70 75 62 6c 69 63  turns>..  public
ab20: 20 64 65 6c 65 67 61 74 65 20 6f 62 6a 65 63 74   delegate object
ab30: 20 53 51 4c 69 74 65 46 69 6e 61 6c 44 65 6c 65   SQLiteFinalDele
ab40: 67 61 74 65 28 0d 0a 20 20 20 20 73 74 72 69 6e  gate(..    strin
ab50: 67 20 70 61 72 61 6d 30 2c 0d 0a 20 20 20 20 6f  g param0,..    o
ab60: 62 6a 65 63 74 20 63 6f 6e 74 65 78 74 44 61 74  bject contextDat
ab70: 61 0d 0a 20 20 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f  a..  );....  ///
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
abd0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
abe0: 20 2f 2f 2f 20 54 68 69 73 20 3c 73 65 65 20 63   /// This <see c
abf0: 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f  ref="Delegate" /
ac00: 3e 20 74 79 70 65 20 69 73 20 75 73 65 64 20 77  > type is used w
ac10: 69 74 68 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c  ith the..  /// <
ac20: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
ac30: 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e  DelegateFunction
ac40: 2e 43 6f 6d 70 61 72 65 22 20 2f 3e 20 6d 65 74  .Compare" /> met
ac50: 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  hod...  /// </su
ac60: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70  mmary>..  /// <p
ac70: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d  aram name="param
ac80: 30 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20  0">..  /// This 
ac90: 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 73 74  is always the st
aca0: 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 22 43 6f  ring literal "Co
acb0: 6d 70 61 72 65 22 2e 0d 0a 20 20 2f 2f 2f 20 3c  mpare"...  /// <
acc0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c  /param>..  /// <
acd0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61  param name="para
ace0: 6d 31 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20  m1">..  /// The 
acf0: 66 69 72 73 74 20 73 74 72 69 6e 67 20 74 6f 20  first string to 
ad00: 63 6f 6d 70 61 72 65 2e 0d 0a 20 20 2f 2f 2f 20  compare...  /// 
ad10: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
ad20: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72  <param name="par
ad30: 61 6d 32 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65  am2">..  /// The
ad40: 20 73 65 63 6f 6e 64 20 73 74 72 6e 69 67 20 74   second strnig t
ad50: 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20 2f 2f  o compare...  //
ad60: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f  / </param>..  //
ad70: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 2f  / <returns>..  /
ad80: 2f 2f 20 41 20 70 6f 73 69 74 69 76 65 20 69 6e  // A positive in
ad90: 74 65 67 65 72 20 69 66 20 74 68 65 20 3c 70 61  teger if the <pa
ada0: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 70 61 72  ramref name="par
adb0: 61 6d 31 22 20 2f 3e 20 70 61 72 61 6d 65 74 65  am1" /> paramete
adc0: 72 20 69 73 0d 0a 20 20 2f 2f 2f 20 67 72 65 61  r is..  /// grea
add0: 74 65 72 20 74 68 61 6e 20 74 68 65 20 3c 70 61  ter than the <pa
ade0: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 70 61 72  ramref name="par
adf0: 61 6d 32 22 20 2f 3e 20 70 61 72 61 6d 65 74 65  am2" /> paramete
ae00: 72 2c 20 61 20 6e 65 67 61 74 69 76 65 0d 0a 20  r, a negative.. 
ae10: 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 69 66 20   /// integer if 
ae20: 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20 6e 61  the <paramref na
ae30: 6d 65 3d 22 70 61 72 61 6d 31 22 20 2f 3e 20 70  me="param1" /> p
ae40: 61 72 61 6d 65 74 65 72 20 69 73 20 6c 65 73 73  arameter is less
ae50: 20 74 68 61 6e 0d 0a 20 20 2f 2f 2f 20 74 68 65   than..  /// the
ae60: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
ae70: 22 70 61 72 61 6d 32 22 20 2f 3e 20 70 61 72 61  "param2" /> para
ae80: 6d 65 74 65 72 2c 20 6f 72 20 7a 65 72 6f 20 69  meter, or zero i
ae90: 66 20 74 68 65 79 20 61 72 65 0d 0a 20 20 2f 2f  f they are..  //
aea0: 2f 20 65 71 75 61 6c 2e 0d 0a 20 20 2f 2f 2f 20  / equal...  /// 
aeb0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 70 75  </returns>..  pu
aec0: 62 6c 69 63 20 64 65 6c 65 67 61 74 65 20 69 6e  blic delegate in
aed0: 74 20 53 51 4c 69 74 65 43 6f 6d 70 61 72 65 44  t SQLiteCompareD
aee0: 65 6c 65 67 61 74 65 28 0d 0a 20 20 20 20 73 74  elegate(..    st
aef0: 72 69 6e 67 20 70 61 72 61 6d 30 2c 0d 0a 20 20  ring param0,..  
af00: 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d 31 2c    string param1,
af10: 0d 0a 20 20 20 20 73 74 72 69 6e 67 20 70 61 72  ..    string par
af20: 61 6d 32 0d 0a 20 20 29 3b 0d 0a 0d 0a 20 20 2f  am2..  );....  /
af30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
af80: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
af90: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
afa0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
afb0: 0a 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73  .  /// This clas
afc0: 73 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 53  s implements a S
afd0: 51 4c 69 74 65 20 66 75 6e 63 74 69 6f 6e 20 75  QLite function u
afe0: 73 69 6e 67 20 61 20 3c 73 65 65 20 63 72 65 66  sing a <see cref
aff0: 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e 2e 0d  ="Delegate" />..
b000: 0a 20 20 2f 2f 2f 20 41 6c 6c 20 74 68 65 20 76  .  /// All the v
b010: 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 73 20 6f  irtual methods o
b020: 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
b030: 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22  "SQLiteFunction"
b040: 20 2f 3e 20 63 6c 61 73 73 20 61 72 65 0d 0a 20   /> class are.. 
b050: 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 65 64   /// implemented
b060: 20 75 73 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20   using calls to 
b070: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
b080: 51 4c 69 74 65 49 6e 76 6f 6b 65 44 65 6c 65 67  QLiteInvokeDeleg
b090: 61 74 65 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20  ate" />,..  /// 
b0a0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
b0b0: 65 53 74 65 70 44 65 6c 65 67 61 74 65 22 20 2f  eStepDelegate" /
b0c0: 3e 2c 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  >, <see cref="SQ
b0d0: 4c 69 74 65 46 69 6e 61 6c 44 65 6c 65 67 61 74  LiteFinalDelegat
b0e0: 65 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 61 6e  e" />,..  /// an
b0f0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
b100: 69 74 65 43 6f 6d 70 61 72 65 44 65 6c 65 67 61  iteCompareDelega
b110: 74 65 22 20 2f 3e 20 73 74 72 6f 6e 67 6c 79 20  te" /> strongly 
b120: 74 79 70 65 64 20 64 65 6c 65 67 61 74 65 20 74  typed delegate t
b130: 79 70 65 73 0d 0a 20 20 2f 2f 2f 20 6f 72 20 76  ypes..  /// or v
b140: 69 61 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ia the <see cref
b150: 3d 22 44 65 6c 65 67 61 74 65 2e 44 79 6e 61 6d  ="Delegate.Dynam
b160: 69 63 49 6e 76 6f 6b 65 22 20 2f 3e 20 6d 65 74  icInvoke" /> met
b170: 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20  hod...  /// The 
b180: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 70 72  arguments are pr
b190: 65 73 65 6e 74 65 64 20 69 6e 20 74 68 65 20 73  esented in the s
b1a0: 61 6d 65 20 6f 72 64 65 72 20 74 68 65 79 20 61  ame order they a
b1b0: 70 70 65 61 72 20 69 6e 0d 0a 20 20 2f 2f 2f 20  ppear in..  /// 
b1c0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c  the associated <
b1d0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
b1e0: 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74  Function" /> met
b1f0: 68 6f 64 73 20 77 69 74 68 20 6f 6e 65 20 65 78  hods with one ex
b200: 63 65 70 74 69 6f 6e 3a 0d 0a 20 20 2f 2f 2f 20  ception:..  /// 
b210: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
b220: 6e 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  nt is the name o
b230: 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 65  f the virtual me
b240: 74 68 6f 64 20 62 65 69 6e 67 20 69 6d 70 6c 65  thod being imple
b250: 6d 65 6e 74 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c  mented...  /// <
b260: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23 65 6c 73 65  /summary>..#else
b270: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
b280: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  >..  /// This cl
b290: 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ass implements a
b2a0: 20 53 51 4c 69 74 65 20 66 75 6e 63 74 69 6f 6e   SQLite function
b2b0: 20 75 73 69 6e 67 20 61 20 3c 73 65 65 20 63 72   using a <see cr
b2c0: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
b2d0: 2e 0d 0a 20 20 2f 2f 2f 20 41 6c 6c 20 74 68 65  ...  /// All the
b2e0: 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 73   virtual methods
b2f0: 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63 72 65   of the <see cre
b300: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
b310: 6e 22 20 2f 3e 20 63 6c 61 73 73 20 61 72 65 0d  n" /> class are.
b320: 0a 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74  .  /// implement
b330: 65 64 20 75 73 69 6e 67 20 63 61 6c 6c 73 20 74  ed using calls t
b340: 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
b350: 22 53 51 4c 69 74 65 49 6e 76 6f 6b 65 44 65 6c  "SQLiteInvokeDel
b360: 65 67 61 74 65 22 20 2f 3e 2c 0d 0a 20 20 2f 2f  egate" />,..  //
b370: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
b380: 69 74 65 53 74 65 70 44 65 6c 65 67 61 74 65 22  iteStepDelegate"
b390: 20 2f 3e 2c 20 3c 73 65 65 20 63 72 65 66 3d 22   />, <see cref="
b3a0: 53 51 4c 69 74 65 46 69 6e 61 6c 44 65 6c 65 67  SQLiteFinalDeleg
b3b0: 61 74 65 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20  ate" />,..  /// 
b3c0: 61 6e 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  and <see cref="S
b3d0: 51 4c 69 74 65 43 6f 6d 70 61 72 65 44 65 6c 65  QLiteCompareDele
b3e0: 67 61 74 65 22 20 2f 3e 20 73 74 72 6f 6e 67 6c  gate" /> strongl
b3f0: 79 20 74 79 70 65 64 20 64 65 6c 65 67 61 74 65  y typed delegate
b400: 20 74 79 70 65 73 2e 0d 0a 20 20 2f 2f 2f 20 54   types...  /// T
b410: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  he arguments are
b420: 20 70 72 65 73 65 6e 74 65 64 20 69 6e 20 74 68   presented in th
b430: 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68 65  e same order the
b440: 79 20 61 70 70 65 61 72 20 69 6e 0d 0a 20 20 2f  y appear in..  /
b450: 2f 2f 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  // the associate
b460: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
b470: 69 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  iteFunction" /> 
b480: 6d 65 74 68 6f 64 73 20 77 69 74 68 20 6f 6e 65  methods with one
b490: 20 65 78 63 65 70 74 69 6f 6e 3a 0d 0a 20 20 2f   exception:..  /
b4a0: 2f 2f 20 74 68 65 20 66 69 72 73 74 20 61 72 67  // the first arg
b4b0: 75 6d 65 6e 74 20 69 73 20 74 68 65 20 6e 61 6d  ument is the nam
b4c0: 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  e of the virtual
b4d0: 20 6d 65 74 68 6f 64 20 62 65 69 6e 67 20 69 6d   method being im
b4e0: 70 6c 65 6d 65 6e 74 65 64 2e 0d 0a 20 20 2f 2f  plemented...  //
b4f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23 65  / </summary>..#e
b500: 6e 64 69 66 0d 0a 20 20 70 75 62 6c 69 63 20 63  ndif..  public c
b510: 6c 61 73 73 20 53 51 4c 69 74 65 44 65 6c 65 67  lass SQLiteDeleg
b520: 61 74 65 46 75 6e 63 74 69 6f 6e 20 3a 20 53 51  ateFunction : SQ
b530: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20  LiteFunction..  
b540: 7b 0d 0a 20 20 20 20 20 20 23 72 65 67 69 6f 6e  {..      #region
b550: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
b560: 74 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ts..      /// <s
b570: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
b580: 2f 2f 20 54 68 69 73 20 65 72 72 6f 72 20 6d 65  // This error me
b590: 73 73 61 67 65 20 69 73 20 75 73 65 64 20 62 79  ssage is used by
b5a0: 20 74 68 65 20 6f 76 65 72 72 69 64 64 65 6e 20   the overridden 
b5b0: 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 73 20  virtual methods 
b5c0: 77 68 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  when..      /// 
b5d0: 61 20 72 65 71 75 69 72 65 64 20 3c 73 65 65 20  a required <see 
b5e0: 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20  cref="Delegate" 
b5f0: 2f 3e 20 70 72 6f 70 65 72 74 79 20 28 65 2e 67  /> property (e.g
b600: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  ...      /// <se
b610: 65 20 63 72 65 66 3d 22 43 61 6c 6c 62 61 63 6b  e cref="Callback
b620: 31 22 20 2f 3e 20 6f 72 20 3c 73 65 65 20 63 72  1" /> or <see cr
b630: 65 66 3d 22 43 61 6c 6c 62 61 63 6b 32 22 20 2f  ef="Callback2" /
b640: 3e 29 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 0d  >) has not been.
b650: 0a 20 20 20 20 20 20 2f 2f 2f 20 73 65 74 2e 0d  .      /// set..
b660: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
b670: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72 69  mary>..      pri
b680: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
b690: 67 20 4e 6f 43 61 6c 6c 62 61 63 6b 45 72 72 6f  g NoCallbackErro
b6a0: 72 20 3d 20 22 4e 6f 20 5c 22 7b 30 7d 5c 22 20  r = "No \"{0}\" 
b6b0: 63 61 6c 6c 62 61 63 6b 20 69 73 20 73 65 74 2e  callback is set.
b6c0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f  ";....      ////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f  /////....      /
b720: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
b730: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 65 72 72      /// This err
b740: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 75 73  or message is us
b750: 65 64 20 62 79 20 74 68 65 20 6f 76 65 72 72 69  ed by the overri
b760: 64 64 65 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  dden <see cref="
b770: 43 6f 6d 70 61 72 65 22 20 2f 3e 0d 0a 20 20 20  Compare" />..   
b780: 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 77 68     /// method wh
b790: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 64 6f  en the result do
b7a0: 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 74 79  es not have a ty
b7b0: 70 65 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  pe of <see cref=
b7c0: 22 49 6e 74 33 32 22 20 2f 3e 2e 0d 0a 20 20 20  "Int32" />...   
b7d0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
b7e0: 3e 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65  >..      private
b7f0: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 65   const string Re
b800: 73 75 6c 74 49 6e 74 33 32 45 72 72 6f 72 20 3d  sultInt32Error =
b810: 20 22 5c 22 7b 30 7d 5c 22 20 72 65 73 75 6c 74   "\"{0}\" result
b820: 20 6d 75 73 74 20 62 65 20 49 6e 74 33 32 2e 22   must be Int32."
b830: 3b 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65 67  ;..      #endreg
b840: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  ion....      ///
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b890: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b8a0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
b8b0: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
b8c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
b8d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73  ..      /// Cons
b8e0: 74 72 75 63 74 73 20 61 6e 20 65 6d 70 74 79 20  tructs an empty 
b8f0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
b900: 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 2f   class...      /
b910: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
b920: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
b930: 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69  teDelegateFuncti
b940: 6f 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on()..          
b950: 3a 20 74 68 69 73 28 6e 75 6c 6c 2c 20 6e 75 6c  : this(null, nul
b960: 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  l)..      {..   
b970: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
b980: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a  hing...      }..
b990: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  /....      /// <
b9f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
ba00: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
ba10: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
ba20: 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  is class using t
ba30: 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20  he specified..  
ba40: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
ba50: 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e 20  f="Delegate" /> 
ba60: 61 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  as the <see cref
ba70: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
ba80: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  " />..      /// 
ba90: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d  implementation..
baa0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
bab0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
bac0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61   <param name="ca
bad0: 6c 6c 62 61 63 6b 31 22 3e 0d 0a 20 20 20 20 20  llback1">..     
bae0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
baf0: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
bb00: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
bb10: 61 6c 6c 20 63 61 6c 6c 73 20 69 6e 74 6f 20 74  all calls into t
bb20: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  he..      /// <s
bb30: 65 65 20 63 72 65 66 3d 22 49 6e 76 6f 6b 65 22  ee cref="Invoke"
bb40: 20 2f 3e 2c 20 3c 73 65 65 20 63 72 65 66 3d 22   />, <see cref="
bb50: 53 74 65 70 22 20 2f 3e 2c 20 61 6e 64 0d 0a 20  Step" />, and.. 
bb60: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
bb70: 65 66 3d 22 43 6f 6d 70 61 72 65 22 20 2f 3e 20  ef="Compare" /> 
bb80: 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 73 20  virtual methods 
bb90: 6e 65 65 64 65 64 20 62 79 20 74 68 65 0d 0a 20  needed by the.. 
bba0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
bbb0: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
bbc0: 6f 6e 22 20 2f 3e 20 62 61 73 65 20 63 6c 61 73  on" /> base clas
bbd0: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
bbe0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
bbf0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
bc00: 61 6c 6c 62 61 63 6b 32 22 3e 0d 0a 20 20 20 20  allback2">..    
bc10: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
bc20: 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f  ref="Delegate" /
bc30: 3e 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  > to be used for
bc40: 20 61 6c 6c 20 63 61 6c 6c 73 20 69 6e 74 6f 20   all calls into 
bc50: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  the..      /// <
bc60: 73 65 65 20 63 72 65 66 3d 22 46 69 6e 61 6c 22  see cref="Final"
bc70: 20 2f 3e 20 76 69 72 74 75 61 6c 20 6d 65 74 68   /> virtual meth
bc80: 6f 64 73 20 6e 65 65 64 65 64 20 62 79 20 74 68  ods needed by th
bc90: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  e..      /// <se
bca0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
bcb0: 6e 63 74 69 6f 6e 22 20 2f 3e 20 62 61 73 65 20  nction" /> base 
bcc0: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 2f 2f  class...      //
bcd0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
bce0: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 44    public SQLiteD
bcf0: 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e 28  elegateFunction(
bd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 6c 65  ..          Dele
bd10: 67 61 74 65 20 63 61 6c 6c 62 61 63 6b 31 2c 0d  gate callback1,.
bd20: 0a 20 20 20 20 20 20 20 20 20 20 44 65 6c 65 67  .          Deleg
bd30: 61 74 65 20 63 61 6c 6c 62 61 63 6b 32 0d 0a 20  ate callback2.. 
bd40: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
bd50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74    {..          t
bd60: 68 69 73 2e 63 61 6c 6c 62 61 63 6b 31 20 3d 20  his.callback1 = 
bd70: 63 61 6c 6c 62 61 63 6b 31 3b 0d 0a 20 20 20 20  callback1;..    
bd80: 20 20 20 20 20 20 74 68 69 73 2e 63 61 6c 6c 62        this.callb
bd90: 61 63 6b 32 20 3d 20 63 61 6c 6c 62 61 63 6b 32  ack2 = callback2
bda0: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
bdb0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
bdc0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
bdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
be10: 0a 0d 0a 20 20 20 20 20 20 23 72 65 67 69 6f 6e  ...      #region
be20: 20 50 72 6f 74 65 63 74 65 64 20 4d 65 74 68 6f   Protected Metho
be30: 64 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ds..      /// <s
be40: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
be50: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c  // Returns the l
be60: 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
be70: 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72   for the <see cr
be80: 65 66 3d 22 49 6e 76 6f 6b 65 22 20 2f 3e 20 6d  ef="Invoke" /> m
be90: 65 74 68 6f 64 2c 0d 0a 20 20 20 20 20 20 2f 2f  ethod,..      //
bea0: 2f 20 61 73 20 61 6e 20 3c 73 65 65 20 63 72 65  / as an <see cre
beb0: 66 3d 22 41 72 72 61 79 22 20 2f 3e 20 6f 66 20  f="Array" /> of 
bec0: 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63  <see cref="Objec
bed0: 74 22 20 2f 3e 2e 20 20 54 68 65 20 66 69 72 73  t" />.  The firs
bee0: 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72 67  t..      /// arg
bef0: 75 6d 65 6e 74 20 69 73 20 61 6c 77 61 79 73 20  ument is always 
bf00: 74 68 65 20 6c 69 74 65 72 61 6c 20 73 74 72 69  the literal stri
bf10: 6e 67 20 22 49 6e 76 6f 6b 65 22 2e 0d 0a 20 20  ng "Invoke"...  
bf20: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
bf30: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  y>..      /// <p
bf40: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22  aram name="args"
bf50: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
bf60: 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65   original argume
bf70: 6e 74 73 20 72 65 63 65 69 76 65 64 20 62 79 20  nts received by 
bf80: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
bf90: 6e 76 6f 6b 65 22 20 2f 3e 20 6d 65 74 68 6f 64  nvoke" /> method
bfa0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  ...      /// </p
bfb0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  aram>..      ///
bfc0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 61   <param name="ea
bfd0: 72 6c 79 42 6f 75 6e 64 22 3e 0d 0a 20 20 20 20  rlyBound">..    
bfe0: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
bff0: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 61  f the returned a
c000: 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 6f 69  rguments are goi
c010: 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 77 69  ng to be used wi
c020: 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  th the..      //
c030: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
c040: 69 74 65 49 6e 76 6f 6b 65 44 65 6c 65 67 61 74  iteInvokeDelegat
c050: 65 22 20 2f 3e 20 74 79 70 65 3b 20 6f 74 68 65  e" /> type; othe
c060: 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20  rwise, zero...  
c070: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
c080: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74  ..      /// <ret
c090: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  urns>..      ///
c0a0: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   The arguments t
c0b0: 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 63 6f  o pass to the co
c0c0: 6e 66 69 67 75 72 65 64 20 3c 73 65 65 20 63 72  nfigured <see cr
c0d0: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
c0e0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  ...      /// </r
c0f0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70  eturns>..      p
c100: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
c110: 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74 49 6e 76   object[] GetInv
c120: 6f 6b 65 41 72 67 73 28 0d 0a 20 20 20 20 20 20  okeArgs(..      
c130: 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 67      object[] arg
c140: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f  s,..          bo
c150: 6f 6c 20 65 61 72 6c 79 42 6f 75 6e 64 0d 0a 20  ol earlyBound.. 
c160: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
c170: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f    {..          o
c180: 62 6a 65 63 74 5b 5d 20 6e 65 77 41 72 67 73 20  bject[] newArgs 
c190: 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  = new object[] {
c1a0: 20 22 49 6e 76 6f 6b 65 22 2c 20 61 72 67 73 20   "Invoke", args 
c1b0: 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
c1c0: 69 66 20 28 21 65 61 72 6c 79 42 6f 75 6e 64 29  if (!earlyBound)
c1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c1e0: 6e 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62  newArgs = new ob
c1f0: 6a 65 63 74 5b 5d 20 7b 20 6e 65 77 41 72 67 73  ject[] { newArgs
c200: 20 7d 3b 20 2f 2f 20 57 52 41 50 0d 0a 0d 0a 20   }; // WRAP.... 
c210: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c220: 6e 65 77 41 72 67 73 3b 0d 0a 20 20 20 20 20 20  newArgs;..      
c230: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
c240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c280: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ////....      //
c290: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
c2a0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
c2b0: 68 65 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d  he list of argum
c2c0: 65 6e 74 73 20 66 6f 72 20 74 68 65 20 3c 73 65  ents for the <se
c2d0: 65 20 63 72 65 66 3d 22 53 74 65 70 22 20 2f 3e  e cref="Step" />
c2e0: 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20 20 20   method,..      
c2f0: 2f 2f 2f 20 61 73 20 61 6e 20 3c 73 65 65 20 63  /// as an <see c
c300: 72 65 66 3d 22 41 72 72 61 79 22 20 2f 3e 20 6f  ref="Array" /> o
c310: 66 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a  f <see cref="Obj
c320: 65 63 74 22 20 2f 3e 2e 20 20 54 68 65 20 66 69  ect" />.  The fi
c330: 72 73 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61  rst..      /// a
c340: 72 67 75 6d 65 6e 74 20 69 73 20 61 6c 77 61 79  rgument is alway
c350: 73 20 74 68 65 20 6c 69 74 65 72 61 6c 20 73 74  s the literal st
c360: 72 69 6e 67 20 22 53 74 65 70 22 2e 0d 0a 20 20  ring "Step"...  
c370: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
c380: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  y>..      /// <p
c390: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22  aram name="args"
c3a0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
c3b0: 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65   original argume
c3c0: 6e 74 73 20 72 65 63 65 69 76 65 64 20 62 79 20  nts received by 
c3d0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
c3e0: 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  tep" /> method..
c3f0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
c400: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
c410: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 65 70  param name="step
c420: 4e 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20  Number">..      
c430: 2f 2f 2f 20 54 68 65 20 73 74 65 70 20 6e 75 6d  /// The step num
c440: 62 65 72 20 28 6f 6e 65 20 62 61 73 65 64 29 2e  ber (one based).
c450: 20 20 54 68 69 73 20 69 73 20 69 6e 63 72 65 6d    This is increm
c460: 65 6d 74 65 64 20 65 61 63 68 20 74 69 6d 65 20  emted each time 
c470: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  the..      /// <
c480: 73 65 65 20 63 72 65 66 3d 22 53 74 65 70 22 20  see cref="Step" 
c490: 2f 3e 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  /> method is cal
c4a0: 6c 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  led...      /// 
c4b0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
c4c0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
c4d0: 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 0d 0a  "contextData">..
c4e0: 20 20 20 20 20 20 2f 2f 2f 20 41 20 70 6c 61 63        /// A plac
c4f0: 65 68 6f 6c 64 65 72 20 66 6f 72 20 69 6d 70 6c  eholder for impl
c500: 65 6d 65 6e 74 65 72 73 20 74 6f 20 73 74 6f 72  ementers to stor
c510: 65 20 63 6f 6e 74 65 78 74 75 61 6c 20 64 61 74  e contextual dat
c520: 61 20 70 65 72 74 61 69 6e 69 6e 67 0d 0a 20 20  a pertaining..  
c530: 20 20 20 20 2f 2f 2f 20 74 6f 20 74 68 65 20 63      /// to the c
c540: 75 72 72 65 6e 74 20 63 6f 6e 74 65 78 74 2e 0d  urrent context..
c550: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
c560: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
c570: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 61 72 6c  param name="earl
c580: 79 42 6f 75 6e 64 22 3e 0d 0a 20 20 20 20 20 20  yBound">..      
c590: 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
c5a0: 74 68 65 20 72 65 74 75 72 6e 65 64 20 61 72 67  the returned arg
c5b0: 75 6d 65 6e 74 73 20 61 72 65 20 67 6f 69 6e 67  uments are going
c5c0: 20 74 6f 20 62 65 20 75 73 65 64 20 77 69 74 68   to be used with
c5d0: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
c5e0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
c5f0: 65 53 74 65 70 44 65 6c 65 67 61 74 65 22 20 2f  eStepDelegate" /
c600: 3e 20 74 79 70 65 3b 20 6f 74 68 65 72 77 69 73  > type; otherwis
c610: 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  e, zero...      
c620: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
c630: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
c640: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
c650: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 70 61   arguments to pa
c660: 73 73 20 74 6f 20 74 68 65 20 63 6f 6e 66 69 67  ss to the config
c670: 75 72 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  ured <see cref="
c680: 44 65 6c 65 67 61 74 65 22 20 2f 3e 2e 0d 0a 20  Delegate" />... 
c690: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
c6a0: 6e 73 3e 0d 0a 20 20 20 20 20 20 70 72 6f 74 65  ns>..      prote
c6b0: 63 74 65 64 20 76 69 72 74 75 61 6c 20 6f 62 6a  cted virtual obj
c6c0: 65 63 74 5b 5d 20 47 65 74 53 74 65 70 41 72 67  ect[] GetStepArg
c6d0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  s(..          ob
c6e0: 6a 65 63 74 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ject[] args,..  
c6f0: 20 20 20 20 20 20 20 20 69 6e 74 20 73 74 65 70          int step
c700: 4e 75 6d 62 65 72 2c 0d 0a 20 20 20 20 20 20 20  Number,..       
c710: 20 20 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78     object contex
c720: 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
c730: 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42 6f 75 6e    bool earlyBoun
c740: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  d..          )..
c750: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c760: 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e 65 77 41     object[] newA
c770: 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  rgs = new object
c780: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
c790: 20 20 20 20 22 53 74 65 70 22 2c 20 61 72 67 73      "Step", args
c7a0: 2c 20 73 74 65 70 4e 75 6d 62 65 72 2c 20 63 6f  , stepNumber, co
c7b0: 6e 74 65 78 74 44 61 74 61 0d 0a 20 20 20 20 20  ntextData..     
c7c0: 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20       };....     
c7d0: 20 20 20 20 20 69 66 20 28 21 65 61 72 6c 79 42       if (!earlyB
c7e0: 6f 75 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20  ound)..         
c7f0: 20 20 20 20 20 6e 65 77 41 72 67 73 20 3d 20 6e       newArgs = n
c800: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 6e 65  ew object[] { ne
c810: 77 41 72 67 73 20 7d 3b 20 2f 2f 20 57 52 41 50  wArgs }; // WRAP
c820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
c830: 74 75 72 6e 20 6e 65 77 41 72 67 73 3b 0d 0a 20  turn newArgs;.. 
c840: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
c8a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
c8b0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 55 70 64 61  ..      /// Upda
c8c0: 74 65 73 20 74 68 65 20 6f 75 74 70 75 74 20 61  tes the output a
c8d0: 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  rguments for the
c8e0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 65 70   <see cref="Step
c8f0: 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 0d 0a 20 20  " /> method,..  
c900: 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 61 6e      /// using an
c910: 20 3c 73 65 65 20 63 72 65 66 3d 22 41 72 72 61   <see cref="Arra
c920: 79 22 20 2f 3e 20 6f 66 20 3c 73 65 65 20 63 72  y" /> of <see cr
c930: 65 66 3d 22 4f 62 6a 65 63 74 22 20 2f 3e 2e 20  ef="Object" />. 
c940: 20 54 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20   The first..    
c950: 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 20 69    /// argument i
c960: 73 20 61 6c 77 61 79 73 20 74 68 65 20 6c 69 74  s always the lit
c970: 65 72 61 6c 20 73 74 72 69 6e 67 20 22 53 74 65  eral string "Ste
c980: 70 22 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20  p".  Currently, 
c990: 6f 6e 6c 79 20 74 68 65 0d 0a 20 20 20 20 20 20  only the..      
c9a0: 2f 2f 2f 20 3c 70 61 72 61 6d 72 65 66 20 6e 61  /// <paramref na
c9b0: 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22  me="contextData"
c9c0: 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73   /> parameter is
c9d0: 20 75 70 64 61 74 65 64 2e 0d 0a 20 20 20 20 20   updated...     
c9e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
c9f0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
ca00: 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 0d 0a  m name="args">..
ca10: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 72        /// The or
ca20: 69 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 73  iginal arguments
ca30: 20 72 65 63 65 69 76 65 64 20 62 79 20 74 68 65   received by the
ca40: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 65 70   <see cref="Step
ca50: 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
ca60: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
ca70: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ..      /// <par
ca80: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74  am name="context
ca90: 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 2f 2f  Data">..      //
caa0: 2f 20 41 20 70 6c 61 63 65 68 6f 6c 64 65 72 20  / A placeholder 
cab0: 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 65 72 73  for implementers
cac0: 20 74 6f 20 73 74 6f 72 65 20 63 6f 6e 74 65 78   to store contex
cad0: 74 75 61 6c 20 64 61 74 61 20 70 65 72 74 61 69  tual data pertai
cae0: 6e 69 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ning..      /// 
caf0: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  to the current c
cb00: 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 2f  ontext...      /
cb10: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
cb20: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
cb30: 6d 65 3d 22 65 61 72 6c 79 42 6f 75 6e 64 22 3e  me="earlyBound">
cb40: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  ..      /// Non-
cb50: 7a 65 72 6f 20 69 66 20 74 68 65 20 72 65 74 75  zero if the retu
cb60: 72 6e 65 64 20 61 72 67 75 6d 65 6e 74 73 20 61  rned arguments a
cb70: 72 65 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 75  re going to be u
cb80: 73 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20  sed with the..  
cb90: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
cba0: 66 3d 22 53 51 4c 69 74 65 53 74 65 70 44 65 6c  f="SQLiteStepDel
cbb0: 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 3b 20  egate" /> type; 
cbc0: 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e  otherwise, zero.
cbd0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ..      /// </pa
cbe0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ram>..      /// 
cbf0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
cc00: 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e   /// The argumen
cc10: 74 73 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  ts to pass to th
cc20: 65 20 63 6f 6e 66 69 67 75 72 65 64 20 3c 73 65  e configured <se
cc30: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
cc40: 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  " />...      ///
cc50: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
cc60: 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
cc70: 74 75 61 6c 20 76 6f 69 64 20 55 70 64 61 74 65  tual void Update
cc80: 53 74 65 70 41 72 67 73 28 0d 0a 20 20 20 20 20  StepArgs(..     
cc90: 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72       object[] ar
cca0: 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  gs,..          r
ccb0: 65 66 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78  ef object contex
ccc0: 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
ccd0: 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42 6f 75 6e    bool earlyBoun
cce0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  d..          )..
ccf0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
cd00: 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e 65 77 41     object[] newA
cd10: 72 67 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rgs;....        
cd20: 20 20 69 66 20 28 65 61 72 6c 79 42 6f 75 6e 64    if (earlyBound
cd30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
cd40: 20 6e 65 77 41 72 67 73 20 3d 20 61 72 67 73 3b   newArgs = args;
cd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
cd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd70: 6e 65 77 41 72 67 73 20 3d 20 61 72 67 73 5b 30  newArgs = args[0
cd80: 5d 20 61 73 20 6f 62 6a 65 63 74 5b 5d 3b 0d 0a  ] as object[];..
cd90: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
cda0: 6e 65 77 41 72 67 73 20 3d 3d 20 6e 75 6c 6c 29  newArgs == null)
cdb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cdc0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
cdd0: 20 20 20 20 20 63 6f 6e 74 65 78 74 44 61 74 61       contextData
cde0: 20 3d 20 6e 65 77 41 72 67 73 5b 6e 65 77 41 72   = newArgs[newAr
cdf0: 67 73 2e 4c 65 6e 67 74 68 20 2d 20 31 5d 3b 0d  gs.Length - 1];.
ce00: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
ce10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ce20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ce60: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
ce70: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 52 65  y>..      /// Re
ce80: 74 75 72 6e 73 20 74 68 65 20 6c 69 73 74 20 6f  turns the list o
ce90: 66 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  f arguments for 
cea0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 46  the <see cref="F
ceb0: 69 6e 61 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 2c  inal" /> method,
cec0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 73 20 61  ..      /// as a
ced0: 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 41 72 72  n <see cref="Arr
cee0: 61 79 22 20 2f 3e 20 6f 66 20 3c 73 65 65 20 63  ay" /> of <see c
cef0: 72 65 66 3d 22 4f 62 6a 65 63 74 22 20 2f 3e 2e  ref="Object" />.
cf00: 20 20 54 68 65 20 66 69 72 73 74 0d 0a 20 20 20    The first..   
cf10: 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 20     /// argument 
cf20: 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 6c 69  is always the li
cf30: 74 65 72 61 6c 20 73 74 72 69 6e 67 20 22 46 69  teral string "Fi
cf40: 6e 61 6c 22 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  nal"...      ///
cf50: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
cf60: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
cf70: 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22  me="contextData"
cf80: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 70  >..      /// A p
cf90: 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20 69  laceholder for i
cfa0: 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20 73  mplementers to s
cfb0: 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c 20  tore contextual 
cfc0: 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67 0d  data pertaining.
cfd0: 0a 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 74 68  .      /// to th
cfe0: 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 78  e current contex
cff0: 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  t...      /// </
d000: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
d010: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
d020: 61 72 6c 79 42 6f 75 6e 64 22 3e 0d 0a 20 20 20  arlyBound">..   
d030: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
d040: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  if the returned 
d050: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 6f  arguments are go
d060: 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 77  ing to be used w
d070: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  ith the..      /
d080: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
d090: 4c 69 74 65 46 69 6e 61 6c 44 65 6c 65 67 61 74  LiteFinalDelegat
d0a0: 65 22 20 2f 3e 20 74 79 70 65 3b 20 6f 74 68 65  e" /> type; othe
d0b0: 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20  rwise, zero...  
d0c0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
d0d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74  ..      /// <ret
d0e0: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  urns>..      ///
d0f0: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   The arguments t
d100: 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 63 6f  o pass to the co
d110: 6e 66 69 67 75 72 65 64 20 3c 73 65 65 20 63 72  nfigured <see cr
d120: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
d130: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  ...      /// </r
d140: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70  eturns>..      p
d150: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
d160: 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74 46 69 6e   object[] GetFin
d170: 61 6c 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  alArgs(..       
d180: 20 20 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78     object contex
d190: 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
d1a0: 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42 6f 75 6e    bool earlyBoun
d1b0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  d..          )..
d1c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d1d0: 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e 65 77 41     object[] newA
d1e0: 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  rgs = new object
d1f0: 5b 5d 20 7b 20 22 46 69 6e 61 6c 22 2c 20 63 6f  [] { "Final", co
d200: 6e 74 65 78 74 44 61 74 61 20 7d 3b 0d 0a 0d 0a  ntextData };....
d210: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 65            if (!e
d220: 61 72 6c 79 42 6f 75 6e 64 29 0d 0a 20 20 20 20  arlyBound)..    
d230: 20 20 20 20 20 20 20 20 20 20 6e 65 77 41 72 67            newArg
d240: 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  s = new object[]
d250: 20 7b 20 6e 65 77 41 72 67 73 20 7d 3b 20 2f 2f   { newArgs }; //
d260: 20 57 52 41 50 0d 0a 0d 0a 20 20 20 20 20 20 20   WRAP....       
d270: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 41 72 67     return newArg
d280: 73 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  s;..      }.... 
d290: 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a  //////////////..
d2e0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
d2f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
d300: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c 69 73   Returns the lis
d310: 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66  t of arguments f
d320: 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  or the <see cref
d330: 3d 22 43 6f 6d 70 61 72 65 22 20 2f 3e 20 6d 65  ="Compare" /> me
d340: 74 68 6f 64 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f  thod,..      ///
d350: 20 61 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66   as an <see cref
d360: 3d 22 41 72 72 61 79 22 20 2f 3e 20 6f 66 20 3c  ="Array" /> of <
d370: 73 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74  see cref="Object
d380: 22 20 2f 3e 2e 20 20 54 68 65 20 66 69 72 73 74  " />.  The first
d390: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75  ..      /// argu
d3a0: 6d 65 6e 74 20 69 73 20 61 6c 77 61 79 73 20 74  ment is always t
d3b0: 68 65 20 6c 69 74 65 72 61 6c 20 73 74 72 69 6e  he literal strin
d3c0: 67 20 22 43 6f 6d 70 61 72 65 22 2e 0d 0a 20 20  g "Compare"...  
d3d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d3e0: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  y>..      /// <p
d3f0: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d  aram name="param
d400: 31 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  1">..      /// T
d410: 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20  he first string 
d420: 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20 20  to compare...   
d430: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
d440: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
d450: 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32 22 3e  m name="param2">
d460: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
d470: 73 65 63 6f 6e 64 20 73 74 72 6e 69 67 20 74 6f  second strnig to
d480: 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20 20 20 20   compare...     
d490: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
d4a0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
d4b0: 6e 61 6d 65 3d 22 65 61 72 6c 79 42 6f 75 6e 64  name="earlyBound
d4c0: 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e 6f  ">..      /// No
d4d0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 72 65  n-zero if the re
d4e0: 74 75 72 6e 65 64 20 61 72 67 75 6d 65 6e 74 73  turned arguments
d4f0: 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 62 65   are going to be
d500: 20 75 73 65 64 20 77 69 74 68 20 74 68 65 0d 0a   used with the..
d510: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
d520: 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6d 70 61  ref="SQLiteCompa
d530: 72 65 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74  reDelegate" /> t
d540: 79 70 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ype; otherwise, 
d550: 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  zero...      ///
d560: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
d570: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
d580: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
d590: 67 75 6d 65 6e 74 73 20 74 6f 20 70 61 73 73 20  guments to pass 
d5a0: 74 6f 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65  to the configure
d5b0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c  d <see cref="Del
d5c0: 65 67 61 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20  egate" />...    
d5d0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
d5e0: 0d 0a 20 20 20 20 20 20 70 72 6f 74 65 63 74 65  ..      protecte
d5f0: 64 20 76 69 72 74 75 61 6c 20 6f 62 6a 65 63 74  d virtual object
d600: 5b 5d 20 47 65 74 43 6f 6d 70 61 72 65 41 72 67  [] GetCompareArg
d610: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  s(..          st
d620: 72 69 6e 67 20 70 61 72 61 6d 31 2c 0d 0a 20 20  ring param1,..  
d630: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
d640: 61 72 61 6d 32 2c 0d 0a 20 20 20 20 20 20 20 20  aram2,..        
d650: 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42 6f 75 6e    bool earlyBoun
d660: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  d..          )..
d670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d680: 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e 65 77 41     object[] newA
d690: 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  rgs = new object
d6a0: 5b 5d 20 7b 20 22 43 6f 6d 70 61 72 65 22 2c 20  [] { "Compare", 
d6b0: 70 61 72 61 6d 31 2c 20 70 61 72 61 6d 32 20 7d  param1, param2 }
d6c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
d6d0: 66 20 28 21 65 61 72 6c 79 42 6f 75 6e 64 29 0d  f (!earlyBound).
d6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
d6f0: 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a  ewArgs = new obj
d700: 65 63 74 5b 5d 20 7b 20 6e 65 77 41 72 67 73 20  ect[] { newArgs 
d710: 7d 3b 20 2f 2f 20 57 52 41 50 0d 0a 0d 0a 20 20  }; // WRAP....  
d720: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
d730: 65 77 41 72 67 73 3b 0d 0a 20 20 20 20 20 20 7d  ewArgs;..      }
d740: 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65 67 69  ..      #endregi
d750: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f  on....      ////
d760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23  /////....      #
d7b0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
d7c0: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
d7d0: 70 72 69 76 61 74 65 20 44 65 6c 65 67 61 74 65  private Delegate
d7e0: 20 63 61 6c 6c 62 61 63 6b 31 3b 0d 0a 20 20 20   callback1;..   
d7f0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
d800: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
d810: 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67  <see cref="Deleg
d820: 61 74 65 22 20 2f 3e 20 74 6f 20 62 65 20 75 73  ate" /> to be us
d830: 65 64 20 66 6f 72 20 61 6c 6c 20 63 61 6c 6c 73  ed for all calls
d840: 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20   into the..     
d850: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
d860: 49 6e 76 6f 6b 65 22 20 2f 3e 2c 20 3c 73 65 65  Invoke" />, <see
d870: 20 63 72 65 66 3d 22 53 74 65 70 22 20 2f 3e 2c   cref="Step" />,
d880: 20 61 6e 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   and..      /// 
d890: 3c 73 65 65 20 63 72 65 66 3d 22 43 6f 6d 70 61  <see cref="Compa
d8a0: 72 65 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 6d  re" /> virtual m
d8b0: 65 74 68 6f 64 73 20 6e 65 65 64 65 64 20 62 79  ethods needed by
d8c0: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
d8d0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
d8e0: 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 62 61  eFunction" /> ba
d8f0: 73 65 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  se class...     
d900: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d910: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69  .      public vi
d920: 72 74 75 61 6c 20 44 65 6c 65 67 61 74 65 20 43  rtual Delegate C
d930: 61 6c 6c 62 61 63 6b 31 0d 0a 20 20 20 20 20 20  allback1..      
d940: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 67 65 74  {..          get
d950: 20 7b 20 72 65 74 75 72 6e 20 63 61 6c 6c 62 61   { return callba
d960: 63 6b 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ck1; }..        
d970: 20 20 73 65 74 20 7b 20 63 61 6c 6c 62 61 63 6b    set { callback
d980: 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  1 = value; }..  
d990: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
d9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d9f0: 20 20 70 72 69 76 61 74 65 20 44 65 6c 65 67 61    private Delega
da00: 74 65 20 63 61 6c 6c 62 61 63 6b 32 3b 0d 0a 20  te callback2;.. 
da10: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
da20: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
da30: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c  e <see cref="Del
da40: 65 67 61 74 65 22 20 2f 3e 20 74 6f 20 62 65 20  egate" /> to be 
da50: 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 63 61 6c  used for all cal
da60: 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20  ls into the..   
da70: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
da80: 3d 22 46 69 6e 61 6c 22 20 2f 3e 20 76 69 72 74  ="Final" /> virt
da90: 75 61 6c 20 6d 65 74 68 6f 64 73 20 6e 65 65 64  ual methods need
daa0: 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
dab0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
dac0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 20  SQLiteFunction" 
dad0: 2f 3e 20 62 61 73 65 20 63 6c 61 73 73 2e 0d 0a  /> base class...
dae0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
daf0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c  ary>..      publ
db00: 69 63 20 76 69 72 74 75 61 6c 20 44 65 6c 65 67  ic virtual Deleg
db10: 61 74 65 20 43 61 6c 6c 62 61 63 6b 32 0d 0a 20  ate Callback2.. 
db20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
db30: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63    get { return c
db40: 61 6c 6c 62 61 63 6b 32 3b 20 7d 0d 0a 20 20 20  allback2; }..   
db50: 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 61 6c         set { cal
db60: 6c 62 61 63 6b 32 20 3d 20 76 61 6c 75 65 3b 20  lback2 = value; 
db70: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
db80: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
db90: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
dba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
dbe0: 0a 0d 0a 20 20 20 20 20 20 23 72 65 67 69 6f 6e  ...      #region
dbf0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
dc00: 69 74 65 2e 53 51 4c 69 74 65 46 75 6e 63 74 69  ite.SQLiteFuncti
dc10: 6f 6e 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20  on Overrides..  
dc20: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
dc30: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  >..      /// Thi
dc40: 73 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64  s virtual method
dc50: 20 69 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   is the implemen
dc60: 74 61 74 69 6f 6e 20 66 6f 72 20 73 63 61 6c 61  tation for scala
dc70: 72 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20  r functions...  
dc80: 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
dc90: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
dca0: 65 46 75 6e 63 74 69 6f 6e 2e 49 6e 76 6f 6b 65  eFunction.Invoke
dcb0: 22 20 2f 3e 20 6d 65 74 68 6f 64 20 66 6f 72 20  " /> method for 
dcc0: 6d 6f 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  more..      /// 
dcd0: 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20  details...      
dce0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
dcf0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
dd00: 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 0d 0a 20   name="args">.. 
dd10: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 67       /// The arg
dd20: 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20 73  uments for the s
dd30: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 2e 0d  calar function..
dd40: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
dd50: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
dd60: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
dd70: 2f 2f 2f 20 54 68 65 20 72 65 73 75 6c 74 20 6f  /// The result o
dd80: 66 20 74 68 65 20 73 63 61 6c 61 72 20 66 75 6e  f the scalar fun
dd90: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f  ction...      //
dda0: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
ddb0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
ddc0: 69 64 65 20 6f 62 6a 65 63 74 20 49 6e 76 6f 6b  ide object Invok
ddd0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  e(..          ob
dde0: 6a 65 63 74 5b 5d 20 61 72 67 73 20 2f 2a 20 69  ject[] args /* i
ddf0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
de00: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
de10: 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
de20: 63 6b 31 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ck1 == null)..  
de30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
de40: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
de50: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
de60: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53   HelperMethods.S
de90: 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
dec0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
dee0: 6f 43 61 6c 6c 62 61 63 6b 45 72 72 6f 72 2c 20  oCallbackError, 
def0: 22 49 6e 76 6f 6b 65 22 29 29 3b 0d 0a 20 20 20  "Invoke"));..   
df00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
df10: 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 76 6f        SQLiteInvo
df20: 6b 65 44 65 6c 65 67 61 74 65 20 69 6e 76 6f 6b  keDelegate invok
df30: 65 44 65 6c 65 67 61 74 65 20 3d 0d 0a 20 20 20  eDelegate =..   
df40: 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
df50: 61 63 6b 31 20 61 73 20 53 51 4c 69 74 65 49 6e  ack1 as SQLiteIn
df60: 76 6f 6b 65 44 65 6c 65 67 61 74 65 3b 0d 0a 0d  vokeDelegate;...
df70: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
df80: 6e 76 6f 6b 65 44 65 6c 65 67 61 74 65 20 21 3d  nvokeDelegate !=
df90: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
dfa0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
dfb0: 20 20 20 72 65 74 75 72 6e 20 69 6e 76 6f 6b 65     return invoke
dfc0: 44 65 6c 65 67 61 74 65 2e 49 6e 76 6f 6b 65 28  Delegate.Invoke(
dfd0: 22 49 6e 76 6f 6b 65 22 2c 20 61 72 67 73 29 3b  "Invoke", args);
dfe0: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
dff0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e000: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
e010: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
e020: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
e030: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
e040: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 61 6c        return cal
e050: 6c 62 61 63 6b 31 2e 44 79 6e 61 6d 69 63 49 6e  lback1.DynamicIn
e060: 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20  voke(..         
e070: 20 20 20 20 20 20 20 20 20 47 65 74 49 6e 76 6f           GetInvo
e080: 6b 65 41 72 67 73 28 61 72 67 73 2c 20 66 61 6c  keArgs(args, fal
e090: 73 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  se)); /* throw *
e0a0: 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  /..#else..      
e0b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e0c0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
e0d0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
e0e0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
e0f0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
e100: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e150: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
e160: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
e170: 54 68 69 73 20 76 69 72 74 75 61 6c 20 6d 65 74  This virtual met
e180: 68 6f 64 20 69 73 20 70 61 72 74 20 6f 66 20 74  hod is part of t
e190: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
e1a0: 6e 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 0d  n for aggregate.
e1b0: 0a 20 20 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  .      /// funct
e1c0: 69 6f 6e 73 2e 20 20 53 65 65 20 74 68 65 20 3c  ions.  See the <
e1d0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
e1e0: 46 75 6e 63 74 69 6f 6e 2e 53 74 65 70 22 20 2f  Function.Step" /
e1f0: 3e 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20  > method..      
e200: 2f 2f 2f 20 66 6f 72 20 6d 6f 72 65 20 64 65 74  /// for more det
e210: 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ails...      ///
e220: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e230: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
e240: 6d 65 3d 22 61 72 67 73 22 3e 0d 0a 20 20 20 20  me="args">..    
e250: 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65    /// The argume
e260: 6e 74 73 20 66 6f 72 20 74 68 65 20 61 67 67 72  nts for the aggr
e270: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0d  egate function..
e280: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
e290: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
e2a0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 65 70  param name="step
e2b0: 4e 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20  Number">..      
e2c0: 2f 2f 2f 20 54 68 65 20 73 74 65 70 20 6e 75 6d  /// The step num
e2d0: 62 65 72 20 28 6f 6e 65 20 62 61 73 65 64 29 2e  ber (one based).
e2e0: 20 20 54 68 69 73 20 69 73 20 69 6e 63 72 65 6d    This is increm
e2f0: 65 6d 74 65 64 20 65 61 63 68 20 74 69 6d 65 20  emted each time 
e300: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  the..      /// <
e310: 73 65 65 20 63 72 65 66 3d 22 53 74 65 70 22 20  see cref="Step" 
e320: 2f 3e 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  /> method is cal
e330: 6c 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  led...      /// 
e340: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
e350: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
e360: 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 0d 0a  "contextData">..
e370: 20 20 20 20 20 20 2f 2f 2f 20 41 20 70 6c 61 63        /// A plac
e380: 65 68 6f 6c 64 65 72 20 66 6f 72 20 69 6d 70 6c  eholder for impl
e390: 65 6d 65 6e 74 65 72 73 20 74 6f 20 73 74 6f 72  ementers to stor
e3a0: 65 20 63 6f 6e 74 65 78 74 75 61 6c 20 64 61 74  e contextual dat
e3b0: 61 20 70 65 72 74 61 69 6e 69 6e 67 0d 0a 20 20  a pertaining..  
e3c0: 20 20 20 20 2f 2f 2f 20 74 6f 20 74 68 65 20 63      /// to the c
e3d0: 75 72 72 65 6e 74 20 63 6f 6e 74 65 78 74 2e 0d  urrent context..
e3e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
e3f0: 61 6d 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  am>..      publi
e400: 63 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  c override void 
e410: 53 74 65 70 28 0d 0a 20 20 20 20 20 20 20 20 20  Step(..         
e420: 20 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 2c 20   object[] args, 
e430: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
e440: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
e450: 73 74 65 70 4e 75 6d 62 65 72 2c 20 20 20 20 20  stepNumber,     
e460: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
e470: 20 20 20 20 20 20 20 72 65 66 20 6f 62 6a 65 63         ref objec
e480: 74 20 63 6f 6e 74 65 78 74 44 61 74 61 20 2f 2a  t contextData /*
e490: 20 69 6e 2c 20 6f 75 74 20 2a 2f 0d 0a 20 20 20   in, out */..   
e4a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
e4b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
e4c0: 28 63 61 6c 6c 62 61 63 6b 31 20 3d 3d 20 6e 75  (callback1 == nu
e4d0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ll)..          {
e4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e4f0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
e500: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
e510: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
e520: 20 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d 65          HelperMe
e530: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
e540: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
e550: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
e560: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
e570: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
e580: 20 20 20 20 20 20 4e 6f 43 61 6c 6c 62 61 63 6b        NoCallback
e590: 45 72 72 6f 72 2c 20 22 53 74 65 70 22 29 29 3b  Error, "Step"));
e5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
e5b0: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
e5c0: 65 53 74 65 70 44 65 6c 65 67 61 74 65 20 73 74  eStepDelegate st
e5d0: 65 70 44 65 6c 65 67 61 74 65 20 3d 20 63 61 6c  epDelegate = cal
e5e0: 6c 62 61 63 6b 31 20 61 73 20 53 51 4c 69 74 65  lback1 as SQLite
e5f0: 53 74 65 70 44 65 6c 65 67 61 74 65 3b 0d 0a 0d  StepDelegate;...
e600: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73  .          if (s
e610: 74 65 70 44 65 6c 65 67 61 74 65 20 21 3d 20 6e  tepDelegate != n
e620: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
e630: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e640: 20 73 74 65 70 44 65 6c 65 67 61 74 65 2e 49 6e   stepDelegate.In
e650: 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20  voke(..         
e660: 20 20 20 20 20 20 20 20 20 22 53 74 65 70 22 2c           "Step",
e670: 20 61 72 67 73 2c 20 73 74 65 70 4e 75 6d 62 65   args, stepNumbe
e680: 72 2c 20 72 65 66 20 63 6f 6e 74 65 78 74 44 61  r, ref contextDa
e690: 74 61 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ta); /* throw */
e6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
e6b0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
e6c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
e6d0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
e6e0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
e6f0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
e700: 5b 5d 20 6e 65 77 41 72 67 73 20 3d 20 47 65 74  [] newArgs = Get
e710: 53 74 65 70 41 72 67 73 28 0d 0a 20 20 20 20 20  StepArgs(..     
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
e730: 73 2c 20 73 74 65 70 4e 75 6d 62 65 72 2c 20 63  s, stepNumber, c
e740: 6f 6e 74 65 78 74 44 61 74 61 2c 20 66 61 6c 73  ontextData, fals
e750: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
e760: 20 20 20 20 20 2f 2a 20 49 47 4e 4f 52 45 44 20       /* IGNORED 
e770: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
e780: 20 20 63 61 6c 6c 62 61 63 6b 31 2e 44 79 6e 61    callback1.Dyna
e790: 6d 69 63 49 6e 76 6f 6b 65 28 6e 65 77 41 72 67  micInvoke(newArg
e7a0: 73 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  s); /* throw */.
e7b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e7c0: 20 55 70 64 61 74 65 53 74 65 70 41 72 67 73 28   UpdateStepArgs(
e7d0: 6e 65 77 41 72 67 73 2c 20 72 65 66 20 63 6f 6e  newArgs, ref con
e7e0: 74 65 78 74 44 61 74 61 2c 20 66 61 6c 73 65 29  textData, false)
e7f0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
e800: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
e810: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
e820: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
e830: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
e840: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
e850: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
e8a0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
e8b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
e8c0: 54 68 69 73 20 76 69 72 74 75 61 6c 20 6d 65 74  This virtual met
e8d0: 68 6f 64 20 69 73 20 70 61 72 74 20 6f 66 20 74  hod is part of t
e8e0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
e8f0: 6e 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 0d  n for aggregate.
e900: 0a 20 20 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  .      /// funct
e910: 69 6f 6e 73 2e 20 20 53 65 65 20 74 68 65 20 3c  ions.  See the <
e920: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
e930: 46 75 6e 63 74 69 6f 6e 2e 46 69 6e 61 6c 22 20  Function.Final" 
e940: 2f 3e 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20  /> method..     
e950: 20 2f 2f 2f 20 66 6f 72 20 6d 6f 72 65 20 64 65   /// for more de
e960: 74 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 2f 2f  tails...      //
e970: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
e980: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e990: 61 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61  ame="contextData
e9a0: 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  ">..      /// A 
e9b0: 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20  placeholder for 
e9c0: 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20  implementers to 
e9d0: 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c  store contextual
e9e0: 20 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67   data pertaining
e9f0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 74  ..      /// to t
ea00: 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65  he current conte
ea10: 78 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  xt...      /// <
ea20: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f  /param>..      /
ea30: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
ea40: 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75      /// The resu
ea50: 6c 74 20 6f 66 20 74 68 65 20 61 67 67 72 65 67  lt of the aggreg
ea60: 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  ate function... 
ea70: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
ea80: 6e 73 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  ns>..      publi
ea90: 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  c override objec
eaa0: 74 20 46 69 6e 61 6c 28 0d 0a 20 20 20 20 20 20  t Final(..      
eab0: 20 20 20 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65      object conte
eac0: 78 74 44 61 74 61 20 2f 2a 20 69 6e 20 2a 2f 0d  xtData /* in */.
ead0: 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20  .          )..  
eae0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
eaf0: 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 32 20 3d   if (callback2 =
eb00: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
eb10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eb20: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
eb30: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
eb40: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70              Help
eb60: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
eb70: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
eb80: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
eb90: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
eba0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
ebb0: 20 20 20 20 20 20 20 20 20 20 4e 6f 43 61 6c 6c            NoCall
ebc0: 62 61 63 6b 45 72 72 6f 72 2c 20 22 46 69 6e 61  backError, "Fina
ebd0: 6c 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  l"));..         
ebe0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ebf0: 53 51 4c 69 74 65 46 69 6e 61 6c 44 65 6c 65 67  SQLiteFinalDeleg
ec00: 61 74 65 20 66 69 6e 61 6c 44 65 6c 65 67 61 74  ate finalDelegat
ec10: 65 20 3d 20 63 61 6c 6c 62 61 63 6b 32 20 61 73  e = callback2 as
ec20: 20 53 51 4c 69 74 65 46 69 6e 61 6c 44 65 6c 65   SQLiteFinalDele
ec30: 67 61 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gate;....       
ec40: 20 20 20 69 66 20 28 66 69 6e 61 6c 44 65 6c 65     if (finalDele
ec50: 67 61 74 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  gate != null).. 
ec60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ec70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ec80: 20 66 69 6e 61 6c 44 65 6c 65 67 61 74 65 2e 49   finalDelegate.I
ec90: 6e 76 6f 6b 65 28 22 46 69 6e 61 6c 22 2c 20 63  nvoke("Final", c
eca0: 6f 6e 74 65 78 74 44 61 74 61 29 3b 20 2f 2a 20  ontextData); /* 
ecb0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
ecc0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
ecd0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
ece0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
ecf0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
ed00: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
ed10: 20 20 72 65 74 75 72 6e 20 63 61 6c 6c 62 61 63    return callbac
ed20: 6b 31 2e 44 79 6e 61 6d 69 63 49 6e 76 6f 6b 65  k1.DynamicInvoke
ed30: 28 47 65 74 46 69 6e 61 6c 41 72 67 73 28 0d 0a  (GetFinalArgs(..
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed50: 20 20 63 6f 6e 74 65 78 74 44 61 74 61 2c 20 66    contextData, f
ed60: 61 6c 73 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77  alse)); /* throw
ed70: 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20   */..#else..    
ed80: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
ed90: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
eda0: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
edb0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
edc0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
edd0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ee20: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
ee30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
ee40: 2f 20 54 68 69 73 20 76 69 72 74 75 61 6c 20 6d  / This virtual m
ee50: 65 74 68 6f 64 20 69 73 20 70 61 72 74 20 6f 66  ethod is part of
ee60: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
ee70: 69 6f 6e 20 66 6f 72 20 63 6f 6c 6c 61 74 69 6e  ion for collatin
ee80: 67 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 73 65 71  g..      /// seq
ee90: 75 65 6e 63 65 73 2e 20 20 53 65 65 20 74 68 65  uences.  See the
eea0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
eeb0: 74 65 46 75 6e 63 74 69 6f 6e 2e 43 6f 6d 70 61  teFunction.Compa
eec0: 72 65 22 20 2f 3e 20 6d 65 74 68 6f 64 0d 0a 20  re" /> method.. 
eed0: 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 6d 6f 72       /// for mor
eee0: 65 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20  e details...    
eef0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ef00: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ..      /// <par
ef10: 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22  am name="param1"
ef20: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
ef30: 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 74 6f   first string to
ef40: 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20 20 20 20   compare...     
ef50: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
ef60: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
ef70: 6e 61 6d 65 3d 22 70 61 72 61 6d 32 22 3e 0d 0a  name="param2">..
ef80: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 65        /// The se
ef90: 63 6f 6e 64 20 73 74 72 6e 69 67 20 74 6f 20 63  cond strnig to c
efa0: 6f 6d 70 61 72 65 2e 0d 0a 20 20 20 20 20 20 2f  ompare...      /
efb0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
efc0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
efd0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 70 6f  ..      /// A po
efe0: 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 20 69  sitive integer i
eff0: 66 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20  f the <paramref 
f000: 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22 20 2f 3e  name="param1" />
f010: 20 70 61 72 61 6d 65 74 65 72 20 69 73 0d 0a 20   parameter is.. 
f020: 20 20 20 20 20 2f 2f 2f 20 67 72 65 61 74 65 72       /// greater
f030: 20 74 68 61 6e 20 74 68 65 20 3c 70 61 72 61 6d   than the <param
f040: 72 65 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32  ref name="param2
f050: 22 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 2c 20  " /> parameter, 
f060: 61 20 6e 65 67 61 74 69 76 65 0d 0a 20 20 20 20  a negative..    
f070: 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 69 66    /// integer if
f080: 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20 6e   the <paramref n
f090: 61 6d 65 3d 22 70 61 72 61 6d 31 22 20 2f 3e 20  ame="param1" /> 
f0a0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6c 65 73  parameter is les
f0b0: 73 20 74 68 61 6e 0d 0a 20 20 20 20 20 20 2f 2f  s than..      //
f0c0: 2f 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20  / the <paramref 
f0d0: 6e 61 6d 65 3d 22 70 61 72 61 6d 32 22 20 2f 3e  name="param2" />
f0e0: 20 70 61 72 61 6d 65 74 65 72 2c 20 6f 72 20 7a   parameter, or z
f0f0: 65 72 6f 20 69 66 20 74 68 65 79 20 61 72 65 0d  ero if they are.
f100: 0a 20 20 20 20 20 20 2f 2f 2f 20 65 71 75 61 6c  .      /// equal
f110: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  ...      /// </r
f120: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70  eturns>..      p
f130: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 69  ublic override i
f140: 6e 74 20 43 6f 6d 70 61 72 65 28 0d 0a 20 20 20  nt Compare(..   
f150: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 61         string pa
f160: 72 61 6d 31 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  ram1, /* in */..
f170: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f180: 20 70 61 72 61 6d 32 20 20 2f 2a 20 69 6e 20 2a   param2  /* in *
f190: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  /..          )..
f1a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f1b0: 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 31     if (callback1
f1c0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
f1d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f1e0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f1f0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
f200: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48 65                He
f220: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
f230: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
f250: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
f260: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
f270: 20 20 20 20 20 20 20 20 20 20 20 20 4e 6f 43 61              NoCa
f280: 6c 6c 62 61 63 6b 45 72 72 6f 72 2c 20 22 43 6f  llbackError, "Co
f290: 6d 70 61 72 65 22 29 29 3b 0d 0a 20 20 20 20 20  mpare"));..     
f2a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f2b0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6d 70 61 72      SQLiteCompar
f2c0: 65 44 65 6c 65 67 61 74 65 20 63 6f 6d 70 61 72  eDelegate compar
f2d0: 65 44 65 6c 65 67 61 74 65 20 3d 0d 0a 20 20 20  eDelegate =..   
f2e0: 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
f2f0: 61 63 6b 31 20 61 73 20 53 51 4c 69 74 65 43 6f  ack1 as SQLiteCo
f300: 6d 70 61 72 65 44 65 6c 65 67 61 74 65 3b 0d 0a  mpareDelegate;..
f310: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
f320: 63 6f 6d 70 61 72 65 44 65 6c 65 67 61 74 65 20  compareDelegate 
f330: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
f340: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f350: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70       return comp
f360: 61 72 65 44 65 6c 65 67 61 74 65 2e 49 6e 76 6f  areDelegate.Invo
f370: 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ke(..           
f380: 20 20 20 20 20 20 20 22 43 6f 6d 70 61 72 65 22         "Compare"
f390: 2c 20 70 61 72 61 6d 31 2c 20 70 61 72 61 6d 32  , param1, param2
f3a0: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
f3b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f3c0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
f3d0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50         {..#if !P
f3e0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
f3f0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
f400: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 72          object r
f410: 65 73 75 6c 74 20 3d 20 63 61 6c 6c 62 61 63 6b  esult = callback
f420: 31 2e 44 79 6e 61 6d 69 63 49 6e 76 6f 6b 65 28  1.DynamicInvoke(
f430: 47 65 74 43 6f 6d 70 61 72 65 41 72 67 73 28 0d  GetCompareArgs(.
f440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f450: 20 20 20 70 61 72 61 6d 31 2c 20 70 61 72 61 6d     param1, param
f460: 32 2c 20 66 61 6c 73 65 29 29 3b 20 2f 2a 20 74  2, false)); /* t
f470: 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  hrow */....     
f480: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
f490: 75 6c 74 20 69 73 20 69 6e 74 29 0d 0a 20 20 20  ult is int)..   
f4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f4b0: 65 74 75 72 6e 20 28 69 6e 74 29 72 65 73 75 6c  eturn (int)resul
f4c0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
f4d0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
f4e0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
f4f0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
f500: 20 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70              Help
f510: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
f520: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
f530: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
f540: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
f550: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
f560: 20 20 20 20 20 20 20 20 20 20 52 65 73 75 6c 74            Result
f570: 49 6e 74 33 32 45 72 72 6f 72 2c 20 22 43 6f 6d  Int32Error, "Com
f580: 70 61 72 65 22 29 29 3b 0d 0a 23 65 6c 73 65 0d  pare"));..#else.
f590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
f5a0: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
f5b0: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
f5c0: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
f5d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f5e0: 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65 67  }..      #endreg
f5f0: 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f  ion..  }....  //
f600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f650: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
f660: 20 20 2f 2f 2f 20 45 78 74 65 6e 64 73 20 53 51    /// Extends SQ
f670: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 61 6e 64  LiteFunction and
f680: 20 61 6c 6c 6f 77 73 20 61 6e 20 69 6e 68 65 72   allows an inher
f690: 69 74 65 64 20 63 6c 61 73 73 20 74 6f 20 6f 62  ited class to ob
f6a0: 74 61 69 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69  tain the collati
f6b0: 6e 67 20 73 65 71 75 65 6e 63 65 20 61 73 73 6f  ng sequence asso
f6c0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 66 75  ciated with a fu
f6d0: 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 0d 0a 20 20  nction call...  
f6e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f6f0: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
f700: 0a 20 20 2f 2f 2f 20 55 73 65 72 2d 64 65 66 69  .  /// User-defi
f710: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 63 61  ned functions ca
f720: 6e 20 63 61 6c 6c 20 74 68 65 20 47 65 74 43 6f  n call the GetCo
f730: 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28  llationSequence(
f740: 29 20 6d 65 74 68 6f 64 20 69 6e 20 74 68 69 73  ) method in this
f750: 20 63 6c 61 73 73 20 61 6e 64 20 75 73 65 20 69   class and use i
f760: 74 20 74 6f 20 63 6f 6d 70 61 72 65 20 73 74 72  t to compare str
f770: 69 6e 67 73 20 61 6e 64 20 63 68 61 72 20 61 72  ings and char ar
f780: 72 61 79 73 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 72  rays...  /// </r
f790: 65 6d 61 72 6b 73 3e 0d 0a 20 20 70 75 62 6c 69  emarks>..  publi
f7a0: 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 46 75  c class SQLiteFu
f7b0: 6e 63 74 69 6f 6e 45 78 20 3a 20 53 51 4c 69 74  nctionEx : SQLit
f7c0: 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 7b 0d 0a  eFunction..  {..
f7d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
f7e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4f 62 74 61 69  >..    /// Obtai
f7f0: 6e 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  ns the collating
f800: 20 73 65 71 75 65 6e 63 65 20 69 6e 20 65 66 66   sequence in eff
f810: 65 63 74 20 66 6f 72 20 74 68 65 20 67 69 76 65  ect for the give
f820: 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20  n function...   
f830: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
f840: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
f850: 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  s></returns>..  
f860: 20 20 70 72 6f 74 65 63 74 65 64 20 43 6f 6c 6c    protected Coll
f870: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65  ationSequence Ge
f880: 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e  tCollationSequen
f890: 63 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ce()..    {..   
f8a0: 20 20 20 72 65 74 75 72 6e 20 5f 62 61 73 65 2e     return _base.
f8b0: 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  GetCollationSequ
f8c0: 65 6e 63 65 28 74 68 69 73 2c 20 5f 63 6f 6e 74  ence(this, _cont
f8d0: 65 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ext);..    }....
f8e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f940: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
f950: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
f960: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
f970: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f  ..    private bo
f980: 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
f990: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
f9a0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
f9b0: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
f9c0: 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
f9d0: 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
f9e0: 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
f9f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
fa00: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
fa10: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74  posedException(t
fa20: 79 70 65 6f 66 28 53 51 4c 69 74 65 46 75 6e 63  ypeof(SQLiteFunc
fa30: 74 69 6f 6e 45 78 29 2e 4e 61 6d 65 29 3b 0d 0a  tionEx).Name);..
fa40: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
fa50: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
fa60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fab0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
fac0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
fad0: 2f 2f 20 43 6c 65 61 6e 73 20 75 70 20 72 65 73  // Cleans up res
fae0: 6f 75 72 63 65 73 20 28 6e 61 74 69 76 65 20 61  ources (native a
faf0: 6e 64 20 6d 61 6e 61 67 65 64 29 20 61 73 73 6f  nd managed) asso
fb00: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
fb10: 63 75 72 72 65 6e 74 20 69 6e 73 74 61 6e 63 65  current instance
fb20: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
fb30: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
fb40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70  param name="disp
fb50: 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f  osing">..    ///
fb60: 20 5a 65 72 6f 20 77 68 65 6e 20 62 65 69 6e 67   Zero when being
fb70: 20 64 69 73 70 6f 73 65 64 20 76 69 61 20 67 61   disposed via ga
fb80: 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e  rbage collection
fb90: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6e 6f 6e  ; otherwise, non
fba0: 2d 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20  -zero...    /// 
fbb0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 72  </param>..    pr
fbc0: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
fbd0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
fbe0: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  ol disposing).. 
fbf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
fc00: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
fc10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
fc20: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
fc30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fc40: 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64           //if (d
fc50: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
fc60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a             //{..
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc80: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
fc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
fcc0: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
fcd0: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
fce0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
fcf0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
fd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd20: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
fd30: 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20      //}....     
fd40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
fd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd70: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
fd80: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
fd90: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
fda0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
fdb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
fdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fde0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
fdf0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
fe00: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
fe10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fe20: 20 20 20 20 20 62 61 73 65 2e 44 69 73 70 6f 73       base.Dispos
fe30: 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d  e(disposing);...
fe40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
fe50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
fe60: 4e 4f 54 45 3a 20 45 76 65 72 79 74 68 69 6e 67  NOTE: Everything
fe70: 20 73 68 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79   should be fully
fe80: 20 64 69 73 70 6f 73 65 64 20 61 74 20 74 68 69   disposed at thi
fe90: 73 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20  s point...      
fea0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
feb0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
fec0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
fed0: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  }..    }..    #e
fee0: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d  ndregion..  }...
fef0: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
ff00: 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 74 79 70 65  ..  /// The type
ff10: 20 6f 66 20 75 73 65 72 2d 64 65 66 69 6e 65 64   of user-defined
ff20: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64 65 63   function to dec
ff30: 6c 61 72 65 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  lare..  /// </su
ff40: 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63  mmary>..  public
ff50: 20 65 6e 75 6d 20 46 75 6e 63 74 69 6f 6e 54 79   enum FunctionTy
ff60: 70 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f  pe..  {..    ///
ff70: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ff80: 2f 2f 2f 20 53 63 61 6c 61 72 20 66 75 6e 63 74  /// Scalar funct
ff90: 69 6f 6e 73 20 61 72 65 20 64 65 73 69 67 6e 65  ions are designe
ffa0: 64 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 61  d to be called a
ffb0: 6e 64 20 72 65 74 75 72 6e 20 61 20 72 65 73 75  nd return a resu
ffc0: 6c 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  lt immediately. 
ffd0: 20 45 78 61 6d 70 6c 65 73 20 69 6e 63 6c 75 64   Examples includ
ffe0: 65 20 41 42 53 28 29 2c 20 55 70 70 65 72 28 29  e ABS(), Upper()
fff0: 2c 20 4c 6f 77 65 72 28 29 2c 20 65 74 63 2e 0d  , Lower(), etc..
10000 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
10010 72 79 3e 0d 0a 20 20 20 20 53 63 61 6c 61 72 20  ry>..    Scalar 
10020 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  = 0,..    /// <s
10030 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
10040 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
10050 69 6f 6e 73 20 61 72 65 20 64 65 73 69 67 6e 65  ions are designe
10060 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
10070 64 61 74 61 20 75 6e 74 69 6c 20 74 68 65 20 65  data until the e
10080 6e 64 20 6f 66 20 61 20 63 61 6c 6c 20 61 6e 64  nd of a call and
10090 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61 20 72   then return a r
100a0 65 73 75 6c 74 20 67 6c 65 61 6e 65 64 20 66 72  esult gleaned fr
100b0 6f 6d 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  om the accumulat
100c0 65 64 20 64 61 74 61 2e 0d 0a 20 20 20 20 2f 2f  ed data...    //
100d0 2f 20 45 78 61 6d 70 6c 65 73 20 69 6e 63 6c 75  / Examples inclu
100e0 64 65 20 53 55 4d 28 29 2c 20 43 4f 55 4e 54 28  de SUM(), COUNT(
100f0 29 2c 20 41 56 47 28 29 2c 20 65 74 63 2e 0d 0a  ), AVG(), etc...
10100 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10110 79 3e 0d 0a 20 20 20 20 41 67 67 72 65 67 61 74  y>..    Aggregat
10120 65 20 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f 2f 20  e = 1,..    /// 
10130 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
10140 2f 2f 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  // Collating seq
10150 75 65 6e 63 65 73 20 61 72 65 20 75 73 65 64 20  uences are used 
10160 74 6f 20 73 6f 72 74 20 74 65 78 74 75 61 6c 20  to sort textual 
10170 64 61 74 61 20 69 6e 20 61 20 63 75 73 74 6f 6d  data in a custom
10180 20 6d 61 6e 6e 65 72 2c 20 61 6e 64 20 61 70 70   manner, and app
10190 65 61 72 20 69 6e 20 61 6e 20 4f 52 44 45 52 20  ear in an ORDER 
101a0 42 59 20 63 6c 61 75 73 65 2e 20 20 54 79 70 69  BY clause.  Typi
101b0 63 61 6c 6c 79 20 74 65 78 74 20 69 6e 20 61 6e  cally text in an
101c0 20 4f 52 44 45 52 20 42 59 20 69 73 0d 0a 20 20   ORDER BY is..  
101d0 20 20 2f 2f 2f 20 73 6f 72 74 65 64 20 75 73 69    /// sorted usi
101e0 6e 67 20 61 20 73 74 72 61 69 67 68 74 20 63 61  ng a straight ca
101f0 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 63  se-insensitive c
10200 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
10210 6f 6e 2e 20 20 43 75 73 74 6f 6d 20 63 6f 6c 6c  on.  Custom coll
10220 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
10230 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 61  can be used to a
10240 6c 74 65 72 20 74 68 65 20 62 65 68 61 76 69 6f  lter the behavio
10250 72 20 6f 66 20 74 65 78 74 20 73 6f 72 74 69 6e  r of text sortin
10260 67 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 61 20  g..    /// in a 
10270 75 73 65 72 2d 64 65 66 69 6e 65 64 20 6d 61 6e  user-defined man
10280 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ner...    /// </
10290 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 43 6f  summary>..    Co
102a0 6c 6c 61 74 69 6f 6e 20 3d 20 32 2c 0d 0a 20 20  llation = 2,..  
102b0 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }....  /// <summ
102c0 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41 6e 20 69  ary>..  /// An i
102d0 6e 74 65 72 6e 61 6c 20 63 61 6c 6c 62 61 63 6b  nternal callback
102e0 20 64 65 6c 65 67 61 74 65 20 64 65 63 6c 61 72   delegate declar
102f0 61 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ation...  /// </
10300 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
10310 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
10320 74 65 78 74 22 3e 52 61 77 20 6e 61 74 69 76 65  text">Raw native
10330 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   context pointer
10340 20 66 6f 72 20 74 68 65 20 75 73 65 72 20 66 75   for the user fu
10350 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d  nction.</param>.
10360 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61  .  /// <param na
10370 6d 65 3d 22 61 72 67 63 22 3e 54 6f 74 61 6c 20  me="argc">Total 
10380 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
10390 6e 74 73 20 74 6f 20 74 68 65 20 75 73 65 72 20  nts to the user 
103a0 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  function.</param
103b0 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
103c0 6e 61 6d 65 3d 22 61 72 67 76 22 3e 52 61 77 20  name="argv">Raw 
103d0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
103e0 6f 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 72  o the array of r
103f0 61 77 20 6e 61 74 69 76 65 20 61 72 67 75 6d 65  aw native argume
10400 6e 74 20 70 6f 69 6e 74 65 72 73 2e 3c 2f 70 61  nt pointers.</pa
10410 72 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46  ram>..#if !PLATF
10420 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
10430 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67  WORK..  [Unmanag
10440 65 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65  edFunctionPointe
10450 72 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74  r(CallingConvent
10460 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e  ion.Cdecl)]..#en
10470 64 69 66 0d 0a 20 20 70 75 62 6c 69 63 20 64 65  dif..  public de
10480 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c 69  legate void SQLi
10490 74 65 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50 74  teCallback(IntPt
104a0 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61  r context, int a
104b0 72 67 63 2c 20 49 6e 74 50 74 72 20 61 72 67 76  rgc, IntPtr argv
104c0 29 3b 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  );..  /// <summa
104d0 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41 6e 20 69 6e  ry>..  /// An in
104e0 74 65 72 6e 61 6c 20 66 69 6e 61 6c 20 63 61 6c  ternal final cal
104f0 6c 62 61 63 6b 20 64 65 6c 65 67 61 74 65 20 64  lback delegate d
10500 65 63 6c 61 72 61 74 69 6f 6e 2e 0d 0a 20 20 2f  eclaration...  /
10510 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10520 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
10530 3d 22 63 6f 6e 74 65 78 74 22 3e 52 61 77 20 63  ="context">Raw c
10540 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 66  ontext pointer f
10550 6f 72 20 74 68 65 20 75 73 65 72 20 66 75 6e 63  or the user func
10560 74 69 6f 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69  tion</param>..#i
10570 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
10580 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
10590 5b 55 6e 6d 61 6e 61 67 65 64 46 75 6e 63 74 69  [UnmanagedFuncti
105a0 6f 6e 50 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e  onPointer(Callin
105b0 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63  gConvention.Cdec
105c0 6c 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69  l)]..#endif..  i
105d0 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
105e0 20 76 6f 69 64 20 53 51 4c 69 74 65 46 69 6e 61   void SQLiteFina
105f0 6c 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50 74 72  lCallback(IntPtr
10600 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 2f 2f   context);..  //
10610 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
10620 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 61 6c 6c  // Internal call
10630 62 61 63 6b 20 64 65 6c 65 67 61 74 65 20 66 6f  back delegate fo
10640 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 63  r implementing c
10650 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10660 65 73 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  es..  /// </summ
10670 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ary>..  /// <par
10680 61 6d 20 6e 61 6d 65 3d 22 70 75 73 65 72 22 3e  am name="puser">
10690 4e 6f 74 20 75 73 65 64 3c 2f 70 61 72 61 6d 3e  Not used</param>
106a0 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e  ..  /// <param n
106b0 61 6d 65 3d 22 6c 65 6e 31 22 3e 4c 65 6e 67 74  ame="len1">Lengt
106c0 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
106d0 70 76 31 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f  pv1</param>..  /
106e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
106f0 70 76 31 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20  pv1">Pointer to 
10700 74 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67  the first string
10710 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72   to compare</par
10720 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61  am>..  /// <para
10730 6d 20 6e 61 6d 65 3d 22 6c 65 6e 32 22 3e 4c 65  m name="len2">Le
10740 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
10750 6e 67 20 70 76 32 3c 2f 70 61 72 61 6d 3e 0d 0a  ng pv2</param>..
10760 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
10770 65 3d 22 70 76 32 22 3e 50 6f 69 6e 74 65 72 20  e="pv2">Pointer 
10780 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 20 73 74  to the second st
10790 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65 3c  ring to compare<
107a0 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c  /param>..  /// <
107b0 72 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20  returns>Returns 
107c0 2d 31 20 69 66 20 74 68 65 20 66 69 72 73 74 20  -1 if the first 
107d0 73 74 72 69 6e 67 20 69 73 20 6c 65 73 73 20 74  string is less t
107e0 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e 20  han the second. 
107f0 20 30 20 69 66 20 74 68 65 79 20 61 72 65 20 65   0 if they are e
10800 71 75 61 6c 2c 20 6f 72 20 31 20 69 66 20 74 68  qual, or 1 if th
10810 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 69  e first string i
10820 73 20 67 72 65 61 74 65 72 0d 0a 20 20 2f 2f 2f  s greater..  ///
10830 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64   than the second
10840 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 23 69 66  .</returns>..#if
10850 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
10860 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b  CTFRAMEWORK..  [
10870 55 6e 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f  UnmanagedFunctio
10880 6e 50 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67  nPointer(Calling
10890 43 6f 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c  Convention.Cdecl
108a0 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e  )]..#endif..  in
108b0 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
108c0 69 6e 74 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74  int SQLiteCollat
108d0 69 6f 6e 28 49 6e 74 50 74 72 20 70 75 73 65 72  ion(IntPtr puser
108e0 2c 20 69 6e 74 20 6c 65 6e 31 2c 20 49 6e 74 50  , int len1, IntP
108f0 74 72 20 70 76 31 2c 20 69 6e 74 20 6c 65 6e 32  tr pv1, int len2
10900 2c 20 49 6e 74 50 74 72 20 70 76 32 29 3b 0d 0a  , IntPtr pv2);..
10910 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
10920 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 74 79 70  >..  /// The typ
10930 65 20 6f 66 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e of collating s
10940 65 71 75 65 6e 63 65 0d 0a 20 20 2f 2f 2f 20 3c  equence..  /// <
10950 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
10960 6c 69 63 20 65 6e 75 6d 20 43 6f 6c 6c 61 74 69  lic enum Collati
10970 6f 6e 54 79 70 65 45 6e 75 6d 0d 0a 20 20 7b 0d  onTypeEnum..  {.
10980 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
10990 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
109a0 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20  built-in BINARY 
109b0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
109c0 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ce..    /// </su
109d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 42 69 6e 61  mmary>..    Bina
109e0 72 79 20 3d 20 31 2c 0d 0a 20 20 20 20 2f 2f 2f  ry = 1,..    ///
109f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10a00 2f 2f 2f 20 54 68 65 20 62 75 69 6c 74 2d 69 6e  /// The built-in
10a10 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69 6e   NOCASE collatin
10a20 67 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20 20  g sequence..    
10a30 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10a40 20 20 20 20 4e 6f 43 61 73 65 20 3d 20 32 2c 0d      NoCase = 2,.
10a50 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
10a60 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
10a70 62 75 69 6c 74 2d 69 6e 20 52 45 56 45 52 53 45  built-in REVERSE
10a80 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10a90 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nce..    /// </s
10aa0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 52 65 76  ummary>..    Rev
10ab0 65 72 73 65 20 3d 20 33 2c 0d 0a 20 20 20 20 2f  erse = 3,..    /
10ac0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10ad0 20 20 2f 2f 2f 20 41 20 63 75 73 74 6f 6d 20 75    /// A custom u
10ae0 73 65 72 2d 64 65 66 69 6e 65 64 20 63 6f 6c 6c  ser-defined coll
10af0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a  ating sequence..
10b00 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10b10 79 3e 0d 0a 20 20 20 20 43 75 73 74 6f 6d 20 3d  y>..    Custom =
10b20 20 30 2c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f   0,..  }....  //
10b30 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
10b40 2f 2f 20 54 68 65 20 65 6e 63 6f 64 69 6e 67 20  // The encoding 
10b50 74 79 70 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  type the collati
10b60 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65 73  on sequence uses
10b70 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
10b80 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75  y>..  public enu
10b90 6d 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  m CollationEncod
10ba0 69 6e 67 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20  ingEnum..  {..  
10bb0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10bc0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6c  .    /// The col
10bd0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
10be0 69 73 20 55 54 46 38 0d 0a 20 20 20 20 2f 2f 2f  is UTF8..    ///
10bf0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10c00 20 55 54 46 38 20 3d 20 31 2c 0d 0a 20 20 20 20   UTF8 = 1,..    
10c10 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10c20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6c 6c 61     /// The colla
10c30 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
10c40 20 55 54 46 31 36 20 6c 69 74 74 6c 65 2d 65 6e   UTF16 little-en
10c50 64 69 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  dian..    /// </
10c60 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 55 54  summary>..    UT
10c70 46 31 36 4c 45 20 3d 20 32 2c 0d 0a 20 20 20 20  F16LE = 2,..    
10c80 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10c90 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6c 6c 61     /// The colla
10ca0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73  tion sequence is
10cb0 20 55 54 46 31 36 20 62 69 67 2d 65 6e 64 69 61   UTF16 big-endia
10cc0 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
10cd0 6d 61 72 79 3e 0d 0a 20 20 20 20 55 54 46 31 36  mary>..    UTF16
10ce0 42 45 20 3d 20 33 2c 0d 0a 20 20 7d 0d 0a 0d 0a  BE = 3,..  }....
10cf0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10d00 0a 20 20 2f 2f 2f 20 41 20 73 74 72 75 63 74 20  .  /// A struct 
10d10 64 65 73 63 72 69 62 69 6e 67 20 74 68 65 20 63  describing the c
10d20 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10d30 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  e a function is 
10d40 65 78 65 63 75 74 69 6e 67 20 69 6e 0d 0a 20 20  executing in..  
10d50 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10d60 20 20 70 75 62 6c 69 63 20 73 74 72 75 63 74 20    public struct 
10d70 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
10d80 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20  e..  {..    /// 
10d90 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
10da0 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
10db0 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
10dc0 75 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  uence..    /// <
10dd0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
10de0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61 6d  ublic string Nam
10df0 65 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  e;..    /// <sum
10e00 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
10e10 68 65 20 74 79 70 65 20 6f 66 20 63 6f 6c 6c 61  he type of colla
10e20 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a 20  ting sequence.. 
10e30 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
10e40 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 43 6f  >..    public Co
10e50 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 20  llationTypeEnum 
10e60 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  Type;....    ///
10e70 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10e80 2f 2f 2f 20 54 68 65 20 74 65 78 74 20 65 6e 63  /// The text enc
10e90 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6c  oding of the col
10ea0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 0d  lation sequence.
10eb0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
10ec0 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
10ed0 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
10ee0 67 45 6e 75 6d 20 45 6e 63 6f 64 69 6e 67 3b 0d  gEnum Encoding;.
10ef0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
10f00 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f  ary>..    /// Co
10f10 6e 74 65 78 74 20 6f 66 20 74 68 65 20 66 75 6e  ntext of the fun
10f20 63 74 69 6f 6e 20 74 68 61 74 20 72 65 71 75 65  ction that reque
10f30 73 74 65 64 20 74 68 65 20 63 6f 6c 6c 61 74 69  sted the collati
10f40 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20  ng sequence..   
10f50 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10f60 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51  .    internal SQ
10f70 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 5f 66 75  LiteFunction _fu
10f80 6e 63 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  nc;....    /// <
10f90 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10fa0 2f 20 43 61 6c 6c 73 20 74 68 65 20 62 61 73 65  / Calls the base
10fb0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10fc0 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  nce to compare t
10fd0 77 6f 20 73 74 72 69 6e 67 73 0d 0a 20 20 20 20  wo strings..    
10fe0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10ff0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
11000 61 6d 65 3d 22 73 31 22 3e 54 68 65 20 66 69 72  ame="s1">The fir
11010 73 74 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d  st string to com
11020 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  pare</param>..  
11030 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11040 65 3d 22 73 32 22 3e 54 68 65 20 73 65 63 6f 6e  e="s2">The secon
11050 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70  d string to comp
11060 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  are</param>..   
11070 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 2d 31   /// <returns>-1
11080 20 69 66 20 73 31 20 69 73 20 6c 65 73 73 20 74   if s1 is less t
11090 68 61 6e 20 73 32 2c 20 30 20 69 66 20 73 31 20  han s2, 0 if s1 
110a0 69 73 20 65 71 75 61 6c 20 74 6f 20 73 32 2c 20  is equal to s2, 
110b0 61 6e 64 20 31 20 69 66 20 73 31 20 69 73 20 67  and 1 if s1 is g
110c0 72 65 61 74 65 72 20 74 68 61 6e 20 73 32 3c 2f  reater than s2</
110d0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
110e0 62 6c 69 63 20 69 6e 74 20 43 6f 6d 70 61 72 65  blic int Compare
110f0 28 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69  (string s1, stri
11100 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b 0d 0a 20  ng s2)..    {.. 
11110 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66 75 6e       return _fun
11120 63 2e 5f 62 61 73 65 2e 43 6f 6e 74 65 78 74 43  c._base.ContextC
11130 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 45 6e  ollateCompare(En
11140 63 6f 64 69 6e 67 2c 20 5f 66 75 6e 63 2e 5f 63  coding, _func._c
11150 6f 6e 74 65 78 74 2c 20 73 31 2c 20 73 32 29 3b  ontext, s1, s2);
11160 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
11170 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
11180 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
11190 62 61 73 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73  base collating s
111a0 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61  equence to compa
111b0 72 65 20 74 77 6f 20 63 68 61 72 61 63 74 65 72  re two character
111c0 20 61 72 72 61 79 73 0d 0a 20 20 20 20 2f 2f 2f   arrays..    ///
111d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
111e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
111f0 3d 22 63 31 22 3e 54 68 65 20 66 69 72 73 74 20  ="c1">The first 
11200 61 72 72 61 79 20 74 6f 20 63 6f 6d 70 61 72 65  array to compare
11210 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
11220 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
11230 32 22 3e 54 68 65 20 73 65 63 6f 6e 64 20 61 72  2">The second ar
11240 72 61 79 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f  ray to compare</
11250 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
11260 3c 72 65 74 75 72 6e 73 3e 2d 31 20 69 66 20 63  <returns>-1 if c
11270 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 63  1 is less than c
11280 32 2c 20 30 20 69 66 20 63 31 20 69 73 20 65 71  2, 0 if c1 is eq
11290 75 61 6c 20 74 6f 20 63 32 2c 20 61 6e 64 20 31  ual to c2, and 1
112a0 20 69 66 20 63 31 20 69 73 20 67 72 65 61 74 65   if c1 is greate
112b0 72 20 74 68 61 6e 20 63 32 3c 2f 72 65 74 75 72  r than c2</retur
112c0 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
112d0 69 6e 74 20 43 6f 6d 70 61 72 65 28 63 68 61 72  int Compare(char
112e0 5b 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32  [] c1, char[] c2
112f0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
11300 72 65 74 75 72 6e 20 5f 66 75 6e 63 2e 5f 62 61  return _func._ba
11310 73 65 2e 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  se.ContextCollat
11320 65 43 6f 6d 70 61 72 65 28 45 6e 63 6f 64 69 6e  eCompare(Encodin
11330 67 2c 20 5f 66 75 6e 63 2e 5f 63 6f 6e 74 65 78  g, _func._contex
11340 74 2c 20 63 31 2c 20 63 32 29 3b 0d 0a 20 20 20  t, c1, c2);..   
11350 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a               }..  }..}..