System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ae77ca4ded809cefec603d2404bb2d8e39e5d777:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
0180: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0190: 69 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69  ime.InteropServi
01a0: 63 65 73 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79  ces;..  using Sy
01b0: 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69  stem.Globalizati
01c0: 6f 6e 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75  on;....  /// <su
01d0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
01e0: 69 73 20 61 62 73 74 72 61 63 74 20 63 6c 61 73  is abstract clas
01f0: 73 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  s is designed to
0200: 20 68 61 6e 64 6c 65 20 75 73 65 72 2d 64 65 66   handle user-def
0210: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 65  ined functions e
0220: 61 73 69 6c 79 2e 20 20 41 6e 20 69 6e 73 74 61  asily.  An insta
0230: 6e 63 65 20 6f 66 20 74 68 65 20 64 65 72 69 76  nce of the deriv
0240: 65 64 20 63 6c 61 73 73 20 69 73 20 6d 61 64 65  ed class is made
0250: 20 66 6f 72 20 65 61 63 68 0d 0a 20 20 2f 2f 2f   for each..  ///
0260: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
0270: 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20  he database...  
0280: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0290: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
02a0: 0a 20 20 2f 2f 2f 20 41 6c 74 68 6f 75 67 68 20  .  /// Although 
02b0: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
02c0: 74 61 6e 63 65 20 6f 66 20 61 20 63 6c 61 73 73  tance of a class
02d0: 20 64 65 72 69 76 65 64 20 66 72 6f 6d 20 53 51   derived from SQ
02e0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 70 65 72  LiteFunction per
02f0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
0300: 74 69 6f 6e 2c 20 74 68 65 20 64 65 72 69 76 65  tion, the derive
0310: 64 20 63 6c 61 73 73 20 68 61 73 20 6e 6f 20 61  d class has no a
0320: 63 63 65 73 73 0d 0a 20 20 2f 2f 2f 20 74 6f 20  ccess..  /// to 
0330: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
0340: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 69 73  onnection.  This
0350: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
0360: 20 64 65 74 65 72 20 69 6d 70 6c 65 6d 65 6e 74   deter implement
0370: 65 72 73 20 66 72 6f 6d 20 74 68 69 6e 6b 69 6e  ers from thinkin
0380: 67 20 69 74 20 77 6f 75 6c 64 20 62 65 20 61 20  g it would be a 
0390: 67 6f 6f 64 20 69 64 65 61 20 74 6f 20 6d 61 6b  good idea to mak
03a0: 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 2f 2f  e database..  //
03b0: 2f 20 63 61 6c 6c 73 20 64 75 72 69 6e 67 20 70  / calls during p
03c0: 72 6f 63 65 73 73 69 6e 67 2e 0d 0a 20 20 2f 2f  rocessing...  //
03d0: 2f 0d 0a 20 20 2f 2f 2f 20 49 74 20 69 73 20 69  /..  /// It is i
03e0: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 64 69 73 74  mportant to dist
03f0: 69 6e 67 75 69 73 68 20 62 65 74 77 65 65 6e 20  inguish between 
0400: 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  a per-connection
0410: 20 69 6e 73 74 61 6e 63 65 2c 20 61 6e 64 20 61   instance, and a
0420: 20 70 65 72 2d 53 51 4c 20 73 74 61 74 65 6d 65   per-SQL stateme
0430: 6e 74 20 63 6f 6e 74 65 78 74 2e 20 20 4f 6e 65  nt context.  One
0440: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
0450: 73 20 63 6c 61 73 73 0d 0a 20 20 2f 2f 2f 20 73  s class..  /// s
0460: 65 72 76 69 63 65 73 20 61 6c 6c 20 53 51 4c 20  ervices all SQL 
0470: 73 74 61 74 65 6d 65 6e 74 73 20 62 65 69 6e 67  statements being
0480: 20 73 74 65 70 70 65 64 20 74 68 72 6f 75 67 68   stepped through
0490: 20 6f 6e 20 74 68 61 74 20 63 6f 6e 6e 65 63 74   on that connect
04a0: 69 6f 6e 2c 20 61 6e 64 20 74 68 65 72 65 20 63  ion, and there c
04b0: 61 6e 20 62 65 20 6d 61 6e 79 2e 20 20 4f 6e 65  an be many.  One
04c0: 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 73 74   should never st
04d0: 6f 72 65 20 70 65 72 2d 73 74 61 74 65 6d 65 6e  ore per-statemen
04e0: 74 0d 0a 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61  t..  /// informa
04f0: 74 69 6f 6e 20 69 6e 20 6d 65 6d 62 65 72 20 76  tion in member v
0500: 61 72 69 61 62 6c 65 73 20 6f 66 20 75 73 65 72  ariables of user
0510: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
0520: 6e 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 2f 2f  n classes...  //
0530: 2f 0d 0a 20 20 2f 2f 2f 20 46 6f 72 20 61 67 67  /..  /// For agg
0540: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
0550: 2c 20 61 6c 77 61 79 73 20 63 72 65 61 74 65 20  , always create 
0560: 61 6e 64 20 73 74 6f 72 65 20 79 6f 75 72 20 70  and store your p
0570: 65 72 2d 73 74 61 74 65 6d 65 6e 74 20 64 61 74  er-statement dat
0580: 61 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  a in the context
0590: 44 61 74 61 20 6f 62 6a 65 63 74 20 6f 6e 20 74  Data object on t
05a0: 68 65 20 31 73 74 20 73 74 65 70 2e 20 20 54 68  he 1st step.  Th
05b0: 69 73 20 64 61 74 61 20 77 69 6c 6c 0d 0a 20 20  is data will..  
05c0: 2f 2f 2f 20 62 65 20 61 75 74 6f 6d 61 74 69 63  /// be automatic
05d0: 61 6c 6c 79 20 66 72 65 65 64 20 66 6f 72 20 79  ally freed for y
05e0: 6f 75 20 28 61 6e 64 20 44 69 73 70 6f 73 65 28  ou (and Dispose(
05f0: 29 20 63 61 6c 6c 65 64 20 69 66 20 74 68 65 20  ) called if the 
0600: 69 74 65 6d 20 73 75 70 70 6f 72 74 73 20 49 44  item supports ID
0610: 69 73 70 6f 73 61 62 6c 65 29 20 77 68 65 6e 20  isposable) when 
0620: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
0630: 6d 70 6c 65 74 65 73 2e 0d 0a 20 20 2f 2f 2f 20  mpletes...  /// 
0640: 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 70 75  </remarks>..  pu
0650: 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 63 6c  blic abstract cl
0660: 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ass SQLiteFuncti
0670: 6f 6e 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  on : IDisposable
0680: 0d 0a 20 20 7b 0d 0a 20 20 20 20 70 72 69 76 61  ..  {..    priva
0690: 74 65 20 63 6c 61 73 73 20 41 67 67 72 65 67 61  te class Aggrega
06a0: 74 65 44 61 74 61 0d 0a 20 20 20 20 7b 0d 0a 20  teData..    {.. 
06b0: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 69 6e       internal in
06c0: 74 20 5f 63 6f 75 6e 74 20 3d 20 31 3b 0d 0a 20  t _count = 1;.. 
06d0: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 62       internal ob
06e0: 6a 65 63 74 20 5f 64 61 74 61 3b 0d 0a 20 20 20  ject _data;..   
06f0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
0700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0740: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
0750: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0760: 2f 20 54 68 65 20 62 61 73 65 20 63 6f 6e 6e 65  / The base conne
0770: 63 74 69 6f 6e 20 74 68 69 73 20 66 75 6e 63 74  ction this funct
0780: 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
0790: 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  to..    /// </su
07a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
07b0: 72 6e 61 6c 20 53 51 4c 69 74 65 42 61 73 65 20  rnal SQLiteBase 
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 61               _ba
07d0: 73 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  se;....    /// <
07e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
07f0: 2f 20 49 6e 74 65 72 6e 61 6c 20 61 72 72 61 79  / Internal array
0800: 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72   used to keep tr
0810: 61 63 6b 20 6f 66 20 61 67 67 72 65 67 61 74 65  ack of aggregate
0820: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74 65 78   function contex
0830: 74 20 64 61 74 61 0d 0a 20 20 20 20 2f 2f 2f 20  t data..    /// 
0840: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0850: 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61  private Dictiona
0860: 72 79 3c 49 6e 74 50 74 72 2c 20 41 67 67 72 65  ry<IntPtr, Aggre
0870: 67 61 74 65 44 61 74 61 3e 20 5f 63 6f 6e 74 65  gateData> _conte
0880: 78 74 44 61 74 61 4c 69 73 74 3b 0d 0a 0d 0a 20  xtDataList;.... 
0890: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
08a0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f  ..    /// The co
08b0: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61  nnection flags a
08c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
08d0: 68 69 73 20 6f 62 6a 65 63 74 20 28 74 68 69 73  his object (this
08e0: 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65 0d 0a   should be the..
08f0: 20 20 20 20 2f 2f 2f 20 73 61 6d 65 20 76 61 6c      /// same val
0900: 75 65 20 61 73 20 74 68 65 20 66 6c 61 67 73 20  ue as the flags 
0910: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
0920: 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65  the parent conne
0930: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 29 2e 0d 0a  ction object)...
0940: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0950: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
0960: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
0970: 46 6c 61 67 73 20 5f 66 6c 61 67 73 3b 0d 0a 0d  Flags _flags;...
0980: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0990: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c 64  y>..    /// Hold
09a0: 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f  s a reference to
09b0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75   the callback fu
09c0: 6e 63 74 69 6f 6e 20 66 6f 72 20 75 73 65 72 20  nction for user 
09d0: 66 75 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 2f  functions..    /
09e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
09f0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0a00: 65 43 61 6c 6c 62 61 63 6b 20 20 5f 49 6e 76 6f  eCallback  _Invo
0a10: 6b 65 46 75 6e 63 3b 0d 0a 20 20 20 20 2f 2f 2f  keFunc;..    ///
0a20: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0a30: 2f 2f 2f 20 48 6f 6c 64 73 20 61 20 72 65 66 65  /// Holds a refe
0a40: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 63 61 6c  rence to the cal
0a50: 6c 62 61 6b 63 20 66 75 6e 63 74 69 6f 6e 20 66  lbakc function f
0a60: 6f 72 20 73 74 65 70 70 69 6e 67 20 69 6e 20 61  or stepping in a
0a70: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
0a80: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
0a90: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
0aa0: 69 76 61 74 65 20 53 51 4c 69 74 65 43 61 6c 6c  ivate SQLiteCall
0ab0: 62 61 63 6b 20 20 5f 53 74 65 70 46 75 6e 63 3b  back  _StepFunc;
0ac0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0ad0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c  ry>..    /// Hol
0ae0: 64 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74  ds a reference t
0af0: 6f 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66  o the callback f
0b00: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 66 69 6e 61  unction for fina
0b10: 6c 69 7a 69 6e 67 20 61 6e 20 61 67 67 72 65 67  lizing an aggreg
0b20: 61 74 65 20 66 75 6e 63 74 69 6f 6e 0d 0a 20 20  ate function..  
0b30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0b40: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51  ..    private SQ
0b50: 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63  LiteFinalCallbac
0b60: 6b 20 20 5f 46 69 6e 61 6c 46 75 6e 63 3b 0d 0a  k  _FinalFunc;..
0b70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0b80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 6c 64 73  >..    /// Holds
0b90: 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20   a reference to 
0ba0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  the callback fun
0bb0: 63 74 69 6f 6e 20 66 6f 72 20 63 6f 6c 6c 61 74  ction for collat
0bc0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0d 0a 20  ing sequences.. 
0bd0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0be0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53  >..    private S
0bf0: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 5f  QLiteCollation _
0c00: 43 6f 6d 70 61 72 65 46 75 6e 63 3b 0d 0a 0d 0a  CompareFunc;....
0c10: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
0c20: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 5f 43 6f 6d  teCollation _Com
0c30: 70 61 72 65 46 75 6e 63 31 36 3b 0d 0a 0d 0a 20  pareFunc16;.... 
0c40: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0c50: 0d 0a 20 20 20 20 2f 2f 2f 20 43 75 72 72 65 6e  ..    /// Curren
0c60: 74 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  t context of the
0c70: 20 63 75 72 72 65 6e 74 20 63 61 6c 6c 62 61 63   current callbac
0c80: 6b 2e 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 64  k.  Only valid d
0c90: 75 72 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b  uring a callback
0ca0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0cb0: 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
0cc0: 61 6c 20 49 6e 74 50 74 72 20 5f 63 6f 6e 74 65  al IntPtr _conte
0cd0: 78 74 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  xt;....    /// <
0ce0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0cf0: 2f 20 54 68 69 73 20 73 74 61 74 69 63 20 64 69  / This static di
0d00: 63 74 69 6f 6e 61 72 79 20 63 6f 6e 74 61 69 6e  ctionary contain
0d10: 73 20 61 6c 6c 20 74 68 65 20 72 65 67 69 73 74  s all the regist
0d20: 65 72 65 64 20 28 6b 6e 6f 77 6e 29 20 75 73 65  ered (known) use
0d30: 72 2d 64 65 66 69 6e 65 64 0d 0a 20 20 20 20 2f  r-defined..    /
0d40: 2f 2f 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 63  // functions dec
0d50: 6c 61 72 65 64 20 75 73 69 6e 67 20 74 68 65 20  lared using the 
0d60: 70 72 6f 70 65 72 20 61 74 74 72 69 62 75 74 65  proper attribute
0d70: 73 2e 20 20 54 68 65 20 63 6f 6e 74 61 69 6e 65  s.  The containe
0d80: 64 20 64 69 63 74 69 6f 6e 61 72 79 0d 0a 20 20  d dictionary..  
0d90: 20 20 2f 2f 2f 20 76 61 6c 75 65 73 20 61 72 65    /// values are
0da0: 20 61 6c 77 61 79 73 20 6e 75 6c 6c 20 61 6e 64   always null and
0db0: 20 61 72 65 20 6e 6f 74 20 63 75 72 72 65 6e 74   are not current
0dc0: 6c 79 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  ly used...    //
0dd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0de0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
0df0: 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c   IDictionary<SQL
0e00: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
0e10: 62 75 74 65 2c 20 6f 62 6a 65 63 74 3e 20 5f 72  bute, object> _r
0e20: 65 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f  egisteredFunctio
0e30: 6e 73 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ns;....    /// <
0e40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0e50: 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74  / Internal const
0e60: 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61 6c 69  ructor, initiali
0e70: 7a 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  zes the function
0e80: 27 73 20 69 6e 74 65 72 6e 61 6c 20 76 61 72 69  's internal vari
0e90: 61 62 6c 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ables...    /// 
0ea0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0eb0: 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65  protected SQLite
0ec0: 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20 20 20 20  Function()..    
0ed0: 7b 0d 0a 20 20 20 20 20 20 5f 63 6f 6e 74 65 78  {..      _contex
0ee0: 74 44 61 74 61 4c 69 73 74 20 3d 20 6e 65 77 20  tDataList = new 
0ef0: 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74  Dictionary<IntPt
0f00: 72 2c 20 41 67 67 72 65 67 61 74 65 44 61 74 61  r, AggregateData
0f10: 3e 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  >();..    }.... 
0f20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0f30: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72  ..    /// Constr
0f40: 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
0f50: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20 75   of this class u
0f60: 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  sing the specifi
0f70: 65 64 20 64 61 74 61 2d 74 79 70 65 0d 0a 20 20  ed data-type..  
0f80: 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 73 69 6f 6e    /// conversion
0f90: 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...  
0fa0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0fb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
0fc0: 20 6e 61 6d 65 3d 22 66 6f 72 6d 61 74 22 3e 0d   name="format">.
0fd0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 44 61 74  .    /// The Dat
0fe0: 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 74 6f 20  eTime format to 
0ff0: 62 65 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6e  be used when con
1000: 76 65 72 74 69 6e 67 20 73 74 72 69 6e 67 20 76  verting string v
1010: 61 6c 75 65 73 20 74 6f 20 61 0d 0a 20 20 20 20  alues to a..    
1020: 2f 2f 2f 20 44 61 74 65 54 69 6d 65 20 61 6e 64  /// DateTime and
1030: 20 62 69 6e 64 69 6e 67 20 44 61 74 65 54 69 6d   binding DateTim
1040: 65 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20  e parameters... 
1050: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1060: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1070: 6e 61 6d 65 3d 22 6b 69 6e 64 22 3e 0d 0a 20 20  name="kind">..  
1080: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
1090: 72 65 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e  ref="DateTimeKin
10a0: 64 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64  d" /> to be used
10b0: 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 20 44   when creating D
10c0: 61 74 65 54 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f  ateTime..    ///
10d0: 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f 2f   values...    //
10e0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
10f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1100: 22 66 6f 72 6d 61 74 53 74 72 69 6e 67 22 3e 0d  "formatString">.
1110: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6f 72  .    /// The for
1120: 6d 61 74 20 73 74 72 69 6e 67 20 74 6f 20 62 65  mat string to be
1130: 20 75 73 65 64 20 77 68 65 6e 20 70 61 72 73 69   used when parsi
1140: 6e 67 20 61 6e 64 20 66 6f 72 6d 61 74 74 69 6e  ng and formattin
1150: 67 20 44 61 74 65 54 69 6d 65 0d 0a 20 20 20 20  g DateTime..    
1160: 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  /// values...   
1170: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1180: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1190: 6d 65 3d 22 75 74 66 31 36 22 3e 0d 0a 20 20 20  me="utf16">..   
11a0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
11b0: 20 63 72 65 61 74 65 20 61 20 55 54 46 2d 31 36   create a UTF-16
11c0: 20 64 61 74 61 2d 74 79 70 65 20 63 6f 6e 76 65   data-type conve
11d0: 72 73 69 6f 6e 20 63 6f 6e 74 65 78 74 3b 20 6f  rsion context; o
11e0: 74 68 65 72 77 69 73 65 2c 0d 0a 20 20 20 20 2f  therwise,..    /
11f0: 2f 2f 20 61 20 55 54 46 2d 38 20 64 61 74 61 2d  // a UTF-8 data-
1200: 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20  type conversion 
1210: 63 6f 6e 74 65 78 74 20 77 69 6c 6c 20 62 65 20  context will be 
1220: 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20 2f 2f  created...    //
1230: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1240: 70 72 6f 74 65 63 74 65 64 20 53 51 4c 69 74 65  protected SQLite
1250: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
1260: 20 20 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72     SQLiteDateFor
1270: 6d 61 74 73 20 66 6f 72 6d 61 74 2c 0d 0a 20 20  mats format,..  
1280: 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b 69        DateTimeKi
1290: 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20  nd kind,..      
12a0: 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 53    string formatS
12b0: 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  tring,..        
12c0: 62 6f 6f 6c 20 75 74 66 31 36 0d 0a 20 20 20 20  bool utf16..    
12d0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 3a      )..        :
12e0: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 7b 0d 0a   this()..    {..
12f0: 20 20 20 20 20 20 20 20 69 66 20 28 75 74 66 31          if (utf1
1300: 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  6)..            
1310: 5f 62 61 73 65 20 3d 20 6e 65 77 20 53 51 4c 69  _base = new SQLi
1320: 74 65 33 5f 55 54 46 31 36 28 66 6f 72 6d 61 74  te3_UTF16(format
1330: 2c 20 6b 69 6e 64 2c 20 66 6f 72 6d 61 74 53 74  , kind, formatSt
1340: 72 69 6e 67 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ring, IntPtr.Zer
1350: 6f 2c 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 3b  o, null, false);
1360: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
1370: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 61 73              _bas
1380: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 33 28  e = new SQLite3(
1390: 66 6f 72 6d 61 74 2c 20 6b 69 6e 64 2c 20 66 6f  format, kind, fo
13a0: 72 6d 61 74 53 74 72 69 6e 67 2c 20 49 6e 74 50  rmatString, IntP
13b0: 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c 2c 20 66  tr.Zero, null, f
13c0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  alse);..    }...
13d0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1430: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
1440: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
1450: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 2f 2f 2f  Members..    ///
1460: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1470: 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f 66 20  /// Disposes of 
1480: 61 6e 79 20 61 63 74 69 76 65 20 63 6f 6e 74 65  any active conte
1490: 78 74 44 61 74 61 20 76 61 72 69 61 62 6c 65 73  xtData variables
14a0: 20 74 68 61 74 20 77 65 72 65 20 6e 6f 74 20 61   that were not a
14b0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6c 65  utomatically cle
14c0: 61 6e 65 64 20 75 70 2e 20 20 53 6f 6d 65 74 69  aned up.  Someti
14d0: 6d 65 73 20 74 68 69 73 20 63 61 6e 20 68 61 70  mes this can hap
14e0: 70 65 6e 20 69 66 0d 0a 20 20 20 20 2f 2f 2f 20  pen if..    /// 
14f0: 73 6f 6d 65 6f 6e 65 20 63 6c 6f 73 65 73 20 74  someone closes t
1500: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68  he connection wh
1510: 69 6c 65 20 61 20 44 61 74 61 52 65 61 64 65 72  ile a DataReader
1520: 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f   is open...    /
1530: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1540: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
1550: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 7b 0d  ispose()..    {.
1560: 0a 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65  .        Dispose
1570: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
1580: 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61   GC.SuppressFina
1590: 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20  lize(this);..   
15a0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
15b0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1620: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
1630: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
1640: 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
1650: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
1660: 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
1670: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
1680: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
1690: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
16a0: 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
16b0: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
16c0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
16d0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
16e0: 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
16f0: 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
1700: 74 65 46 75 6e 63 74 69 6f 6e 29 2e 4e 61 6d 65  teFunction).Name
1710: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
1720: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1790: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
17a0: 20 20 20 2f 2f 2f 20 50 6c 61 63 65 68 6f 6c 64     /// Placehold
17b0: 65 72 20 66 6f 72 20 61 20 75 73 65 72 2d 64 65  er for a user-de
17c0: 66 69 6e 65 64 20 64 69 73 70 6f 73 61 6c 20 72  fined disposal r
17d0: 6f 75 74 69 6e 65 0d 0a 20 20 20 20 2f 2f 2f 20  outine..    /// 
17e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
17f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1800: 22 64 69 73 70 6f 73 69 6e 67 22 3e 54 72 75 65  "disposing">True
1810: 20 69 66 20 74 68 65 20 6f 62 6a 65 63 74 20 69   if the object i
1820: 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64  s being disposed
1830: 20 65 78 70 6c 69 63 69 74 6c 79 3c 2f 70 61 72   explicitly</par
1840: 61 6d 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  am>..    protect
1850: 65 64 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ed virtual void 
1860: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
1870: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a  posing)..    {..
1880: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
1890: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
18a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
18b0: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
18c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1900: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1910: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
1920: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
1930: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
1940: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1980: 20 20 49 44 69 73 70 6f 73 61 62 6c 65 20 64 69    IDisposable di
1990: 73 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  sp;....         
19a0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
19b0: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 49 6e 74  KeyValuePair<Int
19c0: 50 74 72 2c 20 41 67 67 72 65 67 61 74 65 44 61  Ptr, AggregateDa
19d0: 74 61 3e 20 6b 76 20 69 6e 20 5f 63 6f 6e 74 65  ta> kv in _conte
19e0: 78 74 44 61 74 61 4c 69 73 74 29 0d 0a 20 20 20  xtDataList)..   
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a10: 20 20 20 20 64 69 73 70 20 3d 20 6b 76 2e 56 61      disp = kv.Va
1a20: 6c 75 65 2e 5f 64 61 74 61 20 61 73 20 49 44 69  lue._data as IDi
1a30: 73 70 6f 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20  sposable;..     
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a50: 66 20 28 64 69 73 70 20 21 3d 20 6e 75 6c 6c 29  f (disp != null)
1a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a70: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 2e 44            disp.D
1a80: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
1a90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 63                _c
1ab0: 6f 6e 74 65 78 74 44 61 74 61 4c 69 73 74 2e 43  ontextDataList.C
1ac0: 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lear();..       
1ad0: 20 20 20 20 20 20 20 20 20 5f 63 6f 6e 74 65 78           _contex
1ae0: 74 44 61 74 61 4c 69 73 74 20 3d 20 6e 75 6c 6c  tDataList = null
1af0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b00: 20 20 20 20 20 5f 66 6c 61 67 73 20 3d 20 53 51       _flags = SQ
1b10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
1b20: 61 67 73 2e 4e 6f 6e 65 3b 0d 0a 0d 0a 20 20 20  ags.None;....   
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 49 6e               _In
1b40: 76 6f 6b 65 46 75 6e 63 20 3d 20 6e 75 6c 6c 3b  vokeFunc = null;
1b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b60: 20 20 5f 53 74 65 70 46 75 6e 63 20 3d 20 6e 75    _StepFunc = nu
1b70: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
1b80: 20 20 20 20 20 5f 46 69 6e 61 6c 46 75 6e 63 20       _FinalFunc 
1b90: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
1ba0: 20 20 20 20 20 20 20 20 20 5f 43 6f 6d 70 61 72           _Compar
1bb0: 65 46 75 6e 63 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eFunc = null;.. 
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
1bd0: 62 61 73 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  base = null;..  
1be0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c20: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
1c30: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
1c40: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
1c50: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
1c60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c90: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
1ca0: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
1cb0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20     }..    }..   
1cc0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1cd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d30: 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
1d40: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
1d50: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1d60: 0a 20 20 20 20 2f 2f 2f 20 43 6c 65 61 6e 73 20  .    /// Cleans 
1d70: 75 70 20 72 65 73 6f 75 72 63 65 73 20 61 73 73  up resources ass
1d80: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1d90: 20 63 75 72 72 65 6e 74 20 69 6e 73 74 61 6e 63   current instanc
1da0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
1db0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 7e 53 51 4c  mmary>..    ~SQL
1dc0: 69 74 65 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20  iteFunction().. 
1dd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69     {..        Di
1de0: 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20  spose(false);.. 
1df0: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
1e00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
1e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e70: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1e80: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
1e90: 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 6f  s a reference to
1ea0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
1eb0: 63 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 53 51 4c  connection's SQL
1ec0: 69 74 65 43 6f 6e 76 65 72 74 20 63 6c 61 73 73  iteConvert class
1ed0: 2c 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 75  , which can be u
1ee0: 73 65 64 20 74 6f 20 63 6f 6e 76 65 72 74 0d 0a  sed to convert..
1ef0: 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20      /// strings 
1f00: 61 6e 64 20 44 61 74 65 54 69 6d 65 27 73 20 69  and DateTime's i
1f10: 6e 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20  nto the current 
1f20: 63 6f 6e 6e 65 63 74 69 6f 6e 27 73 20 65 6e 63  connection's enc
1f30: 6f 64 69 6e 67 20 73 63 68 65 6d 61 2e 0d 0a 20  oding schema... 
1f40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1f50: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 53 51  >..    public SQ
1f60: 4c 69 74 65 43 6f 6e 76 65 72 74 20 53 51 4c 69  LiteConvert SQLi
1f70: 74 65 43 6f 6e 76 65 72 74 0d 0a 20 20 20 20 7b  teConvert..    {
1f80: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
1f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
1fa0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
1fb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f          return _
1fc0: 62 61 73 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  base;..      }..
1fd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1ff0: 2f 2f 2f 20 53 63 61 6c 61 72 20 66 75 6e 63 74  /// Scalar funct
2000: 69 6f 6e 73 20 6f 76 65 72 72 69 64 65 20 74 68  ions override th
2010: 69 73 20 6d 65 74 68 6f 64 20 74 6f 20 64 6f 20  is method to do 
2020: 74 68 65 69 72 20 6d 61 67 69 63 2e 0d 0a 20 20  their magic...  
2030: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2040: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  ..    /// <remar
2050: 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 50 61 72  ks>..    /// Par
2060: 61 6d 65 74 65 72 73 20 70 61 73 73 65 64 20 74  ameters passed t
2070: 6f 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  o functions have
2080: 20 6f 6e 6c 79 20 61 6e 20 61 66 66 69 6e 69 74   only an affinit
2090: 79 20 66 6f 72 20 61 20 63 65 72 74 61 69 6e 20  y for a certain 
20a0: 64 61 74 61 20 74 79 70 65 2c 20 74 68 65 72 65  data type, there
20b0: 20 69 73 20 6e 6f 20 75 6e 64 65 72 6c 79 69 6e   is no underlyin
20c0: 67 20 73 63 68 65 6d 61 20 61 76 61 69 6c 61 62  g schema availab
20d0: 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 66  le..    /// to f
20e0: 6f 72 63 65 20 74 68 65 6d 20 69 6e 74 6f 20 61  orce them into a
20f0: 20 63 65 72 74 61 69 6e 20 74 79 70 65 2e 20 20   certain type.  
2100: 54 68 65 72 65 66 6f 72 65 20 74 68 65 20 6f 6e  Therefore the on
2110: 6c 79 20 74 79 70 65 73 20 79 6f 75 20 77 69 6c  ly types you wil
2120: 6c 20 65 76 65 72 20 73 65 65 20 61 73 20 70 61  l ever see as pa
2130: 72 61 6d 65 74 65 72 73 20 61 72 65 0d 0a 20 20  rameters are..  
2140: 20 20 2f 2f 2f 20 44 42 4e 75 6c 6c 2e 56 61 6c    /// DBNull.Val
2150: 75 65 2c 20 49 6e 74 36 34 2c 20 44 6f 75 62 6c  ue, Int64, Doubl
2160: 65 2c 20 53 74 72 69 6e 67 20 6f 72 20 62 79 74  e, String or byt
2170: 65 5b 5d 20 61 72 72 61 79 2e 0d 0a 20 20 20 20  e[] array...    
2180: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
2190: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21a0: 61 6d 65 3d 22 61 72 67 73 22 3e 54 68 65 20 61  ame="args">The a
21b0: 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  rguments for the
21c0: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 70 72 6f 63   command to proc
21d0: 65 73 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ess</param>..   
21e0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 59 6f   /// <returns>Yo
21f0: 75 20 6d 61 79 20 72 65 74 75 72 6e 20 6d 6f 73  u may return mos
2200: 74 20 73 69 6d 70 6c 65 20 74 79 70 65 73 20 61  t simple types a
2210: 73 20 61 20 72 65 74 75 72 6e 20 76 61 6c 75 65  s a return value
2220: 2c 20 6e 75 6c 6c 20 6f 72 20 44 42 4e 75 6c 6c  , null or DBNull
2230: 2e 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e  .Value to return
2240: 20 6e 75 6c 6c 2c 20 44 61 74 65 54 69 6d 65 2c   null, DateTime,
2250: 20 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 79 6f 75   or..    /// you
2260: 20 6d 61 79 20 72 65 74 75 72 6e 20 61 6e 20 45   may return an E
2270: 78 63 65 70 74 69 6f 6e 2d 64 65 72 69 76 65 64  xception-derived
2280: 20 63 6c 61 73 73 20 69 66 20 79 6f 75 20 77 69   class if you wi
2290: 73 68 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20  sh to return an 
22a0: 65 72 72 6f 72 20 74 6f 20 53 51 4c 69 74 65 2e  error to SQLite.
22b0: 20 20 44 6f 20 6e 6f 74 20 61 63 74 75 61 6c 6c    Do not actuall
22c0: 79 20 74 68 72 6f 77 20 74 68 65 20 65 72 72 6f  y throw the erro
22d0: 72 2c 0d 0a 20 20 20 20 2f 2f 2f 20 6a 75 73 74  r,..    /// just
22e0: 20 72 65 74 75 72 6e 20 69 74 21 3c 2f 72 65 74   return it!</ret
22f0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69  urns>..    publi
2300: 63 20 76 69 72 74 75 61 6c 20 6f 62 6a 65 63 74  c virtual object
2310: 20 49 6e 76 6f 6b 65 28 6f 62 6a 65 63 74 5b 5d   Invoke(object[]
2320: 20 61 72 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20   args)..    {.. 
2330: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2340: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  ed();..      ret
2350: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d  urn null;..    }
2360: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2370: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
2380: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
2390: 6e 73 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ns override this
23a0: 20 6d 65 74 68 6f 64 20 74 6f 20 64 6f 20 74 68   method to do th
23b0: 65 69 72 20 6d 61 67 69 63 2e 0d 0a 20 20 20 20  eir magic...    
23c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
23d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73      /// <remarks
23e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 79 70 69 63  >..    /// Typic
23f0: 61 6c 6c 79 20 79 6f 75 27 6c 6c 20 62 65 20 75  ally you'll be u
2400: 70 64 61 74 69 6e 67 20 77 68 61 74 65 76 65 72  pdating whatever
2410: 20 79 6f 75 27 76 65 20 70 6c 61 63 65 64 20 69   you've placed i
2420: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 44 61 74  n the contextDat
2430: 61 20 66 69 65 6c 64 20 61 6e 64 20 72 65 74 75  a field and retu
2440: 72 6e 69 6e 67 20 61 73 20 71 75 69 63 6b 6c 79  rning as quickly
2450: 20 61 73 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20   as possible... 
2460: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
2470: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2480: 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 54 68  m name="args">Th
2490: 65 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20  e arguments for 
24a0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 70  the command to p
24b0: 72 6f 63 65 73 73 3c 2f 70 61 72 61 6d 3e 0d 0a  rocess</param>..
24c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
24d0: 61 6d 65 3d 22 73 74 65 70 4e 75 6d 62 65 72 22  ame="stepNumber"
24e0: 3e 54 68 65 20 31 2d 62 61 73 65 64 20 73 74 65  >The 1-based ste
24f0: 70 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20  p number.  This 
2500: 69 73 20 69 6e 63 72 65 6d 65 6d 74 65 64 20 65  is incrememted e
2510: 61 63 68 20 74 69 6d 65 20 74 68 65 20 73 74 65  ach time the ste
2520: 70 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  p method is call
2530: 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ed.</param>..   
2540: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2550: 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 41  ="contextData">A
2560: 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72   placeholder for
2570: 20 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f   implementers to
2580: 20 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61   store contextua
2590: 6c 20 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e  l data pertainin
25a0: 67 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  g to the current
25b0: 20 63 6f 6e 74 65 78 74 2e 3c 2f 70 61 72 61 6d   context.</param
25c0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69  >..    public vi
25d0: 72 74 75 61 6c 20 76 6f 69 64 20 53 74 65 70 28  rtual void Step(
25e0: 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 2c 20 69  object[] args, i
25f0: 6e 74 20 73 74 65 70 4e 75 6d 62 65 72 2c 20 72  nt stepNumber, r
2600: 65 66 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78  ef object contex
2610: 74 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d 0a 20  tData)..    {.. 
2620: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2630: 65 64 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ed();..    }....
2640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 67 67 72 65  >..    /// Aggre
2660: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  gate functions o
2670: 76 65 72 72 69 64 65 20 74 68 69 73 20 6d 65 74  verride this met
2680: 68 6f 64 20 74 6f 20 66 69 6e 69 73 68 20 74 68  hod to finish th
2690: 65 69 72 20 61 67 67 72 65 67 61 74 65 20 70 72  eir aggregate pr
26a0: 6f 63 65 73 73 69 6e 67 2e 0d 0a 20 20 20 20 2f  ocessing...    /
26b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
26c0: 20 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e     /// <remarks>
26d0: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 79 6f 75  ..    /// If you
26e0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 79 6f 75   implemented you
26f0: 72 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  r aggregate func
2700: 74 69 6f 6e 20 70 72 6f 70 65 72 6c 79 2c 0d 0a  tion properly,..
2710: 20 20 20 20 2f 2f 2f 20 79 6f 75 27 76 65 20 62      /// you've b
2720: 65 65 6e 20 72 65 63 6f 72 64 69 6e 67 20 61 6e  een recording an
2730: 64 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  d keeping track 
2740: 6f 66 20 79 6f 75 72 20 64 61 74 61 20 69 6e 20  of your data in 
2750: 74 68 65 20 63 6f 6e 74 65 78 74 44 61 74 61 20  the contextData 
2760: 6f 62 6a 65 63 74 20 70 72 6f 76 69 64 65 64 2c  object provided,
2770: 20 61 6e 64 20 6e 6f 77 20 61 74 20 74 68 69 73   and now at this
2780: 20 73 74 61 67 65 20 79 6f 75 20 73 68 6f 75 6c   stage you shoul
2790: 64 20 68 61 76 65 0d 0a 20 20 20 20 2f 2f 2f 20  d have..    /// 
27a0: 61 6c 6c 20 74 68 65 20 69 6e 66 6f 72 6d 61 74  all the informat
27b0: 69 6f 6e 20 79 6f 75 20 6e 65 65 64 20 69 6e 20  ion you need in 
27c0: 74 68 65 72 65 20 74 6f 20 66 69 67 75 72 65 20  there to figure 
27d0: 6f 75 74 20 77 68 61 74 20 74 6f 20 72 65 74 75  out what to retu
27e0: 72 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 4f 54  rn...    /// NOT
27f0: 45 3a 20 20 49 74 20 69 73 20 70 6f 73 73 69 62  E:  It is possib
2800: 6c 65 20 74 6f 20 61 72 72 69 76 65 20 68 65 72  le to arrive her
2810: 65 20 77 69 74 68 6f 75 74 20 72 65 63 65 69 76  e without receiv
2820: 69 6e 67 20 61 20 70 72 65 76 69 6f 75 73 20 63  ing a previous c
2830: 61 6c 6c 20 74 6f 20 53 74 65 70 28 29 2c 20 69  all to Step(), i
2840: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
2850: 20 63 6f 6e 74 65 78 74 44 61 74 61 20 77 69 6c   contextData wil
2860: 6c 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 6e 75  l..    /// be nu
2870: 6c 6c 2e 20 20 54 68 69 73 20 63 61 6e 20 68 61  ll.  This can ha
2880: 70 70 65 6e 20 77 68 65 6e 20 6e 6f 20 72 6f 77  ppen when no row
2890: 73 20 77 65 72 65 20 72 65 74 75 72 6e 65 64 2e  s were returned.
28a0: 20 20 59 6f 75 20 63 61 6e 20 65 69 74 68 65 72    You can either
28b0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 2c 20 6f 72   return null, or
28c0: 20 30 20 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72   0 or some other
28d0: 20 63 75 73 74 6f 6d 20 72 65 74 75 72 6e 20 76   custom return v
28e0: 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 66  alue..    /// if
28f0: 20 74 68 61 74 20 69 73 20 74 68 65 20 63 61 73   that is the cas
2900: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
2910: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
2920: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
2930: 74 65 78 74 44 61 74 61 22 3e 59 6f 75 72 20 6f  textData">Your o
2940: 77 6e 20 61 73 73 69 67 6e 65 64 20 63 6f 6e 74  wn assigned cont
2950: 65 78 74 44 61 74 61 2c 20 70 72 6f 76 69 64 65  extData, provide
2960: 64 20 66 6f 72 20 79 6f 75 20 73 6f 20 79 6f 75  d for you so you
2970: 20 63 61 6e 20 72 65 74 75 72 6e 20 79 6f 75 72   can return your
2980: 20 66 69 6e 61 6c 20 72 65 73 75 6c 74 73 2e 3c   final results.<
2990: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
29a0: 20 3c 72 65 74 75 72 6e 73 3e 59 6f 75 20 6d 61   <returns>You ma
29b0: 79 20 72 65 74 75 72 6e 20 6d 6f 73 74 20 73 69  y return most si
29c0: 6d 70 6c 65 20 74 79 70 65 73 20 61 73 20 61 20  mple types as a 
29d0: 72 65 74 75 72 6e 20 76 61 6c 75 65 2c 20 6e 75  return value, nu
29e0: 6c 6c 20 6f 72 20 44 42 4e 75 6c 6c 2e 56 61 6c  ll or DBNull.Val
29f0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 6e 75 6c  ue to return nul
2a00: 6c 2c 20 44 61 74 65 54 69 6d 65 2c 20 6f 72 0d  l, DateTime, or.
2a10: 0a 20 20 20 20 2f 2f 2f 20 79 6f 75 20 6d 61 79  .    /// you may
2a20: 20 72 65 74 75 72 6e 20 61 6e 20 45 78 63 65 70   return an Excep
2a30: 74 69 6f 6e 2d 64 65 72 69 76 65 64 20 63 6c 61  tion-derived cla
2a40: 73 73 20 69 66 20 79 6f 75 20 77 69 73 68 20 74  ss if you wish t
2a50: 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
2a60: 72 20 74 6f 20 53 51 4c 69 74 65 2e 20 20 44 6f  r to SQLite.  Do
2a70: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 74 68   not actually th
2a80: 72 6f 77 20 74 68 65 20 65 72 72 6f 72 2c 0d 0a  row the error,..
2a90: 20 20 20 20 2f 2f 2f 20 6a 75 73 74 20 72 65 74      /// just ret
2aa0: 75 72 6e 20 69 74 21 0d 0a 20 20 20 20 2f 2f 2f  urn it!..    ///
2ab0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2ac0: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
2ad0: 6f 62 6a 65 63 74 20 46 69 6e 61 6c 28 6f 62 6a  object Final(obj
2ae0: 65 63 74 20 63 6f 6e 74 65 78 74 44 61 74 61 29  ect contextData)
2af0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
2b00: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
2b10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75  .      return nu
2b20: 6c 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ll;..    }....  
2b30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2b40: 0a 20 20 20 20 2f 2f 2f 20 55 73 65 72 2d 64 65  .    /// User-de
2b50: 66 69 6e 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20  fined collating 
2b60: 73 65 71 75 65 6e 63 65 73 20 6f 76 65 72 72 69  sequences overri
2b70: 64 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 74  de this method t
2b80: 6f 20 70 72 6f 76 69 64 65 20 61 20 63 75 73 74  o provide a cust
2b90: 6f 6d 20 73 74 72 69 6e 67 20 73 6f 72 74 69 6e  om string sortin
2ba0: 67 20 61 6c 67 6f 72 69 74 68 6d 2e 0d 0a 20 20  g algorithm...  
2bb0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2bc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2bd0: 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22 3e 54   name="param1">T
2be0: 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67 20  he first string 
2bf0: 74 6f 20 63 6f 6d 70 61 72 65 2e 3c 2f 70 61 72  to compare.</par
2c00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
2c10: 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32  ram name="param2
2c20: 22 3e 54 68 65 20 73 65 63 6f 6e 64 20 73 74 72  ">The second str
2c30: 6e 69 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 3c  nig to compare.<
2c40: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
2c50: 20 3c 72 65 74 75 72 6e 73 3e 31 20 69 66 20 70   <returns>1 if p
2c60: 61 72 61 6d 31 20 69 73 20 67 72 65 61 74 65 72  aram1 is greater
2c70: 20 74 68 61 6e 20 70 61 72 61 6d 32 2c 20 30 20   than param2, 0 
2c80: 69 66 20 74 68 65 79 20 61 72 65 20 65 71 75 61  if they are equa
2c90: 6c 2c 20 6f 72 20 2d 31 20 69 66 20 70 61 72 61  l, or -1 if para
2ca0: 6d 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  m1 is less than 
2cb0: 70 61 72 61 6d 32 2e 3c 2f 72 65 74 75 72 6e 73  param2.</returns
2cc0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 69  >..    public vi
2cd0: 72 74 75 61 6c 20 69 6e 74 20 43 6f 6d 70 61 72  rtual int Compar
2ce0: 65 28 73 74 72 69 6e 67 20 70 61 72 61 6d 31 2c  e(string param1,
2cf0: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 32 29 0d   string param2).
2d00: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
2d10: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2d20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d        return 0;.
2d30: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2d40: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2d50: 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 6e   /// Converts an
2d60: 20 49 6e 74 50 74 72 20 61 72 72 61 79 20 6f 66   IntPtr array of
2d70: 20 63 6f 6e 74 65 78 74 20 61 72 67 75 6d 65 6e   context argumen
2d80: 74 73 20 74 6f 20 61 6e 20 6f 62 6a 65 63 74 20  ts to an object 
2d90: 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67  array containing
2da0: 20 74 68 65 20 72 65 73 6f 6c 76 65 64 20 70 61   the resolved pa
2db0: 72 61 6d 65 74 65 72 73 20 74 68 65 20 70 6f 69  rameters the poi
2dc0: 6e 74 65 72 73 20 70 6f 69 6e 74 20 74 6f 2e 0d  nters point to..
2dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2de0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
2df0: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
2e00: 50 61 72 61 6d 65 74 65 72 73 20 70 61 73 73 65  Parameters passe
2e10: 64 20 74 6f 20 66 75 6e 63 74 69 6f 6e 73 20 68  d to functions h
2e20: 61 76 65 20 6f 6e 6c 79 20 61 6e 20 61 66 66 69  ave only an affi
2e30: 6e 69 74 79 20 66 6f 72 20 61 20 63 65 72 74 61  nity for a certa
2e40: 69 6e 20 64 61 74 61 20 74 79 70 65 2c 20 74 68  in data type, th
2e50: 65 72 65 20 69 73 20 6e 6f 20 75 6e 64 65 72 6c  ere is no underl
2e60: 79 69 6e 67 20 73 63 68 65 6d 61 20 61 76 61 69  ying schema avai
2e70: 6c 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 74  lable..    /// t
2e80: 6f 20 66 6f 72 63 65 20 74 68 65 6d 20 69 6e 74  o force them int
2e90: 6f 20 61 20 63 65 72 74 61 69 6e 20 74 79 70 65  o a certain type
2ea0: 2e 20 20 54 68 65 72 65 66 6f 72 65 20 74 68 65  .  Therefore the
2eb0: 20 6f 6e 6c 79 20 74 79 70 65 73 20 79 6f 75 20   only types you 
2ec0: 77 69 6c 6c 20 65 76 65 72 20 73 65 65 20 61 73  will ever see as
2ed0: 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 0d   parameters are.
2ee0: 0a 20 20 20 20 2f 2f 2f 20 44 42 4e 75 6c 6c 2e  .    /// DBNull.
2ef0: 56 61 6c 75 65 2c 20 49 6e 74 36 34 2c 20 44 6f  Value, Int64, Do
2f00: 75 62 6c 65 2c 20 53 74 72 69 6e 67 20 6f 72 20  uble, String or 
2f10: 62 79 74 65 5b 5d 20 61 72 72 61 79 2e 0d 0a 20  byte[] array... 
2f20: 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73     /// </remarks
2f30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2f40: 6d 20 6e 61 6d 65 3d 22 6e 41 72 67 73 22 3e 54  m name="nArgs">T
2f50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
2f60: 75 6d 65 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a  uments</param>..
2f70: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2f80: 61 6d 65 3d 22 61 72 67 73 70 74 72 22 3e 41 20  ame="argsptr">A 
2f90: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61  pointer to the a
2fa0: 72 72 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74  rray of argument
2fb0: 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  s</param>..    /
2fc0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 6e 20 6f  // <returns>An o
2fd0: 62 6a 65 63 74 20 61 72 72 61 79 20 6f 66 20 74  bject array of t
2fe0: 68 65 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 63  he arguments onc
2ff0: 65 20 74 68 65 79 27 76 65 20 62 65 65 6e 20 63  e they've been c
3000: 6f 6e 76 65 72 74 65 64 20 74 6f 20 2e 4e 45 54  onverted to .NET
3010: 20 76 61 6c 75 65 73 3c 2f 72 65 74 75 72 6e 73   values</returns
3020: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3030: 6f 62 6a 65 63 74 5b 5d 20 43 6f 6e 76 65 72 74  object[] Convert
3040: 50 61 72 61 6d 73 28 69 6e 74 20 6e 41 72 67 73  Params(int nArgs
3050: 2c 20 49 6e 74 50 74 72 20 61 72 67 73 70 74 72  , IntPtr argsptr
3060: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3070: 6f 62 6a 65 63 74 5b 5d 20 70 61 72 6d 73 20 3d  object[] parms =
3080: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 6e 41 72 67   new object[nArg
3090: 73 5d 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  s];..#if !PLATFO
30a0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
30b0: 4f 52 4b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74  ORK..      IntPt
30c0: 72 5b 5d 20 61 72 67 69 6e 74 20 3d 20 6e 65 77  r[] argint = new
30d0: 20 49 6e 74 50 74 72 5b 6e 41 72 67 73 5d 3b 0d   IntPtr[nArgs];.
30e0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 69 6e  .#else..      in
30f0: 74 5b 5d 20 61 72 67 69 6e 74 20 3d 20 6e 65 77  t[] argint = new
3100: 20 69 6e 74 5b 6e 41 72 67 73 5d 3b 0d 0a 23 65   int[nArgs];..#e
3110: 6e 64 69 66 0d 0a 20 20 20 20 20 20 4d 61 72 73  ndif..      Mars
3120: 68 61 6c 2e 43 6f 70 79 28 61 72 67 73 70 74 72  hal.Copy(argsptr
3130: 2c 20 61 72 67 69 6e 74 2c 20 30 2c 20 6e 41 72  , argint, 0, nAr
3140: 67 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  gs);....      fo
3150: 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20  r (int n = 0; n 
3160: 3c 20 6e 41 72 67 73 3b 20 6e 2b 2b 29 0d 0a 20  < nArgs; n++).. 
3170: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3180: 73 77 69 74 63 68 20 28 5f 62 61 73 65 2e 47 65  switch (_base.Ge
3190: 74 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28  tParamValueType(
31a0: 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b 6e  (IntPtr)argint[n
31b0: 5d 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ]))..        {..
31c0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
31d0: 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c  ypeAffinity.Null
31e0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  :..            p
31f0: 61 72 6d 73 5b 6e 5d 20 3d 20 44 42 4e 75 6c 6c  arms[n] = DBNull
3200: 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  .Value;..       
3210: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
3220: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
3230: 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d  Affinity.Int64:.
3240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72  .            par
3250: 6d 73 5b 6e 5d 20 3d 20 5f 62 61 73 65 2e 47 65  ms[n] = _base.Ge
3260: 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34  tParamValueInt64
3270: 28 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b  ((IntPtr)argint[
3280: 6e 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n]);..          
3290: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
32a0: 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
32b0: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20  inity.Double:.. 
32c0: 20 20 20 20 20 20 20 20 20 20 20 70 61 72 6d 73             parms
32d0: 5b 6e 5d 20 3d 20 5f 62 61 73 65 2e 47 65 74 50  [n] = _base.GetP
32e0: 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28  aramValueDouble(
32f0: 28 49 6e 74 50 74 72 29 61 72 67 69 6e 74 5b 6e  (IntPtr)argint[n
3300: 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]);..           
3310: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
3320: 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69     case TypeAffi
3330: 6e 69 74 79 2e 54 65 78 74 3a 0d 0a 20 20 20 20  nity.Text:..    
3340: 20 20 20 20 20 20 20 20 70 61 72 6d 73 5b 6e 5d          parms[n]
3350: 20 3d 20 5f 62 61 73 65 2e 47 65 74 50 61 72 61   = _base.GetPara
3360: 6d 56 61 6c 75 65 54 65 78 74 28 28 49 6e 74 50  mValueText((IntP
3370: 74 72 29 61 72 67 69 6e 74 5b 6e 5d 29 3b 0d 0a  tr)argint[n]);..
3380: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
3390: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  k;..          ca
33a0: 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  se TypeAffinity.
33b0: 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20 20 20  Blob:..         
33c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33d0: 20 20 20 20 69 6e 74 20 78 3b 0d 0a 20 20 20 20      int x;..    
33e0: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
33f0: 20 62 6c 6f 62 3b 0d 0a 0d 0a 20 20 20 20 20 20   blob;....      
3400: 20 20 20 20 20 20 20 20 78 20 3d 20 28 69 6e 74          x = (int
3410: 29 5f 62 61 73 65 2e 47 65 74 50 61 72 61 6d 56  )_base.GetParamV
3420: 61 6c 75 65 42 79 74 65 73 28 28 49 6e 74 50 74  alueBytes((IntPt
3430: 72 29 61 72 67 69 6e 74 5b 6e 5d 2c 20 30 2c 20  r)argint[n], 0, 
3440: 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a 20 20  null, 0, 0);..  
3450: 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62              blob
3460: 20 3d 20 6e 65 77 20 62 79 74 65 5b 78 5d 3b 0d   = new byte[x];.
3470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f  .              _
3480: 62 61 73 65 2e 47 65 74 50 61 72 61 6d 56 61 6c  base.GetParamVal
3490: 75 65 42 79 74 65 73 28 28 49 6e 74 50 74 72 29  ueBytes((IntPtr)
34a0: 61 72 67 69 6e 74 5b 6e 5d 2c 20 30 2c 20 62 6c  argint[n], 0, bl
34b0: 6f 62 2c 20 30 2c 20 78 29 3b 0d 0a 20 20 20 20  ob, 0, x);..    
34c0: 20 20 20 20 20 20 20 20 20 20 70 61 72 6d 73 5b            parms[
34d0: 6e 5d 20 3d 20 62 6c 6f 62 3b 0d 0a 20 20 20 20  n] = blob;..    
34e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
34f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
3500: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
3510: 70 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54  peAffinity.DateT
3520: 69 6d 65 3a 20 2f 2f 20 4e 65 76 65 72 20 68 61  ime: // Never ha
3530: 70 70 65 6e 73 20 68 65 72 65 20 62 75 74 20 77  ppens here but w
3540: 68 61 74 20 74 68 65 20 68 65 63 6b 2c 20 6d 61  hat the heck, ma
3550: 79 62 65 20 69 74 20 77 69 6c 6c 20 6f 6e 65 20  ybe it will one 
3560: 64 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  day...          
3570: 20 20 70 61 72 6d 73 5b 6e 5d 20 3d 20 5f 62 61    parms[n] = _ba
3580: 73 65 2e 54 6f 44 61 74 65 54 69 6d 65 28 5f 62  se.ToDateTime(_b
3590: 61 73 65 2e 47 65 74 50 61 72 61 6d 56 61 6c 75  ase.GetParamValu
35a0: 65 54 65 78 74 28 28 49 6e 74 50 74 72 29 61 72  eText((IntPtr)ar
35b0: 67 69 6e 74 5b 6e 5d 29 29 3b 0d 0a 20 20 20 20  gint[n]));..    
35c0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
35d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35e0: 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   }..      return
35f0: 20 70 61 72 6d 73 3b 0d 0a 20 20 20 20 7d 0d 0a   parms;..    }..
3600: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3610: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 61 6b  ry>..    /// Tak
3620: 65 73 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  es the return va
3630: 6c 75 65 20 66 72 6f 6d 20 49 6e 76 6f 6b 65 28  lue from Invoke(
3640: 29 20 61 6e 64 20 46 69 6e 61 6c 28 29 20 61 6e  ) and Final() an
3650: 64 20 66 69 67 75 72 65 73 20 6f 75 74 20 68 6f  d figures out ho
3660: 77 20 74 6f 20 72 65 74 75 72 6e 20 69 74 20 74  w to return it t
3670: 6f 20 53 51 4c 69 74 65 27 73 20 63 6f 6e 74 65  o SQLite's conte
3680: 78 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  xt...    /// </s
3690: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
36a0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
36b0: 6e 74 65 78 74 22 3e 54 68 65 20 63 6f 6e 74 65  ntext">The conte
36c0: 78 74 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  xt the return va
36d0: 6c 75 65 20 61 70 70 6c 69 65 73 20 74 6f 3c 2f  lue applies to</
36e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
36f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74  <param name="ret
3700: 75 72 6e 56 61 6c 75 65 22 3e 54 68 65 20 70 61  urnValue">The pa
3710: 72 61 6d 65 74 65 72 20 74 6f 20 72 65 74 75 72  rameter to retur
3720: 6e 20 74 6f 20 53 51 4c 69 74 65 3c 2f 70 61 72  n to SQLite</par
3730: 61 6d 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  am>..    private
3740: 20 76 6f 69 64 20 53 65 74 52 65 74 75 72 6e 56   void SetReturnV
3750: 61 6c 75 65 28 49 6e 74 50 74 72 20 63 6f 6e 74  alue(IntPtr cont
3760: 65 78 74 2c 20 6f 62 6a 65 63 74 20 72 65 74 75  ext, object retu
3770: 72 6e 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  rnValue)..    {.
3780: 0a 20 20 20 20 20 20 69 66 20 28 72 65 74 75 72  .      if (retur
3790: 6e 56 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 20 7c  nValue == null |
37a0: 7c 20 72 65 74 75 72 6e 56 61 6c 75 65 20 3d 3d  | returnValue ==
37b0: 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29 0d 0a   DBNull.Value)..
37c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37d0: 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 4e 75 6c   _base.ReturnNul
37e0: 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  l(context);..   
37f0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20       return;..  
3800: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 54      }....      T
3810: 79 70 65 20 74 20 3d 20 72 65 74 75 72 6e 56 61  ype t = returnVa
3820: 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  lue.GetType();..
3830: 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
3840: 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65 29 29  ypeof(DateTime))
3850: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3860: 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 54     _base.ReturnT
3870: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 5f 62 61  ext(context, _ba
3880: 73 65 2e 54 6f 53 74 72 69 6e 67 28 28 44 61 74  se.ToString((Dat
3890: 65 54 69 6d 65 29 72 65 74 75 72 6e 56 61 6c 75  eTime)returnValu
38a0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  e));..        re
38b0: 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  turn;..      }..
38c0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
38d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 45 78 63    {..        Exc
38e0: 65 70 74 69 6f 6e 20 72 20 3d 20 72 65 74 75 72  eption r = retur
38f0: 6e 56 61 6c 75 65 20 61 73 20 45 78 63 65 70 74  nValue as Except
3900: 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
3910: 69 66 20 28 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  if (r != null)..
3920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3930: 20 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72       _base.Retur
3940: 6e 45 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  nError(context, 
3950: 72 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  r.Message);..   
3960: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3970: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3980: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74   }....      swit
3990: 63 68 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72  ch (SQLiteConver
39a0: 74 2e 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79  t.TypeToAffinity
39b0: 28 74 2c 20 5f 66 6c 61 67 73 29 29 0d 0a 20 20  (t, _flags))..  
39c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63      {..        c
39d0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
39e0: 2e 4e 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20  .Null:..        
39f0: 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e 4e 75    _base.ReturnNu
3a00: 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  ll(context);..  
3a10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
3a20: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
3a30: 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34  peAffinity.Int64
3a40: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 62 61  :..          _ba
3a50: 73 65 2e 52 65 74 75 72 6e 49 6e 74 36 34 28 63  se.ReturnInt64(c
3a60: 6f 6e 74 65 78 74 2c 20 43 6f 6e 76 65 72 74 2e  ontext, Convert.
3a70: 54 6f 49 6e 74 36 34 28 72 65 74 75 72 6e 56 61  ToInt64(returnVa
3a80: 6c 75 65 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f  lue, CultureInfo
3a90: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 29  .CurrentCulture)
3aa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
3ab0: 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 63  turn;..        c
3ac0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
3ad0: 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20  .Double:..      
3ae0: 20 20 20 20 5f 62 61 73 65 2e 52 65 74 75 72 6e      _base.Return
3af0: 44 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  Double(context, 
3b00: 43 6f 6e 76 65 72 74 2e 54 6f 44 6f 75 62 6c 65  Convert.ToDouble
3b10: 28 72 65 74 75 72 6e 56 61 6c 75 65 2c 20 43 75  (returnValue, Cu
3b20: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
3b30: 74 43 75 6c 74 75 72 65 29 29 3b 0d 0a 20 20 20  tCulture));..   
3b40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
3b50: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
3b60: 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d  eAffinity.Text:.
3b70: 0a 20 20 20 20 20 20 20 20 20 20 5f 62 61 73 65  .          _base
3b80: 2e 52 65 74 75 72 6e 54 65 78 74 28 63 6f 6e 74  .ReturnText(cont
3b90: 65 78 74 2c 20 72 65 74 75 72 6e 56 61 6c 75 65  ext, returnValue
3ba0: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
3bb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
3bc0: 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54  ..        case T
3bd0: 79 70 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62  ypeAffinity.Blob
3be0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 62 61  :..          _ba
3bf0: 73 65 2e 52 65 74 75 72 6e 42 6c 6f 62 28 63 6f  se.ReturnBlob(co
3c00: 6e 74 65 78 74 2c 20 28 62 79 74 65 5b 5d 29 72  ntext, (byte[])r
3c10: 65 74 75 72 6e 56 61 6c 75 65 29 3b 0d 0a 20 20  eturnValue);..  
3c20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
3c30: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3c40: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3c50: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e  ary>..    /// In
3c60: 74 65 72 6e 61 6c 20 73 63 61 6c 61 72 20 63 61  ternal scalar ca
3c70: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2c  llback function,
3c80: 20 77 68 69 63 68 20 77 72 61 70 73 20 74 68 65   which wraps the
3c90: 20 72 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69   raw context poi
3ca0: 6e 74 65 72 20 61 6e 64 20 63 61 6c 6c 73 20 74  nter and calls t
3cb0: 68 65 20 76 69 72 74 75 61 6c 20 49 6e 76 6f 6b  he virtual Invok
3cc0: 65 28 29 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20  e() method...   
3cd0: 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 4d 75   /// WARNING: Mu
3ce0: 73 74 20 6e 6f 74 20 74 68 72 6f 77 20 65 78 63  st not throw exc
3cf0: 65 70 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f  eptions...    //
3d00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
3d10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3d20: 65 3d 22 63 6f 6e 74 65 78 74 22 3e 41 20 72 61  e="context">A ra
3d30: 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  w context pointe
3d40: 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  r</param>..    /
3d50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3d60: 6e 41 72 67 73 22 3e 4e 75 6d 62 65 72 20 6f 66  nArgs">Number of
3d70: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
3d80: 64 20 69 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  d in</param>..  
3d90: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3da0: 65 3d 22 61 72 67 73 70 74 72 22 3e 41 20 70 6f  e="argsptr">A po
3db0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 61 72 72  inter to the arr
3dc0: 61 79 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 3c  ay of arguments<
3dd0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
3de0: 65 72 6e 61 6c 20 76 6f 69 64 20 53 63 61 6c 61  ernal void Scala
3df0: 72 43 61 6c 6c 62 61 63 6b 28 49 6e 74 50 74 72  rCallback(IntPtr
3e00: 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 6e 41   context, int nA
3e10: 72 67 73 2c 20 49 6e 74 50 74 72 20 61 72 67 73  rgs, IntPtr args
3e20: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
3e30: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
3e40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3e50: 20 5f 63 6f 6e 74 65 78 74 20 3d 20 63 6f 6e 74   _context = cont
3e60: 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
3e70: 20 20 53 65 74 52 65 74 75 72 6e 56 61 6c 75 65    SetReturnValue
3e80: 28 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20  (context,..     
3e90: 20 20 20 20 20 20 20 20 20 20 20 49 6e 76 6f 6b             Invok
3ea0: 65 28 43 6f 6e 76 65 72 74 50 61 72 61 6d 73 28  e(ConvertParams(
3eb0: 6e 41 72 67 73 2c 20 61 72 67 73 70 74 72 29 29  nArgs, argsptr))
3ec0: 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
3ed0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3ee0: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
3ef0: 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20  ion e) /* NOTE: 
3f00: 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20  Must catch ALL. 
3f10: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
3f20: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3f50: 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
3f60: 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65  .LogCallbackExce
3f70: 70 74 69 6f 6e 73 28 5f 66 6c 61 67 73 29 29 0d  ptions(_flags)).
3f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3f90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3fa0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
3fb0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  g.LogMessage(SQL
3fc0: 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58  iteBase.COR_E_EX
3fd0: 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20  CEPTION,..      
3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ff0: 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e    HelperMethods.
4000: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c  StringFormat(Cul
4010: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
4020: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4040: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
4050: 74 68 6f 64 73 2e 45 78 63 65 70 74 69 6f 6e 4d  thods.ExceptionM
4060: 65 73 73 61 67 65 46 6f 72 6d 61 74 2c 0d 0a 20  essageFormat,.. 
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4080: 20 20 20 20 20 20 20 22 49 6e 76 6f 6b 65 22 2c         "Invoke",
4090: 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a   e)); /* throw *
40a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
40b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
40c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
40d0: 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
40e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
40f0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
4100: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
4110: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
4120: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
4130: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4140: 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f   /// Internal co
4150: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
4160: 20 66 75 6e 63 74 69 6f 6e 2c 20 77 68 69 63 68   function, which
4170: 20 77 72 61 70 73 20 75 70 20 74 68 65 20 72 61   wraps up the ra
4180: 77 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  w string pointer
4190: 73 20 61 6e 64 20 65 78 65 63 75 74 65 73 20 74  s and executes t
41a0: 68 65 20 43 6f 6d 70 61 72 65 28 29 20 76 69 72  he Compare() vir
41b0: 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a  tual function...
41c0: 20 20 20 20 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a      /// WARNING:
41d0: 20 4d 75 73 74 20 6e 6f 74 20 74 68 72 6f 77 20   Must not throw 
41e0: 65 78 63 65 70 74 69 6f 6e 73 2e 0d 0a 20 20 20  exceptions...   
41f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4200: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4210: 6e 61 6d 65 3d 22 70 74 72 22 3e 4e 6f 74 20 75  name="ptr">Not u
4220: 73 65 64 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  sed</param>..   
4230: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4240: 3d 22 6c 65 6e 31 22 3e 4c 65 6e 67 74 68 20 6f  ="len1">Length o
4250: 66 20 74 68 65 20 73 74 72 69 6e 67 20 70 76 31  f the string pv1
4260: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4270: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
4280: 74 72 31 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20  tr1">Pointer to 
4290: 74 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67  the first string
42a0: 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72   to compare</par
42b0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
42c0: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 32 22 3e  ram name="len2">
42d0: 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
42e0: 72 69 6e 67 20 70 76 32 3c 2f 70 61 72 61 6d 3e  ring pv2</param>
42f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
4300: 20 6e 61 6d 65 3d 22 70 74 72 32 22 3e 50 6f 69   name="ptr2">Poi
4310: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 65 63 6f  nter to the seco
4320: 6e 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d  nd string to com
4330: 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  pare</param>..  
4340: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
4350: 65 74 75 72 6e 73 20 2d 31 20 69 66 20 74 68 65  eturns -1 if the
4360: 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 69 73   first string is
4370: 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 73   less than the s
4380: 65 63 6f 6e 64 2e 20 20 30 20 69 66 20 74 68 65  econd.  0 if the
4390: 79 20 61 72 65 20 65 71 75 61 6c 2c 20 6f 72 20  y are equal, or 
43a0: 31 20 69 66 20 74 68 65 20 66 69 72 73 74 20 73  1 if the first s
43b0: 74 72 69 6e 67 20 69 73 20 67 72 65 61 74 65 72  tring is greater
43c0: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 61 6e 20 74  ..    /// than t
43d0: 68 65 20 73 65 63 6f 6e 64 2e 20 20 52 65 74 75  he second.  Retu
43e0: 72 6e 73 20 30 20 69 66 20 61 6e 20 65 78 63 65  rns 0 if an exce
43f0: 70 74 69 6f 6e 20 69 73 20 63 61 75 67 68 74 2e  ption is caught.
4400: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4410: 69 6e 74 65 72 6e 61 6c 20 69 6e 74 20 43 6f 6d  internal int Com
4420: 70 61 72 65 43 61 6c 6c 62 61 63 6b 28 49 6e 74  pareCallback(Int
4430: 50 74 72 20 70 74 72 2c 20 69 6e 74 20 6c 65 6e  Ptr ptr, int len
4440: 31 2c 20 49 6e 74 50 74 72 20 70 74 72 31 2c 20  1, IntPtr ptr1, 
4450: 69 6e 74 20 6c 65 6e 32 2c 20 49 6e 74 50 74 72  int len2, IntPtr
4460: 20 70 74 72 32 29 0d 0a 20 20 20 20 7b 0d 0a 20   ptr2)..    {.. 
4470: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
4480: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4490: 20 20 20 72 65 74 75 72 6e 20 43 6f 6d 70 61 72     return Compar
44a0: 65 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  e(SQLiteConvert.
44b0: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
44c0: 31 2c 20 6c 65 6e 31 29 2c 0d 0a 20 20 20 20 20  1, len1),..     
44d0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
44e0: 65 43 6f 6e 76 65 72 74 2e 55 54 46 38 54 6f 53  eConvert.UTF8ToS
44f0: 74 72 69 6e 67 28 70 74 72 32 2c 20 6c 65 6e 32  tring(ptr2, len2
4500: 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
4510: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4520: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
4530: 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
4540: 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
4550: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
4560: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
4570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4590: 69 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  if (HelperMethod
45a0: 73 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63  s.LogCallbackExc
45b0: 65 70 74 69 6f 6e 73 28 5f 66 6c 61 67 73 29 29  eptions(_flags))
45c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
45d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
45e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
45f0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51  og.LogMessage(SQ
4600: 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45  LiteBase.COR_E_E
4610: 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20  XCEPTION,..     
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4630: 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73     HelperMethods
4640: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75  .StringFormat(Cu
4650: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
4660: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
4690: 65 74 68 6f 64 73 2e 45 78 63 65 70 74 69 6f 6e  ethods.Exception
46a0: 4d 65 73 73 61 67 65 46 6f 72 6d 61 74 2c 0d 0a  MessageFormat,..
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 20 20 20 20 20 20 20 20 22 43 6f 6d 70 61 72 65          "Compare
46d0: 22 2c 20 65 29 29 3b 20 2f 2a 20 74 68 72 6f 77  ", e)); /* throw
46e0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
46f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4700: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4710: 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
4720: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4730: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
4740: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
4750: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4760: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  }....        //.
4770: 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
4780: 3a 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64  : This must be d
4790: 6f 6e 65 20 74 6f 20 70 72 65 76 65 6e 74 20 74  one to prevent t
47a0: 68 65 20 63 6f 72 65 20 53 51 4c 69 74 65 20 6c  he core SQLite l
47b0: 69 62 72 61 72 79 20 66 72 6f 6d 0d 0a 20 20 20  ibrary from..   
47c0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
47d0: 69 6e 67 20 6f 75 72 20 28 69 6e 76 61 6c 69 64  ing our (invalid
47e0: 29 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20  ) result...     
47f0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69     //..        i
4800: 66 20 28 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c  f ((_base != nul
4810: 6c 29 20 26 26 20 5f 62 61 73 65 2e 49 73 4f 70  l) && _base.IsOp
4820: 65 6e 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  en())..         
4830: 20 20 20 5f 62 61 73 65 2e 43 61 6e 63 65 6c 28     _base.Cancel(
4840: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
4850: 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 7d 0d 0a  turn 0;..    }..
4860: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4870: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 6e 74  ry>..    /// Int
4880: 65 72 6e 61 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  ernal collating 
4890: 73 65 71 75 65 6e 63 65 20 66 75 6e 63 74 69 6f  sequence functio
48a0: 6e 2c 20 77 68 69 63 68 20 77 72 61 70 73 20 75  n, which wraps u
48b0: 70 20 74 68 65 20 72 61 77 20 73 74 72 69 6e 67  p the raw string
48c0: 20 70 6f 69 6e 74 65 72 73 20 61 6e 64 20 65 78   pointers and ex
48d0: 65 63 75 74 65 73 20 74 68 65 20 43 6f 6d 70 61  ecutes the Compa
48e0: 72 65 28 29 20 76 69 72 74 75 61 6c 20 66 75 6e  re() virtual fun
48f0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
4900: 57 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e 6f  WARNING: Must no
4910: 74 20 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f  t throw exceptio
4920: 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ns...    /// </s
4930: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4940: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 74   <param name="pt
4950: 72 22 3e 4e 6f 74 20 75 73 65 64 3c 2f 70 61 72  r">Not used</par
4960: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
4970: 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e  ram name="len1">
4980: 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
4990: 72 69 6e 67 20 70 76 31 3c 2f 70 61 72 61 6d 3e  ring pv1</param>
49a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
49b0: 20 6e 61 6d 65 3d 22 70 74 72 31 22 3e 50 6f 69   name="ptr1">Poi
49c0: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
49d0: 74 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70  t string to comp
49e0: 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  are</param>..   
49f0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
4a00: 3d 22 6c 65 6e 32 22 3e 4c 65 6e 67 74 68 20 6f  ="len2">Length o
4a10: 66 20 74 68 65 20 73 74 72 69 6e 67 20 70 76 32  f the string pv2
4a20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
4a30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
4a40: 74 72 32 22 3e 50 6f 69 6e 74 65 72 20 74 6f 20  tr2">Pointer to 
4a50: 74 68 65 20 73 65 63 6f 6e 64 20 73 74 72 69 6e  the second strin
4a60: 67 20 74 6f 20 63 6f 6d 70 61 72 65 3c 2f 70 61  g to compare</pa
4a70: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
4a80: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 2d  eturns>Returns -
4a90: 31 20 69 66 20 74 68 65 20 66 69 72 73 74 20 73  1 if the first s
4aa0: 74 72 69 6e 67 20 69 73 20 6c 65 73 73 20 74 68  tring is less th
4ab0: 61 6e 20 74 68 65 20 73 65 63 6f 6e 64 2e 20 20  an the second.  
4ac0: 30 20 69 66 20 74 68 65 79 20 61 72 65 20 65 71  0 if they are eq
4ad0: 75 61 6c 2c 20 6f 72 20 31 20 69 66 20 74 68 65  ual, or 1 if the
4ae0: 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 69 73   first string is
4af0: 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 2f 2f   greater..    //
4b00: 2f 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f 6e  / than the secon
4b10: 64 2e 20 20 52 65 74 75 72 6e 73 20 30 20 69 66  d.  Returns 0 if
4b20: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 73   an exception is
4b30: 20 63 61 75 67 68 74 2e 3c 2f 72 65 74 75 72 6e   caught.</return
4b40: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
4b50: 20 69 6e 74 20 43 6f 6d 70 61 72 65 43 61 6c 6c   int CompareCall
4b60: 62 61 63 6b 31 36 28 49 6e 74 50 74 72 20 70 74  back16(IntPtr pt
4b70: 72 2c 20 69 6e 74 20 6c 65 6e 31 2c 20 49 6e 74  r, int len1, Int
4b80: 50 74 72 20 70 74 72 31 2c 20 69 6e 74 20 6c 65  Ptr ptr1, int le
4b90: 6e 32 2c 20 49 6e 74 50 74 72 20 70 74 72 32 29  n2, IntPtr ptr2)
4ba0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4bb0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
4bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4bd0: 75 72 6e 20 43 6f 6d 70 61 72 65 28 53 51 4c 69  urn Compare(SQLi
4be0: 74 65 33 5f 55 54 46 31 36 2e 55 54 46 31 36 54  te3_UTF16.UTF16T
4bf0: 6f 53 74 72 69 6e 67 28 70 74 72 31 2c 20 6c 65  oString(ptr1, le
4c00: 6e 31 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n1),..          
4c10: 20 20 20 20 20 20 53 51 4c 69 74 65 33 5f 55 54        SQLite3_UT
4c20: 46 31 36 2e 55 54 46 31 36 54 6f 53 74 72 69 6e  F16.UTF16ToStrin
4c30: 67 28 70 74 72 32 2c 20 6c 65 6e 32 29 29 3b 20  g(ptr2, len2)); 
4c40: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
4c50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4c60: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
4c70: 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73   e) /* NOTE: Mus
4c80: 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d  t catch ALL. */.
4c90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4ca0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
4cb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4cd0: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 4c 6f  HelperMethods.Lo
4ce0: 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69  gCallbackExcepti
4cf0: 6f 6e 73 28 5f 66 6c 61 67 73 29 29 0d 0a 20 20  ons(_flags))..  
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d20: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
4d30: 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
4d40: 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50  Base.COR_E_EXCEP
4d50: 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20  TION,..         
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
4d70: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
4d80: 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72  ingFormat(Cultur
4d90: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
4da0: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
4dc0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4dd0: 64 73 2e 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  ds.ExceptionMess
4de0: 61 67 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  ageFormat,..    
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e00: 20 20 20 20 22 43 6f 6d 70 61 72 65 20 28 55 54      "Compare (UT
4e10: 46 31 36 29 22 2c 20 65 29 29 3b 20 2f 2a 20 74  F16)", e)); /* t
4e20: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
4e30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4e40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4e50: 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
4e60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4e80: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
4e90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4ea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4eb0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
4ec0: 4e 4f 54 45 3a 20 54 68 69 73 20 6d 75 73 74 20  NOTE: This must 
4ed0: 62 65 20 64 6f 6e 65 20 74 6f 20 70 72 65 76 65  be done to preve
4ee0: 6e 74 20 74 68 65 20 63 6f 72 65 20 53 51 4c 69  nt the core SQLi
4ef0: 74 65 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 0d  te library from.
4f00: 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
4f10: 20 20 75 73 69 6e 67 20 6f 75 72 20 28 69 6e 76    using our (inv
4f20: 61 6c 69 64 29 20 72 65 73 75 6c 74 2e 0d 0a 20  alid) result... 
4f30: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f40: 20 20 20 69 66 20 28 28 5f 62 61 73 65 20 21 3d     if ((_base !=
4f50: 20 6e 75 6c 6c 29 20 26 26 20 5f 62 61 73 65 2e   null) && _base.
4f60: 49 73 4f 70 65 6e 28 29 29 0d 0a 20 20 20 20 20  IsOpen())..     
4f70: 20 20 20 20 20 20 20 5f 62 61 73 65 2e 43 61 6e         _base.Can
4f80: 63 65 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  cel();....      
4f90: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20    return 0;..   
4fa0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
4fb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4fc0: 20 54 68 65 20 69 6e 74 65 72 6e 61 6c 20 61 67   The internal ag
4fd0: 67 72 65 67 61 74 65 20 53 74 65 70 20 66 75 6e  gregate Step fun
4fe0: 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 2c 20  ction callback, 
4ff0: 77 68 69 63 68 20 77 72 61 70 73 20 74 68 65 20  which wraps the 
5000: 72 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e  raw context poin
5010: 74 65 72 20 61 6e 64 20 63 61 6c 6c 73 20 74 68  ter and calls th
5020: 65 20 76 69 72 74 75 61 6c 20 53 74 65 70 28 29  e virtual Step()
5030: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f   method...    //
5040: 2f 20 57 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20  / WARNING: Must 
5050: 6e 6f 74 20 74 68 72 6f 77 20 65 78 63 65 70 74  not throw except
5060: 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ions...    /// <
5070: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5080: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  // <remarks>..  
5090: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
50a0: 69 6f 6e 20 74 61 6b 65 73 20 63 61 72 65 20 6f  ion takes care o
50b0: 66 20 64 6f 69 6e 67 20 74 68 65 20 6c 6f 6f 6b  f doing the look
50c0: 75 70 73 20 61 6e 64 20 67 65 74 74 69 6e 67 20  ups and getting 
50d0: 74 68 65 20 69 6d 70 6f 72 74 61 6e 74 20 69 6e  the important in
50e0: 66 6f 72 6d 61 74 69 6f 6e 20 70 75 74 20 74 6f  formation put to
50f0: 67 65 74 68 65 72 20 74 6f 20 63 61 6c 6c 20 74  gether to call t
5100: 68 65 20 53 74 65 70 28 29 20 66 75 6e 63 74 69  he Step() functi
5110: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 61  on...    /// Tha
5120: 74 20 69 6e 63 6c 75 64 65 73 20 70 75 6c 6c 69  t includes pulli
5130: 6e 67 20 6f 75 74 20 74 68 65 20 75 73 65 72 27  ng out the user'
5140: 73 20 63 6f 6e 74 65 78 74 44 61 74 61 20 61 6e  s contextData an
5150: 64 20 75 70 64 61 74 69 6e 67 20 69 74 20 61 66  d updating it af
5160: 74 65 72 20 74 68 65 20 63 61 6c 6c 20 69 73 20  ter the call is 
5170: 6d 61 64 65 2e 20 20 57 65 20 75 73 65 20 61 20  made.  We use a 
5180: 73 6f 72 74 65 64 20 6c 69 73 74 20 66 6f 72 20  sorted list for 
5190: 74 68 69 73 20 73 6f 0d 0a 20 20 20 20 2f 2f 2f  this so..    ///
51a0: 20 62 69 6e 61 72 79 20 73 65 61 72 63 68 65 73   binary searches
51b0: 20 63 61 6e 20 62 65 20 64 6f 6e 65 20 74 6f 20   can be done to 
51c0: 66 69 6e 64 20 74 68 65 20 64 61 74 61 2e 0d 0a  find the data...
51d0: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b      /// </remark
51e0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  s>..    /// <par
51f0: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74  am name="context
5200: 22 3e 41 20 72 61 77 20 63 6f 6e 74 65 78 74 20  ">A raw context 
5210: 70 6f 69 6e 74 65 72 3c 2f 70 61 72 61 6d 3e 0d  pointer</param>.
5220: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5230: 6e 61 6d 65 3d 22 6e 41 72 67 73 22 3e 4e 75 6d  name="nArgs">Num
5240: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
5250: 20 70 61 73 73 65 64 20 69 6e 3c 2f 70 61 72 61   passed in</para
5260: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
5270: 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 70 74 72  am name="argsptr
5280: 22 3e 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ">A pointer to t
5290: 68 65 20 61 72 72 61 79 20 6f 66 20 61 72 67 75  he array of argu
52a0: 6d 65 6e 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ments</param>.. 
52b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64     internal void
52c0: 20 53 74 65 70 43 61 6c 6c 62 61 63 6b 28 49 6e   StepCallback(In
52d0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e  tPtr context, in
52e0: 74 20 6e 41 72 67 73 2c 20 49 6e 74 50 74 72 20  t nArgs, IntPtr 
52f0: 61 72 67 73 70 74 72 29 0d 0a 20 20 20 20 7b 0d  argsptr)..    {.
5300: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
5310: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5320: 20 20 20 20 20 41 67 67 72 65 67 61 74 65 44 61       AggregateDa
5330: 74 61 20 64 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d  ta data = null;.
5340: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
5350: 66 20 28 5f 62 61 73 65 20 21 3d 20 6e 75 6c 6c  f (_base != null
5360: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5380: 20 20 49 6e 74 50 74 72 20 6e 41 75 78 20 3d 20    IntPtr nAux = 
5390: 5f 62 61 73 65 2e 41 67 67 72 65 67 61 74 65 43  _base.AggregateC
53a0: 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 29 3b  ontext(context);
53b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
53c0: 20 20 20 20 69 66 20 28 28 5f 63 6f 6e 74 65 78      if ((_contex
53d0: 74 44 61 74 61 4c 69 73 74 20 21 3d 20 6e 75 6c  tDataList != nul
53e0: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
53f0: 20 20 20 20 20 20 20 20 20 20 20 21 5f 63 6f 6e             !_con
5400: 74 65 78 74 44 61 74 61 4c 69 73 74 2e 54 72 79  textDataList.Try
5410: 47 65 74 56 61 6c 75 65 28 6e 41 75 78 2c 20 6f  GetValue(nAux, o
5420: 75 74 20 64 61 74 61 29 29 0d 0a 20 20 20 20 20  ut data))..     
5430: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5450: 20 20 64 61 74 61 20 3d 20 6e 65 77 20 41 67 67    data = new Agg
5460: 72 65 67 61 74 65 44 61 74 61 28 29 3b 0d 0a 20  regateData();.. 
5470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5480: 20 20 20 5f 63 6f 6e 74 65 78 74 44 61 74 61 4c     _contextDataL
5490: 69 73 74 5b 6e 41 75 78 5d 20 3d 20 64 61 74 61  ist[nAux] = data
54a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
54b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
54c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
54d0: 20 20 20 69 66 20 28 64 61 74 61 20 3d 3d 20 6e     if (data == n
54e0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
54f0: 20 20 20 20 20 20 64 61 74 61 20 3d 20 6e 65 77        data = new
5500: 20 41 67 67 72 65 67 61 74 65 44 61 74 61 28 29   AggregateData()
5510: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5520: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
5530: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5540: 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 20 3d 20       _context = 
5550: 63 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20 20 20  context;..      
5560: 20 20 20 20 20 20 20 20 20 20 53 74 65 70 28 43            Step(C
5570: 6f 6e 76 65 72 74 50 61 72 61 6d 73 28 6e 41 72  onvertParams(nAr
5580: 67 73 2c 20 61 72 67 73 70 74 72 29 2c 0d 0a 20  gs, argsptr),.. 
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55a0: 20 20 20 64 61 74 61 2e 5f 63 6f 75 6e 74 2c 20     data._count, 
55b0: 72 65 66 20 64 61 74 61 2e 5f 64 61 74 61 29 3b  ref data._data);
55c0: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
55d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
55e0: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
55f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5610: 20 64 61 74 61 2e 5f 63 6f 75 6e 74 2b 2b 3b 0d   data._count++;.
5620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5630: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5640: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
5650: 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20  ion e) /* NOTE: 
5660: 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20  Must catch ALL. 
5670: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
5680: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
5690: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
56b0: 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
56c0: 2e 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65  .LogCallbackExce
56d0: 70 74 69 6f 6e 73 28 5f 66 6c 61 67 73 29 29 0d  ptions(_flags)).
56e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
56f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5700: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
5710: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 53 51 4c  g.LogMessage(SQL
5720: 69 74 65 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58  iteBase.COR_E_EX
5730: 43 45 50 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20  CEPTION,..      
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5750: 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e    HelperMethods.
5760: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75 6c  StringFormat(Cul
5770: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
5780: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
5790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57a0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
57b0: 74 68 6f 64 73 2e 45 78 63 65 70 74 69 6f 6e 4d  thods.ExceptionM
57c0: 65 73 73 61 67 65 46 6f 72 6d 61 74 2c 0d 0a 20  essageFormat,.. 
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 20 20 20 20 20 20 20 22 53 74 65 70 22 2c 20 65         "Step", e
57f0: 29 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  )); /* throw */.
5800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5810: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5820: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
5830: 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
5840: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5850: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
5860: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
5870: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
5880: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
5890: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
58a0: 2f 2f 20 41 6e 20 69 6e 74 65 72 6e 61 6c 20 61  // An internal a
58b0: 67 67 72 65 67 61 74 65 20 46 69 6e 61 6c 20 66  ggregate Final f
58c0: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b  unction callback
58d0: 2c 20 77 68 69 63 68 20 77 72 61 70 73 20 74 68  , which wraps th
58e0: 65 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  e context pointe
58f0: 72 20 61 6e 64 20 63 61 6c 6c 73 20 74 68 65 20  r and calls the 
5900: 76 69 72 74 75 61 6c 20 46 69 6e 61 6c 28 29 20  virtual Final() 
5910: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
5920: 20 57 41 52 4e 49 4e 47 3a 20 4d 75 73 74 20 6e   WARNING: Must n
5930: 6f 74 20 74 68 72 6f 77 20 65 78 63 65 70 74 69  ot throw excepti
5940: 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ons...    /// </
5950: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5960: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
5970: 6f 6e 74 65 78 74 22 3e 41 20 72 61 77 20 63 6f  ontext">A raw co
5980: 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 3c 2f 70  ntext pointer</p
5990: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
59a0: 6e 61 6c 20 76 6f 69 64 20 46 69 6e 61 6c 43 61  nal void FinalCa
59b0: 6c 6c 62 61 63 6b 28 49 6e 74 50 74 72 20 63 6f  llback(IntPtr co
59c0: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
59d0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
59e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
59f0: 20 20 20 6f 62 6a 65 63 74 20 6f 62 6a 20 3d 20     object obj = 
5a00: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
5a10: 20 20 20 20 20 69 66 20 28 5f 62 61 73 65 20 21       if (_base !
5a20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
5a30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5a40: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 6e          IntPtr n
5a50: 20 3d 20 5f 62 61 73 65 2e 41 67 67 72 65 67 61   = _base.Aggrega
5a60: 74 65 43 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78  teContext(contex
5a70: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
5a80: 20 20 20 20 20 41 67 67 72 65 67 61 74 65 44 61       AggregateDa
5a90: 74 61 20 61 67 67 44 61 74 61 3b 0d 0a 0d 0a 20  ta aggData;.... 
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5ab0: 66 20 28 28 5f 63 6f 6e 74 65 78 74 44 61 74 61  f ((_contextData
5ac0: 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 20 26 26  List != null) &&
5ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ae0: 20 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 44 61        _contextDa
5af0: 74 61 4c 69 73 74 2e 54 72 79 47 65 74 56 61 6c  taList.TryGetVal
5b00: 75 65 28 6e 2c 20 6f 75 74 20 61 67 67 44 61 74  ue(n, out aggDat
5b10: 61 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a))..           
5b20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 20              obj 
5b40: 3d 20 61 67 67 44 61 74 61 2e 5f 64 61 74 61 3b  = aggData._data;
5b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b60: 20 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 44 61        _contextDa
5b70: 74 61 4c 69 73 74 2e 52 65 6d 6f 76 65 28 6e 29  taList.Remove(n)
5b80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5b90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5ba0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5bb0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
5bc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5bd0: 20 20 20 20 20 20 20 5f 63 6f 6e 74 65 78 74 20         _context 
5be0: 3d 20 63 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20  = context;..    
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 52              SetR
5c00: 65 74 75 72 6e 56 61 6c 75 65 28 63 6f 6e 74 65  eturnValue(conte
5c10: 78 74 2c 20 46 69 6e 61 6c 28 6f 62 6a 29 29 3b  xt, Final(obj));
5c20: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
5c30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5c40: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
5c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c70: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 64 69 73   IDisposable dis
5c80: 70 20 3d 20 6f 62 6a 20 61 73 20 49 44 69 73 70  p = obj as IDisp
5c90: 6f 73 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20  osable;..       
5ca0: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
5cb0: 70 20 21 3d 20 6e 75 6c 6c 29 20 64 69 73 70 2e  p != null) disp.
5cc0: 44 69 73 70 6f 73 65 28 29 3b 20 2f 2a 20 74 68  Dispose(); /* th
5cd0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
5ce0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
5cf0: 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch 
5d00: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
5d10: 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
5d20: 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
5d30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5d40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
5d50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5d60: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
5d70: 4d 65 74 68 6f 64 73 2e 4c 6f 67 43 61 6c 6c 62  Methods.LogCallb
5d80: 61 63 6b 45 78 63 65 70 74 69 6f 6e 73 28 5f 66  ackExceptions(_f
5d90: 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20  lags))..        
5da0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
5dc0: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
5dd0: 61 67 65 28 53 51 4c 69 74 65 42 61 73 65 2e 43  age(SQLiteBase.C
5de0: 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d  OR_E_EXCEPTION,.
5df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e00: 20 20 20 20 20 20 20 20 20 48 65 6c 70 65 72 4d           HelperM
5e10: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
5e20: 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
5e30: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
5e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e50: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
5e60: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 45 78 63  ativeMethods.Exc
5e70: 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 46 6f 72  eptionMessageFor
5e80: 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
5ea0: 69 6e 61 6c 22 2c 20 65 29 29 3b 20 2f 2a 20 74  inal", e)); /* t
5eb0: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
5ec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5ed0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5ee0: 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
5ef0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5f10: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
5f20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5f30: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
5f40: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5f50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 73 69 6e 67  >..    /// Using
5f60: 20 72 65 66 6c 65 63 74 69 6f 6e 2c 20 65 6e 75   reflection, enu
5f70: 6d 65 72 61 74 65 20 61 6c 6c 20 61 73 73 65 6d  merate all assem
5f80: 62 6c 69 65 73 20 69 6e 20 74 68 65 20 63 75 72  blies in the cur
5f90: 72 65 6e 74 20 61 70 70 64 6f 6d 61 69 6e 20 6c  rent appdomain l
5fa0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 63 6c 61 73 73  ooking for class
5fb0: 65 73 20 74 68 61 74 0d 0a 20 20 20 20 2f 2f 2f  es that..    ///
5fc0: 20 68 61 76 65 20 61 20 53 51 4c 69 74 65 46 75   have a SQLiteFu
5fd0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
5fe0: 61 74 74 72 69 62 75 74 65 2c 20 61 6e 64 20 72  attribute, and r
5ff0: 65 67 69 73 74 65 72 69 6e 67 20 74 68 65 6d 20  egistering them 
6000: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0d 0a 20 20  accordingly...  
6010: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6020: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
6030: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
6040: 20 26 26 20 21 4e 45 54 5f 53 54 41 4e 44 41 52   && !NET_STANDAR
6050: 44 5f 32 30 0d 0a 20 20 20 20 5b 53 65 63 75 72  D_20..    [Secur
6060: 69 74 79 2e 50 65 72 6d 69 73 73 69 6f 6e 73 2e  ity.Permissions.
6070: 46 69 6c 65 49 4f 50 65 72 6d 69 73 73 69 6f 6e  FileIOPermission
6080: 28 53 65 63 75 72 69 74 79 2e 50 65 72 6d 69 73  (Security.Permis
6090: 73 69 6f 6e 73 2e 53 65 63 75 72 69 74 79 41 63  sions.SecurityAc
60a0: 74 69 6f 6e 2e 41 73 73 65 72 74 2c 20 41 6c 6c  tion.Assert, All
60b0: 46 69 6c 65 73 20 3d 20 53 65 63 75 72 69 74 79  Files = Security
60c0: 2e 50 65 72 6d 69 73 73 69 6f 6e 73 2e 46 69 6c  .Permissions.Fil
60d0: 65 49 4f 50 65 72 6d 69 73 73 69 6f 6e 41 63 63  eIOPermissionAcc
60e0: 65 73 73 2e 50 61 74 68 44 69 73 63 6f 76 65 72  ess.PathDiscover
60f0: 79 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  y)]..#endif..   
6100: 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 46 75   static SQLiteFu
6110: 6e 63 74 69 6f 6e 28 29 0d 0a 20 20 20 20 7b 0d  nction()..    {.
6120: 0a 20 20 20 20 20 20 5f 72 65 67 69 73 74 65 72  .      _register
6130: 65 64 46 75 6e 63 74 69 6f 6e 73 20 3d 20 6e 65  edFunctions = ne
6140: 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c  w Dictionary<SQL
6150: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
6160: 62 75 74 65 2c 20 6f 62 6a 65 63 74 3e 28 29 3b  bute, object>();
6170: 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20  ..      try..   
6180: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
6190: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
61a0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  WORK..        //
61b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
61c0: 45 3a 20 49 66 20 74 68 65 20 22 4e 6f 5f 53 51  E: If the "No_SQ
61d0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 73 22 20 65  LiteFunctions" e
61e0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
61f0: 62 6c 65 20 69 73 20 73 65 74 2c 0d 0a 20 20 20  ble is set,..   
6200: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 6b       //       sk
6210: 69 70 20 61 6c 6c 20 6f 75 72 20 73 70 65 63 69  ip all our speci
6220: 61 6c 20 63 6f 64 65 20 61 6e 64 20 73 69 6d 70  al code and simp
6230: 6c 79 20 72 65 74 75 72 6e 2e 0d 0a 20 20 20 20  ly return...    
6240: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6250: 69 66 20 28 55 6e 73 61 66 65 4e 61 74 69 76 65  if (UnsafeNative
6260: 4d 65 74 68 6f 64 73 2e 47 65 74 53 65 74 74 69  Methods.GetSetti
6270: 6e 67 56 61 6c 75 65 28 22 4e 6f 5f 53 51 4c 69  ngValue("No_SQLi
6280: 74 65 46 75 6e 63 74 69 6f 6e 73 22 2c 20 6e 75  teFunctions", nu
6290: 6c 6c 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ll) != null)..  
62a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
62b0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
62c0: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
62d0: 74 65 20 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  te at;..        
62e0: 53 79 73 74 65 6d 2e 52 65 66 6c 65 63 74 69 6f  System.Reflectio
62f0: 6e 2e 41 73 73 65 6d 62 6c 79 5b 5d 20 61 72 41  n.Assembly[] arA
6300: 73 73 65 6d 62 6c 69 65 73 20 3d 20 53 79 73 74  ssemblies = Syst
6310: 65 6d 2e 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72  em.AppDomain.Cur
6320: 72 65 6e 74 44 6f 6d 61 69 6e 2e 47 65 74 41 73  rentDomain.GetAs
6330: 73 65 6d 62 6c 69 65 73 28 29 3b 0d 0a 20 20 20  semblies();..   
6340: 20 20 20 20 20 69 6e 74 20 77 20 3d 20 61 72 41       int w = arA
6350: 73 73 65 6d 62 6c 69 65 73 2e 4c 65 6e 67 74 68  ssemblies.Length
6360: 3b 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65  ;..        Syste
6370: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 2e 41 73 73  m.Reflection.Ass
6380: 65 6d 62 6c 79 4e 61 6d 65 20 73 71 6c 69 74 65  emblyName sqlite
6390: 20 3d 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63   = System.Reflec
63a0: 74 69 6f 6e 2e 41 73 73 65 6d 62 6c 79 2e 47 65  tion.Assembly.Ge
63b0: 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d 62  tExecutingAssemb
63c0: 6c 79 28 29 2e 47 65 74 4e 61 6d 65 28 29 3b 0d  ly().GetName();.
63d0: 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28  ...        for (
63e0: 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 77  int n = 0; n < w
63f0: 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  ; n++)..        
6400: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 54 79 70  {..          Typ
6410: 65 5b 5d 20 61 72 54 79 70 65 73 3b 0d 0a 20 20  e[] arTypes;..  
6420: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 66 6f 75          bool fou
6430: 6e 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  nd = false;..   
6440: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 52 65         System.Re
6450: 66 6c 65 63 74 69 6f 6e 2e 41 73 73 65 6d 62 6c  flection.Assembl
6460: 79 4e 61 6d 65 5b 5d 20 72 65 66 65 72 65 6e 63  yName[] referenc
6470: 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  es;..          t
6480: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ry..          {.
6490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
64a0: 49 6e 73 70 65 63 74 20 6f 6e 6c 79 20 61 73 73  Inspect only ass
64b0: 65 6d 62 6c 69 65 73 20 74 68 61 74 20 72 65 66  emblies that ref
64c0: 65 72 65 6e 63 65 20 53 51 4c 69 74 65 0d 0a 20  erence SQLite.. 
64d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 65 72             refer
64e0: 65 6e 63 65 73 20 3d 20 61 72 41 73 73 65 6d 62  ences = arAssemb
64f0: 6c 69 65 73 5b 6e 5d 2e 47 65 74 52 65 66 65 72  lies[n].GetRefer
6500: 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 28  encedAssemblies(
6510: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6520: 69 6e 74 20 74 20 3d 20 72 65 66 65 72 65 6e 63  int t = referenc
6530: 65 73 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20  es.Length;..    
6540: 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
6550: 20 7a 20 3d 20 30 3b 20 7a 20 3c 20 74 3b 20 7a   z = 0; z < t; z
6560: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
6570: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6580: 20 20 69 66 20 28 72 65 66 65 72 65 6e 63 65 73    if (references
6590: 5b 7a 5d 2e 4e 61 6d 65 20 3d 3d 20 73 71 6c 69  [z].Name == sqli
65a0: 74 65 2e 4e 61 6d 65 29 0d 0a 20 20 20 20 20 20  te.Name)..      
65b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
65c0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 75 6e 64             found
65d0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
65e0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
65f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6600: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
6610: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6620: 69 66 20 28 66 6f 75 6e 64 20 3d 3d 20 66 61 6c  if (found == fal
6630: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
6640: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
6650: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 54 79              arTy
6660: 70 65 73 20 3d 20 61 72 41 73 73 65 6d 62 6c 69  pes = arAssembli
6670: 65 73 5b 6e 5d 2e 47 65 74 54 79 70 65 73 28 29  es[n].GetTypes()
6680: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
6690: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
66a0: 28 52 65 66 6c 65 63 74 69 6f 6e 2e 52 65 66 6c  (Reflection.Refl
66b0: 65 63 74 69 6f 6e 54 79 70 65 4c 6f 61 64 45 78  ectionTypeLoadEx
66c0: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
66d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
66e0: 20 20 20 20 20 61 72 54 79 70 65 73 20 3d 20 65       arTypes = e
66f0: 2e 54 79 70 65 73 3b 0d 0a 20 20 20 20 20 20 20  .Types;..       
6700: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6710: 20 20 69 6e 74 20 76 20 3d 20 61 72 54 79 70 65    int v = arType
6720: 73 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20  s.Length;..     
6730: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 78 20       for (int x 
6740: 3d 20 30 3b 20 78 20 3c 20 76 3b 20 78 2b 2b 29  = 0; x < v; x++)
6750: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
6760: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
6770: 72 54 79 70 65 73 5b 78 5d 20 3d 3d 20 6e 75 6c  rTypes[x] == nul
6780: 6c 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a  l) continue;....
6790: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
67a0: 63 74 5b 5d 20 61 72 41 74 74 20 3d 20 61 72 54  ct[] arAtt = arT
67b0: 79 70 65 73 5b 78 5d 2e 47 65 74 43 75 73 74 6f  ypes[x].GetCusto
67c0: 6d 41 74 74 72 69 62 75 74 65 73 28 74 79 70 65  mAttributes(type
67d0: 6f 66 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  of(SQLiteFunctio
67e0: 6e 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c  nAttribute), fal
67f0: 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
6800: 20 20 69 6e 74 20 75 20 3d 20 61 72 41 74 74 2e    int u = arAtt.
6810: 4c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20  Length;..       
6820: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 79 20       for (int y 
6830: 3d 20 30 3b 20 79 20 3c 20 75 3b 20 79 2b 2b 29  = 0; y < u; y++)
6840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  .              a
6860: 74 20 3d 20 61 72 41 74 74 5b 79 5d 20 61 73 20  t = arAtt[y] as 
6870: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
6880: 74 72 69 62 75 74 65 3b 0d 0a 20 20 20 20 20 20  tribute;..      
6890: 20 20 20 20 20 20 20 20 69 66 20 28 61 74 20 21          if (at !
68a0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
68b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
68c0: 20 20 20 20 20 20 20 20 20 20 61 74 2e 49 6e 73            at.Ins
68d0: 74 61 6e 63 65 54 79 70 65 20 3d 20 61 72 54 79  tanceType = arTy
68e0: 70 65 73 5b 78 5d 3b 0d 0a 20 20 20 20 20 20 20  pes[x];..       
68f0: 20 20 20 20 20 20 20 20 20 52 65 70 6c 61 63 65           Replace
6900: 46 75 6e 63 74 69 6f 6e 28 61 74 2c 20 6e 75 6c  Function(at, nul
6910: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l);..           
6920: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6930: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
6940: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e  ..        }..#en
6950: 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  dif..      }..  
6960: 20 20 20 20 63 61 74 63 68 20 2f 2f 20 53 51 4c      catch // SQL
6970: 69 74 65 20 70 72 6f 76 69 64 65 72 20 63 61 6e  ite provider can
6980: 20 63 6f 6e 74 69 6e 75 65 20 77 69 74 68 6f 75   continue withou
6990: 74 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  t being able to 
69a0: 66 69 6e 64 20 62 75 69 6c 74 2d 69 6e 20 66 75  find built-in fu
69b0: 6e 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7b  nctions..      {
69c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
69d0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
69e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4d  mary>..    /// M
69f0: 61 6e 75 61 6c 20 6d 65 74 68 6f 64 20 6f 66 20  anual method of 
6a00: 72 65 67 69 73 74 65 72 69 6e 67 20 61 20 66 75  registering a fu
6a10: 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 74 79 70  nction.  The typ
6a20: 65 20 6d 75 73 74 20 73 74 69 6c 6c 20 68 61 76  e must still hav
6a30: 65 20 74 68 65 20 53 51 4c 69 74 65 46 75 6e 63  e the SQLiteFunc
6a40: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 73 20 69  tionAttributes i
6a50: 6e 20 6f 72 64 65 72 20 74 6f 20 77 6f 72 6b 0d  n order to work.
6a60: 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 70 65 72 6c  .    /// properl
6a70: 79 2c 20 62 75 74 20 74 68 69 73 20 69 73 20 61  y, but this is a
6a80: 20 77 6f 72 6b 61 72 6f 75 6e 64 20 66 6f 72 20   workaround for 
6a90: 74 68 65 20 43 6f 6d 70 61 63 74 20 46 72 61 6d  the Compact Fram
6aa0: 65 77 6f 72 6b 20 77 68 65 72 65 20 65 6e 75 6d  ework where enum
6ab0: 65 72 61 74 69 6e 67 20 61 73 73 65 6d 62 6c 69  erating assembli
6ac0: 65 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  es is not curren
6ad0: 74 6c 79 20 73 75 70 70 6f 72 74 65 64 2e 0d 0a  tly supported...
6ae0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6af0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
6b00: 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22 3e 54 68  am name="typ">Th
6b10: 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 66 75  e type of the fu
6b20: 6e 63 74 69 6f 6e 20 74 6f 20 72 65 67 69 73 74  nction to regist
6b30: 65 72 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  er</param>..    
6b40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
6b50: 69 64 20 52 65 67 69 73 74 65 72 46 75 6e 63 74  id RegisterFunct
6b60: 69 6f 6e 28 54 79 70 65 20 74 79 70 29 0d 0a 20  ion(Type typ).. 
6b70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62     {..        ob
6b80: 6a 65 63 74 5b 5d 20 61 72 41 74 74 20 3d 20 74  ject[] arAtt = t
6b90: 79 70 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72  yp.GetCustomAttr
6ba0: 69 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20  ibutes(..       
6bb0: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
6bc0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
6bd0: 75 74 65 29 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d  ute), false);...
6be0: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
6bf0: 74 20 79 20 3d 20 30 3b 20 79 20 3c 20 61 72 41  t y = 0; y < arA
6c00: 74 74 2e 4c 65 6e 67 74 68 3b 20 79 2b 2b 29 0d  tt.Length; y++).
6c10: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6c20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
6c30: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
6c40: 61 74 20 3d 20 61 72 41 74 74 5b 79 5d 20 61 73  at = arAtt[y] as
6c50: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41   SQLiteFunctionA
6c60: 74 74 72 69 62 75 74 65 3b 0d 0a 0d 0a 20 20 20  ttribute;....   
6c70: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 74 20           if (at 
6c80: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6c90: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
6ca0: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
6cb0: 20 20 20 52 65 67 69 73 74 65 72 46 75 6e 63 74     RegisterFunct
6cc0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
6cd0: 20 20 20 20 20 20 61 74 2e 4e 61 6d 65 2c 20 61        at.Name, a
6ce0: 74 2e 41 72 67 75 6d 65 6e 74 73 2c 20 61 74 2e  t.Arguments, at.
6cf0: 46 75 6e 63 54 79 70 65 2c 20 74 79 70 2c 0d 0a  FuncType, typ,..
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d10: 61 74 2e 43 61 6c 6c 62 61 63 6b 31 2c 20 61 74  at.Callback1, at
6d20: 2e 43 61 6c 6c 62 61 63 6b 32 29 3b 0d 0a 20 20  .Callback2);..  
6d30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
6d40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6d50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6c 74  ry>..    /// Alt
6d60: 65 72 6e 61 74 69 76 65 20 6d 65 74 68 6f 64 20  ernative method 
6d70: 6f 66 20 72 65 67 69 73 74 65 72 69 6e 67 20 61  of registering a
6d80: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73   function.  This
6d90: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 2f 2f 2f   method..    ///
6da0: 20 64 6f 65 73 20 6e 6f 74 20 72 65 71 75 69 72   does not requir
6db0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified 
6dc0: 74 79 70 65 20 74 6f 20 62 65 20 61 6e 6e 6f 74  type to be annot
6dd0: 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20 2f  ated with..    /
6de0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
6df0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
6e00: 69 62 75 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20  ibute" />...    
6e10: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6e20: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6e30: 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20  ame="name">..   
6e40: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
6e50: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
6e60: 20 72 65 67 69 73 74 65 72 2e 0d 0a 20 20 20 20   register...    
6e70: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
6e80: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6e90: 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  e="argumentCount
6ea0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
6eb0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
6ec0: 6e 74 73 20 61 63 63 65 70 74 65 64 20 62 79 20  nts accepted by 
6ed0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  the function... 
6ee0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6ef0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6f00: 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 54 79  name="functionTy
6f10: 70 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  pe">..    /// Th
6f20: 65 20 74 79 70 65 20 6f 66 20 53 51 4c 69 74 65  e type of SQLite
6f30: 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
6f40: 72 65 73 69 74 65 72 65 64 20 28 65 2e 67 2e 20  resitered (e.g. 
6f50: 73 63 61 6c 61 72 2c 0d 0a 20 20 20 20 2f 2f 2f  scalar,..    ///
6f60: 20 61 67 67 72 65 67 61 74 65 2c 20 6f 72 20 63   aggregate, or c
6f70: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
6f80: 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  e)...    /// </p
6f90: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
6fa0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 73 74  param name="inst
6fb0: 61 6e 63 65 54 79 70 65 22 3e 0d 0a 20 20 20 20  anceType">..    
6fc0: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
6fd0: 66 3d 22 54 79 70 65 22 20 2f 3e 20 74 68 61 74  f="Type" /> that
6fe0: 20 61 63 74 75 61 6c 6c 79 20 69 6d 70 6c 65 6d   actually implem
6ff0: 65 6e 74 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ents the functio
7000: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  n...    /// This
7010: 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73   will only be us
7020: 65 64 20 69 66 20 74 68 65 20 3c 70 61 72 61 6d  ed if the <param
7030: 72 65 66 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61  ref name="callba
7040: 63 6b 31 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f  ck1" />..    ///
7050: 20 61 6e 64 20 3c 70 61 72 61 6d 72 65 66 20 6e   and <paramref n
7060: 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 32 22 20  ame="callback2" 
7070: 2f 3e 20 70 61 72 61 6d 65 74 65 72 73 20 61 72  /> parameters ar
7080: 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 2f 2f 2f  e null...    ///
7090: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
70a0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
70b0: 63 61 6c 6c 62 61 63 6b 31 22 3e 0d 0a 20 20 20  callback1">..   
70c0: 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
70d0: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
70e0: 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
70f0: 61 6c 6c 20 63 61 6c 6c 73 20 69 6e 74 6f 20 74  all calls into t
7100: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65  he..    /// <see
7110: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
7120: 63 74 69 6f 6e 2e 49 6e 76 6f 6b 65 22 20 2f 3e  ction.Invoke" />
7130: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  ,..    /// <see 
7140: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
7150: 74 69 6f 6e 2e 53 74 65 70 22 20 2f 3e 2c 0d 0a  tion.Step" />,..
7160: 20 20 20 20 2f 2f 2f 20 61 6e 64 20 3c 73 65 65      /// and <see
7170: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
7180: 63 74 69 6f 6e 2e 43 6f 6d 70 61 72 65 22 20 2f  ction.Compare" /
7190: 3e 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64  > virtual method
71a0: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  s...    /// </pa
71b0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
71c0: 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c 62  aram name="callb
71d0: 61 63 6b 32 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ack2">..    /// 
71e0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  The <see cref="D
71f0: 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 6f 20 62  elegate" /> to b
7200: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 63  e used for all c
7210: 61 6c 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a 20  alls into the.. 
7220: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
7230: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
7240: 2e 46 69 6e 61 6c 22 20 2f 3e 20 76 69 72 74 75  .Final" /> virtu
7250: 61 6c 20 6d 65 74 68 6f 64 2e 20 20 54 68 69 73  al method.  This
7260: 0d 0a 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65  ..    /// parame
7270: 74 65 72 20 69 73 20 6f 6e 6c 79 20 6e 65 63 65  ter is only nece
7280: 73 73 61 72 79 20 66 6f 72 20 61 67 67 72 65 67  ssary for aggreg
7290: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  ate functions...
72a0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
72b0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61  ..    public sta
72c0: 74 69 63 20 76 6f 69 64 20 52 65 67 69 73 74 65  tic void Registe
72d0: 72 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  rFunction(..    
72e0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
72f0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 61 72  ..        int ar
7300: 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20  gumentCount,..  
7310: 20 20 20 20 20 20 46 75 6e 63 74 69 6f 6e 54 79        FunctionTy
7320: 70 65 20 66 75 6e 63 74 69 6f 6e 54 79 70 65 2c  pe functionType,
7330: 0d 0a 20 20 20 20 20 20 20 20 54 79 70 65 20 69  ..        Type i
7340: 6e 73 74 61 6e 63 65 54 79 70 65 2c 0d 0a 20 20  nstanceType,..  
7350: 20 20 20 20 20 20 44 65 6c 65 67 61 74 65 20 63        Delegate c
7360: 61 6c 6c 62 61 63 6b 31 2c 0d 0a 20 20 20 20 20  allback1,..     
7370: 20 20 20 44 65 6c 65 67 61 74 65 20 63 61 6c 6c     Delegate call
7380: 62 61 63 6b 32 0d 0a 20 20 20 20 20 20 20 20 29  back2..        )
7390: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
73a0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41   SQLiteFunctionA
73b0: 74 74 72 69 62 75 74 65 20 61 74 20 3d 20 6e 65  ttribute at = ne
73c0: 77 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  w SQLiteFunction
73d0: 41 74 74 72 69 62 75 74 65 28 0d 0a 20 20 20 20  Attribute(..    
73e0: 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 61 72          name, ar
73f0: 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 20 66 75 6e  gumentCount, fun
7400: 63 74 69 6f 6e 54 79 70 65 29 3b 0d 0a 0d 0a 20  ctionType);.... 
7410: 20 20 20 20 20 20 20 61 74 2e 49 6e 73 74 61 6e         at.Instan
7420: 63 65 54 79 70 65 20 3d 20 69 6e 73 74 61 6e 63  ceType = instanc
7430: 65 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20 20  eType;..        
7440: 61 74 2e 43 61 6c 6c 62 61 63 6b 31 20 3d 20 63  at.Callback1 = c
7450: 61 6c 6c 62 61 63 6b 31 3b 0d 0a 20 20 20 20 20  allback1;..     
7460: 20 20 20 61 74 2e 43 61 6c 6c 62 61 63 6b 32 20     at.Callback2 
7470: 3d 20 63 61 6c 6c 62 61 63 6b 32 3b 0d 0a 0d 0a  = callback2;....
7480: 20 20 20 20 20 20 20 20 52 65 70 6c 61 63 65 46          ReplaceF
7490: 75 6e 63 74 69 6f 6e 28 61 74 2c 20 6e 75 6c 6c  unction(at, null
74a0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
74b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
74c0: 20 20 20 20 2f 2f 2f 20 52 65 70 6c 61 63 65 73      /// Replaces
74d0: 20 61 20 72 65 67 69 73 74 65 72 65 64 20 66 75   a registered fu
74e0: 6e 63 74 69 6f 6e 2c 20 64 69 73 70 6f 73 69 6e  nction, disposin
74f0: 67 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  g of the associa
7500: 74 65 64 20 28 6f 6c 64 29 0d 0a 20 20 20 20 2f  ted (old)..    /
7510: 2f 2f 20 76 61 6c 75 65 20 69 66 20 6e 65 63 65  // value if nece
7520: 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ssary...    /// 
7530: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7540: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7550: 22 61 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  "at">..    /// T
7560: 68 65 20 61 74 74 72 69 62 75 74 65 20 74 68 61  he attribute tha
7570: 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
7580: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 70 6c  function to repl
7590: 61 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ace...    /// </
75a0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
75b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 65 77  <param name="new
75c0: 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  Value">..    ///
75d0: 20 54 68 65 20 6e 65 77 20 76 61 6c 75 65 20 74   The new value t
75e0: 6f 20 75 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  o use...    /// 
75f0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
7600: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
7610: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
7620: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 72 65 67   an existing reg
7630: 69 73 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e  istered function
7640: 20 77 61 73 20 72 65 70 6c 61 63 65 64 3b 20 6f   was replaced; o
7650: 74 68 65 72 77 69 73 65 2c 0d 0a 20 20 20 20 2f  therwise,..    /
7660: 2f 2f 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f  // zero...    //
7670: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
7680: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
7690: 20 62 6f 6f 6c 20 52 65 70 6c 61 63 65 46 75 6e   bool ReplaceFun
76a0: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
76b0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
76c0: 74 72 69 62 75 74 65 20 61 74 2c 0d 0a 20 20 20  tribute at,..   
76d0: 20 20 20 20 20 6f 62 6a 65 63 74 20 6e 65 77 56       object newV
76e0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  alue..        ).
76f0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
7700: 6f 62 6a 65 63 74 20 6f 6c 64 56 61 6c 75 65 3b  object oldValue;
7710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
7720: 5f 72 65 67 69 73 74 65 72 65 64 46 75 6e 63 74  _registeredFunct
7730: 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65  ions.TryGetValue
7740: 28 61 74 2c 20 6f 75 74 20 6f 6c 64 56 61 6c 75  (at, out oldValu
7750: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  e))..        {..
7760: 20 20 20 20 20 20 20 20 20 20 20 20 49 44 69 73              IDis
7770: 70 6f 73 61 62 6c 65 20 64 69 73 70 6f 73 61 62  posable disposab
7780: 6c 65 20 3d 20 6f 6c 64 56 61 6c 75 65 20 61 73  le = oldValue as
7790: 20 49 44 69 73 70 6f 73 61 62 6c 65 3b 0d 0a 0d   IDisposable;...
77a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
77b0: 28 64 69 73 70 6f 73 61 62 6c 65 20 21 3d 20 6e  (disposable != n
77c0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
77d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
77e0: 20 20 20 20 20 64 69 73 70 6f 73 61 62 6c 65 2e       disposable.
77f0: 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
7800: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
7810: 6f 73 61 62 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  osable = null;..
7820: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65  .            _re
7840: 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f 6e  gisteredFunction
7850: 73 5b 61 74 5d 20 3d 20 6e 65 77 56 61 6c 75 65  s[at] = newValue
7860: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
7870: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
7880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7890: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  else..        {.
78a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 72 65  .            _re
78b0: 67 69 73 74 65 72 65 64 46 75 6e 63 74 69 6f 6e  gisteredFunction
78c0: 73 2e 41 64 64 28 61 74 2c 20 6e 65 77 56 61 6c  s.Add(at, newVal
78d0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
78e0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
78f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7900: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
7910: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
7920: 43 72 65 61 74 65 73 20 61 20 3c 73 65 65 20 63  Creates a <see c
7930: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
7940: 69 6f 6e 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65  ion" /> instance
7950: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 73 70   based on the sp
7960: 65 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f  ecified..    ///
7970: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
7980: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
7990: 75 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 2f 2f  ute" />...    //
79a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
79b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
79c0: 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  e="functionAttri
79d0: 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  bute">..    /// 
79e0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
79f0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
7a00: 72 69 62 75 74 65 22 20 2f 3e 20 63 6f 6e 74 61  ribute" /> conta
7a10: 69 6e 69 6e 67 20 74 68 65 20 6d 65 74 61 64 61  ining the metada
7a20: 74 61 20 61 62 6f 75 74 0d 0a 20 20 20 20 2f 2f  ta about..    //
7a30: 2f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  / the function t
7a40: 6f 20 63 72 65 61 74 65 2e 0d 0a 20 20 20 20 2f  o create...    /
7a50: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
7a60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7a70: 3d 22 66 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20  ="function">..  
7a80: 20 20 2f 2f 2f 20 54 68 65 20 63 72 65 61 74 65    /// The create
7a90: 64 20 66 75 6e 63 74 69 6f 6e 20 2d 4f 52 2d 20  d function -OR- 
7aa0: 6e 75 6c 6c 20 69 66 20 74 68 65 20 66 75 6e 63  null if the func
7ab0: 74 69 6f 6e 20 63 6f 75 6c 64 20 6e 6f 74 20 62  tion could not b
7ac0: 65 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20  e created...    
7ad0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
7ae0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
7af0: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
7b00: 6f 20 69 66 20 74 68 65 20 66 75 6e 63 74 69 6f  o if the functio
7b10: 6e 20 77 61 73 20 63 72 65 61 74 65 64 3b 20 6f  n was created; o
7b20: 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d  therwise, zero..
7b30: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
7b40: 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
7b50: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 72 65   static bool Cre
7b60: 61 74 65 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ateFunction(..  
7b70: 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63        SQLiteFunc
7b80: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75  tionAttribute fu
7b90: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
7ba0: 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20 53 51  ..        out SQ
7bb0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e  LiteFunction fun
7bc0: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 29  ction..        )
7bd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7be0: 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74   if (functionAtt
7bf0: 72 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ribute == null).
7c00: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
7c10: 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e          function
7c20: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
7c30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
7c40: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  se;..        }..
7c50: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
7c60: 28 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ((functionAttrib
7c70: 75 74 65 2e 43 61 6c 6c 62 61 63 6b 31 20 21 3d  ute.Callback1 !=
7c80: 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20   null) ||..     
7c90: 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63             (func
7ca0: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e 43 61  tionAttribute.Ca
7cb0: 6c 6c 62 61 63 6b 32 20 21 3d 20 6e 75 6c 6c 29  llback2 != null)
7cc0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7cd0: 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69            functi
7ce0: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 44  on = new SQLiteD
7cf0: 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e 28  elegateFunction(
7d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d10: 20 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62    functionAttrib
7d20: 75 74 65 2e 43 61 6c 6c 62 61 63 6b 31 2c 0d 0a  ute.Callback1,..
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d40: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
7d50: 65 2e 43 61 6c 6c 62 61 63 6b 32 29 3b 0d 0a 0d  e.Callback2);...
7d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7d70: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
7d80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
7d90: 73 65 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41  se if (functionA
7da0: 74 74 72 69 62 75 74 65 2e 49 6e 73 74 61 6e 63  ttribute.Instanc
7db0: 65 54 79 70 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eType != null)..
7dc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7dd0: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20         function 
7de0: 3d 20 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  = (SQLiteFunctio
7df0: 6e 29 41 63 74 69 76 61 74 6f 72 2e 43 72 65 61  n)Activator.Crea
7e00: 74 65 49 6e 73 74 61 6e 63 65 28 0d 0a 20 20 20  teInstance(..   
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6e               fun
7e20: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e 49  ctionAttribute.I
7e30: 6e 73 74 61 6e 63 65 54 79 70 65 29 3b 0d 0a 0d  nstanceType);...
7e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
7e50: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
7e60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
7e70: 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  se..        {.. 
7e80: 20 20 20 20 20 20 20 20 20 20 20 66 75 6e 63 74             funct
7e90: 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ion = null;..   
7ea0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7eb0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
7ec0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
7ed0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7ee0: 20 20 20 2f 2f 2f 20 43 61 6c 6c 65 64 20 62 79     /// Called by
7ef0: 20 74 68 65 20 53 51 4c 69 74 65 42 61 73 65 20   the SQLiteBase 
7f00: 64 65 72 69 76 65 64 20 63 6c 61 73 73 65 73 2c  derived classes,
7f10: 20 74 68 69 73 20 6d 65 74 68 6f 64 20 62 69 6e   this method bin
7f20: 64 73 20 61 6c 6c 20 72 65 67 69 73 74 65 72 65  ds all registere
7f30: 64 20 28 6b 6e 6f 77 6e 29 20 75 73 65 72 2d 64  d (known) user-d
7f40: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
7f50: 20 74 6f 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e   to a connection
7f60: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 74 20 69 73  ...    /// It is
7f70: 20 64 6f 6e 65 20 74 68 69 73 20 77 61 79 20 73   done this way s
7f80: 6f 20 74 68 61 74 20 61 6c 6c 20 75 73 65 72 2d  o that all user-
7f90: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
7fa0: 73 20 77 69 6c 6c 20 61 63 63 65 73 73 20 74 68  s will access th
7fb0: 65 20 64 61 74 61 62 61 73 65 20 75 73 69 6e 67  e database using
7fc0: 20 74 68 65 20 73 61 6d 65 20 65 6e 63 6f 64 69   the same encodi
7fd0: 6e 67 20 73 63 68 65 6d 65 0d 0a 20 20 20 20 2f  ng scheme..    /
7fe0: 2f 2f 20 61 73 20 74 68 65 20 63 6f 6e 6e 65 63  // as the connec
7ff0: 74 69 6f 6e 20 28 55 54 46 2d 38 20 6f 72 20 55  tion (UTF-8 or U
8000: 54 46 2d 31 36 29 2e 0d 0a 20 20 20 20 2f 2f 2f  TF-16)...    ///
8010: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8020: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a   /// <remarks>..
8030: 20 20 20 20 2f 2f 2f 20 54 68 65 20 77 72 61 70      /// The wrap
8040: 70 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  per functions th
8050: 61 74 20 69 6e 74 65 72 6f 70 20 77 69 74 68 20  at interop with 
8060: 53 51 4c 69 74 65 20 77 69 6c 6c 20 63 72 65 61  SQLite will crea
8070: 74 65 20 61 20 75 6e 69 71 75 65 20 63 6f 6f 6b  te a unique cook
8080: 69 65 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20  ie value, which 
8090: 69 6e 74 65 72 6e 61 6c 6c 79 20 69 73 20 61 20  internally is a 
80a0: 70 6f 69 6e 74 65 72 20 74 6f 0d 0a 20 20 20 20  pointer to..    
80b0: 2f 2f 2f 20 61 6c 6c 20 74 68 65 20 77 72 61 70  /// all the wrap
80c0: 70 65 64 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ped callback fun
80d0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 69 6e 74  ctions.  The int
80e0: 65 72 6f 70 20 66 75 6e 63 74 69 6f 6e 20 75 73  erop function us
80f0: 65 73 20 69 74 20 74 6f 20 6d 61 70 20 43 44 65  es it to map CDe
8100: 63 6c 20 63 61 6c 6c 62 61 63 6b 73 20 74 6f 20  cl callbacks to 
8110: 53 74 64 43 61 6c 6c 20 63 61 6c 6c 62 61 63 6b  StdCall callback
8120: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  s...    /// </re
8130: 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  marks>..    /// 
8140: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 71 6c  <param name="sql
8150: 62 61 73 65 22 3e 54 68 65 20 62 61 73 65 20 6f  base">The base o
8160: 62 6a 65 63 74 20 6f 6e 20 77 68 69 63 68 20 74  bject on which t
8170: 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
8180: 20 74 6f 20 62 69 6e 64 2e 3c 2f 70 61 72 61 6d   to bind.</param
8190: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
81a0: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54  m name="flags">T
81b0: 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61  he flags associa
81c0: 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72  ted with the par
81d0: 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ent connection o
81e0: 62 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  bject.</param>..
81f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
8200: 3e 52 65 74 75 72 6e 73 20 61 20 6c 6f 67 69 63  >Returns a logic
8210: 61 6c 20 6c 69 73 74 20 6f 66 20 66 75 6e 63 74  al list of funct
8220: 69 6f 6e 73 20 77 68 69 63 68 20 74 68 65 20 63  ions which the c
8230: 6f 6e 6e 65 63 74 69 6f 6e 20 73 68 6f 75 6c 64  onnection should
8240: 20 72 65 74 61 69 6e 20 75 6e 74 69 6c 20 69 74   retain until it
8250: 20 69 73 20 63 6c 6f 73 65 64 2e 3c 2f 72 65 74   is closed.</ret
8260: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
8270: 6e 61 6c 20 73 74 61 74 69 63 20 49 44 69 63 74  nal static IDict
8280: 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e  ionary<SQLiteFun
8290: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
82a0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20  SQLiteFunction> 
82b0: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 0d 0a  BindFunctions(..
82c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61          SQLiteBa
82d0: 73 65 20 73 71 6c 62 61 73 65 2c 0d 0a 20 20 20  se sqlbase,..   
82e0: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
82f0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
8300: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
8310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 44 69 63   {..        IDic
8320: 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46 75  tionary<SQLiteFu
8330: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
8340: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e   SQLiteFunction>
8350: 20 6c 46 75 6e 63 74 69 6f 6e 73 20 3d 0d 0a 20   lFunctions =.. 
8360: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 44             new D
8370: 69 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65  ictionary<SQLite
8380: 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
8390: 65 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  e, SQLiteFunctio
83a0: 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n>();....       
83b0: 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c   foreach (KeyVal
83c0: 75 65 50 61 69 72 3c 53 51 4c 69 74 65 46 75 6e  uePair<SQLiteFun
83d0: 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20  ctionAttribute, 
83e0: 6f 62 6a 65 63 74 3e 20 70 61 69 72 0d 0a 20 20  object> pair..  
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
8400: 20 5f 72 65 67 69 73 74 65 72 65 64 46 75 6e 63   _registeredFunc
8410: 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20  tions)..        
8420: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
8430: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
8440: 72 69 62 75 74 65 20 70 72 20 3d 20 70 61 69 72  ribute pr = pair
8450: 2e 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  .Key;....       
8460: 20 20 20 20 20 69 66 20 28 70 72 20 3d 3d 20 6e       if (pr == n
8470: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8480: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
8490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
84a0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 3b  QLiteFunction f;
84b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
84c0: 69 66 20 28 43 72 65 61 74 65 46 75 6e 63 74 69  if (CreateFuncti
84d0: 6f 6e 28 70 72 2c 20 6f 75 74 20 66 29 29 0d 0a  on(pr, out f))..
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
8500: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 62  indFunction(sqlb
8510: 61 73 65 2c 20 70 72 2c 20 66 2c 20 66 6c 61 67  ase, pr, f, flag
8520: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
8530: 20 20 20 20 20 6c 46 75 6e 63 74 69 6f 6e 73 5b       lFunctions[
8540: 70 72 5d 20 3d 20 66 3b 0d 0a 20 20 20 20 20 20  pr] = f;..      
8550: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8560: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
8570: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8580: 20 20 20 20 20 20 20 20 20 20 6c 46 75 6e 63 74            lFunct
8590: 69 6f 6e 73 5b 70 72 5d 20 3d 20 6e 75 6c 6c 3b  ions[pr] = null;
85a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
85b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
85c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 46 75        return lFu
85d0: 6e 63 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 7d 0d  nctions;..    }.
85e0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
85f0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
8600: 6c 6c 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  lled by the SQLi
8610: 74 65 42 61 73 65 20 64 65 72 69 76 65 64 20 63  teBase derived c
8620: 6c 61 73 73 65 73 2c 20 74 68 69 73 20 6d 65 74  lasses, this met
8630: 68 6f 64 20 75 6e 62 69 6e 64 73 20 61 6c 6c 20  hod unbinds all 
8640: 72 65 67 69 73 74 65 72 65 64 20 28 6b 6e 6f 77  registered (know
8650: 6e 29 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  n)..    /// func
8660: 74 69 6f 6e 73 20 2d 4f 52 2d 20 61 6c 6c 20 70  tions -OR- all p
8670: 72 65 76 69 6f 75 73 6c 79 20 62 6f 75 6e 64 20  reviously bound 
8680: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e  user-defined fun
8690: 63 74 69 6f 6e 73 20 66 72 6f 6d 20 61 20 63 6f  ctions from a co
86a0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
86b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
86c0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
86d0: 6d 65 3d 22 73 71 6c 62 61 73 65 22 3e 54 68 65  me="sqlbase">The
86e0: 20 62 61 73 65 20 6f 62 6a 65 63 74 20 66 72 6f   base object fro
86f0: 6d 20 77 68 69 63 68 20 74 68 65 20 66 75 6e 63  m which the func
8700: 74 69 6f 6e 73 20 61 72 65 20 74 6f 20 62 65 20  tions are to be 
8710: 75 6e 62 6f 75 6e 64 2e 3c 2f 70 61 72 61 6d 3e  unbound.</param>
8720: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
8730: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 54 68   name="flags">Th
8740: 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74  e flags associat
8750: 65 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65  ed with the pare
8760: 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  nt connection ob
8770: 6a 65 63 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ject.</param>.. 
8780: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
8790: 6d 65 3d 22 72 65 67 69 73 74 65 72 65 64 22 3e  me="registered">
87a0: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
87b0: 72 6f 20 74 6f 20 75 6e 62 69 6e 64 20 61 6c 6c  ro to unbind all
87c0: 20 72 65 67 69 73 74 65 72 65 64 20 28 6b 6e 6f   registered (kno
87d0: 77 6e 29 20 66 75 6e 63 74 69 6f 6e 73 20 2d 4f  wn) functions -O
87e0: 52 2d 20 7a 65 72 6f 20 74 6f 20 75 6e 62 69 6e  R- zero to unbin
87f0: 64 20 61 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 0d  d all functions.
8800: 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74  .    /// current
8810: 6c 79 20 62 6f 75 6e 64 20 74 6f 20 74 68 65 20  ly bound to the 
8820: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
8830: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
8840: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
8850: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 6c 6c 20  Non-zero if all 
8860: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 75 73  the specified us
8870: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
8880: 69 6f 6e 73 20 77 65 72 65 20 75 6e 62 6f 75 6e  ions were unboun
8890: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
88a0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
88b0: 63 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 41 6c 6c  c bool UnbindAll
88c0: 46 75 6e 63 74 69 6f 6e 73 28 0d 0a 20 20 20 20  Functions(..    
88d0: 20 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73      SQLiteBase s
88e0: 71 6c 62 61 73 65 2c 0d 0a 20 20 20 20 20 20 20  qlbase,..       
88f0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8900: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 0d 0a 20  nFlags flags,.. 
8910: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 67 69         bool regi
8920: 73 74 65 72 65 64 0d 0a 20 20 20 20 20 20 20 20  stered..        
8930: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8940: 20 20 69 66 20 28 73 71 6c 62 61 73 65 20 3d 3d    if (sqlbase ==
8950: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8960: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
8970: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 44 69  ;....        IDi
8980: 63 74 69 6f 6e 61 72 79 3c 53 51 4c 69 74 65 46  ctionary<SQLiteF
8990: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
89a0: 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  , SQLiteFunction
89b0: 3e 20 6c 46 75 6e 63 74 69 6f 6e 73 20 3d 0d 0a  > lFunctions =..
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 62              sqlb
89d0: 61 73 65 2e 46 75 6e 63 74 69 6f 6e 73 3b 0d 0a  ase.Functions;..
89e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6c 46  ..        if (lF
89f0: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
8a00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
8a10: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
8a20: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73          bool res
8a30: 75 6c 74 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  ult = true;.... 
8a40: 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
8a50: 74 65 72 65 64 29 0d 0a 20 20 20 20 20 20 20 20  tered)..        
8a60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
8a70: 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65  oreach (KeyValue
8a80: 50 61 69 72 3c 53 51 4c 69 74 65 46 75 6e 63 74  Pair<SQLiteFunct
8a90: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 6f 62  ionAttribute, ob
8aa0: 6a 65 63 74 3e 20 70 61 69 72 0d 0a 20 20 20 20  ject> pair..    
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ac0: 69 6e 20 5f 72 65 67 69 73 74 65 72 65 64 46 75  in _registeredFu
8ad0: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
8ae0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8af0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46           SQLiteF
8b00: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
8b10: 20 70 72 20 3d 20 70 61 69 72 2e 4b 65 79 3b 0d   pr = pair.Key;.
8b20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8b30: 20 20 20 69 66 20 28 70 72 20 3d 3d 20 6e 75 6c     if (pr == nul
8b40: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8b50: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
8b60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8b70: 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74       SQLiteFunct
8b80: 69 6f 6e 20 66 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion f;....      
8b90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 6c            if (!l
8ba0: 46 75 6e 63 74 69 6f 6e 73 2e 54 72 79 47 65 74  Functions.TryGet
8bb0: 56 61 6c 75 65 28 70 72 2c 20 6f 75 74 20 66 29  Value(pr, out f)
8bc0: 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
8bd0: 20 20 20 20 20 20 20 20 20 28 66 20 3d 3d 20 6e           (f == n
8be0: 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ull) ||..       
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 21 55 6e               !Un
8c00: 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  bindFunction(sql
8c10: 62 61 73 65 2c 20 70 72 2c 20 66 2c 20 66 6c 61  base, pr, f, fla
8c20: 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gs))..          
8c30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
8c50: 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ult = false;..  
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8c80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8c90: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
8ca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8cb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
8cc0: 2f 2f 20 4e 4f 54 45 3a 20 4e 65 65 64 20 74 6f  // NOTE: Need to
8cd0: 20 75 73 65 20 61 20 63 6f 70 79 20 6f 66 20 74   use a copy of t
8ce0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 69 63 74  he function dict
8cf0: 69 6f 6e 61 72 79 20 69 6e 20 74 68 69 73 20 6d  ionary in this m
8d00: 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 20  ethod..         
8d10: 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 63 61     //       beca
8d20: 75 73 65 20 74 68 65 20 64 69 63 74 69 6f 6e 61  use the dictiona
8d30: 72 79 20 69 73 20 6d 6f 64 69 66 69 65 64 20 77  ry is modified w
8d40: 69 74 68 69 6e 20 74 68 65 20 55 6e 62 69 6e 64  ithin the Unbind
8d50: 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  Function..      
8d60: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
8d70: 65 74 68 6f 64 2c 20 77 68 69 63 68 20 69 73 20  ethod, which is 
8d80: 63 61 6c 6c 65 64 20 69 6e 73 69 64 65 20 74 68  called inside th
8d90: 65 20 6c 6f 6f 70 2e 0d 0a 20 20 20 20 20 20 20  e loop...       
8da0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
8db0: 20 20 20 20 20 6c 46 75 6e 63 74 69 6f 6e 73 20       lFunctions 
8dc0: 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79  = new Dictionary
8dd0: 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  <SQLiteFunctionA
8de0: 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65  ttribute, SQLite
8df0: 46 75 6e 63 74 69 6f 6e 3e 28 0d 0a 20 20 20 20  Function>(..    
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 6c 46 75 6e              lFun
8e10: 63 74 69 6f 6e 73 29 3b 0d 0a 0d 0a 20 20 20 20  ctions);....    
8e20: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
8e30: 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53 51  (KeyValuePair<SQ
8e40: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
8e50: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
8e60: 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20 20  ction> pair..   
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e80: 20 69 6e 20 6c 46 75 6e 63 74 69 6f 6e 73 29 0d   in lFunctions).
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8eb0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
8ec0: 74 72 69 62 75 74 65 20 70 72 20 3d 20 70 61 69  tribute pr = pai
8ed0: 72 2e 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  r.Key;....      
8ee0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 72            if (pr
8ef0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8f10: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
8f30: 74 65 46 75 6e 63 74 69 6f 6e 20 66 20 3d 20 70  teFunction f = p
8f40: 61 69 72 2e 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20  air.Value;....  
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8f60: 20 28 28 66 20 21 3d 20 6e 75 6c 6c 29 20 26 26   ((f != null) &&
8f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8f80: 20 20 20 20 20 20 55 6e 62 69 6e 64 46 75 6e 63        UnbindFunc
8f90: 74 69 6f 6e 28 73 71 6c 62 61 73 65 2c 20 70 72  tion(sqlbase, pr
8fa0: 2c 20 66 2c 20 66 6c 61 67 73 29 29 0d 0a 20 20  , f, flags))..  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
8fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8fd0: 20 20 20 20 20 2f 2a 20 49 47 4e 4f 52 45 44 20       /* IGNORED 
8fe0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
8ff0: 20 20 20 20 20 20 20 20 73 71 6c 62 61 73 65 2e          sqlbase.
9000: 46 75 6e 63 74 69 6f 6e 73 2e 52 65 6d 6f 76 65  Functions.Remove
9010: 28 70 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  (pr);..         
9020: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9030: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9060: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
9070: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
9080: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9090: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
90a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
90b0: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
90c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
90d0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
90e0: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
90f0: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65   binds a user-de
9100: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74  fined function t
9110: 6f 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  o a connection..
9120: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
9130: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
9140: 72 61 6d 20 6e 61 6d 65 3d 22 73 71 6c 69 74 65  ram name="sqlite
9150: 42 61 73 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  Base">..    /// 
9160: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
9170: 51 4c 69 74 65 42 61 73 65 22 20 2f 3e 20 6f 62  QLiteBase" /> ob
9180: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
9190: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
91a0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  e..    /// <see 
91b0: 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
91c0: 65 63 74 69 6f 6e 22 20 2f 3e 20 74 68 61 74 20  ection" /> that 
91d0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f  the function sho
91e0: 75 6c 64 20 62 65 20 62 6f 75 6e 64 20 74 6f 2e  uld be bound to.
91f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
9200: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
9210: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
9220: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
9230: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
9240: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
9250: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20  ionAttribute"/> 
9260: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
9270: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
9280: 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61  /// the metadata
9290: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
92a0: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
92b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
92c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
92d0: 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 22   name="function"
92e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
92f0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
9300: 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a 65  Function"/> obje
9310: 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61 74  ct instance that
9320: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0d   implements the.
9330: 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f  .    /// functio
9340: 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d 0a  n to be bound...
9350: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
9360: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
9370: 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a   name="flags">..
9380: 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67      /// The flag
9390: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
93a0: 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
93b0: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d  nection object..
93c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
93d0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
93e0: 73 74 61 74 69 63 20 76 6f 69 64 20 42 69 6e 64  static void Bind
93f0: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
9400: 20 20 20 53 51 4c 69 74 65 42 61 73 65 20 73 71     SQLiteBase sq
9410: 6c 69 74 65 42 61 73 65 2c 0d 0a 20 20 20 20 20  liteBase,..     
9420: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
9430: 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74  nAttribute funct
9440: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20  ionAttribute,.. 
9450: 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75 6e         SQLiteFun
9460: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d  ction function,.
9470: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43  .        SQLiteC
9480: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
9490: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 29 0d  lags..        ).
94a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
94b0: 69 66 20 28 73 71 6c 69 74 65 42 61 73 65 20 3d  if (sqliteBase =
94c0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
94d0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
94e0: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
94f0: 74 69 6f 6e 28 22 73 71 6c 69 74 65 42 61 73 65  tion("sqliteBase
9500: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
9510: 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  f (functionAttri
9520: 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bute == null).. 
9530: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
9540: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
9550: 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63  lException("func
9560: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 29 3b  tionAttribute");
9570: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
9580: 66 75 6e 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  function == null
9590: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
95a0: 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
95b0: 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
95c0: 66 75 6e 63 74 69 6f 6e 22 29 3b 0d 0a 0d 0a 20  function");.... 
95d0: 20 20 20 20 20 20 20 46 75 6e 63 74 69 6f 6e 54         FunctionT
95e0: 79 70 65 20 66 75 6e 63 74 69 6f 6e 54 79 70 65  ype functionType
95f0: 20 3d 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69   = functionAttri
9600: 62 75 74 65 2e 46 75 6e 63 54 79 70 65 3b 0d 0a  bute.FuncType;..
9610: 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69  ..        functi
9620: 6f 6e 2e 5f 62 61 73 65 20 3d 20 73 71 6c 69 74  on._base = sqlit
9630: 65 42 61 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  eBase;..        
9640: 66 75 6e 63 74 69 6f 6e 2e 5f 66 6c 61 67 73 20  function._flags 
9650: 3d 20 66 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20 20  = flags;....    
9660: 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 49 6e      function._In
9670: 76 6f 6b 65 46 75 6e 63 20 3d 20 28 66 75 6e 63  vokeFunc = (func
9680: 74 69 6f 6e 54 79 70 65 20 3d 3d 20 46 75 6e 63  tionType == Func
9690: 74 69 6f 6e 54 79 70 65 2e 53 63 61 6c 61 72 29  tionType.Scalar)
96a0: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
96b0: 6e 65 77 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  new SQLiteCallba
96c0: 63 6b 28 66 75 6e 63 74 69 6f 6e 2e 53 63 61 6c  ck(function.Scal
96d0: 61 72 43 61 6c 6c 62 61 63 6b 29 20 3a 20 6e 75  arCallback) : nu
96e0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  ll;....        f
96f0: 75 6e 63 74 69 6f 6e 2e 5f 53 74 65 70 46 75 6e  unction._StepFun
9700: 63 20 3d 20 28 66 75 6e 63 74 69 6f 6e 54 79 70  c = (functionTyp
9710: 65 20 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70  e == FunctionTyp
9720: 65 2e 41 67 67 72 65 67 61 74 65 29 20 3f 0d 0a  e.Aggregate) ?..
9730: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
9740: 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 28 66  SQLiteCallback(f
9750: 75 6e 63 74 69 6f 6e 2e 53 74 65 70 43 61 6c 6c  unction.StepCall
9760: 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d  back) : null;...
9770: 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f  .        functio
9780: 6e 2e 5f 46 69 6e 61 6c 46 75 6e 63 20 3d 20 28  n._FinalFunc = (
9790: 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 3d 20  functionType == 
97a0: 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 41 67 67  FunctionType.Agg
97b0: 72 65 67 61 74 65 29 20 3f 0d 0a 20 20 20 20 20  regate) ?..     
97c0: 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74         new SQLit
97d0: 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 28 66  eFinalCallback(f
97e0: 75 6e 63 74 69 6f 6e 2e 46 69 6e 61 6c 43 61 6c  unction.FinalCal
97f0: 6c 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d 0a  lback) : null;..
9800: 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74 69  ..        functi
9810: 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e 63 20  on._CompareFunc 
9820: 3d 20 28 66 75 6e 63 74 69 6f 6e 54 79 70 65 20  = (functionType 
9830: 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e  == FunctionType.
9840: 43 6f 6c 6c 61 74 69 6f 6e 29 20 3f 0d 0a 20 20  Collation) ?..  
9850: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
9860: 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 66 75  LiteCollation(fu
9870: 6e 63 74 69 6f 6e 2e 43 6f 6d 70 61 72 65 43 61  nction.CompareCa
9880: 6c 6c 62 61 63 6b 29 20 3a 20 6e 75 6c 6c 3b 0d  llback) : null;.
9890: 0a 0d 0a 20 20 20 20 20 20 20 20 66 75 6e 63 74  ...        funct
98a0: 69 6f 6e 2e 5f 43 6f 6d 70 61 72 65 46 75 6e 63  ion._CompareFunc
98b0: 31 36 20 3d 20 28 66 75 6e 63 74 69 6f 6e 54 79  16 = (functionTy
98c0: 70 65 20 3d 3d 20 46 75 6e 63 74 69 6f 6e 54 79  pe == FunctionTy
98d0: 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29 20 3f 0d  pe.Collation) ?.
98e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
98f0: 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
9900: 28 66 75 6e 63 74 69 6f 6e 2e 43 6f 6d 70 61 72  (function.Compar
9910: 65 43 61 6c 6c 62 61 63 6b 31 36 29 20 3a 20 6e  eCallback16) : n
9920: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
9930: 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 66 75  string name = fu
9940: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2e  nctionAttribute.
9950: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
9960: 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 54 79 70   if (functionTyp
9970: 65 20 21 3d 20 46 75 6e 63 74 69 6f 6e 54 79 70  e != FunctionTyp
9980: 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29 0d 0a 20 20  e.Collation)..  
9990: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
99a0: 20 20 20 20 20 62 6f 6f 6c 20 6e 65 65 64 43 6f       bool needCo
99b0: 6c 6c 53 65 71 20 3d 20 28 66 75 6e 63 74 69 6f  llSeq = (functio
99c0: 6e 20 69 73 20 53 51 4c 69 74 65 46 75 6e 63 74  n is SQLiteFunct
99d0: 69 6f 6e 45 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  ionEx);....     
99e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 42 61 73         sqliteBas
99f0: 65 2e 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e  e.CreateFunction
9a00: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9a10: 20 20 20 6e 61 6d 65 2c 20 66 75 6e 63 74 69 6f     name, functio
9a20: 6e 41 74 74 72 69 62 75 74 65 2e 41 72 67 75 6d  nAttribute.Argum
9a30: 65 6e 74 73 2c 20 6e 65 65 64 43 6f 6c 6c 53 65  ents, needCollSe
9a40: 71 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  q,..            
9a50: 20 20 20 20 66 75 6e 63 74 69 6f 6e 2e 5f 49 6e      function._In
9a60: 76 6f 6b 65 46 75 6e 63 2c 20 66 75 6e 63 74 69  vokeFunc, functi
9a70: 6f 6e 2e 5f 53 74 65 70 46 75 6e 63 2c 0d 0a 20  on._StepFunc,.. 
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
9a90: 75 6e 63 74 69 6f 6e 2e 5f 46 69 6e 61 6c 46 75  unction._FinalFu
9aa0: 6e 63 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  nc, true);..    
9ab0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65      }..        e
9ac0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lse..        {..
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
9ae0: 74 65 42 61 73 65 2e 43 72 65 61 74 65 43 6f 6c  teBase.CreateCol
9af0: 6c 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  lation(..       
9b00: 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 66           name, f
9b10: 75 6e 63 74 69 6f 6e 2e 5f 43 6f 6d 70 61 72 65  unction._Compare
9b20: 46 75 6e 63 2c 20 66 75 6e 63 74 69 6f 6e 2e 5f  Func, function._
9b30: 43 6f 6d 70 61 72 65 46 75 6e 63 31 36 2c 0d 0a  CompareFunc16,..
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b50: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
9b60: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
9b70: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
9b80: 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63     /// This func
9b90: 74 69 6f 6e 20 75 6e 62 69 6e 64 73 20 61 20 75  tion unbinds a u
9ba0: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
9bb0: 74 69 6f 6e 73 20 66 72 6f 6d 20 61 20 63 6f 6e  tions from a con
9bc0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
9bd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9be0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
9bf0: 65 3d 22 73 71 6c 69 74 65 42 61 73 65 22 3e 0d  e="sqliteBase">.
9c00: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
9c10: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 42 61  e cref="SQLiteBa
9c20: 73 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  se" /> object in
9c30: 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
9c40: 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  d with the..    
9c50: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
9c60: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22  QLiteConnection"
9c70: 20 2f 3e 20 74 68 61 74 20 74 68 65 20 66 75 6e   /> that the fun
9c80: 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 62 65 20  ction should be 
9c90: 62 6f 75 6e 64 20 74 6f 2e 0d 0a 20 20 20 20 2f  bound to...    /
9ca0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
9cb0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
9cc0: 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ="functionAttrib
9cd0: 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ute">..    /// T
9ce0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
9cf0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
9d00: 69 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20  ibute"/> object 
9d10: 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e  instance contain
9d20: 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ing..    /// the
9d30: 20 6d 65 74 61 64 61 74 61 20 66 6f 72 20 74 68   metadata for th
9d40: 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  e function to be
9d50: 20 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f   bound...    ///
9d60: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
9d70: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
9d80: 66 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20  function">..    
9d90: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
9da0: 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  f="SQLiteFunctio
9db0: 6e 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  n"/> object inst
9dc0: 61 6e 63 65 20 74 68 61 74 20 69 6d 70 6c 65 6d  ance that implem
9dd0: 65 6e 74 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f  ents the..    //
9de0: 2f 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  / function to be
9df0: 20 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f   bound...    ///
9e00: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
9e10: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
9e20: 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  flags">..    ///
9e30: 20 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63   The flags assoc
9e40: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70  iated with the p
9e50: 61 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  arent connection
9e60: 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f   object...    //
9e70: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
9e80: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e  /// <returns>Non
9e90: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 66 75 6e  -zero if the fun
9ea0: 63 74 69 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e  ction was unboun
9eb0: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
9ec0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
9ed0: 63 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 46 75 6e  c bool UnbindFun
9ee0: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
9ef0: 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c 69 74  SQLiteBase sqlit
9f00: 65 42 61 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  eBase,..        
9f10: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
9f20: 74 72 69 62 75 74 65 20 66 75 6e 63 74 69 6f 6e  tribute function
9f30: 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20 20 20  Attribute,..    
9f40: 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69      SQLiteFuncti
9f50: 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20  on function,..  
9f60: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
9f70: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
9f80: 73 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f  s /* NOT USED */
9f90: 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
9fa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
9fb0: 73 71 6c 69 74 65 42 61 73 65 20 3d 3d 20 6e 75  sqliteBase == nu
9fc0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9fd0: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
9fe0: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
9ff0: 28 22 73 71 6c 69 74 65 42 61 73 65 22 29 3b 0d  ("sqliteBase");.
a000: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66  ...        if (f
a010: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
a020: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
a030: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
a040: 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
a050: 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e  eption("function
a060: 41 74 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a  Attribute");....
a070: 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63          if (func
a080: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
a090: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
a0a0: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
a0b0: 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63  lException("func
a0c0: 74 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  tion");....     
a0d0: 20 20 20 46 75 6e 63 74 69 6f 6e 54 79 70 65 20     FunctionType 
a0e0: 66 75 6e 63 74 69 6f 6e 54 79 70 65 20 3d 20 66  functionType = f
a0f0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
a100: 2e 46 75 6e 63 54 79 70 65 3b 0d 0a 20 20 20 20  .FuncType;..    
a110: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20      string name 
a120: 3d 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  = functionAttrib
a130: 75 74 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  ute.Name;....   
a140: 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f       if (functio
a150: 6e 54 79 70 65 20 21 3d 20 46 75 6e 63 74 69 6f  nType != Functio
a160: 6e 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29  nType.Collation)
a170: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a180: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 65           bool ne
a190: 65 64 43 6f 6c 6c 53 65 71 20 3d 20 28 66 75 6e  edCollSeq = (fun
a1a0: 63 74 69 6f 6e 20 69 73 20 53 51 4c 69 74 65 46  ction is SQLiteF
a1b0: 75 6e 63 74 69 6f 6e 45 78 29 3b 0d 0a 0d 0a 20  unctionEx);.... 
a1c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a1d0: 6e 20 73 71 6c 69 74 65 42 61 73 65 2e 43 72 65  n sqliteBase.Cre
a1e0: 61 74 65 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ateFunction(..  
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
a200: 6d 65 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  me, functionAttr
a210: 69 62 75 74 65 2e 41 72 67 75 6d 65 6e 74 73 2c  ibute.Arguments,
a220: 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 0d 0a 20   needCollSeq,.. 
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
a240: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ull, null, null,
a250: 20 66 61 6c 73 65 29 20 3d 3d 20 53 51 4c 69 74   false) == SQLit
a260: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
a270: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a280: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
a290: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a2a0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 42 61 73  return sqliteBas
a2b0: 65 2e 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f  e.CreateCollatio
a2c0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
a2d0: 20 20 20 20 6e 61 6d 65 2c 20 6e 75 6c 6c 2c 20      name, null, 
a2e0: 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 20 3d 3d 20  null, false) == 
a2f0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
a300: 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  Ok;..        }..
a310: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20      }..  }....  
a320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a370: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
a380: 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 3c 73 65  ..  /// This <se
a390: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
a3a0: 22 20 2f 3e 20 74 79 70 65 20 69 73 20 75 73 65  " /> type is use
a3b0: 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 2f 2f  d with the..  //
a3c0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
a3d0: 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74  iteDelegateFunct
a3e0: 69 6f 6e 2e 49 6e 76 6f 6b 65 22 20 2f 3e 20 6d  ion.Invoke" /> m
a3f0: 65 74 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ethod...  /// </
a400: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
a410: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72  <param name="par
a420: 61 6d 30 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69  am0">..  /// Thi
a430: 73 20 69 73 20 61 6c 77 61 79 73 20 74 68 65 20  s is always the 
a440: 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 22  string literal "
a450: 49 6e 76 6f 6b 65 22 2e 0d 0a 20 20 2f 2f 2f 20  Invoke"...  /// 
a460: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
a470: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
a480: 73 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 61  s">..  /// The a
a490: 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  rguments for the
a4a0: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
a4b0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  ...  /// </param
a4c0: 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  >..  /// <return
a4d0: 73 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 72 65  s>..  /// The re
a4e0: 73 75 6c 74 20 6f 66 20 74 68 65 20 73 63 61 6c  sult of the scal
a4f0: 61 72 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20  ar function...  
a500: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
a510: 20 20 70 75 62 6c 69 63 20 64 65 6c 65 67 61 74    public delegat
a520: 65 20 6f 62 6a 65 63 74 20 53 51 4c 69 74 65 49  e object SQLiteI
a530: 6e 76 6f 6b 65 44 65 6c 65 67 61 74 65 28 0d 0a  nvokeDelegate(..
a540: 20 20 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d      string param
a550: 30 2c 0d 0a 20 20 20 20 6f 62 6a 65 63 74 5b 5d  0,..    object[]
a560: 20 61 72 67 73 0d 0a 20 20 29 3b 0d 0a 0d 0a 20   args..  );.... 
a570: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a5c0: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
a5d0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 3c 73  >..  /// This <s
a5e0: 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74  ee cref="Delegat
a5f0: 65 22 20 2f 3e 20 74 79 70 65 20 69 73 20 75 73  e" /> type is us
a600: 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 2f  ed with the..  /
a610: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
a620: 4c 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63  LiteDelegateFunc
a630: 74 69 6f 6e 2e 53 74 65 70 22 20 2f 3e 20 6d 65  tion.Step" /> me
a640: 74 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  thod...  /// </s
a650: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c  ummary>..  /// <
a660: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61  param name="para
a670: 6d 30 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  m0">..  /// This
a680: 20 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 73   is always the s
a690: 74 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 22 53  tring literal "S
a6a0: 74 65 70 22 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70  tep"...  /// </p
a6b0: 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61  aram>..  /// <pa
a6c0: 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e  ram name="args">
a6d0: 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 75  ..  /// The argu
a6e0: 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20 61 67  ments for the ag
a6f0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
a700: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  ...  /// </param
a710: 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
a720: 6e 61 6d 65 3d 22 73 74 65 70 4e 75 6d 62 65 72  name="stepNumber
a730: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 73 74  ">..  /// The st
a740: 65 70 20 6e 75 6d 62 65 72 20 28 6f 6e 65 20 62  ep number (one b
a750: 61 73 65 64 29 2e 20 20 54 68 69 73 20 69 73 20  ased).  This is 
a760: 69 6e 63 72 65 6d 65 6d 74 65 64 20 65 61 63 68  incrememted each
a770: 20 74 69 6d 65 20 74 68 65 0d 0a 20 20 2f 2f 2f   time the..  ///
a780: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
a790: 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69  teDelegateFuncti
a7a0: 6f 6e 2e 53 74 65 70 22 20 2f 3e 20 6d 65 74 68  on.Step" /> meth
a7b0: 6f 64 20 69 73 20 63 61 6c 6c 65 64 2e 0d 0a 20  od is called... 
a7c0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
a7d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
a7e0: 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22 3e 0d  ="contextData">.
a7f0: 0a 20 20 2f 2f 2f 20 41 20 70 6c 61 63 65 68 6f  .  /// A placeho
a800: 6c 64 65 72 20 66 6f 72 20 69 6d 70 6c 65 6d 65  lder for impleme
a810: 6e 74 65 72 73 20 74 6f 20 73 74 6f 72 65 20 63  nters to store c
a820: 6f 6e 74 65 78 74 75 61 6c 20 64 61 74 61 20 70  ontextual data p
a830: 65 72 74 61 69 6e 69 6e 67 0d 0a 20 20 2f 2f 2f  ertaining..  ///
a840: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
a850: 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 2f 2f 2f 20  context...  /// 
a860: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 70 75 62 6c  </param>..  publ
a870: 69 63 20 64 65 6c 65 67 61 74 65 20 76 6f 69 64  ic delegate void
a880: 20 53 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67   SQLiteStepDeleg
a890: 61 74 65 28 0d 0a 20 20 20 20 73 74 72 69 6e 67  ate(..    string
a8a0: 20 70 61 72 61 6d 30 2c 0d 0a 20 20 20 20 6f 62   param0,..    ob
a8b0: 6a 65 63 74 5b 5d 20 61 72 67 73 2c 0d 0a 20 20  ject[] args,..  
a8c0: 20 20 69 6e 74 20 73 74 65 70 4e 75 6d 62 65 72    int stepNumber
a8d0: 2c 0d 0a 20 20 20 20 72 65 66 20 6f 62 6a 65 63  ,..    ref objec
a8e0: 74 20 63 6f 6e 74 65 78 74 44 61 74 61 0d 0a 20  t contextData.. 
a8f0: 20 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f   );....  ///////
a900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20  //////....  /// 
a950: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
a960: 20 54 68 69 73 20 3c 73 65 65 20 63 72 65 66 3d   This <see cref=
a970: 22 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 79  "Delegate" /> ty
a980: 70 65 20 69 73 20 75 73 65 64 20 77 69 74 68 20  pe is used with 
a990: 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20  the..  /// <see 
a9a0: 63 72 65 66 3d 22 53 51 4c 69 74 65 44 65 6c 65  cref="SQLiteDele
a9b0: 67 61 74 65 46 75 6e 63 74 69 6f 6e 2e 46 69 6e  gateFunction.Fin
a9c0: 61 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  al" /> method...
a9d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a9e0: 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e  ..  /// <param n
a9f0: 61 6d 65 3d 22 70 61 72 61 6d 30 22 3e 0d 0a 20  ame="param0">.. 
aa00: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 61 6c 77   /// This is alw
aa10: 61 79 73 20 74 68 65 20 73 74 72 69 6e 67 20 6c  ays the string l
aa20: 69 74 65 72 61 6c 20 22 46 69 6e 61 6c 22 2e 0d  iteral "Final"..
aa30: 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d  .  /// </param>.
aa40: 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61  .  /// <param na
aa50: 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61 22  me="contextData"
aa60: 3e 0d 0a 20 20 2f 2f 2f 20 41 20 70 6c 61 63 65  >..  /// A place
aa70: 68 6f 6c 64 65 72 20 66 6f 72 20 69 6d 70 6c 65  holder for imple
aa80: 6d 65 6e 74 65 72 73 20 74 6f 20 73 74 6f 72 65  menters to store
aa90: 20 63 6f 6e 74 65 78 74 75 61 6c 20 64 61 74 61   contextual data
aaa0: 20 70 65 72 74 61 69 6e 69 6e 67 0d 0a 20 20 2f   pertaining..  /
aab0: 2f 2f 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  // to the curren
aac0: 74 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 2f 2f  t context...  //
aad0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f  / </param>..  //
aae0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 2f  / <returns>..  /
aaf0: 2f 2f 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  // The result of
ab00: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66   the aggregate f
ab10: 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20  unction...  /// 
ab20: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 70 75  </returns>..  pu
ab30: 62 6c 69 63 20 64 65 6c 65 67 61 74 65 20 6f 62  blic delegate ob
ab40: 6a 65 63 74 20 53 51 4c 69 74 65 46 69 6e 61 6c  ject SQLiteFinal
ab50: 44 65 6c 65 67 61 74 65 28 0d 0a 20 20 20 20 73  Delegate(..    s
ab60: 74 72 69 6e 67 20 70 61 72 61 6d 30 2c 0d 0a 20  tring param0,.. 
ab70: 20 20 20 6f 62 6a 65 63 74 20 63 6f 6e 74 65 78     object contex
ab80: 74 44 61 74 61 0d 0a 20 20 29 3b 0d 0a 0d 0a 20  tData..  );.... 
ab90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
abe0: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
abf0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 3c 73  >..  /// This <s
ac00: 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74  ee cref="Delegat
ac10: 65 22 20 2f 3e 20 74 79 70 65 20 69 73 20 75 73  e" /> type is us
ac20: 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 2f  ed with the..  /
ac30: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
ac40: 4c 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63  LiteDelegateFunc
ac50: 74 69 6f 6e 2e 43 6f 6d 70 61 72 65 22 20 2f 3e  tion.Compare" />
ac60: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20   method...  /// 
ac70: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f  </summary>..  //
ac80: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
ac90: 61 72 61 6d 30 22 3e 0d 0a 20 20 2f 2f 2f 20 54  aram0">..  /// T
aca0: 68 69 73 20 69 73 20 61 6c 77 61 79 73 20 74 68  his is always th
acb0: 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  e string literal
acc0: 20 22 43 6f 6d 70 61 72 65 22 2e 0d 0a 20 20 2f   "Compare"...  /
acd0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f  // </param>..  /
ace0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
acf0: 70 61 72 61 6d 31 22 3e 0d 0a 20 20 2f 2f 2f 20  param1">..  /// 
ad00: 54 68 65 20 66 69 72 73 74 20 73 74 72 69 6e 67  The first string
ad10: 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20   to compare...  
ad20: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
ad30: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
ad40: 22 70 61 72 61 6d 32 22 3e 0d 0a 20 20 2f 2f 2f  "param2">..  ///
ad50: 20 54 68 65 20 73 65 63 6f 6e 64 20 73 74 72 6e   The second strn
ad60: 69 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a  ig to compare...
ad70: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
ad80: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
ad90: 0a 20 20 2f 2f 2f 20 41 20 70 6f 73 69 74 69 76  .  /// A positiv
ada0: 65 20 69 6e 74 65 67 65 72 20 69 66 20 74 68 65  e integer if the
adb0: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
adc0: 22 70 61 72 61 6d 31 22 20 2f 3e 20 70 61 72 61  "param1" /> para
add0: 6d 65 74 65 72 20 69 73 0d 0a 20 20 2f 2f 2f 20  meter is..  /// 
ade0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
adf0: 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
ae00: 22 70 61 72 61 6d 32 22 20 2f 3e 20 70 61 72 61  "param2" /> para
ae10: 6d 65 74 65 72 2c 20 61 20 6e 65 67 61 74 69 76  meter, a negativ
ae20: 65 0d 0a 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72  e..  /// integer
ae30: 20 69 66 20 74 68 65 20 3c 70 61 72 61 6d 72 65   if the <paramre
ae40: 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22 20  f name="param1" 
ae50: 2f 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  /> parameter is 
ae60: 6c 65 73 73 20 74 68 61 6e 0d 0a 20 20 2f 2f 2f  less than..  ///
ae70: 20 74 68 65 20 3c 70 61 72 61 6d 72 65 66 20 6e   the <paramref n
ae80: 61 6d 65 3d 22 70 61 72 61 6d 32 22 20 2f 3e 20  ame="param2" /> 
ae90: 70 61 72 61 6d 65 74 65 72 2c 20 6f 72 20 7a 65  parameter, or ze
aea0: 72 6f 20 69 66 20 74 68 65 79 20 61 72 65 0d 0a  ro if they are..
aeb0: 20 20 2f 2f 2f 20 65 71 75 61 6c 2e 0d 0a 20 20    /// equal...  
aec0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
aed0: 20 20 70 75 62 6c 69 63 20 64 65 6c 65 67 61 74    public delegat
aee0: 65 20 69 6e 74 20 53 51 4c 69 74 65 43 6f 6d 70  e int SQLiteComp
aef0: 61 72 65 44 65 6c 65 67 61 74 65 28 0d 0a 20 20  areDelegate(..  
af00: 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d 30 2c    string param0,
af10: 0d 0a 20 20 20 20 73 74 72 69 6e 67 20 70 61 72  ..    string par
af20: 61 6d 31 2c 0d 0a 20 20 20 20 73 74 72 69 6e 67  am1,..    string
af30: 20 70 61 72 61 6d 32 0d 0a 20 20 29 3b 0d 0a 0d   param2..  );...
af40: 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .  /////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af90: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
afa0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
afb0: 52 4b 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  RK..  /// <summa
afc0: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20  ry>..  /// This 
afd0: 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74 73  class implements
afe0: 20 61 20 53 51 4c 69 74 65 20 66 75 6e 63 74 69   a SQLite functi
aff0: 6f 6e 20 75 73 69 6e 67 20 61 20 3c 73 65 65 20  on using a <see 
b000: 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20  cref="Delegate" 
b010: 2f 3e 2e 0d 0a 20 20 2f 2f 2f 20 41 6c 6c 20 74  />...  /// All t
b020: 68 65 20 76 69 72 74 75 61 6c 20 6d 65 74 68 6f  he virtual metho
b030: 64 73 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63  ds of the <see c
b040: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
b050: 69 6f 6e 22 20 2f 3e 20 63 6c 61 73 73 20 61 72  ion" /> class ar
b060: 65 0d 0a 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65  e..  /// impleme
b070: 6e 74 65 64 20 75 73 69 6e 67 20 63 61 6c 6c 73  nted using calls
b080: 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65   to the <see cre
b090: 66 3d 22 53 51 4c 69 74 65 49 6e 76 6f 6b 65 44  f="SQLiteInvokeD
b0a0: 65 6c 65 67 61 74 65 22 20 2f 3e 2c 0d 0a 20 20  elegate" />,..  
b0b0: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
b0c0: 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61 74  QLiteStepDelegat
b0d0: 65 22 20 2f 3e 2c 20 3c 73 65 65 20 63 72 65 66  e" />, <see cref
b0e0: 3d 22 53 51 4c 69 74 65 46 69 6e 61 6c 44 65 6c  ="SQLiteFinalDel
b0f0: 65 67 61 74 65 22 20 2f 3e 2c 0d 0a 20 20 2f 2f  egate" />,..  //
b100: 2f 20 61 6e 64 20 3c 73 65 65 20 63 72 65 66 3d  / and <see cref=
b110: 22 53 51 4c 69 74 65 43 6f 6d 70 61 72 65 44 65  "SQLiteCompareDe
b120: 6c 65 67 61 74 65 22 20 2f 3e 20 73 74 72 6f 6e  legate" /> stron
b130: 67 6c 79 20 74 79 70 65 64 20 64 65 6c 65 67 61  gly typed delega
b140: 74 65 20 74 79 70 65 73 0d 0a 20 20 2f 2f 2f 20  te types..  /// 
b150: 6f 72 20 76 69 61 20 74 68 65 20 3c 73 65 65 20  or via the <see 
b160: 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 2e 44  cref="Delegate.D
b170: 79 6e 61 6d 69 63 49 6e 76 6f 6b 65 22 20 2f 3e  ynamicInvoke" />
b180: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 2f 2f 2f 20   method...  /// 
b190: 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72  The arguments ar
b1a0: 65 20 70 72 65 73 65 6e 74 65 64 20 69 6e 20 74  e presented in t
b1b0: 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68  he same order th
b1c0: 65 79 20 61 70 70 65 61 72 20 69 6e 0d 0a 20 20  ey appear in..  
b1d0: 2f 2f 2f 20 74 68 65 20 61 73 73 6f 63 69 61 74  /// the associat
b1e0: 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
b1f0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e  LiteFunction" />
b200: 20 6d 65 74 68 6f 64 73 20 77 69 74 68 20 6f 6e   methods with on
b210: 65 20 65 78 63 65 70 74 69 6f 6e 3a 0d 0a 20 20  e exception:..  
b220: 2f 2f 2f 20 74 68 65 20 66 69 72 73 74 20 61 72  /// the first ar
b230: 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 6e 61  gument is the na
b240: 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  me of the virtua
b250: 6c 20 6d 65 74 68 6f 64 20 62 65 69 6e 67 20 69  l method being i
b260: 6d 70 6c 65 6d 65 6e 74 65 64 2e 0d 0a 20 20 2f  mplemented...  /
b270: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23  // </summary>..#
b280: 65 6c 73 65 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d  else..  /// <sum
b290: 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69  mary>..  /// Thi
b2a0: 73 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e  s class implemen
b2b0: 74 73 20 61 20 53 51 4c 69 74 65 20 66 75 6e 63  ts a SQLite func
b2c0: 74 69 6f 6e 20 75 73 69 6e 67 20 61 20 3c 73 65  tion using a <se
b2d0: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
b2e0: 22 20 2f 3e 2e 0d 0a 20 20 2f 2f 2f 20 41 6c 6c  " />...  /// All
b2f0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 65 74   the virtual met
b300: 68 6f 64 73 20 6f 66 20 74 68 65 20 3c 73 65 65  hods of the <see
b310: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e   cref="SQLiteFun
b320: 63 74 69 6f 6e 22 20 2f 3e 20 63 6c 61 73 73 20  ction" /> class 
b330: 61 72 65 0d 0a 20 20 2f 2f 2f 20 69 6d 70 6c 65  are..  /// imple
b340: 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 63 61 6c  mented using cal
b350: 6c 73 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ls to the <see c
b360: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 76 6f 6b  ref="SQLiteInvok
b370: 65 44 65 6c 65 67 61 74 65 22 20 2f 3e 2c 0d 0a  eDelegate" />,..
b380: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
b390: 22 53 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67  "SQLiteStepDeleg
b3a0: 61 74 65 22 20 2f 3e 2c 20 3c 73 65 65 20 63 72  ate" />, <see cr
b3b0: 65 66 3d 22 53 51 4c 69 74 65 46 69 6e 61 6c 44  ef="SQLiteFinalD
b3c0: 65 6c 65 67 61 74 65 22 20 2f 3e 2c 0d 0a 20 20  elegate" />,..  
b3d0: 2f 2f 2f 20 61 6e 64 20 3c 73 65 65 20 63 72 65  /// and <see cre
b3e0: 66 3d 22 53 51 4c 69 74 65 43 6f 6d 70 61 72 65  f="SQLiteCompare
b3f0: 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 73 74 72  Delegate" /> str
b400: 6f 6e 67 6c 79 20 74 79 70 65 64 20 64 65 6c 65  ongly typed dele
b410: 67 61 74 65 20 74 79 70 65 73 2e 0d 0a 20 20 2f  gate types...  /
b420: 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73  // The arguments
b430: 20 61 72 65 20 70 72 65 73 65 6e 74 65 64 20 69   are presented i
b440: 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72  n the same order
b450: 20 74 68 65 79 20 61 70 70 65 61 72 20 69 6e 0d   they appear in.
b460: 0a 20 20 2f 2f 2f 20 74 68 65 20 61 73 73 6f 63  .  /// the assoc
b470: 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d  iated <see cref=
b480: 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22  "SQLiteFunction"
b490: 20 2f 3e 20 6d 65 74 68 6f 64 73 20 77 69 74 68   /> methods with
b4a0: 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 3a 0d   one exception:.
b4b0: 0a 20 20 2f 2f 2f 20 74 68 65 20 66 69 72 73 74  .  /// the first
b4c0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65   argument is the
b4d0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72   name of the vir
b4e0: 74 75 61 6c 20 6d 65 74 68 6f 64 20 62 65 69 6e  tual method bein
b4f0: 67 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e 0d 0a  g implemented...
b500: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b510: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 70 75 62 6c  ..#endif..  publ
b520: 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 44  ic class SQLiteD
b530: 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e 20  elegateFunction 
b540: 3a 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  : SQLiteFunction
b550: 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 23 72 65  ..  {..      #re
b560: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
b570: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 2f 2f  stants..      //
b580: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
b590: 20 20 20 2f 2f 2f 20 54 68 69 73 20 65 72 72 6f     /// This erro
b5a0: 72 20 6d 65 73 73 61 67 65 20 69 73 20 75 73 65  r message is use
b5b0: 64 20 62 79 20 74 68 65 20 6f 76 65 72 72 69 64  d by the overrid
b5c0: 64 65 6e 20 76 69 72 74 75 61 6c 20 6d 65 74 68  den virtual meth
b5d0: 6f 64 73 20 77 68 65 6e 0d 0a 20 20 20 20 20 20  ods when..      
b5e0: 2f 2f 2f 20 61 20 72 65 71 75 69 72 65 64 20 3c  /// a required <
b5f0: 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61  see cref="Delega
b600: 74 65 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20  te" /> property 
b610: 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  (e.g...      ///
b620: 20 3c 73 65 65 20 63 72 65 66 3d 22 43 61 6c 6c   <see cref="Call
b630: 62 61 63 6b 31 22 20 2f 3e 20 6f 72 20 3c 73 65  back1" /> or <se
b640: 65 20 63 72 65 66 3d 22 43 61 6c 6c 62 61 63 6b  e cref="Callback
b650: 32 22 20 2f 3e 29 20 68 61 73 20 6e 6f 74 20 62  2" />) has not b
b660: 65 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 73  een..      /// s
b670: 65 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  et...      /// <
b680: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
b690: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
b6a0: 74 72 69 6e 67 20 4e 6f 43 61 6c 6c 62 61 63 6b  tring NoCallback
b6b0: 45 72 72 6f 72 20 3d 20 22 4e 6f 20 5c 22 7b 30  Error = "No \"{0
b6c0: 7d 5c 22 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  }\" callback is 
b6d0: 73 65 74 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  set.";....      
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b730: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
b740: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73  ..      /// This
b750: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
b760: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 76  s used by the ov
b770: 65 72 72 69 64 64 65 6e 20 3c 73 65 65 20 63 72  erridden <see cr
b780: 65 66 3d 22 43 6f 6d 70 61 72 65 22 20 2f 3e 0d  ef="Compare" />.
b790: 0a 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f  .      /// metho
b7a0: 64 20 77 68 65 6e 20 74 68 65 20 72 65 73 75 6c  d when the resul
b7b0: 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  t does not have 
b7c0: 61 20 74 79 70 65 20 6f 66 20 3c 73 65 65 20 63  a type of <see c
b7d0: 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 2e 0d  ref="Int32" />..
b7e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
b7f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72 69  mary>..      pri
b800: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
b810: 67 20 52 65 73 75 6c 74 49 6e 74 33 32 45 72 72  g ResultInt32Err
b820: 6f 72 20 3d 20 22 5c 22 7b 30 7d 5c 22 20 72 65  or = "\"{0}\" re
b830: 73 75 6c 74 20 6d 75 73 74 20 62 65 20 49 6e 74  sult must be Int
b840: 33 32 2e 22 3b 0d 0a 20 20 20 20 20 20 23 65 6e  32.";..      #en
b850: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b860: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b8b0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
b8c0: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
b8d0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
b8e0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
b8f0: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 65 6d  Constructs an em
b900: 70 74 79 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  pty instance of 
b910: 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
b920: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
b930: 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  >..      public 
b940: 53 51 4c 69 74 65 44 65 6c 65 67 61 74 65 46 75  SQLiteDelegateFu
b950: 6e 63 74 69 6f 6e 28 29 0d 0a 20 20 20 20 20 20  nction()..      
b960: 20 20 20 20 3a 20 74 68 69 73 28 6e 75 6c 6c 2c      : this(null,
b970: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b 0d   null)..      {.
b980: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
b990: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
b9a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f  /////....      /
ba00: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
ba10: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
ba20: 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
ba30: 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69  f this class usi
ba40: 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
ba50: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65  ..      /// <see
ba60: 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22   cref="Delegate"
ba70: 20 2f 3e 20 61 73 20 74 68 65 20 3c 73 65 65 20   /> as the <see 
ba80: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
ba90: 74 69 6f 6e 22 20 2f 3e 0d 0a 20 20 20 20 20 20  tion" />..      
baa0: 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
bab0: 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  on...      /// <
bac0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
bad0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
bae0: 3d 22 63 61 6c 6c 62 61 63 6b 31 22 3e 0d 0a 20  ="callback1">.. 
baf0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
bb00: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
bb10: 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64 20  " /> to be used 
bb20: 66 6f 72 20 61 6c 6c 20 63 61 6c 6c 73 20 69 6e  for all calls in
bb30: 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  to the..      //
bb40: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 76  / <see cref="Inv
bb50: 6f 6b 65 22 20 2f 3e 2c 20 3c 73 65 65 20 63 72  oke" />, <see cr
bb60: 65 66 3d 22 53 74 65 70 22 20 2f 3e 2c 20 61 6e  ef="Step" />, an
bb70: 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  d..      /// <se
bb80: 65 20 63 72 65 66 3d 22 43 6f 6d 70 61 72 65 22  e cref="Compare"
bb90: 20 2f 3e 20 76 69 72 74 75 61 6c 20 6d 65 74 68   /> virtual meth
bba0: 6f 64 73 20 6e 65 65 64 65 64 20 62 79 20 74 68  ods needed by th
bbb0: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  e..      /// <se
bbc0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
bbd0: 6e 63 74 69 6f 6e 22 20 2f 3e 20 62 61 73 65 20  nction" /> base 
bbe0: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 2f 2f  class...      //
bbf0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
bc00: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
bc10: 65 3d 22 63 61 6c 6c 62 61 63 6b 32 22 3e 0d 0a  e="callback2">..
bc20: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
bc30: 65 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74  ee cref="Delegat
bc40: 65 22 20 2f 3e 20 74 6f 20 62 65 20 75 73 65 64  e" /> to be used
bc50: 20 66 6f 72 20 61 6c 6c 20 63 61 6c 6c 73 20 69   for all calls i
bc60: 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  nto the..      /
bc70: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69  // <see cref="Fi
bc80: 6e 61 6c 22 20 2f 3e 20 76 69 72 74 75 61 6c 20  nal" /> virtual 
bc90: 6d 65 74 68 6f 64 73 20 6e 65 65 64 65 64 20 62  methods needed b
bca0: 79 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  y the..      ///
bcb0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
bcc0: 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 62  teFunction" /> b
bcd0: 61 73 65 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  ase class...    
bce0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
bcf0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
bd00: 69 74 65 44 65 6c 65 67 61 74 65 46 75 6e 63 74  iteDelegateFunct
bd10: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
bd20: 44 65 6c 65 67 61 74 65 20 63 61 6c 6c 62 61 63  Delegate callbac
bd30: 6b 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 44  k1,..          D
bd40: 65 6c 65 67 61 74 65 20 63 61 6c 6c 62 61 63 6b  elegate callback
bd50: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  2..          )..
bd60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bd70: 20 20 20 74 68 69 73 2e 63 61 6c 6c 62 61 63 6b     this.callback
bd80: 31 20 3d 20 63 61 6c 6c 62 61 63 6b 31 3b 0d 0a  1 = callback1;..
bd90: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63            this.c
bda0: 61 6c 6c 62 61 63 6b 32 20 3d 20 63 61 6c 6c 62  allback2 = callb
bdb0: 61 63 6b 32 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ack2;..      }..
bdc0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
bdd0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
bde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23 72 65  ///....      #re
be30: 67 69 6f 6e 20 50 72 6f 74 65 63 74 65 64 20 4d  gion Protected M
be40: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 2f 2f  ethods..      //
be50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
be60: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
be70: 68 65 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d  he list of argum
be80: 65 6e 74 73 20 66 6f 72 20 74 68 65 20 3c 73 65  ents for the <se
be90: 65 20 63 72 65 66 3d 22 49 6e 76 6f 6b 65 22 20  e cref="Invoke" 
bea0: 2f 3e 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20  /> method,..    
beb0: 20 20 2f 2f 2f 20 61 73 20 61 6e 20 3c 73 65 65    /// as an <see
bec0: 20 63 72 65 66 3d 22 41 72 72 61 79 22 20 2f 3e   cref="Array" />
bed0: 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 4f   of <see cref="O
bee0: 62 6a 65 63 74 22 20 2f 3e 2e 20 20 54 68 65 20  bject" />.  The 
bef0: 66 69 72 73 74 0d 0a 20 20 20 20 20 20 2f 2f 2f  first..      ///
bf00: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6c 77   argument is alw
bf10: 61 79 73 20 74 68 65 20 6c 69 74 65 72 61 6c 20  ays the literal 
bf20: 73 74 72 69 6e 67 20 22 49 6e 76 6f 6b 65 22 2e  string "Invoke".
bf30: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
bf40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
bf50: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
bf60: 72 67 73 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  rgs">..      ///
bf70: 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72   The original ar
bf80: 67 75 6d 65 6e 74 73 20 72 65 63 65 69 76 65 64  guments received
bf90: 20 62 79 20 74 68 65 20 3c 73 65 65 20 63 72 65   by the <see cre
bfa0: 66 3d 22 49 6e 76 6f 6b 65 22 20 2f 3e 20 6d 65  f="Invoke" /> me
bfb0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  thod...      ///
bfc0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
bfd0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
bfe0: 3d 22 65 61 72 6c 79 42 6f 75 6e 64 22 3e 0d 0a  ="earlyBound">..
bff0: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
c000: 72 6f 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ro if the return
c010: 65 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ed arguments are
c020: 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 75 73 65   going to be use
c030: 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  d with the..    
c040: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
c050: 22 53 51 4c 69 74 65 49 6e 76 6f 6b 65 44 65 6c  "SQLiteInvokeDel
c060: 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 3b 20  egate" /> type; 
c070: 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e  otherwise, zero.
c080: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ..      /// </pa
c090: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ram>..      /// 
c0a0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
c0b0: 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e   /// The argumen
c0c0: 74 73 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  ts to pass to th
c0d0: 65 20 63 6f 6e 66 69 67 75 72 65 64 20 3c 73 65  e configured <se
c0e0: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
c0f0: 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  " />...      ///
c100: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
c110: 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
c120: 74 75 61 6c 20 6f 62 6a 65 63 74 5b 5d 20 47 65  tual object[] Ge
c130: 74 49 6e 76 6f 6b 65 41 72 67 73 28 0d 0a 20 20  tInvokeArgs(..  
c140: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d          object[]
c150: 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20   args,..        
c160: 20 20 62 6f 6f 6c 20 65 61 72 6c 79 42 6f 75 6e    bool earlyBoun
c170: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  d..          )..
c180: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c190: 20 20 20 6f 62 6a 65 63 74 5b 5d 20 6e 65 77 41     object[] newA
c1a0: 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  rgs = new object
c1b0: 5b 5d 20 7b 20 22 49 6e 76 6f 6b 65 22 2c 20 61  [] { "Invoke", a
c1c0: 72 67 73 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20  rgs };....      
c1d0: 20 20 20 20 69 66 20 28 21 65 61 72 6c 79 42 6f      if (!earlyBo
c1e0: 75 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  und)..          
c1f0: 20 20 20 20 6e 65 77 41 72 67 73 20 3d 20 6e 65      newArgs = ne
c200: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 6e 65 77  w object[] { new
c210: 41 72 67 73 20 7d 3b 20 2f 2f 20 57 52 41 50 0d  Args }; // WRAP.
c220: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
c230: 75 72 6e 20 6e 65 77 41 72 67 73 3b 0d 0a 20 20  urn newArgs;..  
c240: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
c250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c290: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c2a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
c2b0: 0a 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  .      /// Retur
c2c0: 6e 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61  ns the list of a
c2d0: 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65  rguments for the
c2e0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74 65 70   <see cref="Step
c2f0: 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 0d 0a 20 20  " /> method,..  
c300: 20 20 20 20 2f 2f 2f 20 61 73 20 61 6e 20 3c 73      /// as an <s
c310: 65 65 20 63 72 65 66 3d 22 41 72 72 61 79 22 20  ee cref="Array" 
c320: 2f 3e 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  /> of <see cref=
c330: 22 4f 62 6a 65 63 74 22 20 2f 3e 2e 20 20 54 68  "Object" />.  Th
c340: 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20 2f  e first..      /
c350: 2f 2f 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  // argument is a
c360: 6c 77 61 79 73 20 74 68 65 20 6c 69 74 65 72 61  lways the litera
c370: 6c 20 73 74 72 69 6e 67 20 22 53 74 65 70 22 2e  l string "Step".
c380: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
c390: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
c3a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
c3b0: 72 67 73 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  rgs">..      ///
c3c0: 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72   The original ar
c3d0: 67 75 6d 65 6e 74 73 20 72 65 63 65 69 76 65 64  guments received
c3e0: 20 62 79 20 74 68 65 20 3c 73 65 65 20 63 72 65   by the <see cre
c3f0: 66 3d 22 53 74 65 70 22 20 2f 3e 20 6d 65 74 68  f="Step" /> meth
c400: 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  od...      /// <
c410: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f  /param>..      /
c420: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
c430: 73 74 65 70 4e 75 6d 62 65 72 22 3e 0d 0a 20 20  stepNumber">..  
c440: 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 65 70      /// The step
c450: 20 6e 75 6d 62 65 72 20 28 6f 6e 65 20 62 61 73   number (one bas
c460: 65 64 29 2e 20 20 54 68 69 73 20 69 73 20 69 6e  ed).  This is in
c470: 63 72 65 6d 65 6d 74 65 64 20 65 61 63 68 20 74  crememted each t
c480: 69 6d 65 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  ime the..      /
c490: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74  // <see cref="St
c4a0: 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64 20 69 73  ep" /> method is
c4b0: 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20   called...      
c4c0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
c4d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
c4e0: 61 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61  ame="contextData
c4f0: 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  ">..      /// A 
c500: 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20  placeholder for 
c510: 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20  implementers to 
c520: 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c  store contextual
c530: 20 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67   data pertaining
c540: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 74  ..      /// to t
c550: 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65  he current conte
c560: 78 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  xt...      /// <
c570: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f  /param>..      /
c580: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
c590: 65 61 72 6c 79 42 6f 75 6e 64 22 3e 0d 0a 20 20  earlyBound">..  
c5a0: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
c5b0: 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64   if the returned
c5c0: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 67   arguments are g
c5d0: 6f 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20  oing to be used 
c5e0: 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20  with the..      
c5f0: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
c600: 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61 74  QLiteStepDelegat
c610: 65 22 20 2f 3e 20 74 79 70 65 3b 20 6f 74 68 65  e" /> type; othe
c620: 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20  rwise, zero...  
c630: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
c640: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74  ..      /// <ret
c650: 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  urns>..      ///
c660: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74   The arguments t
c670: 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 63 6f  o pass to the co
c680: 6e 66 69 67 75 72 65 64 20 3c 73 65 65 20 63 72  nfigured <see cr
c690: 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f 3e  ef="Delegate" />
c6a0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  ...      /// </r
c6b0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70  eturns>..      p
c6c0: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
c6d0: 20 6f 62 6a 65 63 74 5b 5d 20 47 65 74 53 74 65   object[] GetSte
c6e0: 70 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  pArgs(..        
c6f0: 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 2c    object[] args,
c700: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
c710: 73 74 65 70 4e 75 6d 62 65 72 2c 0d 0a 20 20 20  stepNumber,..   
c720: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6f         object co
c730: 6e 74 65 78 74 44 61 74 61 2c 0d 0a 20 20 20 20  ntextData,..    
c740: 20 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c 79        bool early
c750: 42 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  Bound..         
c760: 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20   )..      {..   
c770: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20         object[] 
c780: 6e 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62  newArgs = new ob
c790: 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  ject[] {..      
c7a0: 20 20 20 20 20 20 20 20 22 53 74 65 70 22 2c 20          "Step", 
c7b0: 61 72 67 73 2c 20 73 74 65 70 4e 75 6d 62 65 72  args, stepNumber
c7c0: 2c 20 63 6f 6e 74 65 78 74 44 61 74 61 0d 0a 20  , contextData.. 
c7d0: 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20           };.... 
c7e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 65 61           if (!ea
c7f0: 72 6c 79 42 6f 75 6e 64 29 0d 0a 20 20 20 20 20  rlyBound)..     
c800: 20 20 20 20 20 20 20 20 20 6e 65 77 41 72 67 73           newArgs
c810: 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20   = new object[] 
c820: 7b 20 6e 65 77 41 72 67 73 20 7d 3b 20 2f 2f 20  { newArgs }; // 
c830: 57 52 41 50 0d 0a 0d 0a 20 20 20 20 20 20 20 20  WRAP....        
c840: 20 20 72 65 74 75 72 6e 20 6e 65 77 41 72 67 73    return newArgs
c850: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
c860: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c8b0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
c8c0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
c8d0: 55 70 64 61 74 65 73 20 74 68 65 20 6f 75 74 70  Updates the outp
c8e0: 75 74 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72  ut arguments for
c8f0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
c900: 53 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64 2c  Step" /> method,
c910: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 75 73 69 6e  ..      /// usin
c920: 67 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  g an <see cref="
c930: 41 72 72 61 79 22 20 2f 3e 20 6f 66 20 3c 73 65  Array" /> of <se
c940: 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 22 20  e cref="Object" 
c950: 2f 3e 2e 20 20 54 68 65 20 66 69 72 73 74 0d 0a  />.  The first..
c960: 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65        /// argume
c970: 6e 74 20 69 73 20 61 6c 77 61 79 73 20 74 68 65  nt is always the
c980: 20 6c 69 74 65 72 61 6c 20 73 74 72 69 6e 67 20   literal string 
c990: 22 53 74 65 70 22 2e 20 20 43 75 72 72 65 6e 74  "Step".  Current
c9a0: 6c 79 2c 20 6f 6e 6c 79 20 74 68 65 0d 0a 20 20  ly, only the..  
c9b0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 72 65      /// <paramre
c9c0: 66 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 44  f name="contextD
c9d0: 61 74 61 22 20 2f 3e 20 70 61 72 61 6d 65 74 65  ata" /> paramete
c9e0: 72 20 69 73 20 75 70 64 61 74 65 64 2e 0d 0a 20  r is updated... 
c9f0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
ca00: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ry>..      /// <
ca10: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73  param name="args
ca20: 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  ">..      /// Th
ca30: 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d  e original argum
ca40: 65 6e 74 73 20 72 65 63 65 69 76 65 64 20 62 79  ents received by
ca50: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
ca60: 53 74 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Step" /> method.
ca70: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ..      /// </pa
ca80: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ram>..      /// 
ca90: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
caa0: 74 65 78 74 44 61 74 61 22 3e 0d 0a 20 20 20 20  textData">..    
cab0: 20 20 2f 2f 2f 20 41 20 70 6c 61 63 65 68 6f 6c    /// A placehol
cac0: 64 65 72 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e  der for implemen
cad0: 74 65 72 73 20 74 6f 20 73 74 6f 72 65 20 63 6f  ters to store co
cae0: 6e 74 65 78 74 75 61 6c 20 64 61 74 61 20 70 65  ntextual data pe
caf0: 72 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20  rtaining..      
cb00: 2f 2f 2f 20 74 6f 20 74 68 65 20 63 75 72 72 65  /// to the curre
cb10: 6e 74 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20  nt context...   
cb20: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
cb30: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
cb40: 6d 20 6e 61 6d 65 3d 22 65 61 72 6c 79 42 6f 75  m name="earlyBou
cb50: 6e 64 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  nd">..      /// 
cb60: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  Non-zero if the 
cb70: 72 65 74 75 72 6e 65 64 20 61 72 67 75 6d 65 6e  returned argumen
cb80: 74 73 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  ts are going to 
cb90: 62 65 20 75 73 65 64 20 77 69 74 68 20 74 68 65  be used with the
cba0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65  ..      /// <see
cbb0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 53 74 65   cref="SQLiteSte
cbc0: 70 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 79  pDelegate" /> ty
cbd0: 70 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 7a  pe; otherwise, z
cbe0: 65 72 6f 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ero...      /// 
cbf0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
cc00: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
cc10: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 67       /// The arg
cc20: 75 6d 65 6e 74 73 20 74 6f 20 70 61 73 73 20 74  uments to pass t
cc30: 6f 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64  o the configured
cc40: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 6c 65   <see cref="Dele
cc50: 67 61 74 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 20  gate" />...     
cc60: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
cc70: 0a 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64  .      protected
cc80: 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 55 70   virtual void Up
cc90: 64 61 74 65 53 74 65 70 41 72 67 73 28 0d 0a 20  dateStepArgs(.. 
cca0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b           object[
ccb0: 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20  ] args,..       
ccc0: 20 20 20 72 65 66 20 6f 62 6a 65 63 74 20 63 6f     ref object co
ccd0: 6e 74 65 78 74 44 61 74 61 2c 0d 0a 20 20 20 20  ntextData,..    
cce0: 20 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c 79        bool early
ccf0: 42 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  Bound..         
cd00: 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20   )..      {..   
cd10: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20         object[] 
cd20: 6e 65 77 41 72 67 73 3b 0d 0a 0d 0a 20 20 20 20  newArgs;....    
cd30: 20 20 20 20 20 20 69 66 20 28 65 61 72 6c 79 42        if (earlyB
cd40: 6f 75 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20  ound)..         
cd50: 20 20 20 20 20 6e 65 77 41 72 67 73 20 3d 20 61       newArgs = a
cd60: 72 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs;..          
cd70: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
cd80: 20 20 20 20 6e 65 77 41 72 67 73 20 3d 20 61 72      newArgs = ar
cd90: 67 73 5b 30 5d 20 61 73 20 6f 62 6a 65 63 74 5b  gs[0] as object[
cda0: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
cdb0: 69 66 20 28 6e 65 77 41 72 67 73 20 3d 3d 20 6e  if (newArgs == n
cdc0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
cdd0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
cde0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74           context
cdf0: 44 61 74 61 20 3d 20 6e 65 77 41 72 67 73 5b 6e  Data = newArgs[n
ce00: 65 77 41 72 67 73 2e 4c 65 6e 67 74 68 20 2d 20  ewArgs.Length - 
ce10: 31 5d 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  1];..      }....
ce20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ce30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ce70: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
ce80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
ce90: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6c 69  / Returns the li
cea0: 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
ceb0: 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63 72 65  for the <see cre
cec0: 66 3d 22 46 69 6e 61 6c 22 20 2f 3e 20 6d 65 74  f="Final" /> met
ced0: 68 6f 64 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  hod,..      /// 
cee0: 61 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d  as an <see cref=
cef0: 22 41 72 72 61 79 22 20 2f 3e 20 6f 66 20 3c 73  "Array" /> of <s
cf00: 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 22  ee cref="Object"
cf10: 20 2f 3e 2e 20 20 54 68 65 20 66 69 72 73 74 0d   />.  The first.
cf20: 0a 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d  .      /// argum
cf30: 65 6e 74 20 69 73 20 61 6c 77 61 79 73 20 74 68  ent is always th
cf40: 65 20 6c 69 74 65 72 61 6c 20 73 74 72 69 6e 67  e literal string
cf50: 20 22 46 69 6e 61 6c 22 2e 0d 0a 20 20 20 20 20   "Final"...     
cf60: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
cf70: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
cf80: 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 44  m name="contextD
cf90: 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ata">..      ///
cfa0: 20 41 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 66   A placeholder f
cfb0: 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20  or implementers 
cfc0: 74 6f 20 73 74 6f 72 65 20 63 6f 6e 74 65 78 74  to store context
cfd0: 75 61 6c 20 64 61 74 61 20 70 65 72 74 61 69 6e  ual data pertain
cfe0: 69 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74  ing..      /// t
cff0: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f  o the current co
d000: 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 2f 2f  ntext...      //
d010: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
d020: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
d030: 65 3d 22 65 61 72 6c 79 42 6f 75 6e 64 22 3e 0d  e="earlyBound">.
d040: 0a 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  .      /// Non-z
d050: 65 72 6f 20 69 66 20 74 68 65 20 72 65 74 75 72  ero if the retur
d060: 6e 65 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72  ned arguments ar
d070: 65 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 75 73  e going to be us
d080: 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20  ed with the..   
d090: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
d0a0: 3d 22 53 51 4c 69 74 65 46 69 6e 61 6c 44 65 6c  ="SQLiteFinalDel
d0b0: 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 3b 20  egate" /> type; 
d0c0: 6f 74 68 65 72 77 69 73 65 2c 20 7a 65 72 6f 2e  otherwise, zero.
d0d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ..      /// </pa
d0e0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ram>..      /// 
d0f0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
d100: 20 2f 2f 2f 20 54 68 65 20 61 72 67 75 6d 65 6e   /// The argumen
d110: 74 73 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  ts to pass to th
d120: 65 20 63 6f 6e 66 69 67 75 72 65 64 20 3c 73 65  e configured <se
d130: 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
d140: 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  " />...      ///
d150: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
d160: 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
d170: 74 75 61 6c 20 6f 62 6a 65 63 74 5b 5d 20 47 65  tual object[] Ge
d180: 74 46 69 6e 61 6c 41 72 67 73 28 0d 0a 20 20 20  tFinalArgs(..   
d190: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6f         object co
d1a0: 6e 74 65 78 74 44 61 74 61 2c 0d 0a 20 20 20 20  ntextData,..    
d1b0: 20 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c 79        bool early
d1c0: 42 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  Bound..         
d1d0: 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20   )..      {..   
d1e0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20         object[] 
d1f0: 6e 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62  newArgs = new ob
d200: 6a 65 63 74 5b 5d 20 7b 20 22 46 69 6e 61 6c 22  ject[] { "Final"
d210: 2c 20 63 6f 6e 74 65 78 74 44 61 74 61 20 7d 3b  , contextData };
d220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
d230: 20 28 21 65 61 72 6c 79 42 6f 75 6e 64 29 0d 0a   (!earlyBound)..
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
d250: 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62 6a 65  wArgs = new obje
d260: 63 74 5b 5d 20 7b 20 6e 65 77 41 72 67 73 20 7d  ct[] { newArgs }
d270: 3b 20 2f 2f 20 57 52 41 50 0d 0a 0d 0a 20 20 20  ; // WRAP....   
d280: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
d290: 77 41 72 67 73 3b 0d 0a 20 20 20 20 20 20 7d 0d  wArgs;..      }.
d2a0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  //....      /// 
d300: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d310: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
d320: 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
d330: 74 73 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20  ts for the <see 
d340: 63 72 65 66 3d 22 43 6f 6d 70 61 72 65 22 20 2f  cref="Compare" /
d350: 3e 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20 20  > method,..     
d360: 20 2f 2f 2f 20 61 73 20 61 6e 20 3c 73 65 65 20   /// as an <see 
d370: 63 72 65 66 3d 22 41 72 72 61 79 22 20 2f 3e 20  cref="Array" /> 
d380: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 4f 62  of <see cref="Ob
d390: 6a 65 63 74 22 20 2f 3e 2e 20 20 54 68 65 20 66  ject" />.  The f
d3a0: 69 72 73 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  irst..      /// 
d3b0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 6c 77 61  argument is alwa
d3c0: 79 73 20 74 68 65 20 6c 69 74 65 72 61 6c 20 73  ys the literal s
d3d0: 74 72 69 6e 67 20 22 43 6f 6d 70 61 72 65 22 2e  tring "Compare".
d3e0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
d3f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
d400: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
d410: 61 72 61 6d 31 22 3e 0d 0a 20 20 20 20 20 20 2f  aram1">..      /
d420: 2f 2f 20 54 68 65 20 66 69 72 73 74 20 73 74 72  // The first str
d430: 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d  ing to compare..
d440: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
d450: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
d460: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61  param name="para
d470: 6d 32 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  m2">..      /// 
d480: 54 68 65 20 73 65 63 6f 6e 64 20 73 74 72 6e 69  The second strni
d490: 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20  g to compare... 
d4a0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
d4b0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  >..      /// <pa
d4c0: 72 61 6d 20 6e 61 6d 65 3d 22 65 61 72 6c 79 42  ram name="earlyB
d4d0: 6f 75 6e 64 22 3e 0d 0a 20 20 20 20 20 20 2f 2f  ound">..      //
d4e0: 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
d4f0: 65 20 72 65 74 75 72 6e 65 64 20 61 72 67 75 6d  e returned argum
d500: 65 6e 74 73 20 61 72 65 20 67 6f 69 6e 67 20 74  ents are going t
d510: 6f 20 62 65 20 75 73 65 64 20 77 69 74 68 20 74  o be used with t
d520: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  he..      /// <s
d530: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
d540: 6f 6d 70 61 72 65 44 65 6c 65 67 61 74 65 22 20  ompareDelegate" 
d550: 2f 3e 20 74 79 70 65 3b 20 6f 74 68 65 72 77 69  /> type; otherwi
d560: 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  se, zero...     
d570: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
d580: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
d590: 73 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  s>..      /// Th
d5a0: 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 70  e arguments to p
d5b0: 61 73 73 20 74 6f 20 74 68 65 20 63 6f 6e 66 69  ass to the confi
d5c0: 67 75 72 65 64 20 3c 73 65 65 20 63 72 65 66 3d  gured <see cref=
d5d0: 22 44 65 6c 65 67 61 74 65 22 20 2f 3e 2e 0d 0a  "Delegate" />...
d5e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
d5f0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70 72 6f 74  rns>..      prot
d600: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 6f 62  ected virtual ob
d610: 6a 65 63 74 5b 5d 20 47 65 74 43 6f 6d 70 61 72  ject[] GetCompar
d620: 65 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  eArgs(..        
d630: 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d 31 2c    string param1,
d640: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
d650: 6e 67 20 70 61 72 61 6d 32 2c 0d 0a 20 20 20 20  ng param2,..    
d660: 20 20 20 20 20 20 62 6f 6f 6c 20 65 61 72 6c 79        bool early
d670: 42 6f 75 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  Bound..         
d680: 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20   )..      {..   
d690: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20         object[] 
d6a0: 6e 65 77 41 72 67 73 20 3d 20 6e 65 77 20 6f 62  newArgs = new ob
d6b0: 6a 65 63 74 5b 5d 20 7b 20 22 43 6f 6d 70 61 72  ject[] { "Compar
d6c0: 65 22 2c 20 70 61 72 61 6d 31 2c 20 70 61 72 61  e", param1, para
d6d0: 6d 32 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  m2 };....       
d6e0: 20 20 20 69 66 20 28 21 65 61 72 6c 79 42 6f 75     if (!earlyBou
d6f0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
d700: 20 20 20 6e 65 77 41 72 67 73 20 3d 20 6e 65 77     newArgs = new
d710: 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 6e 65 77 41   object[] { newA
d720: 72 67 73 20 7d 3b 20 2f 2f 20 57 52 41 50 0d 0a  rgs }; // WRAP..
d730: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
d740: 72 6e 20 6e 65 77 41 72 67 73 3b 0d 0a 20 20 20  rn newArgs;..   
d750: 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64     }..      #end
d760: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
d7c0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
d7d0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
d7e0: 20 20 20 20 70 72 69 76 61 74 65 20 44 65 6c 65      private Dele
d7f0: 67 61 74 65 20 63 61 6c 6c 62 61 63 6b 31 3b 0d  gate callback1;.
d800: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
d810: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
d820: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  The <see cref="D
d830: 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 6f 20 62  elegate" /> to b
d840: 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 63  e used for all c
d850: 61 6c 6c 73 20 69 6e 74 6f 20 74 68 65 0d 0a 20  alls into the.. 
d860: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
d870: 65 66 3d 22 49 6e 76 6f 6b 65 22 20 2f 3e 2c 20  ef="Invoke" />, 
d880: 3c 73 65 65 20 63 72 65 66 3d 22 53 74 65 70 22  <see cref="Step"
d890: 20 2f 3e 2c 20 61 6e 64 0d 0a 20 20 20 20 20 20   />, and..      
d8a0: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 43  /// <see cref="C
d8b0: 6f 6d 70 61 72 65 22 20 2f 3e 20 76 69 72 74 75  ompare" /> virtu
d8c0: 61 6c 20 6d 65 74 68 6f 64 73 20 6e 65 65 64 65  al methods neede
d8d0: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
d8e0: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
d8f0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 20 2f  QLiteFunction" /
d900: 3e 20 62 61 73 65 20 63 6c 61 73 73 2e 0d 0a 20  > base class... 
d910: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
d920: 72 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  ry>..      publi
d930: 63 20 76 69 72 74 75 61 6c 20 44 65 6c 65 67 61  c virtual Delega
d940: 74 65 20 43 61 6c 6c 62 61 63 6b 31 0d 0a 20 20  te Callback1..  
d950: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d960: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 61   get { return ca
d970: 6c 6c 62 61 63 6b 31 3b 20 7d 0d 0a 20 20 20 20  llback1; }..    
d980: 20 20 20 20 20 20 73 65 74 20 7b 20 63 61 6c 6c        set { call
d990: 62 61 63 6b 31 20 3d 20 76 61 6c 75 65 3b 20 7d  back1 = value; }
d9a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
d9b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
da00: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 44 65        private De
da10: 6c 65 67 61 74 65 20 63 61 6c 6c 62 61 63 6b 32  legate callback2
da20: 3b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ;..      /// <su
da30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
da40: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
da50: 22 44 65 6c 65 67 61 74 65 22 20 2f 3e 20 74 6f  "Delegate" /> to
da60: 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c   be used for all
da70: 20 63 61 6c 6c 73 20 69 6e 74 6f 20 74 68 65 0d   calls into the.
da80: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  .      /// <see 
da90: 63 72 65 66 3d 22 46 69 6e 61 6c 22 20 2f 3e 20  cref="Final" /> 
daa0: 76 69 72 74 75 61 6c 20 6d 65 74 68 6f 64 73 20  virtual methods 
dab0: 6e 65 65 64 65 64 20 62 79 20 74 68 65 0d 0a 20  needed by the.. 
dac0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
dad0: 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
dae0: 6f 6e 22 20 2f 3e 20 62 61 73 65 20 63 6c 61 73  on" /> base clas
daf0: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
db00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
db10: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 44  public virtual D
db20: 65 6c 65 67 61 74 65 20 43 61 6c 6c 62 61 63 6b  elegate Callback
db30: 32 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  2..      {..    
db40: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
db50: 72 6e 20 63 61 6c 6c 62 61 63 6b 32 3b 20 7d 0d  rn callback2; }.
db60: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b  .          set {
db70: 20 63 61 6c 6c 62 61 63 6b 32 20 3d 20 76 61 6c   callback2 = val
db80: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ue; }..      }..
db90: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
dba0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
dbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbf0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23 72 65  ///....      #re
dc00: 67 69 6f 6e 20 53 79 73 74 65 6d 2e 44 61 74 61  gion System.Data
dc10: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 75  .SQLite.SQLiteFu
dc20: 6e 63 74 69 6f 6e 20 4f 76 65 72 72 69 64 65 73  nction Overrides
dc30: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
dc40: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
dc50: 20 54 68 69 73 20 76 69 72 74 75 61 6c 20 6d 65   This virtual me
dc60: 74 68 6f 64 20 69 73 20 74 68 65 20 69 6d 70 6c  thod is the impl
dc70: 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 73  ementation for s
dc80: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 73 2e  calar functions.
dc90: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20  ..      /// See 
dca0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
dcb0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 49 6e  QLiteFunction.In
dcc0: 76 6f 6b 65 22 20 2f 3e 20 6d 65 74 68 6f 64 20  voke" /> method 
dcd0: 66 6f 72 20 6d 6f 72 65 0d 0a 20 20 20 20 20 20  for more..      
dce0: 2f 2f 2f 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20  /// details...  
dcf0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
dd00: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  y>..      /// <p
dd10: 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22  aram name="args"
dd20: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
dd30: 20 61 72 67 75 6d 65 6e 74 73 20 66 6f 72 20 74   arguments for t
dd40: 68 65 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69  he scalar functi
dd50: 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  on...      /// <
dd60: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f  /param>..      /
dd70: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
dd80: 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 75      /// The resu
dd90: 6c 74 20 6f 66 20 74 68 65 20 73 63 61 6c 61 72  lt of the scalar
dda0: 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20   function...    
ddb0: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
ddc0: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f  ..      public o
ddd0: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 49  verride object I
dde0: 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20  nvoke(..        
ddf0: 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72 67 73 20    object[] args 
de00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
de10: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a      )..      {..
de20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
de30: 6c 6c 62 61 63 6b 31 20 3d 3d 20 6e 75 6c 6c 29  llback1 == null)
de40: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
de60: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
de70: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
de80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
de90: 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f       HelperMetho
dea0: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
deb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dec0: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
ded0: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
dee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
def0: 20 20 20 4e 6f 43 61 6c 6c 62 61 63 6b 45 72 72     NoCallbackErr
df00: 6f 72 2c 20 22 49 6e 76 6f 6b 65 22 29 29 3b 0d  or, "Invoke"));.
df10: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
df20: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
df30: 49 6e 76 6f 6b 65 44 65 6c 65 67 61 74 65 20 69  InvokeDelegate i
df40: 6e 76 6f 6b 65 44 65 6c 65 67 61 74 65 20 3d 0d  nvokeDelegate =.
df50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
df60: 61 6c 6c 62 61 63 6b 31 20 61 73 20 53 51 4c 69  allback1 as SQLi
df70: 74 65 49 6e 76 6f 6b 65 44 65 6c 65 67 61 74 65  teInvokeDelegate
df80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
df90: 66 20 28 69 6e 76 6f 6b 65 44 65 6c 65 67 61 74  f (invokeDelegat
dfa0: 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
dfb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dfc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69 6e         return in
dfd0: 76 6f 6b 65 44 65 6c 65 67 61 74 65 2e 49 6e 76  vokeDelegate.Inv
dfe0: 6f 6b 65 28 22 49 6e 76 6f 6b 65 22 2c 20 61 72  oke("Invoke", ar
dff0: 67 73 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  gs); /* throw */
e000: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
e010: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
e020: 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20           {..#if 
e030: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
e040: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
e050: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
e060: 20 63 61 6c 6c 62 61 63 6b 31 2e 44 79 6e 61 6d   callback1.Dynam
e070: 69 63 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20  icInvoke(..     
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
e090: 49 6e 76 6f 6b 65 41 72 67 73 28 61 72 67 73 2c  InvokeArgs(args,
e0a0: 20 66 61 6c 73 65 29 29 3b 20 2f 2a 20 74 68 72   false)); /* thr
e0b0: 6f 77 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20  ow */..#else..  
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e0d0: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
e0e0: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
e0f0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
e100: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
e110: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
e120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e160: 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  /....      /// <
e170: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e180: 2f 2f 2f 20 54 68 69 73 20 76 69 72 74 75 61 6c  /// This virtual
e190: 20 6d 65 74 68 6f 64 20 69 73 20 70 61 72 74 20   method is part 
e1a0: 6f 66 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  of the implement
e1b0: 61 74 69 6f 6e 20 66 6f 72 20 61 67 67 72 65 67  ation for aggreg
e1c0: 61 74 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 66  ate..      /// f
e1d0: 75 6e 63 74 69 6f 6e 73 2e 20 20 53 65 65 20 74  unctions.  See t
e1e0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
e1f0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 53 74 65  LiteFunction.Ste
e200: 70 22 20 2f 3e 20 6d 65 74 68 6f 64 0d 0a 20 20  p" /> method..  
e210: 20 20 20 20 2f 2f 2f 20 66 6f 72 20 6d 6f 72 65      /// for more
e220: 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20 20   details...     
e230: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e240: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
e250: 6d 20 6e 61 6d 65 3d 22 61 72 67 73 22 3e 0d 0a  m name="args">..
e260: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72        /// The ar
e270: 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20  guments for the 
e280: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
e290: 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  on...      /// <
e2a0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f  /param>..      /
e2b0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
e2c0: 73 74 65 70 4e 75 6d 62 65 72 22 3e 0d 0a 20 20  stepNumber">..  
e2d0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74 65 70      /// The step
e2e0: 20 6e 75 6d 62 65 72 20 28 6f 6e 65 20 62 61 73   number (one bas
e2f0: 65 64 29 2e 20 20 54 68 69 73 20 69 73 20 69 6e  ed).  This is in
e300: 63 72 65 6d 65 6d 74 65 64 20 65 61 63 68 20 74  crememted each t
e310: 69 6d 65 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  ime the..      /
e320: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 74  // <see cref="St
e330: 65 70 22 20 2f 3e 20 6d 65 74 68 6f 64 20 69 73  ep" /> method is
e340: 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20   called...      
e350: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
e360: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
e370: 61 6d 65 3d 22 63 6f 6e 74 65 78 74 44 61 74 61  ame="contextData
e380: 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 41 20  ">..      /// A 
e390: 70 6c 61 63 65 68 6f 6c 64 65 72 20 66 6f 72 20  placeholder for 
e3a0: 69 6d 70 6c 65 6d 65 6e 74 65 72 73 20 74 6f 20  implementers to 
e3b0: 73 74 6f 72 65 20 63 6f 6e 74 65 78 74 75 61 6c  store contextual
e3c0: 20 64 61 74 61 20 70 65 72 74 61 69 6e 69 6e 67   data pertaining
e3d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 74  ..      /// to t
e3e0: 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65  he current conte
e3f0: 78 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  xt...      /// <
e400: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 70  /param>..      p
e410: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 76  ublic override v
e420: 6f 69 64 20 53 74 65 70 28 0d 0a 20 20 20 20 20  oid Step(..     
e430: 20 20 20 20 20 6f 62 6a 65 63 74 5b 5d 20 61 72       object[] ar
e440: 67 73 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 69  gs,         /* i
e450: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
e460: 69 6e 74 20 73 74 65 70 4e 75 6d 62 65 72 2c 20  int stepNumber, 
e470: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
e480: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6f  .          ref o
e490: 62 6a 65 63 74 20 63 6f 6e 74 65 78 74 44 61 74  bject contextDat
e4a0: 61 20 2f 2a 20 69 6e 2c 20 6f 75 74 20 2a 2f 0d  a /* in, out */.
e4b0: 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20  .          )..  
e4c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e4d0: 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 31 20 3d   if (callback1 =
e4e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
e4f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e500: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
e510: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
e520: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
e530: 20 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70              Help
e540: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
e550: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
e560: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
e570: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
e580: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
e590: 20 20 20 20 20 20 20 20 20 20 4e 6f 43 61 6c 6c            NoCall
e5a0: 62 61 63 6b 45 72 72 6f 72 2c 20 22 53 74 65 70  backError, "Step
e5b0: 22 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  "));..          
e5c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 53  }....          S
e5d0: 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61 74  QLiteStepDelegat
e5e0: 65 20 73 74 65 70 44 65 6c 65 67 61 74 65 20 3d  e stepDelegate =
e5f0: 20 63 61 6c 6c 62 61 63 6b 31 20 61 73 20 53 51   callback1 as SQ
e600: 4c 69 74 65 53 74 65 70 44 65 6c 65 67 61 74 65  LiteStepDelegate
e610: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
e620: 66 20 28 73 74 65 70 44 65 6c 65 67 61 74 65 20  f (stepDelegate 
e630: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
e640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e650: 20 20 20 20 20 73 74 65 70 44 65 6c 65 67 61 74       stepDelegat
e660: 65 2e 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20  e.Invoke(..     
e670: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74               "St
e680: 65 70 22 2c 20 61 72 67 73 2c 20 73 74 65 70 4e  ep", args, stepN
e690: 75 6d 62 65 72 2c 20 72 65 66 20 63 6f 6e 74 65  umber, ref conte
e6a0: 78 74 44 61 74 61 29 3b 20 2f 2a 20 74 68 72 6f  xtData); /* thro
e6b0: 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
e6c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  }..          els
e6d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  e..          {..
e6e0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
e6f0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
e710: 6a 65 63 74 5b 5d 20 6e 65 77 41 72 67 73 20 3d  ject[] newArgs =
e720: 20 47 65 74 53 74 65 70 41 72 67 73 28 0d 0a 20   GetStepArgs(.. 
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e740: 20 61 72 67 73 2c 20 73 74 65 70 4e 75 6d 62 65   args, stepNumbe
e750: 72 2c 20 63 6f 6e 74 65 78 74 44 61 74 61 2c 20  r, contextData, 
e760: 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  false);....     
e770: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 47 4e 4f           /* IGNO
e780: 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  RED */..        
e790: 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 31 2e        callback1.
e7a0: 44 79 6e 61 6d 69 63 49 6e 76 6f 6b 65 28 6e 65  DynamicInvoke(ne
e7b0: 77 41 72 67 73 29 3b 20 2f 2a 20 74 68 72 6f 77  wArgs); /* throw
e7c0: 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
e7d0: 20 20 20 20 20 55 70 64 61 74 65 53 74 65 70 41       UpdateStepA
e7e0: 72 67 73 28 6e 65 77 41 72 67 73 2c 20 72 65 66  rgs(newArgs, ref
e7f0: 20 63 6f 6e 74 65 78 74 44 61 74 61 2c 20 66 61   contextData, fa
e800: 6c 73 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  lse);..#else..  
e810: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e820: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
e830: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
e840: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
e850: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
e860: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
e870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  /....      /// <
e8c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e8d0: 2f 2f 2f 20 54 68 69 73 20 76 69 72 74 75 61 6c  /// This virtual
e8e0: 20 6d 65 74 68 6f 64 20 69 73 20 70 61 72 74 20   method is part 
e8f0: 6f 66 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  of the implement
e900: 61 74 69 6f 6e 20 66 6f 72 20 61 67 67 72 65 67  ation for aggreg
e910: 61 74 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 66  ate..      /// f
e920: 75 6e 63 74 69 6f 6e 73 2e 20 20 53 65 65 20 74  unctions.  See t
e930: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
e940: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 46 69 6e  LiteFunction.Fin
e950: 61 6c 22 20 2f 3e 20 6d 65 74 68 6f 64 0d 0a 20  al" /> method.. 
e960: 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 6d 6f 72       /// for mor
e970: 65 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20  e details...    
e980: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e990: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ..      /// <par
e9a0: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74  am name="context
e9b0: 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 2f 2f  Data">..      //
e9c0: 2f 20 41 20 70 6c 61 63 65 68 6f 6c 64 65 72 20  / A placeholder 
e9d0: 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 65 72 73  for implementers
e9e0: 20 74 6f 20 73 74 6f 72 65 20 63 6f 6e 74 65 78   to store contex
e9f0: 74 75 61 6c 20 64 61 74 61 20 70 65 72 74 61 69  tual data pertai
ea00: 6e 69 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ning..      /// 
ea10: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  to the current c
ea20: 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 2f  ontext...      /
ea30: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
ea40: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
ea50: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
ea60: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 61 67  result of the ag
ea70: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
ea80: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  ...      /// </r
ea90: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 70  eturns>..      p
eaa0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f  ublic override o
eab0: 62 6a 65 63 74 20 46 69 6e 61 6c 28 0d 0a 20 20  bject Final(..  
eac0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
ead0: 6f 6e 74 65 78 74 44 61 74 61 20 2f 2a 20 69 6e  ontextData /* in
eae0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 29   */..          )
eaf0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
eb00: 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
eb10: 6b 32 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  k2 == null)..   
eb20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
eb30: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
eb40: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
eb50: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb70: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
eb80: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
eba0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
ebb0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 6f                No
ebd0: 43 61 6c 6c 62 61 63 6b 45 72 72 6f 72 2c 20 22  CallbackError, "
ebe0: 46 69 6e 61 6c 22 29 29 3b 0d 0a 20 20 20 20 20  Final"));..     
ebf0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ec00: 20 20 20 20 53 51 4c 69 74 65 46 69 6e 61 6c 44      SQLiteFinalD
ec10: 65 6c 65 67 61 74 65 20 66 69 6e 61 6c 44 65 6c  elegate finalDel
ec20: 65 67 61 74 65 20 3d 20 63 61 6c 6c 62 61 63 6b  egate = callback
ec30: 32 20 61 73 20 53 51 4c 69 74 65 46 69 6e 61 6c  2 as SQLiteFinal
ec40: 44 65 6c 65 67 61 74 65 3b 0d 0a 0d 0a 20 20 20  Delegate;....   
ec50: 20 20 20 20 20 20 20 69 66 20 28 66 69 6e 61 6c         if (final
ec60: 44 65 6c 65 67 61 74 65 20 21 3d 20 6e 75 6c 6c  Delegate != null
ec70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
ec90: 74 75 72 6e 20 66 69 6e 61 6c 44 65 6c 65 67 61  turn finalDelega
eca0: 74 65 2e 49 6e 76 6f 6b 65 28 22 46 69 6e 61 6c  te.Invoke("Final
ecb0: 22 2c 20 63 6f 6e 74 65 78 74 44 61 74 61 29 3b  ", contextData);
ecc0: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
ecd0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ece0: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
ecf0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
ed00: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
ed10: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
ed20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 61 6c        return cal
ed30: 6c 62 61 63 6b 31 2e 44 79 6e 61 6d 69 63 49 6e  lback1.DynamicIn
ed40: 76 6f 6b 65 28 47 65 74 46 69 6e 61 6c 41 72 67  voke(GetFinalArg
ed50: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
ed60: 20 20 20 20 20 20 63 6f 6e 74 65 78 74 44 61 74        contextDat
ed70: 61 2c 20 66 61 6c 73 65 29 29 3b 20 2f 2a 20 74  a, false)); /* t
ed80: 68 72 6f 77 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a  hrow */..#else..
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
eda0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
edb0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
edc0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
edd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
ede0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  ///....      ///
ee40: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ee50: 20 20 2f 2f 2f 20 54 68 69 73 20 76 69 72 74 75    /// This virtu
ee60: 61 6c 20 6d 65 74 68 6f 64 20 69 73 20 70 61 72  al method is par
ee70: 74 20 6f 66 20 74 68 65 20 69 6d 70 6c 65 6d 65  t of the impleme
ee80: 6e 74 61 74 69 6f 6e 20 66 6f 72 20 63 6f 6c 6c  ntation for coll
ee90: 61 74 69 6e 67 0d 0a 20 20 20 20 20 20 2f 2f 2f  ating..      ///
eea0: 20 73 65 71 75 65 6e 63 65 73 2e 20 20 53 65 65   sequences.  See
eeb0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
eec0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 43  SQLiteFunction.C
eed0: 6f 6d 70 61 72 65 22 20 2f 3e 20 6d 65 74 68 6f  ompare" /> metho
eee0: 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72  d..      /// for
eef0: 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0d 0a   more details...
ef00: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
ef10: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
ef20: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72  <param name="par
ef30: 61 6d 31 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  am1">..      ///
ef40: 20 54 68 65 20 66 69 72 73 74 20 73 74 72 69 6e   The first strin
ef50: 67 20 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20  g to compare... 
ef60: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
ef70: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  >..      /// <pa
ef80: 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32  ram name="param2
ef90: 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  ">..      /// Th
efa0: 65 20 73 65 63 6f 6e 64 20 73 74 72 6e 69 67 20  e second strnig 
efb0: 74 6f 20 63 6f 6d 70 61 72 65 2e 0d 0a 20 20 20  to compare...   
efc0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
efd0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  .      /// <retu
efe0: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  rns>..      /// 
eff0: 41 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  A positive integ
f000: 65 72 20 69 66 20 74 68 65 20 3c 70 61 72 61 6d  er if the <param
f010: 72 65 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31  ref name="param1
f020: 22 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 20 69  " /> parameter i
f030: 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 67 72 65  s..      /// gre
f040: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 3c 70  ater than the <p
f050: 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 70 61  aramref name="pa
f060: 72 61 6d 32 22 20 2f 3e 20 70 61 72 61 6d 65 74  ram2" /> paramet
f070: 65 72 2c 20 61 20 6e 65 67 61 74 69 76 65 0d 0a  er, a negative..
f080: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
f090: 72 20 69 66 20 74 68 65 20 3c 70 61 72 61 6d 72  r if the <paramr
f0a0: 65 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d 31 22  ef name="param1"
f0b0: 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73   /> parameter is
f0c0: 20 6c 65 73 73 20 74 68 61 6e 0d 0a 20 20 20 20   less than..    
f0d0: 20 20 2f 2f 2f 20 74 68 65 20 3c 70 61 72 61 6d    /// the <param
f0e0: 72 65 66 20 6e 61 6d 65 3d 22 70 61 72 61 6d 32  ref name="param2
f0f0: 22 20 2f 3e 20 70 61 72 61 6d 65 74 65 72 2c 20  " /> parameter, 
f100: 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 79 20  or zero if they 
f110: 61 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 65  are..      /// e
f120: 71 75 61 6c 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  qual...      ///
f130: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
f140: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
f150: 64 65 20 69 6e 74 20 43 6f 6d 70 61 72 65 28 0d  de int Compare(.
f160: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
f170: 67 20 70 61 72 61 6d 31 2c 20 2f 2a 20 69 6e 20  g param1, /* in 
f180: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  */..          st
f190: 72 69 6e 67 20 70 61 72 61 6d 32 20 20 2f 2a 20  ring param2  /* 
f1a0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
f1b0: 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20   )..      {..   
f1c0: 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
f1d0: 61 63 6b 31 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ack1 == null).. 
f1e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f1f0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
f200: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
f210: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
f220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f230: 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e    HelperMethods.
f240: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f260: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
f270: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
f280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f290: 4e 6f 43 61 6c 6c 62 61 63 6b 45 72 72 6f 72 2c  NoCallbackError,
f2a0: 20 22 43 6f 6d 70 61 72 65 22 29 29 3b 0d 0a 20   "Compare"));.. 
f2b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f2c0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
f2d0: 6d 70 61 72 65 44 65 6c 65 67 61 74 65 20 63 6f  mpareDelegate co
f2e0: 6d 70 61 72 65 44 65 6c 65 67 61 74 65 20 3d 0d  mpareDelegate =.
f2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
f300: 61 6c 6c 62 61 63 6b 31 20 61 73 20 53 51 4c 69  allback1 as SQLi
f310: 74 65 43 6f 6d 70 61 72 65 44 65 6c 65 67 61 74  teCompareDelegat
f320: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
f330: 69 66 20 28 63 6f 6d 70 61 72 65 44 65 6c 65 67  if (compareDeleg
f340: 61 74 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ate != null)..  
f350: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f360: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f370: 63 6f 6d 70 61 72 65 44 65 6c 65 67 61 74 65 2e  compareDelegate.
f380: 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20  Invoke(..       
f390: 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6d 70             "Comp
f3a0: 61 72 65 22 2c 20 70 61 72 61 6d 31 2c 20 70 61  are", param1, pa
f3b0: 72 61 6d 32 29 3b 20 2f 2a 20 74 68 72 6f 77 20  ram2); /* throw 
f3c0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  */..          }.
f3d0: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
f3e0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  .          {..#i
f3f0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
f400: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
f410: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
f420: 63 74 20 72 65 73 75 6c 74 20 3d 20 63 61 6c 6c  ct result = call
f430: 62 61 63 6b 31 2e 44 79 6e 61 6d 69 63 49 6e 76  back1.DynamicInv
f440: 6f 6b 65 28 47 65 74 43 6f 6d 70 61 72 65 41 72  oke(GetCompareAr
f450: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
f460: 20 20 20 20 20 20 20 70 61 72 61 6d 31 2c 20 70         param1, p
f470: 61 72 61 6d 32 2c 20 66 61 6c 73 65 29 29 3b 20  aram2, false)); 
f480: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f4a0: 28 72 65 73 75 6c 74 20 69 73 20 69 6e 74 29 0d  (result is int).
f4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f4c0: 20 20 20 72 65 74 75 72 6e 20 28 69 6e 74 29 72     return (int)r
f4d0: 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  esult;....      
f4e0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
f4f0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
f500: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  onException(..  
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f520: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
f530: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
f550: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
f560: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
f580: 73 75 6c 74 49 6e 74 33 32 45 72 72 6f 72 2c 20  sultInt32Error, 
f590: 22 43 6f 6d 70 61 72 65 22 29 29 3b 0d 0a 23 65  "Compare"));..#e
f5a0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
f5b0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
f5c0: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
f5d0: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
f5f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e      }..      #en
f600: 64 72 65 67 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a  dregion..  }....
f610: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f660: 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  ...  /// <summar
f670: 79 3e 0d 0a 20 20 2f 2f 2f 20 45 78 74 65 6e 64  y>..  /// Extend
f680: 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  s SQLiteFunction
f690: 20 61 6e 64 20 61 6c 6c 6f 77 73 20 61 6e 20 69   and allows an i
f6a0: 6e 68 65 72 69 74 65 64 20 63 6c 61 73 73 20 74  nherited class t
f6b0: 6f 20 6f 62 74 61 69 6e 20 74 68 65 20 63 6f 6c  o obtain the col
f6c0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
f6d0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
f6e0: 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e  a function call.
f6f0: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
f700: 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65 6d 61 72  y>..  /// <remar
f710: 6b 73 3e 0d 0a 20 20 2f 2f 2f 20 55 73 65 72 2d  ks>..  /// User-
f720: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
f730: 73 20 63 61 6e 20 63 61 6c 6c 20 74 68 65 20 47  s can call the G
f740: 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65  etCollationSeque
f750: 6e 63 65 28 29 20 6d 65 74 68 6f 64 20 69 6e 20  nce() method in 
f760: 74 68 69 73 20 63 6c 61 73 73 20 61 6e 64 20 75  this class and u
f770: 73 65 20 69 74 20 74 6f 20 63 6f 6d 70 61 72 65  se it to compare
f780: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 63 68 61   strings and cha
f790: 72 20 61 72 72 61 79 73 2e 0d 0a 20 20 2f 2f 2f  r arrays...  ///
f7a0: 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 70   </remarks>..  p
f7b0: 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69  ublic class SQLi
f7c0: 74 65 46 75 6e 63 74 69 6f 6e 45 78 20 3a 20 53  teFunctionEx : S
f7d0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20  QLiteFunction.. 
f7e0: 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   {..    /// <sum
f7f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4f  mary>..    /// O
f800: 62 74 61 69 6e 73 20 74 68 65 20 63 6f 6c 6c 61  btains the colla
f810: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 6e  ting sequence in
f820: 20 65 66 66 65 63 74 20 66 6f 72 20 74 68 65 20   effect for the 
f830: 67 69 76 65 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d  given function..
f840: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
f850: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
f860: 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e  turns></returns>
f870: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
f880: 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
f890: 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65  e GetCollationSe
f8a0: 71 75 65 6e 63 65 28 29 0d 0a 20 20 20 20 7b 0d  quence()..    {.
f8b0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 62  .      return _b
f8c0: 61 73 65 2e 47 65 74 43 6f 6c 6c 61 74 69 6f 6e  ase.GetCollation
f8d0: 53 65 71 75 65 6e 63 65 28 74 68 69 73 2c 20 5f  Sequence(this, _
f8e0: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
f8f0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
f900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f950: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
f960: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
f970: 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d  le "Pattern" Mem
f980: 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61 74  bers..    privat
f990: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
f9a0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76 6f  ..    private vo
f9b0: 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  id CheckDisposed
f9c0: 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  () /* throw */..
f9d0: 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57      {..#if THROW
f9e0: 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20  _ON_DISPOSED..  
f9f0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
fa00: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
fa10: 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
fa20: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
fa30: 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65  on(typeof(SQLite
fa40: 46 75 6e 63 74 69 6f 6e 45 78 29 2e 4e 61 6d 65  FunctionEx).Name
fa50: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
fa60: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
fa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fac0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
fad0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fae0: 20 20 20 2f 2f 2f 20 43 6c 65 61 6e 73 20 75 70     /// Cleans up
faf0: 20 72 65 73 6f 75 72 63 65 73 20 28 6e 61 74 69   resources (nati
fb00: 76 65 20 61 6e 64 20 6d 61 6e 61 67 65 64 29 20  ve and managed) 
fb10: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
fb20: 74 68 65 20 63 75 72 72 65 6e 74 20 69 6e 73 74  the current inst
fb30: 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ance...    /// <
fb40: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
fb50: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
fb60: 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20  disposing">..   
fb70: 20 2f 2f 2f 20 5a 65 72 6f 20 77 68 65 6e 20 62   /// Zero when b
fb80: 65 69 6e 67 20 64 69 73 70 6f 73 65 64 20 76 69  eing disposed vi
fb90: 61 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63  a garbage collec
fba0: 74 69 6f 6e 3b 20 6f 74 68 65 72 77 69 73 65 2c  tion; otherwise,
fbb0: 20 6e 6f 6e 2d 7a 65 72 6f 2e 0d 0a 20 20 20 20   non-zero...    
fbc0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
fbd0: 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65 72    protected over
fbe0: 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73  ride void Dispos
fbf0: 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67  e(bool disposing
fc00: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
fc10: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
fc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
fc30: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
fc40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
fc60: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fc80: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
fc90: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
fca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcd0: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
fce0: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
fcf0: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
fd10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
fd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd30: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
fd40: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd80: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
fd90: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
fda0: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
fdb0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdf0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
fe00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
fe10: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
fe20: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
fe30: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 44 69           base.Di
fe40: 73 70 6f 73 65 28 64 69 73 70 6f 73 69 6e 67 29  spose(disposing)
fe50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fe60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
fe70: 20 2f 2f 20 4e 4f 54 45 3a 20 45 76 65 72 79 74   // NOTE: Everyt
fe80: 68 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 66  hing should be f
fe90: 75 6c 6c 79 20 64 69 73 70 6f 73 65 64 20 61 74  ully disposed at
fea0: 20 74 68 69 73 20 70 6f 69 6e 74 2e 0d 0a 20 20   this point...  
feb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
fec0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
fed0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
fee0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
fef0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
ff00: 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }....  /// <summ
ff10: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20  ary>..  /// The 
ff20: 74 79 70 65 20 6f 66 20 75 73 65 72 2d 64 65 66  type of user-def
ff30: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ined function to
ff40: 20 64 65 63 6c 61 72 65 0d 0a 20 20 2f 2f 2f 20   declare..  /// 
ff50: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75  </summary>..  pu
ff60: 62 6c 69 63 20 65 6e 75 6d 20 46 75 6e 63 74 69  blic enum Functi
ff70: 6f 6e 54 79 70 65 0d 0a 20 20 7b 0d 0a 20 20 20  onType..  {..   
ff80: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
ff90: 20 20 20 20 2f 2f 2f 20 53 63 61 6c 61 72 20 66      /// Scalar f
ffa0: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 64 65 73  unctions are des
ffb0: 69 67 6e 65 64 20 74 6f 20 62 65 20 63 61 6c 6c  igned to be call
ffc0: 65 64 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20  ed and return a 
ffd0: 72 65 73 75 6c 74 20 69 6d 6d 65 64 69 61 74 65  result immediate
ffe0: 6c 79 2e 20 20 45 78 61 6d 70 6c 65 73 20 69 6e  ly.  Examples in
fff0: 63 6c 75 64 65 20 41 42 53 28 29 2c 20 55 70 70  clude ABS(), Upp
10000 65 72 28 29 2c 20 4c 6f 77 65 72 28 29 2c 20 65  er(), Lower(), e
10010 74 63 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  tc...    /// </s
10020 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 53 63 61  ummary>..    Sca
10030 6c 61 72 20 3d 20 30 2c 0d 0a 20 20 20 20 2f 2f  lar = 0,..    //
10040 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10050 20 2f 2f 2f 20 41 67 67 72 65 67 61 74 65 20 66   /// Aggregate f
10060 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 64 65 73  unctions are des
10070 69 67 6e 65 64 20 74 6f 20 61 63 63 75 6d 75 6c  igned to accumul
10080 61 74 65 20 64 61 74 61 20 75 6e 74 69 6c 20 74  ate data until t
10090 68 65 20 65 6e 64 20 6f 66 20 61 20 63 61 6c 6c  he end of a call
100a0 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
100b0 20 61 20 72 65 73 75 6c 74 20 67 6c 65 61 6e 65   a result gleane
100c0 64 20 66 72 6f 6d 20 74 68 65 20 61 63 63 75 6d  d from the accum
100d0 75 6c 61 74 65 64 20 64 61 74 61 2e 0d 0a 20 20  ulated data...  
100e0 20 20 2f 2f 2f 20 45 78 61 6d 70 6c 65 73 20 69    /// Examples i
100f0 6e 63 6c 75 64 65 20 53 55 4d 28 29 2c 20 43 4f  nclude SUM(), CO
10100 55 4e 54 28 29 2c 20 41 56 47 28 29 2c 20 65 74  UNT(), AVG(), et
10110 63 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  c...    /// </su
10120 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 41 67 67 72  mmary>..    Aggr
10130 65 67 61 74 65 20 3d 20 31 2c 0d 0a 20 20 20 20  egate = 1,..    
10140 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10150 20 20 20 2f 2f 2f 20 43 6f 6c 6c 61 74 69 6e 67     /// Collating
10160 20 73 65 71 75 65 6e 63 65 73 20 61 72 65 20 75   sequences are u
10170 73 65 64 20 74 6f 20 73 6f 72 74 20 74 65 78 74  sed to sort text
10180 75 61 6c 20 64 61 74 61 20 69 6e 20 61 20 63 75  ual data in a cu
10190 73 74 6f 6d 20 6d 61 6e 6e 65 72 2c 20 61 6e 64  stom manner, and
101a0 20 61 70 70 65 61 72 20 69 6e 20 61 6e 20 4f 52   appear in an OR
101b0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 20  DER BY clause.  
101c0 54 79 70 69 63 61 6c 6c 79 20 74 65 78 74 20 69  Typically text i
101d0 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 69 73  n an ORDER BY is
101e0 0d 0a 20 20 20 20 2f 2f 2f 20 73 6f 72 74 65 64  ..    /// sorted
101f0 20 75 73 69 6e 67 20 61 20 73 74 72 61 69 67 68   using a straigh
10200 74 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69  t case-insensiti
10210 76 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ve comparison fu
10220 6e 63 74 69 6f 6e 2e 20 20 43 75 73 74 6f 6d 20  nction.  Custom 
10230 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10240 63 65 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ces can be used 
10250 74 6f 20 61 6c 74 65 72 20 74 68 65 20 62 65 68  to alter the beh
10260 61 76 69 6f 72 20 6f 66 20 74 65 78 74 20 73 6f  avior of text so
10270 72 74 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 69  rting..    /// i
10280 6e 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  n a user-defined
10290 20 6d 61 6e 6e 65 72 2e 0d 0a 20 20 20 20 2f 2f   manner...    //
102a0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
102b0 20 20 43 6f 6c 6c 61 74 69 6f 6e 20 3d 20 32 2c    Collation = 2,
102c0 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c  ..  }....  /// <
102d0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
102e0 41 6e 20 69 6e 74 65 72 6e 61 6c 20 63 61 6c 6c  An internal call
102f0 62 61 63 6b 20 64 65 6c 65 67 61 74 65 20 64 65  back delegate de
10300 63 6c 61 72 61 74 69 6f 6e 2e 0d 0a 20 20 2f 2f  claration...  //
10310 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
10320 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
10330 22 63 6f 6e 74 65 78 74 22 3e 52 61 77 20 6e 61  "context">Raw na
10340 74 69 76 65 20 63 6f 6e 74 65 78 74 20 70 6f 69  tive context poi
10350 6e 74 65 72 20 66 6f 72 20 74 68 65 20 75 73 65  nter for the use
10360 72 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72  r function.</par
10370 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61  am>..  /// <para
10380 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 54 6f  m name="argc">To
10390 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  tal number of ar
103a0 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 75  guments to the u
103b0 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70  ser function.</p
103c0 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61  aram>..  /// <pa
103d0 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e  ram name="argv">
103e0 52 61 77 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  Raw native point
103f0 65 72 20 74 6f 20 74 68 65 20 61 72 72 61 79 20  er to the array 
10400 6f 66 20 72 61 77 20 6e 61 74 69 76 65 20 61 72  of raw native ar
10410 67 75 6d 65 6e 74 20 70 6f 69 6e 74 65 72 73 2e  gument pointers.
10420 3c 2f 70 61 72 61 6d 3e 0d 0a 23 69 66 20 21 50  </param>..#if !P
10430 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
10440 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d  RAMEWORK..  [Unm
10450 61 6e 61 67 65 64 46 75 6e 63 74 69 6f 6e 50 6f  anagedFunctionPo
10460 69 6e 74 65 72 28 43 61 6c 6c 69 6e 67 43 6f 6e  inter(CallingCon
10470 76 65 6e 74 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d  vention.Cdecl)].
10480 0a 23 65 6e 64 69 66 0d 0a 20 20 70 75 62 6c 69  .#endif..  publi
10490 63 20 64 65 6c 65 67 61 74 65 20 76 6f 69 64 20  c delegate void 
104a0 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 28 49  SQLiteCallback(I
104b0 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69  ntPtr context, i
104c0 6e 74 20 61 72 67 63 2c 20 49 6e 74 50 74 72 20  nt argc, IntPtr 
104d0 61 72 67 76 29 3b 0d 0a 20 20 2f 2f 2f 20 3c 73  argv);..  /// <s
104e0 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41  ummary>..  /// A
104f0 6e 20 69 6e 74 65 72 6e 61 6c 20 66 69 6e 61 6c  n internal final
10500 20 63 61 6c 6c 62 61 63 6b 20 64 65 6c 65 67 61   callback delega
10510 74 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 2e 0d  te declaration..
10520 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79  .  /// </summary
10530 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
10540 6e 61 6d 65 3d 22 63 6f 6e 74 65 78 74 22 3e 52  name="context">R
10550 61 77 20 63 6f 6e 74 65 78 74 20 70 6f 69 6e 74  aw context point
10560 65 72 20 66 6f 72 20 74 68 65 20 75 73 65 72 20  er for the user 
10570 66 75 6e 63 74 69 6f 6e 3c 2f 70 61 72 61 6d 3e  function</param>
10580 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
10590 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
105a0 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65 64 46 75  ..  [UnmanagedFu
105b0 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72 28 43 61  nctionPointer(Ca
105c0 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e  llingConvention.
105d0 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64 69 66 0d  Cdecl)]..#endif.
105e0 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65  .  internal dele
105f0 67 61 74 65 20 76 6f 69 64 20 53 51 4c 69 74 65  gate void SQLite
10600 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b 28 49 6e  FinalCallback(In
10610 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a  tPtr context);..
10620 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10630 0a 20 20 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20  .  /// Internal 
10640 63 61 6c 6c 62 61 63 6b 20 64 65 6c 65 67 61 74  callback delegat
10650 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
10660 6e 67 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ng collating seq
10670 75 65 6e 63 65 73 0d 0a 20 20 2f 2f 2f 20 3c 2f  uences..  /// </
10680 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20  summary>..  /// 
10690 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 75 73  <param name="pus
106a0 65 72 22 3e 4e 6f 74 20 75 73 65 64 3c 2f 70 61  er">Not used</pa
106b0 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ram>..  /// <par
106c0 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 31 22 3e 4c  am name="len1">L
106d0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
106e0 69 6e 67 20 70 76 31 3c 2f 70 61 72 61 6d 3e 0d  ing pv1</param>.
106f0 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61  .  /// <param na
10700 6d 65 3d 22 70 76 31 22 3e 50 6f 69 6e 74 65 72  me="pv1">Pointer
10710 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 73 74   to the first st
10720 72 69 6e 67 20 74 6f 20 63 6f 6d 70 61 72 65 3c  ring to compare<
10730 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c  /param>..  /// <
10740 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e 32  param name="len2
10750 22 3e 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  ">Length of the 
10760 73 74 72 69 6e 67 20 70 76 32 3c 2f 70 61 72 61  string pv2</para
10770 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
10780 20 6e 61 6d 65 3d 22 70 76 32 22 3e 50 6f 69 6e   name="pv2">Poin
10790 74 65 72 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ter to the secon
107a0 64 20 73 74 72 69 6e 67 20 74 6f 20 63 6f 6d 70  d string to comp
107b0 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f  are</param>..  /
107c0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
107d0 72 6e 73 20 2d 31 20 69 66 20 74 68 65 20 66 69  rns -1 if the fi
107e0 72 73 74 20 73 74 72 69 6e 67 20 69 73 20 6c 65  rst string is le
107f0 73 73 20 74 68 61 6e 20 74 68 65 20 73 65 63 6f  ss than the seco
10800 6e 64 2e 20 20 30 20 69 66 20 74 68 65 79 20 61  nd.  0 if they a
10810 72 65 20 65 71 75 61 6c 2c 20 6f 72 20 31 20 69  re equal, or 1 i
10820 66 20 74 68 65 20 66 69 72 73 74 20 73 74 72 69  f the first stri
10830 6e 67 20 69 73 20 67 72 65 61 74 65 72 0d 0a 20  ng is greater.. 
10840 20 2f 2f 2f 20 74 68 61 6e 20 74 68 65 20 73 65   /// than the se
10850 63 6f 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  cond.</returns>.
10860 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
10870 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
10880 0a 20 20 5b 55 6e 6d 61 6e 61 67 65 64 46 75 6e  .  [UnmanagedFun
10890 63 74 69 6f 6e 50 6f 69 6e 74 65 72 28 43 61 6c  ctionPointer(Cal
108a0 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 43  lingConvention.C
108b0 64 65 63 6c 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a  decl)]..#endif..
108c0 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67    internal deleg
108d0 61 74 65 20 69 6e 74 20 53 51 4c 69 74 65 43 6f  ate int SQLiteCo
108e0 6c 6c 61 74 69 6f 6e 28 49 6e 74 50 74 72 20 70  llation(IntPtr p
108f0 75 73 65 72 2c 20 69 6e 74 20 6c 65 6e 31 2c 20  user, int len1, 
10900 49 6e 74 50 74 72 20 70 76 31 2c 20 69 6e 74 20  IntPtr pv1, int 
10910 6c 65 6e 32 2c 20 49 6e 74 50 74 72 20 70 76 32  len2, IntPtr pv2
10920 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d  );....  /// <sum
10930 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65  mary>..  /// The
10940 20 74 79 70 65 20 6f 66 20 63 6f 6c 6c 61 74 69   type of collati
10950 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 2f  ng sequence..  /
10960 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10970 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 43 6f 6c   public enum Col
10980 6c 61 74 69 6f 6e 54 79 70 65 45 6e 75 6d 0d 0a  lationTypeEnum..
10990 20 20 7b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    {..    /// <su
109a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
109b0 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e  The built-in BIN
109c0 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ARY collating se
109d0 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  quence..    /// 
109e0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
109f0 42 69 6e 61 72 79 20 3d 20 31 2c 0d 0a 20 20 20  Binary = 1,..   
10a00 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
10a10 20 20 20 20 2f 2f 2f 20 54 68 65 20 62 75 69 6c      /// The buil
10a20 74 2d 69 6e 20 4e 4f 43 41 53 45 20 63 6f 6c 6c  t-in NOCASE coll
10a30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d 0a  ating sequence..
10a40 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10a50 79 3e 0d 0a 20 20 20 20 4e 6f 43 61 73 65 20 3d  y>..    NoCase =
10a60 20 32 2c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75   2,..    /// <su
10a70 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10a80 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 52 45 56  The built-in REV
10a90 45 52 53 45 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ERSE collating s
10aa0 65 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f  equence..    ///
10ab0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
10ac0 20 52 65 76 65 72 73 65 20 3d 20 33 2c 0d 0a 20   Reverse = 3,.. 
10ad0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
10ae0 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 63 75 73 74  ..    /// A cust
10af0 6f 6d 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  om user-defined 
10b00 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10b10 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ce..    /// </su
10b20 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 43 75 73 74  mmary>..    Cust
10b30 6f 6d 20 3d 20 30 2c 0d 0a 20 20 7d 0d 0a 0d 0a  om = 0,..  }....
10b40 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
10b50 0a 20 20 2f 2f 2f 20 54 68 65 20 65 6e 63 6f 64  .  /// The encod
10b60 69 6e 67 20 74 79 70 65 20 74 68 65 20 63 6f 6c  ing type the col
10b70 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
10b80 75 73 65 73 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  uses..  /// </su
10b90 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63  mmary>..  public
10ba0 20 65 6e 75 6d 20 43 6f 6c 6c 61 74 69 6f 6e 45   enum CollationE
10bb0 6e 63 6f 64 69 6e 67 45 6e 75 6d 0d 0a 20 20 7b  ncodingEnum..  {
10bc0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
10bd0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
10be0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
10bf0 6e 63 65 20 69 73 20 55 54 46 38 0d 0a 20 20 20  nce is UTF8..   
10c00 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10c10 0a 20 20 20 20 55 54 46 38 20 3d 20 31 2c 0d 0a  .    UTF8 = 1,..
10c20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10c30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  >..    /// The c
10c40 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
10c50 65 20 69 73 20 55 54 46 31 36 20 6c 69 74 74 6c  e is UTF16 littl
10c60 65 2d 65 6e 64 69 61 6e 0d 0a 20 20 20 20 2f 2f  e-endian..    //
10c70 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
10c80 20 20 55 54 46 31 36 4c 45 20 3d 20 32 2c 0d 0a    UTF16LE = 2,..
10c90 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10ca0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  >..    /// The c
10cb0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
10cc0 65 20 69 73 20 55 54 46 31 36 20 62 69 67 2d 65  e is UTF16 big-e
10cd0 6e 64 69 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ndian..    /// <
10ce0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 55  /summary>..    U
10cf0 54 46 31 36 42 45 20 3d 20 33 2c 0d 0a 20 20 7d  TF16BE = 3,..  }
10d00 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ....  /// <summa
10d10 72 79 3e 0d 0a 20 20 2f 2f 2f 20 41 20 73 74 72  ry>..  /// A str
10d20 75 63 74 20 64 65 73 63 72 69 62 69 6e 67 20 74  uct describing t
10d30 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  he collating seq
10d40 75 65 6e 63 65 20 61 20 66 75 6e 63 74 69 6f 6e  uence a function
10d50 20 69 73 20 65 78 65 63 75 74 69 6e 67 20 69 6e   is executing in
10d60 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
10d70 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 73 74 72  y>..  public str
10d80 75 63 74 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71  uct CollationSeq
10d90 75 65 6e 63 65 0d 0a 20 20 7b 0d 0a 20 20 20 20  uence..  {..    
10da0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
10db0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
10dc0 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
10dd0 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20 20 2f   sequence..    /
10de0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10df0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
10e00 20 4e 61 6d 65 3b 0d 0a 20 20 20 20 2f 2f 2f 20   Name;..    /// 
10e10 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
10e20 2f 2f 20 54 68 65 20 74 79 70 65 20 6f 66 20 63  // The type of c
10e30 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10e40 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  e..    /// </sum
10e50 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
10e60 63 20 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45  c CollationTypeE
10e70 6e 75 6d 20 54 79 70 65 3b 0d 0a 0d 0a 20 20 20  num Type;....   
10e80 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
10e90 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 65 78 74      /// The text
10ea0 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65   encoding of the
10eb0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
10ec0 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nce..    /// </s
10ed0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
10ee0 6c 69 63 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  lic CollationEnc
10ef0 6f 64 69 6e 67 45 6e 75 6d 20 45 6e 63 6f 64 69  odingEnum Encodi
10f00 6e 67 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ng;....    /// <
10f10 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
10f20 2f 20 43 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  / Context of the
10f30 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72   function that r
10f40 65 71 75 65 73 74 65 64 20 74 68 65 20 63 6f 6c  equested the col
10f50 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 0d  lating sequence.
10f60 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
10f70 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
10f80 6c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  l SQLiteFunction
10f90 20 5f 66 75 6e 63 3b 0d 0a 0d 0a 20 20 20 20 2f   _func;....    /
10fa0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10fb0 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
10fc0 62 61 73 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73  base collating s
10fd0 65 71 75 65 6e 63 65 20 74 6f 20 63 6f 6d 70 61  equence to compa
10fe0 72 65 20 74 77 6f 20 73 74 72 69 6e 67 73 0d 0a  re two strings..
10ff0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
11000 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
11010 61 6d 20 6e 61 6d 65 3d 22 73 31 22 3e 54 68 65  am name="s1">The
11020 20 66 69 72 73 74 20 73 74 72 69 6e 67 20 74 6f   first string to
11030 20 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e   compare</param>
11040 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
11050 20 6e 61 6d 65 3d 22 73 32 22 3e 54 68 65 20 73   name="s2">The s
11060 65 63 6f 6e 64 20 73 74 72 69 6e 67 20 74 6f 20  econd string to 
11070 63 6f 6d 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d  compare</param>.
11080 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
11090 73 3e 2d 31 20 69 66 20 73 31 20 69 73 20 6c 65  s>-1 if s1 is le
110a0 73 73 20 74 68 61 6e 20 73 32 2c 20 30 20 69 66  ss than s2, 0 if
110b0 20 73 31 20 69 73 20 65 71 75 61 6c 20 74 6f 20   s1 is equal to 
110c0 73 32 2c 20 61 6e 64 20 31 20 69 66 20 73 31 20  s2, and 1 if s1 
110d0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
110e0 73 32 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  s2</returns>..  
110f0 20 20 70 75 62 6c 69 63 20 69 6e 74 20 43 6f 6d    public int Com
11100 70 61 72 65 28 73 74 72 69 6e 67 20 73 31 2c 20  pare(string s1, 
11110 73 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20  string s2)..    
11120 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
11130 5f 66 75 6e 63 2e 5f 62 61 73 65 2e 43 6f 6e 74  _func._base.Cont
11140 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72  extCollateCompar
11150 65 28 45 6e 63 6f 64 69 6e 67 2c 20 5f 66 75 6e  e(Encoding, _fun
11160 63 2e 5f 63 6f 6e 74 65 78 74 2c 20 73 31 2c 20  c._context, s1, 
11170 73 32 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  s2);..    }.... 
11180 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11190 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20  ..    /// Calls 
111a0 74 68 65 20 62 61 73 65 20 63 6f 6c 6c 61 74 69  the base collati
111b0 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 63  ng sequence to c
111c0 6f 6d 70 61 72 65 20 74 77 6f 20 63 68 61 72 61  ompare two chara
111d0 63 74 65 72 20 61 72 72 61 79 73 0d 0a 20 20 20  cter arrays..   
111e0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
111f0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
11200 6e 61 6d 65 3d 22 63 31 22 3e 54 68 65 20 66 69  name="c1">The fi
11210 72 73 74 20 61 72 72 61 79 20 74 6f 20 63 6f 6d  rst array to com
11220 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  pare</param>..  
11230 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
11240 65 3d 22 63 32 22 3e 54 68 65 20 73 65 63 6f 6e  e="c2">The secon
11250 64 20 61 72 72 61 79 20 74 6f 20 63 6f 6d 70 61  d array to compa
11260 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  re</param>..    
11270 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 2d 31 20  /// <returns>-1 
11280 69 66 20 63 31 20 69 73 20 6c 65 73 73 20 74 68  if c1 is less th
11290 61 6e 20 63 32 2c 20 30 20 69 66 20 63 31 20 69  an c2, 0 if c1 i
112a0 73 20 65 71 75 61 6c 20 74 6f 20 63 32 2c 20 61  s equal to c2, a
112b0 6e 64 20 31 20 69 66 20 63 31 20 69 73 20 67 72  nd 1 if c1 is gr
112c0 65 61 74 65 72 20 74 68 61 6e 20 63 32 3c 2f 72  eater than c2</r
112d0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62  eturns>..    pub
112e0 6c 69 63 20 69 6e 74 20 43 6f 6d 70 61 72 65 28  lic int Compare(
112f0 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b  char[] c1, char[
11300 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ] c2)..    {..  
11310 20 20 20 20 72 65 74 75 72 6e 20 5f 66 75 6e 63      return _func
11320 2e 5f 62 61 73 65 2e 43 6f 6e 74 65 78 74 43 6f  ._base.ContextCo
11330 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 45 6e 63  llateCompare(Enc
11340 6f 64 69 6e 67 2c 20 5f 66 75 6e 63 2e 5f 63 6f  oding, _func._co
11350 6e 74 65 78 74 2c 20 63 31 2c 20 63 32 29 3b 0d  ntext, c1, c2);.
11360 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a  .    }..  }..}..