System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact e3c6311a86b006bfa74bbc40051b87909275d06d:


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 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  (t))..      {.. 
39c0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
39d0: 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a  Affinity.Null:..
39e0: 20 20 20 20 20 20 20 20 20 20 5f 62 61 73 65 2e            _base.
39f0: 52 65 74 75 72 6e 4e 75 6c 6c 28 63 6f 6e 74 65  ReturnNull(conte
3a00: 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  xt);..          
3a10: 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20  return;..       
3a20: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
3a30: 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20 20 20 20  ty.Int64:..     
3a40: 20 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72       _base.Retur
3a50: 6e 49 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  nInt64(context, 
3a60: 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 36 34 28  Convert.ToInt64(
3a70: 72 65 74 75 72 6e 56 61 6c 75 65 2c 20 43 75 6c  returnValue, Cul
3a80: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
3a90: 43 75 6c 74 75 72 65 29 29 3b 0d 0a 20 20 20 20  Culture));..    
3aa0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20        return;.. 
3ab0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3ac0: 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
3ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 62 61 73  ..          _bas
3ae0: 65 2e 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 63  e.ReturnDouble(c
3af0: 6f 6e 74 65 78 74 2c 20 43 6f 6e 76 65 72 74 2e  ontext, Convert.
3b00: 54 6f 44 6f 75 62 6c 65 28 72 65 74 75 72 6e 56  ToDouble(returnV
3b10: 61 6c 75 65 2c 20 43 75 6c 74 75 72 65 49 6e 66  alue, CultureInf
3b20: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
3b30: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ));..          r
3b40: 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20  eturn;..        
3b50: 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
3b60: 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20 20 20 20  y.Text:..       
3b70: 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 54     _base.ReturnT
3b80: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 72 65 74  ext(context, ret
3b90: 75 72 6e 56 61 6c 75 65 2e 54 6f 53 74 72 69 6e  urnValue.ToStrin
3ba0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
3bb0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20   return;..      
3bc0: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
3bd0: 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
3be0: 20 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72       _base.Retur
3bf0: 6e 42 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 28  nBlob(context, (
3c00: 62 79 74 65 5b 5d 29 72 65 74 75 72 6e 56 61 6c  byte[])returnVal
3c10: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
3c20: 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 7d  return;..      }
3c30: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
3c40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3c50: 20 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 73    /// Internal s
3c60: 63 61 6c 61 72 20 63 61 6c 6c 62 61 63 6b 20 66  calar callback f
3c70: 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68 20 77  unction, which w
3c80: 72 61 70 73 20 74 68 65 20 72 61 77 20 63 6f 6e  raps the raw con
3c90: 74 65 78 74 20 70 6f 69 6e 74 65 72 20 61 6e 64  text pointer and
3ca0: 20 63 61 6c 6c 73 20 74 68 65 20 76 69 72 74 75   calls the virtu
3cb0: 61 6c 20 49 6e 76 6f 6b 65 28 29 20 6d 65 74 68  al Invoke() meth
3cc0: 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52  od...    /// WAR
3cd0: 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20 74  NING: Must not t
3ce0: 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 2e  hrow exceptions.
3cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3d00: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
3d10: 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65  aram name="conte
3d20: 78 74 22 3e 41 20 72 61 77 20 63 6f 6e 74 65 78  xt">A raw contex
3d30: 74 20 70 6f 69 6e 74 65 72 3c 2f 70 61 72 61 6d  t pointer</param
3d40: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3d50: 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 73 22 3e 4e  m name="nArgs">N
3d60: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
3d70: 74 73 20 70 61 73 73 65 64 20 69 6e 3c 2f 70 61  ts passed in</pa
3d80: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
3d90: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 70  aram name="argsp
3da0: 74 72 22 3e 41 20 70 6f 69 6e 74 65 72 20 74 6f  tr">A pointer to
3db0: 20 74 68 65 20 61 72 72 61 79 20 6f 66 20 61 72   the array of ar
3dc0: 67 75 6d 65 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d  guments</param>.
3dd0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f  .    internal vo
3de0: 69 64 20 53 63 61 6c 61 72 43 61 6c 6c 62 61 63  id ScalarCallbac
3df0: 6b 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  k(IntPtr context
3e00: 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 49 6e 74  , int nArgs, Int
3e10: 50 74 72 20 61 72 67 73 70 74 72 29 0d 0a 20 20  Ptr argsptr)..  
3e20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79    {..        try
3e30: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3e40: 20 20 20 20 20 20 20 20 20 5f 63 6f 6e 74 65 78           _contex
3e50: 74 20 3d 20 63 6f 6e 74 65 78 74 3b 0d 0a 20 20  t = context;..  
3e60: 20 20 20 20 20 20 20 20 20 20 53 65 74 52 65 74            SetRet
3e70: 75 72 6e 56 61 6c 75 65 28 63 6f 6e 74 65 78 74  urnValue(context
3e80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3e90: 20 20 20 49 6e 76 6f 6b 65 28 43 6f 6e 76 65 72     Invoke(Conver
3ea0: 74 50 61 72 61 6d 73 28 6e 41 72 67 73 2c 20 61  tParams(nArgs, a
3eb0: 72 67 73 70 74 72 29 29 29 3b 20 2f 2a 20 74 68  rgsptr))); /* th
3ec0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
3ed0: 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  }..        catch
3ee0: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
3ef0: 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
3f00: 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
3f10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f20: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
3f30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f40: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
3f50: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
3f60: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61  ctionFlags.LogCa
3f70: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29  llbackException)
3f80: 20 3d 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ==..           
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
3fa0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
3fb0: 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78  gs.LogCallbackEx
3fc0: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
3fd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ff0: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
4000: 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65  ssage(SQLiteBase
4010: 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e  .COR_E_EXCEPTION
4020: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4030: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
4040: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
4050: 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74  tringFormat(Cult
4060: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
4070: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4090: 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74 69   "Caught excepti
40a0: 6f 6e 20 69 6e 20 5c 22 49 6e 76 6f 6b 65 5c 22  on in \"Invoke\"
40b0: 20 6d 65 74 68 6f 64 3a 20 7b 30 7d 22 2c 0d 0a   method: {0}",..
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20          e)); /* 
40e0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
40f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4100: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4110: 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
4120: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4140: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
4150: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4160: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4170: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4180: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 74 65  y>..    /// Inte
4190: 72 6e 61 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73  rnal collating s
41a0: 65 71 75 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e  equence function
41b0: 2c 20 77 68 69 63 68 20 77 72 61 70 73 20 75 70  , which wraps up
41c0: 20 74 68 65 20 72 61 77 20 73 74 72 69 6e 67 20   the raw string 
41d0: 70 6f 69 6e 74 65 72 73 20 61 6e 64 20 65 78 65  pointers and exe
41e0: 63 75 74 65 73 20 74 68 65 20 43 6f 6d 70 61 72  cutes the Compar
41f0: 65 28 29 20 76 69 72 74 75 61 6c 20 66 75 6e 63  e() virtual func
4200: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57  tion...    /// W
4210: 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74  ARNING: Must not
4220: 20 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e   throw exception
4230: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
4240: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4250: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74 72  <param name="ptr
4260: 22 3e 4e 6f 74 20 75 73 65 64 3c 2f 70 61 72 61  ">Not used</para
4270: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
4280: 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e 4c  am name="len1">L
4290: 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
42a0: 69 6e 67 20 70 76 31 3c 2f 70 61 72 61 6d 3e 0d  ing pv1</param>.
42b0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
42c0: 6e 61 6d 65 3d 22 70 74 72 31 22 3e 50 6f 69 6e  name="ptr1">Poin
42d0: 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
42e0: 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61   string to compa
42f0: 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  re</param>..    
4300: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4310: 22 6c 65 6e 32 22 3e 4c 65 6e 67 74 68 20 6f 66  "len2">Length of
4320: 20 74 68 65 20 73 74 72 69 6e 67 20 70 76 32 3c   the string pv2<
4330: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
4340: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74   <param name="pt
4350: 72 32 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20 74  r2">Pointer to t
4360: 68 65 20 73 65 63 6f 6e 64 20 73 74 72 69 6e 67  he second string
4370: 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72   to compare</par
4380: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
4390: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 2d 31  turns>Returns -1
43a0: 20 69 66 20 74 68 65 20 66 69 72 73 74 20 73 74   if the first st
43b0: 72 69 6e 67 20 69 73 20 6c 65 73 73 20 74 68 61  ring is less tha
43c0: 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e 20 20 30  n the second.  0
43d0: 20 69 66 20 74 68 65 79 20 61 72 65 20 65 71 75   if they are equ
43e0: 61 6c 2c 20 6f 72 20 31 20 69 66 20 74 68 65 20  al, or 1 if the 
43f0: 66 69 72 73 74 20 73 74 72 69 6e 67 20 69 73 20  first string is 
4400: 67 72 65 61 74 65 72 0d 0a 20 20 20 20 2f 2f 2f  greater..    ///
4410: 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64   than the second
4420: 2e 20 20 52 65 74 75 72 6e 73 20 30 20 69 66 20  .  Returns 0 if 
4430: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 73 20  an exception is 
4440: 63 61 75 67 68 74 2e 3c 2f 72 65 74 75 72 6e 73  caught.</returns
4450: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
4460: 69 6e 74 20 43 6f 6d 70 61 72 65 43 61 6c 6c 62  int CompareCallb
4470: 61 63 6b 28 49 6e 74 50 74 72 20 70 74 72 2c 20  ack(IntPtr ptr, 
4480: 69 6e 74 20 6c 65 6e 31 2c 20 49 6e 74 50 74 72  int len1, IntPtr
4490: 20 70 74 72 31 2c 20 69 6e 74 20 6c 65 6e 32 2c   ptr1, int len2,
44a0: 20 49 6e 74 50 74 72 20 70 74 72 32 29 0d 0a 20   IntPtr ptr2).. 
44b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
44c0: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
44d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
44e0: 20 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 43   Compare(SQLiteC
44f0: 6f 6e 76 65 72 74 2e 55 54 46 38 54 6f 53 74 72  onvert.UTF8ToStr
4500: 69 6e 67 28 70 74 72 31 2c 20 6c 65 6e 31 29 2c  ing(ptr1, len1),
4510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4520: 20 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e    SQLiteConvert.
4530: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
4540: 32 2c 20 6c 65 6e 32 29 29 3b 20 2f 2a 20 74 68  2, len2)); /* th
4550: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
4560: 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  }..        catch
4570: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f   (Exception e) /
4580: 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74  * NOTE: Must cat
4590: 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20  ch ALL. */..    
45a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
45b0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
45c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
45d0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
45e0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
45f0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 43 61  ctionFlags.LogCa
4600: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29  llbackException)
4610: 20 3d 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ==..           
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
4630: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
4640: 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78  gs.LogCallbackEx
4650: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
4660: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
4690: 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65  ssage(SQLiteBase
46a0: 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e  .COR_E_EXCEPTION
46b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
46c0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
46d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53  eNativeMethods.S
46e0: 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74  tringFormat(Cult
46f0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
4700: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4720: 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74 69   "Caught excepti
4730: 6f 6e 20 69 6e 20 5c 22 43 6f 6d 70 61 72 65 5c  on in \"Compare\
4740: 22 20 28 55 54 46 38 29 20 6d 65 74 68 6f 64 3a  " (UTF8) method:
4750: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
4760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4770: 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
4780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4790: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
47a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
47b0: 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
47c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
47d0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
47e0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
47f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
4800: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
4810: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
4820: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
4830: 20 74 6f 20 70 72 65 76 65 6e 74 20 74 68 65 20   to prevent the 
4840: 63 6f 72 65 20 53 51 4c 69 74 65 20 6c 69 62 72  core SQLite libr
4850: 61 72 79 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20  ary from..      
4860: 20 20 2f 2f 20 20 20 20 20 20 20 75 73 69 6e 67    //       using
4870: 20 6f 75 72 20 28 69 6e 76 61 6c 69 64 29 20 72   our (invalid) r
4880: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
4890: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  //..        if (
48a0: 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c 6c 29 20  (_base != null) 
48b0: 26 26 20 5f 62 61 73 65 2e 49 73 4f 70 65 6e 28  && _base.IsOpen(
48c0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
48d0: 5f 62 61 73 65 2e 43 61 6e 63 65 6c 28 29 3b 0d  _base.Cancel();.
48e0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
48f0: 6e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  n 0;..    }.... 
4900: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4910: 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 74 65 72 6e  ..    /// Intern
4920: 61 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  al collating seq
4930: 75 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e 2c 20  uence function, 
4940: 77 68 69 63 68 20 77 72 61 70 73 20 75 70 20 74  which wraps up t
4950: 68 65 20 72 61 77 20 73 74 72 69 6e 67 20 70 6f  he raw string po
4960: 69 6e 74 65 72 73 20 61 6e 64 20 65 78 65 63 75  inters and execu
4970: 74 65 73 20 74 68 65 20 43 6f 6d 70 61 72 65 28  tes the Compare(
4980: 29 20 76 69 72 74 75 61 6c 20 66 75 6e 63 74 69  ) virtual functi
4990: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52  on...    /// WAR
49a0: 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20 74  NING: Must not t
49b0: 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 2e  hrow exceptions.
49c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
49d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
49e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74 72 22 3e  aram name="ptr">
49f0: 4e 6f 74 20 75 73 65 64 3c 2f 70 61 72 61 6d 3e  Not used</param>
4a00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4a10: 20 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e 4c 65 6e   name="len1">Len
4a20: 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
4a30: 67 20 70 76 31 3c 2f 70 61 72 61 6d 3e 0d 0a 20  g pv1</param>.. 
4a40: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4a50: 6d 65 3d 22 70 74 72 31 22 3e 50 6f 69 6e 74 65  me="ptr1">Pointe
4a60: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 73  r to the first s
4a70: 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65  tring to compare
4a80: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4a90: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
4aa0: 65 6e 32 22 3e 4c 65 6e 67 74 68 20 6f 66 20 74  en2">Length of t
4ab0: 68 65 20 73 74 72 69 6e 67 20 70 76 32 3c 2f 70  he string pv2</p
4ac0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4ad0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74 72 32  param name="ptr2
4ae0: 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  ">Pointer to the
4af0: 20 73 65 63 6f 6e 64 20 73 74 72 69 6e 67 20 74   second string t
4b00: 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d  o compare</param
4b10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
4b20: 72 6e 73 3e 52 65 74 75 72 6e 73 20 2d 31 20 69  rns>Returns -1 i
4b30: 66 20 74 68 65 20 66 69 72 73 74 20 73 74 72 69  f the first stri
4b40: 6e 67 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ng is less than 
4b50: 74 68 65 20 73 65 63 6f 6e 64 2e 20 20 30 20 69  the second.  0 i
4b60: 66 20 74 68 65 79 20 61 72 65 20 65 71 75 61 6c  f they are equal
4b70: 2c 20 6f 72 20 31 20 69 66 20 74 68 65 20 66 69  , or 1 if the fi
4b80: 72 73 74 20 73 74 72 69 6e 67 20 69 73 20 67 72  rst string is gr
4b90: 65 61 74 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 74  eater..    /// t
4ba0: 68 61 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e 20  han the second. 
4bb0: 20 52 65 74 75 72 6e 73 20 30 20 69 66 20 61 6e   Returns 0 if an
4bc0: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 20 63 61   exception is ca
4bd0: 75 67 68 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ught.</returns>.
4be0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e  .    internal in
4bf0: 74 20 43 6f 6d 70 61 72 65 43 61 6c 6c 62 61 63  t CompareCallbac
4c00: 6b 31 36 28 49 6e 74 50 74 72 20 70 74 72 2c 20  k16(IntPtr ptr, 
4c10: 69 6e 74 20 6c 65 6e 31 2c 20 49 6e 74 50 74 72  int len1, IntPtr
4c20: 20 70 74 72 31 2c 20 69 6e 74 20 6c 65 6e 32 2c   ptr1, int len2,
4c30: 20 49 6e 74 50 74 72 20 70 74 72 32 29 0d 0a 20   IntPtr ptr2).. 
4c40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
4c50: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
4c60: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4c70: 20 43 6f 6d 70 61 72 65 28 53 51 4c 69 74 65 33   Compare(SQLite3
4c80: 5f 55 54 46 31 36 2e 55 54 46 31 36 54 6f 53 74  _UTF16.UTF16ToSt
4c90: 72 69 6e 67 28 70 74 72 31 2c 20 6c 65 6e 31 29  ring(ptr1, len1)
4ca0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4cb0: 20 20 20 53 51 4c 69 74 65 33 5f 55 54 46 31 36     SQLite3_UTF16
4cc0: 2e 55 54 46 31 36 54 6f 53 74 72 69 6e 67 28 70  .UTF16ToString(p
4cd0: 74 72 32 2c 20 6c 65 6e 32 29 29 3b 20 2f 2a 20  tr2, len2)); /* 
4ce0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
4cf0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63 61 74    }..        cat
4d00: 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
4d10: 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63   /* NOTE: Must c
4d20: 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20  atch ALL. */..  
4d30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d40: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
4d50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d60: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f 66           if ((_f
4d70: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
4d80: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
4d90: 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f  CallbackExceptio
4da0: 6e 29 20 3d 3d 0d 0a 20 20 20 20 20 20 20 20 20  n) ==..         
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4dc0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
4dd0: 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b  lags.LogCallback
4de0: 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20  Exception)..    
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e10: 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67     SQLiteLog.Log
4e20: 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 42 61  Message(SQLiteBa
4e30: 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49  se.COR_E_EXCEPTI
4e40: 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ON,..           
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
4e60: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
4e70: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75  .StringFormat(Cu
4e80: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
4e90: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4eb0: 20 20 20 22 43 61 75 67 68 74 20 65 78 63 65 70     "Caught excep
4ec0: 74 69 6f 6e 20 69 6e 20 5c 22 43 6f 6d 70 61 72  tion in \"Compar
4ed0: 65 5c 22 20 28 55 54 46 31 36 29 20 6d 65 74 68  e\" (UTF16) meth
4ee0: 6f 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  od: {0}",..     
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f00: 20 20 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77     e)); /* throw
4f10: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
4f20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4f30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4f40: 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
4f50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4f60: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
4f70: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
4f80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4f90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  }....        //.
4fa0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
4fb0: 3a 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64  : This must be d
4fc0: 6f 6e 65 20 74 6f 20 70 72 65 76 65 6e 74 20 74  one to prevent t
4fd0: 68 65 20 63 6f 72 65 20 53 51 4c 69 74 65 20 6c  he core SQLite l
4fe0: 69 62 72 61 72 79 20 66 72 6f 6d 0d 0a 20 20 20  ibrary from..   
4ff0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
5000: 69 6e 67 20 6f 75 72 20 28 69 6e 76 61 6c 69 64  ing our (invalid
5010: 29 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20  ) result...     
5020: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69     //..        i
5030: 66 20 28 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c  f ((_base != nul
5040: 6c 29 20 26 26 20 5f 62 61 73 65 2e 49 73 4f 70  l) && _base.IsOp
5050: 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  en())..         
5060: 20 20 20 5f 62 61 73 65 2e 43 61 6e 63 65 6c 28     _base.Cancel(
5070: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
5080: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  turn 0;..    }..
5090: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
50a0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
50b0: 20 69 6e 74 65 72 6e 61 6c 20 61 67 67 72 65 67   internal aggreg
50c0: 61 74 65 20 53 74 65 70 20 66 75 6e 63 74 69 6f  ate Step functio
50d0: 6e 20 63 61 6c 6c 62 61 63 6b 2c 20 77 68 69 63  n callback, whic
50e0: 68 20 77 72 61 70 73 20 74 68 65 20 72 61 77 20  h wraps the raw 
50f0: 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  context pointer 
5100: 61 6e 64 20 63 61 6c 6c 73 20 74 68 65 20 76 69  and calls the vi
5110: 72 74 75 61 6c 20 53 74 65 70 28 29 20 6d 65 74  rtual Step() met
5120: 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41  hod...    /// WA
5130: 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20  RNING: Must not 
5140: 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73  throw exceptions
5150: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
5160: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
5170: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
5180: 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  / This function 
5190: 74 61 6b 65 73 20 63 61 72 65 20 6f 66 20 64 6f  takes care of do
51a0: 69 6e 67 20 74 68 65 20 6c 6f 6f 6b 75 70 73 20  ing the lookups 
51b0: 61 6e 64 20 67 65 74 74 69 6e 67 20 74 68 65 20  and getting the 
51c0: 69 6d 70 6f 72 74 61 6e 74 20 69 6e 66 6f 72 6d  important inform
51d0: 61 74 69 6f 6e 20 70 75 74 20 74 6f 67 65 74 68  ation put togeth
51e0: 65 72 20 74 6f 20 63 61 6c 6c 20 74 68 65 20 53  er to call the S
51f0: 74 65 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d  tep() function..
5200: 0a 20 20 20 20 2f 2f 2f 20 54 68 61 74 20 69 6e  .    /// That in
5210: 63 6c 75 64 65 73 20 70 75 6c 6c 69 6e 67 20 6f  cludes pulling o
5220: 75 74 20 74 68 65 20 75 73 65 72 27 73 20 63 6f  ut the user's co
5230: 6e 74 65 78 74 44 61 74 61 20 61 6e 64 20 75 70  ntextData and up
5240: 64 61 74 69 6e 67 20 69 74 20 61 66 74 65 72 20  dating it after 
5250: 74 68 65 20 63 61 6c 6c 20 69 73 20 6d 61 64 65  the call is made
5260: 2e 20 20 57 65 20 75 73 65 20 61 20 73 6f 72 74  .  We use a sort
5270: 65 64 20 6c 69 73 74 20 66 6f 72 20 74 68 69 73  ed list for this
5280: 20 73 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 69 6e   so..    /// bin
5290: 61 72 79 20 73 65 61 72 63 68 65 73 20 63 61 6e  ary searches can
52a0: 20 62 65 20 64 6f 6e 65 20 74 6f 20 66 69 6e 64   be done to find
52b0: 20 74 68 65 20 64 61 74 61 2e 0d 0a 20 20 20 20   the data...    
52c0: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
52d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
52e0: 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22 3e 41 20  ame="context">A 
52f0: 72 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e  raw context poin
5300: 74 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ter</param>..   
5310: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5320: 3d 22 6e 41 72 67 73 22 3e 4e 75 6d 62 65 72 20  ="nArgs">Number 
5330: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73  of arguments pas
5340: 73 65 64 20 69 6e 3c 2f 70 61 72 61 6d 3e 0d 0a  sed in</param>..
5350: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5360: 61 6d 65 3d 22 61 72 67 73 70 74 72 22 3e 41 20  ame="argsptr">A 
5370: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61  pointer to the a
5380: 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74  rray of argument
5390: 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69  s</param>..    i
53a0: 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20 53 74 65  nternal void Ste
53b0: 70 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50 74 72  pCallback(IntPtr
53c0: 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 6e 41   context, int nA
53d0: 72 67 73 2c 20 49 6e 74 50 74 72 20 61 72 67 73  rgs, IntPtr args
53e0: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
53f0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
5400: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5410: 20 41 67 67 72 65 67 61 74 65 44 61 74 61 20 64   AggregateData d
5420: 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ata = null;.... 
5430: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
5440: 62 61 73 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  base != null).. 
5450: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
5470: 74 50 74 72 20 6e 41 75 78 20 3d 20 5f 62 61 73  tPtr nAux = _bas
5480: 65 2e 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65  e.AggregateConte
5490: 78 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 0d 0a  xt(context);....
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54b0: 69 66 20 28 28 5f 63 6f 6e 74 65 78 74 44 61 74  if ((_contextDat
54c0: 61 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 20 26  aList != null) &
54d0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
54e0: 20 20 20 20 20 20 20 21 5f 63 6f 6e 74 65 78 74         !_context
54f0: 44 61 74 61 4c 69 73 74 2e 54 72 79 47 65 74 56  DataList.TryGetV
5500: 61 6c 75 65 28 6e 41 75 78 2c 20 6f 75 74 20 64  alue(nAux, out d
5510: 61 74 61 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ata))..         
5520: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
5540: 74 61 20 3d 20 6e 65 77 20 41 67 67 72 65 67 61  ta = new Aggrega
5550: 74 65 44 61 74 61 28 29 3b 0d 0a 20 20 20 20 20  teData();..     
5560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
5570: 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 74 5b  contextDataList[
5580: 6e 41 75 78 5d 20 3d 20 64 61 74 61 3b 0d 0a 20  nAux] = data;.. 
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
55a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
55b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
55c0: 66 20 28 64 61 74 61 20 3d 3d 20 6e 75 6c 6c 29  f (data == null)
55d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
55e0: 20 20 64 61 74 61 20 3d 20 6e 65 77 20 41 67 67    data = new Agg
55f0: 72 65 67 61 74 65 44 61 74 61 28 29 3b 0d 0a 0d  regateData();...
5600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
5610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5630: 20 5f 63 6f 6e 74 65 78 74 20 3d 20 63 6f 6e 74   _context = cont
5640: 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
5650: 20 20 20 20 20 20 53 74 65 70 28 43 6f 6e 76 65        Step(Conve
5660: 72 74 50 61 72 61 6d 73 28 6e 41 72 67 73 2c 20  rtParams(nArgs, 
5670: 61 72 67 73 70 74 72 29 2c 0d 0a 20 20 20 20 20  argsptr),..     
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
5690: 61 74 61 2e 5f 63 6f 75 6e 74 2c 20 72 65 66 20  ata._count, ref 
56a0: 64 61 74 61 2e 5f 64 61 74 61 29 3b 20 2f 2a 20  data._data); /* 
56b0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
56c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
56d0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
56e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
5700: 61 2e 5f 63 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20  a._count++;..   
5710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5720: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 63      }..        c
5730: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
5740: 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
5750: 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
5760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5770: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
5780: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5790: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
57a0: 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  _flags & SQLiteC
57b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
57c0: 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74  ogCallbackExcept
57d0: 69 6f 6e 29 20 3d 3d 0d 0a 20 20 20 20 20 20 20  ion) ==..       
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
5800: 6e 46 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61  nFlags.LogCallba
5810: 63 6b 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20  ckException)..  
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5840: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
5850: 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
5860: 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50  Base.COR_E_EXCEP
5870: 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20  TION,..         
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
5890: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
58a0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
58b0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
58c0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58e0: 20 20 20 20 20 22 43 61 75 67 68 74 20 65 78 63       "Caught exc
58f0: 65 70 74 69 6f 6e 20 69 6e 20 5c 22 53 74 65 70  eption in \"Step
5900: 5c 22 20 6d 65 74 68 6f 64 3a 20 7b 31 7d 22 2c  \" method: {1}",
5910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5920: 20 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f            e)); /
5930: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
5940: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5950: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5960: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
5970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5990: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
59b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
59c0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
59d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e  ary>..    /// An
59e0: 20 69 6e 74 65 72 6e 61 6c 20 61 67 67 72 65 67   internal aggreg
59f0: 61 74 65 20 46 69 6e 61 6c 20 66 75 6e 63 74 69  ate Final functi
5a00: 6f 6e 20 63 61 6c 6c 62 61 63 6b 2c 20 77 68 69  on callback, whi
5a10: 63 68 20 77 72 61 70 73 20 74 68 65 20 63 6f 6e  ch wraps the con
5a20: 74 65 78 74 20 70 6f 69 6e 74 65 72 20 61 6e 64  text pointer and
5a30: 20 63 61 6c 6c 73 20 74 68 65 20 76 69 72 74 75   calls the virtu
5a40: 61 6c 20 46 69 6e 61 6c 28 29 20 6d 65 74 68 6f  al Final() metho
5a50: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 41 52 4e  d...    /// WARN
5a60: 49 4e 47 3a 20 4d 75 73 74 20 6e 6f 74 20 74 68  ING: Must not th
5a70: 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73 2e 0d  row exceptions..
5a80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5a90: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
5aa0: 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78  ram name="contex
5ab0: 74 22 3e 41 20 72 61 77 20 63 6f 6e 74 65 78 74  t">A raw context
5ac0: 20 70 6f 69 6e 74 65 72 3c 2f 70 61 72 61 6d 3e   pointer</param>
5ad0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 76  ..    internal v
5ae0: 6f 69 64 20 46 69 6e 61 6c 43 61 6c 6c 62 61 63  oid FinalCallbac
5af0: 6b 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  k(IntPtr context
5b00: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5b10: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
5b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
5b30: 6a 65 63 74 20 6f 62 6a 20 3d 20 6e 75 6c 6c 3b  ject obj = null;
5b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5b50: 69 66 20 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c  if (_base != nul
5b60: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
5b70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5b80: 20 20 20 49 6e 74 50 74 72 20 6e 20 3d 20 5f 62     IntPtr n = _b
5b90: 61 73 65 2e 41 67 67 72 65 67 61 74 65 43 6f 6e  ase.AggregateCon
5ba0: 74 65 78 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a  text(context);..
5bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bc0: 41 67 67 72 65 67 61 74 65 44 61 74 61 20 61 67  AggregateData ag
5bd0: 67 44 61 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20  gData;....      
5be0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f            if ((_
5bf0: 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 74 20  contextDataList 
5c00: 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c20: 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73   _contextDataLis
5c30: 74 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6e 2c  t.TryGetValue(n,
5c40: 20 6f 75 74 20 61 67 67 44 61 74 61 29 29 0d 0a   out aggData))..
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5c70: 20 20 20 20 20 20 20 6f 62 6a 20 3d 20 61 67 67         obj = agg
5c80: 44 61 74 61 2e 5f 64 61 74 61 3b 0d 0a 20 20 20  Data._data;..   
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ca0: 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c 69 73   _contextDataLis
5cb0: 74 2e 52 65 6d 6f 76 65 28 6e 29 3b 0d 0a 20 20  t.Remove(n);..  
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
5cf0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
5d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5d10: 20 20 5f 63 6f 6e 74 65 78 74 20 3d 20 63 6f 6e    _context = con
5d20: 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
5d30: 20 20 20 20 20 20 20 53 65 74 52 65 74 75 72 6e         SetReturn
5d40: 56 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 46  Value(context, F
5d50: 69 6e 61 6c 28 6f 62 6a 29 29 3b 20 2f 2a 20 74  inal(obj)); /* t
5d60: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
5d70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5d80: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
5d90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 49 44 69 73              IDis
5db0: 70 6f 73 61 62 6c 65 20 64 69 73 70 20 3d 20 6f  posable disp = o
5dc0: 62 6a 20 61 73 20 49 44 69 73 70 6f 73 61 62 6c  bj as IDisposabl
5dd0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
5de0: 20 20 20 20 69 66 20 28 64 69 73 70 20 21 3d 20      if (disp != 
5df0: 6e 75 6c 6c 29 20 64 69 73 70 2e 44 69 73 70 6f  null) disp.Dispo
5e00: 73 65 28 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  se(); /* throw *
5e10: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
5e20: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5e30: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
5e40: 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
5e50: 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
5e60: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  . */..        {.
5e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
5e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ea0: 20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53   if ((_flags & S
5eb0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
5ec0: 6c 61 67 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b  lags.LogCallback
5ed0: 45 78 63 65 70 74 69 6f 6e 29 20 3d 3d 0d 0a 20  Exception) ==.. 
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
5f00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
5f10: 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f  CallbackExceptio
5f20: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
5f30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5f40: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
5f50: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
5f60: 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45  SQLiteBase.COR_E
5f70: 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20  _EXCEPTION,..   
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f90: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
5fa0: 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  eMethods.StringF
5fb0: 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
5fc0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
5fd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5fe0: 20 20 20 20 20 20 20 20 20 20 20 22 43 61 75 67             "Caug
5ff0: 68 74 20 65 78 63 65 70 74 69 6f 6e 20 69 6e 20  ht exception in 
6000: 5c 22 46 69 6e 61 6c 5c 22 20 6d 65 74 68 6f 64  \"Final\" method
6010: 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a   e)); /* throw *
6040: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
6050: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6060: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6070: 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
6080: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6090: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
60a0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
60b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
60c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
60d0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
60e0: 20 2f 2f 2f 20 55 73 69 6e 67 20 72 65 66 6c 65   /// Using refle
60f0: 63 74 69 6f 6e 2c 20 65 6e 75 6d 65 72 61 74 65  ction, enumerate
6100: 20 61 6c 6c 20 61 73 73 65 6d 62 6c 69 65 73 20   all assemblies 
6110: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  in the current a
6120: 70 70 64 6f 6d 61 69 6e 20 6c 6f 6f 6b 69 6e 67  ppdomain looking
6130: 20 66 6f 72 20 63 6c 61 73 73 65 73 20 74 68 61   for classes tha
6140: 74 0d 0a 20 20 20 20 2f 2f 2f 20 68 61 76 65 20  t..    /// have 
6150: 61 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  a SQLiteFunction
6160: 41 74 74 72 69 62 75 74 65 20 61 74 74 72 69 62  Attribute attrib
6170: 75 74 65 2c 20 61 6e 64 20 72 65 67 69 73 74 65  ute, and registe
6180: 72 69 6e 67 20 74 68 65 6d 20 61 63 63 6f 72 64  ring them accord
6190: 69 6e 67 6c 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ingly...    /// 
61a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23 69 66 20  </summary>..#if 
61b0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
61c0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
61d0: 5b 53 65 63 75 72 69 74 79 2e 50 65 72 6d 69 73  [Security.Permis
61e0: 73 69 6f 6e 73 2e 46 69 6c 65 49 4f 50 65 72 6d  sions.FileIOPerm
61f0: 69 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 2e  ission(Security.
6200: 50 65 72 6d 69 73 73 69 6f 6e 73 2e 53 65 63 75  Permissions.Secu
6210: 72 69 74 79 41 63 74 69 6f 6e 2e 41 73 73 65 72  rityAction.Asser
6220: 74 2c 20 41 6c 6c 46 69 6c 65 73 20 3d 20 53 65  t, AllFiles = Se
6230: 63 75 72 69 74 79 2e 50 65 72 6d 69 73 73 69 6f  curity.Permissio
6240: 6e 73 2e 46 69 6c 65 49 4f 50 65 72 6d 69 73 73  ns.FileIOPermiss
6250: 69 6f 6e 41 63 63 65 73 73 2e 50 61 74 68 44 69  ionAccess.PathDi
6260: 73 63 6f 76 65 72 79 29 5d 0d 0a 23 65 6e 64 69  scovery)]..#endi
6270: 66 0d 0a 20 20 20 20 73 74 61 74 69 63 20 53 51  f..    static SQ
6280: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 28 29 0d 0a  LiteFunction()..
6290: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 5f 72 65      {..      _re
62a0: 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f 6e  gisteredFunction
62b0: 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
62c0: 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ry<SQLiteFunctio
62d0: 6e 41 74 74 72 69 62 75 74 65 2c 20 6f 62 6a 65  nAttribute, obje
62e0: 63 74 3e 28 29 3b 0d 0a 20 20 20 20 20 20 74 72  ct>();..      tr
62f0: 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  y..      {..#if 
6300: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
6310: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
6320: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6330: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
6340: 22 4e 6f 5f 53 51 4c 69 74 65 46 75 6e 63 74 69  "No_SQLiteFuncti
6350: 6f 6e 73 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  ons" environment
6360: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
6370: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  ,..        //   
6380: 20 20 20 20 73 6b 69 70 20 61 6c 6c 20 6f 75 72      skip all our
6390: 20 73 70 65 63 69 61 6c 20 63 6f 64 65 20 61 6e   special code an
63a0: 64 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 2e  d simply return.
63b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
63c0: 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66 65        if (Unsafe
63d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65  NativeMethods.Ge
63e0: 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28 22 4e  tSettingValue("N
63f0: 6f 5f 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  o_SQLiteFunction
6400: 73 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c  s", null) != nul
6410: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  l)..          re
6420: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
6430: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41   SQLiteFunctionA
6440: 74 74 72 69 62 75 74 65 20 61 74 3b 0d 0a 20 20  ttribute at;..  
6450: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 52 65 66        System.Ref
6460: 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79  lection.Assembly
6470: 5b 5d 20 61 72 41 73 73 65 6d 62 6c 69 65 73 20  [] arAssemblies 
6480: 3d 20 53 79 73 74 65 6d 2e 41 70 70 44 6f 6d 61  = System.AppDoma
6490: 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e  in.CurrentDomain
64a0: 2e 47 65 74 41 73 73 65 6d 62 6c 69 65 73 28 29  .GetAssemblies()
64b0: 3b 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 77  ;..        int w
64c0: 20 3d 20 61 72 41 73 73 65 6d 62 6c 69 65 73 2e   = arAssemblies.
64d0: 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20  Length;..       
64e0: 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63 74 69   System.Reflecti
64f0: 6f 6e 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  on.AssemblyName 
6500: 73 71 6c 69 74 65 20 3d 20 53 79 73 74 65 6d 2e  sqlite = System.
6510: 52 65 66 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d  Reflection.Assem
6520: 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67  bly.GetExecuting
6530: 41 73 73 65 6d 62 6c 79 28 29 2e 47 65 74 4e 61  Assembly().GetNa
6540: 6d 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me();....       
6550: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
6560: 20 6e 20 3c 20 77 3b 20 6e 2b 2b 29 0d 0a 20 20   n < w; n++)..  
6570: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6580: 20 20 20 54 79 70 65 5b 5d 20 61 72 54 79 70 65     Type[] arType
6590: 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f  s;..          bo
65a0: 6f 6c 20 66 6f 75 6e 64 20 3d 20 66 61 6c 73 65  ol found = false
65b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73  ;..          Sys
65c0: 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 2e 41  tem.Reflection.A
65d0: 73 73 65 6d 62 6c 79 4e 61 6d 65 5b 5d 20 72 65  ssemblyName[] re
65e0: 66 65 72 65 6e 63 65 73 3b 0d 0a 20 20 20 20 20  ferences;..     
65f0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
6600: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6610: 20 20 20 2f 2f 20 49 6e 73 70 65 63 74 20 6f 6e     // Inspect on
6620: 6c 79 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68  ly assemblies th
6630: 61 74 20 72 65 66 65 72 65 6e 63 65 20 53 51 4c  at reference SQL
6640: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ite..           
6650: 20 72 65 66 65 72 65 6e 63 65 73 20 3d 20 61 72   references = ar
6660: 41 73 73 65 6d 62 6c 69 65 73 5b 6e 5d 2e 47 65  Assemblies[n].Ge
6670: 74 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d  tReferencedAssem
6680: 62 6c 69 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  blies();..      
6690: 20 20 20 20 20 20 69 6e 74 20 74 20 3d 20 72 65        int t = re
66a0: 66 65 72 65 6e 63 65 73 2e 4c 65 6e 67 74 68 3b  ferences.Length;
66b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
66c0: 72 20 28 69 6e 74 20 7a 20 3d 20 30 3b 20 7a 20  r (int z = 0; z 
66d0: 3c 20 74 3b 20 7a 2b 2b 29 0d 0a 20 20 20 20 20  < t; z++)..     
66e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
66f0: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 66 65          if (refe
6700: 72 65 6e 63 65 73 5b 7a 5d 2e 4e 61 6d 65 20 3d  rences[z].Name =
6710: 3d 20 73 71 6c 69 74 65 2e 4e 61 6d 65 29 0d 0a  = sqlite.Name)..
6720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6740: 20 66 6f 75 6e 64 20 3d 20 74 72 75 65 3b 0d 0a   found = true;..
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6760: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
6770: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6780: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6790: 20 20 20 20 20 20 69 66 20 28 66 6f 75 6e 64 20        if (found 
67a0: 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20  == false)..     
67b0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
67c0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
67d0: 20 20 61 72 54 79 70 65 73 20 3d 20 61 72 41 73    arTypes = arAs
67e0: 73 65 6d 62 6c 69 65 73 5b 6e 5d 2e 47 65 74 54  semblies[n].GetT
67f0: 79 70 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ypes();..       
6800: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6810: 63 61 74 63 68 20 28 52 65 66 6c 65 63 74 69 6f  catch (Reflectio
6820: 6e 2e 52 65 66 6c 65 63 74 69 6f 6e 54 79 70 65  n.ReflectionType
6830: 4c 6f 61 64 45 78 63 65 70 74 69 6f 6e 20 65 29  LoadException e)
6840: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
6850: 20 20 20 20 20 20 20 20 20 20 20 61 72 54 79 70             arTyp
6860: 65 73 20 3d 20 65 2e 54 79 70 65 73 3b 0d 0a 20  es = e.Types;.. 
6870: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6880: 20 20 20 20 20 20 20 20 69 6e 74 20 76 20 3d 20          int v = 
6890: 61 72 54 79 70 65 73 2e 4c 65 6e 67 74 68 3b 0d  arTypes.Length;.
68a0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28  .          for (
68b0: 69 6e 74 20 78 20 3d 20 30 3b 20 78 20 3c 20 76  int x = 0; x < v
68c0: 3b 20 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; x++)..        
68d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
68e0: 20 69 66 20 28 61 72 54 79 70 65 73 5b 78 5d 20   if (arTypes[x] 
68f0: 3d 3d 20 6e 75 6c 6c 29 20 63 6f 6e 74 69 6e 75  == null) continu
6900: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
6910: 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 41 74 74    object[] arAtt
6920: 20 3d 20 61 72 54 79 70 65 73 5b 78 5d 2e 47 65   = arTypes[x].Ge
6930: 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65  tCustomAttribute
6940: 73 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 46  s(typeof(SQLiteF
6950: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
6960: 29 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  ), false);..    
6970: 20 20 20 20 20 20 20 20 69 6e 74 20 75 20 3d 20          int u = 
6980: 61 72 41 74 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20  arAtt.Length;.. 
6990: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
69a0: 69 6e 74 20 79 20 3d 20 30 3b 20 79 20 3c 20 75  int y = 0; y < u
69b0: 3b 20 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; y++)..        
69c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
69d0: 20 20 20 20 20 61 74 20 3d 20 61 72 41 74 74 5b       at = arAtt[
69e0: 79 5d 20 61 73 20 53 51 4c 69 74 65 46 75 6e 63  y] as SQLiteFunc
69f0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 3b 0d 0a  tionAttribute;..
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6a10: 20 28 61 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20   (at != null).. 
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a40: 61 74 2e 49 6e 73 74 61 6e 63 65 54 79 70 65 20  at.InstanceType 
6a50: 3d 20 61 72 54 79 70 65 73 5b 78 5d 3b 0d 0a 20  = arTypes[x];.. 
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
6a70: 65 70 6c 61 63 65 46 75 6e 63 74 69 6f 6e 28 61  eplaceFunction(a
6a80: 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  t, null);..     
6a90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6aa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6ab0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6ac0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
6ad0: 20 7d 0d 0a 20 20 20 20 20 20 63 61 74 63 68 20   }..      catch 
6ae0: 2f 2f 20 53 51 4c 69 74 65 20 70 72 6f 76 69 64  // SQLite provid
6af0: 65 72 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 20  er can continue 
6b00: 77 69 74 68 6f 75 74 20 62 65 69 6e 67 20 61 62  without being ab
6b10: 6c 65 20 74 6f 20 66 69 6e 64 20 62 75 69 6c 74  le to find built
6b20: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 0d 0a 20  -in functions.. 
6b30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 7d 0d       {..      }.
6b40: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
6b50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6b60: 20 2f 2f 2f 20 4d 61 6e 75 61 6c 20 6d 65 74 68   /// Manual meth
6b70: 6f 64 20 6f 66 20 72 65 67 69 73 74 65 72 69 6e  od of registerin
6b80: 67 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  g a function.  T
6b90: 68 65 20 74 79 70 65 20 6d 75 73 74 20 73 74 69  he type must sti
6ba0: 6c 6c 20 68 61 76 65 20 74 68 65 20 53 51 4c 69  ll have the SQLi
6bb0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
6bc0: 75 74 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  utes in order to
6bd0: 20 77 6f 72 6b 0d 0a 20 20 20 20 2f 2f 2f 20 70   work..    /// p
6be0: 72 6f 70 65 72 6c 79 2c 20 62 75 74 20 74 68 69  roperly, but thi
6bf0: 73 20 69 73 20 61 20 77 6f 72 6b 61 72 6f 75 6e  s is a workaroun
6c00: 64 20 66 6f 72 20 74 68 65 20 43 6f 6d 70 61 63  d for the Compac
6c10: 74 20 46 72 61 6d 65 77 6f 72 6b 20 77 68 65 72  t Framework wher
6c20: 65 20 65 6e 75 6d 65 72 61 74 69 6e 67 20 61 73  e enumerating as
6c30: 73 65 6d 62 6c 69 65 73 20 69 73 20 6e 6f 74 20  semblies is not 
6c40: 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f 72  currently suppor
6c50: 74 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ted...    /// </
6c60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6c70: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
6c80: 79 70 22 3e 54 68 65 20 74 79 70 65 20 6f 66 20  yp">The type of 
6c90: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
6ca0: 72 65 67 69 73 74 65 72 3c 2f 70 61 72 61 6d 3e  register</param>
6cb0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61  ..    public sta
6cc0: 74 69 63 20 76 6f 69 64 20 52 65 67 69 73 74 65  tic void Registe
6cd0: 72 46 75 6e 63 74 69 6f 6e 28 54 79 70 65 20 74  rFunction(Type t
6ce0: 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  yp)..    {..    
6cf0: 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 41      object[] arA
6d00: 74 74 20 3d 20 74 79 70 2e 47 65 74 43 75 73 74  tt = typ.GetCust
6d10: 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20  omAttributes(.. 
6d20: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
6d30: 66 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  f(SQLiteFunction
6d40: 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
6d50: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  e);....        f
6d60: 6f 72 20 28 69 6e 74 20 79 20 3d 20 30 3b 20 79  or (int y = 0; y
6d70: 20 3c 20 61 72 41 74 74 2e 4c 65 6e 67 74 68 3b   < arAtt.Length;
6d80: 20 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 7b   y++)..        {
6d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
6da0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
6db0: 69 62 75 74 65 20 61 74 20 3d 20 61 72 41 74 74  ibute at = arAtt
6dc0: 5b 79 5d 20 61 73 20 53 51 4c 69 74 65 46 75 6e  [y] as SQLiteFun
6dd0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 3b 0d  ctionAttribute;.
6de0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
6df0: 66 20 28 61 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  f (at == null)..
6e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e10: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
6e20: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 65           Registe
6e30: 72 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  rFunction(..    
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 61 74 2e 4e              at.N
6e50: 61 6d 65 2c 20 61 74 2e 41 72 67 75 6d 65 6e 74  ame, at.Argument
6e60: 73 2c 20 61 74 2e 46 75 6e 63 54 79 70 65 2c 20  s, at.FuncType, 
6e70: 74 79 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  typ,..          
6e80: 20 20 20 20 20 20 61 74 2e 43 61 6c 6c 62 61 63        at.Callbac
6e90: 6b 31 2c 20 61 74 2e 43 61 6c 6c 62 61 63 6b 32  k1, at.Callback2
6ea0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
6eb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
6ec0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
6ed0: 2f 2f 20 41 6c 74 65 72 6e 61 74 69 76 65 20 6d  // Alternative m
6ee0: 65 74 68 6f 64 20 6f 66 20 72 65 67 69 73 74 65  ethod of registe
6ef0: 72 69 6e 67 20 61 20 66 75 6e 63 74 69 6f 6e 2e  ring a function.
6f00: 20 20 54 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20    This method.. 
6f10: 20 20 20 2f 2f 2f 20 64 6f 65 73 20 6e 6f 74 20     /// does not 
6f20: 72 65 71 75 69 72 65 20 74 68 65 20 73 70 65 63  require the spec
6f30: 69 66 69 65 64 20 74 79 70 65 20 74 6f 20 62 65  ified type to be
6f40: 20 61 6e 6e 6f 74 61 74 65 64 20 77 69 74 68 0d   annotated with.
6f50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72  .    /// <see cr
6f60: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
6f70: 6f 6e 41 74 74 72 69 62 75 74 65 22 20 2f 3e 2e  onAttribute" />.
6f80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6f90: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6fa0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
6fb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
6fc0: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
6fd0: 69 6f 6e 20 74 6f 20 72 65 67 69 73 74 65 72 2e  ion to register.
6fe0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
6ff0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
7000: 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e  am name="argumen
7010: 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f  tCount">..    //
7020: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
7030: 61 72 67 75 6d 65 6e 74 73 20 61 63 63 65 70 74  arguments accept
7040: 65 64 20 62 79 20 74 68 65 20 66 75 6e 63 74 69  ed by the functi
7050: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  on...    /// </p
7060: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
7070: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
7080: 74 69 6f 6e 54 79 70 65 22 3e 0d 0a 20 20 20 20  tionType">..    
7090: 2f 2f 2f 20 54 68 65 20 74 79 70 65 20 6f 66 20  /// The type of 
70a0: 53 51 4c 69 74 65 20 66 75 6e 63 74 69 6f 6e 20  SQLite function 
70b0: 62 65 69 6e 67 20 72 65 73 69 74 65 72 65 64 20  being resitered 
70c0: 28 65 2e 67 2e 20 73 63 61 6c 61 72 2c 0d 0a 20  (e.g. scalar,.. 
70d0: 20 20 20 2f 2f 2f 20 61 67 67 72 65 67 61 74 65     /// aggregate
70e0: 2c 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  , or collating s
70f0: 65 71 75 65 6e 63 65 29 2e 0d 0a 20 20 20 20 2f  equence)...    /
7100: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
7110: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7120: 3d 22 69 6e 73 74 61 6e 63 65 54 79 70 65 22 3e  ="instanceType">
7130: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73  ..    /// The <s
7140: 65 65 20 63 72 65 66 3d 22 54 79 70 65 22 20 2f  ee cref="Type" /
7150: 3e 20 74 68 61 74 20 61 63 74 75 61 6c 6c 79 20  > that actually 
7160: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
7170: 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  unction...    //
7180: 2f 20 54 68 69 73 20 77 69 6c 6c 20 6f 6e 6c 79  / This will only
7190: 20 62 65 20 75 73 65 64 20 69 66 20 74 68 65 20   be used if the 
71a0: 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
71b0: 63 61 6c 6c 62 61 63 6b 31 22 20 2f 3e 0d 0a 20  callback1" />.. 
71c0: 20 20 20 2f 2f 2f 20 61 6e 64 20 3c 70 61 72 61     /// and <para
71d0: 6d 72 65 66 20 6e 61 6d 65 3d 22 63 61 6c 6c 62  mref name="callb
71e0: 61 63 6b 32 22 20 2f 3e 20 70 61 72 61 6d 65 74  ack2" /> paramet
71f0: 65 72 73 20 61 72 65 20 6e 75 6c 6c 2e 0d 0a 20  ers are null... 
7200: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
7210: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
7220: 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 31 22  name="callback1"
7230: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
7240: 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61  see cref="Delega
7250: 74 65 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65  te" /> to be use
7260: 64 20 66 6f 72 20 61 6c 6c 20 63 61 6c 6c 73 20  d for all calls 
7270: 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 2f 2f  into the..    //
7280: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
7290: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 49 6e 76 6f  iteFunction.Invo
72a0: 6b 65 22 20 2f 3e 2c 0d 0a 20 20 20 20 2f 2f 2f  ke" />,..    ///
72b0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
72c0: 74 65 46 75 6e 63 74 69 6f 6e 2e 53 74 65 70 22  teFunction.Step"
72d0: 20 2f 3e 2c 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e   />,..    /// an
72e0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
72f0: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 43 6f 6d 70  iteFunction.Comp
7300: 61 72 65 22 20 2f 3e 20 76 69 72 74 75 61 6c 20  are" /> virtual 
7310: 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f  methods...    //
7320: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
7330: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7340: 22 63 61 6c 6c 62 61 63 6b 32 22 3e 0d 0a 20 20  "callback2">..  
7350: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
7360: 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f  ref="Delegate" /
7370: 3e 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  > to be used for
7380: 20 61 6c 6c 20 63 61 6c 6c 73 20 69 6e 74 6f 20   all calls into 
7390: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65  the..    /// <se
73a0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
73b0: 6e 63 74 69 6f 6e 2e 46 69 6e 61 6c 22 20 2f 3e  nction.Final" />
73c0: 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 2e   virtual method.
73d0: 20 20 54 68 69 73 0d 0a 20 20 20 20 2f 2f 2f 20    This..    /// 
73e0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6f 6e 6c  parameter is onl
73f0: 79 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  y necessary for 
7400: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
7410: 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ons...    /// </
7420: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75 62 6c  param>..    publ
7430: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 52  ic static void R
7440: 65 67 69 73 74 65 72 46 75 6e 63 74 69 6f 6e 28  egisterFunction(
7450: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
7460: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
7470: 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  int argumentCoun
7480: 74 2c 0d 0a 20 20 20 20 20 20 20 20 46 75 6e 63  t,..        Func
7490: 74 69 6f 6e 54 79 70 65 20 66 75 6e 63 74 69 6f  tionType functio
74a0: 6e 54 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20  nType,..        
74b0: 54 79 70 65 20 69 6e 73 74 61 6e 63 65 54 79 70  Type instanceTyp
74c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 6c 65  e,..        Dele
74d0: 67 61 74 65 20 63 61 6c 6c 62 61 63 6b 31 2c 0d  gate callback1,.
74e0: 0a 20 20 20 20 20 20 20 20 44 65 6c 65 67 61 74  .        Delegat
74f0: 65 20 63 61 6c 6c 62 61 63 6b 32 0d 0a 20 20 20  e callback2..   
7500: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
7510: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
7520: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 61  ctionAttribute a
7530: 74 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 46 75  t = new SQLiteFu
7540: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 28  nctionAttribute(
7550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  ..            na
7560: 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  me, argumentCoun
7570: 74 2c 20 66 75 6e 63 74 69 6f 6e 54 79 70 65 29  t, functionType)
7580: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 61 74 2e  ;....        at.
7590: 49 6e 73 74 61 6e 63 65 54 79 70 65 20 3d 20 69  InstanceType = i
75a0: 6e 73 74 61 6e 63 65 54 79 70 65 3b 0d 0a 20 20  nstanceType;..  
75b0: 20 20 20 20 20 20 61 74 2e 43 61 6c 6c 62 61 63        at.Callbac
75c0: 6b 31 20 3d 20 63 61 6c 6c 62 61 63 6b 31 3b 0d  k1 = callback1;.
75d0: 0a 20 20 20 20 20 20 20 20 61 74 2e 43 61 6c 6c  .        at.Call
75e0: 62 61 63 6b 32 20 3d 20 63 61 6c 6c 62 61 63 6b  back2 = callback
75f0: 32 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 52 65  2;....        Re
7600: 70 6c 61 63 65 46 75 6e 63 74 69 6f 6e 28 61 74  placeFunction(at
7610: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d  , null);..    }.
7620: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
7630: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
7640: 70 6c 61 63 65 73 20 61 20 72 65 67 69 73 74 65  places a registe
7650: 72 65 64 20 66 75 6e 63 74 69 6f 6e 2c 20 64 69  red function, di
7660: 73 70 6f 73 69 6e 67 20 6f 66 20 74 68 65 20 61  sposing of the a
7670: 73 73 6f 63 69 61 74 65 64 20 28 6f 6c 64 29 0d  ssociated (old).
7680: 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 69  .    /// value i
7690: 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20  f necessary...  
76a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
76b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
76c0: 20 6e 61 6d 65 3d 22 61 74 22 3e 0d 0a 20 20 20   name="at">..   
76d0: 20 2f 2f 2f 20 54 68 65 20 61 74 74 72 69 62 75   /// The attribu
76e0: 74 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  te that describe
76f0: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  s the function t
7700: 6f 20 72 65 70 6c 61 63 65 2e 0d 0a 20 20 20 20  o replace...    
7710: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
7720: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7730: 65 3d 22 6e 65 77 56 61 6c 75 65 22 3e 0d 0a 20  e="newValue">.. 
7740: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 76     /// The new v
7750: 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20  alue to use...  
7760: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
7770: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
7780: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
7790: 65 72 6f 20 69 66 20 61 6e 20 65 78 69 73 74 69  ero if an existi
77a0: 6e 67 20 72 65 67 69 73 74 65 72 65 64 20 66 75  ng registered fu
77b0: 6e 63 74 69 6f 6e 20 77 61 73 20 72 65 70 6c 61  nction was repla
77c0: 63 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 0d  ced; otherwise,.
77d0: 0a 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2e 0d 0a  .    /// zero...
77e0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
77f0: 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  s>..    private 
7800: 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 70 6c  static bool Repl
7810: 61 63 65 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  aceFunction(..  
7820: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
7830: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 61 74  tionAttribute at
7840: 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  ,..        objec
7850: 74 20 6e 65 77 56 61 6c 75 65 0d 0a 20 20 20 20  t newValue..    
7860: 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
7870: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f 6c 64        object old
7880: 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Value;....      
7890: 20 20 69 66 20 28 5f 72 65 67 69 73 74 65 72 65    if (_registere
78a0: 64 46 75 6e 63 74 69 6f 6e 73 2e 54 72 79 47 65  dFunctions.TryGe
78b0: 74 56 61 6c 75 65 28 61 74 2c 20 6f 75 74 20 6f  tValue(at, out o
78c0: 6c 64 56 61 6c 75 65 29 29 0d 0a 20 20 20 20 20  ldValue))..     
78d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
78e0: 20 20 49 44 69 73 70 6f 73 61 62 6c 65 20 64 69    IDisposable di
78f0: 73 70 6f 73 61 62 6c 65 20 3d 20 6f 6c 64 56 61  sposable = oldVa
7900: 6c 75 65 20 61 73 20 49 44 69 73 70 6f 73 61 62  lue as IDisposab
7910: 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
7920: 20 20 20 69 66 20 28 64 69 73 70 6f 73 61 62 6c     if (disposabl
7930: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
7940: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7950: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
7960: 73 61 62 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  sable.Dispose();
7970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7980: 20 20 64 69 73 70 6f 73 61 62 6c 65 20 3d 20 6e    disposable = n
7990: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
79a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
79b0: 20 20 20 5f 72 65 67 69 73 74 65 72 65 64 46 75     _registeredFu
79c0: 6e 63 74 69 6f 6e 73 5b 61 74 5d 20 3d 20 6e 65  nctions[at] = ne
79d0: 77 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  wValue;..       
79e0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
79f0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
7a00: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
7a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7a20: 20 20 20 5f 72 65 67 69 73 74 65 72 65 64 46 75     _registeredFu
7a30: 6e 63 74 69 6f 6e 73 2e 41 64 64 28 61 74 2c 20  nctions.Add(at, 
7a40: 6e 65 77 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  newValue);..    
7a50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
7a60: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
7a70: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
7a80: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
7a90: 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20    /// Creates a 
7aa0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
7ab0: 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 69 6e  eFunction" /> in
7ac0: 73 74 61 6e 63 65 20 62 61 73 65 64 20 6f 6e 20  stance based on 
7ad0: 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20  the specified.. 
7ae0: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
7af0: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
7b00: 41 74 74 72 69 62 75 74 65 22 20 2f 3e 2e 0d 0a  Attribute" />...
7b10: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7b20: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
7b30: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
7b40: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
7b50: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
7b60: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
7b70: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 20 2f 3e  ionAttribute" />
7b80: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
7b90: 6d 65 74 61 64 61 74 61 20 61 62 6f 75 74 0d 0a  metadata about..
7ba0: 20 20 20 20 2f 2f 2f 20 74 68 65 20 66 75 6e 63      /// the func
7bb0: 74 69 6f 6e 20 74 6f 20 63 72 65 61 74 65 2e 0d  tion to create..
7bc0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
7bd0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
7be0: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
7bf0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
7c00: 63 72 65 61 74 65 64 20 66 75 6e 63 74 69 6f 6e  created function
7c10: 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 74 68   -OR- null if th
7c20: 65 20 66 75 6e 63 74 69 6f 6e 20 63 6f 75 6c 64  e function could
7c30: 20 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 2e   not be created.
7c40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
7c50: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
7c60: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
7c70: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 66  on-zero if the f
7c80: 75 6e 63 74 69 6f 6e 20 77 61 73 20 63 72 65 61  unction was crea
7c90: 74 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ted; otherwise, 
7ca0: 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  zero...    /// <
7cb0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
7cc0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
7cd0: 6f 6c 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f  ol CreateFunctio
7ce0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  n(..        SQLi
7cf0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
7d00: 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  ute functionAttr
7d10: 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20 20  ibute,..        
7d20: 6f 75 74 20 53 51 4c 69 74 65 46 75 6e 63 74 69  out SQLiteFuncti
7d30: 6f 6e 20 66 75 6e 63 74 69 6f 6e 0d 0a 20 20 20  on function..   
7d40: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
7d50: 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74         if (funct
7d60: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20  ionAttribute == 
7d70: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
7d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 75  ..            fu
7d90: 6e 63 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a  nction = null;..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7db0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
7dc0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
7dd0: 73 65 20 69 66 20 28 28 66 75 6e 63 74 69 6f 6e  se if ((function
7de0: 41 74 74 72 69 62 75 74 65 2e 43 61 6c 6c 62 61  Attribute.Callba
7df0: 63 6b 31 20 21 3d 20 6e 75 6c 6c 29 20 7c 7c 0d  ck1 != null) ||.
7e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7e10: 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62   (functionAttrib
7e20: 75 74 65 2e 43 61 6c 6c 62 61 63 6b 32 20 21 3d  ute.Callback2 !=
7e30: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
7e40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7e50: 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  function = new S
7e60: 51 4c 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e  QLiteDelegateFun
7e70: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
7e80: 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e          function
7e90: 41 74 74 72 69 62 75 74 65 2e 43 61 6c 6c 62 61  Attribute.Callba
7ea0: 63 6b 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ck1,..          
7eb0: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 41 74        functionAt
7ec0: 74 72 69 62 75 74 65 2e 43 61 6c 6c 62 61 63 6b  tribute.Callback
7ed0: 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  2);....         
7ee0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
7ef0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7f00: 20 20 20 20 65 6c 73 65 20 69 66 20 28 66 75 6e      else if (fun
7f10: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e 49  ctionAttribute.I
7f20: 6e 73 74 61 6e 63 65 54 79 70 65 20 21 3d 20 6e  nstanceType != n
7f30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ull)..        {.
7f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6e  .            fun
7f50: 63 74 69 6f 6e 20 3d 20 28 53 51 4c 69 74 65 46  ction = (SQLiteF
7f60: 75 6e 63 74 69 6f 6e 29 41 63 74 69 76 61 74 6f  unction)Activato
7f70: 72 2e 43 72 65 61 74 65 49 6e 73 74 61 6e 63 65  r.CreateInstance
7f80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7f90: 20 20 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69     functionAttri
7fa0: 62 75 74 65 2e 49 6e 73 74 61 6e 63 65 54 79 70  bute.InstanceTyp
7fb0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
7fc0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
7fd0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7fe0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
7ff0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8000: 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 75 6c 6c   function = null
8010: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
8020: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
8030: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
8040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
8050: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
8060: 6c 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  led by the SQLit
8070: 65 42 61 73 65 20 64 65 72 69 76 65 64 20 63 6c  eBase derived cl
8080: 61 73 73 65 73 2c 20 74 68 69 73 20 6d 65 74 68  asses, this meth
8090: 6f 64 20 62 69 6e 64 73 20 61 6c 6c 20 72 65 67  od binds all reg
80a0: 69 73 74 65 72 65 64 20 28 6b 6e 6f 77 6e 29 20  istered (known) 
80b0: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
80c0: 63 74 69 6f 6e 73 20 74 6f 20 61 20 63 6f 6e 6e  ctions to a conn
80d0: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
80e0: 20 49 74 20 69 73 20 64 6f 6e 65 20 74 68 69 73   It is done this
80f0: 20 77 61 79 20 73 6f 20 74 68 61 74 20 61 6c 6c   way so that all
8100: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
8110: 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 61 63 63  nctions will acc
8120: 65 73 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ess the database
8130: 20 75 73 69 6e 67 20 74 68 65 20 73 61 6d 65 20   using the same 
8140: 65 6e 63 6f 64 69 6e 67 20 73 63 68 65 6d 65 0d  encoding scheme.
8150: 0a 20 20 20 20 2f 2f 2f 20 61 73 20 74 68 65 20  .    /// as the 
8160: 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 55 54 46 2d  connection (UTF-
8170: 38 20 6f 72 20 55 54 46 2d 31 36 29 2e 0d 0a 20  8 or UTF-16)... 
8180: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8190: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61  >..    /// <rema
81a0: 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rks>..    /// Th
81b0: 65 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69  e wrapper functi
81c0: 6f 6e 73 20 74 68 61 74 20 69 6e 74 65 72 6f 70  ons that interop
81d0: 20 77 69 74 68 20 53 51 4c 69 74 65 20 77 69 6c   with SQLite wil
81e0: 6c 20 63 72 65 61 74 65 20 61 20 75 6e 69 71 75  l create a uniqu
81f0: 65 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 2c 20  e cookie value, 
8200: 77 68 69 63 68 20 69 6e 74 65 72 6e 61 6c 6c 79  which internally
8210: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
8220: 0d 0a 20 20 20 20 2f 2f 2f 20 61 6c 6c 20 74 68  ..    /// all th
8230: 65 20 77 72 61 70 70 65 64 20 63 61 6c 6c 62 61  e wrapped callba
8240: 63 6b 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54  ck functions.  T
8250: 68 65 20 69 6e 74 65 72 6f 70 20 66 75 6e 63 74  he interop funct
8260: 69 6f 6e 20 75 73 65 73 20 69 74 20 74 6f 20 6d  ion uses it to m
8270: 61 70 20 43 44 65 63 6c 20 63 61 6c 6c 62 61 63  ap CDecl callbac
8280: 6b 73 20 74 6f 20 53 74 64 43 61 6c 6c 20 63 61  ks to StdCall ca
8290: 6c 6c 62 61 63 6b 73 2e 0d 0a 20 20 20 20 2f 2f  llbacks...    //
82a0: 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  / </remarks>..  
82b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
82c0: 65 3d 22 73 71 6c 62 61 73 65 22 3e 54 68 65 20  e="sqlbase">The 
82d0: 62 61 73 65 20 6f 62 6a 65 63 74 20 6f 6e 20 77  base object on w
82e0: 68 69 63 68 20 74 68 65 20 66 75 6e 63 74 69 6f  hich the functio
82f0: 6e 73 20 61 72 65 20 74 6f 20 62 69 6e 64 2e 3c  ns are to bind.<
8300: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
8310: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c   <param name="fl
8320: 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61  ags">The flags a
8330: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
8340: 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63  he parent connec
8350: 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f 70 61  tion object.</pa
8360: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
8370: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
8380: 20 6c 6f 67 69 63 61 6c 20 6c 69 73 74 20 6f 66   logical list of
8390: 20 66 75 6e 63 74 69 6f 6e 73 20 77 68 69 63 68   functions which
83a0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
83b0: 73 68 6f 75 6c 64 20 72 65 74 61 69 6e 20 75 6e  should retain un
83c0: 74 69 6c 20 69 74 20 69 73 20 63 6c 6f 73 65 64  til it is closed
83d0: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
83e0: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
83f0: 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c   IDictionary<SQL
8400: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
8410: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
8420: 74 69 6f 6e 3e 20 42 69 6e 64 46 75 6e 63 74 69  tion> BindFuncti
8430: 6f 6e 73 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ons(..        SQ
8440: 4c 69 74 65 42 61 73 65 20 73 71 6c 62 61 73 65  LiteBase sqlbase
8450: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
8460: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
8470: 20 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20   flags..        
8480: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8490: 20 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51    IDictionary<SQ
84a0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
84b0: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
84c0: 63 74 69 6f 6e 3e 20 6c 46 75 6e 63 74 69 6f 6e  ction> lFunction
84d0: 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s =..           
84e0: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
84f0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
8500: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
8510: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
8520: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
8530: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53 51 4c  KeyValuePair<SQL
8540: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
8550: 62 75 74 65 2c 20 6f 62 6a 65 63 74 3e 20 70 61  bute, object> pa
8560: 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ir..            
8570: 20 20 20 20 69 6e 20 5f 72 65 67 69 73 74 65 72      in _register
8580: 65 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20  edFunctions)..  
8590: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
85a0: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
85b0: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 70 72 20  ionAttribute pr 
85c0: 3d 20 70 61 69 72 2e 4b 65 79 3b 0d 0a 0d 0a 20  = pair.Key;.... 
85d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
85e0: 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
8600: 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
8610: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
8620: 69 6f 6e 20 66 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion f;....      
8630: 20 20 20 20 20 20 69 66 20 28 43 72 65 61 74 65        if (Create
8640: 46 75 6e 63 74 69 6f 6e 28 70 72 2c 20 6f 75 74  Function(pr, out
8650: 20 66 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20   f))..          
8660: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8670: 20 20 20 20 20 42 69 6e 64 46 75 6e 63 74 69 6f       BindFunctio
8680: 6e 28 73 71 6c 62 61 73 65 2c 20 70 72 2c 20 66  n(sqlbase, pr, f
8690: 2c 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20  , flags);..     
86a0: 20 20 20 20 20 20 20 20 20 20 20 6c 46 75 6e 63             lFunc
86b0: 74 69 6f 6e 73 5b 70 72 5d 20 3d 20 66 3b 0d 0a  tions[pr] = f;..
86c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
86d0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
86e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8700: 6c 46 75 6e 63 74 69 6f 6e 73 5b 70 72 5d 20 3d  lFunctions[pr] =
8710: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
8720: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
8740: 72 6e 20 6c 46 75 6e 63 74 69 6f 6e 73 3b 0d 0a  rn lFunctions;..
8750: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
8760: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8770: 2f 2f 2f 20 43 61 6c 6c 65 64 20 62 79 20 74 68  /// Called by th
8780: 65 20 53 51 4c 69 74 65 42 61 73 65 20 64 65 72  e SQLiteBase der
8790: 69 76 65 64 20 63 6c 61 73 73 65 73 2c 20 74 68  ived classes, th
87a0: 69 73 20 6d 65 74 68 6f 64 20 75 6e 62 69 6e 64  is method unbind
87b0: 73 20 61 6c 6c 20 72 65 67 69 73 74 65 72 65 64  s all registered
87c0: 20 28 6b 6e 6f 77 6e 29 0d 0a 20 20 20 20 2f 2f   (known)..    //
87d0: 2f 20 66 75 6e 63 74 69 6f 6e 73 20 2d 4f 52 2d  / functions -OR-
87e0: 20 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c 79 20   all previously 
87f0: 62 6f 75 6e 64 20 75 73 65 72 2d 64 65 66 69 6e  bound user-defin
8800: 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 66 72 6f  ed functions fro
8810: 6d 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  m a connection..
8820: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
8830: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
8840: 72 61 6d 20 6e 61 6d 65 3d 22 73 71 6c 62 61 73  ram name="sqlbas
8850: 65 22 3e 54 68 65 20 62 61 73 65 20 6f 62 6a 65  e">The base obje
8860: 63 74 20 66 72 6f 6d 20 77 68 69 63 68 20 74 68  ct from which th
8870: 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
8880: 74 6f 20 62 65 20 75 6e 62 6f 75 6e 64 2e 3c 2f  to be unbound.</
8890: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
88a0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
88b0: 67 73 22 3e 54 68 65 20 66 6c 61 67 73 20 61 73  gs">The flags as
88c0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
88d0: 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74  e parent connect
88e0: 69 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f 70 61 72  ion object.</par
88f0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
8900: 72 61 6d 20 6e 61 6d 65 3d 22 72 65 67 69 73 74  ram name="regist
8910: 65 72 65 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ered">..    /// 
8920: 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 75 6e 62 69  Non-zero to unbi
8930: 6e 64 20 61 6c 6c 20 72 65 67 69 73 74 65 72 65  nd all registere
8940: 64 20 28 6b 6e 6f 77 6e 29 20 66 75 6e 63 74 69  d (known) functi
8950: 6f 6e 73 20 2d 4f 52 2d 20 7a 65 72 6f 20 74 6f  ons -OR- zero to
8960: 20 75 6e 62 69 6e 64 20 61 6c 6c 20 66 75 6e 63   unbind all func
8970: 74 69 6f 6e 73 0d 0a 20 20 20 20 2f 2f 2f 20 63  tions..    /// c
8980: 75 72 72 65 6e 74 6c 79 20 62 6f 75 6e 64 20 74  urrently bound t
8990: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
89a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
89b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
89c0: 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72 6f 20 69  turns>Non-zero i
89d0: 66 20 61 6c 6c 20 74 68 65 20 73 70 65 63 69 66  f all the specif
89e0: 69 65 64 20 75 73 65 72 2d 64 65 66 69 6e 65 64  ied user-defined
89f0: 20 66 75 6e 63 74 69 6f 6e 73 20 77 65 72 65 20   functions were 
8a00: 75 6e 62 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e  unbound.</return
8a10: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
8a20: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 55 6e 62   static bool Unb
8a30: 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28  indAllFunctions(
8a40: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
8a50: 42 61 73 65 20 73 71 6c 62 61 73 65 2c 0d 0a 20  Base sqlbase,.. 
8a60: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
8a70: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
8a80: 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  gs,..        boo
8a90: 6c 20 72 65 67 69 73 74 65 72 65 64 0d 0a 20 20  l registered..  
8aa0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
8ab0: 20 20 20 20 20 20 20 20 69 66 20 28 73 71 6c 62          if (sqlb
8ac0: 61 73 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ase == null)..  
8ad0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8ae0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
8af0: 20 20 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53     IDictionary<S
8b00: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
8b10: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
8b20: 6e 63 74 69 6f 6e 3e 20 6c 46 75 6e 63 74 69 6f  nction> lFunctio
8b30: 6e 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ns =..          
8b40: 20 20 73 71 6c 62 61 73 65 2e 46 75 6e 63 74 69    sqlbase.Functi
8b50: 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ons;....        
8b60: 69 66 20 28 6c 46 75 6e 63 74 69 6f 6e 73 20 3d  if (lFunctions =
8b70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8b80: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
8b90: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 6f  e;....        bo
8ba0: 6f 6c 20 72 65 73 75 6c 74 20 3d 20 74 72 75 65  ol result = true
8bb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
8bc0: 28 72 65 67 69 73 74 65 72 65 64 29 0d 0a 20 20  (registered)..  
8bd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8be0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4b 65       foreach (Ke
8bf0: 79 56 61 6c 75 65 50 61 69 72 3c 53 51 4c 69 74  yValuePair<SQLit
8c00: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
8c10: 74 65 2c 20 6f 62 6a 65 63 74 3e 20 70 61 69 72  te, object> pair
8c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c30: 20 20 20 20 20 20 69 6e 20 5f 72 65 67 69 73 74        in _regist
8c40: 65 72 65 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a  eredFunctions)..
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
8c70: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
8c80: 72 69 62 75 74 65 20 70 72 20 3d 20 70 61 69 72  ribute pr = pair
8c90: 2e 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  .Key;....       
8ca0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 72 20           if (pr 
8cb0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
8cd0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
8ce0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
8cf0: 65 46 75 6e 63 74 69 6f 6e 20 66 3b 0d 0a 0d 0a  eFunction f;....
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d10: 69 66 20 28 21 6c 46 75 6e 63 74 69 6f 6e 73 2e  if (!lFunctions.
8d20: 54 72 79 47 65 74 56 61 6c 75 65 28 70 72 2c 20  TryGetValue(pr, 
8d30: 6f 75 74 20 66 29 20 7c 7c 0d 0a 20 20 20 20 20  out f) ||..     
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
8d50: 66 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20  f == null) ||.. 
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d70: 20 20 20 21 55 6e 62 69 6e 64 46 75 6e 63 74 69     !UnbindFuncti
8d80: 6f 6e 28 73 71 6c 62 61 73 65 2c 20 70 72 2c 20  on(sqlbase, pr, 
8d90: 66 2c 20 66 6c 61 67 73 29 29 0d 0a 20 20 20 20  f, flags))..    
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 20 20 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73     result = fals
8dd0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
8de0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8df0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
8e00: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
8e10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8e20: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
8e30: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e        // NOTE: N
8e40: 65 65 64 20 74 6f 20 75 73 65 20 61 20 63 6f 70  eed to use a cop
8e50: 79 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  y of the functio
8e60: 6e 20 64 69 63 74 69 6f 6e 61 72 79 20 69 6e 20  n dictionary in 
8e70: 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  this method..   
8e80: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
8e90: 20 20 62 65 63 61 75 73 65 20 74 68 65 20 64 69    because the di
8ea0: 63 74 69 6f 6e 61 72 79 20 69 73 20 6d 6f 64 69  ctionary is modi
8eb0: 66 69 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  fied within the 
8ec0: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 0d 0a  UnbindFunction..
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
8ee0: 20 20 20 20 20 6d 65 74 68 6f 64 2c 20 77 68 69       method, whi
8ef0: 63 68 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 73  ch is called ins
8f00: 69 64 65 20 74 68 65 20 6c 6f 6f 70 2e 0d 0a 20  ide the loop... 
8f10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
8f20: 20 20 20 20 20 20 20 20 20 20 20 6c 46 75 6e 63             lFunc
8f30: 74 69 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63 74  tions = new Dict
8f40: 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e  ionary<SQLiteFun
8f50: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
8f60: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28  SQLiteFunction>(
8f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8f80: 20 20 6c 46 75 6e 63 74 69 6f 6e 73 29 3b 0d 0a    lFunctions);..
8f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
8fa0: 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65 50  reach (KeyValueP
8fb0: 61 69 72 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  air<SQLiteFuncti
8fc0: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c  onAttribute, SQL
8fd0: 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 70 61 69  iteFunction> pai
8fe0: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
8ff0: 20 20 20 20 20 20 20 69 6e 20 6c 46 75 6e 63 74         in lFunct
9000: 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ions)..         
9010: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9020: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
9030: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 70 72  tionAttribute pr
9040: 20 3d 20 70 61 69 72 2e 4b 65 79 3b 0d 0a 0d 0a   = pair.Key;....
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9060: 69 66 20 28 70 72 20 3d 3d 20 6e 75 6c 6c 29 0d  if (pr == null).
9070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9080: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
9090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
90a0: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
90b0: 20 66 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b   f = pair.Value;
90c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
90d0: 20 20 20 20 69 66 20 28 28 66 20 3d 3d 20 6e 75      if ((f == nu
90e0: 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  ll) ||..        
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 21 55 6e 62              !Unb
9100: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 62  indFunction(sqlb
9110: 61 73 65 2c 20 70 72 2c 20 66 2c 20 66 6c 61 67  ase, pr, f, flag
9120: 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s))..           
9130: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9140: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
9150: 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  lt = false;..   
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9170: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9180: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9190: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
91a0: 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
91b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
91c0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e      /// This fun
91d0: 63 74 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73  ction binds a us
91e0: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
91f0: 69 6f 6e 20 74 6f 20 61 20 63 6f 6e 6e 65 63 74  ion to a connect
9200: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
9210: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9220: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
9230: 71 6c 69 74 65 42 61 73 65 22 3e 0d 0a 20 20 20  qliteBase">..   
9240: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
9250: 65 66 3d 22 53 51 4c 69 74 65 42 61 73 65 22 20  ef="SQLiteBase" 
9260: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
9270: 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ce associated wi
9280: 74 68 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  th the..    /// 
9290: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
92a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20  eConnection" /> 
92b0: 74 68 61 74 20 74 68 65 20 66 75 6e 63 74 69 6f  that the functio
92c0: 6e 20 73 68 6f 75 6c 64 20 62 65 20 62 6f 75 6e  n should be boun
92d0: 64 20 74 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  d to...    /// <
92e0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
92f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
9300: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
9310: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
9320: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
9330: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
9340: 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  e"/> object inst
9350: 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d  ance containing.
9360: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74  .    /// the met
9370: 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66 75  adata for the fu
9380: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75  nction to be bou
9390: 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  nd...    /// </p
93a0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
93b0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
93c0: 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  tion">..    /// 
93d0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
93e0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e  QLiteFunction"/>
93f0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
9400: 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
9410: 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75   the..    /// fu
9420: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75  nction to be bou
9430: 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  nd...    /// </p
9440: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
9450: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67  param name="flag
9460: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
9470: 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
9480: 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e  d with the paren
9490: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  t connection obj
94a0: 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
94b0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
94c0: 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64  rnal static void
94d0: 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a   BindFunction(..
94e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
94f0: 73 65 20 73 71 6c 69 74 65 42 61 73 65 2c 0d 0a  se sqliteBase,..
9500: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
9510: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
9520: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
9530: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
9540: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  teFunction funct
9550: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ion,..        SQ
9560: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
9570: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
9580: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
9590: 20 20 20 20 20 69 66 20 28 73 71 6c 69 74 65 42       if (sqliteB
95a0: 61 73 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ase == null)..  
95b0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
95c0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
95d0: 45 78 63 65 70 74 69 6f 6e 28 22 73 71 6c 69 74  Exception("sqlit
95e0: 65 42 61 73 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  eBase");....    
95f0: 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e      if (function
9600: 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c  Attribute == nul
9610: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
9620: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
9630: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
9640: 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  "functionAttribu
9650: 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  te");....       
9660: 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d 3d   if (function ==
9670: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9680: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
9690: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
96a0: 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29 3b  ion("function");
96b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 46 75 6e 63  ....        Func
96c0: 74 69 6f 6e 54 79 70 65 20 66 75 6e 63 74 69 6f  tionType functio
96d0: 6e 54 79 70 65 20 3d 20 66 75 6e 63 74 69 6f 6e  nType = function
96e0: 41 74 74 72 69 62 75 74 65 2e 46 75 6e 63 54 79  Attribute.FuncTy
96f0: 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  pe;....        f
9700: 75 6e 63 74 69 6f 6e 2e 5f 62 61 73 65 20 3d 20  unction._base = 
9710: 73 71 6c 69 74 65 42 61 73 65 3b 0d 0a 20 20 20  sqliteBase;..   
9720: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 66       function._f
9730: 6c 61 67 73 20 3d 20 66 6c 61 67 73 3b 0d 0a 0d  lags = flags;...
9740: 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f  .        functio
9750: 6e 2e 5f 49 6e 76 6f 6b 65 46 75 6e 63 20 3d 20  n._InvokeFunc = 
9760: 28 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 3d  (functionType ==
9770: 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 53 63   FunctionType.Sc
9780: 61 6c 61 72 29 20 3f 0d 0a 20 20 20 20 20 20 20  alar) ?..       
9790: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 43       new SQLiteC
97a0: 61 6c 6c 62 61 63 6b 28 66 75 6e 63 74 69 6f 6e  allback(function
97b0: 2e 53 63 61 6c 61 72 43 61 6c 6c 62 61 63 6b 29  .ScalarCallback)
97c0: 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   : null;....    
97d0: 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 53 74      function._St
97e0: 65 70 46 75 6e 63 20 3d 20 28 66 75 6e 63 74 69  epFunc = (functi
97f0: 6f 6e 54 79 70 65 20 3d 3d 20 46 75 6e 63 74 69  onType == Functi
9800: 6f 6e 54 79 70 65 2e 41 67 67 72 65 67 61 74 65  onType.Aggregate
9810: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
9820: 20 6e 65 77 20 53 51 4c 69 74 65 43 61 6c 6c 62   new SQLiteCallb
9830: 61 63 6b 28 66 75 6e 63 74 69 6f 6e 2e 53 74 65  ack(function.Ste
9840: 70 43 61 6c 6c 62 61 63 6b 29 20 3a 20 6e 75 6c  pCallback) : nul
9850: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 75  l;....        fu
9860: 6e 63 74 69 6f 6e 2e 5f 46 69 6e 61 6c 46 75 6e  nction._FinalFun
9870: 63 20 3d 20 28 66 75 6e 63 74 69 6f 6e 54 79 70  c = (functionTyp
9880: 65 20 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70  e == FunctionTyp
9890: 65 2e 41 67 67 72 65 67 61 74 65 29 20 3f 0d 0a  e.Aggregate) ?..
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
98b0: 53 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62  SQLiteFinalCallb
98c0: 61 63 6b 28 66 75 6e 63 74 69 6f 6e 2e 46 69 6e  ack(function.Fin
98d0: 61 6c 43 61 6c 6c 62 61 63 6b 29 20 3a 20 6e 75  alCallback) : nu
98e0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  ll;....        f
98f0: 75 6e 63 74 69 6f 6e 2e 5f 43 6f 6d 70 61 72 65  unction._Compare
9900: 46 75 6e 63 20 3d 20 28 66 75 6e 63 74 69 6f 6e  Func = (function
9910: 54 79 70 65 20 3d 3d 20 46 75 6e 63 74 69 6f 6e  Type == Function
9920: 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29 20  Type.Collation) 
9930: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ?..            n
9940: 65 77 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  ew SQLiteCollati
9950: 6f 6e 28 66 75 6e 63 74 69 6f 6e 2e 43 6f 6d 70  on(function.Comp
9960: 61 72 65 43 61 6c 6c 62 61 63 6b 29 20 3a 20 6e  areCallback) : n
9970: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
9980: 66 75 6e 63 74 69 6f 6e 2e 5f 43 6f 6d 70 61 72  function._Compar
9990: 65 46 75 6e 63 31 36 20 3d 20 28 66 75 6e 63 74  eFunc16 = (funct
99a0: 69 6f 6e 54 79 70 65 20 3d 3d 20 46 75 6e 63 74  ionType == Funct
99b0: 69 6f 6e 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f  ionType.Collatio
99c0: 6e 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  n) ?..          
99d0: 20 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6c 6c    new SQLiteColl
99e0: 61 74 69 6f 6e 28 66 75 6e 63 74 69 6f 6e 2e 43  ation(function.C
99f0: 6f 6d 70 61 72 65 43 61 6c 6c 62 61 63 6b 31 36  ompareCallback16
9a00: 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  ) : null;....   
9a10: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
9a20: 20 3d 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69   = functionAttri
9a30: 62 75 74 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  bute.Name;....  
9a40: 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69        if (functi
9a50: 6f 6e 54 79 70 65 20 21 3d 20 46 75 6e 63 74 69  onType != Functi
9a60: 6f 6e 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e  onType.Collation
9a70: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9a80: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
9a90: 65 65 64 43 6f 6c 6c 53 65 71 20 3d 20 28 66 75  eedCollSeq = (fu
9aa0: 6e 63 74 69 6f 6e 20 69 73 20 53 51 4c 69 74 65  nction is SQLite
9ab0: 46 75 6e 63 74 69 6f 6e 45 78 29 3b 0d 0a 0d 0a  FunctionEx);....
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
9ad0: 74 65 42 61 73 65 2e 43 72 65 61 74 65 46 75 6e  teBase.CreateFun
9ae0: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
9af0: 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 66 75          name, fu
9b00: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e  nctionAttribute.
9b10: 41 72 67 75 6d 65 6e 74 73 2c 20 6e 65 65 64 43  Arguments, needC
9b20: 6f 6c 6c 53 65 71 2c 0d 0a 20 20 20 20 20 20 20  ollSeq,..       
9b30: 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f           functio
9b40: 6e 2e 5f 49 6e 76 6f 6b 65 46 75 6e 63 2c 20 66  n._InvokeFunc, f
9b50: 75 6e 63 74 69 6f 6e 2e 5f 53 74 65 70 46 75 6e  unction._StepFun
9b60: 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
9b70: 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 46 69      function._Fi
9b80: 6e 61 6c 46 75 6e 63 2c 20 74 72 75 65 29 3b 0d  nalFunc, true);.
9b90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9ba0: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
9bb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9bc0: 20 73 71 6c 69 74 65 42 61 73 65 2e 43 72 65 61   sqliteBase.Crea
9bd0: 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 0d 0a 20 20  teCollation(..  
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
9bf0: 6d 65 2c 20 66 75 6e 63 74 69 6f 6e 2e 5f 43 6f  me, function._Co
9c00: 6d 70 61 72 65 46 75 6e 63 2c 20 66 75 6e 63 74  mpareFunc, funct
9c10: 69 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e 63  ion._CompareFunc
9c20: 31 36 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  16,..           
9c30: 20 20 20 20 20 74 72 75 65 29 3b 0d 0a 20 20 20       true);..   
9c40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
9c50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
9c60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
9c70: 20 66 75 6e 63 74 69 6f 6e 20 75 6e 62 69 6e 64   function unbind
9c80: 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  s a user-defined
9c90: 20 66 75 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20   functions from 
9ca0: 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  a connection... 
9cb0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9cc0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
9cd0: 6d 20 6e 61 6d 65 3d 22 73 71 6c 69 74 65 42 61  m name="sqliteBa
9ce0: 73 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  se">..    /// Th
9cf0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
9d00: 69 74 65 42 61 73 65 22 20 2f 3e 20 6f 62 6a 65  iteBase" /> obje
9d10: 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f  ct instance asso
9d20: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 0d  ciated with the.
9d30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72  .    /// <see cr
9d40: 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ef="SQLiteConnec
9d50: 74 69 6f 6e 22 20 2f 3e 20 74 68 61 74 20 74 68  tion" /> that th
9d60: 65 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c  e function shoul
9d70: 64 20 62 65 20 62 6f 75 6e 64 20 74 6f 2e 0d 0a  d be bound to...
9d80: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
9d90: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
9da0: 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 41   name="functionA
9db0: 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20 20 20  ttribute">..    
9dc0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
9dd0: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
9de0: 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20 6f 62  nAttribute"/> ob
9df0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f  ject instance co
9e00: 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f  ntaining..    //
9e10: 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61 20 66  / the metadata f
9e20: 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  or the function 
9e30: 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20  to be bound...  
9e40: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
9e50: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9e60: 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22 3e 0d  ame="function">.
9e70: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
9e80: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
9e90: 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65 63 74  nction"/> object
9ea0: 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74 20 69   instance that i
9eb0: 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d 0a 20  mplements the.. 
9ec0: 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20     /// function 
9ed0: 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20  to be bound...  
9ee0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
9ef0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
9f00: 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
9f10: 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20    /// The flags 
9f20: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
9f30: 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65  the parent conne
9f40: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20  ction object... 
9f50: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
9f60: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
9f70: 73 3e 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  s>Non-zero if th
9f80: 65 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 75  e function was u
9f90: 6e 62 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73  nbound.</returns
9fa0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
9fb0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 55 6e 62 69  static bool Unbi
9fc0: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
9fd0: 20 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20       SQLiteBase 
9fe0: 73 71 6c 69 74 65 42 61 73 65 2c 0d 0a 20 20 20  sqliteBase,..   
9ff0: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
a000: 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e  ionAttribute fun
a010: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d  ctionAttribute,.
a020: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46  .        SQLiteF
a030: 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  unction function
a040: 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ,..        SQLit
a050: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a060: 20 66 6c 61 67 73 20 2f 2a 20 4e 4f 54 20 55 53   flags /* NOT US
a070: 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 29  ED */..        )
a080: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
a090: 20 69 66 20 28 73 71 6c 69 74 65 42 61 73 65 20   if (sqliteBase 
a0a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
a0b0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
a0c0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
a0d0: 70 74 69 6f 6e 28 22 73 71 6c 69 74 65 42 61 73  ption("sqliteBas
a0e0: 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
a0f0: 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72  if (functionAttr
a100: 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ibute == null)..
a110: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
a120: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
a130: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e  llException("fun
a140: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 29  ctionAttribute")
a150: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
a160: 28 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c  (function == nul
a170: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
a180: 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
a190: 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
a1a0: 22 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a 0d 0a  "function");....
a1b0: 20 20 20 20 20 20 20 20 46 75 6e 63 74 69 6f 6e          Function
a1c0: 54 79 70 65 20 66 75 6e 63 74 69 6f 6e 54 79 70  Type functionTyp
a1d0: 65 20 3d 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  e = functionAttr
a1e0: 69 62 75 74 65 2e 46 75 6e 63 54 79 70 65 3b 0d  ibute.FuncType;.
a1f0: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
a200: 6e 61 6d 65 20 3d 20 66 75 6e 63 74 69 6f 6e 41  name = functionA
a210: 74 74 72 69 62 75 74 65 2e 4e 61 6d 65 3b 0d 0a  ttribute.Name;..
a220: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 75  ..        if (fu
a230: 6e 63 74 69 6f 6e 54 79 70 65 20 21 3d 20 46 75  nctionType != Fu
a240: 6e 63 74 69 6f 6e 54 79 70 65 2e 43 6f 6c 6c 61  nctionType.Colla
a250: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b  tion)..        {
a260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
a270: 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d  ol needCollSeq =
a280: 20 28 66 75 6e 63 74 69 6f 6e 20 69 73 20 53 51   (function is SQ
a290: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 45 78 29 3b  LiteFunctionEx);
a2a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a2b0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 42 61 73  return sqliteBas
a2c0: 65 2e 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e  e.CreateFunction
a2d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a2e0: 20 20 20 6e 61 6d 65 2c 20 66 75 6e 63 74 69 6f     name, functio
a2f0: 6e 41 74 74 72 69 62 75 74 65 2e 41 72 67 75 6d  nAttribute.Argum
a300: 65 6e 74 73 2c 20 6e 65 65 64 43 6f 6c 6c 53 65  ents, needCollSe
a310: 71 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  q,..            
a320: 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20      null, null, 
a330: 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 20 3d 3d 20  null, false) == 
a340: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a350: 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  Ok;..        }..
a360: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
a370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a380: 20 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69       return sqli
a390: 74 65 42 61 73 65 2e 43 72 65 61 74 65 43 6f 6c  teBase.CreateCol
a3a0: 6c 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  lation(..       
a3b0: 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 6e           name, n
a3c0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 66 61 6c 73 65  ull, null, false
a3d0: 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  ) == SQLiteError
a3e0: 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20  Code.Ok;..      
a3f0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d    }..    }..  }.
a400: 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...  ///////////
a410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a450: 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d  //....  /// <sum
a460: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69  mary>..  /// Thi
a470: 73 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c  s <see cref="Del
a480: 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 20 69  egate" /> type i
a490: 73 20 75 73 65 64 20 77 69 74 68 20 74 68 65 0d  s used with the.
a4a0: 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66  .  /// <see cref
a4b0: 3d 22 53 51 4c 69 74 65 44 65 6c 65 67 61 74 65  ="SQLiteDelegate
a4c0: 46 75 6e 63 74 69 6f 6e 2e 49 6e 76 6f 6b 65 22  Function.Invoke"
a4d0: 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 2f   /> method...  /
a4e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
a4f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
a500: 3d 22 70 61 72 61 6d 30 22 3e 0d 0a 20 20 2f 2f  ="param0">..  //
a510: 2f 20 54 68 69 73 20 69 73 20 61 6c 77 61 79 73  / This is always
a520: 20 74 68 65 20 73 74 72 69 6e 67 20 6c 69 74 65   the string lite
a530: 72 61 6c 20 22 49 6e 76 6f 6b 65 22 2e 0d 0a 20  ral "Invoke"... 
a540: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
a550: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
a560: 3d 22 61 72 67 73 22 3e 0d 0a 20 20 2f 2f 2f 20  ="args">..  /// 
a570: 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 66 6f  The arguments fo
a580: 72 20 74 68 65 20 73 63 61 6c 61 72 20 66 75 6e  r the scalar fun
a590: 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ction...  /// </
a5a0: 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 72  param>..  /// <r
a5b0: 65 74 75 72 6e 73 3e 0d 0a 20 20 2f 2f 2f 20 54  eturns>..  /// T
a5c0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
a5d0: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
a5e0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  ...  /// </retur
a5f0: 6e 73 3e 0d 0a 20 20 70 75 62 6c 69 63 20 64 65  ns>..  public de
a600: 6c 65 67 61 74 65 20 6f 62 6a 65 63 74 20 53 51  legate object SQ
a610: 4c 69 74 65 49 6e 76 6f 6b 65 44 65 6c 65 67 61  LiteInvokeDelega
a620: 74 65 28 0d 0a 20 20 20 20 73 74 72 69 6e 67 20  te(..    string 
a630: 70 61 72 61 6d 30 2c 0d 0a 20 20 20 20 6f 62 6a  param0,..    obj
a640: 65 63 74 5b 5d 20 61 72 67 73 0d 0a 20 20 29 3b  ect[] args..  );
a650: 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ....  //////////
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6a0: 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75  ///....  /// <su
a6b0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
a6c0: 69 73 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65  is <see cref="De
a6d0: 6c 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 20  legate" /> type 
a6e0: 69 73 20 75 73 65 64 20 77 69 74 68 20 74 68 65  is used with the
a6f0: 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65  ..  /// <see cre
a700: 66 3d 22 53 51 4c 69 74 65 44 65 6c 65 67 61 74  f="SQLiteDelegat
a710: 65 46 75 6e 63 74 69 6f 6e 2e 53 74 65 70 22 20  eFunction.Step" 
a720: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 2f 2f  /> method...  //
a730: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
a740: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
a750: 22 70 61 72 61 6d 30 22 3e 0d 0a 20 20 2f 2f 2f  "param0">..  ///
a760: 20 54 68 69 73 20 69 73 20 61 6c 77 61 79 73 20   This is always 
a770: 74 68 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72  the string liter
a780: 61 6c 20 22 53 74 65 70 22 2e 0d 0a 20 20 2f 2f  al "Step"...  //
a790: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f  / </param>..  //
a7a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
a7b0: 72 67 73 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65  rgs">..  /// The
a7c0: 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74   arguments for t
a7d0: 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
a7e0: 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ction...  /// </
a7f0: 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70  param>..  /// <p
a800: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 65 70 4e  aram name="stepN
a810: 75 6d 62 65 72 22 3e 0d 0a 20 20 2f 2f 2f 20 54  umber">..  /// T
a820: 68 65 20 73 74 65 70 20 6e 75 6d 62 65 72 20 28  he step number (
a830: 6f 6e 65 20 62 61 73 65 64 29 2e 20 20 54 68 69  one based).  Thi
a840: 73 20 69 73 20 69 6e 63 72 65 6d 65 6d 74 65 64  s is incrememted
a850: 20 65 61 63 68 20 74 69 6d 65 20 74 68 65 0d 0a   each time the..
a860: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
a870: 22 53 51 4c 69 74 65 44 65 6c 65 67 61 74 65 46  "SQLiteDelegateF
a880: 75 6e 63 74 69 6f 6e 2e 53 74 65 70 22 20 2f 3e  unction.Step" />
a890: 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
a8a0: 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  d...  /// </para
a8b0: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
a8c0: 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61   name="contextDa
a8d0: 74 61 22 3e 0d 0a 20 20 2f 2f 2f 20 41 20 70 6c  ta">..  /// A pl
a8e0: 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20 69 6d  aceholder for im
a8f0: 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20 73 74  plementers to st
a900: 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c 20 64  ore contextual d
a910: 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67 0d 0a  ata pertaining..
a920: 20 20 2f 2f 2f 20 74 6f 20 74 68 65 20 63 75 72    /// to the cur
a930: 72 65 6e 74 20 63 6f 6e 74 65 78 74 2e 0d 0a 20  rent context... 
a940: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
a950: 20 70 75 62 6c 69 63 20 64 65 6c 65 67 61 74 65   public delegate
a960: 20 76 6f 69 64 20 53 51 4c 69 74 65 53 74 65 70   void SQLiteStep
a970: 44 65 6c 65 67 61 74 65 28 0d 0a 20 20 20 20 73  Delegate(..    s
a980: 74 72 69 6e 67 20 70 61 72 61 6d 30 2c 0d 0a 20  tring param0,.. 
a990: 20 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73     object[] args
a9a0: 2c 0d 0a 20 20 20 20 69 6e 74 20 73 74 65 70 4e  ,..    int stepN
a9b0: 75 6d 62 65 72 2c 0d 0a 20 20 20 20 72 65 66 20  umber,..    ref 
a9c0: 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78 74 44 61  object contextDa
a9d0: 74 61 0d 0a 20 20 29 3b 0d 0a 0d 0a 20 20 2f 2f  ta..  );....  //
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
aa30: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
aa40: 20 20 2f 2f 2f 20 54 68 69 73 20 3c 73 65 65 20    /// This <see 
aa50: 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20  cref="Delegate" 
aa60: 2f 3e 20 74 79 70 65 20 69 73 20 75 73 65 64 20  /> type is used 
aa70: 77 69 74 68 20 74 68 65 0d 0a 20 20 2f 2f 2f 20  with the..  /// 
aa80: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
aa90: 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f  eDelegateFunctio
aaa0: 6e 2e 46 69 6e 61 6c 22 20 2f 3e 20 6d 65 74 68  n.Final" /> meth
aab0: 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  od...  /// </sum
aac0: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61  mary>..  /// <pa
aad0: 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 30  ram name="param0
aae0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 69  ">..  /// This i
aaf0: 73 20 61 6c 77 61 79 73 20 74 68 65 20 73 74 72  s always the str
ab00: 69 6e 67 20 6c 69 74 65 72 61 6c 20 22 46 69 6e  ing literal "Fin
ab10: 61 6c 22 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61  al"...  /// </pa
ab20: 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ram>..  /// <par
ab30: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74  am name="context
ab40: 44 61 74 61 22 3e 0d 0a 20 20 2f 2f 2f 20 41 20  Data">..  /// A 
ab50: 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20  placeholder for 
ab60: 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20  implementers to 
ab70: 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c  store contextual
ab80: 20 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67   data pertaining
ab90: 0d 0a 20 20 2f 2f 2f 20 74 6f 20 74 68 65 20 63  ..  /// to the c
aba0: 75 72 72 65 6e 74 20 63 6f 6e 74 65 78 74 2e 0d  urrent context..
abb0: 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d  .  /// </param>.
abc0: 0a 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e  .  /// <returns>
abd0: 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75  ..  /// The resu
abe0: 6c 74 20 6f 66 20 74 68 65 20 61 67 67 72 65 67  lt of the aggreg
abf0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  ate function... 
ac00: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
ac10: 0a 20 20 70 75 62 6c 69 63 20 64 65 6c 65 67 61  .  public delega
ac20: 74 65 20 6f 62 6a 65 63 74 20 53 51 4c 69 74 65  te object SQLite
ac30: 46 69 6e 61 6c 44 65 6c 65 67 61 74 65 28 0d 0a  FinalDelegate(..
ac40: 20 20 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d      string param
ac50: 30 2c 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20 63  0,..    object c
ac60: 6f 6e 74 65 78 74 44 61 74 61 0d 0a 20 20 29 3b  ontextData..  );
ac70: 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ....  //////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75  ///....  /// <su
acd0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
ace0: 69 73 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65  is <see cref="De
acf0: 6c 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 20  legate" /> type 
ad00: 69 73 20 75 73 65 64 20 77 69 74 68 20 74 68 65  is used with the
ad10: 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65  ..  /// <see cre
ad20: 66 3d 22 53 51 4c 69 74 65 44 65 6c 65 67 61 74  f="SQLiteDelegat
ad30: 65 46 75 6e 63 74 69 6f 6e 2e 43 6f 6d 70 61 72  eFunction.Compar
ad40: 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
ad50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ad60: 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61  .  /// <param na
ad70: 6d 65 3d 22 70 61 72 61 6d 30 22 3e 0d 0a 20 20  me="param0">..  
ad80: 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6c 77 61  /// This is alwa
ad90: 79 73 20 74 68 65 20 73 74 72 69 6e 67 20 6c 69  ys the string li
ada0: 74 65 72 61 6c 20 22 43 6f 6d 70 61 72 65 22 2e  teral "Compare".
adb0: 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e  ..  /// </param>
adc0: 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e  ..  /// <param n
add0: 61 6d 65 3d 22 70 61 72 61 6d 31 22 3e 0d 0a 20  ame="param1">.. 
ade0: 20 2f 2f 2f 20 54 68 65 20 66 69 72 73 74 20 73   /// The first s
adf0: 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65  tring to compare
ae00: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  ...  /// </param
ae10: 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
ae20: 6e 61 6d 65 3d 22 70 61 72 61 6d 32 22 3e 0d 0a  name="param2">..
ae30: 20 20 2f 2f 2f 20 54 68 65 20 73 65 63 6f 6e 64    /// The second
ae40: 20 73 74 72 6e 69 67 20 74 6f 20 63 6f 6d 70 61   strnig to compa
ae50: 72 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72  re...  /// </par
ae60: 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65 74 75  am>..  /// <retu
ae70: 72 6e 73 3e 0d 0a 20 20 2f 2f 2f 20 41 20 70 6f  rns>..  /// A po
ae80: 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 20 69  sitive integer i
ae90: 66 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20  f the <paramref 
aea0: 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22 20 2f 3e  name="param1" />
aeb0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 0d 0a 20   parameter is.. 
aec0: 20 2f 2f 2f 20 67 72 65 61 74 65 72 20 74 68 61   /// greater tha
aed0: 6e 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20  n the <paramref 
aee0: 6e 61 6d 65 3d 22 70 61 72 61 6d 32 22 20 2f 3e  name="param2" />
aef0: 20 70 61 72 61 6d 65 74 65 72 2c 20 61 20 6e 65   parameter, a ne
af00: 67 61 74 69 76 65 0d 0a 20 20 2f 2f 2f 20 69 6e  gative..  /// in
af10: 74 65 67 65 72 20 69 66 20 74 68 65 20 3c 70 61  teger if the <pa
af20: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 70 61 72  ramref name="par
af30: 61 6d 31 22 20 2f 3e 20 70 61 72 61 6d 65 74 65  am1" /> paramete
af40: 72 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0d 0a  r is less than..
af50: 20 20 2f 2f 2f 20 74 68 65 20 3c 70 61 72 61 6d    /// the <param
af60: 72 65 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32  ref name="param2
af70: 22 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 2c 20  " /> parameter, 
af80: 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 79 20  or zero if they 
af90: 61 72 65 0d 0a 20 20 2f 2f 2f 20 65 71 75 61 6c  are..  /// equal
afa0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  ...  /// </retur
afb0: 6e 73 3e 0d 0a 20 20 70 75 62 6c 69 63 20 64 65  ns>..  public de
afc0: 6c 65 67 61 74 65 20 69 6e 74 20 53 51 4c 69 74  legate int SQLit
afd0: 65 43 6f 6d 70 61 72 65 44 65 6c 65 67 61 74 65  eCompareDelegate
afe0: 28 0d 0a 20 20 20 20 73 74 72 69 6e 67 20 70 61  (..    string pa
aff0: 72 61 6d 30 2c 0d 0a 20 20 20 20 73 74 72 69 6e  ram0,..    strin
b000: 67 20 70 61 72 61 6d 31 2c 0d 0a 20 20 20 20 73  g param1,..    s
b010: 74 72 69 6e 67 20 70 61 72 61 6d 32 0d 0a 20 20  tring param2..  
b020: 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f  );....  ////////
b030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 21 50 4c  /////....#if !PL
b080: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
b090: 41 4d 45 57 4f 52 4b 0d 0a 20 20 2f 2f 2f 20 3c  AMEWORK..  /// <
b0a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
b0b0: 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70 6c 65  This class imple
b0c0: 6d 65 6e 74 73 20 61 20 53 51 4c 69 74 65 20 66  ments a SQLite f
b0d0: 75 6e 63 74 69 6f 6e 20 75 73 69 6e 67 20 61 20  unction using a 
b0e0: 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67  <see cref="Deleg
b0f0: 61 74 65 22 20 2f 3e 2e 0d 0a 20 20 2f 2f 2f 20  ate" />...  /// 
b100: 41 6c 6c 20 74 68 65 20 76 69 72 74 75 61 6c 20  All the virtual 
b110: 6d 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 3c  methods of the <
b120: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
b130: 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 63 6c 61  Function" /> cla
b140: 73 73 20 61 72 65 0d 0a 20 20 2f 2f 2f 20 69 6d  ss are..  /// im
b150: 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20  plemented using 
b160: 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 3c 73 65  calls to the <se
b170: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
b180: 76 6f 6b 65 44 65 6c 65 67 61 74 65 22 20 2f 3e  vokeDelegate" />
b190: 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72  ,..  /// <see cr
b1a0: 65 66 3d 22 53 51 4c 69 74 65 53 74 65 70 44 65  ef="SQLiteStepDe
b1b0: 6c 65 67 61 74 65 22 20 2f 3e 2c 20 3c 73 65 65  legate" />, <see
b1c0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 69 6e   cref="SQLiteFin
b1d0: 61 6c 44 65 6c 65 67 61 74 65 22 20 2f 3e 2c 0d  alDelegate" />,.
b1e0: 0a 20 20 2f 2f 2f 20 61 6e 64 20 3c 73 65 65 20  .  /// and <see 
b1f0: 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6d 70  cref="SQLiteComp
b200: 61 72 65 44 65 6c 65 67 61 74 65 22 20 2f 3e 20  areDelegate" /> 
b210: 73 74 72 6f 6e 67 6c 79 20 74 79 70 65 64 20 64  strongly typed d
b220: 65 6c 65 67 61 74 65 20 74 79 70 65 73 0d 0a 20  elegate types.. 
b230: 20 2f 2f 2f 20 6f 72 20 76 69 61 20 74 68 65 20   /// or via the 
b240: 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67  <see cref="Deleg
b250: 61 74 65 2e 44 79 6e 61 6d 69 63 49 6e 76 6f 6b  ate.DynamicInvok
b260: 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
b270: 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e   /// The argumen
b280: 74 73 20 61 72 65 20 70 72 65 73 65 6e 74 65 64  ts are presented
b290: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64   in the same ord
b2a0: 65 72 20 74 68 65 79 20 61 70 70 65 61 72 20 69  er they appear i
b2b0: 6e 0d 0a 20 20 2f 2f 2f 20 74 68 65 20 61 73 73  n..  /// the ass
b2c0: 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65  ociated <see cre
b2d0: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
b2e0: 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 73 20 77 69  n" /> methods wi
b2f0: 74 68 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e  th one exception
b300: 3a 0d 0a 20 20 2f 2f 2f 20 74 68 65 20 66 69 72  :..  /// the fir
b310: 73 74 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74  st argument is t
b320: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76  he name of the v
b330: 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 20 62 65  irtual method be
b340: 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e  ing implemented.
b350: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
b360: 79 3e 0d 0a 23 65 6c 73 65 0d 0a 20 20 2f 2f 2f  y>..#else..  ///
b370: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
b380: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 69 6d 70  / This class imp
b390: 6c 65 6d 65 6e 74 73 20 61 20 53 51 4c 69 74 65  lements a SQLite
b3a0: 20 66 75 6e 63 74 69 6f 6e 20 75 73 69 6e 67 20   function using 
b3b0: 61 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c  a <see cref="Del
b3c0: 65 67 61 74 65 22 20 2f 3e 2e 0d 0a 20 20 2f 2f  egate" />...  //
b3d0: 2f 20 41 6c 6c 20 74 68 65 20 76 69 72 74 75 61  / All the virtua
b3e0: 6c 20 6d 65 74 68 6f 64 73 20 6f 66 20 74 68 65  l methods of the
b3f0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
b400: 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 63  teFunction" /> c
b410: 6c 61 73 73 20 61 72 65 0d 0a 20 20 2f 2f 2f 20  lass are..  /// 
b420: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e  implemented usin
b430: 67 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 3c  g calls to the <
b440: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
b450: 49 6e 76 6f 6b 65 44 65 6c 65 67 61 74 65 22 20  InvokeDelegate" 
b460: 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20  />,..  /// <see 
b470: 63 72 65 66 3d 22 53 51 4c 69 74 65 53 74 65 70  cref="SQLiteStep
b480: 44 65 6c 65 67 61 74 65 22 20 2f 3e 2c 20 3c 73  Delegate" />, <s
b490: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
b4a0: 69 6e 61 6c 44 65 6c 65 67 61 74 65 22 20 2f 3e  inalDelegate" />
b4b0: 2c 0d 0a 20 20 2f 2f 2f 20 61 6e 64 20 3c 73 65  ,..  /// and <se
b4c0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
b4d0: 6d 70 61 72 65 44 65 6c 65 67 61 74 65 22 20 2f  mpareDelegate" /
b4e0: 3e 20 73 74 72 6f 6e 67 6c 79 20 74 79 70 65 64  > strongly typed
b4f0: 20 64 65 6c 65 67 61 74 65 20 74 79 70 65 73 2e   delegate types.
b500: 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 75  ..  /// The argu
b510: 6d 65 6e 74 73 20 61 72 65 20 70 72 65 73 65 6e  ments are presen
b520: 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
b530: 6f 72 64 65 72 20 74 68 65 79 20 61 70 70 65 61  order they appea
b540: 72 20 69 6e 0d 0a 20 20 2f 2f 2f 20 74 68 65 20  r in..  /// the 
b550: 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20  associated <see 
b560: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
b570: 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 73  tion" /> methods
b580: 20 77 69 74 68 20 6f 6e 65 20 65 78 63 65 70 74   with one except
b590: 69 6f 6e 3a 0d 0a 20 20 2f 2f 2f 20 74 68 65 20  ion:..  /// the 
b5a0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
b5b0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
b5c0: 65 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64  e virtual method
b5d0: 20 62 65 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74   being implement
b5e0: 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ed...  /// </sum
b5f0: 6d 61 72 79 3e 0d 0a 23 65 6e 64 69 66 0d 0a 20  mary>..#endif.. 
b600: 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51   public class SQ
b610: 4c 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63  LiteDelegateFunc
b620: 74 69 6f 6e 20 3a 20 53 51 4c 69 74 65 46 75 6e  tion : SQLiteFun
b630: 63 74 69 6f 6e 0d 0a 20 20 7b 0d 0a 20 20 20 20  ction..  {..    
b640: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
b650: 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  e Constants..   
b660: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
b670: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73  ..      /// This
b680: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
b690: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 76  s used by the ov
b6a0: 65 72 72 69 64 64 65 6e 20 76 69 72 74 75 61 6c  erridden virtual
b6b0: 20 6d 65 74 68 6f 64 73 20 77 68 65 6e 0d 0a 20   methods when.. 
b6c0: 20 20 20 20 20 2f 2f 2f 20 61 20 72 65 71 75 69       /// a requi
b6d0: 72 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 44  red <see cref="D
b6e0: 65 6c 65 67 61 74 65 22 20 2f 3e 20 70 72 6f 70  elegate" /> prop
b6f0: 65 72 74 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20  erty (e.g...    
b700: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
b710: 22 43 61 6c 6c 62 61 63 6b 31 22 20 2f 3e 20 6f  "Callback1" /> o
b720: 72 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6c  r <see cref="Cal
b730: 6c 62 61 63 6b 32 22 20 2f 3e 29 20 68 61 73 20  lback2" />) has 
b740: 6e 6f 74 20 62 65 65 6e 0d 0a 20 20 20 20 20 20  not been..      
b750: 2f 2f 2f 20 73 65 74 2e 0d 0a 20 20 20 20 20 20  /// set...      
b760: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
b770: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
b780: 6e 73 74 20 73 74 72 69 6e 67 20 4e 6f 43 61 6c  nst string NoCal
b790: 6c 62 61 63 6b 45 72 72 6f 72 20 3d 20 22 4e 6f  lbackError = "No
b7a0: 20 5c 22 7b 30 7d 5c 22 20 63 61 6c 6c 62 61 63   \"{0}\" callbac
b7b0: 6b 20 69 73 20 73 65 74 2e 22 3b 0d 0a 0d 0a 20  k is set.";.... 
b7c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b810: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
b820: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
b830: 20 54 68 69 73 20 65 72 72 6f 72 20 6d 65 73 73   This error mess
b840: 61 67 65 20 69 73 20 75 73 65 64 20 62 79 20 74  age is used by t
b850: 68 65 20 6f 76 65 72 72 69 64 64 65 6e 20 3c 73  he overridden <s
b860: 65 65 20 63 72 65 66 3d 22 43 6f 6d 70 61 72 65  ee cref="Compare
b870: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  " />..      /// 
b880: 6d 65 74 68 6f 64 20 77 68 65 6e 20 74 68 65 20  method when the 
b890: 72 65 73 75 6c 74 20 64 6f 65 73 20 6e 6f 74 20  result does not 
b8a0: 68 61 76 65 20 61 20 74 79 70 65 20 6f 66 20 3c  have a type of <
b8b0: 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22  see cref="Int32"
b8c0: 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   />...      /// 
b8d0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
b8e0: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
b8f0: 73 74 72 69 6e 67 20 52 65 73 75 6c 74 49 6e 74  string ResultInt
b900: 33 32 45 72 72 6f 72 20 3d 20 22 5c 22 7b 30 7d  32Error = "\"{0}
b910: 5c 22 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  \" result must b
b920: 65 20 49 6e 74 33 32 2e 22 3b 0d 0a 20 20 20 20  e Int32.";..    
b930: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b940: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b990: 0a 0d 0a 20 20 20 20 20 20 23 72 65 67 69 6f 6e  ...      #region
b9a0: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
b9b0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  tors..      /// 
b9c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
b9d0: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
b9e0: 61 6e 20 65 6d 70 74 79 20 69 6e 73 74 61 6e 63  an empty instanc
b9f0: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e  e of this class.
ba00: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
ba10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 75  mmary>..      pu
ba20: 62 6c 69 63 20 53 51 4c 69 74 65 44 65 6c 65 67  blic SQLiteDeleg
ba30: 61 74 65 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20  ateFunction().. 
ba40: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
ba50: 6e 75 6c 6c 2c 20 6e 75 6c 6c 29 0d 0a 20 20 20  null, null)..   
ba60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ba70: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
ba80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ba90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bae0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
baf0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  >..      /// Con
bb00: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
bb10: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
bb20: 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63  s using the spec
bb30: 69 66 69 65 64 0d 0a 20 20 20 20 20 20 2f 2f 2f  ified..      ///
bb40: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65   <see cref="Dele
bb50: 67 61 74 65 22 20 2f 3e 20 61 73 20 74 68 65 20  gate" /> as the 
bb60: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
bb70: 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 0d 0a 20  eFunction" />.. 
bb80: 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
bb90: 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ntation...      
bba0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
bbb0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
bbc0: 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 31   name="callback1
bbd0: 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  ">..      /// Th
bbe0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c  e <see cref="Del
bbf0: 65 67 61 74 65 22 20 2f 3e 20 74 6f 20 62 65 20  egate" /> to be 
bc00: 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 63 61 6c  used for all cal
bc10: 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20  ls into the..   
bc20: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
bc30: 3d 22 49 6e 76 6f 6b 65 22 20 2f 3e 2c 20 3c 73  ="Invoke" />, <s
bc40: 65 65 20 63 72 65 66 3d 22 53 74 65 70 22 20 2f  ee cref="Step" /
bc50: 3e 2c 20 61 6e 64 0d 0a 20 20 20 20 20 20 2f 2f  >, and..      //
bc60: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 43 6f 6d  / <see cref="Com
bc70: 70 61 72 65 22 20 2f 3e 20 76 69 72 74 75 61 6c  pare" /> virtual
bc80: 20 6d 65 74 68 6f 64 73 20 6e 65 65 64 65 64 20   methods needed 
bc90: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  by the..      //
bca0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
bcb0: 69 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  iteFunction" /> 
bcc0: 62 61 73 65 20 63 6c 61 73 73 2e 0d 0a 20 20 20  base class...   
bcd0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
bce0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
bcf0: 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b  m name="callback
bd00: 32 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  2">..      /// T
bd10: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65  he <see cref="De
bd20: 6c 65 67 61 74 65 22 20 2f 3e 20 74 6f 20 62 65  legate" /> to be
bd30: 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 63 61   used for all ca
bd40: 6c 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20  lls into the..  
bd50: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
bd60: 66 3d 22 46 69 6e 61 6c 22 20 2f 3e 20 76 69 72  f="Final" /> vir
bd70: 74 75 61 6c 20 6d 65 74 68 6f 64 73 20 6e 65 65  tual methods nee
bd80: 64 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ded by the..    
bd90: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
bda0: 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22  "SQLiteFunction"
bdb0: 20 2f 3e 20 62 61 73 65 20 63 6c 61 73 73 2e 0d   /> base class..
bdc0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
bdd0: 61 6d 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  am>..      publi
bde0: 63 20 53 51 4c 69 74 65 44 65 6c 65 67 61 74 65  c SQLiteDelegate
bdf0: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
be00: 20 20 20 20 20 44 65 6c 65 67 61 74 65 20 63 61       Delegate ca
be10: 6c 6c 62 61 63 6b 31 2c 0d 0a 20 20 20 20 20 20  llback1,..      
be20: 20 20 20 20 44 65 6c 65 67 61 74 65 20 63 61 6c      Delegate cal
be30: 6c 62 61 63 6b 32 0d 0a 20 20 20 20 20 20 20 20  lback2..        
be40: 20 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20    )..      {..  
be50: 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 61 6c          this.cal
be60: 6c 62 61 63 6b 31 20 3d 20 63 61 6c 6c 62 61 63  lback1 = callbac
be70: 6b 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  k1;..          t
be80: 68 69 73 2e 63 61 6c 6c 62 61 63 6b 32 20 3d 20  his.callback2 = 
be90: 63 61 6c 6c 62 61 63 6b 32 3b 0d 0a 20 20 20 20  callback2;..    
bea0: 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72    }..      #endr
beb0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f  egion....      /
bec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
bf10: 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 74 65 63    #region Protec
bf20: 74 65 64 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ted Methods..   
bf30: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
bf40: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75  ..      /// Retu
bf50: 72 6e 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20  rns the list of 
bf60: 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68  arguments for th
bf70: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 76  e <see cref="Inv
bf80: 6f 6b 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 0d  oke" /> method,.
bf90: 0a 20 20 20 20 20 20 2f 2f 2f 20 61 73 20 61 6e  .      /// as an
bfa0: 20 3c 73 65 65 20 63 72 65 66 3d 22 41 72 72 61   <see cref="Arra
bfb0: 79 22 20 2f 3e 20 6f 66 20 3c 73 65 65 20 63 72  y" /> of <see cr
bfc0: 65 66 3d 22 4f 62 6a 65 63 74 22 20 2f 3e 2e 20  ef="Object" />. 
bfd0: 20 54 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20   The first..    
bfe0: 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 20 69    /// argument i
bff0: 73 20 61 6c 77 61 79 73 20 74 68 65 20 6c 69 74  s always the lit
c000: 65 72 61 6c 20 73 74 72 69 6e 67 20 22 49 6e 76  eral string "Inv
c010: 6f 6b 65 22 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  oke"...      ///
c020: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
c030: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c040: 6d 65 3d 22 61 72 67 73 22 3e 0d 0a 20 20 20 20  me="args">..    
c050: 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e    /// The origin
c060: 61 6c 20 61 72 67 75 6d 65 6e 74 73 20 72 65 63  al arguments rec
c070: 65 69 76 65 64 20 62 79 20 74 68 65 20 3c 73 65  eived by the <se
c080: 65 20 63 72 65 66 3d 22 49 6e 76 6f 6b 65 22 20  e cref="Invoke" 
c090: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
c0a0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
c0b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
c0c0: 20 6e 61 6d 65 3d 22 65 61 72 6c 79 42 6f 75 6e   name="earlyBoun
c0d0: 64 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e  d">..      /// N
c0e0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 72  on-zero if the r
c0f0: 65 74 75 72 6e 65 64 20 61 72 67 75 6d 65 6e 74  eturned argument
c100: 73 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 62  s are going to b
c110: 65 20 75 73 65 64 20 77 69 74 68 20 74 68 65 0d  e used with the.
c120: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  .      /// <see 
c130: 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 76 6f  cref="SQLiteInvo
c140: 6b 65 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74  keDelegate" /> t
c150: 79 70 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ype; otherwise, 
c160: 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  zero...      ///
c170: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
c180: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
c190: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
c1a0: 67 75 6d 65 6e 74 73 20 74 6f 20 70 61 73 73 20  guments to pass 
c1b0: 74 6f 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65  to the configure
c1c0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c  d <see cref="Del
c1d0: 65 67 61 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20  egate" />...    
c1e0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
c1f0: 0d 0a 20 20 20 20 20 20 70 72 6f 74 65 63 74 65  ..      protecte
c200: 64 20 76 69 72 74 75 61 6c 20 6f 62 6a 65 63 74  d virtual object
c210: 5b 5d 20 47 65 74 49 6e 76 6f 6b 65 41 72 67 73  [] GetInvokeArgs
c220: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  (..          obj
c230: 65 63 74 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20  ect[] args,..   
c240: 20 20 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c         bool earl
c250: 79 42 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20  yBound..        
c260: 20 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20    )..      {..  
c270: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d          object[]
c280: 20 6e 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f   newArgs = new o
c290: 62 6a 65 63 74 5b 5d 20 7b 20 22 49 6e 76 6f 6b  bject[] { "Invok
c2a0: 65 22 2c 20 61 72 67 73 20 7d 3b 0d 0a 0d 0a 20  e", args };.... 
c2b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 65 61           if (!ea
c2c0: 72 6c 79 42 6f 75 6e 64 29 0d 0a 20 20 20 20 20  rlyBound)..     
c2d0: 20 20 20 20 20 20 20 20 20 6e 65 77 41 72 67 73           newArgs
c2e0: 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20   = new object[] 
c2f0: 7b 20 6e 65 77 41 72 67 73 20 7d 3b 20 2f 2f 20  { newArgs }; // 
c300: 57 52 41 50 0d 0a 0d 0a 20 20 20 20 20 20 20 20  WRAP....        
c310: 20 20 72 65 74 75 72 6e 20 6e 65 77 41 72 67 73    return newArgs
c320: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
c330: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c380: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
c390: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
c3a0: 52 65 74 75 72 6e 73 20 74 68 65 20 6c 69 73 74  Returns the list
c3b0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66 6f   of arguments fo
c3c0: 72 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  r the <see cref=
c3d0: 22 53 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64  "Step" /> method
c3e0: 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61 73 20  ,..      /// as 
c3f0: 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 41 72  an <see cref="Ar
c400: 72 61 79 22 20 2f 3e 20 6f 66 20 3c 73 65 65 20  ray" /> of <see 
c410: 63 72 65 66 3d 22 4f 62 6a 65 63 74 22 20 2f 3e  cref="Object" />
c420: 2e 20 20 54 68 65 20 66 69 72 73 74 0d 0a 20 20  .  The first..  
c430: 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74      /// argument
c440: 20 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 6c   is always the l
c450: 69 74 65 72 61 6c 20 73 74 72 69 6e 67 20 22 53  iteral string "S
c460: 74 65 70 22 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  tep"...      ///
c470: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
c480: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
c490: 6d 65 3d 22 61 72 67 73 22 3e 0d 0a 20 20 20 20  me="args">..    
c4a0: 20 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e    /// The origin
c4b0: 61 6c 20 61 72 67 75 6d 65 6e 74 73 20 72 65 63  al arguments rec
c4c0: 65 69 76 65 64 20 62 79 20 74 68 65 20 3c 73 65  eived by the <se
c4d0: 65 20 63 72 65 66 3d 22 53 74 65 70 22 20 2f 3e  e cref="Step" />
c4e0: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
c4f0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
c500: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
c510: 61 6d 65 3d 22 73 74 65 70 4e 75 6d 62 65 72 22  ame="stepNumber"
c520: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
c530: 20 73 74 65 70 20 6e 75 6d 62 65 72 20 28 6f 6e   step number (on
c540: 65 20 62 61 73 65 64 29 2e 20 20 54 68 69 73 20  e based).  This 
c550: 69 73 20 69 6e 63 72 65 6d 65 6d 74 65 64 20 65  is incrememted e
c560: 61 63 68 20 74 69 6d 65 20 74 68 65 0d 0a 20 20  ach time the..  
c570: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
c580: 66 3d 22 53 74 65 70 22 20 2f 3e 20 6d 65 74 68  f="Step" /> meth
c590: 6f 64 20 69 73 20 63 61 6c 6c 65 64 2e 0d 0a 20  od is called... 
c5a0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
c5b0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  >..      /// <pa
c5c0: 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78  ram name="contex
c5d0: 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 2f  tData">..      /
c5e0: 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c 64 65 72  // A placeholder
c5f0: 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 65 72   for implementer
c600: 73 20 74 6f 20 73 74 6f 72 65 20 63 6f 6e 74 65  s to store conte
c610: 78 74 75 61 6c 20 64 61 74 61 20 70 65 72 74 61  xtual data perta
c620: 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 2f  ining..      ///
c630: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
c640: 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20  context...      
c650: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
c660: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
c670: 61 6d 65 3d 22 65 61 72 6c 79 42 6f 75 6e 64 22  ame="earlyBound"
c680: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  >..      /// Non
c690: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 72 65 74  -zero if the ret
c6a0: 75 72 6e 65 64 20 61 72 67 75 6d 65 6e 74 73 20  urned arguments 
c6b0: 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 62 65 20  are going to be 
c6c0: 75 73 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20  used with the.. 
c6d0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
c6e0: 65 66 3d 22 53 51 4c 69 74 65 53 74 65 70 44 65  ef="SQLiteStepDe
c6f0: 6c 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 3b  legate" /> type;
c700: 20 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f   otherwise, zero
c710: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  ...      /// </p
c720: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  aram>..      ///
c730: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
c740: 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65    /// The argume
c750: 6e 74 73 20 74 6f 20 70 61 73 73 20 74 6f 20 74  nts to pass to t
c760: 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 3c 73  he configured <s
c770: 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74  ee cref="Delegat
c780: 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 2f 2f  e" />...      //
c790: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
c7a0: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
c7b0: 72 74 75 61 6c 20 6f 62 6a 65 63 74 5b 5d 20 47  rtual object[] G
c7c0: 65 74 53 74 65 70 41 72 67 73 28 0d 0a 20 20 20  etStepArgs(..   
c7d0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20         object[] 
c7e0: 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  args,..         
c7f0: 20 69 6e 74 20 73 74 65 70 4e 75 6d 62 65 72 2c   int stepNumber,
c800: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
c810: 63 74 20 63 6f 6e 74 65 78 74 44 61 74 61 2c 0d  ct contextData,.
c820: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
c830: 65 61 72 6c 79 42 6f 75 6e 64 0d 0a 20 20 20 20  earlyBound..    
c840: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b        )..      {
c850: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
c860: 63 74 5b 5d 20 6e 65 77 41 72 67 73 20 3d 20 6e  ct[] newArgs = n
c870: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74               "St
c890: 65 70 22 2c 20 61 72 67 73 2c 20 73 74 65 70 4e  ep", args, stepN
c8a0: 75 6d 62 65 72 2c 20 63 6f 6e 74 65 78 74 44 61  umber, contextDa
c8b0: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 3b  ta..          };
c8c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
c8d0: 20 28 21 65 61 72 6c 79 42 6f 75 6e 64 29 0d 0a   (!earlyBound)..
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
c8f0: 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a 65  wArgs = new obje
c900: 63 74 5b 5d 20 7b 20 6e 65 77 41 72 67 73 20 7d  ct[] { newArgs }
c910: 3b 20 2f 2f 20 57 52 41 50 0d 0a 0d 0a 20 20 20  ; // WRAP....   
c920: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
c930: 77 41 72 67 73 3b 0d 0a 20 20 20 20 20 20 7d 0d  wArgs;..      }.
c940: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
c950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c990: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  //....      /// 
c9a0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
c9b0: 20 2f 2f 2f 20 55 70 64 61 74 65 73 20 74 68 65   /// Updates the
c9c0: 20 6f 75 74 70 75 74 20 61 72 67 75 6d 65 6e 74   output argument
c9d0: 73 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63  s for the <see c
c9e0: 72 65 66 3d 22 53 74 65 70 22 20 2f 3e 20 6d 65  ref="Step" /> me
c9f0: 74 68 6f 64 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f  thod,..      ///
ca00: 20 75 73 69 6e 67 20 61 6e 20 3c 73 65 65 20 63   using an <see c
ca10: 72 65 66 3d 22 41 72 72 61 79 22 20 2f 3e 20 6f  ref="Array" /> o
ca20: 66 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a  f <see cref="Obj
ca30: 65 63 74 22 20 2f 3e 2e 20 20 54 68 65 20 66 69  ect" />.  The fi
ca40: 72 73 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61  rst..      /// a
ca50: 72 67 75 6d 65 6e 74 20 69 73 20 61 6c 77 61 79  rgument is alway
ca60: 73 20 74 68 65 20 6c 69 74 65 72 61 6c 20 73 74  s the literal st
ca70: 72 69 6e 67 20 22 53 74 65 70 22 2e 20 20 43 75  ring "Step".  Cu
ca80: 72 72 65 6e 74 6c 79 2c 20 6f 6e 6c 79 20 74 68  rrently, only th
ca90: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  e..      /// <pa
caa0: 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 63 6f 6e  ramref name="con
cab0: 74 65 78 74 44 61 74 61 22 20 2f 3e 20 70 61 72  textData" /> par
cac0: 61 6d 65 74 65 72 20 69 73 20 75 70 64 61 74 65  ameter is update
cad0: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  d...      /// </
cae0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
caf0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
cb00: 22 61 72 67 73 22 3e 0d 0a 20 20 20 20 20 20 2f  "args">..      /
cb10: 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  // The original 
cb20: 61 72 67 75 6d 65 6e 74 73 20 72 65 63 65 69 76  arguments receiv
cb30: 65 64 20 62 79 20 74 68 65 20 3c 73 65 65 20 63  ed by the <see c
cb40: 72 65 66 3d 22 53 74 65 70 22 20 2f 3e 20 6d 65  ref="Step" /> me
cb50: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  thod...      ///
cb60: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
cb70: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
cb80: 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 0d  ="contextData">.
cb90: 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20 70 6c 61  .      /// A pla
cba0: 63 65 68 6f 6c 64 65 72 20 66 6f 72 20 69 6d 70  ceholder for imp
cbb0: 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20 73 74 6f  lementers to sto
cbc0: 72 65 20 63 6f 6e 74 65 78 74 75 61 6c 20 64 61  re contextual da
cbd0: 74 61 20 70 65 72 74 61 69 6e 69 6e 67 0d 0a 20  ta pertaining.. 
cbe0: 20 20 20 20 20 2f 2f 2f 20 74 6f 20 74 68 65 20       /// to the 
cbf0: 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 78 74 2e  current context.
cc00: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ..      /// </pa
cc10: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ram>..      /// 
cc20: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 61 72  <param name="ear
cc30: 6c 79 42 6f 75 6e 64 22 3e 0d 0a 20 20 20 20 20  lyBound">..     
cc40: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
cc50: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 61 72   the returned ar
cc60: 67 75 6d 65 6e 74 73 20 61 72 65 20 67 6f 69 6e  guments are goin
cc70: 67 20 74 6f 20 62 65 20 75 73 65 64 20 77 69 74  g to be used wit
cc80: 68 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  h the..      ///
cc90: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
cca0: 74 65 53 74 65 70 44 65 6c 65 67 61 74 65 22 20  teStepDelegate" 
ccb0: 2f 3e 20 74 79 70 65 3b 20 6f 74 68 65 72 77 69  /> type; otherwi
ccc0: 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  se, zero...     
ccd0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
cce0: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
ccf0: 73 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  s>..      /// Th
cd00: 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 70  e arguments to p
cd10: 61 73 73 20 74 6f 20 74 68 65 20 63 6f 6e 66 69  ass to the confi
cd20: 67 75 72 65 64 20 3c 73 65 65 20 63 72 65 66 3d  gured <see cref=
cd30: 22 44 65 6c 65 67 61 74 65 22 20 2f 3e 2e 0d 0a  "Delegate" />...
cd40: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
cd50: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70 72 6f 74  rns>..      prot
cd60: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f  ected virtual vo
cd70: 69 64 20 55 70 64 61 74 65 53 74 65 70 41 72 67  id UpdateStepArg
cd80: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  s(..          ob
cd90: 6a 65 63 74 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ject[] args,..  
cda0: 20 20 20 20 20 20 20 20 72 65 66 20 6f 62 6a 65          ref obje
cdb0: 63 74 20 63 6f 6e 74 65 78 74 44 61 74 61 2c 0d  ct contextData,.
cdc0: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
cdd0: 65 61 72 6c 79 42 6f 75 6e 64 0d 0a 20 20 20 20  earlyBound..    
cde0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b        )..      {
cdf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
ce00: 63 74 5b 5d 20 6e 65 77 41 72 67 73 3b 0d 0a 0d  ct[] newArgs;...
ce10: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65  .          if (e
ce20: 61 72 6c 79 42 6f 75 6e 64 29 0d 0a 20 20 20 20  arlyBound)..    
ce30: 20 20 20 20 20 20 20 20 20 20 6e 65 77 41 72 67            newArg
ce40: 73 20 3d 20 61 72 67 73 3b 0d 0a 20 20 20 20 20  s = args;..     
ce50: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
ce60: 20 20 20 20 20 20 20 20 20 6e 65 77 41 72 67 73           newArgs
ce70: 20 3d 20 61 72 67 73 5b 30 5d 20 61 73 20 6f 62   = args[0] as ob
ce80: 6a 65 63 74 5b 5d 3b 0d 0a 0d 0a 20 20 20 20 20  ject[];....     
ce90: 20 20 20 20 20 69 66 20 28 6e 65 77 41 72 67 73       if (newArgs
cea0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
ceb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
cec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  ....          co
ced0: 6e 74 65 78 74 44 61 74 61 20 3d 20 6e 65 77 41  ntextData = newA
cee0: 72 67 73 5b 6e 65 77 41 72 67 73 2e 4c 65 6e 67  rgs[newArgs.Leng
cef0: 74 68 20 2d 20 31 5d 3b 0d 0a 20 20 20 20 20 20  th - 1];..      
cf00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
cf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ////....      //
cf60: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
cf70: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
cf80: 68 65 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d  he list of argum
cf90: 65 6e 74 73 20 66 6f 72 20 74 68 65 20 3c 73 65  ents for the <se
cfa0: 65 20 63 72 65 66 3d 22 46 69 6e 61 6c 22 20 2f  e cref="Final" /
cfb0: 3e 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20 20  > method,..     
cfc0: 20 2f 2f 2f 20 61 73 20 61 6e 20 3c 73 65 65 20   /// as an <see 
cfd0: 63 72 65 66 3d 22 41 72 72 61 79 22 20 2f 3e 20  cref="Array" /> 
cfe0: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62  of <see cref="Ob
cff0: 6a 65 63 74 22 20 2f 3e 2e 20 20 54 68 65 20 66  ject" />.  The f
d000: 69 72 73 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  irst..      /// 
d010: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6c 77 61  argument is alwa
d020: 79 73 20 74 68 65 20 6c 69 74 65 72 61 6c 20 73  ys the literal s
d030: 74 72 69 6e 67 20 22 46 69 6e 61 6c 22 2e 0d 0a  tring "Final"...
d040: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
d050: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
d060: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
d070: 74 65 78 74 44 61 74 61 22 3e 0d 0a 20 20 20 20  textData">..    
d080: 20 20 2f 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c    /// A placehol
d090: 64 65 72 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  der for implemen
d0a0: 74 65 72 73 20 74 6f 20 73 74 6f 72 65 20 63 6f  ters to store co
d0b0: 6e 74 65 78 74 75 61 6c 20 64 61 74 61 20 70 65  ntextual data pe
d0c0: 72 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20  rtaining..      
d0d0: 2f 2f 2f 20 74 6f 20 74 68 65 20 63 75 72 72 65  /// to the curre
d0e0: 6e 74 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20  nt context...   
d0f0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
d100: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
d110: 6d 20 6e 61 6d 65 3d 22 65 61 72 6c 79 42 6f 75  m name="earlyBou
d120: 6e 64 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  nd">..      /// 
d130: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  Non-zero if the 
d140: 72 65 74 75 72 6e 65 64 20 61 72 67 75 6d 65 6e  returned argumen
d150: 74 73 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  ts are going to 
d160: 62 65 20 75 73 65 64 20 77 69 74 68 20 74 68 65  be used with the
d170: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65  ..      /// <see
d180: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 69 6e   cref="SQLiteFin
d190: 61 6c 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74  alDelegate" /> t
d1a0: 79 70 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ype; otherwise, 
d1b0: 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  zero...      ///
d1c0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
d1d0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
d1e0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
d1f0: 67 75 6d 65 6e 74 73 20 74 6f 20 70 61 73 73 20  guments to pass 
d200: 74 6f 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65  to the configure
d210: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c  d <see cref="Del
d220: 65 67 61 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20  egate" />...    
d230: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
d240: 0d 0a 20 20 20 20 20 20 70 72 6f 74 65 63 74 65  ..      protecte
d250: 64 20 76 69 72 74 75 61 6c 20 6f 62 6a 65 63 74  d virtual object
d260: 5b 5d 20 47 65 74 46 69 6e 61 6c 41 72 67 73 28  [] GetFinalArgs(
d270: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
d280: 63 74 20 63 6f 6e 74 65 78 74 44 61 74 61 2c 0d  ct contextData,.
d290: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
d2a0: 65 61 72 6c 79 42 6f 75 6e 64 0d 0a 20 20 20 20  earlyBound..    
d2b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b        )..      {
d2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
d2d0: 63 74 5b 5d 20 6e 65 77 41 72 67 73 20 3d 20 6e  ct[] newArgs = n
d2e0: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 22 46  ew object[] { "F
d2f0: 69 6e 61 6c 22 2c 20 63 6f 6e 74 65 78 74 44 61  inal", contextDa
d300: 74 61 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ta };....       
d310: 20 20 20 69 66 20 28 21 65 61 72 6c 79 42 6f 75     if (!earlyBou
d320: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
d330: 20 20 20 6e 65 77 41 72 67 73 20 3d 20 6e 65 77     newArgs = new
d340: 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 6e 65 77 41   object[] { newA
d350: 72 67 73 20 7d 3b 20 2f 2f 20 57 52 41 50 0d 0a  rgs }; // WRAP..
d360: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
d370: 72 6e 20 6e 65 77 41 72 67 73 3b 0d 0a 20 20 20  rn newArgs;..   
d380: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
d390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d3e0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d3f0: 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e        /// Return
d400: 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 72  s the list of ar
d410: 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20  guments for the 
d420: 3c 73 65 65 20 63 72 65 66 3d 22 43 6f 6d 70 61  <see cref="Compa
d430: 72 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 0d 0a  re" /> method,..
d440: 20 20 20 20 20 20 2f 2f 2f 20 61 73 20 61 6e 20        /// as an 
d450: 3c 73 65 65 20 63 72 65 66 3d 22 41 72 72 61 79  <see cref="Array
d460: 22 20 2f 3e 20 6f 66 20 3c 73 65 65 20 63 72 65  " /> of <see cre
d470: 66 3d 22 4f 62 6a 65 63 74 22 20 2f 3e 2e 20 20  f="Object" />.  
d480: 54 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20  The first..     
d490: 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 20 69 73   /// argument is
d4a0: 20 61 6c 77 61 79 73 20 74 68 65 20 6c 69 74 65   always the lite
d4b0: 72 61 6c 20 73 74 72 69 6e 67 20 22 43 6f 6d 70  ral string "Comp
d4c0: 61 72 65 22 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  are"...      ///
d4d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d4e0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
d4f0: 6d 65 3d 22 70 61 72 61 6d 31 22 3e 0d 0a 20 20  me="param1">..  
d500: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 69 72 73      /// The firs
d510: 74 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70  t string to comp
d520: 61 72 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  are...      /// 
d530: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
d540: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
d550: 22 70 61 72 61 6d 32 22 3e 0d 0a 20 20 20 20 20  "param2">..     
d560: 20 2f 2f 2f 20 54 68 65 20 73 65 63 6f 6e 64 20   /// The second 
d570: 73 74 72 6e 69 67 20 74 6f 20 63 6f 6d 70 61 72  strnig to compar
d580: 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  e...      /// </
d590: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
d5a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
d5b0: 61 72 6c 79 42 6f 75 6e 64 22 3e 0d 0a 20 20 20  arlyBound">..   
d5c0: 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20     /// Non-zero 
d5d0: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  if the returned 
d5e0: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67 6f  arguments are go
d5f0: 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 77  ing to be used w
d600: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  ith the..      /
d610: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
d620: 4c 69 74 65 43 6f 6d 70 61 72 65 44 65 6c 65 67  LiteCompareDeleg
d630: 61 74 65 22 20 2f 3e 20 74 79 70 65 3b 20 6f 74  ate" /> type; ot
d640: 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a  herwise, zero...
d650: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
d660: 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 72  m>..      /// <r
d670: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 2f  eturns>..      /
d680: 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73  // The arguments
d690: 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
d6a0: 63 6f 6e 66 69 67 75 72 65 64 20 3c 73 65 65 20  configured <see 
d6b0: 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20  cref="Delegate" 
d6c0: 2f 3e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  />...      /// <
d6d0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
d6e0: 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
d6f0: 61 6c 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74 43  al object[] GetC
d700: 6f 6d 70 61 72 65 41 72 67 73 28 0d 0a 20 20 20  ompareArgs(..   
d710: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 61         string pa
d720: 72 61 6d 31 2c 0d 0a 20 20 20 20 20 20 20 20 20  ram1,..         
d730: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 32 2c 0d   string param2,.
d740: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
d750: 65 61 72 6c 79 42 6f 75 6e 64 0d 0a 20 20 20 20  earlyBound..    
d760: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b        )..      {
d770: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
d780: 63 74 5b 5d 20 6e 65 77 41 72 67 73 20 3d 20 6e  ct[] newArgs = n
d790: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 22 43  ew object[] { "C
d7a0: 6f 6d 70 61 72 65 22 2c 20 70 61 72 61 6d 31 2c  ompare", param1,
d7b0: 20 70 61 72 61 6d 32 20 7d 3b 0d 0a 0d 0a 20 20   param2 };....  
d7c0: 20 20 20 20 20 20 20 20 69 66 20 28 21 65 61 72          if (!ear
d7d0: 6c 79 42 6f 75 6e 64 29 0d 0a 20 20 20 20 20 20  lyBound)..      
d7e0: 20 20 20 20 20 20 20 20 6e 65 77 41 72 67 73 20          newArgs 
d7f0: 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  = new object[] {
d800: 20 6e 65 77 41 72 67 73 20 7d 3b 20 2f 2f 20 57   newArgs }; // W
d810: 52 41 50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  RAP....         
d820: 20 72 65 74 75 72 6e 20 6e 65 77 41 72 67 73 3b   return newArgs;
d830: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
d840: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
d850: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
d860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d8a0: 0d 0a 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20  ..      #region 
d8b0: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
d8c0: 73 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65  s..      private
d8d0: 20 44 65 6c 65 67 61 74 65 20 63 61 6c 6c 62 61   Delegate callba
d8e0: 63 6b 31 3b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ck1;..      /// 
d8f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d900: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
d910: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
d920: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
d930: 61 6c 6c 20 63 61 6c 6c 73 20 69 6e 74 6f 20 74  all calls into t
d940: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  he..      /// <s
d950: 65 65 20 63 72 65 66 3d 22 49 6e 76 6f 6b 65 22  ee cref="Invoke"
d960: 20 2f 3e 2c 20 3c 73 65 65 20 63 72 65 66 3d 22   />, <see cref="
d970: 53 74 65 70 22 20 2f 3e 2c 20 61 6e 64 0d 0a 20  Step" />, and.. 
d980: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
d990: 65 66 3d 22 43 6f 6d 70 61 72 65 22 20 2f 3e 20  ef="Compare" /> 
d9a0: 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 73 20  virtual methods 
d9b0: 6e 65 65 64 65 64 20 62 79 20 74 68 65 0d 0a 20  needed by the.. 
d9c0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
d9d0: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
d9e0: 6f 6e 22 20 2f 3e 20 62 61 73 65 20 63 6c 61 73  on" /> base clas
d9f0: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
da00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
da10: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 44  public virtual D
da20: 65 6c 65 67 61 74 65 20 43 61 6c 6c 62 61 63 6b  elegate Callback
da30: 31 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  1..      {..    
da40: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
da50: 72 6e 20 63 61 6c 6c 62 61 63 6b 31 3b 20 7d 0d  rn callback1; }.
da60: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b  .          set {
da70: 20 63 61 6c 6c 62 61 63 6b 31 20 3d 20 76 61 6c   callback1 = val
da80: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ue; }..      }..
da90: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
daa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dae0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 72 69 76 61  /....      priva
daf0: 74 65 20 44 65 6c 65 67 61 74 65 20 63 61 6c 6c  te Delegate call
db00: 62 61 63 6b 32 3b 0d 0a 20 20 20 20 20 20 2f 2f  back2;..      //
db10: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
db20: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
db30: 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20  cref="Delegate" 
db40: 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  /> to be used fo
db50: 72 20 61 6c 6c 20 63 61 6c 6c 73 20 69 6e 74 6f  r all calls into
db60: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
db70: 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6e 61 6c  <see cref="Final
db80: 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 6d 65 74  " /> virtual met
db90: 68 6f 64 73 20 6e 65 65 64 65 64 20 62 79 20 74  hods needed by t
dba0: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  he..      /// <s
dbb0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
dbc0: 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 62 61 73 65  unction" /> base
dbd0: 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 2f   class...      /
dbe0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
dbf0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
dc00: 75 61 6c 20 44 65 6c 65 67 61 74 65 20 43 61 6c  ual Delegate Cal
dc10: 6c 62 61 63 6b 32 0d 0a 20 20 20 20 20 20 7b 0d  lback2..      {.
dc20: 0a 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b  .          get {
dc30: 20 72 65 74 75 72 6e 20 63 61 6c 6c 62 61 63 6b   return callback
dc40: 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  2; }..          
dc50: 73 65 74 20 7b 20 63 61 6c 6c 62 61 63 6b 32 20  set { callback2 
dc60: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
dc70: 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72    }..      #endr
dc80: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f  egion....      /
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcd0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
dce0: 20 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d    #region System
dcf0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
dd00: 69 74 65 46 75 6e 63 74 69 6f 6e 20 4f 76 65 72  iteFunction Over
dd10: 72 69 64 65 73 0d 0a 20 20 20 20 20 20 2f 2f 2f  rides..      ///
dd20: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
dd30: 20 20 2f 2f 2f 20 54 68 69 73 20 76 69 72 74 75    /// This virtu
dd40: 61 6c 20 6d 65 74 68 6f 64 20 69 73 20 74 68 65  al method is the
dd50: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
dd60: 66 6f 72 20 73 63 61 6c 61 72 20 66 75 6e 63 74  for scalar funct
dd70: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ions...      ///
dd80: 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
dd90: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
dda0: 6f 6e 2e 49 6e 76 6f 6b 65 22 20 2f 3e 20 6d 65  on.Invoke" /> me
ddb0: 74 68 6f 64 20 66 6f 72 20 6d 6f 72 65 0d 0a 20  thod for more.. 
ddc0: 20 20 20 20 20 2f 2f 2f 20 64 65 74 61 69 6c 73       /// details
ddd0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
dde0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
ddf0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
de00: 61 72 67 73 22 3e 0d 0a 20 20 20 20 20 20 2f 2f  args">..      //
de10: 2f 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20  / The arguments 
de20: 66 6f 72 20 74 68 65 20 73 63 61 6c 61 72 20 66  for the scalar f
de30: 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  unction...      
de40: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
de50: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
de60: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
de70: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
de80: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 2e 0d  calar function..
de90: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  .      /// </ret
dea0: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70 75 62  urns>..      pub
deb0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  lic override obj
dec0: 65 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20  ect Invoke(..   
ded0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20         object[] 
dee0: 61 72 67 73 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  args /* in */.. 
def0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
df00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69    {..          i
df10: 66 20 28 63 61 6c 6c 62 61 63 6b 31 20 3d 3d 20  f (callback1 == 
df20: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
df30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
df40: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
df50: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
df60: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
df70: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
df80: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 74  NativeMethods.St
df90: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
dfb0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
dfc0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 6f                No
dfe0: 43 61 6c 6c 62 61 63 6b 45 72 72 6f 72 2c 20 22  CallbackError, "
dff0: 49 6e 76 6f 6b 65 22 29 29 3b 0d 0a 20 20 20 20  Invoke"));..    
e000: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e010: 20 20 20 20 20 53 51 4c 69 74 65 49 6e 76 6f 6b       SQLiteInvok
e020: 65 44 65 6c 65 67 61 74 65 20 69 6e 76 6f 6b 65  eDelegate invoke
e030: 44 65 6c 65 67 61 74 65 20 3d 0d 0a 20 20 20 20  Delegate =..    
e040: 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61            callba
e050: 63 6b 31 20 61 73 20 53 51 4c 69 74 65 49 6e 76  ck1 as SQLiteInv
e060: 6f 6b 65 44 65 6c 65 67 61 74 65 3b 0d 0a 0d 0a  okeDelegate;....
e070: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
e080: 76 6f 6b 65 44 65 6c 65 67 61 74 65 20 21 3d 20  vokeDelegate != 
e090: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e0a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e0b0: 20 20 72 65 74 75 72 6e 20 69 6e 76 6f 6b 65 44    return invokeD
e0c0: 65 6c 65 67 61 74 65 2e 49 6e 76 6f 6b 65 28 22  elegate.Invoke("
e0d0: 49 6e 76 6f 6b 65 22 2c 20 61 72 67 73 29 3b 20  Invoke", args); 
e0e0: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
e0f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e100: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
e110: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
e120: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
e130: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
e140: 20 20 20 20 20 72 65 74 75 72 6e 20 63 61 6c 6c       return call
e150: 62 61 63 6b 31 2e 44 79 6e 61 6d 69 63 49 6e 76  back1.DynamicInv
e160: 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  oke(..          
e170: 20 20 20 20 20 20 20 20 47 65 74 49 6e 76 6f 6b          GetInvok
e180: 65 41 72 67 73 28 61 72 67 73 2c 20 66 61 6c 73  eArgs(args, fals
e190: 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  e)); /* throw */
e1a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
e1b0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
e1c0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
e1d0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
e1e0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dif..          }
e1f0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
e200: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e250: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
e260: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
e270: 68 69 73 20 76 69 72 74 75 61 6c 20 6d 65 74 68  his virtual meth
e280: 6f 64 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  od is part of th
e290: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
e2a0: 20 66 6f 72 20 61 67 67 72 65 67 61 74 65 0d 0a   for aggregate..
e2b0: 20 20 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69        /// functi
e2c0: 6f 6e 73 2e 20 20 53 65 65 20 74 68 65 20 3c 73  ons.  See the <s
e2d0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
e2e0: 75 6e 63 74 69 6f 6e 2e 53 74 65 70 22 20 2f 3e  unction.Step" />
e2f0: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 2f   method..      /
e300: 2f 2f 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61  // for more deta
e310: 69 6c 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ils...      /// 
e320: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e330: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
e340: 65 3d 22 61 72 67 73 22 3e 0d 0a 20 20 20 20 20  e="args">..     
e350: 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e   /// The argumen
e360: 74 73 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  ts for the aggre
e370: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a  gate function...
e380: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
e390: 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  m>..      /// <p
e3a0: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 65 70 4e  aram name="stepN
e3b0: 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20 2f  umber">..      /
e3c0: 2f 2f 20 54 68 65 20 73 74 65 70 20 6e 75 6d 62  // The step numb
e3d0: 65 72 20 28 6f 6e 65 20 62 61 73 65 64 29 2e 20  er (one based). 
e3e0: 20 54 68 69 73 20 69 73 20 69 6e 63 72 65 6d 65   This is increme
e3f0: 6d 74 65 64 20 65 61 63 68 20 74 69 6d 65 20 74  mted each time t
e400: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  he..      /// <s
e410: 65 65 20 63 72 65 66 3d 22 53 74 65 70 22 20 2f  ee cref="Step" /
e420: 3e 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  > method is call
e430: 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ed...      /// <
e440: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f  /param>..      /
e450: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
e460: 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 0d 0a 20  contextData">.. 
e470: 20 20 20 20 20 2f 2f 2f 20 41 20 70 6c 61 63 65       /// A place
e480: 68 6f 6c 64 65 72 20 66 6f 72 20 69 6d 70 6c 65  holder for imple
e490: 6d 65 6e 74 65 72 73 20 74 6f 20 73 74 6f 72 65  menters to store
e4a0: 20 63 6f 6e 74 65 78 74 75 61 6c 20 64 61 74 61   contextual data
e4b0: 20 70 65 72 74 61 69 6e 69 6e 67 0d 0a 20 20 20   pertaining..   
e4c0: 20 20 20 2f 2f 2f 20 74 6f 20 74 68 65 20 63 75     /// to the cu
e4d0: 72 72 65 6e 74 20 63 6f 6e 74 65 78 74 2e 0d 0a  rrent context...
e4e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
e4f0: 6d 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  m>..      public
e500: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
e510: 74 65 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tep(..          
e520: 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 2c 20 20  object[] args,  
e530: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
e540: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73  .          int s
e550: 74 65 70 4e 75 6d 62 65 72 2c 20 20 20 20 20 20  tepNumber,      
e560: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
e570: 20 20 20 20 20 20 72 65 66 20 6f 62 6a 65 63 74        ref object
e580: 20 63 6f 6e 74 65 78 74 44 61 74 61 20 2f 2a 20   contextData /* 
e590: 69 6e 2c 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20  in, out */..    
e5a0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b        )..      {
e5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
e5c0: 63 61 6c 6c 62 61 63 6b 31 20 3d 3d 20 6e 75 6c  callback1 == nul
e5d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
e5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
e5f0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
e600: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
e610: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
e620: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
e630: 69 76 65 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  iveMethods.Strin
e640: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
e650: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
e660: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
e670: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
e680: 20 20 20 20 20 20 20 20 20 20 20 4e 6f 43 61 6c             NoCal
e690: 6c 62 61 63 6b 45 72 72 6f 72 2c 20 22 53 74 65  lbackError, "Ste
e6a0: 70 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  p"));..         
e6b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
e6c0: 53 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61  SQLiteStepDelega
e6d0: 74 65 20 73 74 65 70 44 65 6c 65 67 61 74 65 20  te stepDelegate 
e6e0: 3d 20 63 61 6c 6c 62 61 63 6b 31 20 61 73 20 53  = callback1 as S
e6f0: 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61 74  QLiteStepDelegat
e700: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
e710: 69 66 20 28 73 74 65 70 44 65 6c 65 67 61 74 65  if (stepDelegate
e720: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
e730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e740: 20 20 20 20 20 20 73 74 65 70 44 65 6c 65 67 61        stepDelega
e750: 74 65 2e 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20  te.Invoke(..    
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
e770: 74 65 70 22 2c 20 61 72 67 73 2c 20 73 74 65 70  tep", args, step
e780: 4e 75 6d 62 65 72 2c 20 72 65 66 20 63 6f 6e 74  Number, ref cont
e790: 65 78 74 44 61 74 61 29 3b 20 2f 2a 20 74 68 72  extData); /* thr
e7a0: 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
e7b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
e7c0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  se..          {.
e7d0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
e7e0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
e7f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f  .              o
e800: 62 6a 65 63 74 5b 5d 20 6e 65 77 41 72 67 73 20  bject[] newArgs 
e810: 3d 20 47 65 74 53 74 65 70 41 72 67 73 28 0d 0a  = GetStepArgs(..
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 20 20 61 72 67 73 2c 20 73 74 65 70 4e 75 6d 62    args, stepNumb
e840: 65 72 2c 20 63 6f 6e 74 65 78 74 44 61 74 61 2c  er, contextData,
e850: 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20   false);....    
e860: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 47 4e            /* IGN
e870: 4f 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ORED */..       
e880: 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 31         callback1
e890: 2e 44 79 6e 61 6d 69 63 49 6e 76 6f 6b 65 28 6e  .DynamicInvoke(n
e8a0: 65 77 41 72 67 73 29 3b 20 2f 2a 20 74 68 72 6f  ewArgs); /* thro
e8b0: 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
e8c0: 20 20 20 20 20 20 55 70 64 61 74 65 53 74 65 70        UpdateStep
e8d0: 41 72 67 73 28 6e 65 77 41 72 67 73 2c 20 72 65  Args(newArgs, re
e8e0: 66 20 63 6f 6e 74 65 78 74 44 61 74 61 2c 20 66  f contextData, f
e8f0: 61 6c 73 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  alse);..#else.. 
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
e910: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
e920: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
e930: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
e940: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
e950: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
e960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  //....      /// 
e9b0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
e9c0: 20 2f 2f 2f 20 54 68 69 73 20 76 69 72 74 75 61   /// This virtua
e9d0: 6c 20 6d 65 74 68 6f 64 20 69 73 20 70 61 72 74  l method is part
e9e0: 20 6f 66 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   of the implemen
e9f0: 74 61 74 69 6f 6e 20 66 6f 72 20 61 67 67 72 65  tation for aggre
ea00: 67 61 74 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  gate..      /// 
ea10: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 53 65 65 20  functions.  See 
ea20: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
ea30: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 46 69  QLiteFunction.Fi
ea40: 6e 61 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 0d 0a  nal" /> method..
ea50: 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 6d 6f        /// for mo
ea60: 72 65 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20  re details...   
ea70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ea80: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  >..      /// <pa
ea90: 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78  ram name="contex
eaa0: 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 2f  tData">..      /
eab0: 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c 64 65 72  // A placeholder
eac0: 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 65 72   for implementer
ead0: 73 20 74 6f 20 73 74 6f 72 65 20 63 6f 6e 74 65  s to store conte
eae0: 78 74 75 61 6c 20 64 61 74 61 20 70 65 72 74 61  xtual data perta
eaf0: 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 2f  ining..      ///
eb00: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
eb10: 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20  context...      
eb20: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
eb30: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
eb40: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
eb50: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 61   result of the a
eb60: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
eb70: 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  n...      /// </
eb80: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
eb90: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
eba0: 6f 62 6a 65 63 74 20 46 69 6e 61 6c 28 0d 0a 20  object Final(.. 
ebb0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
ebc0: 63 6f 6e 74 65 78 74 44 61 74 61 20 2f 2a 20 69  contextData /* i
ebd0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
ebe0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
ebf0: 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
ec00: 63 6b 32 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ck2 == null)..  
ec10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ec20: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
ec30: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
ec40: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec60: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
ec70: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
ec80: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
ec90: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
eca0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
ecb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ecc0: 20 20 20 20 20 4e 6f 43 61 6c 6c 62 61 63 6b 45       NoCallbackE
ecd0: 72 72 6f 72 2c 20 22 46 69 6e 61 6c 22 29 29 3b  rror, "Final"));
ece0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
ecf0: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
ed00: 65 46 69 6e 61 6c 44 65 6c 65 67 61 74 65 20 66  eFinalDelegate f
ed10: 69 6e 61 6c 44 65 6c 65 67 61 74 65 20 3d 20 63  inalDelegate = c
ed20: 61 6c 6c 62 61 63 6b 32 20 61 73 20 53 51 4c 69  allback2 as SQLi
ed30: 74 65 46 69 6e 61 6c 44 65 6c 65 67 61 74 65 3b  teFinalDelegate;
ed40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
ed50: 20 28 66 69 6e 61 6c 44 65 6c 65 67 61 74 65 20   (finalDelegate 
ed60: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
ed70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ed80: 20 20 20 20 20 72 65 74 75 72 6e 20 66 69 6e 61       return fina
ed90: 6c 44 65 6c 65 67 61 74 65 2e 49 6e 76 6f 6b 65  lDelegate.Invoke
eda0: 28 22 46 69 6e 61 6c 22 2c 20 63 6f 6e 74 65 78  ("Final", contex
edb0: 74 44 61 74 61 29 3b 20 2f 2a 20 74 68 72 6f 77  tData); /* throw
edc0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d   */..          }
edd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65  ..          else
ede0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23  ..          {..#
edf0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
ee00: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ee20: 75 72 6e 20 63 61 6c 6c 62 61 63 6b 31 2e 44 79  urn callback1.Dy
ee30: 6e 61 6d 69 63 49 6e 76 6f 6b 65 28 47 65 74 46  namicInvoke(GetF
ee40: 69 6e 61 6c 41 72 67 73 28 0d 0a 20 20 20 20 20  inalArgs(..     
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
ee60: 74 65 78 74 44 61 74 61 2c 20 66 61 6c 73 65 29  textData, false)
ee70: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
ee80: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
ee90: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
eea0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
eeb0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
eec0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  f..          }..
eed0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
eee0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
eef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ef30: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
ef40: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  >..      /// Thi
ef50: 73 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64  s virtual method
ef60: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
ef70: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66  implementation f
ef80: 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 0d 0a 20 20  or collating..  
ef90: 20 20 20 20 2f 2f 2f 20 73 65 71 75 65 6e 63 65      /// sequence
efa0: 73 2e 20 20 53 65 65 20 74 68 65 20 3c 73 65 65  s.  See the <see
efb0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
efc0: 63 74 69 6f 6e 2e 43 6f 6d 70 61 72 65 22 20 2f  ction.Compare" /
efd0: 3e 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20  > method..      
efe0: 2f 2f 2f 20 66 6f 72 20 6d 6f 72 65 20 64 65 74  /// for more det
eff0: 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ails...      ///
f000: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f010: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
f020: 6d 65 3d 22 70 61 72 61 6d 31 22 3e 0d 0a 20 20  me="param1">..  
f030: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 69 72 73      /// The firs
f040: 74 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70  t string to comp
f050: 61 72 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  are...      /// 
f060: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
f070: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
f080: 22 70 61 72 61 6d 32 22 3e 0d 0a 20 20 20 20 20  "param2">..     
f090: 20 2f 2f 2f 20 54 68 65 20 73 65 63 6f 6e 64 20   /// The second 
f0a0: 73 74 72 6e 69 67 20 74 6f 20 63 6f 6d 70 61 72  strnig to compar
f0b0: 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  e...      /// </
f0c0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
f0d0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
f0e0: 20 20 20 2f 2f 2f 20 41 20 70 6f 73 69 74 69 76     /// A positiv
f0f0: 65 20 69 6e 74 65 67 65 72 20 69 66 20 74 68 65  e integer if the
f100: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
f110: 22 70 61 72 61 6d 31 22 20 2f 3e 20 70 61 72 61  "param1" /> para
f120: 6d 65 74 65 72 20 69 73 0d 0a 20 20 20 20 20 20  meter is..      
f130: 2f 2f 2f 20 67 72 65 61 74 65 72 20 74 68 61 6e  /// greater than
f140: 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20 6e   the <paramref n
f150: 61 6d 65 3d 22 70 61 72 61 6d 32 22 20 2f 3e 20  ame="param2" /> 
f160: 70 61 72 61 6d 65 74 65 72 2c 20 61 20 6e 65 67  parameter, a neg
f170: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  ative..      ///
f180: 20 69 6e 74 65 67 65 72 20 69 66 20 74 68 65 20   integer if the 
f190: 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
f1a0: 70 61 72 61 6d 31 22 20 2f 3e 20 70 61 72 61 6d  param1" /> param
f1b0: 65 74 65 72 20 69 73 20 6c 65 73 73 20 74 68 61  eter is less tha
f1c0: 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  n..      /// the
f1d0: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
f1e0: 22 70 61 72 61 6d 32 22 20 2f 3e 20 70 61 72 61  "param2" /> para
f1f0: 6d 65 74 65 72 2c 20 6f 72 20 7a 65 72 6f 20 69  meter, or zero i
f200: 66 20 74 68 65 79 20 61 72 65 0d 0a 20 20 20 20  f they are..    
f210: 20 20 2f 2f 2f 20 65 71 75 61 6c 2e 0d 0a 20 20    /// equal...  
f220: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
f230: 73 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  s>..      public
f240: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
f250: 6d 70 61 72 65 28 0d 0a 20 20 20 20 20 20 20 20  mpare(..        
f260: 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d 31 2c    string param1,
f270: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
f280: 20 20 20 20 20 73 74 72 69 6e 67 20 70 61 72 61       string para
f290: 6d 32 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  m2  /* in */..  
f2a0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
f2b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
f2c0: 20 28 63 61 6c 6c 62 61 63 6b 31 20 3d 3d 20 6e   (callback1 == n
f2d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
f2e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
f2f0: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
f300: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
f310: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
f320: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
f330: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 53 74 72  ativeMethods.Str
f340: 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
f360: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
f370: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 6f 43               NoC
f390: 61 6c 6c 62 61 63 6b 45 72 72 6f 72 2c 20 22 43  allbackError, "C
f3a0: 6f 6d 70 61 72 65 22 29 29 3b 0d 0a 20 20 20 20  ompare"));..    
f3b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f3c0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6d 70 61       SQLiteCompa
f3d0: 72 65 44 65 6c 65 67 61 74 65 20 63 6f 6d 70 61  reDelegate compa
f3e0: 72 65 44 65 6c 65 67 61 74 65 20 3d 0d 0a 20 20  reDelegate =..  
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c              call
f400: 62 61 63 6b 31 20 61 73 20 53 51 4c 69 74 65 43  back1 as SQLiteC
f410: 6f 6d 70 61 72 65 44 65 6c 65 67 61 74 65 3b 0d  ompareDelegate;.
f420: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
f430: 28 63 6f 6d 70 61 72 65 44 65 6c 65 67 61 74 65  (compareDelegate
f440: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
f450: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f460: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d        return com
f470: 70 61 72 65 44 65 6c 65 67 61 74 65 2e 49 6e 76  pareDelegate.Inv
f480: 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  oke(..          
f490: 20 20 20 20 20 20 20 20 22 43 6f 6d 70 61 72 65          "Compare
f4a0: 22 2c 20 70 61 72 61 6d 31 2c 20 70 61 72 61 6d  ", param1, param
f4b0: 32 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  2); /* throw */.
f4c0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
f4d0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
f4e0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
f4f0: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
f500: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
f510: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
f520: 72 65 73 75 6c 74 20 3d 20 63 61 6c 6c 62 61 63  result = callbac
f530: 6b 31 2e 44 79 6e 61 6d 69 63 49 6e 76 6f 6b 65  k1.DynamicInvoke
f540: 28 47 65 74 43 6f 6d 70 61 72 65 41 72 67 73 28  (GetCompareArgs(
f550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f560: 20 20 20 20 70 61 72 61 6d 31 2c 20 70 61 72 61      param1, para
f570: 6d 32 2c 20 66 61 6c 73 65 29 29 3b 20 2f 2a 20  m2, false)); /* 
f580: 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
f590: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
f5a0: 73 75 6c 74 20 69 73 20 69 6e 74 29 0d 0a 20 20  sult is int)..  
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5c0: 72 65 74 75 72 6e 20 28 69 6e 74 29 72 65 73 75  return (int)resu
f5d0: 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  lt;....         
f5e0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
f5f0: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
f600: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
f620: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f630: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f650: 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
f660: 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f680: 20 52 65 73 75 6c 74 49 6e 74 33 32 45 72 72 6f   ResultInt32Erro
f690: 72 2c 20 22 43 6f 6d 70 61 72 65 22 29 29 3b 0d  r, "Compare"));.
f6a0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
f6b0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
f6c0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
f6d0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
f6e0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  if..          }.
f6f0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
f700: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 7d 0d  #endregion..  }.
f710: 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...  ///////////
f720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f760: 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d  //....  /// <sum
f770: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 45 78 74  mary>..  /// Ext
f780: 65 6e 64 73 20 53 51 4c 69 74 65 46 75 6e 63 74  ends SQLiteFunct
f790: 69 6f 6e 20 61 6e 64 20 61 6c 6c 6f 77 73 20 61  ion and allows a
f7a0: 6e 20 69 6e 68 65 72 69 74 65 64 20 63 6c 61 73  n inherited clas
f7b0: 73 20 74 6f 20 6f 62 74 61 69 6e 20 74 68 65 20  s to obtain the 
f7c0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
f7d0: 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ce associated wi
f7e0: 74 68 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61  th a function ca
f7f0: 6c 6c 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ll...  /// </sum
f800: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65  mary>..  /// <re
f810: 6d 61 72 6b 73 3e 0d 0a 20 20 2f 2f 2f 20 55 73  marks>..  /// Us
f820: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
f830: 69 6f 6e 73 20 63 61 6e 20 63 61 6c 6c 20 74 68  ions can call th
f840: 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65  e GetCollationSe
f850: 71 75 65 6e 63 65 28 29 20 6d 65 74 68 6f 64 20  quence() method 
f860: 69 6e 20 74 68 69 73 20 63 6c 61 73 73 20 61 6e  in this class an
f870: 64 20 75 73 65 20 69 74 20 74 6f 20 63 6f 6d 70  d use it to comp
f880: 61 72 65 20 73 74 72 69 6e 67 73 20 61 6e 64 20  are strings and 
f890: 63 68 61 72 20 61 72 72 61 79 73 2e 0d 0a 20 20  char arrays...  
f8a0: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
f8b0: 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53    public class S
f8c0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 45 78 20  QLiteFunctionEx 
f8d0: 3a 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  : SQLiteFunction
f8e0: 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ..  {..    /// <
f8f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f900: 2f 20 4f 62 74 61 69 6e 73 20 74 68 65 20 63 6f  / Obtains the co
f910: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
f920: 20 69 6e 20 65 66 66 65 63 74 20 66 6f 72 20 74   in effect for t
f930: 68 65 20 67 69 76 65 6e 20 66 75 6e 63 74 69 6f  he given functio
f940: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
f950: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
f960: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
f970: 6e 73 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  ns>..    protect
f980: 65 64 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ed CollationSequ
f990: 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f  ence GetCollatio
f9a0: 6e 53 65 71 75 65 6e 63 65 28 29 0d 0a 20 20 20  nSequence()..   
f9b0: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
f9c0: 20 5f 62 61 73 65 2e 47 65 74 43 6f 6c 6c 61 74   _base.GetCollat
f9d0: 69 6f 6e 53 65 71 75 65 6e 63 65 28 74 68 69 73  ionSequence(this
f9e0: 2c 20 5f 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  , _context);..  
f9f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
fa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
fa60: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
fa70: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
fa80: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69  Members..    pri
fa90: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
faa0: 65 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ed;..    private
fab0: 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
fac0: 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
fad0: 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48  /..    {..#if TH
fae0: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
faf0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73  .        if (dis
fb00: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
fb10: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
fb20: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
fb30: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
fb40: 69 74 65 46 75 6e 63 74 69 6f 6e 45 78 29 2e 4e  iteFunctionEx).N
fb50: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
fb60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
fb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
fbd0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
fbe0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 65 61 6e 73  ..    /// Cleans
fbf0: 20 75 70 20 72 65 73 6f 75 72 63 65 73 20 28 6e   up resources (n
fc00: 61 74 69 76 65 20 61 6e 64 20 6d 61 6e 61 67 65  ative and manage
fc10: 64 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  d) associated wi
fc20: 74 68 20 74 68 65 20 63 75 72 72 65 6e 74 20 69  th the current i
fc30: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f  nstance...    //
fc40: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
fc50: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
fc60: 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a  e="disposing">..
fc70: 20 20 20 20 2f 2f 2f 20 5a 65 72 6f 20 77 68 65      /// Zero whe
fc80: 6e 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64  n being disposed
fc90: 20 76 69 61 20 67 61 72 62 61 67 65 20 63 6f 6c   via garbage col
fca0: 6c 65 63 74 69 6f 6e 3b 20 6f 74 68 65 72 77 69  lection; otherwi
fcb0: 73 65 2c 20 6e 6f 6e 2d 7a 65 72 6f 2e 0d 0a 20  se, non-zero... 
fcc0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
fcd0: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f  .    protected o
fce0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73  verride void Dis
fcf0: 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73  pose(bool dispos
fd00: 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ing)..    {..   
fd10: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
fd20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fd30: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
fd40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd60: 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29  //if (disposing)
fd70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd80: 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20    //{..         
fd90: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f         //    ///
fda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdc0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
fdd0: 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70     //    // disp
fde0: 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
fdf0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
fe00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fe10: 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  /    ///////////
fe20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
fe40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a             //}..
fe50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fe60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
fe70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
fe90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c            // rel
fea0: 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72  ease unmanaged r
feb0: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
fec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
fee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fef0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
ff00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ff10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
ff20: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65              base
ff40: 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f 73 69  .Dispose(disposi
ff50: 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
ff60: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ff70: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65      // NOTE: Eve
ff80: 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64 20 62  rything should b
ff90: 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73 65 64  e fully disposed
ffa0: 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d   at this point..
ffb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
ffc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73  .            dis
ffd0: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
ffe0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
fff0: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
10000 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73  .  }....  /// <s
10010 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54  ummary>..  /// T
10020 68 65 20 74 79 70 65 20 6f 66 20 75 73 65 72 2d  he type of user-
10030 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
10040 20 74 6f 20 64 65 63 6c 61 72 65 0d 0a 20 20 2f   to declare..  /
10050 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10060 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 46 75 6e   public enum Fun
10070 63 74 69 6f 6e 54 79 70 65 0d 0a 20 20 7b 0d 0a  ctionType..  {..
10080 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10090 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 63 61 6c 61  >..    /// Scala
100a0 72 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  r functions are 
100b0 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65 20 63  designed to be c
100c0 61 6c 6c 65 64 20 61 6e 64 20 72 65 74 75 72 6e  alled and return
100d0 20 61 20 72 65 73 75 6c 74 20 69 6d 6d 65 64 69   a result immedi
100e0 61 74 65 6c 79 2e 20 20 45 78 61 6d 70 6c 65 73  ately.  Examples
100f0 20 69 6e 63 6c 75 64 65 20 41 42 53 28 29 2c 20   include ABS(), 
10100 55 70 70 65 72 28 29 2c 20 4c 6f 77 65 72 28 29  Upper(), Lower()
10110 2c 20 65 74 63 2e 0d 0a 20 20 20 20 2f 2f 2f 20  , etc...    /// 
10120 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10130 53 63 61 6c 61 72 20 3d 20 30 2c 0d 0a 20 20 20  Scalar = 0,..   
10140 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
10150 20 20 20 20 2f 2f 2f 20 41 67 67 72 65 67 61 74      /// Aggregat
10160 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
10170 64 65 73 69 67 6e 65 64 20 74 6f 20 61 63 63 75  designed to accu
10180 6d 75 6c 61 74 65 20 64 61 74 61 20 75 6e 74 69  mulate data unti
10190 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 61 20 63  l the end of a c
101a0 61 6c 6c 20 61 6e 64 20 74 68 65 6e 20 72 65 74  all and then ret
101b0 75 72 6e 20 61 20 72 65 73 75 6c 74 20 67 6c 65  urn a result gle
101c0 61 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 61 63  aned from the ac
101d0 63 75 6d 75 6c 61 74 65 64 20 64 61 74 61 2e 0d  cumulated data..
101e0 0a 20 20 20 20 2f 2f 2f 20 45 78 61 6d 70 6c 65  .    /// Example
101f0 73 20 69 6e 63 6c 75 64 65 20 53 55 4d 28 29 2c  s include SUM(),
10200 20 43 4f 55 4e 54 28 29 2c 20 41 56 47 28 29 2c   COUNT(), AVG(),
10210 20 65 74 63 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c   etc...    /// <
10220 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 41  /summary>..    A
10230 67 67 72 65 67 61 74 65 20 3d 20 31 2c 0d 0a 20  ggregate = 1,.. 
10240 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10250 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6c 6c 61 74  ..    /// Collat
10260 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 72  ing sequences ar
10270 65 20 75 73 65 64 20 74 6f 20 73 6f 72 74 20 74  e used to sort t
10280 65 78 74 75 61 6c 20 64 61 74 61 20 69 6e 20 61  extual data in a
10290 20 63 75 73 74 6f 6d 20 6d 61 6e 6e 65 72 2c 20   custom manner, 
102a0 61 6e 64 20 61 70 70 65 61 72 20 69 6e 20 61 6e  and appear in an
102b0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
102c0 2e 20 20 54 79 70 69 63 61 6c 6c 79 20 74 65 78  .  Typically tex
102d0 74 20 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59  t in an ORDER BY
102e0 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 73 6f 72   is..    /// sor
102f0 74 65 64 20 75 73 69 6e 67 20 61 20 73 74 72 61  ted using a stra
10300 69 67 68 74 20 63 61 73 65 2d 69 6e 73 65 6e 73  ight case-insens
10310 69 74 69 76 65 20 63 6f 6d 70 61 72 69 73 6f 6e  itive comparison
10320 20 66 75 6e 63 74 69 6f 6e 2e 20 20 43 75 73 74   function.  Cust
10330 6f 6d 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  om collating seq
10340 75 65 6e 63 65 73 20 63 61 6e 20 62 65 20 75 73  uences can be us
10350 65 64 20 74 6f 20 61 6c 74 65 72 20 74 68 65 20  ed to alter the 
10360 62 65 68 61 76 69 6f 72 20 6f 66 20 74 65 78 74  behavior of text
10370 20 73 6f 72 74 69 6e 67 0d 0a 20 20 20 20 2f 2f   sorting..    //
10380 2f 20 69 6e 20 61 20 75 73 65 72 2d 64 65 66 69  / in a user-defi
10390 6e 65 64 20 6d 61 6e 6e 65 72 2e 0d 0a 20 20 20  ned manner...   
103a0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
103b0 0a 20 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 20 3d  .    Collation =
103c0 20 32 2c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f   2,..  }....  //
103d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
103e0 2f 2f 20 41 6e 20 69 6e 74 65 72 6e 61 6c 20 63  // An internal c
103f0 61 6c 6c 62 61 63 6b 20 64 65 6c 65 67 61 74 65  allback delegate
10400 20 64 65 63 6c 61 72 61 74 69 6f 6e 2e 0d 0a 20   declaration... 
10410 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10420 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61  .  /// <param na
10430 6d 65 3d 22 63 6f 6e 74 65 78 74 22 3e 52 61 77  me="context">Raw
10440 20 6e 61 74 69 76 65 20 63 6f 6e 74 65 78 74 20   native context 
10450 70 6f 69 6e 74 65 72 20 66 6f 72 20 74 68 65 20  pointer for the 
10460 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f  user function.</
10470 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70  param>..  /// <p
10480 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22  aram name="argc"
10490 3e 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66  >Total number of
104a0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
104b0 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e  e user function.
104c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
104d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
104e0 76 22 3e 52 61 77 20 6e 61 74 69 76 65 20 70 6f  v">Raw native po
104f0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61 72 72  inter to the arr
10500 61 79 20 6f 66 20 72 61 77 20 6e 61 74 69 76 65  ay of raw native
10510 20 61 72 67 75 6d 65 6e 74 20 70 6f 69 6e 74 65   argument pointe
10520 72 73 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66  rs.</param>..#if
10530 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
10540 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b  CTFRAMEWORK..  [
10550 55 6e 6d 61 6e 61 67 65 64 46 75 6e 63 74 69 6f  UnmanagedFunctio
10560 6e 50 6f 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67  nPointer(Calling
10570 43 6f 6e 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c  Convention.Cdecl
10580 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 70 75  )]..#endif..  pu
10590 62 6c 69 63 20 64 65 6c 65 67 61 74 65 20 76 6f  blic delegate vo
105a0 69 64 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63  id SQLiteCallbac
105b0 6b 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  k(IntPtr context
105c0 2c 20 69 6e 74 20 61 72 67 63 2c 20 49 6e 74 50  , int argc, IntP
105d0 74 72 20 61 72 67 76 29 3b 0d 0a 20 20 2f 2f 2f  tr argv);..  ///
105e0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
105f0 2f 20 41 6e 20 69 6e 74 65 72 6e 61 6c 20 66 69  / An internal fi
10600 6e 61 6c 20 63 61 6c 6c 62 61 63 6b 20 64 65 6c  nal callback del
10610 65 67 61 74 65 20 64 65 63 6c 61 72 61 74 69 6f  egate declaratio
10620 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  n...  /// </summ
10630 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ary>..  /// <par
10640 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74  am name="context
10650 22 3e 52 61 77 20 63 6f 6e 74 65 78 74 20 70 6f  ">Raw context po
10660 69 6e 74 65 72 20 66 6f 72 20 74 68 65 20 75 73  inter for the us
10670 65 72 20 66 75 6e 63 74 69 6f 6e 3c 2f 70 61 72  er function</par
10680 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  am>..#if !PLATFO
10690 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
106a0 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65  ORK..  [Unmanage
106b0 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72  dFunctionPointer
106c0 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69  (CallingConventi
106d0 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64  on.Cdecl)]..#end
106e0 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64  if..  internal d
106f0 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
10700 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b  iteFinalCallback
10710 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
10720 3b 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  ;..  /// <summar
10730 79 3e 0d 0a 20 20 2f 2f 2f 20 49 6e 74 65 72 6e  y>..  /// Intern
10740 61 6c 20 63 61 6c 6c 62 61 63 6b 20 64 65 6c 65  al callback dele
10750 67 61 74 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  gate for impleme
10760 6e 74 69 6e 67 20 63 6f 6c 6c 61 74 69 6e 67 20  nting collating 
10770 73 65 71 75 65 6e 63 65 73 0d 0a 20 20 2f 2f 2f  sequences..  ///
10780 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f   </summary>..  /
10790 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
107a0 70 75 73 65 72 22 3e 4e 6f 74 20 75 73 65 64 3c  puser">Not used<
107b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c  /param>..  /// <
107c0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 31  param name="len1
107d0 22 3e 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  ">Length of the 
107e0 73 74 72 69 6e 67 20 70 76 31 3c 2f 70 61 72 61  string pv1</para
107f0 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
10800 20 6e 61 6d 65 3d 22 70 76 31 22 3e 50 6f 69 6e   name="pv1">Poin
10810 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
10820 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61   string to compa
10830 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f  re</param>..  //
10840 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c  / <param name="l
10850 65 6e 32 22 3e 4c 65 6e 67 74 68 20 6f 66 20 74  en2">Length of t
10860 68 65 20 73 74 72 69 6e 67 20 70 76 32 3c 2f 70  he string pv2</p
10870 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61  aram>..  /// <pa
10880 72 61 6d 20 6e 61 6d 65 3d 22 70 76 32 22 3e 50  ram name="pv2">P
10890 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 65  ointer to the se
108a0 63 6f 6e 64 20 73 74 72 69 6e 67 20 74 6f 20 63  cond string to c
108b0 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a  ompare</param>..
108c0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
108d0 65 74 75 72 6e 73 20 2d 31 20 69 66 20 74 68 65  eturns -1 if the
108e0 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 69 73   first string is
108f0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 73   less than the s
10900 65 63 6f 6e 64 2e 20 20 30 20 69 66 20 74 68 65  econd.  0 if the
10910 79 20 61 72 65 20 65 71 75 61 6c 2c 20 6f 72 20  y are equal, or 
10920 31 20 69 66 20 74 68 65 20 66 69 72 73 74 20 73  1 if the first s
10930 74 72 69 6e 67 20 69 73 20 67 72 65 61 74 65 72  tring is greater
10940 0d 0a 20 20 2f 2f 2f 20 74 68 61 6e 20 74 68 65  ..  /// than the
10950 20 73 65 63 6f 6e 64 2e 3c 2f 72 65 74 75 72 6e   second.</return
10960 73 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  s>..#if !PLATFOR
10970 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
10980 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65 64  RK..  [Unmanaged
10990 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72 28  FunctionPointer(
109a0 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f  CallingConventio
109b0 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64 69  n.Cdecl)]..#endi
109c0 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64 65  f..  internal de
109d0 6c 65 67 61 74 65 20 69 6e 74 20 53 51 4c 69 74  legate int SQLit
109e0 65 43 6f 6c 6c 61 74 69 6f 6e 28 49 6e 74 50 74  eCollation(IntPt
109f0 72 20 70 75 73 65 72 2c 20 69 6e 74 20 6c 65 6e  r puser, int len
10a00 31 2c 20 49 6e 74 50 74 72 20 70 76 31 2c 20 69  1, IntPtr pv1, i
10a10 6e 74 20 6c 65 6e 32 2c 20 49 6e 74 50 74 72 20  nt len2, IntPtr 
10a20 70 76 32 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c  pv2);....  /// <
10a30 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
10a40 54 68 65 20 74 79 70 65 20 6f 66 20 63 6f 6c 6c  The type of coll
10a50 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a  ating sequence..
10a60 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
10a70 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20  ..  public enum 
10a80 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75  CollationTypeEnu
10a90 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20  m..  {..    /// 
10aa0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
10ab0 2f 2f 20 54 68 65 20 62 75 69 6c 74 2d 69 6e 20  // The built-in 
10ac0 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67  BINARY collating
10ad0 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f   sequence..    /
10ae0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10af0 20 20 20 42 69 6e 61 72 79 20 3d 20 31 2c 0d 0a     Binary = 1,..
10b00 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10b10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 62  >..    /// The b
10b20 75 69 6c 74 2d 69 6e 20 4e 4f 43 41 53 45 20 63  uilt-in NOCASE c
10b30 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10b40 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
10b50 6d 61 72 79 3e 0d 0a 20 20 20 20 4e 6f 43 61 73  mary>..    NoCas
10b60 65 20 3d 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20  e = 2,..    /// 
10b70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
10b80 2f 2f 20 54 68 65 20 62 75 69 6c 74 2d 69 6e 20  // The built-in 
10b90 52 45 56 45 52 53 45 20 63 6f 6c 6c 61 74 69 6e  REVERSE collatin
10ba0 67 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20 20  g sequence..    
10bb0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
10bc0 20 20 20 20 52 65 76 65 72 73 65 20 3d 20 33 2c      Reverse = 3,
10bd0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10be0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 63  ry>..    /// A c
10bf0 75 73 74 6f 6d 20 75 73 65 72 2d 64 65 66 69 6e  ustom user-defin
10c00 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ed collating seq
10c10 75 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  uence..    /// <
10c20 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 43  /summary>..    C
10c30 75 73 74 6f 6d 20 3d 20 30 2c 0d 0a 20 20 7d 0d  ustom = 0,..  }.
10c40 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  ...  /// <summar
10c50 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 6e  y>..  /// The en
10c60 63 6f 64 69 6e 67 20 74 79 70 65 20 74 68 65 20  coding type the 
10c70 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
10c80 63 65 20 75 73 65 73 0d 0a 20 20 2f 2f 2f 20 3c  ce uses..  /// <
10c90 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
10ca0 6c 69 63 20 65 6e 75 6d 20 43 6f 6c 6c 61 74 69  lic enum Collati
10cb0 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 0d 0a  onEncodingEnum..
10cc0 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    {..    /// <su
10cd0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10ce0 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  The collation se
10cf0 71 75 65 6e 63 65 20 69 73 20 55 54 46 38 0d 0a  quence is UTF8..
10d00 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10d10 79 3e 0d 0a 20 20 20 20 55 54 46 38 20 3d 20 31  y>..    UTF8 = 1
10d20 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ,..    /// <summ
10d30 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
10d40 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
10d50 65 6e 63 65 20 69 73 20 55 54 46 31 36 20 6c 69  ence is UTF16 li
10d60 74 74 6c 65 2d 65 6e 64 69 61 6e 0d 0a 20 20 20  ttle-endian..   
10d70 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10d80 0a 20 20 20 20 55 54 46 31 36 4c 45 20 3d 20 32  .    UTF16LE = 2
10d90 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ,..    /// <summ
10da0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
10db0 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
10dc0 65 6e 63 65 20 69 73 20 55 54 46 31 36 20 62 69  ence is UTF16 bi
10dd0 67 2d 65 6e 64 69 61 6e 0d 0a 20 20 20 20 2f 2f  g-endian..    //
10de0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
10df0 20 20 55 54 46 31 36 42 45 20 3d 20 33 2c 0d 0a    UTF16BE = 3,..
10e00 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75    }....  /// <su
10e10 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41 20  mmary>..  /// A 
10e20 73 74 72 75 63 74 20 64 65 73 63 72 69 62 69 6e  struct describin
10e30 67 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  g the collating 
10e40 73 65 71 75 65 6e 63 65 20 61 20 66 75 6e 63 74  sequence a funct
10e50 69 6f 6e 20 69 73 20 65 78 65 63 75 74 69 6e 67  ion is executing
10e60 20 69 6e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d   in..  /// </sum
10e70 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20  mary>..  public 
10e80 73 74 72 75 63 74 20 43 6f 6c 6c 61 74 69 6f 6e  struct Collation
10e90 53 65 71 75 65 6e 63 65 0d 0a 20 20 7b 0d 0a 20  Sequence..  {.. 
10ea0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10eb0 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
10ec0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
10ed0 69 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a 20 20  ing sequence..  
10ee0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
10ef0 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
10f00 69 6e 67 20 4e 61 6d 65 3b 0d 0a 20 20 20 20 2f  ing Name;..    /
10f10 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10f20 20 20 2f 2f 2f 20 54 68 65 20 74 79 70 65 20 6f    /// The type o
10f30 66 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  f collating sequ
10f40 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ence..    /// </
10f50 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
10f60 62 6c 69 63 20 43 6f 6c 6c 61 74 69 6f 6e 54 79  blic CollationTy
10f70 70 65 45 6e 75 6d 20 54 79 70 65 3b 0d 0a 0d 0a  peEnum Type;....
10f80 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10f90 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 74  >..    /// The t
10fa0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  ext encoding of 
10fb0 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
10fc0 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  quence..    /// 
10fd0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10fe0 70 75 62 6c 69 63 20 43 6f 6c 6c 61 74 69 6f 6e  public Collation
10ff0 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 45 6e 63  EncodingEnum Enc
11000 6f 64 69 6e 67 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  oding;....    //
11010 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
11020 20 2f 2f 2f 20 43 6f 6e 74 65 78 74 20 6f 66 20   /// Context of 
11030 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  the function tha
11040 74 20 72 65 71 75 65 73 74 65 64 20 74 68 65 20  t requested the 
11050 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11060 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ce..    /// </su
11070 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
11080 72 6e 61 6c 20 53 51 4c 69 74 65 46 75 6e 63 74  rnal SQLiteFunct
11090 69 6f 6e 20 5f 66 75 6e 63 3b 0d 0a 0d 0a 20 20  ion _func;....  
110a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
110b0 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
110c0 68 65 20 62 61 73 65 20 63 6f 6c 6c 61 74 69 6e  he base collatin
110d0 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 63 6f  g sequence to co
110e0 6d 70 61 72 65 20 74 77 6f 20 73 74 72 69 6e 67  mpare two string
110f0 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  s..    /// </sum
11100 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
11110 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 31 22 3e  param name="s1">
11120 54 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67  The first string
11130 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72   to compare</par
11140 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
11150 72 61 6d 20 6e 61 6d 65 3d 22 73 32 22 3e 54 68  ram name="s2">Th
11160 65 20 73 65 63 6f 6e 64 20 73 74 72 69 6e 67 20  e second string 
11170 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61  to compare</para
11180 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
11190 75 72 6e 73 3e 2d 31 20 69 66 20 73 31 20 69 73  urns>-1 if s1 is
111a0 20 6c 65 73 73 20 74 68 61 6e 20 73 32 2c 20 30   less than s2, 0
111b0 20 69 66 20 73 31 20 69 73 20 65 71 75 61 6c 20   if s1 is equal 
111c0 74 6f 20 73 32 2c 20 61 6e 64 20 31 20 69 66 20  to s2, and 1 if 
111d0 73 31 20 69 73 20 67 72 65 61 74 65 72 20 74 68  s1 is greater th
111e0 61 6e 20 73 32 3c 2f 72 65 74 75 72 6e 73 3e 0d  an s2</returns>.
111f0 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20  .    public int 
11200 43 6f 6d 70 61 72 65 28 73 74 72 69 6e 67 20 73  Compare(string s
11210 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d 0a 20  1, string s2).. 
11220 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
11230 72 6e 20 5f 66 75 6e 63 2e 5f 62 61 73 65 2e 43  rn _func._base.C
11240 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
11250 70 61 72 65 28 45 6e 63 6f 64 69 6e 67 2c 20 5f  pare(Encoding, _
11260 66 75 6e 63 2e 5f 63 6f 6e 74 65 78 74 2c 20 73  func._context, s
11270 31 2c 20 73 32 29 3b 0d 0a 20 20 20 20 7d 0d 0a  1, s2);..    }..
11280 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
11290 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
112a0 6c 73 20 74 68 65 20 62 61 73 65 20 63 6f 6c 6c  ls the base coll
112b0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
112c0 6f 20 63 6f 6d 70 61 72 65 20 74 77 6f 20 63 68  o compare two ch
112d0 61 72 61 63 74 65 72 20 61 72 72 61 79 73 0d 0a  aracter arrays..
112e0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
112f0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
11300 61 6d 20 6e 61 6d 65 3d 22 63 31 22 3e 54 68 65  am name="c1">The
11310 20 66 69 72 73 74 20 61 72 72 61 79 20 74 6f 20   first array to 
11320 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d  compare</param>.
11330 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11340 6e 61 6d 65 3d 22 63 32 22 3e 54 68 65 20 73 65  name="c2">The se
11350 63 6f 6e 64 20 61 72 72 61 79 20 74 6f 20 63 6f  cond array to co
11360 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  mpare</param>.. 
11370 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
11380 2d 31 20 69 66 20 63 31 20 69 73 20 6c 65 73 73  -1 if c1 is less
11390 20 74 68 61 6e 20 63 32 2c 20 30 20 69 66 20 63   than c2, 0 if c
113a0 31 20 69 73 20 65 71 75 61 6c 20 74 6f 20 63 32  1 is equal to c2
113b0 2c 20 61 6e 64 20 31 20 69 66 20 63 31 20 69 73  , and 1 if c1 is
113c0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 63 32   greater than c2
113d0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
113e0 70 75 62 6c 69 63 20 69 6e 74 20 43 6f 6d 70 61  public int Compa
113f0 72 65 28 63 68 61 72 5b 5d 20 63 31 2c 20 63 68  re(char[] c1, ch
11400 61 72 5b 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d  ar[] c2)..    {.
11410 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 66  .      return _f
11420 75 6e 63 2e 5f 62 61 73 65 2e 43 6f 6e 74 65 78  unc._base.Contex
11430 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
11440 45 6e 63 6f 64 69 6e 67 2c 20 5f 66 75 6e 63 2e  Encoding, _func.
11450 5f 63 6f 6e 74 65 78 74 2c 20 63 31 2c 20 63 32  _context, c1, c2
11460 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  );..    }..  }..
11470 7d 0d 0a                                         }..